diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-28 17:04:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-28 17:04:53 -0400 |
commit | 07d43ba98621f08e252a48c96b258b4d572b0257 (patch) | |
tree | c5dd8be6b2032b02fb2a27a91b02a55d54ed702d /drivers/i2c/i2c-core.c | |
parent | 0fe41b8982001cd14ee2c77cd776735a5024e98b (diff) | |
parent | 09b8ce0a691d8e76f14a16ac6cbfde899f6c68e3 (diff) |
Merge branch 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6
* 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6:
i2c-core: Some style cleanups
i2c-piix4: Add support for the Broadcom HT1100 chipset
i2c-piix4: Add support to SB800 SMBus changes
i2c-pca-platform: Use defaults if no platform_data given
i2c-algo-pca: Use timeout for checking the state machine
i2c-algo-pca: Rework waiting for a free bus
i2c-algo-pca: Add PCA9665 support
i2c: Adapt debug macros for KERN_* constants
i2c-davinci: Fix timeout handling
i2c: Adapter timeout is in jiffies
i2c: Set a default timeout value for all adapters
i2c: Add missing KERN_* constants to printks
i2c-algo-pcf: Handle timeout correctly
i2c-algo-pcf: Style cleanups
eeprom/at24: Remove EXPERIMENTAL
i2c-nforce2: Add support for MCP67, MCP73, MCP78S and MCP79
i2c: Clarify which clients are auto-removed
i2c: Let checkpatch shout on users of the legacy model
i2c: Document the different ways to instantiate i2c devices
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r-- | drivers/i2c/i2c-core.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index fbb9030b68a5..b6f3a0de6ca2 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
@@ -152,7 +152,7 @@ static void i2c_device_shutdown(struct device *dev) | |||
152 | driver->shutdown(to_i2c_client(dev)); | 152 | driver->shutdown(to_i2c_client(dev)); |
153 | } | 153 | } |
154 | 154 | ||
155 | static int i2c_device_suspend(struct device * dev, pm_message_t mesg) | 155 | static int i2c_device_suspend(struct device *dev, pm_message_t mesg) |
156 | { | 156 | { |
157 | struct i2c_driver *driver; | 157 | struct i2c_driver *driver; |
158 | 158 | ||
@@ -164,7 +164,7 @@ static int i2c_device_suspend(struct device * dev, pm_message_t mesg) | |||
164 | return driver->suspend(to_i2c_client(dev), mesg); | 164 | return driver->suspend(to_i2c_client(dev), mesg); |
165 | } | 165 | } |
166 | 166 | ||
167 | static int i2c_device_resume(struct device * dev) | 167 | static int i2c_device_resume(struct device *dev) |
168 | { | 168 | { |
169 | struct i2c_driver *driver; | 169 | struct i2c_driver *driver; |
170 | 170 | ||
@@ -187,13 +187,15 @@ static void i2c_client_dev_release(struct device *dev) | |||
187 | kfree(to_i2c_client(dev)); | 187 | kfree(to_i2c_client(dev)); |
188 | } | 188 | } |
189 | 189 | ||
190 | static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf) | 190 | static ssize_t |
191 | show_client_name(struct device *dev, struct device_attribute *attr, char *buf) | ||
191 | { | 192 | { |
192 | struct i2c_client *client = to_i2c_client(dev); | 193 | struct i2c_client *client = to_i2c_client(dev); |
193 | return sprintf(buf, "%s\n", client->name); | 194 | return sprintf(buf, "%s\n", client->name); |
194 | } | 195 | } |
195 | 196 | ||
196 | static ssize_t show_modalias(struct device *dev, struct device_attribute *attr, char *buf) | 197 | static ssize_t |
198 | show_modalias(struct device *dev, struct device_attribute *attr, char *buf) | ||
197 | { | 199 | { |
198 | struct i2c_client *client = to_i2c_client(dev); | 200 | struct i2c_client *client = to_i2c_client(dev); |
199 | return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name); | 201 | return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name); |
@@ -365,8 +367,7 @@ static struct i2c_driver dummy_driver = { | |||
365 | * This returns the new i2c client, which should be saved for later use with | 367 | * This returns the new i2c client, which should be saved for later use with |
366 | * i2c_unregister_device(); or NULL to indicate an error. | 368 | * i2c_unregister_device(); or NULL to indicate an error. |
367 | */ | 369 | */ |
368 | struct i2c_client * | 370 | struct i2c_client *i2c_new_dummy(struct i2c_adapter *adapter, u16 address) |
369 | i2c_new_dummy(struct i2c_adapter *adapter, u16 address) | ||
370 | { | 371 | { |
371 | struct i2c_board_info info = { | 372 | struct i2c_board_info info = { |
372 | I2C_BOARD_INFO("dummy", address), | 373 | I2C_BOARD_INFO("dummy", address), |
@@ -413,8 +414,8 @@ static void i2c_scan_static_board_info(struct i2c_adapter *adapter) | |||
413 | if (devinfo->busnum == adapter->nr | 414 | if (devinfo->busnum == adapter->nr |
414 | && !i2c_new_device(adapter, | 415 | && !i2c_new_device(adapter, |
415 | &devinfo->board_info)) | 416 | &devinfo->board_info)) |
416 | printk(KERN_ERR "i2c-core: can't create i2c%d-%04x\n", | 417 | dev_err(&adapter->dev, |
417 | i2c_adapter_id(adapter), | 418 | "Can't create device at 0x%02x\n", |
418 | devinfo->board_info.addr); | 419 | devinfo->board_info.addr); |
419 | } | 420 | } |
420 | mutex_unlock(&__i2c_board_lock); | 421 | mutex_unlock(&__i2c_board_lock); |
@@ -459,6 +460,11 @@ static int i2c_register_adapter(struct i2c_adapter *adap) | |||
459 | pr_debug("I2C adapter driver [%s] forgot to specify " | 460 | pr_debug("I2C adapter driver [%s] forgot to specify " |
460 | "physical device\n", adap->name); | 461 | "physical device\n", adap->name); |
461 | } | 462 | } |
463 | |||
464 | /* Set default timeout to 1 second if not already set */ | ||
465 | if (adap->timeout == 0) | ||
466 | adap->timeout = HZ; | ||
467 | |||
462 | dev_set_name(&adap->dev, "i2c-%d", adap->nr); | 468 | dev_set_name(&adap->dev, "i2c-%d", adap->nr); |
463 | adap->dev.release = &i2c_adapter_dev_release; | 469 | adap->dev.release = &i2c_adapter_dev_release; |
464 | adap->dev.class = &i2c_adapter_class; | 470 | adap->dev.class = &i2c_adapter_class; |
@@ -581,7 +587,8 @@ static int i2c_do_del_adapter(struct device_driver *d, void *data) | |||
581 | struct i2c_client *client, *_n; | 587 | struct i2c_client *client, *_n; |
582 | int res; | 588 | int res; |
583 | 589 | ||
584 | /* Remove the devices we created ourselves */ | 590 | /* Remove the devices we created ourselves as the result of hardware |
591 | * probing (using a driver's detect method) */ | ||
585 | list_for_each_entry_safe(client, _n, &driver->clients, detected) { | 592 | list_for_each_entry_safe(client, _n, &driver->clients, detected) { |
586 | if (client->adapter == adapter) { | 593 | if (client->adapter == adapter) { |
587 | dev_dbg(&adapter->dev, "Removing %s at 0x%x\n", | 594 | dev_dbg(&adapter->dev, "Removing %s at 0x%x\n", |
@@ -749,6 +756,8 @@ static int __detach_adapter(struct device *dev, void *data) | |||
749 | struct i2c_driver *driver = data; | 756 | struct i2c_driver *driver = data; |
750 | struct i2c_client *client, *_n; | 757 | struct i2c_client *client, *_n; |
751 | 758 | ||
759 | /* Remove the devices we created ourselves as the result of hardware | ||
760 | * probing (using a driver's detect method) */ | ||
752 | list_for_each_entry_safe(client, _n, &driver->clients, detected) { | 761 | list_for_each_entry_safe(client, _n, &driver->clients, detected) { |
753 | dev_dbg(&adapter->dev, "Removing %s at 0x%x\n", | 762 | dev_dbg(&adapter->dev, "Removing %s at 0x%x\n", |
754 | client->name, client->addr); | 763 | client->name, client->addr); |
@@ -1012,7 +1021,7 @@ module_exit(i2c_exit); | |||
1012 | * Note that there is no requirement that each message be sent to | 1021 | * Note that there is no requirement that each message be sent to |
1013 | * the same slave address, although that is the most common model. | 1022 | * the same slave address, although that is the most common model. |
1014 | */ | 1023 | */ |
1015 | int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num) | 1024 | int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) |
1016 | { | 1025 | { |
1017 | int ret; | 1026 | int ret; |
1018 | 1027 | ||
@@ -1519,8 +1528,7 @@ EXPORT_SYMBOL(i2c_put_adapter); | |||
1519 | /* The SMBus parts */ | 1528 | /* The SMBus parts */ |
1520 | 1529 | ||
1521 | #define POLY (0x1070U << 3) | 1530 | #define POLY (0x1070U << 3) |
1522 | static u8 | 1531 | static u8 crc8(u16 data) |
1523 | crc8(u16 data) | ||
1524 | { | 1532 | { |
1525 | int i; | 1533 | int i; |
1526 | 1534 | ||
@@ -1984,9 +1992,9 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr, | |||
1984 | * This executes an SMBus protocol operation, and returns a negative | 1992 | * This executes an SMBus protocol operation, and returns a negative |
1985 | * errno code else zero on success. | 1993 | * errno code else zero on success. |
1986 | */ | 1994 | */ |
1987 | s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags, | 1995 | s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags, |
1988 | char read_write, u8 command, int protocol, | 1996 | char read_write, u8 command, int protocol, |
1989 | union i2c_smbus_data * data) | 1997 | union i2c_smbus_data *data) |
1990 | { | 1998 | { |
1991 | s32 res; | 1999 | s32 res; |
1992 | 2000 | ||