Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 192639
b: refs/heads/master
c: 526835d
h: refs/heads/master
i:
  192637: 75245de
  192635: 305b6df
  192631: d6b5a2b
  192623: 3eb5afb
  192607: 5591e9b
  192575: 96846c3
  192511: 9325e2b
v: v3
  • Loading branch information
Michel Ludwig authored and Mauro Carvalho Chehab committed May 18, 2010
1 parent a3579bf commit 557d88f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0ec4acc6a6405c78a8655687d382ece0daf001b8
refs/heads/master: 526835d5b30a591578f2813a8837ac70172c0aa9
37 changes: 27 additions & 10 deletions trunk/drivers/staging/tm6000/tm6000-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
Copyright (C) 2006-2007 Mauro Carvalho Chehab <mchehab@infradead.org>
Copyright (C) 2007 Michel Ludwig <michel.ludwig@gmail.com>
- Fix SMBus Read Byte command
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation version 2
Expand Down Expand Up @@ -92,6 +95,7 @@ static int tm6000_i2c_xfer(struct i2c_adapter *i2c_adap,
{
struct tm6000_core *dev = i2c_adap->algo_data;
int addr, rc, i, byte;
u8 prev_reg = 0;

if (num <= 0)
return 0;
Expand All @@ -100,25 +104,31 @@ static int tm6000_i2c_xfer(struct i2c_adapter *i2c_adap,
i2c_dprintk(2,"%s %s addr=0x%x len=%d:",
(msgs[i].flags & I2C_M_RD) ? "read" : "write",
i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);

if (!msgs[i].len) {
/* Do I2C scan */
rc=tm6000_i2c_scan(i2c_adap, addr);
} else if (msgs[i].flags & I2C_M_RD) {
char buf[msgs[i].len];
memcpy(buf,msgs[i].buf, msgs[i].len-1);
buf[msgs[i].len-1]=0;

/* Read bytes */
/* I2C is assumed to have always a subaddr at the first byte of the
message bus. Also, the first i2c value of the answer is returned
out of message data.
*/
rc = tm6000_read_write_usb (dev,
USB_DIR_IN | USB_TYPE_VENDOR,
REQ_16_SET_GET_I2CSEQ,
addr|(*msgs[i].buf)<<8, 0,
msgs[i].buf, msgs[i].len);
/* SMBus Read Byte command */
if(msgs[i].len == 1) {
// we use the previously used register to read from
rc = tm6000_read_write_usb (dev,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
REQ_16_SET_GET_I2CSEQ,
addr | prev_reg<<8, 0,
msgs[i].buf, msgs[i].len);
}
else {
rc = tm6000_read_write_usb (dev,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
REQ_16_SET_GET_I2CSEQ,
addr|(*msgs[i].buf)<<8, 0,
msgs[i].buf, msgs[i].len);
}
if (i2c_debug>=2) {
for (byte = 0; byte < msgs[i].len; byte++) {
printk(" %02x", msgs[i].buf[byte]);
Expand All @@ -136,6 +146,13 @@ static int tm6000_i2c_xfer(struct i2c_adapter *i2c_adap,
REQ_16_SET_GET_I2CSEQ,
addr|(*msgs[i].buf)<<8, 0,
msgs[i].buf+1, msgs[i].len-1);

if(msgs[i].len >= 1) {
prev_reg = msgs[i].buf[0];
}
else {
prev_reg = 0;
}
}
if (i2c_debug>=2)
printk("\n");
Expand Down

0 comments on commit 557d88f

Please sign in to comment.