PATCH [0/2] ARM: dts: am33xx: add support for Ka-Ro electronics TX48-7020 module

19 messages, 5 authors, 2016-02-12 · open the first message on its own page

PATCH [0/2] ARM: dts: am33xx: add support for Ka-Ro electronics TX48-7020 module

From: Lothar Waßmann <hidden>
Date: 2016-01-20 12:30:24

This patch set adds support for the Ka-Ro electronics TX48-7020
module.

The first patch adds a workaround for a bug in the AM335x SoC to the
LTC3589 driver, which is required for this module.

regulator: ltc3589: make IRQ optional
ARM: dts: am33xx: add support for Ka-Ro electronics TX48-7020 module

[PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-20 12:30:27

On the AM335x SoC rev. <= 1.0 the "Input Function of the EXTINTn
Terminal is Inverted", for which the only remedy is to "Use an active
high interrupt source or use an external inverter to change the
polarity of any active low interrupt source."

This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.

Signed-off-by: Lothar Wa?mann <redacted>
---
 drivers/regulator/ltc3589.c | 49 +++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/drivers/regulator/ltc3589.c b/drivers/regulator/ltc3589.c
index 972c386..fff90cd 100644
--- a/drivers/regulator/ltc3589.c
+++ b/drivers/regulator/ltc3589.c
@@ -65,6 +65,8 @@
 #define LTC3589_VCCR_SW3_GO		BIT(4)
 #define LTC3589_VCCR_LDO2_GO		BIT(6)
 
+#define POLL_PERIOD			1000
+
 enum ltc3589_variant {
 	LTC3589,
 	LTC3589_1,
@@ -97,6 +99,7 @@ struct ltc3589 {
 	enum ltc3589_variant variant;
 	struct ltc3589_regulator regulator_descs[LTC3589_NUM_REGULATORS];
 	struct regulator_dev *regulators[LTC3589_NUM_REGULATORS];
+	struct delayed_work poll_timer;
 };
 
 static const int ltc3589_ldo4[] = {
@@ -407,11 +410,10 @@ static const struct regmap_config ltc3589_regmap_config = {
 	.cache_type = REGCACHE_RBTREE,
 };
 
-
-static irqreturn_t ltc3589_isr(int irq, void *dev_id)
+static inline void ltc3589_handle_irq(struct ltc3589 *ltc3589)
 {
-	struct ltc3589 *ltc3589 = dev_id;
-	unsigned int i, irqstat, event;
+	u32 irqstat, event;
+	int i;
 
 	regmap_read(ltc3589->regmap, LTC3589_IRQSTAT, &irqstat);
 
@@ -431,6 +433,24 @@ static irqreturn_t ltc3589_isr(int irq, void *dev_id)
 
 	/* Clear warning condition */
 	regmap_write(ltc3589->regmap, LTC3589_CLIRQ, 0);
+}
+
+static void ltc3589_poll_func(struct work_struct *work)
+{
+	struct ltc3589 *ltc3589 = container_of(work, struct ltc3589,
+					poll_timer.work);
+	unsigned long timeout = msecs_to_jiffies(POLL_PERIOD);
+
+	ltc3589_handle_irq(ltc3589);
+
+	schedule_delayed_work(&ltc3589->poll_timer, timeout);
+}
+
+static irqreturn_t ltc3589_isr(int irq, void *dev_id)
+{
+	struct ltc3589 *ltc3589 = dev_id;
+
+	ltc3589_handle_irq(ltc3589);
 
 	return IRQ_HANDLED;
 }
@@ -519,6 +539,16 @@ static int ltc3589_probe(struct i2c_client *client,
 			return ret;
 		}
 	}
+	if (client->irq <= 0) {
+		dev_warn(dev,
+			"No interrupt configured; poll for thermal shutdown and undervoltage events\n");
+
+		INIT_DELAYED_WORK(&ltc3589->poll_timer, ltc3589_poll_func);
+		schedule_delayed_work(&ltc3589->poll_timer,
+				msecs_to_jiffies(POLL_PERIOD));
+
+		return 0;
+	}
 
 	ret = devm_request_threaded_irq(dev, client->irq, NULL, ltc3589_isr,
 					IRQF_TRIGGER_LOW | IRQF_ONESHOT,
@@ -531,6 +561,16 @@ static int ltc3589_probe(struct i2c_client *client,
 	return 0;
 }
 
+static int ltc3589_remove(struct i2c_client *client)
+{
+	struct ltc3589 *ltc3589 = i2c_get_clientdata(client);
+
+	if (client->irq <= 0)
+		cancel_delayed_work(&ltc3589->poll_timer);
+
+	return 0;
+}
+
 static struct i2c_device_id ltc3589_i2c_id[] = {
 	{ "ltc3589",   LTC3589   },
 	{ "ltc3589-1", LTC3589_1 },
@@ -544,6 +584,7 @@ static struct i2c_driver ltc3589_driver = {
 		.name = DRIVER_NAME,
 	},
 	.probe = ltc3589_probe,
+	.remove = ltc3589_remove,
 	.id_table = ltc3589_i2c_id,
 };
 module_i2c_driver(ltc3589_driver);
-- 
2.1.4

[PATCH 2/2] ARM: dts: am33xx: add support for Ka-Ro electronics TX48-7020 module

From: Lothar Waßmann <hidden>
Date: 2016-01-20 12:31:00

The TX48-7020 is a Computer On Module manufactured by
  Ka-Ro electronics GmbH with the following characteristics:
  Processor    TI Sitara AM3354 720 MHz ARM Cortex-A8
  RAM          256MB DDR3 SDRAM
  ROM          128MB NAND Flash
  RTC          DS1339 Real Time Clock
  Power supply Single 3.1V to 5.5V
  Size         26mm SO-DIMM
  Temp. Range  -40?C..85?C

Signed-off-by: Lothar Wa?mann <redacted>
---
 arch/arm/boot/dts/Makefile        |   1 +
 arch/arm/boot/dts/am335x-tx48.dts | 917 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 918 insertions(+)
 create mode 100644 arch/arm/boot/dts/am335x-tx48.dts
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index a4a6d70..13f7e9a 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -483,6 +483,7 @@ dtb-$(CONFIG_SOC_AM33XX) += \
 	am335x-shc.dtb \
 	am335x-sbc-t335.dtb \
 	am335x-sl50.dtb \
+	am335x-tx48.dtb \
 	am335x-wega-rdk.dtb
 dtb-$(CONFIG_ARCH_OMAP4) += \
 	omap4-duovero-parlor.dtb \
diff --git a/arch/arm/boot/dts/am335x-tx48.dts b/arch/arm/boot/dts/am335x-tx48.dts
new file mode 100644
index 0000000..7ad92c9
--- /dev/null
+++ b/arch/arm/boot/dts/am335x-tx48.dts
@@ -0,0 +1,917 @@
+/*
+ * Copyright (C) 2013 Ka-Ro electronics GmbH - http://www.karo-electronics.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include <dt-bindings/pwm/pwm.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+	model = "Ka-Ro electronics TX48 module (TI AM335x)";
+	compatible = "karo,am335x-tx48", "ti,am33xx";
+
+	aliases {
+		can0 = &dcan0;
+		can1 = &dcan1;
+		display = &display;
+		lcdif_23bit_pins_a = &pinctrl_lcd_23bit;
+		lcdif_24bit_pins_a = &pinctrl_lcd_24bit;
+		reg_can_xcvr = &reg_can_xcvr;
+		usbhost = &usb1;
+		usbotg = &usb0;
+	};
+
+	cpus {
+		cpu at 0 {
+			cpu0-supply = <&sw2_reg>;
+		};
+	};
+
+	clocks {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		mclk: clock at 0 {
+			compatible = "fixed-clock";
+			reg = <0>;
+			#clock-cells = <0>;
+			clock-frequency = <26000000>;
+		};
+	};
+
+	memory {
+		device_type = "memory";
+		reg = <0 0>; /* will be set up by bootloader */
+	};
+
+	backlight: backlight at 0 {
+		compatible = "pwm-backlight";
+		pwms = <&ehrpwm0 0 500000 PWM_POLARITY_INVERTED>;
+		power-supply = <&bb_out_reg>;
+		/*
+		 * a poor man's way to create a 1:1 relationship between
+		 * the PWM value and the actual duty cycle
+		 */
+		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>;
+	};
+
+	display: panel {
+		compatible = "ti,tilcdc,panel";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_lcd_24bit &pinctrl_lcd_pwr &pinctrl_lcd_rst>;
+		enable-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+		status = "okay";
+
+		panel-info {
+			ac-bias		  = <255>;
+			ac-bias-intrpt	  = <0>;
+			dma-burst-sz	  = <16>;
+			bpp		  = <24>;
+			fdd		  = <0x80>;
+			sync-edge	  = <1>;
+			sync-ctrl	  = <1>;
+			raster-order	  = <0>;
+			fifo-th		  = <0>;
+			invert-pxl-clk;
+		};
+
+		display-timings {
+			VGA {
+				clock-frequency = <25200000>;
+				hactive = <640>;
+				vactive = <480>;
+				hback-porch = <48>;
+				hsync-len = <96>;
+				hfront-porch = <16>;
+				vback-porch = <31>;
+				vsync-len = <2>;
+				vfront-porch = <12>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			ETV570 {
+				clock-frequency = <25200000>;
+				hactive = <640>;
+				vactive = <480>;
+				hback-porch = <114>;
+				hsync-len = <30>;
+				hfront-porch = <16>;
+				vback-porch = <32>;
+				vsync-len = <3>;
+				vfront-porch = <10>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			ET0350 {
+				clock-frequency = <6413760>;
+				hactive = <320>;
+				vactive = <240>;
+				hback-porch = <34>;
+				hsync-len = <34>;
+				hfront-porch = <20>;
+				vback-porch = <15>;
+				vsync-len = <3>;
+				vfront-porch = <4>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			ET0430 {
+				clock-frequency = <9009000>;
+				hactive = <480>;
+				vactive = <272>;
+				hback-porch = <2>;
+				hsync-len = <41>;
+				hfront-porch = <2>;
+				vback-porch = <2>;
+				vsync-len = <10>;
+				vfront-porch = <2>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			ET0500 {
+				clock-frequency = <33264000>;
+				hactive = <800>;
+				vactive = <480>;
+				hback-porch = <88>;
+				hsync-len = <128>;
+				hfront-porch = <40>;
+				vback-porch = <33>;
+				vsync-len = <2>;
+				vfront-porch = <10>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			ET0700 { /* same as ET0500 */
+				clock-frequency = <33264000>;
+				hactive = <800>;
+				vactive = <480>;
+				hback-porch = <88>;
+				hsync-len = <128>;
+				hfront-porch = <40>;
+				vback-porch = <33>;
+				vsync-len = <2>;
+				vfront-porch = <10>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			ETQ570 {
+				clock-frequency = <6596040>;
+				hactive = <320>;
+				vactive = <240>;
+				hback-porch = <38>;
+				hsync-len = <30>;
+				hfront-porch = <30>;
+				vback-porch = <16>;
+				vsync-len = <3>;
+				vfront-porch = <4>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_led>;
+
+		heartbeat {
+			label = "heartbeat";
+			gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "heartbeat";
+		};
+	};
+
+	matrix_keypad: matrix_keypad at 0 {
+		compatible = "gpio-matrix-keypad";
+		debounce-delay-ms = <5>;
+		col-scan-delay-us = <2>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_matrix_keypad0>;
+		linux,wakeup;
+
+		row-gpios = <
+			&gpio0 19 GPIO_ACTIVE_HIGH
+			&gpio0 20 GPIO_ACTIVE_HIGH
+			&gpio2  1 GPIO_ACTIVE_HIGH
+			&gpio2  0 GPIO_ACTIVE_HIGH
+		>;
+
+		col-gpios = <
+			&gpio2 26 GPIO_ACTIVE_HIGH
+			&gpio3 17 GPIO_ACTIVE_HIGH
+			&gpio0 7 GPIO_ACTIVE_HIGH
+			&gpio1 28 GPIO_ACTIVE_HIGH
+		>;
+
+		linux,keymap = <
+			0x00000074	/* POWER */
+		>;
+	};
+
+	regulators {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		reg_lcd_pwr: regulator at 0 {
+			compatible = "regulator-fixed";
+			reg = <0>;
+			regulator-name = "LCD power";
+			pinctrl-names = "default";
+			pinctrl-0 = <&pinctrl_lcd_pwr>;
+			regulator-min-microvolt = <3300000>;
+			regulator-max-microvolt = <3300000>;
+			gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>;
+			enable-active-high;
+			regulator-boot-on;
+			regulator-always-on;
+		};
+
+		reg_can_xcvr: regulator at 2 {
+			compatible = "regulator-fixed";
+			reg = <2>;
+			regulator-name = "can-xcvr";
+			pinctrl-names = "default";
+			pinctrl-0 = <&pinctrl_can_xcvr>;
+			regulator-min-microvolt = <3300000>;
+			regulator-max-microvolt = <3300000>;
+			gpio = <&gpio0 22 GPIO_ACTIVE_LOW>;
+			regulator-boot-on;
+			regulator-always-on;
+		};
+
+		reg_usbotg: regulator at 3 {
+			compatible = "regulator-fixed";
+			reg = <3>;
+			regulator-name = "usbotg-vbus";
+			regulator-min-microvolt = <3300000>;
+			regulator-max-microvolt = <3300000>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&pinctrl_reg_usbotg>;
+			gpio = <&gpio2 30 GPIO_ACTIVE_HIGH>;
+			enable-active-high;
+		};
+	};
+
+	sound {
+		compatible = "ti,am335x-tx48-audio";
+		ti,model = "TX48-SGTL5000";
+		ti,audio-codec = <&sgtl5000>;
+		ti,mcasp-controller = <&mcasp1>;
+	};
+};
+
+&am33xx_pinmux {
+	cpsw_default: cpsw_default {
+		pinctrl-single,pins = <
+			/* Slave 1 */
+			0x10c (PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_crs.rmii1_crs_dv */
+			0x110 (PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_rxerr.rmii1_rxerr */
+			0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* mii1_txen.rmii1_txen */
+			0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* mii1_txd1.rmii1_txd1 */
+			0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* mii1_txd0.rmii1_txd0 */
+			0x13c (PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_rxd1.rmii1_rxd1 */
+			0x140 (PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_rxd0.rmii1_rxd0 */
+			0x144 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE0)	/* rmii1_ref_clk.rmii1_refclk */
+			0x1e4 (PIN_INPUT_PULLUP | MUX_MODE7)	/* emu0.gpio3_7 */
+			0x1e8 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)	/* emu1.gpio3_8 */
+		>;
+	};
+
+	cpsw_sleep: cpsw_sleep {
+		pinctrl-single,pins = <
+			/* Slave 1 reset value */
+			0x10c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x110 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x144 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x1e4 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x1e8 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+		>;
+	};
+
+	davinci_mdio_default: davinci_mdio_default {
+		pinctrl-single,pins = <
+			/* MDIO */
+			0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)	/* mdio_data.mdio_data */
+			0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)			/* mdio_clk.mdio_clk */
+		>;
+	};
+
+	davinci_mdio_sleep: davinci_mdio_sleep {
+		pinctrl-single,pins = <
+			/* MDIO reset value */
+			0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+		>;
+	};
+
+	pinctrl_can_xcvr: can-xcvr-grp {
+		pinctrl-single,pins = <
+			0x20 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad8.gpio0_22	CAN Transceiver Enable */
+		>;
+	};
+
+	pinctrl_cspi0: cspi0grp-1 {
+		pinctrl-single,pins = <
+			0x15c (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* spi0_cs0.spi0_cs0	CSPI_SS */
+			0x160 (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* spi0_cs1.spi0_cs1	CSPI_SS*/
+			0x154 (PIN_OUTPUT | MUX_MODE0)		/* spi0_d0.spi0_d0	CSPI_MOSI*/
+			0x158 (PIN_INPUT_PULLUP | MUX_MODE0)	/* spi0_d1.spi0_d1	CSPI_MISO*/
+			0x150 (PIN_INPUT_PULLDOWN | MUX_MODE0)	/* spi0_sclk.spi0_sclk	CSPI_SCLK */
+		>;
+	};
+
+	pinctrl_dcan0: dcan0grp-1 {
+		pinctrl-single,pins = <
+			0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* mii1_txd3.dcan0_tx	TXCAN */
+			0x120 (PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_txd2.dcan0_rx	RXCAN */
+		>;
+	};
+
+	pinctrl_dcan1: dcan1grp-1 { // USB-OTG / 2nd CAN
+		pinctrl-single,pins = <
+			0x100 (PIN_INPUT_PULLDOWN | MUX_MODE4)	/* mmc0_clk.dcan1_tx	USBOTG_VBUSEN */
+			0x104 (PIN_INPUT_PULLUP | MUX_MODE4)	/* mmc0_cmd.dcan1_rx	#USBOTG_OC */
+		>;
+	};
+
+	pinctrl_gpmc_1: gpmcgrp-1 {
+		pinctrl-single,pins = <
+			0x00 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad0.gpmc_ad0 */
+			0x04 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad1.gpmc_ad1 */
+			0x08 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad2.gpmc_ad2 */
+			0x0c (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad3.gpmc_ad3 */
+			0x10 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad4.gpmc_ad4 */
+			0x14 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad5.gpmc_ad5 */
+			0x18 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad6.gpmc_ad6 */
+			0x1c (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_ad7.gpmc_ad7 */
+			0x9c (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* gpmc_ben0_cle.gpmc_ben0_cle */
+			0x90 (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* gpmc_advn_ale.gpmc_advn_ale */
+			0x7c (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* gpmc_csn0.gpmc_csn0 */
+			0x94 (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* gpmc_oe_re.gpmc_oe_re */
+			0x98 (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* gpmc_wen.gpmc_wen */
+			0x74 (PIN_OUTPUT_PULLUP | MUX_MODE0)	/* gpmc_wpn.gpmc_wpn */
+			0x70 (PIN_INPUT_PULLUP | MUX_MODE0)	/* gpmc_wait0.gpmc_wait0 */
+		>;
+	};
+
+	pinctrl_i2c0_1: i2c0grp-1 {
+		pinctrl-single,pins = <
+			0x188 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_sda.i2c0_sda I2C_DATA */
+			0x18c (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_scl.i2c0_scl I2C_CLK */
+		>;
+	};
+
+	pinctrl_lcd_pwr: lcdpwrgrp {
+		pinctrl-single,pins = <
+			0x58 (PIN_OUTPUT | MUX_MODE7)		/* gpmc_a6.gpio1_22 */
+		>;
+	};
+
+	pinctrl_lcd_rst: lcdrstgrp {
+		pinctrl-single,pins = <
+			0x4c (PIN_OUTPUT | MUX_MODE7)		/* gpmc_a3.gpio1_19 */
+		>;
+	};
+
+	pinctrl_lcd_23bit: lcd0grp1 {
+		pinctrl-single,pins = <
+			0x2c (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad11.lcd_data20		LD1 */
+			0x38 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad14.lcd_data17		LD2 */
+			0xcc (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data11.lcd_data11	LD3 */
+			0xd0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data12.lcd_data12	LD4 */
+			0xd4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data13.lcd_data13	LD5 */
+			0xd8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data14.lcd_data14	LD6 */
+			0xdc (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data15.lcd_data15	LD7 */
+			0x24 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad9.lcd_data22		LD8 */
+			0x30 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad12.lcd_data19		LD9 */
+			0xb4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data5.lcd_data5		LD10 */
+			0xb8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data6.lcd_data6		LD11 */
+			0xbc (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data7.lcd_data7		LD12 */
+			0xc0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data8.lcd_data8		LD13 */
+			0xc4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data9.lcd_data9		LD14 */
+			0xc8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data10.lcd_data10	LD15 */
+			0x28 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad10.lcd_data21		LD16 */
+			0x34 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad13.lcd_data18		LD17 */
+			0x3c (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad15.lcd_data16		LD18 */
+			0xa0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data0.lcd_data0		LD19 */
+			0xa4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data1.lcd_data1		LD20 */
+			0xa8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data2.lcd_data2		LD21 */
+			0xac (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data3.lcd_data3		LD22 */
+			0xb0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data4.lcd_data4		LD23 */
+			0xe4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_hsync.lcd_hsync		HSYNC */
+			0xe0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_vsync.lcd_vsync		VSYNC */
+			0xec (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_ac_bias_en.lcd_ac_bias_en OE_ACD */
+			0xe8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_pclk.lcd_pclk		LSCLK */
+		>;
+	};
+
+	pinctrl_lcd_24bit: lcd0grp2 {
+		pinctrl-single,pins = <
+			0x20 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad8.lcd_data23		LD0 */
+			0x2c (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad11.lcd_data20		LD1 */
+			0x38 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad14.lcd_data17		LD2 */
+			0xcc (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data11.lcd_data11	LD3 */
+			0xd0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data12.lcd_data12	LD4 */
+			0xd4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data13.lcd_data13	LD5 */
+			0xd8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data14.lcd_data14	LD6 */
+			0xdc (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data15.lcd_data15	LD7 */
+			0x24 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad9.lcd_data22		LD8 */
+			0x30 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad12.lcd_data19		LD9 */
+			0xb4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data5.lcd_data5		LD10 */
+			0xb8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data6.lcd_data6		LD11 */
+			0xbc (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data7.lcd_data7		LD12 */
+			0xc0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data8.lcd_data8		LD13 */
+			0xc4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data9.lcd_data9		LD14 */
+			0xc8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data10.lcd_data10	LD15 */
+			0x28 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad10.lcd_data21		LD16 */
+			0x34 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad13.lcd_data18		LD17 */
+			0x3c (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* gpmc_ad15.lcd_data16		LD18 */
+			0xa0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data0.lcd_data0		LD19 */
+			0xa4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data1.lcd_data1		LD20 */
+			0xa8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data2.lcd_data2		LD21 */
+			0xac (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data3.lcd_data3		LD22 */
+			0xb0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_data4.lcd_data4		LD23 */
+			0xe4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_hsync.lcd_hsync		HSYNC */
+			0xe0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_vsync.lcd_vsync		VSYNC */
+			0xec (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_ac_bias_en.lcd_ac_bias_en OE_ACD */
+			0xe8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* lcd_pclk.lcd_pclk		LSCLK */
+		>;
+	};
+
+	pinctrl_led: ledgrp {
+		pinctrl-single,pins = <
+			0x68 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a10.gpio1_26 */
+		>;
+	};
+
+	pinctrl_matrix_keypad0: matrix-keypad0 {
+		pinctrl-single,pins = <
+			0xf0 (PIN_OUTPUT_PULLUP | MUX_MODE7)	/* mmc0_dat3.gpio2_26		KP_COL0 */
+			0x19c (PIN_OUTPUT_PULLUP | MUX_MODE7)	/* mcasp0_ahclkr.gpio3_17	KP_COL1 */
+			0x164 (PIN_OUTPUT_PULLUP | MUX_MODE7)	/* ecap0_in_pwm0_out.gpio0_7	KP_COL2 */
+			0x78 (PIN_OUTPUT_PULLUP | MUX_MODE7)	/* gpmc_ben1.gpio1_28		KP_COL3 */
+			0x1b0 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* xdma_event_intr0.gpio0_19	KP_ROW0 */
+			0x1b4 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* xdma_event_intr1.gpio0_20	KP_ROW1 */
+			0x8c (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_clk.gpio2_1		KP_ROW2 */
+			0x88 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_csn3.gpio2_0		KP_ROW3 */
+		>;
+	};
+
+	pinctrl_mmc1: mmc1grp-1 {
+		pinctrl-single,pins = <
+			0x194 (PIN_INPUT_PULLUP | MUX_MODE7)	/* mcasp0_fsx.gpio3_15		SD1_CD */
+			0x12c (PIN_INPUT_PULLUP | MUX_MODE4)	/* mii1_tx_clk.mmc1_dat0	SD1_DAT0 */
+			0x130 (PIN_INPUT_PULLUP | MUX_MODE4)	/* mii1_rx_clk.mmc1_dat1	SD1_DAT1 */
+			0x134 (PIN_INPUT_PULLUP | MUX_MODE4)	/* mii1_rxd3.mmc1_dat2		SD1_DAT2 */
+			0x138 (PIN_INPUT_PULLUP | MUX_MODE4)	/* mii1_rxd2.mmc1_dat3		SD1_DAT3 */
+			0x84 (PIN_INPUT_PULLUP | MUX_MODE2)	/* gpmc_cs2.mmc1_cmd		SD1_CMD */
+			0x80 (PIN_INPUT_PULLUP | MUX_MODE2)	/* gpmc_cs1.mmc1_clk		SD1_CLK */
+		>;
+	};
+
+	pinctrl_ow0: ow0grp-1 {
+		pinctrl-single,pins = <
+			0xf4 (PIN_INPUT_PULLUP | MUX_MODE7)	/* mmc0_dat2.gpio2_27		OWDAT */
+		>;
+	};
+
+	pinctrl_pwm0: pwm0grp-11 {
+		pinctrl-single,pins = <
+			0x190 (PIN_OUTPUT_PULLUP | MUX_MODE1)	/* mcasp0_aclkx.ehrpwm0a	PWM */
+		>;
+	};
+
+	pinctrl_reg_usbotg: reg-usbotggrp-1 {
+		pinctrl-single,pins = <
+			0x100 (PIN_OUTPUT | MUX_MODE7)		/* mmc0_clk.gpio2_30		USBOTG_VBUSEN */
+			0x104 (PIN_INPUT_PULLUP | MUX_MODE7)	/* mmc0_cmd.gpio2_31		#USBOTG_OC */
+		>;
+	};
+
+	pinctrl_ssi_1: ssi1grp-1 {
+		pinctrl-single,pins = <
+			0x1a8 (PIN_INPUT_PULLUP | MUX_MODE3)	/* mcasp0_axr1.mcasp1_axr0	SSI1_RXD */
+			0x1ac (PIN_OUTPUT | MUX_MODE3)		/* mcasp0_ahclkx.mcasp1_axr1	SSI1_TXD */
+			0x1a0 (PIN_INPUT_PULLUP | MUX_MODE3)	/* mcasp0_aclkr.mcasp1_aclkx	SSI1_CLK */
+			0x1a4 (PIN_INPUT_PULLUP | MUX_MODE3)	/* mcasp0_fsr.mcasp1_fsx	SSI1_FS */
+		>;
+	};
+
+	pinctrl_tsc2007: tsc2007grp-1 {
+		pinctrl-single,pins = <
+			0x198 (PIN_INPUT_PULLUP | MUX_MODE7) /* mcasp0_axr0.gpio3_16		SSI1_INT */
+		>;
+	};
+
+	pinctrl_uart0_1: uart0grp-1 {
+		pinctrl-single,pins = <
+			0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart0_txd.uart0_txd		TXD */
+			0x170 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart0_rxd.uart0_rxd		RXD */
+			0x168 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart0_ctsn.uart0_ctsn	RTS/CTS IN */
+			0x16c (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart0_rtsn.uart0_rtsn	CTS/RTS OUT */
+		>;
+	};
+
+	pinctrl_uart1_1: uart1grp-1 {
+		pinctrl-single,pins = <
+			0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart1_txd.uart1_txd		TXD */
+			0x180 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart1_rxd.uart1_rxd		RXD */
+			0x178 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart1_ctsn.uart1_ctsn	RTS/CTS IN */
+			0x17c (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart1_rtsn.uart1_rtsn	CTS/RTS OUT */
+		>;
+	};
+
+	pinctrl_uart5_1: uart5grp-1 {
+		pinctrl-single,pins = <
+			0x118 (PIN_OUTPUT_PULLDOWN | MUX_MODE3)	/* mii1_rxdv.uart5_txd		TXD */
+			0x108 (PIN_INPUT_PULLUP | MUX_MODE3)	/* mii1_col.uart5_rxd		RXD */
+			0xf8 (PIN_INPUT_PULLUP | MUX_MODE2)	/* mmc0_dat1.uart5_ctsn		RTS/CTS IN */
+			0xfc (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* mmc0_dat0.uart5_rtsn		CTS/RTS OUT */
+		>;
+	};
+
+	pinctrl_usbhost: usbhostgrp-1 {
+		pinctrl-single,pins = <
+			0x234 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* usb1_drvvbus.usb1_drvvbus	USBH_VBUSEN */
+			0x21c (PIN_INPUT_PULLUP | MUX_MODE7)	/* usb0_drvvbus.gpio0_18	#USBH_OC */
+		>;
+	};
+};
+
+&cppi41dma {
+	status = "okay";
+};
+
+&cpsw_emac0 {
+	phy_id = <&davinci_mdio>, <0>;
+	phy-mode = "rmii";
+};
+
+&cpsw_emac1 {
+	phy_id = <&davinci_mdio>, <1>;
+	phy-mode = "rmii";
+	status = "disabled";
+};
+
+&davinci_mdio {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&davinci_mdio_default>;
+	pinctrl-1 = <&davinci_mdio_sleep>;
+	status = "okay";
+};
+
+&dcan0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_dcan0>;
+	status = "okay";
+};
+
+&dcan1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_dcan1>;
+	status = "okay";
+};
+
+&ehrpwm0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_pwm0>;
+	status = "okay";
+};
+
+&elm {
+	status = "okay";
+};
+
+&epwmss0 {
+	status = "okay";
+};
+
+&gpio0 {
+	ti,gpio-always-on;
+};
+
+&gpio1 {
+	ti,gpio-always-on;
+};
+
+&gpio2 {
+	ti,gpio-always-on;
+};
+
+&gpio3 {
+	ti,gpio-always-on;
+};
+
+&gpmc {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_gpmc_1>;
+	ranges = <0 0 0x08000000 0x2000>;	/* CS0: NAND */
+	status = "okay";
+
+	nand at 0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		reg = <0 0 0>;
+		nand-bus-width = <8>;
+		nand-on-flash-bbt;
+		ti,elm-id = <&elm>;
+		ti,nand-ecc-opt = "bch8";
+		ti,nand-xfer-type = "polled";
+		gpmc,device-nand = "true";
+		gpmc,device-width = <1>;
+		gpmc,sync-clk-ps = <0>;
+		gpmc,cs-on-ns = <0>;
+		gpmc,cs-rd-off-ns = <20>;
+		gpmc,cs-wr-off-ns = <25>;
+		gpmc,adv-on-ns = <0>;
+		gpmc,adv-rd-off-ns = <0>;
+		gpmc,adv-wr-off-ns = <0>;
+		gpmc,we-off-ns = <10>;
+		gpmc,oe-off-ns = <25>;
+		gpmc,access-ns = <25>;
+		gpmc,rd-cycle-ns = <30>;
+		gpmc,wr-cycle-ns = <30>;
+		gpmc,wr-access-ns = <15>;
+		gpmc,wr-data-mux-bus-ns = <0>;
+		gpmc,bus-turnaround-ns = <100>;
+		gpmc,cycle2cycle-delay-ns = <100>;
+		gpmc,cycle2cycle-samecsen;
+		gpmc,clk-activation-ns = <0>;
+		gpmc,wait-monitoring-ns = <0>;
+		gpmc,wait-on-read = "true";
+		gpmc,wait-on-write = "true";
+
+		/* partitions will be filled in by U-Boot */
+	};
+};
+
+&i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_i2c0_1>;
+	status = "okay";
+
+	rtc1: ds1339 at 68 {
+		compatible = "dallas,ds1339";
+		reg = <0x68>;
+	};
+
+	pmic: lt3589 at 34 {
+		compatible = "lltc,ltc3589-2";
+		reg = <0x34>;
+
+		regulators {
+			sw1_reg: sw1 {
+				regulator-min-microvolt = <591930>;
+				regulator-max-microvolt = <1224671>;
+				lltc,fb-voltage-divider = <100000 158000>;
+				regulator-name = "vdd_core";
+				regulator-ramp-delay = <7000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			sw2_reg: sw2 {
+				regulator-min-microvolt = <704544>;
+				regulator-max-microvolt = <1363627>;
+				lltc,fb-voltage-divider = <180000 220000>;
+				regulator-name = "vdd_mpu";
+				regulator-ramp-delay = <7000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			sw3_reg: sw3 {
+				regulator-min-microvolt = <1364186>;
+				regulator-max-microvolt = <1670426>;
+				lltc,fb-voltage-divider = <270000 220000>;
+				regulator-name = "vdds_ddr";
+				regulator-ramp-delay = <7000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			bb_out_reg: bb-out {
+				regulator-min-microvolt = <3387341>;
+				regulator-max-microvolt = <3387341>;
+				lltc,fb-voltage-divider = <511000 158000>;
+				regulator-name = "vddio";
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo1_reg: ldo1 {
+				regulator-min-microvolt = <1781818>;
+				regulator-max-microvolt = <1781818>;
+				lltc,fb-voltage-divider = <270000 220000>;
+				regulator-name = "vdds_rtc";
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo2_reg: ldo2 {
+				regulator-min-microvolt = <1799991>;
+				regulator-max-microvolt = <1833324>;
+				lltc,fb-voltage-divider = <300000 180000>;
+				regulator-name = "vdd_etn";
+				regulator-ramp-delay = <7000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo3_reg: ldo3 {
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+				regulator-name = "vdds";
+			};
+
+			ldo4_reg: ldo4 {
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3200000>;
+				regulator-name = "vpp";
+			};
+		};
+	};
+
+	sgtl5000: sgtl5000 at 0a {
+		compatible = "fsl,sgtl5000";
+		reg = <0x0a>;
+		VDDA-supply = <&bb_out_reg>;
+		VDDIO-supply = <&bb_out_reg>;
+		clocks = <&mclk>;
+	};
+
+	touchscreen: tsc2007 at 48 {
+		compatible = "ti,tsc2007";
+		reg = <0x48>;
+		interrupt-parent = <&gpio3>;
+		interrupts = <16 2>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_tsc2007>;
+		gpios = <&gpio3 16 GPIO_ACTIVE_LOW>;
+		ti,x-plate-ohms = <660>;
+	};
+
+	polytouch: edt-ft5x06 at 38 {
+		compatible = "edt,edt-ft5x06";
+		reg = <0x38>;
+		interrupt-parent = <&gpio1>;
+		interrupts = <17 2>;
+		reset-gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
+		wake-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&lcdc {
+	status = "okay";
+};
+
+&mac {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&cpsw_default>;
+	pinctrl-1 = <&cpsw_sleep>;
+	status = "okay";
+};
+
+&mcasp1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_ssi_1>;
+	op-mode = <0>;          /* MCASP_IIS_MODE */
+	tdm-slots = <2>;
+	serial-dir = <2 1 0 0>; /* 0: INACTIVE, 1: TX, 2: RX */
+	tx-num-evt = <32>;
+	rx-num-evt = <32>;
+	status = "okay";
+};
+
+&mmc1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_mmc1>;
+	cd-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
+	vmmc-supply = <&bb_out_reg>;
+	status = "okay";
+};
+
+&phy_sel {
+	rmii-clock-ext;
+};
+
+&spi0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_cspi0>;
+	ti,spi-num-cs = <2>;
+	ti,pindir-d0-out-d1-in;
+	status = "okay";
+
+	spidev0: spi at 0 {
+		compatible = "spidev";
+		reg = <0>;
+		spi-max-frequency = <375000>;
+	};
+
+	spidev1: spi at 1 {
+		compatible = "spidev";
+		reg = <1>;
+		spi-max-frequency = <375000>;
+	};
+};
+
+&tscadc {
+	status = "okay";
+
+	tsc {
+		ti,wires = <4>;
+		ti,x-plate-resistance = <660>;
+		ti,coordinate-readouts = <5>;
+		ti,wire-config = <0x01 0x10 0x23 0x32>;
+	};
+
+	adc {
+		ti,adc-channels = <4 5 6 7>;
+	};
+};
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart0_1>;
+	status = "okay";
+};
+
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart1_1>;
+	status = "okay";
+};
+
+&uart5 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart5_1>;
+	status = "okay";
+};
+
+&usb {
+	status = "okay";
+};
+
+&usb_ctrl_mod {
+	status = "okay";
+};
+
+&usb0 {
+	dr_mode = "peripheral";
+	status = "okay";
+};
+
+&usb0_phy {
+	vcc-supply = <&reg_usbotg>;
+	status = "okay";
+};
+
+&usb1 {
+	dr_mode = "host";
+	status = "okay";
+};
+
+&usb1_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_usbhost>;
+	status = "okay";
+};
-- 
2.1.4

Re: [PATCH 2/2] ARM: dts: am33xx: add support for Ka-Ro electronics TX48-7020 module

From: Robert Nelson <hidden>
Date: 2016-01-20 16:33:22

quoted hunk
+
+&am33xx_pinmux {
+       cpsw_default: cpsw_default {
+               pinctrl-single,pins = <
+                       /* Slave 1 */
+                       0x10c (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_crs.rmii1_crs_dv */
+                       0x110 (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_rxerr.rmii1_rxerr */
+                       0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txen.rmii1_txen */
+                       0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txd1.rmii1_txd1 */
+                       0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txd0.rmii1_txd0 */
+                       0x13c (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_rxd1.rmii1_rxd1 */
+                       0x140 (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_rxd0.rmii1_rxd0 */
+                       0x144 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE0)   /* rmii1_ref_clk.rmii1_refclk */
+                       0x1e4 (PIN_INPUT_PULLUP | MUX_MODE7)    /* emu0.gpio3_7 */
+                       0x1e8 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* emu1.gpio3_8 */
please go thru and convert these all to use the AM33XX_IOPAD macro..

All the boards have been converted for the 4.5.0-rc0 merge..

example:

https://git.kernel.org/cgit/linux/kernel/git/tmlind/linux-omap.git/commit/?h=for-next&id=df10eadfce3510c2814e95d9f3d2d5d2c64eb26b

Regards,

-- 
Robert Nelson
https://rcn-ee.com/

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-20 16:44:08

On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
How will the driver generate interrupts if there is no interrupt
physically present in the system?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160120/a0fbe171/attachment-0001.sig>

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Grygorii Strashko <grygorii.strashko@ti.com>
Date: 2016-01-20 17:30:56

On 01/20/2016 02:29 PM, Lothar Wa?mann wrote:
quoted hunk
On the AM335x SoC rev. <= 1.0 the "Input Function of the EXTINTn
Terminal is Inverted", for which the only remedy is to "Use an active
high interrupt source or use an external inverter to change the
polarity of any active low interrupt source."

This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.

Signed-off-by: Lothar Wa?mann <redacted>
---
  drivers/regulator/ltc3589.c | 49 +++++++++++++++++++++++++++++++++++++++++----
  1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/drivers/regulator/ltc3589.c b/drivers/regulator/ltc3589.c
[...]
quoted hunk
  }
@@ -519,6 +539,16 @@ static int ltc3589_probe(struct i2c_client *client,
  			return ret;
  		}
  	}
+	if (client->irq <= 0) {
+		dev_warn(dev,
+			"No interrupt configured; poll for thermal shutdown and undervoltage events\n");
+
+		INIT_DELAYED_WORK(&ltc3589->poll_timer, ltc3589_poll_func);
+		schedule_delayed_work(&ltc3589->poll_timer,
+				msecs_to_jiffies(POLL_PERIOD));
+
+		return 0;
+	}
  
  	ret = devm_request_threaded_irq(dev, client->irq, NULL, ltc3589_isr,
  					IRQF_TRIGGER_LOW | IRQF_ONESHOT,
					^^^^^^^^^^^^^^^^

I assume you have issue with IRQ because of the above hard-coded flag.
if yes - Over all approach for such kind of issues - do not hard-code IRQ triggering 
flags in code in case of DT boot. DT core will configure it properly.



[...]

-- 
regards,
-grygorii

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-21 07:06:00

Hi,
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
How will the driver generate interrupts if there is no interrupt
physically present in the system?
It's using timer interrupts to poll the LTC3589 state.


Lothar Wa?mann

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-21 10:21:54

On Thu, Jan 21, 2016 at 08:05:24AM +0100, Lothar Wa?mann wrote:
quoted
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
quoted
How will the driver generate interrupts if there is no interrupt
physically present in the system?
It's using timer interrupts to poll the LTC3589 state.
I know that is what your patch does, my question is why you say in your
commit log that "Otherwise the driver will continuously generate
interrupts and make the system unusable".
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160121/54e8db19/attachment.sig>

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-21 10:26:42

Hi,
On Thu, Jan 21, 2016 at 08:05:24AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
quoted
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
quoted
quoted
How will the driver generate interrupts if there is no interrupt
physically present in the system?
quoted
It's using timer interrupts to poll the LTC3589 state.
I know that is what your patch does, my question is why you say in your
commit log that "Otherwise the driver will continuously generate
interrupts and make the system unusable".
Because the interrupt is level triggered and the polarity of the
EXTINT pin is inverted, the interrupt will be constantly active when
the IRQ pin of the LTC3589 is inactive.


Lothar Wa?mann

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-21 11:12:19

On Thu, Jan 21, 2016 at 11:26:11AM +0100, Lothar Wa?mann wrote:
quoted
On Thu, Jan 21, 2016 at 08:05:24AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
quoted
quoted
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
quoted
quoted
quoted
How will the driver generate interrupts if there is no interrupt
physically present in the system?
quoted
quoted
It's using timer interrupts to poll the LTC3589 state.
quoted
I know that is what your patch does, my question is why you say in your
commit log that "Otherwise the driver will continuously generate
interrupts and make the system unusable".
Because the interrupt is level triggered and the polarity of the
EXTINT pin is inverted, the interrupt will be constantly active when
the IRQ pin of the LTC3589 is inactive.
So, to repeat my original question, how will that generate interrupts if
there is no interrupt physically present in the system?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160121/4077d007/attachment.sig>

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-21 11:33:40

Hi,
On Thu, Jan 21, 2016 at 11:26:11AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Thu, Jan 21, 2016 at 08:05:24AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
quoted
quoted
quoted
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
quoted
quoted
quoted
quoted
How will the driver generate interrupts if there is no interrupt
physically present in the system?
quoted
quoted
quoted
It's using timer interrupts to poll the LTC3589 state.
quoted
quoted
I know that is what your patch does, my question is why you say in your
commit log that "Otherwise the driver will continuously generate
interrupts and make the system unusable".
quoted
Because the interrupt is level triggered and the polarity of the
EXTINT pin is inverted, the interrupt will be constantly active when
the IRQ pin of the LTC3589 is inactive.
So, to repeat my original question, how will that generate interrupts if
there is no interrupt physically present in the system?
It won't. That's the whole purpose of this patch.
I'm afraid, I don't quite understand what you want to say...

Without this patch there will be a constantly active interrupt, which
will stall the system because the nNMI interrupt (on the EXTINTn pin) is
level triggered.
Since the polarity of the interrupt input is fixed, there is no way to
use it in our HW.


Lothar Wa?mann

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-21 16:28:21

On Thu, Jan 21, 2016 at 12:33:11PM +0100, Lothar Wa?mann wrote:
quoted
On Thu, Jan 21, 2016 at 11:26:11AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Thu, Jan 21, 2016 at 08:05:24AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
quoted
quoted
quoted
quoted
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
It won't. That's the whole purpose of this patch.
I'm afraid, I don't quite understand what you want to say...
Your commit message (quoted above) claims that without this patch if no
interrupt is supplied then the unsupplied interrupt will somehow be left
screaming and make the system unusable.  This doesn't make sense, if
there is no interrupt there is nothing to scream.
Without this patch there will be a constantly active interrupt, which
will stall the system because the nNMI interrupt (on the EXTINTn pin) is
level triggered.
Since the polarity of the interrupt input is fixed, there is no way to
use it in our HW.
So, contrary to what you've been saying, the interrupt is actually
connected (and worse, connected to a NMI) but apparently not described
in DT.  Why is it sensible to make the driver poll (which will affect
all systems using this device, even those that don't care) and not just
describe the interrupt in DT so it can be handled promptly in the normal
fashion?  Presumably this will run into serious problems if the
interrupt actually fires at runtime since the NMI will scream, it's not
clear to me how the poll will manage to run successfully in that case.

This really feels like a very system specific workaround which is
attempting to address things in the wrong place and coming up with
something very non-obvious as a result.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160121/1fd8fa11/attachment-0001.sig>

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-22 05:42:21

Hi,
On Thu, Jan 21, 2016 at 12:33:11PM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Thu, Jan 21, 2016 at 11:26:11AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Thu, Jan 21, 2016 at 08:05:24AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Wed, Jan 20, 2016 at 01:29:51PM +0100, Lothar Wa?mann wrote:
quoted
quoted
quoted
quoted
quoted
quoted
quoted
This pin is used as IRQ pin for the LTC3589 PMIC on the Ka-Ro
electronics TX48 module. Make the IRQ optional in the driver and use a
polling routine instead if no IRQ is specified in DT.
Otherwise the driver will continuously generate interrupts and make
the system unusable.
quoted
It won't. That's the whole purpose of this patch.
I'm afraid, I don't quite understand what you want to say...
Your commit message (quoted above) claims that without this patch if no
interrupt is supplied then the unsupplied interrupt will somehow be left
screaming and make the system unusable.  This doesn't make sense, if
there is no interrupt there is nothing to scream.
"Otherwise" meant the case where the IRQ is specified in DT as is
currently required to get the driver loaded at all.
quoted
Without this patch there will be a constantly active interrupt, which
will stall the system because the nNMI interrupt (on the EXTINTn pin) is
level triggered.
Since the polarity of the interrupt input is fixed, there is no way to
use it in our HW.
So, contrary to what you've been saying, the interrupt is actually
connected (and worse, connected to a NMI) but apparently not described
in DT.  Why is it sensible to make the driver poll (which will affect
all systems using this device, even those that don't care) and not just
describe the interrupt in DT so it can be handled promptly in the normal
fashion?  Presumably this will run into serious problems if the
interrupt actually fires at runtime since the NMI will scream, it's not
clear to me how the poll will manage to run successfully in that case.
Currently the driver won't even load without an IRQ specified in DT.
My patch makes it possible to use the driver without requiring an IRQ!


Lothar Wa?mann

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-22 16:27:48

On Fri, Jan 22, 2016 at 06:41:45AM +0100, Lothar Wa?mann wrote:
quoted
On Thu, Jan 21, 2016 at 12:33:11PM +0100, Lothar Wa?mann wrote:
quoted
Your commit message (quoted above) claims that without this patch if no
interrupt is supplied then the unsupplied interrupt will somehow be left
screaming and make the system unusable.  This doesn't make sense, if
there is no interrupt there is nothing to scream.
"Otherwise" meant the case where the IRQ is specified in DT as is
currently required to get the driver loaded at all.
quoted
So, contrary to what you've been saying, the interrupt is actually
connected (and worse, connected to a NMI) but apparently not described
in DT.  Why is it sensible to make the driver poll (which will affect
all systems using this device, even those that don't care) and not just
describe the interrupt in DT so it can be handled promptly in the normal
fashion?  Presumably this will run into serious problems if the
interrupt actually fires at runtime since the NMI will scream, it's not
clear to me how the poll will manage to run successfully in that case.
Currently the driver won't even load without an IRQ specified in DT.
My patch makes it possible to use the driver without requiring an IRQ!
You're not just making the interrupt optional, you are also implementing
polling support.  That's really unusual and there's no clear reason for
it, your changelog seems to claim that it is needed to make the system
work but that seems at best very surprising and would need a more
detailed changelog.

You at least need to provide an understandable changelog, though it
seems it is more likely that there is a more sensible way of dealing
with this.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160122/11c9967b/attachment.sig>

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-25 12:38:17

Hi,

On Fri, 22 Jan 2016 16:26:10 +0000 Mark Brown wrote:
On Fri, Jan 22, 2016 at 06:41:45AM +0100, Lothar Wa?mann wrote:
quoted
quoted
On Thu, Jan 21, 2016 at 12:33:11PM +0100, Lothar Wa?mann wrote:
quoted
quoted
Your commit message (quoted above) claims that without this patch if no
interrupt is supplied then the unsupplied interrupt will somehow be left
screaming and make the system unusable.  This doesn't make sense, if
there is no interrupt there is nothing to scream.
quoted
"Otherwise" meant the case where the IRQ is specified in DT as is
currently required to get the driver loaded at all.
quoted
quoted
So, contrary to what you've been saying, the interrupt is actually
connected (and worse, connected to a NMI) but apparently not described
in DT.  Why is it sensible to make the driver poll (which will affect
all systems using this device, even those that don't care) and not just
describe the interrupt in DT so it can be handled promptly in the normal
fashion?  Presumably this will run into serious problems if the
interrupt actually fires at runtime since the NMI will scream, it's not
clear to me how the poll will manage to run successfully in that case.
quoted
Currently the driver won't even load without an IRQ specified in DT.
My patch makes it possible to use the driver without requiring an IRQ!
You're not just making the interrupt optional, you are also implementing
polling support.  That's really unusual and there's no clear reason for
it, your changelog seems to claim that it is needed to make the system
work but that seems at best very surprising and would need a more
detailed changelog.

You at least need to provide an understandable changelog, though it
seems it is more likely that there is a more sensible way of dealing
with this.
Any suggestions how to handle this case in a more sensible way?


Lothar Wa?mann

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-25 12:42:55

On Mon, Jan 25, 2016 at 01:37:31PM +0100, Lothar Wa?mann wrote:
On Fri, 22 Jan 2016 16:26:10 +0000 Mark Brown wrote:
quoted
You're not just making the interrupt optional, you are also implementing
polling support.  That's really unusual and there's no clear reason for
Any suggestions how to handle this case in a more sensible way?
The above, for example - make the interrupt optional.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160125/091d9644/attachment.sig>

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Lothar Waßmann <hidden>
Date: 2016-01-25 12:51:33

Hi,

On Mon, 25 Jan 2016 12:41:23 +0000 Mark Brown wrote:
On Mon, Jan 25, 2016 at 01:37:31PM +0100, Lothar Wa?mann wrote:
quoted
On Fri, 22 Jan 2016 16:26:10 +0000 Mark Brown wrote:
quoted
quoted
You're not just making the interrupt optional, you are also implementing
polling support.  That's really unusual and there's no clear reason for
quoted
Any suggestions how to handle this case in a more sensible way?
The above, for example - make the interrupt optional.
This will make it impossible to notify the system about
overtemperature (and undervoltage).
I implemented polling to be able to get at least overtemperature
warnings.
(Undervoltage cannot be handled sensibly without interrupt anyway)


Lothar Wa?mann

Re: [PATCH 1/2] regulator: ltc3589: make IRQ optional

From: Mark Brown <broonie@kernel.org>
Date: 2016-01-25 13:53:21

On Mon, Jan 25, 2016 at 01:51:09PM +0100, Lothar Wa?mann wrote:
On Mon, 25 Jan 2016 12:41:23 +0000 Mark Brown wrote:
quoted
The above, for example - make the interrupt optional.
This will make it impossible to notify the system about
overtemperature (and undervoltage).
I implemented polling to be able to get at least overtemperature
warnings.
(Undervoltage cannot be handled sensibly without interrupt anyway)
I'm not convinced that justifies constantly polling, if the system
designers cared you'd hope they'd have wired it up to a working
interrupt.  People commonly don't, realistically thermal warnings are
usually set near the point where the silicon will be physically damaged
and typically by the time they fire the system is already experiencing
catastrophic problems at a system level.

The polling is at the very least a separate change, and making the
interrupt work would be a much better option.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160125/ba4fa286/attachment.sig>

Re: [PATCH 2/2] ARM: dts: am33xx: add support for Ka-Ro electronics TX48-7020 module

From: Tony Lindgren <tony@atomide.com>
Date: 2016-02-12 22:07:23

* Robert Nelson [off-list ref] [160120 08:34]:
quoted
+
+&am33xx_pinmux {
+       cpsw_default: cpsw_default {
+               pinctrl-single,pins = <
+                       /* Slave 1 */
+                       0x10c (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_crs.rmii1_crs_dv */
+                       0x110 (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_rxerr.rmii1_rxerr */
+                       0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txen.rmii1_txen */
+                       0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txd1.rmii1_txd1 */
+                       0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txd0.rmii1_txd0 */
+                       0x13c (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_rxd1.rmii1_rxd1 */
+                       0x140 (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_rxd0.rmii1_rxd0 */
+                       0x144 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE0)   /* rmii1_ref_clk.rmii1_refclk */
+                       0x1e4 (PIN_INPUT_PULLUP | MUX_MODE7)    /* emu0.gpio3_7 */
+                       0x1e8 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* emu1.gpio3_8 */
please go thru and convert these all to use the AM33XX_IOPAD macro..

All the boards have been converted for the 4.5.0-rc0 merge..

example:

https://git.kernel.org/cgit/linux/kernel/git/tmlind/linux-omap.git/commit/?h=for-next&id=df10eadfce3510c2814e95d9f3d2d5d2c64eb26b
Yes and please send this separately from the regulator changes
if no dependency.

Regards,

Tony
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help