From 76e798d5f852d1551474a27a519cd008ff29f4f1 Mon Sep 17 00:00:00 2001
From: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Date: Tue, 28 May 2019 16:07:28 +0300
Subject: [PATCH 122/122] lvds: ti9x4: fix remote gpio setup

The remote gpio must be set after remote gpio enablement on
serializer side.
Fix compilation warnings.
GEOEMI registers addresing is 1 byte.

Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
---
 drivers/media/i2c/soc_camera/ar0233.c        | 1 -
 drivers/media/i2c/soc_camera/gw4200_ar014x.c | 8 ++++----
 drivers/media/i2c/soc_camera/gw5200_imx390.c | 8 ++++----
 drivers/media/i2c/soc_camera/imx390.c        | 2 +-
 drivers/media/i2c/soc_camera/ti9x4.c         | 5 +++--
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/media/i2c/soc_camera/ar0233.c b/drivers/media/i2c/soc_camera/ar0233.c
index 543b8a6..f3b899e 100644
--- a/drivers/media/i2c/soc_camera/ar0233.c
+++ b/drivers/media/i2c/soc_camera/ar0233.c
@@ -63,7 +63,6 @@ static inline struct ar0233_priv *to_ar0233(const struct i2c_client *client)
 
 static int ar0233_set_regs(struct i2c_client *client, const struct ar0233_reg **pregs)
 {
-	struct ar0233_priv *priv = to_ar0233(client);
 	const struct ar0233_reg *regs;
 	int i, j;
 
diff --git a/drivers/media/i2c/soc_camera/gw4200_ar014x.c b/drivers/media/i2c/soc_camera/gw4200_ar014x.c
index 674e409..45123ae 100644
--- a/drivers/media/i2c/soc_camera/gw4200_ar014x.c
+++ b/drivers/media/i2c/soc_camera/gw4200_ar014x.c
@@ -267,14 +267,14 @@ static int gw4200_g_register(struct v4l2_subdev *sd,
 {
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 	int ret;
-	u16 val = 0;
+	u8 val = 0;
 
-	ret = reg16_read16(client, (u16)reg->reg, &val);
+	ret = reg8_read(client, (u8)reg->reg, &val);
 	if (ret < 0)
 		return ret;
 
 	reg->val = val;
-	reg->size = sizeof(u16);
+	reg->size = sizeof(u8);
 
 	return 0;
 }
@@ -284,7 +284,7 @@ static int gw4200_s_register(struct v4l2_subdev *sd,
 {
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 
-	return reg16_write16(client, (u16)reg->reg, (u16)reg->val);
+	return reg8_write(client, (u8)reg->reg, (u8)reg->val);
 }
 #endif
 
diff --git a/drivers/media/i2c/soc_camera/gw5200_imx390.c b/drivers/media/i2c/soc_camera/gw5200_imx390.c
index 0703c3d..90de41f 100644
--- a/drivers/media/i2c/soc_camera/gw5200_imx390.c
+++ b/drivers/media/i2c/soc_camera/gw5200_imx390.c
@@ -235,14 +235,14 @@ static int gw5200_g_register(struct v4l2_subdev *sd,
 {
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 	int ret;
-	u16 val = 0;
+	u8 val = 0;
 
-	ret = reg16_read16(client, (u16)reg->reg, &val);
+	ret = reg8_read(client, (u8)reg->reg, &val);
 	if (ret < 0)
 		return ret;
 
 	reg->val = val;
-	reg->size = sizeof(u16);
+	reg->size = sizeof(u8);
 
 	return 0;
 }
@@ -252,7 +252,7 @@ static int gw5200_s_register(struct v4l2_subdev *sd,
 {
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 
-	return reg16_write16(client, (u16)reg->reg, (u16)reg->val);
+	return reg8_write(client, (u8)reg->reg, (u8)reg->val);
 }
 #endif
 
diff --git a/drivers/media/i2c/soc_camera/imx390.c b/drivers/media/i2c/soc_camera/imx390.c
index 7171d70..87279d0 100644
--- a/drivers/media/i2c/soc_camera/imx390.c
+++ b/drivers/media/i2c/soc_camera/imx390.c
@@ -249,7 +249,7 @@ static int imx390_s_ctrl(struct v4l2_ctrl *ctrl)
 	struct imx390_priv *priv = to_imx390(client);
 	int ret = -EINVAL;
 	int val;
-	uint8_t val8;
+	uint8_t val8 = 0;
 
 	if (!priv->init_complete)
 		return 0;
diff --git a/drivers/media/i2c/soc_camera/ti9x4.c b/drivers/media/i2c/soc_camera/ti9x4.c
index fdb50e5..0cfcfaa 100644
--- a/drivers/media/i2c/soc_camera/ti9x4.c
+++ b/drivers/media/i2c/soc_camera/ti9x4.c
@@ -275,8 +275,6 @@ static void ti9x4_fpdlink3_setup(struct i2c_client *client, int idx)
 	reg8_write(client, 0x70, ((priv->vc_map >> (idx * 4)) << 6) | 0x1e); /* CSI data type: yuv422 8-bit, assign VC */
 	reg8_write(client, 0x71, ((priv->vc_map >> (idx * 4)) << 6) | 0x2c); /* CSI data type: RAW12, assign VC */
 	reg8_write(client, 0xbc, 0x00);				/* Setup minimal time between FV and LV to 3 PCLKs */
-	reg8_write(client, 0x6e, 0x88 | (priv->gpio[1] << 4) | priv->gpio[0]); /* Remote GPIO1/GPIO0 setup */
-	reg8_write(client, 0x6f, 0x88 | (priv->gpio[3] << 4) | priv->gpio[2]); /* Remote GPIO3/GPIO2 setup */
 	reg8_write(client, 0x72, priv->vc_map >> (idx * 4));	/* CSI VC MAP */
 }
 
@@ -340,6 +338,9 @@ static int ti9x4_initialize(struct i2c_client *client)
 			break;
 		}
 		client->addr = priv->des_addr;
+
+		reg8_write(client, 0x6e, 0x88 | (priv->gpio[1] << 4) | priv->gpio[0]); /* Remote GPIO1/GPIO0 setup */
+		reg8_write(client, 0x6f, 0x88 | (priv->gpio[3] << 4) | priv->gpio[2]); /* Remote GPIO3/GPIO2 setup */
 	}
 
 	return 0;
-- 
2.7.4

