/*
 * Copyright 2012 Armadeus Systems - <support@armadeus.com>
 *
 * 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 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/* APF28Dev is a docking board for the APF28 SOM */
#include "imx28-apf28.dts"

/ {
	model = "Armadeus Systems APF28Dev docking/development board";
	compatible = "armadeus,imx28-apf28dev", "armadeus,imx28-apf28", "fsl,imx28";

	apb@80000000 {
		apbh@80000000 {
			ssp0: ssp@80010000 {
				compatible = "fsl,imx28-mmc";
				pinctrl-names = "default";
				pinctrl-0 = <&mmc0_4bit_pins_a
					&mmc0_cd_cfg &mmc0_sck_cfg>;
				bus-width = <4>;
				status = "okay";
			};

			ssp2: ssp@80014000 {
				compatible = "fsl,imx28-spi";
				pinctrl-names = "default";
				pinctrl-0 = <&spi2_pins_a>;
				status = "okay";
			};

			pinctrl@80018000 {
				pinctrl-names = "default";
				pinctrl-0 = <&hog_pins_apf28dev>;

				hog_pins_apf28dev: hog@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_LCD_D16__GPIO_1_16
						MX28_PAD_LCD_D17__GPIO_1_17
						MX28_PAD_LCD_D18__GPIO_1_18
						MX28_PAD_LCD_D19__GPIO_1_19
						MX28_PAD_LCD_D20__GPIO_1_20
						MX28_PAD_LCD_D21__GPIO_1_21
						MX28_PAD_LCD_D22__GPIO_1_22
						MX28_PAD_GPMI_CE1N__GPIO_0_17
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				lcdif_pins_apf28dev: lcdif-apf28dev@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_LCD_RD_E__LCD_VSYNC
						MX28_PAD_LCD_WR_RWN__LCD_HSYNC
						MX28_PAD_LCD_RS__LCD_DOTCLK
						MX28_PAD_LCD_CS__LCD_ENABLE
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				usb0_otg_apf28dev: otg-apf28dev@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_LCD_D23__GPIO_1_23
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};
			};

			lcdif@80030000 {
				pinctrl-names = "default";
				pinctrl-0 = <&lcdif_16bit_pins_a
						&lcdif_pins_apf28dev>;
				display = <&display0>;
				status = "okay";

				display0: display0 {
					bits-per-pixel = <16>;
					bus-width = <16>;

					display-timings {
						native-mode = <&timing0>;
						timing0: timing0 {
							clock-frequency = <33000033>;
							hactive = <800>;
							vactive = <480>;
							hback-porch = <96>;
							hfront-porch = <96>;
							vback-porch = <20>;
							vfront-porch = <21>;
							hsync-len = <64>;
							vsync-len = <4>;
							hsync-active = <1>;
							vsync-active = <1>;
							de-active = <1>;
							pixelclk-active = <0>;
						};
					};
				};
			};

			can0: can@80032000 {
				pinctrl-names = "default";
				pinctrl-0 = <&can0_pins_a>;
				xceiver-supply = <&reg_can0_vcc>;
				status = "okay";
			};
		};

		apbx@80040000 {
			lradc@80050000 {
				fsl,lradc-touchscreen-wires = <4>;
				status = "okay";
			};

			i2c0: i2c@80058000 {
				pinctrl-names = "default";
				pinctrl-0 = <&i2c0_pins_a>;
				status = "okay";
			};

			pwm: pwm@80064000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pwm3_pins_a &pwm4_pins_a>;
				status = "okay";
			};

			auart0: serial@8006a000 {
				pinctrl-names = "default";
				pinctrl-0 = <&auart0_pins_a>;
				fsl,uart-has-rtscts;
				status = "okay";
			};

			usbphy0: usbphy@8007c000 {
				status = "okay";
			};

			usbphy1: usbphy@8007e000 {
				status = "okay";
			};
		};
	};

	ahb@80080000 {
		usb0: usb@80080000 {
			pinctrl-names = "default";
			pinctrl-0 = <&usb0_otg_apf28dev
					&usb0_id_pins_b>;
			vbus-supply = <&reg_usb0_vbus>;
			status = "okay";
		};

		usb1: usb@80090000 {
			status = "okay";
		};

		mac1: ethernet@800f4000 {
			phy-mode = "rmii";
			pinctrl-names = "default";
			pinctrl-0 = <&mac1_pins_a>;
			phy-reset-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
			status = "okay";
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		reg_usb0_vbus: regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			regulator-name = "usb0_vbus";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio1 23 1>;
			enable-active-high;
		};

		reg_can0_vcc: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "can0_vcc";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
		};
	};

	leds {
		compatible = "gpio-leds";

		user {
			label = "Heartbeat";
			gpios = <&gpio0 21 0>;
			linux,default-trigger = "heartbeat";
		};
	};

	backlight {
		compatible = "pwm-backlight";

		pwms = <&pwm 3 191000>;
		brightness-levels = <0 4 8 16 32 64 128 255>;
		default-brightness-level = <6>;
	};

	gpio-keys {
		compatible = "gpio-keys";

		user-button {
			label = "User button";
			gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
			linux,code = <0x100>;
			gpio-key,wakeup;
		};
	};
};
