aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/i2c-core.c54
-rw-r--r--drivers/i2c/i2c-dev.c34
2 files changed, 44 insertions, 44 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 79eaa12474dd..64f11e00651c 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -127,7 +127,7 @@ static ssize_t show_client_name(struct device *dev, struct device_attribute *att
127 return sprintf(buf, "%s\n", client->name); 127 return sprintf(buf, "%s\n", client->name);
128} 128}
129 129
130/* 130/*
131 * We can't use the DEVICE_ATTR() macro here as we want the same filename for a 131 * We can't use the DEVICE_ATTR() macro here as we want the same filename for a
132 * different type of a device. So beware if the DEVICE_ATTR() macro ever 132 * different type of a device. So beware if the DEVICE_ATTR() macro ever
133 * changes, this definition will also have to change. 133 * changes, this definition will also have to change.
@@ -139,8 +139,8 @@ static struct device_attribute dev_attr_client_name = {
139 139
140 140
141/* --------------------------------------------------- 141/* ---------------------------------------------------
142 * registering functions 142 * registering functions
143 * --------------------------------------------------- 143 * ---------------------------------------------------
144 */ 144 */
145 145
146/* ----- 146/* -----
@@ -314,7 +314,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
314 res = driver_register(&driver->driver); 314 res = driver_register(&driver->driver);
315 if (res) 315 if (res)
316 return res; 316 return res;
317 317
318 mutex_lock(&core_lists); 318 mutex_lock(&core_lists);
319 319
320 list_add_tail(&driver->list,&drivers); 320 list_add_tail(&driver->list,&drivers);
@@ -338,13 +338,13 @@ int i2c_del_driver(struct i2c_driver *driver)
338 struct list_head *item1, *item2, *_n; 338 struct list_head *item1, *item2, *_n;
339 struct i2c_client *client; 339 struct i2c_client *client;
340 struct i2c_adapter *adap; 340 struct i2c_adapter *adap;
341 341
342 int res = 0; 342 int res = 0;
343 343
344 mutex_lock(&core_lists); 344 mutex_lock(&core_lists);
345 345
346 /* Have a look at each adapter, if clients of this driver are still 346 /* Have a look at each adapter, if clients of this driver are still
347 * attached. If so, detach them to be able to kill the driver 347 * attached. If so, detach them to be able to kill the driver
348 * afterwards. 348 * afterwards.
349 */ 349 */
350 list_for_each(item1,&adapters) { 350 list_for_each(item1,&adapters) {
@@ -419,14 +419,14 @@ int i2c_attach_client(struct i2c_client *client)
419 goto out_unlock; 419 goto out_unlock;
420 } 420 }
421 list_add_tail(&client->list,&adapter->clients); 421 list_add_tail(&client->list,&adapter->clients);
422 422
423 client->usage_count = 0; 423 client->usage_count = 0;
424 424
425 client->dev.parent = &client->adapter->dev; 425 client->dev.parent = &client->adapter->dev;
426 client->dev.driver = &client->driver->driver; 426 client->dev.driver = &client->driver->driver;
427 client->dev.bus = &i2c_bus_type; 427 client->dev.bus = &i2c_bus_type;
428 client->dev.release = &i2c_client_release; 428 client->dev.release = &i2c_client_release;
429 429
430 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id), 430 snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
431 "%d-%04x", i2c_adapter_id(adapter), client->addr); 431 "%d-%04x", i2c_adapter_id(adapter), client->addr);
432 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n", 432 dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
@@ -467,7 +467,7 @@ int i2c_detach_client(struct i2c_client *client)
467{ 467{
468 struct i2c_adapter *adapter = client->adapter; 468 struct i2c_adapter *adapter = client->adapter;
469 int res = 0; 469 int res = 0;
470 470
471 if (client->usage_count > 0) { 471 if (client->usage_count > 0) {
472 dev_warn(&client->dev, "Client [%s] still busy, " 472 dev_warn(&client->dev, "Client [%s] still busy, "
473 "can't detach\n", client->name); 473 "can't detach\n", client->name);
@@ -535,10 +535,10 @@ int i2c_release_client(struct i2c_client *client)
535 __FUNCTION__); 535 __FUNCTION__);
536 return -EPERM; 536 return -EPERM;
537 } 537 }
538 538
539 client->usage_count--; 539 client->usage_count--;
540 i2c_dec_use_client(client); 540 i2c_dec_use_client(client);
541 541
542 return 0; 542 return 0;
543} 543}
544 544
@@ -624,7 +624,7 @@ int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
624 msg.flags = client->flags & I2C_M_TEN; 624 msg.flags = client->flags & I2C_M_TEN;
625 msg.len = count; 625 msg.len = count;
626 msg.buf = (char *)buf; 626 msg.buf = (char *)buf;
627 627
628 ret = i2c_transfer(adap, &msg, 1); 628 ret = i2c_transfer(adap, &msg, 1);
629 629
630 /* If everything went ok (i.e. 1 msg transmitted), return #bytes 630 /* If everything went ok (i.e. 1 msg transmitted), return #bytes
@@ -757,7 +757,7 @@ int i2c_probe(struct i2c_adapter *adapter,
757 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) { 757 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
758 if (address_data->probe[0] == I2C_CLIENT_END 758 if (address_data->probe[0] == I2C_CLIENT_END
759 && address_data->normal_i2c[0] == I2C_CLIENT_END) 759 && address_data->normal_i2c[0] == I2C_CLIENT_END)
760 return 0; 760 return 0;
761 761
762 dev_warn(&adapter->dev, "SMBus Quick command not supported, " 762 dev_warn(&adapter->dev, "SMBus Quick command not supported, "
763 "can't probe for chips\n"); 763 "can't probe for chips\n");
@@ -817,7 +817,7 @@ int i2c_probe(struct i2c_adapter *adapter,
817struct i2c_adapter* i2c_get_adapter(int id) 817struct i2c_adapter* i2c_get_adapter(int id)
818{ 818{
819 struct i2c_adapter *adapter; 819 struct i2c_adapter *adapter;
820 820
821 mutex_lock(&core_lists); 821 mutex_lock(&core_lists);
822 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id); 822 adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
823 if (adapter && !try_module_get(adapter->owner)) 823 if (adapter && !try_module_get(adapter->owner))
@@ -834,14 +834,14 @@ void i2c_put_adapter(struct i2c_adapter *adap)
834 834
835/* The SMBus parts */ 835/* The SMBus parts */
836 836
837#define POLY (0x1070U << 3) 837#define POLY (0x1070U << 3)
838static u8 838static u8
839crc8(u16 data) 839crc8(u16 data)
840{ 840{
841 int i; 841 int i;
842 842
843 for(i = 0; i < 8; i++) { 843 for(i = 0; i < 8; i++) {
844 if (data & 0x8000) 844 if (data & 0x8000)
845 data = data ^ POLY; 845 data = data ^ POLY;
846 data = data << 1; 846 data = data << 1;
847 } 847 }
@@ -891,13 +891,13 @@ static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
891 rpec, cpec); 891 rpec, cpec);
892 return -1; 892 return -1;
893 } 893 }
894 return 0; 894 return 0;
895} 895}
896 896
897s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value) 897s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
898{ 898{
899 return i2c_smbus_xfer(client->adapter,client->addr,client->flags, 899 return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
900 value,0,I2C_SMBUS_QUICK,NULL); 900 value,0,I2C_SMBUS_QUICK,NULL);
901} 901}
902 902
903s32 i2c_smbus_read_byte(struct i2c_client *client) 903s32 i2c_smbus_read_byte(struct i2c_client *client)
@@ -996,11 +996,11 @@ s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
996 I2C_SMBUS_I2C_BLOCK_DATA, &data); 996 I2C_SMBUS_I2C_BLOCK_DATA, &data);
997} 997}
998 998
999/* Simulate a SMBus command using the i2c protocol 999/* Simulate a SMBus command using the i2c protocol
1000 No checking of parameters is done! */ 1000 No checking of parameters is done! */
1001static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr, 1001static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1002 unsigned short flags, 1002 unsigned short flags,
1003 char read_write, u8 command, int size, 1003 char read_write, u8 command, int size,
1004 union i2c_smbus_data * data) 1004 union i2c_smbus_data * data)
1005{ 1005{
1006 /* So we need to generate a series of msgs. In the case of writing, we 1006 /* So we need to generate a series of msgs. In the case of writing, we
@@ -1010,7 +1010,7 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1010 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3]; 1010 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
1011 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2]; 1011 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
1012 int num = read_write == I2C_SMBUS_READ?2:1; 1012 int num = read_write == I2C_SMBUS_READ?2:1;
1013 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 }, 1013 struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 },
1014 { addr, flags | I2C_M_RD, 0, msgbuf1 } 1014 { addr, flags | I2C_M_RD, 0, msgbuf1 }
1015 }; 1015 };
1016 int i; 1016 int i;
@@ -1103,14 +1103,14 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1103 if (i) { 1103 if (i) {
1104 /* Compute PEC if first message is a write */ 1104 /* Compute PEC if first message is a write */
1105 if (!(msg[0].flags & I2C_M_RD)) { 1105 if (!(msg[0].flags & I2C_M_RD)) {
1106 if (num == 1) /* Write only */ 1106 if (num == 1) /* Write only */
1107 i2c_smbus_add_pec(&msg[0]); 1107 i2c_smbus_add_pec(&msg[0]);
1108 else /* Write followed by read */ 1108 else /* Write followed by read */
1109 partial_pec = i2c_smbus_msg_pec(0, &msg[0]); 1109 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
1110 } 1110 }
1111 /* Ask for PEC if last message is a read */ 1111 /* Ask for PEC if last message is a read */
1112 if (msg[num-1].flags & I2C_M_RD) 1112 if (msg[num-1].flags & I2C_M_RD)
1113 msg[num-1].len++; 1113 msg[num-1].len++;
1114 } 1114 }
1115 1115
1116 if (i2c_transfer(adapter, msg, num) < 0) 1116 if (i2c_transfer(adapter, msg, num) < 0)
@@ -1130,7 +1130,7 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1130 case I2C_SMBUS_BYTE_DATA: 1130 case I2C_SMBUS_BYTE_DATA:
1131 data->byte = msgbuf1[0]; 1131 data->byte = msgbuf1[0];
1132 break; 1132 break;
1133 case I2C_SMBUS_WORD_DATA: 1133 case I2C_SMBUS_WORD_DATA:
1134 case I2C_SMBUS_PROC_CALL: 1134 case I2C_SMBUS_PROC_CALL:
1135 data->word = msgbuf1[0] | (msgbuf1[1] << 8); 1135 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
1136 break; 1136 break;
@@ -1146,7 +1146,7 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr,
1146 1146
1147 1147
1148s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags, 1148s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags,
1149 char read_write, u8 command, int size, 1149 char read_write, u8 command, int size,
1150 union i2c_smbus_data * data) 1150 union i2c_smbus_data * data)
1151{ 1151{
1152 s32 res; 1152 s32 res;
diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
index d66cefc63df7..cf9381eae8da 100644
--- a/drivers/i2c/i2c-dev.c
+++ b/drivers/i2c/i2c-dev.c
@@ -1,5 +1,5 @@
1/* 1/*
2 i2c-dev.c - i2c-bus driver, char device interface 2 i2c-dev.c - i2c-bus driver, char device interface
3 3
4 Copyright (C) 1995-97 Simon G. Vogl 4 Copyright (C) 1995-97 Simon G. Vogl
5 Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl> 5 Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>
@@ -172,7 +172,7 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
172 switch ( cmd ) { 172 switch ( cmd ) {
173 case I2C_SLAVE: 173 case I2C_SLAVE:
174 case I2C_SLAVE_FORCE: 174 case I2C_SLAVE_FORCE:
175 if ((arg > 0x3ff) || 175 if ((arg > 0x3ff) ||
176 (((client->flags & I2C_M_TEN) == 0) && arg > 0x7f)) 176 (((client->flags & I2C_M_TEN) == 0) && arg > 0x7f))
177 return -EINVAL; 177 return -EINVAL;
178 if ((cmd == I2C_SLAVE) && i2c_check_addr(client->adapter,arg)) 178 if ((cmd == I2C_SLAVE) && i2c_check_addr(client->adapter,arg))
@@ -196,8 +196,8 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
196 return put_user(funcs, (unsigned long __user *)arg); 196 return put_user(funcs, (unsigned long __user *)arg);
197 197
198 case I2C_RDWR: 198 case I2C_RDWR:
199 if (copy_from_user(&rdwr_arg, 199 if (copy_from_user(&rdwr_arg,
200 (struct i2c_rdwr_ioctl_data __user *)arg, 200 (struct i2c_rdwr_ioctl_data __user *)arg,
201 sizeof(rdwr_arg))) 201 sizeof(rdwr_arg)))
202 return -EFAULT; 202 return -EFAULT;
203 203
@@ -205,9 +205,9 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
205 * be sent at once */ 205 * be sent at once */
206 if (rdwr_arg.nmsgs > I2C_RDRW_IOCTL_MAX_MSGS) 206 if (rdwr_arg.nmsgs > I2C_RDRW_IOCTL_MAX_MSGS)
207 return -EINVAL; 207 return -EINVAL;
208 208
209 rdwr_pa = (struct i2c_msg *) 209 rdwr_pa = (struct i2c_msg *)
210 kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg), 210 kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg),
211 GFP_KERNEL); 211 GFP_KERNEL);
212 212
213 if (rdwr_pa == NULL) return -ENOMEM; 213 if (rdwr_pa == NULL) return -ENOMEM;
@@ -277,9 +277,9 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
277 (struct i2c_smbus_ioctl_data __user *) arg, 277 (struct i2c_smbus_ioctl_data __user *) arg,
278 sizeof(struct i2c_smbus_ioctl_data))) 278 sizeof(struct i2c_smbus_ioctl_data)))
279 return -EFAULT; 279 return -EFAULT;
280 if ((data_arg.size != I2C_SMBUS_BYTE) && 280 if ((data_arg.size != I2C_SMBUS_BYTE) &&
281 (data_arg.size != I2C_SMBUS_QUICK) && 281 (data_arg.size != I2C_SMBUS_QUICK) &&
282 (data_arg.size != I2C_SMBUS_BYTE_DATA) && 282 (data_arg.size != I2C_SMBUS_BYTE_DATA) &&
283 (data_arg.size != I2C_SMBUS_WORD_DATA) && 283 (data_arg.size != I2C_SMBUS_WORD_DATA) &&
284 (data_arg.size != I2C_SMBUS_PROC_CALL) && 284 (data_arg.size != I2C_SMBUS_PROC_CALL) &&
285 (data_arg.size != I2C_SMBUS_BLOCK_DATA) && 285 (data_arg.size != I2C_SMBUS_BLOCK_DATA) &&
@@ -290,11 +290,11 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
290 data_arg.size); 290 data_arg.size);
291 return -EINVAL; 291 return -EINVAL;
292 } 292 }
293 /* Note that I2C_SMBUS_READ and I2C_SMBUS_WRITE are 0 and 1, 293 /* Note that I2C_SMBUS_READ and I2C_SMBUS_WRITE are 0 and 1,
294 so the check is valid if size==I2C_SMBUS_QUICK too. */ 294 so the check is valid if size==I2C_SMBUS_QUICK too. */
295 if ((data_arg.read_write != I2C_SMBUS_READ) && 295 if ((data_arg.read_write != I2C_SMBUS_READ) &&
296 (data_arg.read_write != I2C_SMBUS_WRITE)) { 296 (data_arg.read_write != I2C_SMBUS_WRITE)) {
297 dev_dbg(&client->adapter->dev, 297 dev_dbg(&client->adapter->dev,
298 "read_write out of range (%x) in ioctl I2C_SMBUS.\n", 298 "read_write out of range (%x) in ioctl I2C_SMBUS.\n",
299 data_arg.read_write); 299 data_arg.read_write);
300 return -EINVAL; 300 return -EINVAL;
@@ -303,7 +303,7 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
303 /* Note that command values are always valid! */ 303 /* Note that command values are always valid! */
304 304
305 if ((data_arg.size == I2C_SMBUS_QUICK) || 305 if ((data_arg.size == I2C_SMBUS_QUICK) ||
306 ((data_arg.size == I2C_SMBUS_BYTE) && 306 ((data_arg.size == I2C_SMBUS_BYTE) &&
307 (data_arg.read_write == I2C_SMBUS_WRITE))) 307 (data_arg.read_write == I2C_SMBUS_WRITE)))
308 /* These are special: we do not use data */ 308 /* These are special: we do not use data */
309 return i2c_smbus_xfer(client->adapter, client->addr, 309 return i2c_smbus_xfer(client->adapter, client->addr,
@@ -321,14 +321,14 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
321 if ((data_arg.size == I2C_SMBUS_BYTE_DATA) || 321 if ((data_arg.size == I2C_SMBUS_BYTE_DATA) ||
322 (data_arg.size == I2C_SMBUS_BYTE)) 322 (data_arg.size == I2C_SMBUS_BYTE))
323 datasize = sizeof(data_arg.data->byte); 323 datasize = sizeof(data_arg.data->byte);
324 else if ((data_arg.size == I2C_SMBUS_WORD_DATA) || 324 else if ((data_arg.size == I2C_SMBUS_WORD_DATA) ||
325 (data_arg.size == I2C_SMBUS_PROC_CALL)) 325 (data_arg.size == I2C_SMBUS_PROC_CALL))
326 datasize = sizeof(data_arg.data->word); 326 datasize = sizeof(data_arg.data->word);
327 else /* size == smbus block, i2c block, or block proc. call */ 327 else /* size == smbus block, i2c block, or block proc. call */
328 datasize = sizeof(data_arg.data->block); 328 datasize = sizeof(data_arg.data->block);
329 329
330 if ((data_arg.size == I2C_SMBUS_PROC_CALL) || 330 if ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
331 (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) || 331 (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
332 (data_arg.read_write == I2C_SMBUS_WRITE)) { 332 (data_arg.read_write == I2C_SMBUS_WRITE)) {
333 if (copy_from_user(&temp, data_arg.data, datasize)) 333 if (copy_from_user(&temp, data_arg.data, datasize))
334 return -EFAULT; 334 return -EFAULT;
@@ -336,8 +336,8 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
336 res = i2c_smbus_xfer(client->adapter,client->addr,client->flags, 336 res = i2c_smbus_xfer(client->adapter,client->addr,client->flags,
337 data_arg.read_write, 337 data_arg.read_write,
338 data_arg.command,data_arg.size,&temp); 338 data_arg.command,data_arg.size,&temp);
339 if (! res && ((data_arg.size == I2C_SMBUS_PROC_CALL) || 339 if (! res && ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
340 (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) || 340 (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
341 (data_arg.read_write == I2C_SMBUS_READ))) { 341 (data_arg.read_write == I2C_SMBUS_READ))) {
342 if (copy_to_user(data_arg.data, &temp, datasize)) 342 if (copy_to_user(data_arg.data, &temp, datasize))
343 return -EFAULT; 343 return -EFAULT;