/*
 * 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";
		};
	};
};

/* 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";
	};
};
