/*
 * Copyright (c) 2021, Microchip Technology Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <microchip/mec172xnsz.dtsi>
#include <microchip/mec172x/mec172xnsz-pinctrl.dtsi>

/ {
	model = "Microchip MEC172XEVB_ASSY6906 evaluation board";
	compatible = "microchip,mec172xevb_assy6906", "microchip,mec172xnsz";

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,console = &uart1;
	};

	aliases {
		led0 = &led4;
		led1 = &led3;
		i2c0 = &i2c_smb_0;
		i2c-0 = &i2c_smb_0;
		i2c1 = &i2c_smb_1;
		i2c7 = &i2c_smb_2;
		pwm-0 = &pwm0;
		watchdog0 = &wdog;
	};

	leds {
		compatible = "gpio-leds";
		led4: led_0 {
			/* GPIO241/CMP_VOUT0/PWM0_ALT on schematic,
			 * LED4 on silkscreen.
			 */
			gpios = <MCHP_GPIO_DECODE_241 GPIO_ACTIVE_HIGH>;
			label = "LED 4";
		};
		led3: led_1 {
			/* GPIO175/CMP_VOUT1/PWM8_ALT on schematic,
			 * LED5 on silkscreen.
			 */
			gpios = <MCHP_GPIO_DECODE_175 GPIO_ACTIVE_HIGH>;
			label = "LED 5";
		};
	};
};

&cpu0 {
	clock-frequency = <96000000>;
	status = "okay";
};

/* Initialize ECIA. Does not initialize child devices */
&ecia {
	status = "okay";
};

/* Enable aggregated GIRQ24 and GIRQ25 for eSPI virtual wires interrupts */
&girq24 {
	status = "okay";
};

&girq25 {
	status = "okay";
};

&rtimer {
	status = "okay";
};

&pcr {
	status = "okay";
};

&uart1 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&uart1_tx_gpio170 &uart1_rx_gpio171>;
	pinctrl-names = "default";
};

&adc0 {
	status = "okay";
	pinctrl-0 = <&adc00_gpio200 &adc03_gpio203
		     &adc04_gpio204 &adc05_gpio205>;
	pinctrl-1 = <&adc00_gpio200_sleep &adc03_gpio203_sleep
		     &adc04_gpio204_sleep &adc05_gpio205_sleep>;
	pinctrl-names = "default", "sleep";
};

&espi0 {
	status = "okay";
	pinctrl-0 = < &espi_reset_n_gpio061 &espi_cs_n_gpio066
		      &espi_alert_n_gpio063 &espi_clk_gpio065
		      &espi_io0_gpio070 &espi_io1_gpio071
		      &espi_io2_gpio072 &espi_io3_gpio073 >;
	pinctrl-names = "default";
};

/* enable various eSPI child devices (host facing) */
&kbc0 {
	status = "okay";
};

&acpi_ec0 {
	status = "okay";
};

&acpi_ec1 {
	status = "okay";
};

&emi0 {
	status = "okay";
};

&p80bd0 {
	status = "okay";
};

/* I2C */
&i2c_smb_0 {
	status = "okay";
	port_sel = <0>;

	pinctrl-0 = < &i2c00_scl_gpio004 &i2c00_sda_gpio003 >;
	pinctrl-names = "default";
};

&i2c00_scl_gpio004 {
	drive-open-drain;
	output-enable;
	output-high;
};

&i2c00_sda_gpio003 {
	drive-open-drain;
	output-enable;
	output-high;
};

&i2c_smb_1 {
	status = "okay";
	port_sel = <1>;
	pinctrl-0 = <&i2c01_scl_gpio131 &i2c01_sda_gpio130>;
	pinctrl-names = "default";

	pca9555@26 {
		compatible = "nxp,pca95xx";

		/* Depends on JP53 for device address.
		 * Pin 1-2 = A0, pin 3-4 = A1, pin 5-6 = A2.
		 * Address is: 0100<A2><A1><A0>b.
		 *
		 * Default has pin 1-2 on JP53 connected,
		 * resulting in device address 0x26.
		 */
		reg = <0x26>;

		gpio-controller;
		#gpio-cells = <2>;
	};
};

&i2c01_scl_gpio131 {
	drive-open-drain;
	output-enable;
	output-high;
};

&i2c01_sda_gpio130 {
	drive-open-drain;
	output-enable;
	output-high;
};

&i2c_smb_2 {
	status = "okay";
	port_sel = <7>;
	pinctrl-0 = <&i2c07_scl_gpio013 &i2c07_sda_gpio012>;
	pinctrl-names = "default";
};

&i2c07_scl_gpio013 {
	drive-open-drain;
	output-enable;
	output-high;
};

&i2c07_sda_gpio012 {
	drive-open-drain;
	output-enable;
	output-high;
};

&spi0 {
	status = "okay";
	compatible = "microchip,xec-qmspi-ldma";
	clock-frequency = <4000000>;
	lines = <4>;
	chip-select = <0>;

	pinctrl-0 = < &shd_cs0_n_gpio055
		      &shd_clk_gpio056
		      &shd_io0_gpio223
		      &shd_io1_gpio224
		      &shd_io2_gpio227
		      &shd_io3_gpio016 >;
	pinctrl-names = "default";
};

&kscan0 {
	status = "okay";

	pinctrl-0 = < &ksi0_gpio017 &ksi1_gpio020 &ksi2_gpio021 &ksi3_gpio026
		      &ksi4_gpio027 &ksi5_gpio030 &ksi6_gpio031 &ksi7_gpio032
		      &kso00_gpio040 &kso01_gpio045 &kso02_gpio046 &kso03_gpio047
		      &kso04_gpio107 &kso05_gpio112 &kso06_gpio113 &kso07_gpio120
		      &kso08_gpio121 &kso09_gpio122 &kso10_gpio123 &kso11_gpio124
		      &kso12_gpio125 &kso13_gpio126 >;
	pinctrl-1 = < &ksi0_gpio017_sleep &ksi1_gpio020_sleep &ksi2_gpio021_sleep
		      &ksi3_gpio026_sleep &ksi4_gpio027_sleep &ksi5_gpio030_sleep
		      &ksi6_gpio031_sleep &ksi7_gpio032_sleep &kso00_gpio040_sleep
		      &kso01_gpio045_sleep &kso02_gpio046_sleep &kso03_gpio047_sleep
		      &kso04_gpio107_sleep &kso05_gpio112_sleep &kso06_gpio113_sleep
		      &kso07_gpio120_sleep &kso08_gpio121_sleep &kso09_gpio122_sleep
		      &kso10_gpio123_sleep &kso11_gpio124_sleep &kso12_gpio125_sleep
		      &kso13_gpio126_sleep >;
	pinctrl-names = "default", "sleep";
};

&ksi0_gpio017 {
	bias-pull-up;
};

&ksi1_gpio020 {
	bias-pull-up;
};

&ksi2_gpio021 {
	bias-pull-up;
};

&ksi3_gpio026 {
	bias-pull-up;
};

&ksi4_gpio027 {
	bias-pull-up;
};

&ksi5_gpio030 {
	bias-pull-up;
};

&ksi6_gpio031 {
	bias-pull-up;
};

&ksi7_gpio032 {
	bias-pull-up;
};

&pwm0 {
	status = "okay";
	pinctrl-0 = <&pwm0_gpio053>;
	pinctrl-names = "default";
};

&tach0 {
	status = "okay";
	pinctrl-0 = <&tach0_gpio050>;
	pinctrl-names = "default";
};

&ps2_0 {
	status = "okay";
	pinctrl-0 = <&ps2_clk0a_gpio114 &ps2_dat0a_gpio115>;
	pinctrl-1 = <&ps2_clk0a_gpio114_sleep &ps2_dat0a_gpio115_sleep>;
	pinctrl-names = "default", "sleep";
};

&timer5 {
	status = "okay";
};
