#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/i2c.h>
+#include <linux/wakelock.h>
#include <mach/board.h>
#include <asm/io.h>
#endif
};
+static struct wake_lock idlelock; /* only for i2c0 */
+
static void rk29_set_ack(struct rk29_i2c_data *i2c)
{
unsigned long conr = readl(i2c->regs + I2C_CONR);
int ret = -1;
int i;
struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
+
//int retry = i2c->retry;
/*
if(i2c->suspended ==1)
i2c->udelay_time = RK29_UDELAY_TIME(i2c->scl_rate);
i2c->ack_timeout = RK29_I2C_ACK_TIMEOUT_COUNT * i2c->udelay_time;
+
+ if (adap->nr == 0)
+ wake_lock(&idlelock);
+
for (i = 0; i < num; i++)
{
ret = rk29_xfer_msg(adap, &msgs[i], (i == 0), (i == (num - 1)));
break;
}
}
+
+ if (adap->nr == 0)
+ wake_unlock(&idlelock);
+
/*
if( --retry && num < 0)
{
static int __init rk29_i2c_adap_init(void)
{
+ wake_lock_init(&idlelock, WAKE_LOCK_IDLE, "i2c0");
return platform_driver_register(&rk29_i2c_driver);
}