rtc-pcf8583: Don't abuse I2C_M_NOSTART
The rtc-pcf8583 driver is using the I2C_M_NOSTART flag but shouldn't. This flag is only meant for broken chips and the PCF8583 RTC chip is not one of these. Signed-off-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Alessandro Zummo <a.zummo@towertech.it> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
09b6bdb3b6
commit
037e291cc7
|
@ -163,27 +163,17 @@ static int pcf8583_read_mem(struct i2c_client *client, struct rtc_mem *mem)
|
|||
|
||||
static int pcf8583_write_mem(struct i2c_client *client, struct rtc_mem *mem)
|
||||
{
|
||||
unsigned char addr[1];
|
||||
struct i2c_msg msgs[2] = {
|
||||
{
|
||||
.addr = client->addr,
|
||||
.flags = 0,
|
||||
.len = 1,
|
||||
.buf = addr,
|
||||
}, {
|
||||
.addr = client->addr,
|
||||
.flags = I2C_M_NOSTART,
|
||||
.len = mem->nr,
|
||||
.buf = mem->data,
|
||||
}
|
||||
};
|
||||
unsigned char buf[9];
|
||||
int ret;
|
||||
|
||||
if (mem->loc < 8)
|
||||
if (mem->loc < 8 || mem->nr > 8)
|
||||
return -EINVAL;
|
||||
|
||||
addr[0] = mem->loc;
|
||||
buf[0] = mem->loc;
|
||||
memcpy(buf + 1, mem->data, mem->nr);
|
||||
|
||||
return i2c_transfer(client->adapter, msgs, 2) == 2 ? 0 : -EIO;
|
||||
ret = i2c_master_send(client, buf, mem->nr + 1);
|
||||
return ret == mem->nr + 1 ? 0 : -EIO;
|
||||
}
|
||||
|
||||
static int pcf8583_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
||||
|
|
Loading…
Reference in New Issue