From 02541026a1227270d6c1a2c311ef2842de551581 Mon Sep 17 00:00:00 2001
From: kfx <kfx@rock-chips.com>
Date: Fri, 7 Dec 2012 16:05:54 +0800
Subject: [PATCH] i2c: i2c_master_reg8_direct_recv

---
 drivers/i2c/i2c-core.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 33d8df20b09c..c3704677077b 100755
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1700,6 +1700,7 @@ EXPORT_SYMBOL(i2c_master_reg8_direct_send);
 
 int i2c_master_reg8_direct_recv(const struct i2c_client *client, const char reg, char *buf, int count, int scl_rate)
 {
+#ifdef CONFIG_ARCH_RK29
 	struct i2c_adapter *adap=client->adapter;
 	struct i2c_msg msg;
 	int ret;
@@ -1716,6 +1717,30 @@ int i2c_master_reg8_direct_recv(const struct i2c_client *client, const char reg,
 	ret = i2c_transfer(adap, &msg, 1);
 	memcpy(buf, tx_buf + 1, count);
 	return (ret == 1) ? count : ret;
+#else
+	struct i2c_adapter *adap=client->adapter;
+	struct i2c_msg msgs[2];
+	int ret;
+	char reg_buf = reg;
+	
+	msgs[0].addr = client->addr;
+	msgs[0].flags = client->flags | I2C_M_RD;
+	msgs[0].len = 1;
+	msgs[0].buf = &reg_buf;
+	msgs[0].scl_rate = scl_rate;
+	msgs[0].udelay = client->udelay;
+
+	msgs[1].addr = client->addr;
+	msgs[1].flags = client->flags | I2C_M_RD;
+	msgs[1].len = count;
+	msgs[1].buf = (char *)buf;
+	msgs[1].scl_rate = scl_rate;
+	msgs[1].udelay = client->udelay;
+
+	ret = i2c_transfer(adap, msgs, 2);
+
+	return (ret == 2)? count : ret;
+#endif
 }
 EXPORT_SYMBOL(i2c_master_reg8_direct_recv);
 
-- 
2.34.1