From 49d2e72cfa25744d63c53c5288316759a45a9414 Mon Sep 17 00:00:00 2001
From: Brian Johnson <brijohn@gmail.com>
Date: Thu, 12 Mar 2009 16:21:22 -0400
Subject: [PATCH] Update mt9v112 probe function

The 6270/mt9v112 has been found to use both 0x59 and 0x48
i2c slave addresses. This updates the probe function to
handle this.

Signed-off-by: Brian Johnson <brijohn@gmail.com>
---
 micron.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/micron.c b/micron.c
index 9e3e479..2551508 100644
--- a/micron.c
+++ b/micron.c
@@ -538,19 +538,21 @@ int mt9v111_probe(struct usb_sn9c20x *dev)
 
 int mt9v112_probe(struct usb_sn9c20x *dev)
 {
-	int ret;
+	int ret, i;
+	__u8 slave_addrs[] = {0x5d, 0x48};
 	__u16 buf;
-	dev->camera.address = 0x5d;
-	/* Select address-space: sensor */
-	buf = 0x00;
-	ret = sn9c20x_write_i2c_data16(dev, 1, 0xf0, &buf);
-	if (ret != 0)
-		return ret;
-
-	ret = sn9c20x_read_i2c_data16(dev, 1, 0x00, &buf);
-	if ((ret == 0) && (buf == 0x1229))
-		return MT9V112_SENSOR;
-
+	for (i = 0; i < ARRAY_SIZE(slave_addrs); i++) {
+		dev->camera.address = slave_addrs[i];
+		/* Select address-space: sensor */
+		buf = 0x00;
+		ret = sn9c20x_write_i2c_data16(dev, 1, 0xf0, &buf);
+		if (ret != 0)
+			continue;
+
+		ret = sn9c20x_read_i2c_data16(dev, 1, 0x00, &buf);
+		if ((ret == 0) && (buf == 0x1229))
+			return MT9V112_SENSOR;
+	}
 	return -EINVAL;
 }
 
-- 
1.5.6.3

