/*
 *    Copyright (c) 2021 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

/ {
	chosen {
		nordic,pm-ext-flash = &mx25r64;
	};

	/*
	* By default, PWM module is only configured for led0 (LED1 on the board).
	* The lighting-app, however, uses LED2 to show the state of the lighting,
	* including its brightness level.
	*/
	aliases {
		pwm-led1 = &pwm_led1;
	};

	pwmleds {
		compatible = "pwm-leds";
		pwm_led1: pwm_led_1 {
			pwms = < &pwm0 1 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
		};
	};

	soc {
		/* Add a flash controller which has the compatible
		 * 'zephyr,sim-flash'. This will ensure that the flash
		 * simulator can use it. None of the other properties in this
		 * node is used for anything.
		 */
		nordic_ram_flash_controller: nordic_ram-flash-controller@0 {
			compatible = "zephyr,sim-flash";
			reg = <0x00000000 DT_SIZE_K(40)>;
			#address-cells = <1>;
			#size-cells = <1>;
			erase-value = <0xff>;
			label = "nordic_ram_flash_flash_controller";

			/* This node label must match that used in the flash
			 * simulator.
			 */
			flash_sim0: flash_sim@0 {
				status = "okay";
				compatible = "soc-nv-flash";
				label = "simulated_flash";
				erase-block-size = <4096>;
				write-block-size = <4>;
				reg = <0x00000000 DT_SIZE_K(256)>;

				partitions {
					compatible = "fixed-partitions";
					#address-cells = <1>;
					#size-cells = <1>;

					/* This partition must be defined for
					 * MCUboot to find the partition ID
					 * of the primary slot for image 1,
					 * which is stored in this partition.
					 */
					slot2_partition: partition@0 {
						label = "image-2";
						reg = <0x00000000 0x00000A000>;
					};
				};
			};
		};
	};

};

&pwm0 {
	pinctrl-0 = <&pwm0_default_alt>;
	pinctrl-1 = <&pwm0_sleep_alt>;
	pinctrl-names = "default", "sleep";
};

&pinctrl {
	pwm0_default_alt: pwm0_default_alt {
		group1 {
			psels = <NRF_PSEL(PWM_OUT1, 0, 29)>;
			nordic,invert;
		};
	};

	pwm0_sleep_alt: pwm0_sleep_alt {
		group1 {
			psels = <NRF_PSEL(PWM_OUT1, 0, 29)>;
			low-power-enable;
		};
	};

};
