/*
 * Copyright (c) 2020 Nuvoton Technology Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nuvoton/npcx7m6fb.dtsi>
#include "npcx7m6fb_evb-pinctrl.dtsi"

/ {
	model = "Nuvoton NPCX7M6FB evaluation board";

	chosen {
		zephyr,sram = &sram0;
		zephyr,console = &uart1;
		zephyr,flash = &flash0;
		zephyr,keyboard-scan = &kscan_input;
	};

	aliases {
		/* For samples/basic/blinky_pwm */
		pwm-led0 = &pwm_led0_green;
		/* For pwm test suites */
		pwm-0 = &pwm6;
		/* For i2c test suites */
		i2c-0 = &i2c0_0;
		watchdog0 = &twd0;
		peci-0 = &peci0;
		/* For samples/drivers/spi_flash */
		spi-flash0 = &int_flash;
		/* For kscan test suites */
		kscan0 = &kscan_input;
	};

	pwmleds {
		compatible = "pwm-leds";
		pwm_led0_green: pwm_led_0 {
			pwms = <&pwm6 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User D7 green";
		};
	};

	power-states {
		suspend_to_idle0: suspend-to-idle0 {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			substate-id = <0>;
			min-residency-us = <1000>;
		};

		suspend_to_idle1: suspend-to-idle1 {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			substate-id = <1>;
			min-residency-us = <201000>;
		};
	};
};

&cpu0 {
	cpu-power-states = <&suspend_to_idle0 &suspend_to_idle1>;
};

/* Overwrite default device properties with overlays in board dt file here. */
&uart1 {
	status = "okay";
	current-speed = <115200>;
	/* Use UART1_SL2 ie. PIN64.65 */
	pinctrl-0 = <&uart1_2_sin_sout_gp64_65>;
	pinctrl-names = "default";
};

&pwm6 {
	status = "okay";
	pinctrl-0 = <&pwm6_gpc0>;
	pinctrl-names = "default";
};

&adc0 {
	status = "okay";
	/* Use adc0 channel 0 and 2 for 'adc_api' driver tests */
	pinctrl-0 = <&adc0_chan0_gp45
		     &adc0_chan2_gp43>;
	pinctrl-names = "default";
};

&espi0 {
	status = "okay";
	pinctrl-0 = <&espi_lpc_gp46_47_51_52_53_54_55_57>;
	pinctrl-names = "default";
};

&i2c0_0 {
	status = "okay";
	pinctrl-0 = <&i2c0_0_sda_scl_gpb4_b5>;
	pinctrl-names = "default";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&i2c_ctrl0 {
	status = "okay";
};

&tach1 {
	status = "okay";
	pinctrl-0 = <&ta1_1_in_gp40>;
	pinctrl-names = "default";
	port = <NPCX_TACH_PORT_A>; /* port-A is selected */
	sample-clk = <NPCX_TACH_FREQ_LFCLK>; /* Use LFCLK as sampling clock */
	pulses-per-round = <1>; /* number of pulses per round of encoder */
};

&peci0 {
	status = "okay";
	pinctrl-0 = <&peci_dat_gp81>;
	pinctrl-names = "default";
};

&kbd {
	/* Demonstrate a 6 x 8 keyboard matrix on evb */
	pinctrl-0 = <&ksi0_gp31 /* KSI0 PIN31 */
		     &ksi1_gp30 /* KSI1 PIN30 */
		     &ksi2_gp27 /* KSI2 PIN27 */
		     &ksi3_gp26 /* KSI3 PIN26 */
		     &ksi4_gp25 /* KSI4 PIN25 */
		     &ksi5_gp24 /* KSI5 PIN24 */
		     &ksi6_gp23 /* KSI6 PIN23 */
		     &ksi7_gp22 /* KSI7 PIN22 */
		     &kso00_gp21 /* KSO00 PIN21 */
		     &kso01_gp20 /* KSO01 PIN20 */
		     &kso02_gp17 /* KSO02 PIN17 */
		     &kso03_gp16 /* KSO03 PIN16 */
		     &kso04_gp15 /* KSO04 PIN15 */
		     &kso05_gp14 /* KSO05 PIN14 */
		     >;
	pinctrl-names = "default";
	row-size = <8>;
	col-size = <6>;
	status = "okay";

	kscan_input: kscan-input {
		compatible = "zephyr,kscan-input";
	};
};
