]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] i2c updates
authorChristoph Hellwig <hch@lst.de>
Mon, 30 Dec 2002 03:51:03 +0000 (19:51 -0800)
committerLinus Torvalds <torvalds@home.transmeta.com>
Mon, 30 Dec 2002 03:51:03 +0000 (19:51 -0800)
a few new ids, a name change and 10 lines of new code, ported over from
the external i2c package.

drivers/i2c/i2c-algo-ibm_ocp.c
drivers/i2c/i2c-algo-ibm_ocp.h
drivers/i2c/i2c-dev.c
drivers/i2c/i2c-proc.c
include/linux/i2c-algo-bit.h
include/linux/i2c-id.h
include/linux/i2c.h

index 77380200a2ef714fc2318031e380107a4889607d..3b345d2e9d7896a76fb6e54df1df014eb84fd23e 100644 (file)
@@ -877,7 +877,7 @@ static struct i2c_algorithm iic_algo = {
 //
 // Description: Register bus structure
 //
-int i2c_iic_add_bus(struct i2c_adapter *adap)
+int i2c_ocp_add_bus(struct i2c_adapter *adap)
 {
        struct i2c_algo_iic_data *iic_adap = adap->algo_data;
 
@@ -912,7 +912,7 @@ int i2c_iic_add_bus(struct i2c_adapter *adap)
 //
 // Done
 //
-int i2c_iic_del_bus(struct i2c_adapter *adap)
+int i2c_ocp_del_bus(struct i2c_adapter *adap)
 {
        int res;
        if ((res = i2c_del_adapter(adap)) < 0)
@@ -942,8 +942,8 @@ void i2c_algo_iic_exit(void)
 }
 
 
-EXPORT_SYMBOL(i2c_iic_add_bus);
-EXPORT_SYMBOL(i2c_iic_del_bus);
+EXPORT_SYMBOL(i2c_ocp_add_bus);
+EXPORT_SYMBOL(i2c_ocp_del_bus);
 
 //
 // The MODULE_* macros resolve to nothing if MODULES is not defined
index e32e5af81b3891900ad60cb28132df49d0502fdf..5a4e588f19ae05df10207a12a7eba5454c4020e5 100644 (file)
@@ -49,7 +49,7 @@ struct i2c_algo_iic_data {
 #define I2C_IIC_ADAP_MAX       16
 
 
-int i2c_iic_add_bus(struct i2c_adapter *);
-int i2c_iic_del_bus(struct i2c_adapter *);
+int i2c_ocp_add_bus(struct i2c_adapter *);
+int i2c_ocp_del_bus(struct i2c_adapter *);
 
 #endif /* I2C_ALGO_IIC_H */
index c456b8a0f87542168fda850385ebd5118f583536..14d0081b98fe0c28a973370fd7c8715ce893601a 100644 (file)
@@ -138,9 +138,9 @@ static ssize_t i2cdev_write (struct file *file, const char *buf, size_t count,
        struct inode *inode = file->f_dentry->d_inode;
 #endif /* DEBUG */
 
-       if(count > 8192)
+       if (count > 8192)
                count = 8192;
-               
+
        /* copy user space data to kernel space. */
        tmp = kmalloc(count,GFP_KERNEL);
        if (tmp==NULL)
index 9ec18313fd27f899295e20e201bba5335bb27dbc..785e9c5f37166d96a58038e900c195dac266a6f8 100644 (file)
@@ -97,10 +97,21 @@ int i2c_create_name(char **name, const char *prefix,
                        struct i2c_adapter *adapter, int addr)
 {
        char name_buffer[50];
-       int id;
+       int id, i, end;
        if (i2c_is_isa_adapter(adapter))
                sprintf(name_buffer, "%s-isa-%04x", prefix, addr);
-       else {
+       else if (!adapter->algo->smbus_xfer && !adapter->algo->master_xfer) {
+               /* dummy adapter, generate prefix */
+               sprintf(name_buffer, "%s-", prefix);
+               end = strlen(name_buffer);
+               for(i = 0; i < 32; i++) {
+                       if(adapter->algo->name[i] == ' ')
+                               break;
+                       name_buffer[end++] = tolower(adapter->algo->name[i]);
+               }
+               name_buffer[end] = 0;
+               sprintf(name_buffer + end, "-%04x", addr);
+       } else {
                if ((id = i2c_adapter_id(adapter)) < 0)
                        return -ENOENT;
                sprintf(name_buffer, "%s-i2c-%d-%02x", prefix, id, addr);
index 9598d2cbf718a907d2b464f4171ba534963f6160..fea550f163d9c393a08b89bae0ac5dac80ab50b8 100644 (file)
@@ -42,9 +42,10 @@ struct i2c_algo_bit_data {
        int  (*getscl) (void *data);
 
        /* local settings */
-       int udelay;
-       int mdelay;
-       int timeout;
+       int udelay;             /* half-clock-cycle time in microsecs */
+                               /* i.e. clock is (500 / udelay) KHz */
+       int mdelay;             /* in millisecs, unused */
+       int timeout;            /* in jiffies */
 };
 
 #define I2C_BIT_ADAP_MAX       16
index 2b6394004ea11232991205e42c4cdc660fc88d74..0061776f040203e069ceafe8c84c9270883dda8a 100644 (file)
 #define I2C_DRIVERID_LM92 1033
 #define I2C_DRIVERID_VT8231 1034
 #define I2C_DRIVERID_SMARTBATT 1035
+#define I2C_DRIVERID_BMCSENSORS 1036
+#define I2C_DRIVERID_FS451 1037
 
 /*
  * ---- Adapter types ----------------------------------------------------
 #define I2C_ALGO_IIC    0x080000       /* ITE IIC bus */
 #define I2C_ALGO_SAA7134 0x090000
 #define I2C_ALGO_MPC824X 0x0a0000      /* Motorola 8240 / 8245         */
+#define I2C_ALGO_IPMI  0x0b0000        /* IPMI dummy adapter */
+#define I2C_ALGO_IPMB  0x0c0000        /* IPMB adapter */
 #define I2C_ALGO_EC     0x100000        /* ACPI embedded controller     */
 
 #define I2C_ALGO_MPC8XX 0x110000       /* MPC8xx PowerPC I2C algorithm */
 #define I2C_HW_B_VOO   0x0b    /* 3dfx Voodoo 3 / Banshee              */
 #define I2C_HW_B_PPORT  0x0c   /* Primitive parallel port adapter      */
 #define I2C_HW_B_SAVG  0x0d    /* Savage 4                             */
+#define I2C_HW_B_SCX200        0x0e    /* Nat'l Semi SCx200 I2C                */
 #define I2C_HW_B_RIVA  0x10    /* Riva based graphics cards            */
 #define I2C_HW_B_IOC   0x11    /* IOC bit-wiggling                     */
 #define I2C_HW_B_TSUNA  0x12   /* DEC Tsunami chipset                  */
 #define I2C_HW_SMBUS_SIS630    0x08
 #define I2C_HW_SMBUS_SIS645    0x09
 #define I2C_HW_SMBUS_AMD8111   0x0a
+#define I2C_HW_SMBUS_SCX200    0x0b
 
 /* --- ISA pseudo-adapter                                              */
 #define I2C_HW_ISA 0x00
 
+/* --- IPMI pseudo-adapter                                             */
+#define I2C_HW_IPMI 0x00
+
+/* --- IPMB adapter                                            */
+#define I2C_HW_IPMB 0x00
+
 #endif /* I2C_ID_H */
index d343349836e2b145201b5b8e665517008a61f238..765a95af3a4ee04378fff8e97ea5ceebdf1d5590 100644 (file)
@@ -367,6 +367,8 @@ struct i2c_msg {
 #define I2C_M_RD       0x01
 #define I2C_M_NOSTART  0x4000
 #define I2C_M_REV_DIR_ADDR     0x2000
+#define I2C_M_IGNORE_NAK       0x1000
+#define I2C_M_NO_RD_ACK                0x0800
        short len;              /* msg length                           */
        char *buf;              /* pointer to msg data                  */
 };
@@ -375,7 +377,7 @@ struct i2c_msg {
 
 #define I2C_FUNC_I2C                   0x00000001
 #define I2C_FUNC_10BIT_ADDR            0x00000002
-#define I2C_FUNC_PROTOCOL_MANGLING     0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART} */
+#define I2C_FUNC_PROTOCOL_MANGLING     0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */
 #define I2C_FUNC_SMBUS_HWPEC_CALC      0x00000008 /* SMBus 2.0 */
 #define I2C_FUNC_SMBUS_READ_WORD_DATA_PEC  0x00000800 /* SMBus 2.0 */ 
 #define I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC 0x00001000 /* SMBus 2.0 */