// SPDX-License-Identifier: GPL-2.0
/*
 * Common support for CompuLab CM-T3x30 CoMs
 */

#include "omap3-cm-t3x.dtsi"

/ {
	cpus {
		cpu@0 {
			cpu0-supply = <&vcc>;
		};
	};

	sound {
		compatible = "ti,omap-twl4030";
		ti,model = "cm-t35";

		ti,mcbsp = <&mcbsp2>;
	};
};

&omap3_pmx_core {

	smsc1_pins: smsc1-pins {
		pinctrl-single,pins = <
			OMAP3_CORE1_IOPAD(0x20b8, PIN_OUTPUT | MUX_MODE0)	/* gpmc_ncs5.gpmc_ncs5 */
			OMAP3_CORE1_IOPAD(0x219a, PIN_INPUT_PULLUP | MUX_MODE4)	/* uart3_cts_rctx.gpio_163 */
		>;
	};

 	hsusb0_pins: hsusb0-pins {
		pinctrl-single,pins = <
			OMAP3_CORE1_IOPAD(0x21a2, PIN_OUTPUT | MUX_MODE0)		/* hsusb0_clk.hsusb0_clk */
			OMAP3_CORE1_IOPAD(0x21a4, PIN_OUTPUT | MUX_MODE0)		/* hsusb0_stp.hsusb0_stp */
			OMAP3_CORE1_IOPAD(0x21a6, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_dir.hsusb0_dir */
			OMAP3_CORE1_IOPAD(0x21a8, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_nxt.hsusb0_nxt */
			OMAP3_CORE1_IOPAD(0x21aa, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data0.hsusb2_data0 */
			OMAP3_CORE1_IOPAD(0x21ac, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data1.hsusb0_data1 */
			OMAP3_CORE1_IOPAD(0x21ae, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data2.hsusb0_data2 */
			OMAP3_CORE1_IOPAD(0x21b0, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data7.hsusb0_data3 */
			OMAP3_CORE1_IOPAD(0x21b2, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data7.hsusb0_data4 */
			OMAP3_CORE1_IOPAD(0x21b4, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data7.hsusb0_data5 */
			OMAP3_CORE1_IOPAD(0x21b6, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data7.hsusb0_data6 */
			OMAP3_CORE1_IOPAD(0x21b8, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* hsusb0_data7.hsusb0_data7 */
		>;
	};
};

#include "omap-gpmc-smsc911x.dtsi"

&gpmc {
	ranges = <5 0 0x2c000000 0x01000000>, /* CM-T3x30 SMSC9x Eth */
		 <0 0 0x00000000 0x01000000>; /* CM-T3x NAND */

	smsc1: ethernet@gpmc {
		compatible = "smsc,lan9221", "smsc,lan9115";
		pinctrl-names = "default";
		pinctrl-0 = <&smsc1_pins>;
		interrupt-parent = <&gpio6>;
		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
		reg = <5 0 0xff>;
	};
};

&i2c1 {
	twl: twl@48 {
		reg = <0x48>;
		interrupts = <7>; /* SYS_NIRQ cascaded to intc */
		interrupt-parent = <&intc>;

		twl_audio: audio {
			compatible = "ti,twl4030-audio";
			codec {
			};
		};
	};
};

#include "twl4030.dtsi"
#include "twl4030_omap3.dtsi"
#include <dt-bindings/input/input.h>

&venc {
	vdda-supply = <&vdac>;
};

&mmc1 {
	vmmc-supply = <&vmmc1>;
};

&twl_gpio {
	ti,use-leds;
	/* pullups: BIT(0) */
	ti,pullups = <0x000001>;
};

&twl_keypad {
	linux,keymap = <
				MATRIX_KEY(0x00, 0x01, KEY_A)
				MATRIX_KEY(0x00, 0x02, KEY_B)
				MATRIX_KEY(0x00, 0x03, KEY_LEFT)

				MATRIX_KEY(0x01, 0x01, KEY_UP)
				MATRIX_KEY(0x01, 0x02, KEY_ENTER)
				MATRIX_KEY(0x01, 0x03, KEY_DOWN)

				MATRIX_KEY(0x02, 0x01, KEY_RIGHT)
				MATRIX_KEY(0x02, 0x02, KEY_C)
				MATRIX_KEY(0x02, 0x03, KEY_D)
			>;
};

&hsusb1_phy {
	reset-gpios = <&twl_gpio 6 GPIO_ACTIVE_LOW>;
};

&hsusb2_phy {
	reset-gpios = <&twl_gpio 7 GPIO_ACTIVE_LOW>;
};

&usb_otg_hs {
	pinctrl-names = "default";
	pinctrl-0 = <&hsusb0_pins>;
	interface-type = <0>;
	usb-phy = <&usb2_phy>;
	phys = <&usb2_phy>;
	phy-names = "usb2-phy";
	mode = <3>;
	power = <50>;
};