Changeset 3491

Show
Ignore:
Timestamp:
08/12/00 18:37:15 (13 years ago)
Author:
mds
Message:

(mds) add i2c block read/write support from Rickard Westman.

Location:
i2c/trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • i2c/trunk/CHANGES

    r3481 r3491  
    1414      cvs diff -r V2-0-0 -r V2-0-1 -u 
    1515 
    16 2.5.2 (200007??) 
     162.5.3 (2000????) 
     17  i2c-core.c, i2c-dev.c, i2c-dev.h, i2c.h: Add i2c block read/write support 
     18 
     192.5.2 (20000709) 
    1720  i2c-philips-par: Now compiles on all 2.2 kernels 
    1821  i2c-core: Corrected some SMBus block commands-related stuff 
  • i2c/trunk/kernel/i2c-core.c

    r3482 r3491  
    11101110} 
    11111111 
     1112extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client, 
     1113                                          u8 command, u8 length, u8 *values) 
     1114{ 
     1115        union i2c_smbus_data data; 
     1116        int i; 
     1117        if (length > 32) 
     1118                length = 32; 
     1119        for (i = 1; i <= length; i++) 
     1120                data.block[i] = values[i-1]; 
     1121        data.block[0] = length; 
     1122        return i2c_smbus_xfer(client->adapter,client->addr,client->flags, 
     1123                              I2C_SMBUS_WRITE,command, 
     1124                              I2C_SMBUS_I2C_BLOCK_DATA,&data); 
     1125} 
     1126 
    11121127/* Simulate a SMBus command using the i2c protocol  
    11131128   No checking of parameters is done!  */ 
  • i2c/trunk/kernel/i2c-dev.c

    r3487 r3491  
    294294                    (data_arg.size != I2C_SMBUS_WORD_DATA) && 
    295295                    (data_arg.size != I2C_SMBUS_PROC_CALL) && 
    296                     (data_arg.size != I2C_SMBUS_BLOCK_DATA)) { 
     296                    (data_arg.size != I2C_SMBUS_BLOCK_DATA) && 
     297                    (data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA)) { 
    297298#ifdef DEBUG 
    298299                        printk("i2c-dev.o: size out of range (%x) in ioctl I2C_SMBUS.\n", 
  • i2c/trunk/kernel/i2c-dev.h

    r3450 r3491  
    163163} 
    164164 
     165extern inline __s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, 
     166                                               __u8 length, __u8 *values) 
     167{ 
     168        union i2c_smbus_data data; 
     169        int i; 
     170        if (length > 32) 
     171                length = 32; 
     172        for (i = 1; i <= length; i++) 
     173                data.block[i] = values[i-1]; 
     174        data.block[0] = length; 
     175        return i2c_smbus_access(file,I2C_SMBUS_WRITE,command, 
     176                                I2C_SMBUS_I2C_BLOCK_DATA, &data); 
     177} 
     178 
    165179#endif /* ndef __KERNEL__ */ 
    166180 
  • i2c/trunk/kernel/i2c.h

    r3486 r3491  
    121121                                      u8 command, u8 length, 
    122122                                      u8 *values); 
     123extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client, 
     124                                          u8 command, u8 length, 
     125                                          u8 *values); 
    123126 
    124127 
     
    438441/* SMBus transaction types (size parameter in the above functions)  
    439442   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */ 
    440 #define I2C_SMBUS_QUICK         0 
    441 #define I2C_SMBUS_BYTE          1 
    442 #define I2C_SMBUS_BYTE_DATA     2  
    443 #define I2C_SMBUS_WORD_DATA     3 
    444 #define I2C_SMBUS_PROC_CALL     4 
    445 #define I2C_SMBUS_BLOCK_DATA    5 
     443#define I2C_SMBUS_QUICK             0 
     444#define I2C_SMBUS_BYTE              1 
     445#define I2C_SMBUS_BYTE_DATA         2  
     446#define I2C_SMBUS_WORD_DATA         3 
     447#define I2C_SMBUS_PROC_CALL         4 
     448#define I2C_SMBUS_BLOCK_DATA        5 
     449#define I2C_SMBUS_I2C_BLOCK_DATA    6 
    446450 
    447451