/*
 * Device Tree for DA850 EVM board
 *
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation, version 2.
 */
/dts-v1/;
#include "da850.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	compatible = "ti,da850-evm", "ti,da850";
	model = "DA850/AM1808/OMAP-L138 EVM";

	soc@1c00000 {
		pmx_core: pinmux@14120 {
			status = "okay";

			mcasp0_pins: pinmux_mcasp0_pins {
				pinctrl-single,bits = <
					/*
					 * AHCLKX, ACLKX, AFSX, AHCLKR, ACLKR,
					 * AFSR, AMUTE
					 */
					0x00 0x11111111 0xffffffff
					/* AXR11, AXR12 */
					0x04 0x00011000 0x000ff000
				>;
			};
			nand_pins: nand_pins {
				pinctrl-single,bits = <
					/* EMA_WAIT[0], EMA_OE, EMA_WE, EMA_CS[4], EMA_CS[3] */
					0x1c 0x10110110  0xf0ff0ff0
					/*
					 * EMA_D[0], EMA_D[1], EMA_D[2],
					 * EMA_D[3], EMA_D[4], EMA_D[5],
					 * EMA_D[6], EMA_D[7]
					 */
					0x24 0x11111111  0xffffffff
					/* EMA_A[1], EMA_A[2] */
					0x30 0x01100000  0x0ff00000
				>;
			};
		};
		serial0: serial@42000 {
			status = "okay";
		};
		serial1: serial@10c000 {
			status = "okay";
		};
		serial2: serial@10d000 {
			status = "okay";
		};
		rtc0: rtc@23000 {
			status = "okay";
		};
		i2c0: i2c@22000 {
			status = "okay";
			clock-frequency = <100000>;
			pinctrl-names = "default";
			pinctrl-0 = <&i2c0_pins>;

			tps: tps@48 {
				reg = <0x48>;
			};
			tlv320aic3106: tlv320aic3106@18 {
				#sound-dai-cells = <0>;
				compatible = "ti,tlv320aic3106";
				reg = <0x18>;
				status = "okay";

				/* Regulators */
				IOVDD-supply = <&vdcdc2_reg>;
				/* Derived from VBAT: Baseboard 3.3V / 1.8V */
				AVDD-supply = <&vbat>;
				DRVDD-supply = <&vbat>;
				DVDD-supply = <&vbat>;
			};
			tca6416: gpio@20 {
				compatible = "ti,tca6416";
				reg = <0x20>;
				gpio-controller;
				#gpio-cells = <2>;
			};
		};
		wdt: wdt@21000 {
			status = "okay";
		};
		mmc0: mmc@40000 {
			max-frequency = <50000000>;
			bus-width = <4>;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&mmc0_pins>;
		};
		spi1: spi@30e000 {
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&spi1_pins &spi1_cs0_pin>;
			flash: m25p80@0 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "m25p64";
				spi-max-frequency = <30000000>;
				m25p,fast-read;
				reg = <0>;
				partition@0 {
					label = "U-Boot-SPL";
					reg = <0x00000000 0x00010000>;
					read-only;
				};
				partition@1 {
					label = "U-Boot";
					reg = <0x00010000 0x00080000>;
					read-only;
				};
				partition@2 {
					label = "U-Boot-Env";
					reg = <0x00090000 0x00010000>;
					read-only;
				};
				partition@3 {
					label = "Kernel";
					reg = <0x000a0000 0x00280000>;
				};
				partition@4 {
					label = "Filesystem";
					reg = <0x00320000 0x00400000>;
				};
				partition@5 {
					label = "MAC-Address";
					reg = <0x007f0000 0x00010000>;
					read-only;
				};
			};
		};
		mdio: mdio@224000 {
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&mdio_pins>;
			bus_freq = <2200000>;
		};
		eth0: ethernet@220000 {
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&mii_pins>;
		};
		gpio: gpio@226000 {
			status = "okay";
		};
	};
	vbat: fixedregulator0 {
		compatible = "regulator-fixed";
		regulator-name = "vbat";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-boot-on;
	};

	sound {
		compatible = "simple-audio-card";
		simple-audio-card,name = "DA850/OMAP-L138 EVM";
		simple-audio-card,widgets =
			"Line", "Line In",
			"Line", "Line Out";
		simple-audio-card,routing =
			"LINE1L", "Line In",
			"LINE1R", "Line In",
			"Line Out", "LLOUT",
			"Line Out", "RLOUT";
		simple-audio-card,format = "dsp_b";
		simple-audio-card,bitclock-master = <&link0_codec>;
		simple-audio-card,frame-master = <&link0_codec>;
		simple-audio-card,bitclock-inversion;

		simple-audio-card,cpu {
			sound-dai = <&mcasp0>;
			system-clock-frequency = <24576000>;
		};

		link0_codec: simple-audio-card,codec {
			sound-dai = <&tlv320aic3106>;
			system-clock-frequency = <24576000>;
		};
	};
};

/include/ "tps6507x.dtsi"

&tps {
	vdcdc1_2-supply = <&vbat>;
	vdcdc3-supply = <&vbat>;
	vldo1_2-supply = <&vbat>;

	regulators {
		vdcdc1_reg: regulator@0 {
			regulator-name = "VDCDC1_3.3V";
			regulator-min-microvolt = <3150000>;
			regulator-max-microvolt = <3450000>;
			regulator-always-on;
			regulator-boot-on;
		};

		vdcdc2_reg: regulator@1 {
			regulator-name = "VDCDC2_3.3V";
			regulator-min-microvolt = <1710000>;
			regulator-max-microvolt = <3450000>;
			regulator-always-on;
			regulator-boot-on;
			ti,defdcdc_default = <1>;
		};

		vdcdc3_reg: regulator@2 {
			regulator-name = "VDCDC3_1.2V";
			regulator-min-microvolt = <950000>;
			regulator-max-microvolt = <1350000>;
			regulator-always-on;
			regulator-boot-on;
			ti,defdcdc_default = <1>;
		};

		ldo1_reg: regulator@3 {
			regulator-name = "LDO1_1.8V";
			regulator-min-microvolt = <1710000>;
			regulator-max-microvolt = <1890000>;
			regulator-always-on;
			regulator-boot-on;
		};

		ldo2_reg: regulator@4 {
			regulator-name = "LDO2_1.2V";
			regulator-min-microvolt = <1140000>;
			regulator-max-microvolt = <1320000>;
			regulator-always-on;
			regulator-boot-on;
		};
	};
};

&mcasp0 {
	#sound-dai-cells = <0>;
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&mcasp0_pins>;

	op-mode = <0>;          /* MCASP_IIS_MODE */
	tdm-slots = <2>;
	/* 4 serializer */
	serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
		0 0 0 0
		0 0 0 0
		0 0 0 1
		2 0 0 0
	>;
	tx-num-evt = <32>;
	rx-num-evt = <32>;
};

&edma0 {
	ti,edma-reserved-slot-ranges = <32 50>;
};

&edma1 {
	ti,edma-reserved-slot-ranges = <32 90>;
};

&aemif {
	pinctrl-names = "default";
	pinctrl-0 = <&nand_pins>;
	status = "ok";
	cs3 {
		#address-cells = <2>;
		#size-cells = <1>;
		clock-ranges;
		ranges;

		ti,cs-chipselect = <3>;

		nand@2000000,0 {
			compatible = "ti,davinci-nand";
			#address-cells = <1>;
			#size-cells = <1>;
			reg = <0 0x02000000 0x02000000
			       1 0x00000000 0x00008000>;

			ti,davinci-chipselect = <1>;
			ti,davinci-mask-ale = <0>;
			ti,davinci-mask-cle = <0>;
			ti,davinci-mask-chipsel = <0>;
			ti,davinci-ecc-mode = "hw";
			ti,davinci-ecc-bits = <4>;
			ti,davinci-nand-use-bbt;
		};
	};
};

&vpif {
	pinctrl-names = "default";
	pinctrl-0 = <&vpif_capture_pins>, <&vpif_display_pins>;
	status = "okay";
};
