/*
 * Copyright 2013 Lothar Waßmann <LW@KARO-electronics.de>
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/dts-v1/;
#include "imx53-tx53.dtsi"
#include <dt-bindings/input/input.h>

/ {
	model = "Ka-Ro electronics TX53 module (LVDS)";
	compatible = "karo,tx53", "fsl,imx53";

	aliases {
		display = &lvds0;
		lvds0 = &lvds0;
		lvds1 = &lvds1;
	};

	backlight0: backlight0 {
		compatible = "pwm-backlight";
		pwms = <&pwm2 0 500000 0>;
		power-supply = <&reg_3v3>;
		brightness-levels = <
			  0  1  2  3  4  5  6  7  8  9
			 10 11 12 13 14 15 16 17 18 19
			 20 21 22 23 24 25 26 27 28 29
			 30 31 32 33 34 35 36 37 38 39
			 40 41 42 43 44 45 46 47 48 49
			 50 51 52 53 54 55 56 57 58 59
			 60 61 62 63 64 65 66 67 68 69
			 70 71 72 73 74 75 76 77 78 79
			 80 81 82 83 84 85 86 87 88 89
			 90 91 92 93 94 95 96 97 98 99
			100
		>;
		default-brightness-level = <50>;
	};

	backlight1: backlight1 {
		compatible = "pwm-backlight";
		pwms = <&pwm1 0 500000 0>;
		power-supply = <&reg_3v3>;
		brightness-levels = <
			  0  1  2  3  4  5  6  7  8  9
			 10 11 12 13 14 15 16 17 18 19
			 20 21 22 23 24 25 26 27 28 29
			 30 31 32 33 34 35 36 37 38 39
			 40 41 42 43 44 45 46 47 48 49
			 50 51 52 53 54 55 56 57 58 59
			 60 61 62 63 64 65 66 67 68 69
			 70 71 72 73 74 75 76 77 78 79
			 80 81 82 83 84 85 86 87 88 89
			 90 91 92 93 94 95 96 97 98 99
			100
		>;
		default-brightness-level = <50>;
	};

	regulators {
		reg_lcd_pwr0: regulator@5 {
			compatible = "regulator-fixed";
			reg = <5>;
			regulator-name = "LVDS0 POWER";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			regulator-boot-on;
		};

		reg_lcd_pwr1: regulator@6 {
			compatible = "regulator-fixed";
			reg = <6>;
			regulator-name = "LVDS1 POWER";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			regulator-boot-on;
		};
	};
};

&i2c2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c2>;
	status = "okay";

	touchscreen2: eeti@04 {
		compatible = "eeti,egalax_ts";
		reg = <0x04>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_eeti2>;
		interrupt-parent = <&gpio3>;
		interrupts = <23 0>;
		wakeup-gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
		linux,wakeup;
	};
};

&i2c3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c3>;
	status = "okay";

	sgtl5000: codec@0a {
		compatible = "fsl,sgtl5000";
		reg = <0x0a>;
		VDDA-supply = <&reg_2v5>;
		VDDIO-supply = <&reg_3v3>;
		clocks = <&mclk>;
	};

	touchscreen1: eeti@04 {
		compatible = "eeti,egalax_ts";
		reg = <0x04>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_eeti1>;
		interrupt-parent = <&gpio3>;
		interrupts = <22 0>;
		wakeup-gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>;
		linux,wakeup;
	};
};

&iomuxc {
	imx53-tx53-x13x {
		pinctrl_i2c2: i2c2-grp1 {
			fsl,pins = <
				MX53_PAD_KEY_ROW3__I2C2_SDA		0xc0000000
				MX53_PAD_KEY_COL3__I2C2_SCL		0xc0000000
			>;
		};

		pinctrl_lvds0: lvds0grp {
			fsl,pins = <
				MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 0x80000000
				MX53_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK 0x80000000
				MX53_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2 0x80000000
				MX53_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1 0x80000000
				MX53_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0 0x80000000
			>;
		};

		pinctrl_lvds1: lvds1grp {
			fsl,pins = <
				MX53_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3 0x80000000
				MX53_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2 0x80000000
				MX53_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK 0x80000000
				MX53_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1 0x80000000
				MX53_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0 0x80000000
			>;
		};

		pinctrl_pwm1: pwm1grp {
			fsl,pins = <MX53_PAD_GPIO_9__PWM1_PWMO 0x04>;
		};

		pinctrl_eeti1: eeti1grp {
			fsl,pins = <
				MX53_PAD_EIM_D22__GPIO3_22 0x1f0 /* Interrupt */
			>;
		};

		pinctrl_eeti2: eeti2grp {
			fsl,pins = <
				MX53_PAD_EIM_D23__GPIO3_23 0x1f0 /* Interrupt */
			>;
		};
	};
};

&ldb {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_lvds0 &pinctrl_lvds1>;
	status = "okay";

	lvds0: lvds-channel@0 {
		fsl,data-mapping = "jeida";
		fsl,data-width = <24>;
		status = "okay";

		display-timings {
			native-mode = <&lvds_timing0>;
			lvds_timing0: hsd100pxn1 {
				clock-frequency = <65000000>;
				hactive = <1024>;
				vactive = <768>;
				hback-porch = <220>;
				hsync-len = <60>;
				hfront-porch = <40>;
				vback-porch = <21>;
				vsync-len = <10>;
				vfront-porch = <7>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <1>;
				pixelclk-active = <0>;
			};
		};
	};

	lvds1: lvds-channel@1 {
		fsl,data-mapping = "jeida";
		fsl,data-width = <24>;
		status = "okay";

		display-timings {
			native-mode = <&lvds_timing1>;
			lvds_timing1: hsd100pxn1 {
				clock-frequency = <65000000>;
				hactive = <1024>;
				vactive = <768>;
				hback-porch = <220>;
				hsync-len = <60>;
				hfront-porch = <40>;
				vback-porch = <21>;
				vsync-len = <10>;
				vfront-porch = <7>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <1>;
				pixelclk-active = <0>;
			};
		};
	};
};

&pwm1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm1>;
};

&sata {
	status = "okay";
};
