From 4ef51233cd9d50b70254586176e8c80577670135 Mon Sep 17 00:00:00 2001
From: Erik Trauschke <etrauschke@mbari.org>
Date: Mon, 14 Mar 2016 10:56:59 -0700
Subject: [PATCH 2/2] status 20160314

---
 arch/arm/boot/dts/imx6ul-14x14-evk-csi.dts |   8 ---
 arch/arm/boot/dts/imx6ul-14x14-evk.dts     | 101 +++++++----------------------
 drivers/tty/serial/Kconfig                 |   1 -
 drivers/tty/serial/Makefile                |   2 +-
 drivers/tty/serial/sc16is7xx.c             |  11 +++-
 drivers/tty/serial/xrm1280.c               |  41 ++++++------
 6 files changed, 54 insertions(+), 110 deletions(-)

diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk-csi.dts b/arch/arm/boot/dts/imx6ul-14x14-evk-csi.dts
index f2bf26f..8245f58 100644
--- a/arch/arm/boot/dts/imx6ul-14x14-evk-csi.dts
+++ b/arch/arm/boot/dts/imx6ul-14x14-evk-csi.dts
@@ -9,14 +9,6 @@
 #include "imx6ul-14x14-evk.dts"
 
 
-&csi {
-	status = "okay";
-};
-
-&ov5640 {
-	status = "okay";
-};
-
 &sim2 {
 	status = "disabled";
 };
diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk.dts b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
index 65f9cc7..a3bf80d 100644
--- a/arch/arm/boot/dts/imx6ul-14x14-evk.dts
+++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
@@ -72,42 +72,6 @@
 		};
 	};
 
-	sound {
-		compatible = "fsl,imx6ul-evk-wm8960",
-			   "fsl,imx-audio-wm8960";
-		model = "wm8960-audio";
-		cpu-dai = <&sai2>;
-		audio-codec = <&codec>;
-		asrc-controller = <&asrc>;
-		codec-master;
-		gpr = <&gpr>;
-		/*
-                 * hp-det = <hp-det-pin hp-det-polarity>;
-		 * hp-det-pin: JD1 JD2  or JD3
-		 * hp-det-polarity = 0: hp detect high for headphone
-		 * hp-det-polarity = 1: hp detect high for speaker
-		 */
-		hp-det = <3 0>;
-		hp-det-gpios = <&gpio5 4 0>;
-		audio-routing =
-			"Headset Jack", "HP_L",
-			"Headset Jack", "HP_R",
-			"Ext Spk", "SPK_LP",
-			"Ext Spk", "SPK_LN",
-			"Ext Spk", "SPK_RP",
-			"Ext Spk", "SPK_RN",
-			"LINPUT2", "Hp MIC",
-			"LINPUT3", "Hp MIC",
-			"RINPUT1", "Main MIC",
-			"RINPUT2", "Main MIC",
-			"Hp MIC", "MICB",
-			"Main MIC", "MICB",
-			"CPU-Playback", "ASRC-Playback",
-			"Playback", "CPU-Playback",
-			"ASRC-Capture", "CPU-Capture",
-			"CPU-Capture", "Capture";
-	};
-
 	spi4 {
 		compatible = "spi-gpio";
 		pinctrl-names = "default";
@@ -131,6 +95,14 @@
 			spi-max-frequency = <100000>;
 		};
 	};
+
+	uartosc: oscillator {
+		compatible = "fixed-clock";
+		#clock-cells = <1>;
+		clock-frequency  = <14745600>;
+		clock-output-names = "uartosc";
+	};
+
 };
 
 &cpu0 {
@@ -144,16 +116,6 @@
 	assigned-clock-rates = <786432000>;
 };
 
-&csi {
-	status = "disabled";
-
-	port {
-		csi1_ep: endpoint {
-			remote-endpoint = <&ov5640_ep>;
-		};
-	};
-};
-
 &ecspi4 {
 	fsl,spi-num-chipselects=<1>;
 	cs-gpios = <0>;
@@ -161,15 +123,8 @@
 	pinctrl-0 = <&pinctrl_ecspi4>;
 	status = "okay";
 
-	uartosc: oscillator {
-		compatible = "fixed-clock";
-		#clock-cells = <1>;
-		clock-frequency  = <14745600>;
-		clock-output-names = "uartosc";
-	};
-
-	sc16is740: sc16is740@0 {
-		compatible = "nxp,sc16is740";
+	spiuart: spiuart@0 {
+		compatible = "nxp,sc16is752", "exar,xrm1280";
 		spi-max-frequency = <15000000>;
 		clocks = <&uartosc 0>;
 		reg = <0>;
@@ -379,32 +334,19 @@
 	pinctrl-0 = <&pinctrl_i2c2>;
 	status = "disabled";
 
-	codec: wm8960@1a {
-		compatible = "wlf,wm8960";
-		reg = <0x1a>;
-		clocks = <&clks IMX6UL_CLK_SAI2>;
-		clock-names = "mclk";
-		wlf,shared-lrclk;
+	uartosc1: oscillator {
+		compatible = "fixed-clock";
+		#clock-cells = <1>;
+		clock-frequency  = <14745600>;
+		clock-output-names = "uartosc1";
 	};
 
-	ov5640: ov5640@3c {
-		compatible = "ovti,ov5640";
-		reg = <0x3c>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&pinctrl_csi1>;
-		clocks = <&clks IMX6UL_CLK_CSI>;
-		clock-names = "csi_mclk";
-		pwn-gpios = <&gpio_spi 6 1>;
-		rst-gpios = <&gpio_spi 5 0>;
-		csi_id = <0>;
-		mclk = <24000000>;
-		mclk_source = <0>;
-		status = "disabled";
-		port {
-			ov5640_ep: endpoint {
-				remote-endpoint = <&csi1_ep>;
-			};
-		};
+	i2cuart: i2cuart@0 {
+		compatible = "nxp,sc16is740";
+		clocks = <&uartosc1 0>;
+		reg = <0x48>;
+		interrupt-parent = <&gpio2>;
+		interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
 	};
 };
 
@@ -639,6 +581,7 @@
 			fsl,pins = <
 				MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
 				MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
+				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15 0x4001b8b0
 			>;
 		};
 
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index e327cd5..f763260 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -1232,7 +1232,6 @@ config SERIAL_XRM1280_SPI
           This is additional support to exsisting driver.
           You must select at least one bus for the driver to be built.
 
-Supported ICs are XR20M1280.
 config SERIAL_BFIN_SPORT
 	tristate "Blackfin SPORT emulate UART"
 	depends on BLACKFIN
diff --git a/drivers/tty/serial/Makefile b/drivers/tty/serial/Makefile
index 289f8d9..265f3d0 100644
--- a/drivers/tty/serial/Makefile
+++ b/drivers/tty/serial/Makefile
@@ -49,7 +49,7 @@ obj-$(CONFIG_SERIAL_SB1250_DUART) += sb1250-duart.o
 obj-$(CONFIG_ETRAX_SERIAL) += crisv10.o
 obj-$(CONFIG_SERIAL_SCCNXP) += sccnxp.o
 obj-$(CONFIG_SERIAL_SC16IS7XX_CORE) += sc16is7xx.o
-obj-$(CONFIG_SERIAL_XR20M1280) += xrm1280.o
+obj-$(CONFIG_SERIAL_XRM1280_CORE) += xrm1280.o
 obj-$(CONFIG_SERIAL_JSM) += jsm/
 obj-$(CONFIG_SERIAL_TXX9) += serial_txx9.o
 obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o
diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c
index 7de36e2..e7cea26 100644
--- a/drivers/tty/serial/sc16is7xx.c
+++ b/drivers/tty/serial/sc16is7xx.c
@@ -1156,11 +1156,13 @@ static int sc16is7xx_probe(struct device *dev,
 	/* TODO */
 	printk("et was here\n");
 
+	regcache_cache_bypass(s->regmap, true);
 	sc16is7xx_port_read(&s->p[0].port, 3);
 	sc16is7xx_port_write(&s->p[0].port, 3, 0xAA);
 	sc16is7xx_port_read(&s->p[0].port, 3);
 	sc16is7xx_port_write(&s->p[0].port, 3, 0x55);
 	sc16is7xx_port_read(&s->p[0].port, 3);
+	regcache_cache_bypass(s->regmap, false);
 
 	/* TODO */
 
@@ -1247,7 +1249,8 @@ static int sc16is7xx_spi_probe(struct spi_device *spi)
 	spi->bits_per_word	= 8;
 	/* only supports mode 0 on SC16IS762 */
 	spi->mode		= spi->mode ? : SPI_MODE_0;
-	spi->max_speed_hz	= spi->max_speed_hz ? : 15000000;
+//	spi->max_speed_hz	= spi->max_speed_hz ? : 15000000;
+	spi->max_speed_hz	= 1000000;
 
 	printk("hello spi\n");
 
@@ -1312,6 +1315,8 @@ static int sc16is7xx_i2c_probe(struct i2c_client *i2c,
 	unsigned long flags = 0;
 	struct regmap *regmap;
 
+	printk("I2C probe \n");
+
 	if (i2c->dev.of_node) {
 		const struct of_device_id *of_id =
 				of_match_device(sc16is7xx_dt_ids, &i2c->dev);
@@ -1362,11 +1367,15 @@ static int __init sc16is7xx_init(void)
 {
 	int ret = 0;
 #ifdef CONFIG_SERIAL_SC16IS7XX_I2C
+	printk("I2C add driver \n");
+
 	ret = i2c_add_driver(&sc16is7xx_i2c_uart_driver);
 	if (ret < 0) {
 		pr_err("failed to init sc16is7xx i2c --> %d\n", ret);
+		printk("I2C add driver: %d\n", ret);
 		return ret;
 	}
+	printk("ok: %d\n", ret);
 #endif
 
 #ifdef CONFIG_SERIAL_SC16IS7XX_SPI
diff --git a/drivers/tty/serial/xrm1280.c b/drivers/tty/serial/xrm1280.c
index ee83f78..0ba288f 100644
--- a/drivers/tty/serial/xrm1280.c
+++ b/drivers/tty/serial/xrm1280.c
@@ -25,22 +25,8 @@
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/tty_flip.h>
+#include <linux/spi/spi.h>
 #include <linux/uaccess.h>
-#ifdef CONFIG_GPIOLIB
-#undef CONFIG_GPIOLIB
-#endif
-/**
- * enum uart_pm_state - power states for UARTs
- * @UART_PM_STATE_ON: UART is powered, up and operational
- * @UART_PM_STATE_OFF: UART is powered off
- * @UART_PM_STATE_UNDEFINED: sentinel
- */
-enum uart_pm_state {
-	UART_PM_STATE_ON = 0,
-	UART_PM_STATE_OFF = 3, /* number taken from ACPI */
-	UART_PM_STATE_UNDEFINED,
-};
-
 
 #define XRM1280_NAME			"xrm1280"
 
@@ -347,9 +333,13 @@ static u8 xrm1280_port_read(struct uart_port *port, u8 reg)
 	struct xrm1280_port *s = dev_get_drvdata(port->dev);
 	unsigned int val = 0;
 
+	printk("read (0x%x) ...", reg);
+
 	regmap_read(s->regmap,
 		    (reg << XRM1280_REG_SHIFT) | port->line, &val);
 
+	printk("val = 0x%x\n", val);
+
 	return val;
 }
 
@@ -357,6 +347,8 @@ static void xrm1280_port_write(struct uart_port *port, u8 reg, u8 val)
 {
 	struct xrm1280_port *s = dev_get_drvdata(port->dev);
 
+	printk("write (0x%x): 0x%x\n", reg, val);
+
 	regmap_write(s->regmap,
 		     (reg << XRM1280_REG_SHIFT) | port->line, val);
 }
@@ -366,6 +358,8 @@ static void xrm1280_port_update(struct uart_port *port, u8 reg,
 {
 	struct xrm1280_port *s = dev_get_drvdata(port->dev);
 
+	printk("port update (0x%x): 0x%x\n", reg, val);
+
 	regmap_update_bits(s->regmap,
 			   (reg << XRM1280_REG_SHIFT) | port->line,
 			   mask, val);
@@ -1022,7 +1016,6 @@ static const struct uart_ops xrm1280_ops = {
 	.release_port	= xrm1280_null_void,
 	.config_port	= xrm1280_config_port,
 	.verify_port	= xrm1280_verify_port,
-	.ioctl		= xrm1280_ioctl,
 	.pm		= xrm1280_pm,
 };
 
@@ -1171,7 +1164,15 @@ static int xrm1280_probe(struct device *dev,
 	ret = devm_request_threaded_irq(dev, irq, NULL, xrm1280_ist,
 					IRQF_ONESHOT | IRQF_TRIGGER_FALLING | flags, dev_name(dev), s);
 	//printk("xrm1280_probe devm_request_threaded_irq =%d\n",ret);
-	
+
+	regcache_cache_bypass(s->regmap, true);
+	xrm1280_port_read(&s->p[0].port, 3);
+	xrm1280_port_write(&s->p[0].port, 3, 0xAA);
+	xrm1280_port_read(&s->p[0].port, 3);
+	xrm1280_port_write(&s->p[0].port, 3, 0x55);
+	xrm1280_port_read(&s->p[0].port, 3);
+	regcache_cache_bypass(s->regmap, false);
+
 	if (!ret)
 		return 0;
 
@@ -1247,8 +1248,8 @@ static int xrm1280_spi_probe(struct spi_device *spi)
 	spi->bits_per_word	= 8;
 	/* only supports mode 0 on SC16IS762 */
 	spi->mode		= spi->mode ? : SPI_MODE_0;
-	spi->max_speed_hz	= spi->max_speed_hz ? : 25000000;
-
+//	spi->max_speed_hz	= spi->max_speed_hz ? : 25000000;
+	spi->max_speed_hz	= 1000000;
 	printk("hello spi\n");
 
 	ret = spi_setup(spi);
@@ -1267,7 +1268,7 @@ static int xrm1280_spi_probe(struct spi_device *spi)
 		flags = IRQF_TRIGGER_FALLING;
 	}
 
-	regcfg.max_register = (0xf << xrm1280_REG_SHIFT) |
+	regcfg.max_register = (0xf << XRM1280_REG_SHIFT) |
 			      (devtype->nr_uart - 1);
 	regmap = devm_regmap_init_spi(spi, &regcfg);
 
-- 
2.1.4

