Changeset 3600
- Timestamp:
- 11/19/01 20:01:46 (12 years ago)
- Location:
- i2c/trunk/kernel
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
i2c/trunk/kernel/i2c-core.c
r3599 r3600 1110 1110 } 1111 1111 1112 /* Returns the number of read bytes */ 1113 extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client, 1114 u8 command, u8 *values) 1115 { 1116 union i2c_smbus_data data; 1117 int i; 1118 if (i2c_smbus_xfer(client->adapter,client->addr,client->flags, 1119 I2C_SMBUS_READ,command, 1120 I2C_SMBUS_I2C_BLOCK_DATA,&data)) 1121 return -1; 1122 else { 1123 for (i = 1; i <= data.block[0]; i++) 1124 values[i-1] = data.block[i]; 1125 return data.block[0]; 1126 } 1127 } 1128 1112 1129 extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client, 1113 1130 u8 command, u8 length, u8 *values) … … 1193 1210 printk(KERN_ERR "i2c-core.o: smbus_access called with " 1194 1211 "invalid block write size (%d)\n", 1195 msg[0].len);1212 data->block[0]); 1196 1213 return -1; 1197 1214 } 1198 1215 for (i = 1; i <= msg[0].len; i++) 1199 1216 msgbuf0[i] = data->block[i-1]; 1217 } 1218 break; 1219 case I2C_SMBUS_I2C_BLOCK_DATA: 1220 if (read_write == I2C_SMBUS_READ) { 1221 msg[1].len = 32; 1222 } else { 1223 msg[0].len = data->block[0] + 2; 1224 if (msg[0].len > 34) { 1225 printk("i2c-core.o: i2c_smbus_xfer_emulated called with " 1226 "invalid block write size (%d)\n", 1227 data->block[0]); 1228 return -1; 1229 } 1230 for (i = 0; i < data->block[0]; i++) 1231 msgbuf0[i] = data->block[i+1]; 1200 1232 } 1201 1233 break; … … 1221 1253 data->word = msgbuf1[0] | (msgbuf1[1] << 8); 1222 1254 break; 1255 case I2C_SMBUS_I2C_BLOCK_DATA: 1256 /* fixed at 32 for now */ 1257 data->block[0] = 32; 1258 for (i = 0; i < 32; i++) 1259 data->block[i+1] = msgbuf1[i]; 1260 break; 1223 1261 } 1224 1262 return 0; … … 1401 1439 EXPORT_SYMBOL(i2c_smbus_read_block_data); 1402 1440 EXPORT_SYMBOL(i2c_smbus_write_block_data); 1441 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data); 1442 EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data); 1403 1443 1404 1444 EXPORT_SYMBOL(i2c_get_functionality); -
i2c/trunk/kernel/i2c-dev.h
r3568 r3600 163 163 } 164 164 165 /* Returns the number of read bytes */ 166 static inline __s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, 167 __u8 *values) 168 { 169 union i2c_smbus_data data; 170 int i; 171 if (i2c_smbus_access(file,I2C_SMBUS_READ,command, 172 I2C_SMBUS_I2C_BLOCK_DATA,&data)) 173 return -1; 174 else { 175 for (i = 1; i <= data.block[0]; i++) 176 values[i-1] = data.block[i]; 177 return data.block[0]; 178 } 179 } 180 165 181 static inline __s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, 166 182 __u8 length, __u8 *values) -
i2c/trunk/kernel/i2c.h
r3597 r3600 124 124 u8 command, u8 length, 125 125 u8 *values); 126 extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client, 127 u8 command, u8 *values); 126 128 extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client, 127 129 u8 command, u8 length, … … 407 409 #define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000 408 410 #define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000 409 #define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* New I2C-like block */ 410 #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* transfer */ 411 #define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */ 412 #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */ 413 #define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */ 414 #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */ 411 415 412 416 #define I2C_FUNC_SMBUS_BYTE I2C_FUNC_SMBUS_READ_BYTE | \ … … 420 424 #define I2C_FUNC_SMBUS_I2C_BLOCK I2C_FUNC_SMBUS_READ_I2C_BLOCK | \ 421 425 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 426 #define I2C_FUNC_SMBUS_I2C_BLOCK_2 I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 | \ 427 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 422 428 423 429 #define I2C_FUNC_SMBUS_EMUL I2C_FUNC_SMBUS_QUICK | \ … … 426 432 I2C_FUNC_SMBUS_WORD_DATA | \ 427 433 I2C_FUNC_SMBUS_PROC_CALL | \ 428 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 434 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \ 435 I2C_FUNC_SMBUS_I2C_BLOCK | \ 436 I2C_FUNC_SMBUS_I2C_BLOCK_2 429 437 430 438 /*
