i2c-algo-bit: Read block data bugfix

This fixes a bug in the way i2c-algo-bit handles I2C_M_RECV_LEN,
used to implement i2c_smbus_read_block_data(). Previously, in the
absence of PEC (rarely used!) it would NAK the "length" byte:

S addr Rd [A] [length] NA

That prevents the subsequent data bytes from being read:

S addr Rd [A] [length] { A [data] }* NA

The primary fix just reorders two code blocks, so the length used
in the "should I NAK now?" check incorporates the data which it
just read from the slave device.

However, that move also highlighted other fault handling glitches.
This fixes those by abstracting the RX path ack/nak logic, so it
can be used in more than one location. Also, a few CodingStyle
issues were also resolved.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Jean Delvare <khali@linux-fr.org>

authored by David Brownell and committed by Jean Delvare 939bc494 51e5709a

+32 -20
+32 -20
drivers/i2c/algos/i2c-algo-bit.c
··· 357 return wrcount; 358 } 359 360 static int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) 361 { 362 int inval; 363 int rdcount=0; /* counts bytes read */ 364 - struct i2c_algo_bit_data *adap = i2c_adap->algo_data; 365 unsigned char *temp = msg->buf; 366 int count = msg->len; 367 368 while (count > 0) { 369 inval = i2c_inb(i2c_adap); ··· 393 temp++; 394 count--; 395 396 - if (msg->flags & I2C_M_NO_RD_ACK) { 397 - bit_dbg(2, &i2c_adap->dev, "i2c_inb: 0x%02x\n", 398 - inval); 399 - continue; 400 - } 401 - 402 - /* assert: sda is high */ 403 - if (count) /* send ack */ 404 - setsda(adap, 0); 405 - udelay((adap->udelay + 1) / 2); 406 - bit_dbg(2, &i2c_adap->dev, "i2c_inb: 0x%02x %s\n", inval, 407 - count ? "A" : "NA"); 408 - if (sclhi(adap)<0) { /* timeout */ 409 - dev_err(&i2c_adap->dev, "readbytes: timeout at ack\n"); 410 - return -ETIMEDOUT; 411 - }; 412 - scllo(adap); 413 - 414 /* Some SMBus transactions require that we receive the 415 transaction length as the first read byte. */ 416 - if (rdcount == 1 && (msg->flags & I2C_M_RECV_LEN)) { 417 if (inval <= 0 || inval > I2C_SMBUS_BLOCK_MAX) { 418 dev_err(&i2c_adap->dev, "readbytes: invalid " 419 "block length (%d)\n", inval); 420 return -EREMOTEIO; ··· 408 or 2 for a PEC transaction. */ 409 count += inval; 410 msg->len += inval; 411 } 412 } 413 return rdcount;
··· 357 return wrcount; 358 } 359 360 + static int acknak(struct i2c_adapter *i2c_adap, int is_ack) 361 + { 362 + struct i2c_algo_bit_data *adap = i2c_adap->algo_data; 363 + 364 + /* assert: sda is high */ 365 + if (is_ack) /* send ack */ 366 + setsda(adap, 0); 367 + udelay((adap->udelay + 1) / 2); 368 + if (sclhi(adap) < 0) { /* timeout */ 369 + dev_err(&i2c_adap->dev, "readbytes: ack/nak timeout\n"); 370 + return -ETIMEDOUT; 371 + } 372 + scllo(adap); 373 + return 0; 374 + } 375 + 376 static int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) 377 { 378 int inval; 379 int rdcount=0; /* counts bytes read */ 380 unsigned char *temp = msg->buf; 381 int count = msg->len; 382 + const unsigned flags = msg->flags; 383 384 while (count > 0) { 385 inval = i2c_inb(i2c_adap); ··· 377 temp++; 378 count--; 379 380 /* Some SMBus transactions require that we receive the 381 transaction length as the first read byte. */ 382 + if (rdcount == 1 && (flags & I2C_M_RECV_LEN)) { 383 if (inval <= 0 || inval > I2C_SMBUS_BLOCK_MAX) { 384 + if (!(flags & I2C_M_NO_RD_ACK)) 385 + acknak(i2c_adap, 0); 386 dev_err(&i2c_adap->dev, "readbytes: invalid " 387 "block length (%d)\n", inval); 388 return -EREMOTEIO; ··· 408 or 2 for a PEC transaction. */ 409 count += inval; 410 msg->len += inval; 411 + } 412 + 413 + bit_dbg(2, &i2c_adap->dev, "readbytes: 0x%02x %s\n", 414 + inval, 415 + (flags & I2C_M_NO_RD_ACK) 416 + ? "(no ack/nak)" 417 + : (count ? "A" : "NA")); 418 + 419 + if (!(flags & I2C_M_NO_RD_ACK)) { 420 + inval = acknak(i2c_adap, count); 421 + if (inval < 0) 422 + return inval; 423 } 424 } 425 return rdcount;