Changeset 3878
- Timestamp:
- 12/20/03 01:18:27 (9 years ago)
- Location:
- i2c/trunk/kernel
- Files:
-
- 3 modified
-
i2c-algo-bit.c (modified) (2 diffs)
-
i2c-core.c (modified) (4 diffs)
-
i2c.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
i2c/trunk/kernel/i2c-algo-bit.c
r3877 r3878 402 402 count = inval + 1; /* plus one for [Count] itself */ 403 403 msg->len = count; 404 if (msg->flags & I2C_M_RECV_PEC) 405 count++; /* plus one for PEC */ 404 406 } else { 405 407 printk(KERN_ERR "i2c-algo-bit.o: readbytes: bad block count (%d).\n", inval); … … 537 539 I2C_FUNC_PROTOCOL_MANGLING | 538 540 I2C_FUNC_SMBUS_BLOCK_PROC_CALL | 539 I2C_FUNC_SMBUS_READ_BLOCK_DATA; 541 I2C_FUNC_SMBUS_READ_BLOCK_DATA | 542 I2C_FUNC_SMBUS_BLOCK_PROC_CALL_PEC | 543 I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC; 540 544 } 541 545 -
i2c/trunk/kernel/i2c-core.c
r3877 r3878 1209 1209 most things with sane defaults, to keep the code below somewhat 1210 1210 simpler. */ 1211 unsigned char msgbuf0[ 34];1212 unsigned char msgbuf1[ 34];1211 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+2]; 1212 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2]; 1213 1213 int num = read_write == I2C_SMBUS_READ?2:1; 1214 1214 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 }, 1215 1215 { addr, flags | I2C_M_RD, 0, msgbuf1 } 1216 1216 }; 1217 int i ;1217 int i, len; 1218 1218 1219 1219 msgbuf0[0] = command; … … 1271 1271 msg[1].flags |= I2C_M_RECV_LEN; 1272 1272 msg[1].len = I2C_SMBUS_BLOCK_MAX + 1; 1273 if (size == I2C_SMBUS_BLOCK_DATA_PEC) 1273 if (size == I2C_SMBUS_BLOCK_DATA_PEC) { 1274 1274 msg[1].len++; 1275 msg[1].flags |= I2C_M_RECV_PEC; 1276 } 1275 1277 } else { 1276 1278 msg[0].len = data->block[0] + 2; … … 1312 1314 msg[1].flags |= I2C_M_RECV_LEN; 1313 1315 msg[1].len = I2C_SMBUS_BLOCK_MAX + 1; 1314 if (size == I2C_SMBUS_BLOCK_PROC_CALL_PEC) 1316 if (size == I2C_SMBUS_BLOCK_PROC_CALL_PEC) { 1315 1317 msg[1].len++; 1318 msg[1].flags |= I2C_M_RECV_PEC; 1319 } 1316 1320 break; 1317 1321 case I2C_SMBUS_I2C_BLOCK_DATA: … … 1358 1362 break; 1359 1363 case I2C_SMBUS_BLOCK_DATA: 1364 case I2C_SMBUS_BLOCK_PROC_CALL: 1360 1365 case I2C_SMBUS_BLOCK_DATA_PEC: 1361 case I2C_SMBUS_BLOCK_PROC_CALL:1362 1366 case I2C_SMBUS_BLOCK_PROC_CALL_PEC: 1363 for (i = 0; i < I2C_SMBUS_BLOCK_MAX + 2; i++) 1367 len = msgbuf1[0] + 1; 1368 if(size == I2C_SMBUS_BLOCK_DATA_PEC || 1369 size == I2C_SMBUS_BLOCK_PROC_CALL_PEC) 1370 len++; 1371 for (i = 0; i < len; i++) 1364 1372 data->block[i] = msgbuf1[i]; 1365 1373 break; -
i2c/trunk/kernel/i2c.h
r3877 r3878 362 362 #define I2C_M_IGNORE_NAK 0x1000 363 363 #define I2C_M_NO_RD_ACK 0x0800 364 #define I2C_M_RECV_LEN 0x0400 364 #define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */ 365 #define I2C_M_RECV_PEC 0x0200 /* receive one more than the returned 366 length byte for the PEC */ 365 367 __u16 len; /* msg length */ 366 368 __u8 *buf; /* pointer to msg data */
