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

/* NPCX7 series pinmux mapping table */
#include "npcx/npcx7/npcx7-alts-map.dtsi"
/* NPCX7 series mapping table between MIWU wui bits and source device */
#include "npcx/npcx7/npcx7-miwus-wui-map.dtsi"
/* NPCX7 series mapping table between MIWU groups and interrupts */
#include "npcx/npcx7/npcx7-miwus-int-map.dtsi"
/* NPCX7 series eSPI VW mapping table */
#include "npcx/npcx7/npcx7-espi-vws-map.dtsi"
/* NPCX7 series low-voltage io controls mapping table */
#include "npcx/npcx7/npcx7-lvol-ctrl-map.dtsi"
/* NPCX7 series power-switch-logic (PSL) io controls mapping table */
#include "npcx/npcx7/npcx7-psl-ctrl-map.dtsi"

/* Device tree declarations of npcx soc family */
#include "npcx.dtsi"

/ {
	def-io-conf-list {
		pinctrl-0 = <&alt0_gpio_no_spip
			   &alt0_gpio_no_fpip
			   &alt1_no_pwrgd
			   &alt1_no_lpc_espi
			   &alta_no_peci_en
			   &altd_npsl_in1_sl
			   &altd_npsl_in2_sl
			   &altd_psl_in3_sl
			   &altd_psl_in4_sl
			   &alt7_no_ksi0_sl
			   &alt7_no_ksi1_sl
			   &alt7_no_ksi2_sl
			   &alt7_no_ksi3_sl
			   &alt7_no_ksi4_sl
			   &alt7_no_ksi5_sl
			   &alt7_no_ksi6_sl
			   &alt7_no_ksi7_sl
			   &alt8_no_kso00_sl
			   &alt8_no_kso01_sl
			   &alt8_no_kso02_sl
			   &alt8_no_kso03_sl
			   &alt8_no_kso04_sl
			   &alt8_no_kso05_sl
			   &alt8_no_kso06_sl
			   &alt8_no_kso07_sl
			   &alt9_no_kso08_sl
			   &alt9_no_kso09_sl
			   &alt9_no_kso10_sl
			   &alt9_no_kso11_sl
			   &alt9_no_kso12_sl
			   &alt9_no_kso13_sl
			   &alt9_no_kso14_sl
			   &alt9_no_kso15_sl
			   &alta_no_kso16_sl
			   &alta_no_kso17_sl>;
	};

	soc {
		/* Specific soc devices in npcx7 series */
		itims: timer@400bc000 {
			compatible = "nuvoton,npcx-itim-timer";
			reg = <0x400bc000 0x2000
			       0x400be000 0x2000>;
			reg-names = "evt_itim", "sys_itim";
			clocks = <&pcc NPCX_CLOCK_BUS_LFCLK NPCX_PWDWN_CTL4 3
				  &pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL7 5>;
			interrupts = <46 1>; /* Event timer interrupt */
			label = "ITIM";
		};

		uart1: serial@400c4000 {
			compatible = "nuvoton,npcx-uart";
			reg = <0x400C4000 0x2000>;
			interrupts = <33 3>;
			clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL1 4>;
			pinctrl-0 = <&alta_uart1_sl1>; /* PIN10.11 */
			uart-rx = <&wui_cr_sin1>;
			status = "disabled";
			label = "UART_1";
		};

		uart2: serial@400c6000 {
			compatible = "nuvoton,npcx-uart";
			reg = <0x400C6000 0x2000>;
			interrupts = <32 3>;
			clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL7 6>;
			pinctrl-0 = <&alta_uart2_sl>; /* PIN75.86 */
			uart-rx = <&wui_cr_sin2>;
			status = "disabled";
			label = "UART_2";
		};

		/* Default clock and power settings in npcx9 series */
		pcc: clock-controller@4000d000 {
			clock-frequency = <DT_FREQ_M(90)>; /* OFMCLK runs at 90MHz */
			core-prescaler = <6>; /* CORE_CLK runs at 15MHz */
			apb1-prescaler = <6>; /* APB1_CLK runs at 15MHz */
			apb2-prescaler = <6>; /* APB2_CLK runs at 15MHz */
			apb3-prescaler = <6>; /* APB3_CLK runs at 15MHz */
			ram-pd-depth = <12>; /* Valid bit-depth of RAM_PDn reg */
		};

		/* Wake-up input source mapping for GPIOs in npcx7 series */
		gpio0: gpio@40081000 {
			wui-maps = <&wui_io00 &wui_io01 &wui_io02 &wui_io03
				    &wui_io04 &wui_io05 &wui_io06 &wui_io07>;
		};

		gpio1: gpio@40083000 {
			wui-maps = <&wui_io10 &wui_io11 &wui_none &wui_none
				    &wui_io14 &wui_io15 &wui_io16 &wui_io17>;
		};

		gpio2: gpio@40085000 {
			wui-maps = <&wui_io20 &wui_io21 &wui_io22 &wui_io23
				    &wui_io24 &wui_io25 &wui_io26 &wui_io27>;
		};

		gpio3: gpio@40087000 {
			wui-maps = <&wui_io30 &wui_io31 &wui_none &wui_io33
				    &wui_io34 &wui_none &wui_io36 &wui_io37>;
		};

		gpio4: gpio@40089000 {
			wui-maps = <&wui_io40 &wui_io41 &wui_io42 &wui_io43
				    &wui_io44 &wui_io45 &wui_io46 &wui_io47>;
		};

		gpio5: gpio@4008b000 {
			wui-maps = <&wui_io50 &wui_io51 &wui_io52 &wui_io53
				    &wui_io54 &wui_io55 &wui_io56 &wui_io57>;
		};

		gpio6: gpio@4008d000 {
			wui-maps = <&wui_io60 &wui_io61 &wui_io62 &wui_io63
				    &wui_io64 &wui_none &wui_none &wui_io67>;
		};

		gpio7: gpio@4008f000 {
			wui-maps = <&wui_io70 &wui_none &wui_io72 &wui_io73
				    &wui_io74 &wui_io75 &wui_io76 &wui_none>;
		};

		gpio8: gpio@40091000 {
			wui-maps = <&wui_io80 &wui_io81 &wui_io82 &wui_io83
				    &wui_none &wui_none &wui_io86 &wui_io87>;
		};

		gpio9: gpio@40093000 {
			wui-maps = <&wui_io90 &wui_io91 &wui_io92 &wui_io93
				    &wui_io94 &wui_io95 &wui_io96 &wui_io97>;
		};

		gpioa: gpio@40095000 {
			wui-maps = <&wui_ioa0 &wui_ioa1 &wui_ioa2 &wui_ioa3
				    &wui_ioa4 &wui_ioa5 &wui_ioa6 &wui_ioa7>;
		};

		gpiob: gpio@40097000 {
			wui-maps = <&wui_iob0 &wui_iob1 &wui_iob2 &wui_iob3
				    &wui_iob4 &wui_iob5 &wui_none &wui_iob7>;
		};

		gpioc: gpio@40099000 {
			wui-maps = <&wui_ioc0 &wui_ioc1 &wui_ioc2 &wui_ioc3
				    &wui_ioc4 &wui_ioc5 &wui_ioc6 &wui_ioc7>;
		};

		gpiod: gpio@4009b000 {
			wui-maps = <&wui_iod0 &wui_iod1 &wui_iod2 &wui_iod3
				    &wui_iod4 &wui_iod5 &wui_none &wui_iod7>;
		};

		gpioe: gpio@4009d000 {
			wui-maps = <&wui_ioe0 &wui_ioe1 &wui_ioe2 &wui_ioe3
				    &wui_ioe4 &wui_ioe5 &wui_none &wui_none>;
		};

		gpiof: gpio@4009f000 {
			wui-maps = <&wui_iof0 &wui_iof1 &wui_iof2 &wui_iof3
				    &wui_iof4 &wui_iof5 &wui_none &wui_none>;
		};

		/* Supported channels for ADC0 in npcx7 series */
		adc0: adc@400d1000 {
			pinctrl-0 = <&alt6_adc0_sl   /* ADC0 - PIN45 */
				     &alt6_adc1_sl   /* ADC1 - PIN44 */
				     &alt6_adc2_sl   /* ADC2 - PIN43 */
				     &alt6_adc3_sl   /* ADC3 - PIN42 */
				     &alt6_adc4_sl   /* ADC4 - PIN41 */
				     &altf_adc5_sl   /* ADC5 - PIN37 */
				     &altf_adc6_sl   /* ADC6 - PIN34 */
				     &altf_adc7_sl   /* ADC7 - PINE1 */
				     &altf_adc8_sl   /* ADC8 - PINF1 */
				     &altf_adc9_sl>; /* ADC9 - PINF0 */
			threshold-reg-offset = <0x14>;
		};
	};

	soc-id {
		chip-id = <0x07>;
		revision-reg = <0x00007FFC 1>;
	};

	booter-variant {
		hif-type-auto;
	};
};
