diff options
85 files changed, 191 insertions, 287 deletions
diff --git a/Documentation/i2c/busses/i2c-ali1535 b/Documentation/i2c/busses/i2c-ali1535 index 0db3b4c74ad1..acbc65a08097 100644 --- a/Documentation/i2c/busses/i2c-ali1535 +++ b/Documentation/i2c/busses/i2c-ali1535 | |||
| @@ -6,12 +6,12 @@ Supported adapters: | |||
| 6 | http://www.ali.com.tw/eng/support/datasheet_request.php | 6 | http://www.ali.com.tw/eng/support/datasheet_request.php |
| 7 | 7 | ||
| 8 | Authors: | 8 | Authors: |
| 9 | Frodo Looijaard <frodol@dds.nl>, | 9 | Frodo Looijaard <frodol@dds.nl>, |
| 10 | Philip Edelbrock <phil@netroedge.com>, | 10 | Philip Edelbrock <phil@netroedge.com>, |
| 11 | Mark D. Studebaker <mdsxyz123@yahoo.com>, | 11 | Mark D. Studebaker <mdsxyz123@yahoo.com>, |
| 12 | Dan Eaton <dan.eaton@rocketlogix.com>, | 12 | Dan Eaton <dan.eaton@rocketlogix.com>, |
| 13 | Stephen Rousset<stephen.rousset@rocketlogix.com> | 13 | Stephen Rousset<stephen.rousset@rocketlogix.com> |
| 14 | 14 | ||
| 15 | Description | 15 | Description |
| 16 | ----------- | 16 | ----------- |
| 17 | 17 | ||
diff --git a/Documentation/i2c/busses/i2c-ali1563 b/Documentation/i2c/busses/i2c-ali1563 index 99ad4b9bcc32..54691698d2dd 100644 --- a/Documentation/i2c/busses/i2c-ali1563 +++ b/Documentation/i2c/busses/i2c-ali1563 | |||
| @@ -18,7 +18,7 @@ For an overview of these chips see http://www.acerlabs.com | |||
| 18 | The M1563 southbridge is deceptively similar to the M1533, with a few | 18 | The M1563 southbridge is deceptively similar to the M1533, with a few |
| 19 | notable exceptions. One of those happens to be the fact they upgraded the | 19 | notable exceptions. One of those happens to be the fact they upgraded the |
| 20 | i2c core to be SMBus 2.0 compliant, and happens to be almost identical to | 20 | i2c core to be SMBus 2.0 compliant, and happens to be almost identical to |
| 21 | the i2c controller found in the Intel 801 south bridges. | 21 | the i2c controller found in the Intel 801 south bridges. |
| 22 | 22 | ||
| 23 | Features | 23 | Features |
| 24 | -------- | 24 | -------- |
diff --git a/Documentation/i2c/busses/i2c-ali15x3 b/Documentation/i2c/busses/i2c-ali15x3 index ff28d381bebe..600da90b8f12 100644 --- a/Documentation/i2c/busses/i2c-ali15x3 +++ b/Documentation/i2c/busses/i2c-ali15x3 | |||
| @@ -6,8 +6,8 @@ Supported adapters: | |||
| 6 | http://www.ali.com.tw/eng/support/datasheet_request.php | 6 | http://www.ali.com.tw/eng/support/datasheet_request.php |
| 7 | 7 | ||
| 8 | Authors: | 8 | Authors: |
| 9 | Frodo Looijaard <frodol@dds.nl>, | 9 | Frodo Looijaard <frodol@dds.nl>, |
| 10 | Philip Edelbrock <phil@netroedge.com>, | 10 | Philip Edelbrock <phil@netroedge.com>, |
| 11 | Mark D. Studebaker <mdsxyz123@yahoo.com> | 11 | Mark D. Studebaker <mdsxyz123@yahoo.com> |
| 12 | 12 | ||
| 13 | Module Parameters | 13 | Module Parameters |
| @@ -40,10 +40,10 @@ M1541 and M1543C South Bridges. | |||
| 40 | The M1543C is a South bridge for desktop systems. | 40 | The M1543C is a South bridge for desktop systems. |
| 41 | The M1541 is a South bridge for portable systems. | 41 | The M1541 is a South bridge for portable systems. |
| 42 | They are part of the following ALI chipsets: | 42 | They are part of the following ALI chipsets: |
| 43 | 43 | ||
| 44 | * "Aladdin Pro 2" includes the M1621 Slot 1 North bridge with AGP and | 44 | * "Aladdin Pro 2" includes the M1621 Slot 1 North bridge with AGP and |
| 45 | 100MHz CPU Front Side bus | 45 | 100MHz CPU Front Side bus |
| 46 | * "Aladdin V" includes the M1541 Socket 7 North bridge with AGP and 100MHz | 46 | * "Aladdin V" includes the M1541 Socket 7 North bridge with AGP and 100MHz |
| 47 | CPU Front Side bus | 47 | CPU Front Side bus |
| 48 | Some Aladdin V motherboards: | 48 | Some Aladdin V motherboards: |
| 49 | Asus P5A | 49 | Asus P5A |
| @@ -77,7 +77,7 @@ output of lspci will show something similar to the following: | |||
| 77 | ** then run lspci. | 77 | ** then run lspci. |
| 78 | ** If you see the 1533 and 5229 devices but NOT the 7101 device, | 78 | ** If you see the 1533 and 5229 devices but NOT the 7101 device, |
| 79 | ** then you must enable ACPI, the PMU, SMB, or something similar | 79 | ** then you must enable ACPI, the PMU, SMB, or something similar |
| 80 | ** in the BIOS. | 80 | ** in the BIOS. |
| 81 | ** The driver won't work if it can't find the M7101 device. | 81 | ** The driver won't work if it can't find the M7101 device. |
| 82 | 82 | ||
| 83 | The SMB controller is part of the M7101 device, which is an ACPI-compliant | 83 | The SMB controller is part of the M7101 device, which is an ACPI-compliant |
| @@ -87,8 +87,8 @@ The whole M7101 device has to be enabled for the SMB to work. You can't | |||
| 87 | just enable the SMB alone. The SMB and the ACPI have separate I/O spaces. | 87 | just enable the SMB alone. The SMB and the ACPI have separate I/O spaces. |
| 88 | We make sure that the SMB is enabled. We leave the ACPI alone. | 88 | We make sure that the SMB is enabled. We leave the ACPI alone. |
| 89 | 89 | ||
| 90 | Features | 90 | Features |
| 91 | -------- | 91 | -------- |
| 92 | 92 | ||
| 93 | This driver controls the SMB Host only. The SMB Slave | 93 | This driver controls the SMB Host only. The SMB Slave |
| 94 | controller on the M15X3 is not enabled. This driver does not use | 94 | controller on the M15X3 is not enabled. This driver does not use |
diff --git a/Documentation/i2c/busses/i2c-pca-isa b/Documentation/i2c/busses/i2c-pca-isa index 6fc8f4c27c3c..b044e5265488 100644 --- a/Documentation/i2c/busses/i2c-pca-isa +++ b/Documentation/i2c/busses/i2c-pca-isa | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | Kernel driver i2c-pca-isa | 1 | Kernel driver i2c-pca-isa |
| 2 | 2 | ||
| 3 | Supported adapters: | 3 | Supported adapters: |
| 4 | This driver supports ISA boards using the Philips PCA 9564 | 4 | This driver supports ISA boards using the Philips PCA 9564 |
| 5 | Parallel bus to I2C bus controller | 5 | Parallel bus to I2C bus controller |
| 6 | 6 | ||
| 7 | Author: Ian Campbell <icampbell@arcom.com>, Arcom Control Systems | 7 | Author: Ian Campbell <icampbell@arcom.com>, Arcom Control Systems |
| 8 | 8 | ||
| 9 | Module Parameters | 9 | Module Parameters |
| 10 | ----------------- | 10 | ----------------- |
| @@ -12,12 +12,12 @@ Module Parameters | |||
| 12 | * base int | 12 | * base int |
| 13 | I/O base address | 13 | I/O base address |
| 14 | * irq int | 14 | * irq int |
| 15 | IRQ interrupt | 15 | IRQ interrupt |
| 16 | * clock int | 16 | * clock int |
| 17 | Clock rate as described in table 1 of PCA9564 datasheet | 17 | Clock rate as described in table 1 of PCA9564 datasheet |
| 18 | 18 | ||
| 19 | Description | 19 | Description |
| 20 | ----------- | 20 | ----------- |
| 21 | 21 | ||
| 22 | This driver supports ISA boards using the Philips PCA 9564 | 22 | This driver supports ISA boards using the Philips PCA 9564 |
| 23 | Parallel bus to I2C bus controller | 23 | Parallel bus to I2C bus controller |
diff --git a/Documentation/i2c/busses/i2c-sis5595 b/Documentation/i2c/busses/i2c-sis5595 index cc47db7d00a9..ecd21fb49a8f 100644 --- a/Documentation/i2c/busses/i2c-sis5595 +++ b/Documentation/i2c/busses/i2c-sis5595 | |||
| @@ -1,41 +1,41 @@ | |||
| 1 | Kernel driver i2c-sis5595 | 1 | Kernel driver i2c-sis5595 |
| 2 | 2 | ||
| 3 | Authors: | 3 | Authors: |
| 4 | Frodo Looijaard <frodol@dds.nl>, | 4 | Frodo Looijaard <frodol@dds.nl>, |
| 5 | Mark D. Studebaker <mdsxyz123@yahoo.com>, | 5 | Mark D. Studebaker <mdsxyz123@yahoo.com>, |
| 6 | Philip Edelbrock <phil@netroedge.com> | 6 | Philip Edelbrock <phil@netroedge.com> |
| 7 | 7 | ||
| 8 | Supported adapters: | 8 | Supported adapters: |
| 9 | * Silicon Integrated Systems Corp. SiS5595 Southbridge | 9 | * Silicon Integrated Systems Corp. SiS5595 Southbridge |
| 10 | Datasheet: Publicly available at the Silicon Integrated Systems Corp. site. | 10 | Datasheet: Publicly available at the Silicon Integrated Systems Corp. site. |
| 11 | 11 | ||
| 12 | Note: all have mfr. ID 0x1039. | 12 | Note: all have mfr. ID 0x1039. |
| 13 | 13 | ||
| 14 | SUPPORTED PCI ID | 14 | SUPPORTED PCI ID |
| 15 | 5595 0008 | 15 | 5595 0008 |
| 16 | 16 | ||
| 17 | Note: these chips contain a 0008 device which is incompatible with the | 17 | Note: these chips contain a 0008 device which is incompatible with the |
| 18 | 5595. We recognize these by the presence of the listed | 18 | 5595. We recognize these by the presence of the listed |
| 19 | "blacklist" PCI ID and refuse to load. | 19 | "blacklist" PCI ID and refuse to load. |
| 20 | 20 | ||
| 21 | NOT SUPPORTED PCI ID BLACKLIST PCI ID | 21 | NOT SUPPORTED PCI ID BLACKLIST PCI ID |
| 22 | 540 0008 0540 | 22 | 540 0008 0540 |
| 23 | 550 0008 0550 | 23 | 550 0008 0550 |
| 24 | 5513 0008 5511 | 24 | 5513 0008 5511 |
| 25 | 5581 0008 5597 | 25 | 5581 0008 5597 |
| 26 | 5582 0008 5597 | 26 | 5582 0008 5597 |
| 27 | 5597 0008 5597 | 27 | 5597 0008 5597 |
| 28 | 5598 0008 5597/5598 | 28 | 5598 0008 5597/5598 |
| 29 | 630 0008 0630 | 29 | 630 0008 0630 |
| 30 | 645 0008 0645 | 30 | 645 0008 0645 |
| 31 | 646 0008 0646 | 31 | 646 0008 0646 |
| 32 | 648 0008 0648 | 32 | 648 0008 0648 |
| 33 | 650 0008 0650 | 33 | 650 0008 0650 |
| 34 | 651 0008 0651 | 34 | 651 0008 0651 |
| 35 | 730 0008 0730 | 35 | 730 0008 0730 |
| 36 | 735 0008 0735 | 36 | 735 0008 0735 |
| 37 | 745 0008 0745 | 37 | 745 0008 0745 |
| 38 | 746 0008 0746 | 38 | 746 0008 0746 |
| 39 | 39 | ||
| 40 | Module Parameters | 40 | Module Parameters |
| 41 | ----------------- | 41 | ----------------- |
diff --git a/Documentation/i2c/busses/i2c-sis630 b/Documentation/i2c/busses/i2c-sis630 index 9aca6889f748..629ea2c356fd 100644 --- a/Documentation/i2c/busses/i2c-sis630 +++ b/Documentation/i2c/busses/i2c-sis630 | |||
| @@ -14,9 +14,9 @@ Module Parameters | |||
| 14 | * force = [1|0] Forcibly enable the SIS630. DANGEROUS! | 14 | * force = [1|0] Forcibly enable the SIS630. DANGEROUS! |
| 15 | This can be interesting for chipsets not named | 15 | This can be interesting for chipsets not named |
| 16 | above to check if it works for you chipset, but DANGEROUS! | 16 | above to check if it works for you chipset, but DANGEROUS! |
| 17 | 17 | ||
| 18 | * high_clock = [1|0] Forcibly set Host Master Clock to 56KHz (default, | 18 | * high_clock = [1|0] Forcibly set Host Master Clock to 56KHz (default, |
| 19 | what your BIOS use). DANGEROUS! This should be a bit | 19 | what your BIOS use). DANGEROUS! This should be a bit |
| 20 | faster, but freeze some systems (i.e. my Laptop). | 20 | faster, but freeze some systems (i.e. my Laptop). |
| 21 | 21 | ||
| 22 | 22 | ||
| @@ -44,6 +44,6 @@ Philip Edelbrock <phil@netroedge.com> | |||
| 44 | - testing SiS730 support | 44 | - testing SiS730 support |
| 45 | Mark M. Hoffman <mhoffman@lightlink.com> | 45 | Mark M. Hoffman <mhoffman@lightlink.com> |
| 46 | - bug fixes | 46 | - bug fixes |
| 47 | 47 | ||
| 48 | To anyone else which I forgot here ;), thanks! | 48 | To anyone else which I forgot here ;), thanks! |
| 49 | 49 | ||
diff --git a/Documentation/i2c/ten-bit-addresses b/Documentation/i2c/ten-bit-addresses index 200074f81360..e9890709c508 100644 --- a/Documentation/i2c/ten-bit-addresses +++ b/Documentation/i2c/ten-bit-addresses | |||
| @@ -1,17 +1,17 @@ | |||
| 1 | The I2C protocol knows about two kinds of device addresses: normal 7 bit | 1 | The I2C protocol knows about two kinds of device addresses: normal 7 bit |
| 2 | addresses, and an extended set of 10 bit addresses. The sets of addresses | 2 | addresses, and an extended set of 10 bit addresses. The sets of addresses |
| 3 | do not intersect: the 7 bit address 0x10 is not the same as the 10 bit | 3 | do not intersect: the 7 bit address 0x10 is not the same as the 10 bit |
| 4 | address 0x10 (though a single device could respond to both of them). You | 4 | address 0x10 (though a single device could respond to both of them). You |
| 5 | select a 10 bit address by adding an extra byte after the address | 5 | select a 10 bit address by adding an extra byte after the address |
| 6 | byte: | 6 | byte: |
| 7 | S Addr7 Rd/Wr .... | 7 | S Addr7 Rd/Wr .... |
| 8 | becomes | 8 | becomes |
| 9 | S 11110 Addr10 Rd/Wr | 9 | S 11110 Addr10 Rd/Wr |
| 10 | S is the start bit, Rd/Wr the read/write bit, and if you count the number | 10 | S is the start bit, Rd/Wr the read/write bit, and if you count the number |
| 11 | of bits, you will see the there are 8 after the S bit for 7 bit addresses, | 11 | of bits, you will see the there are 8 after the S bit for 7 bit addresses, |
| 12 | and 16 after the S bit for 10 bit addresses. | 12 | and 16 after the S bit for 10 bit addresses. |
| 13 | 13 | ||
| 14 | WARNING! The current 10 bit address support is EXPERIMENTAL. There are | 14 | WARNING! The current 10 bit address support is EXPERIMENTAL. There are |
| 15 | several places in the code that will cause SEVERE PROBLEMS with 10 bit | 15 | several places in the code that will cause SEVERE PROBLEMS with 10 bit |
| 16 | addresses, even though there is some basic handling and hooks. Also, | 16 | addresses, even though there is some basic handling and hooks. Also, |
| 17 | almost no supported adapter handles the 10 bit addresses correctly. | 17 | almost no supported adapter handles the 10 bit addresses correctly. |
diff --git a/drivers/hwmon/adt7411.c b/drivers/hwmon/adt7411.c index 4086c7257f91..f13c843a2964 100644 --- a/drivers/hwmon/adt7411.c +++ b/drivers/hwmon/adt7411.c | |||
| @@ -316,7 +316,6 @@ static int __devinit adt7411_probe(struct i2c_client *client, | |||
| 316 | exit_remove: | 316 | exit_remove: |
| 317 | sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); | 317 | sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); |
| 318 | exit_free: | 318 | exit_free: |
| 319 | i2c_set_clientdata(client, NULL); | ||
| 320 | kfree(data); | 319 | kfree(data); |
| 321 | return ret; | 320 | return ret; |
| 322 | } | 321 | } |
| @@ -327,7 +326,6 @@ static int __devexit adt7411_remove(struct i2c_client *client) | |||
| 327 | 326 | ||
| 328 | hwmon_device_unregister(data->hwmon_dev); | 327 | hwmon_device_unregister(data->hwmon_dev); |
| 329 | sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); | 328 | sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); |
| 330 | i2c_set_clientdata(client, NULL); | ||
| 331 | kfree(data); | 329 | kfree(data); |
| 332 | return 0; | 330 | return 0; |
| 333 | } | 331 | } |
diff --git a/drivers/hwmon/asc7621.c b/drivers/hwmon/asc7621.c index 0f388adc6187..3b973f30b1f6 100644 --- a/drivers/hwmon/asc7621.c +++ b/drivers/hwmon/asc7621.c | |||
| @@ -1141,7 +1141,6 @@ exit_remove: | |||
| 1141 | &(asc7621_params[i].sda.dev_attr)); | 1141 | &(asc7621_params[i].sda.dev_attr)); |
| 1142 | } | 1142 | } |
| 1143 | 1143 | ||
| 1144 | i2c_set_clientdata(client, NULL); | ||
| 1145 | kfree(data); | 1144 | kfree(data); |
| 1146 | return err; | 1145 | return err; |
| 1147 | } | 1146 | } |
| @@ -1196,7 +1195,6 @@ static int asc7621_remove(struct i2c_client *client) | |||
| 1196 | &(asc7621_params[i].sda.dev_attr)); | 1195 | &(asc7621_params[i].sda.dev_attr)); |
| 1197 | } | 1196 | } |
| 1198 | 1197 | ||
| 1199 | i2c_set_clientdata(client, NULL); | ||
| 1200 | kfree(data); | 1198 | kfree(data); |
| 1201 | return 0; | 1199 | return 0; |
| 1202 | } | 1200 | } |
diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c index bad2cf3ef4a4..0f58ecc5334d 100644 --- a/drivers/hwmon/f75375s.c +++ b/drivers/hwmon/f75375s.c | |||
| @@ -662,7 +662,6 @@ exit_remove: | |||
| 662 | sysfs_remove_group(&client->dev.kobj, &f75375_group); | 662 | sysfs_remove_group(&client->dev.kobj, &f75375_group); |
| 663 | exit_free: | 663 | exit_free: |
| 664 | kfree(data); | 664 | kfree(data); |
| 665 | i2c_set_clientdata(client, NULL); | ||
| 666 | return err; | 665 | return err; |
| 667 | } | 666 | } |
| 668 | 667 | ||
| @@ -672,7 +671,6 @@ static int f75375_remove(struct i2c_client *client) | |||
| 672 | hwmon_device_unregister(data->hwmon_dev); | 671 | hwmon_device_unregister(data->hwmon_dev); |
| 673 | sysfs_remove_group(&client->dev.kobj, &f75375_group); | 672 | sysfs_remove_group(&client->dev.kobj, &f75375_group); |
| 674 | kfree(data); | 673 | kfree(data); |
| 675 | i2c_set_clientdata(client, NULL); | ||
| 676 | return 0; | 674 | return 0; |
| 677 | } | 675 | } |
| 678 | 676 | ||
diff --git a/drivers/hwmon/g760a.c b/drivers/hwmon/g760a.c index 09ea12e0a551..1f63d1a3af5e 100644 --- a/drivers/hwmon/g760a.c +++ b/drivers/hwmon/g760a.c | |||
| @@ -236,7 +236,6 @@ error_hwmon_device_register: | |||
| 236 | sysfs_remove_group(&client->dev.kobj, &g760a_group); | 236 | sysfs_remove_group(&client->dev.kobj, &g760a_group); |
| 237 | error_sysfs_create_group: | 237 | error_sysfs_create_group: |
| 238 | kfree(data); | 238 | kfree(data); |
| 239 | i2c_set_clientdata(client, NULL); | ||
| 240 | 239 | ||
| 241 | return err; | 240 | return err; |
| 242 | } | 241 | } |
| @@ -247,7 +246,6 @@ static int g760a_remove(struct i2c_client *client) | |||
| 247 | hwmon_device_unregister(data->hwmon_dev); | 246 | hwmon_device_unregister(data->hwmon_dev); |
| 248 | sysfs_remove_group(&client->dev.kobj, &g760a_group); | 247 | sysfs_remove_group(&client->dev.kobj, &g760a_group); |
| 249 | kfree(data); | 248 | kfree(data); |
| 250 | i2c_set_clientdata(client, NULL); | ||
| 251 | 249 | ||
| 252 | return 0; | 250 | return 0; |
| 253 | } | 251 | } |
diff --git a/drivers/hwmon/lm73.c b/drivers/hwmon/lm73.c index 4d1b76bc8148..29b9030d42c3 100644 --- a/drivers/hwmon/lm73.c +++ b/drivers/hwmon/lm73.c | |||
| @@ -136,7 +136,6 @@ static int lm73_remove(struct i2c_client *client) | |||
| 136 | 136 | ||
| 137 | hwmon_device_unregister(hwmon_dev); | 137 | hwmon_device_unregister(hwmon_dev); |
| 138 | sysfs_remove_group(&client->dev.kobj, &lm73_group); | 138 | sysfs_remove_group(&client->dev.kobj, &lm73_group); |
| 139 | i2c_set_clientdata(client, NULL); | ||
| 140 | return 0; | 139 | return 0; |
| 141 | } | 140 | } |
| 142 | 141 | ||
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c index 56463428a419..393f354f92a4 100644 --- a/drivers/hwmon/lm75.c +++ b/drivers/hwmon/lm75.c | |||
| @@ -192,7 +192,6 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id) | |||
| 192 | exit_remove: | 192 | exit_remove: |
| 193 | sysfs_remove_group(&client->dev.kobj, &lm75_group); | 193 | sysfs_remove_group(&client->dev.kobj, &lm75_group); |
| 194 | exit_free: | 194 | exit_free: |
| 195 | i2c_set_clientdata(client, NULL); | ||
| 196 | kfree(data); | 195 | kfree(data); |
| 197 | return status; | 196 | return status; |
| 198 | } | 197 | } |
| @@ -204,7 +203,6 @@ static int lm75_remove(struct i2c_client *client) | |||
| 204 | hwmon_device_unregister(data->hwmon_dev); | 203 | hwmon_device_unregister(data->hwmon_dev); |
| 205 | sysfs_remove_group(&client->dev.kobj, &lm75_group); | 204 | sysfs_remove_group(&client->dev.kobj, &lm75_group); |
| 206 | lm75_write_value(client, LM75_REG_CONF, data->orig_conf); | 205 | lm75_write_value(client, LM75_REG_CONF, data->orig_conf); |
| 207 | i2c_set_clientdata(client, NULL); | ||
| 208 | kfree(data); | 206 | kfree(data); |
| 209 | return 0; | 207 | return 0; |
| 210 | } | 208 | } |
diff --git a/drivers/hwmon/lm95241.c b/drivers/hwmon/lm95241.c index 8fc8eb8cba47..94741d42112d 100644 --- a/drivers/hwmon/lm95241.c +++ b/drivers/hwmon/lm95241.c | |||
| @@ -399,7 +399,6 @@ static int lm95241_remove(struct i2c_client *client) | |||
| 399 | hwmon_device_unregister(data->hwmon_dev); | 399 | hwmon_device_unregister(data->hwmon_dev); |
| 400 | sysfs_remove_group(&client->dev.kobj, &lm95241_group); | 400 | sysfs_remove_group(&client->dev.kobj, &lm95241_group); |
| 401 | 401 | ||
| 402 | i2c_set_clientdata(client, NULL); | ||
| 403 | kfree(data); | 402 | kfree(data); |
| 404 | return 0; | 403 | return 0; |
| 405 | } | 404 | } |
diff --git a/drivers/hwmon/tmp102.c b/drivers/hwmon/tmp102.c index 8013895a1faf..93187c3cb5e7 100644 --- a/drivers/hwmon/tmp102.c +++ b/drivers/hwmon/tmp102.c | |||
| @@ -224,7 +224,6 @@ fail_remove_sysfs: | |||
| 224 | fail_restore_config: | 224 | fail_restore_config: |
| 225 | tmp102_write_reg(client, TMP102_CONF_REG, tmp102->config_orig); | 225 | tmp102_write_reg(client, TMP102_CONF_REG, tmp102->config_orig); |
| 226 | fail_free: | 226 | fail_free: |
| 227 | i2c_set_clientdata(client, NULL); | ||
| 228 | kfree(tmp102); | 227 | kfree(tmp102); |
| 229 | 228 | ||
| 230 | return status; | 229 | return status; |
| @@ -247,7 +246,6 @@ static int __devexit tmp102_remove(struct i2c_client *client) | |||
| 247 | config | TMP102_CONF_SD); | 246 | config | TMP102_CONF_SD); |
| 248 | } | 247 | } |
| 249 | 248 | ||
| 250 | i2c_set_clientdata(client, NULL); | ||
| 251 | kfree(tmp102); | 249 | kfree(tmp102); |
| 252 | 250 | ||
| 253 | return 0; | 251 | return 0; |
diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c index 738c472ece27..6b4165c12092 100644 --- a/drivers/hwmon/tmp421.c +++ b/drivers/hwmon/tmp421.c | |||
| @@ -295,7 +295,6 @@ exit_remove: | |||
| 295 | sysfs_remove_group(&client->dev.kobj, &tmp421_group); | 295 | sysfs_remove_group(&client->dev.kobj, &tmp421_group); |
| 296 | 296 | ||
| 297 | exit_free: | 297 | exit_free: |
| 298 | i2c_set_clientdata(client, NULL); | ||
| 299 | kfree(data); | 298 | kfree(data); |
| 300 | 299 | ||
| 301 | return err; | 300 | return err; |
| @@ -308,7 +307,6 @@ static int tmp421_remove(struct i2c_client *client) | |||
| 308 | hwmon_device_unregister(data->hwmon_dev); | 307 | hwmon_device_unregister(data->hwmon_dev); |
| 309 | sysfs_remove_group(&client->dev.kobj, &tmp421_group); | 308 | sysfs_remove_group(&client->dev.kobj, &tmp421_group); |
| 310 | 309 | ||
| 311 | i2c_set_clientdata(client, NULL); | ||
| 312 | kfree(data); | 310 | kfree(data); |
| 313 | 311 | ||
| 314 | return 0; | 312 | return 0; |
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c index 32d4adee73db..c84b9b4e6960 100644 --- a/drivers/hwmon/w83781d.c +++ b/drivers/hwmon/w83781d.c | |||
| @@ -1197,7 +1197,6 @@ ERROR4: | |||
| 1197 | if (data->lm75[1]) | 1197 | if (data->lm75[1]) |
| 1198 | i2c_unregister_device(data->lm75[1]); | 1198 | i2c_unregister_device(data->lm75[1]); |
| 1199 | ERROR3: | 1199 | ERROR3: |
| 1200 | i2c_set_clientdata(client, NULL); | ||
| 1201 | kfree(data); | 1200 | kfree(data); |
| 1202 | ERROR1: | 1201 | ERROR1: |
| 1203 | return err; | 1202 | return err; |
| @@ -1219,7 +1218,6 @@ w83781d_remove(struct i2c_client *client) | |||
| 1219 | if (data->lm75[1]) | 1218 | if (data->lm75[1]) |
| 1220 | i2c_unregister_device(data->lm75[1]); | 1219 | i2c_unregister_device(data->lm75[1]); |
| 1221 | 1220 | ||
| 1222 | i2c_set_clientdata(client, NULL); | ||
| 1223 | kfree(data); | 1221 | kfree(data); |
| 1224 | 1222 | ||
| 1225 | return 0; | 1223 | return 0; |
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig index 87ab0568bb0e..bceafbfa7268 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig | |||
| @@ -475,6 +475,26 @@ config I2C_PASEMI | |||
| 475 | help | 475 | help |
| 476 | Supports the PA Semi PWRficient on-chip SMBus interfaces. | 476 | Supports the PA Semi PWRficient on-chip SMBus interfaces. |
| 477 | 477 | ||
| 478 | config I2C_PCA_PLATFORM | ||
| 479 | tristate "PCA9564/PCA9665 as platform device" | ||
| 480 | select I2C_ALGOPCA | ||
| 481 | default n | ||
| 482 | help | ||
| 483 | This driver supports a memory mapped Philips PCA9564/PCA9665 | ||
| 484 | parallel bus to I2C bus controller. | ||
| 485 | |||
| 486 | This driver can also be built as a module. If so, the module | ||
| 487 | will be called i2c-pca-platform. | ||
| 488 | |||
| 489 | config I2C_PMCMSP | ||
| 490 | tristate "PMC MSP I2C TWI Controller" | ||
| 491 | depends on PMC_MSP | ||
| 492 | help | ||
| 493 | This driver supports the PMC TWI controller on MSP devices. | ||
| 494 | |||
| 495 | This driver can also be built as module. If so, the module | ||
| 496 | will be called i2c-pmcmsp. | ||
| 497 | |||
| 478 | config I2C_PNX | 498 | config I2C_PNX |
| 479 | tristate "I2C bus support for Philips PNX targets" | 499 | tristate "I2C bus support for Philips PNX targets" |
| 480 | depends on ARCH_PNX4008 | 500 | depends on ARCH_PNX4008 |
| @@ -711,26 +731,6 @@ config I2C_PCA_ISA | |||
| 711 | delays when I2C/SMBus chip drivers are loaded (e.g. at boot | 731 | delays when I2C/SMBus chip drivers are loaded (e.g. at boot |
| 712 | time). If unsure, say N. | 732 | time). If unsure, say N. |
| 713 | 733 | ||
| 714 | config I2C_PCA_PLATFORM | ||
| 715 | tristate "PCA9564/PCA9665 as platform device" | ||
| 716 | select I2C_ALGOPCA | ||
| 717 | default n | ||
| 718 | help | ||
| 719 | This driver supports a memory mapped Philips PCA9564/PCA9665 | ||
| 720 | parallel bus to I2C bus controller. | ||
| 721 | |||
| 722 | This driver can also be built as a module. If so, the module | ||
| 723 | will be called i2c-pca-platform. | ||
| 724 | |||
| 725 | config I2C_PMCMSP | ||
| 726 | tristate "PMC MSP I2C TWI Controller" | ||
| 727 | depends on PMC_MSP | ||
| 728 | help | ||
| 729 | This driver supports the PMC TWI controller on MSP devices. | ||
| 730 | |||
| 731 | This driver can also be built as module. If so, the module | ||
| 732 | will be called i2c-pmcmsp. | ||
| 733 | |||
| 734 | config I2C_SIBYTE | 734 | config I2C_SIBYTE |
| 735 | tristate "SiByte SMBus interface" | 735 | tristate "SiByte SMBus interface" |
| 736 | depends on SIBYTE_SB1xxx_SOC | 736 | depends on SIBYTE_SB1xxx_SOC |
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile index 097236f631e8..936880bd1dc5 100644 --- a/drivers/i2c/busses/Makefile +++ b/drivers/i2c/busses/Makefile | |||
| @@ -27,7 +27,7 @@ obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o | |||
| 27 | obj-$(CONFIG_I2C_HYDRA) += i2c-hydra.o | 27 | obj-$(CONFIG_I2C_HYDRA) += i2c-hydra.o |
| 28 | obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o | 28 | obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o |
| 29 | 29 | ||
| 30 | # Embebbed system I2C/SMBus host controller drivers | 30 | # Embedded system I2C/SMBus host controller drivers |
| 31 | obj-$(CONFIG_I2C_AT91) += i2c-at91.o | 31 | obj-$(CONFIG_I2C_AT91) += i2c-at91.o |
| 32 | obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o | 32 | obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o |
| 33 | obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o | 33 | obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o |
| @@ -46,6 +46,8 @@ obj-$(CONFIG_I2C_NOMADIK) += i2c-nomadik.o | |||
| 46 | obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o | 46 | obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o |
| 47 | obj-$(CONFIG_I2C_OMAP) += i2c-omap.o | 47 | obj-$(CONFIG_I2C_OMAP) += i2c-omap.o |
| 48 | obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o | 48 | obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o |
| 49 | obj-$(CONFIG_I2C_PCA_PLATFORM) += i2c-pca-platform.o | ||
| 50 | obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o | ||
| 49 | obj-$(CONFIG_I2C_PNX) += i2c-pnx.o | 51 | obj-$(CONFIG_I2C_PNX) += i2c-pnx.o |
| 50 | obj-$(CONFIG_I2C_PXA) += i2c-pxa.o | 52 | obj-$(CONFIG_I2C_PXA) += i2c-pxa.o |
| 51 | obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o | 53 | obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o |
| @@ -68,8 +70,6 @@ obj-$(CONFIG_I2C_TINY_USB) += i2c-tiny-usb.o | |||
| 68 | obj-$(CONFIG_I2C_ACORN) += i2c-acorn.o | 70 | obj-$(CONFIG_I2C_ACORN) += i2c-acorn.o |
| 69 | obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o | 71 | obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o |
| 70 | obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o | 72 | obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o |
| 71 | obj-$(CONFIG_I2C_PCA_PLATFORM) += i2c-pca-platform.o | ||
| 72 | obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o | ||
| 73 | obj-$(CONFIG_I2C_SIBYTE) += i2c-sibyte.o | 73 | obj-$(CONFIG_I2C_SIBYTE) += i2c-sibyte.o |
| 74 | obj-$(CONFIG_I2C_STUB) += i2c-stub.o | 74 | obj-$(CONFIG_I2C_STUB) += i2c-stub.o |
| 75 | obj-$(CONFIG_SCx200_ACB) += scx200_acb.o | 75 | obj-$(CONFIG_SCx200_ACB) += scx200_acb.o |
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index e0f833cca3f1..1cca2631e5b3 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
| @@ -47,7 +47,6 @@ static DEFINE_MUTEX(core_lock); | |||
| 47 | static DEFINE_IDR(i2c_adapter_idr); | 47 | static DEFINE_IDR(i2c_adapter_idr); |
| 48 | 48 | ||
| 49 | static struct device_type i2c_client_type; | 49 | static struct device_type i2c_client_type; |
| 50 | static int i2c_check_addr(struct i2c_adapter *adapter, int addr); | ||
| 51 | static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver); | 50 | static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver); |
| 52 | 51 | ||
| 53 | /* ------------------------------------------------------------------------- */ | 52 | /* ------------------------------------------------------------------------- */ |
| @@ -371,6 +370,59 @@ struct i2c_client *i2c_verify_client(struct device *dev) | |||
| 371 | EXPORT_SYMBOL(i2c_verify_client); | 370 | EXPORT_SYMBOL(i2c_verify_client); |
| 372 | 371 | ||
| 373 | 372 | ||
| 373 | /* This is a permissive address validity check, I2C address map constraints | ||
| 374 | * are purposedly not enforced, except for the general call address. */ | ||
| 375 | static int i2c_check_client_addr_validity(const struct i2c_client *client) | ||
| 376 | { | ||
| 377 | if (client->flags & I2C_CLIENT_TEN) { | ||
| 378 | /* 10-bit address, all values are valid */ | ||
| 379 | if (client->addr > 0x3ff) | ||
| 380 | return -EINVAL; | ||
| 381 | } else { | ||
| 382 | /* 7-bit address, reject the general call address */ | ||
| 383 | if (client->addr == 0x00 || client->addr > 0x7f) | ||
| 384 | return -EINVAL; | ||
| 385 | } | ||
| 386 | return 0; | ||
| 387 | } | ||
| 388 | |||
| 389 | /* And this is a strict address validity check, used when probing. If a | ||
| 390 | * device uses a reserved address, then it shouldn't be probed. 7-bit | ||
| 391 | * addressing is assumed, 10-bit address devices are rare and should be | ||
| 392 | * explicitly enumerated. */ | ||
| 393 | static int i2c_check_addr_validity(unsigned short addr) | ||
| 394 | { | ||
| 395 | /* | ||
| 396 | * Reserved addresses per I2C specification: | ||
| 397 | * 0x00 General call address / START byte | ||
| 398 | * 0x01 CBUS address | ||
| 399 | * 0x02 Reserved for different bus format | ||
| 400 | * 0x03 Reserved for future purposes | ||
| 401 | * 0x04-0x07 Hs-mode master code | ||
| 402 | * 0x78-0x7b 10-bit slave addressing | ||
| 403 | * 0x7c-0x7f Reserved for future purposes | ||
| 404 | */ | ||
| 405 | if (addr < 0x08 || addr > 0x77) | ||
| 406 | return -EINVAL; | ||
| 407 | return 0; | ||
| 408 | } | ||
| 409 | |||
| 410 | static int __i2c_check_addr_busy(struct device *dev, void *addrp) | ||
| 411 | { | ||
| 412 | struct i2c_client *client = i2c_verify_client(dev); | ||
| 413 | int addr = *(int *)addrp; | ||
| 414 | |||
| 415 | if (client && client->addr == addr) | ||
| 416 | return -EBUSY; | ||
| 417 | return 0; | ||
| 418 | } | ||
| 419 | |||
| 420 | static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr) | ||
| 421 | { | ||
| 422 | return device_for_each_child(&adapter->dev, &addr, | ||
| 423 | __i2c_check_addr_busy); | ||
| 424 | } | ||
| 425 | |||
| 374 | /** | 426 | /** |
| 375 | * i2c_new_device - instantiate an i2c device | 427 | * i2c_new_device - instantiate an i2c device |
| 376 | * @adap: the adapter managing the device | 428 | * @adap: the adapter managing the device |
| @@ -410,8 +462,16 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info) | |||
| 410 | 462 | ||
| 411 | strlcpy(client->name, info->type, sizeof(client->name)); | 463 | strlcpy(client->name, info->type, sizeof(client->name)); |
| 412 | 464 | ||
| 465 | /* Check for address validity */ | ||
| 466 | status = i2c_check_client_addr_validity(client); | ||
| 467 | if (status) { | ||
| 468 | dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n", | ||
| 469 | client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr); | ||
| 470 | goto out_err_silent; | ||
| 471 | } | ||
| 472 | |||
| 413 | /* Check for address business */ | 473 | /* Check for address business */ |
| 414 | status = i2c_check_addr(adap, client->addr); | 474 | status = i2c_check_addr_busy(adap, client->addr); |
| 415 | if (status) | 475 | if (status) |
| 416 | goto out_err; | 476 | goto out_err; |
| 417 | 477 | ||
| @@ -436,6 +496,7 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info) | |||
| 436 | out_err: | 496 | out_err: |
| 437 | dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x " | 497 | dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x " |
| 438 | "(%d)\n", client->name, client->addr, status); | 498 | "(%d)\n", client->name, client->addr, status); |
| 499 | out_err_silent: | ||
| 439 | kfree(client); | 500 | kfree(client); |
| 440 | return NULL; | 501 | return NULL; |
| 441 | } | 502 | } |
| @@ -561,15 +622,9 @@ i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr, | |||
| 561 | return -EINVAL; | 622 | return -EINVAL; |
| 562 | } | 623 | } |
| 563 | 624 | ||
| 564 | if (info.addr < 0x03 || info.addr > 0x77) { | ||
| 565 | dev_err(dev, "%s: Invalid I2C address 0x%hx\n", "new_device", | ||
| 566 | info.addr); | ||
| 567 | return -EINVAL; | ||
| 568 | } | ||
| 569 | |||
| 570 | client = i2c_new_device(adap, &info); | 625 | client = i2c_new_device(adap, &info); |
| 571 | if (!client) | 626 | if (!client) |
| 572 | return -EEXIST; | 627 | return -EINVAL; |
| 573 | 628 | ||
| 574 | /* Keep track of the added device */ | 629 | /* Keep track of the added device */ |
| 575 | i2c_lock_adapter(adap); | 630 | i2c_lock_adapter(adap); |
| @@ -1024,21 +1079,6 @@ EXPORT_SYMBOL(i2c_del_driver); | |||
| 1024 | 1079 | ||
| 1025 | /* ------------------------------------------------------------------------- */ | 1080 | /* ------------------------------------------------------------------------- */ |
| 1026 | 1081 | ||
| 1027 | static int __i2c_check_addr(struct device *dev, void *addrp) | ||
| 1028 | { | ||
| 1029 | struct i2c_client *client = i2c_verify_client(dev); | ||
| 1030 | int addr = *(int *)addrp; | ||
| 1031 | |||
| 1032 | if (client && client->addr == addr) | ||
| 1033 | return -EBUSY; | ||
| 1034 | return 0; | ||
| 1035 | } | ||
| 1036 | |||
| 1037 | static int i2c_check_addr(struct i2c_adapter *adapter, int addr) | ||
| 1038 | { | ||
| 1039 | return device_for_each_child(&adapter->dev, &addr, __i2c_check_addr); | ||
| 1040 | } | ||
| 1041 | |||
| 1042 | /** | 1082 | /** |
| 1043 | * i2c_use_client - increments the reference count of the i2c client structure | 1083 | * i2c_use_client - increments the reference count of the i2c client structure |
| 1044 | * @client: the client being referenced | 1084 | * @client: the client being referenced |
| @@ -1277,6 +1317,41 @@ EXPORT_SYMBOL(i2c_master_recv); | |||
| 1277 | * ---------------------------------------------------- | 1317 | * ---------------------------------------------------- |
| 1278 | */ | 1318 | */ |
| 1279 | 1319 | ||
| 1320 | /* | ||
| 1321 | * Legacy default probe function, mostly relevant for SMBus. The default | ||
| 1322 | * probe method is a quick write, but it is known to corrupt the 24RF08 | ||
| 1323 | * EEPROMs due to a state machine bug, and could also irreversibly | ||
| 1324 | * write-protect some EEPROMs, so for address ranges 0x30-0x37 and 0x50-0x5f, | ||
| 1325 | * we use a short byte read instead. Also, some bus drivers don't implement | ||
| 1326 | * quick write, so we fallback to a byte read in that case too. | ||
| 1327 | * On x86, there is another special case for FSC hardware monitoring chips, | ||
| 1328 | * which want regular byte reads (address 0x73.) Fortunately, these are the | ||
| 1329 | * only known chips using this I2C address on PC hardware. | ||
| 1330 | * Returns 1 if probe succeeded, 0 if not. | ||
| 1331 | */ | ||
| 1332 | static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr) | ||
| 1333 | { | ||
| 1334 | int err; | ||
| 1335 | union i2c_smbus_data dummy; | ||
| 1336 | |||
| 1337 | #ifdef CONFIG_X86 | ||
| 1338 | if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON) | ||
| 1339 | && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA)) | ||
| 1340 | err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, | ||
| 1341 | I2C_SMBUS_BYTE_DATA, &dummy); | ||
| 1342 | else | ||
| 1343 | #endif | ||
| 1344 | if ((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50 | ||
| 1345 | || !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) | ||
| 1346 | err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, | ||
| 1347 | I2C_SMBUS_BYTE, &dummy); | ||
| 1348 | else | ||
| 1349 | err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0, | ||
| 1350 | I2C_SMBUS_QUICK, NULL); | ||
| 1351 | |||
| 1352 | return err >= 0; | ||
| 1353 | } | ||
| 1354 | |||
| 1280 | static int i2c_detect_address(struct i2c_client *temp_client, | 1355 | static int i2c_detect_address(struct i2c_client *temp_client, |
| 1281 | struct i2c_driver *driver) | 1356 | struct i2c_driver *driver) |
| 1282 | { | 1357 | { |
| @@ -1286,34 +1361,20 @@ static int i2c_detect_address(struct i2c_client *temp_client, | |||
| 1286 | int err; | 1361 | int err; |
| 1287 | 1362 | ||
| 1288 | /* Make sure the address is valid */ | 1363 | /* Make sure the address is valid */ |
| 1289 | if (addr < 0x03 || addr > 0x77) { | 1364 | err = i2c_check_addr_validity(addr); |
| 1365 | if (err) { | ||
| 1290 | dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n", | 1366 | dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n", |
| 1291 | addr); | 1367 | addr); |
| 1292 | return -EINVAL; | 1368 | return err; |
| 1293 | } | 1369 | } |
| 1294 | 1370 | ||
| 1295 | /* Skip if already in use */ | 1371 | /* Skip if already in use */ |
| 1296 | if (i2c_check_addr(adapter, addr)) | 1372 | if (i2c_check_addr_busy(adapter, addr)) |
| 1297 | return 0; | 1373 | return 0; |
| 1298 | 1374 | ||
| 1299 | /* Make sure there is something at this address */ | 1375 | /* Make sure there is something at this address */ |
| 1300 | if (addr == 0x73 && (adapter->class & I2C_CLASS_HWMON)) { | 1376 | if (!i2c_default_probe(adapter, addr)) |
| 1301 | /* Special probe for FSC hwmon chips */ | 1377 | return 0; |
| 1302 | union i2c_smbus_data dummy; | ||
| 1303 | |||
| 1304 | if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_READ, 0, | ||
| 1305 | I2C_SMBUS_BYTE_DATA, &dummy) < 0) | ||
| 1306 | return 0; | ||
| 1307 | } else { | ||
| 1308 | if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0, | ||
| 1309 | I2C_SMBUS_QUICK, NULL) < 0) | ||
| 1310 | return 0; | ||
| 1311 | |||
| 1312 | /* Prevent 24RF08 corruption */ | ||
| 1313 | if ((addr & ~0x0f) == 0x50) | ||
| 1314 | i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0, | ||
| 1315 | I2C_SMBUS_QUICK, NULL); | ||
| 1316 | } | ||
| 1317 | 1378 | ||
| 1318 | /* Finally call the custom detection function */ | 1379 | /* Finally call the custom detection function */ |
| 1319 | memset(&info, 0, sizeof(struct i2c_board_info)); | 1380 | memset(&info, 0, sizeof(struct i2c_board_info)); |
| @@ -1407,42 +1468,22 @@ i2c_new_probed_device(struct i2c_adapter *adap, | |||
| 1407 | 1468 | ||
| 1408 | for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) { | 1469 | for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) { |
| 1409 | /* Check address validity */ | 1470 | /* Check address validity */ |
| 1410 | if (addr_list[i] < 0x03 || addr_list[i] > 0x77) { | 1471 | if (i2c_check_addr_validity(addr_list[i]) < 0) { |
| 1411 | dev_warn(&adap->dev, "Invalid 7-bit address " | 1472 | dev_warn(&adap->dev, "Invalid 7-bit address " |
| 1412 | "0x%02x\n", addr_list[i]); | 1473 | "0x%02x\n", addr_list[i]); |
| 1413 | continue; | 1474 | continue; |
| 1414 | } | 1475 | } |
| 1415 | 1476 | ||
| 1416 | /* Check address availability */ | 1477 | /* Check address availability */ |
| 1417 | if (i2c_check_addr(adap, addr_list[i])) { | 1478 | if (i2c_check_addr_busy(adap, addr_list[i])) { |
| 1418 | dev_dbg(&adap->dev, "Address 0x%02x already in " | 1479 | dev_dbg(&adap->dev, "Address 0x%02x already in " |
| 1419 | "use, not probing\n", addr_list[i]); | 1480 | "use, not probing\n", addr_list[i]); |
| 1420 | continue; | 1481 | continue; |
| 1421 | } | 1482 | } |
| 1422 | 1483 | ||
| 1423 | /* Test address responsiveness | 1484 | /* Test address responsiveness */ |
| 1424 | The default probe method is a quick write, but it is known | 1485 | if (i2c_default_probe(adap, addr_list[i])) |
| 1425 | to corrupt the 24RF08 EEPROMs due to a state machine bug, | 1486 | break; |
| 1426 | and could also irreversibly write-protect some EEPROMs, so | ||
| 1427 | for address ranges 0x30-0x37 and 0x50-0x5f, we use a byte | ||
| 1428 | read instead. Also, some bus drivers don't implement | ||
| 1429 | quick write, so we fallback to a byte read it that case | ||
| 1430 | too. */ | ||
| 1431 | if ((addr_list[i] & ~0x07) == 0x30 | ||
| 1432 | || (addr_list[i] & ~0x0f) == 0x50 | ||
| 1433 | || !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) { | ||
| 1434 | union i2c_smbus_data data; | ||
| 1435 | |||
| 1436 | if (i2c_smbus_xfer(adap, addr_list[i], 0, | ||
| 1437 | I2C_SMBUS_READ, 0, | ||
| 1438 | I2C_SMBUS_BYTE, &data) >= 0) | ||
| 1439 | break; | ||
| 1440 | } else { | ||
| 1441 | if (i2c_smbus_xfer(adap, addr_list[i], 0, | ||
| 1442 | I2C_SMBUS_WRITE, 0, | ||
| 1443 | I2C_SMBUS_QUICK, NULL) >= 0) | ||
| 1444 | break; | ||
| 1445 | } | ||
| 1446 | } | 1487 | } |
| 1447 | 1488 | ||
| 1448 | if (addr_list[i] == I2C_CLIENT_END) { | 1489 | if (addr_list[i] == I2C_CLIENT_END) { |
diff --git a/drivers/i2c/i2c-smbus.c b/drivers/i2c/i2c-smbus.c index a24e0bfe9201..f61ccc1e5ea3 100644 --- a/drivers/i2c/i2c-smbus.c +++ b/drivers/i2c/i2c-smbus.c | |||
| @@ -173,7 +173,6 @@ static int smbalert_remove(struct i2c_client *ara) | |||
| 173 | 173 | ||
| 174 | cancel_work_sync(&alert->alert); | 174 | cancel_work_sync(&alert->alert); |
| 175 | 175 | ||
| 176 | i2c_set_clientdata(ara, NULL); | ||
| 177 | kfree(alert); | 176 | kfree(alert); |
| 178 | return 0; | 177 | return 0; |
| 179 | } | 178 | } |
diff --git a/drivers/input/keyboard/adp5588-keys.c b/drivers/input/keyboard/adp5588-keys.c index 4771ab172b59..744600eff222 100644 --- a/drivers/input/keyboard/adp5588-keys.c +++ b/drivers/input/keyboard/adp5588-keys.c | |||
| @@ -287,7 +287,6 @@ static int __devexit adp5588_remove(struct i2c_client *client) | |||
| 287 | free_irq(client->irq, kpad); | 287 | free_irq(client->irq, kpad); |
| 288 | cancel_delayed_work_sync(&kpad->work); | 288 | cancel_delayed_work_sync(&kpad->work); |
| 289 | input_unregister_device(kpad->input); | 289 | input_unregister_device(kpad->input); |
| 290 | i2c_set_clientdata(client, NULL); | ||
| 291 | kfree(kpad); | 290 | kfree(kpad); |
| 292 | 291 | ||
| 293 | return 0; | 292 | return 0; |
diff --git a/drivers/input/keyboard/lm8323.c b/drivers/input/keyboard/lm8323.c index bc696931fed7..40b032f0e32c 100644 --- a/drivers/input/keyboard/lm8323.c +++ b/drivers/input/keyboard/lm8323.c | |||
| @@ -778,8 +778,6 @@ static int __devexit lm8323_remove(struct i2c_client *client) | |||
| 778 | struct lm8323_chip *lm = i2c_get_clientdata(client); | 778 | struct lm8323_chip *lm = i2c_get_clientdata(client); |
| 779 | int i; | 779 | int i; |
| 780 | 780 | ||
| 781 | i2c_set_clientdata(client, NULL); | ||
| 782 | |||
| 783 | disable_irq_wake(client->irq); | 781 | disable_irq_wake(client->irq); |
| 784 | free_irq(client->irq, lm); | 782 | free_irq(client->irq, lm); |
| 785 | cancel_work_sync(&lm->work); | 783 | cancel_work_sync(&lm->work); |
diff --git a/drivers/input/keyboard/max7359_keypad.c b/drivers/input/keyboard/max7359_keypad.c index 7fc8185e5c1b..9091ff5ea808 100644 --- a/drivers/input/keyboard/max7359_keypad.c +++ b/drivers/input/keyboard/max7359_keypad.c | |||
| @@ -265,7 +265,6 @@ static int __devexit max7359_remove(struct i2c_client *client) | |||
| 265 | 265 | ||
| 266 | free_irq(client->irq, keypad); | 266 | free_irq(client->irq, keypad); |
| 267 | input_unregister_device(keypad->input_dev); | 267 | input_unregister_device(keypad->input_dev); |
| 268 | i2c_set_clientdata(client, NULL); | ||
| 269 | kfree(keypad); | 268 | kfree(keypad); |
| 270 | 269 | ||
| 271 | return 0; | 270 | return 0; |
diff --git a/drivers/input/keyboard/qt2160.c b/drivers/input/keyboard/qt2160.c index 31f30087b591..fac695157e8a 100644 --- a/drivers/input/keyboard/qt2160.c +++ b/drivers/input/keyboard/qt2160.c | |||
| @@ -358,7 +358,6 @@ static int __devexit qt2160_remove(struct i2c_client *client) | |||
| 358 | input_unregister_device(qt2160->input); | 358 | input_unregister_device(qt2160->input); |
| 359 | kfree(qt2160); | 359 | kfree(qt2160); |
| 360 | 360 | ||
| 361 | i2c_set_clientdata(client, NULL); | ||
| 362 | return 0; | 361 | return 0; |
| 363 | } | 362 | } |
| 364 | 363 | ||
diff --git a/drivers/input/keyboard/tca6416-keypad.c b/drivers/input/keyboard/tca6416-keypad.c index 493c93f25e2a..00137bebcf97 100644 --- a/drivers/input/keyboard/tca6416-keypad.c +++ b/drivers/input/keyboard/tca6416-keypad.c | |||
| @@ -316,8 +316,6 @@ static int __devexit tca6416_keypad_remove(struct i2c_client *client) | |||
| 316 | input_unregister_device(chip->input); | 316 | input_unregister_device(chip->input); |
| 317 | kfree(chip); | 317 | kfree(chip); |
| 318 | 318 | ||
| 319 | i2c_set_clientdata(client, NULL); | ||
| 320 | |||
| 321 | return 0; | 319 | return 0; |
| 322 | } | 320 | } |
| 323 | 321 | ||
diff --git a/drivers/input/misc/ad714x-i2c.c b/drivers/input/misc/ad714x-i2c.c index e9adbe49f6a4..2bef8fa56c94 100644 --- a/drivers/input/misc/ad714x-i2c.c +++ b/drivers/input/misc/ad714x-i2c.c | |||
| @@ -97,7 +97,6 @@ static int __devexit ad714x_i2c_remove(struct i2c_client *client) | |||
| 97 | struct ad714x_chip *chip = i2c_get_clientdata(client); | 97 | struct ad714x_chip *chip = i2c_get_clientdata(client); |
| 98 | 98 | ||
| 99 | ad714x_remove(chip); | 99 | ad714x_remove(chip); |
| 100 | i2c_set_clientdata(client, NULL); | ||
| 101 | 100 | ||
| 102 | return 0; | 101 | return 0; |
| 103 | } | 102 | } |
diff --git a/drivers/input/misc/pcf8574_keypad.c b/drivers/input/misc/pcf8574_keypad.c index 5c3ac4e0b055..0ac47d2898ec 100644 --- a/drivers/input/misc/pcf8574_keypad.c +++ b/drivers/input/misc/pcf8574_keypad.c | |||
| @@ -168,8 +168,6 @@ static int __devexit pcf8574_kp_remove(struct i2c_client *client) | |||
| 168 | input_unregister_device(lp->idev); | 168 | input_unregister_device(lp->idev); |
| 169 | kfree(lp); | 169 | kfree(lp); |
| 170 | 170 | ||
| 171 | i2c_set_clientdata(client, NULL); | ||
| 172 | |||
| 173 | return 0; | 171 | return 0; |
| 174 | } | 172 | } |
| 175 | 173 | ||
diff --git a/drivers/input/mouse/synaptics_i2c.c b/drivers/input/mouse/synaptics_i2c.c index 8291e7399ffa..0ae62f0bcb32 100644 --- a/drivers/input/mouse/synaptics_i2c.c +++ b/drivers/input/mouse/synaptics_i2c.c | |||
| @@ -613,7 +613,6 @@ static int __devexit synaptics_i2c_remove(struct i2c_client *client) | |||
| 613 | free_irq(client->irq, touch); | 613 | free_irq(client->irq, touch); |
| 614 | 614 | ||
| 615 | input_unregister_device(touch->input); | 615 | input_unregister_device(touch->input); |
| 616 | i2c_set_clientdata(client, NULL); | ||
| 617 | kfree(touch); | 616 | kfree(touch); |
| 618 | 617 | ||
| 619 | return 0; | 618 | return 0; |
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c index 794d070c6900..4b32fb4704cd 100644 --- a/drivers/input/touchscreen/ad7879.c +++ b/drivers/input/touchscreen/ad7879.c | |||
| @@ -812,10 +812,8 @@ static int __devinit ad7879_probe(struct i2c_client *client, | |||
| 812 | ts->bus = client; | 812 | ts->bus = client; |
| 813 | 813 | ||
| 814 | error = ad7879_construct(client, ts); | 814 | error = ad7879_construct(client, ts); |
| 815 | if (error) { | 815 | if (error) |
| 816 | i2c_set_clientdata(client, NULL); | ||
| 817 | kfree(ts); | 816 | kfree(ts); |
| 818 | } | ||
| 819 | 817 | ||
| 820 | return error; | 818 | return error; |
| 821 | } | 819 | } |
| @@ -825,7 +823,6 @@ static int __devexit ad7879_remove(struct i2c_client *client) | |||
| 825 | struct ad7879 *ts = dev_get_drvdata(&client->dev); | 823 | struct ad7879 *ts = dev_get_drvdata(&client->dev); |
| 826 | 824 | ||
| 827 | ad7879_destroy(client, ts); | 825 | ad7879_destroy(client, ts); |
| 828 | i2c_set_clientdata(client, NULL); | ||
| 829 | kfree(ts); | 826 | kfree(ts); |
| 830 | 827 | ||
| 831 | return 0; | 828 | return 0; |
diff --git a/drivers/input/touchscreen/eeti_ts.c b/drivers/input/touchscreen/eeti_ts.c index 75f8b73010fa..7a3a916f84a8 100644 --- a/drivers/input/touchscreen/eeti_ts.c +++ b/drivers/input/touchscreen/eeti_ts.c | |||
| @@ -238,7 +238,6 @@ err2: | |||
| 238 | input = NULL; /* so we dont try to free it below */ | 238 | input = NULL; /* so we dont try to free it below */ |
| 239 | err1: | 239 | err1: |
| 240 | input_free_device(input); | 240 | input_free_device(input); |
| 241 | i2c_set_clientdata(client, NULL); | ||
| 242 | kfree(priv); | 241 | kfree(priv); |
| 243 | err0: | 242 | err0: |
| 244 | return err; | 243 | return err; |
| @@ -256,7 +255,6 @@ static int __devexit eeti_ts_remove(struct i2c_client *client) | |||
| 256 | enable_irq(priv->irq); | 255 | enable_irq(priv->irq); |
| 257 | 256 | ||
| 258 | input_unregister_device(priv->input); | 257 | input_unregister_device(priv->input); |
| 259 | i2c_set_clientdata(client, NULL); | ||
| 260 | kfree(priv); | 258 | kfree(priv); |
| 261 | 259 | ||
| 262 | return 0; | 260 | return 0; |
diff --git a/drivers/input/touchscreen/mcs5000_ts.c b/drivers/input/touchscreen/mcs5000_ts.c index ce8ab0269f6f..1fb0c2f06a44 100644 --- a/drivers/input/touchscreen/mcs5000_ts.c +++ b/drivers/input/touchscreen/mcs5000_ts.c | |||
| @@ -256,7 +256,6 @@ static int __devexit mcs5000_ts_remove(struct i2c_client *client) | |||
| 256 | free_irq(client->irq, data); | 256 | free_irq(client->irq, data); |
| 257 | input_unregister_device(data->input_dev); | 257 | input_unregister_device(data->input_dev); |
| 258 | kfree(data); | 258 | kfree(data); |
| 259 | i2c_set_clientdata(client, NULL); | ||
| 260 | 259 | ||
| 261 | return 0; | 260 | return 0; |
| 262 | } | 261 | } |
diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c index 769b479fcaa6..be23780e8a3e 100644 --- a/drivers/input/touchscreen/tsc2007.c +++ b/drivers/input/touchscreen/tsc2007.c | |||
| @@ -347,8 +347,6 @@ static int __devexit tsc2007_remove(struct i2c_client *client) | |||
| 347 | struct tsc2007 *ts = i2c_get_clientdata(client); | 347 | struct tsc2007 *ts = i2c_get_clientdata(client); |
| 348 | struct tsc2007_platform_data *pdata = client->dev.platform_data; | 348 | struct tsc2007_platform_data *pdata = client->dev.platform_data; |
| 349 | 349 | ||
| 350 | i2c_set_clientdata(client, NULL); | ||
| 351 | |||
| 352 | tsc2007_free_irq(ts); | 350 | tsc2007_free_irq(ts); |
| 353 | 351 | ||
| 354 | if (pdata->exit_platform_hw) | 352 | if (pdata->exit_platform_hw) |
diff --git a/drivers/leds/leds-bd2802.c b/drivers/leds/leds-bd2802.c index 286b501a3573..5dcdf9d69b3a 100644 --- a/drivers/leds/leds-bd2802.c +++ b/drivers/leds/leds-bd2802.c | |||
| @@ -742,7 +742,6 @@ failed_unregister_dev_file: | |||
| 742 | for (i--; i >= 0; i--) | 742 | for (i--; i >= 0; i--) |
| 743 | device_remove_file(&led->client->dev, bd2802_attributes[i]); | 743 | device_remove_file(&led->client->dev, bd2802_attributes[i]); |
| 744 | failed_free: | 744 | failed_free: |
| 745 | i2c_set_clientdata(client, NULL); | ||
| 746 | kfree(led); | 745 | kfree(led); |
| 747 | 746 | ||
| 748 | return ret; | 747 | return ret; |
| @@ -759,7 +758,6 @@ static int __exit bd2802_remove(struct i2c_client *client) | |||
| 759 | bd2802_disable_adv_conf(led); | 758 | bd2802_disable_adv_conf(led); |
| 760 | for (i = 0; i < ARRAY_SIZE(bd2802_attributes); i++) | 759 | for (i = 0; i < ARRAY_SIZE(bd2802_attributes); i++) |
| 761 | device_remove_file(&led->client->dev, bd2802_attributes[i]); | 760 | device_remove_file(&led->client->dev, bd2802_attributes[i]); |
| 762 | i2c_set_clientdata(client, NULL); | ||
| 763 | kfree(led); | 761 | kfree(led); |
| 764 | 762 | ||
| 765 | return 0; | 763 | return 0; |
diff --git a/drivers/leds/leds-lp3944.c b/drivers/leds/leds-lp3944.c index 932a58da76c4..9010c054615e 100644 --- a/drivers/leds/leds-lp3944.c +++ b/drivers/leds/leds-lp3944.c | |||
| @@ -432,7 +432,6 @@ static int __devexit lp3944_remove(struct i2c_client *client) | |||
| 432 | } | 432 | } |
| 433 | 433 | ||
| 434 | kfree(data); | 434 | kfree(data); |
| 435 | i2c_set_clientdata(client, NULL); | ||
| 436 | 435 | ||
| 437 | return 0; | 436 | return 0; |
| 438 | } | 437 | } |
diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c index 6682175fa9f7..43d08756d823 100644 --- a/drivers/leds/leds-pca9532.c +++ b/drivers/leds/leds-pca9532.c | |||
| @@ -320,10 +320,8 @@ static int pca9532_probe(struct i2c_client *client, | |||
| 320 | mutex_init(&data->update_lock); | 320 | mutex_init(&data->update_lock); |
| 321 | 321 | ||
| 322 | err = pca9532_configure(client, data, pca9532_pdata); | 322 | err = pca9532_configure(client, data, pca9532_pdata); |
| 323 | if (err) { | 323 | if (err) |
| 324 | kfree(data); | 324 | kfree(data); |
| 325 | i2c_set_clientdata(client, NULL); | ||
| 326 | } | ||
| 327 | 325 | ||
| 328 | return err; | 326 | return err; |
| 329 | } | 327 | } |
| @@ -351,7 +349,6 @@ static int pca9532_remove(struct i2c_client *client) | |||
| 351 | } | 349 | } |
| 352 | 350 | ||
| 353 | kfree(data); | 351 | kfree(data); |
| 354 | i2c_set_clientdata(client, NULL); | ||
| 355 | return 0; | 352 | return 0; |
| 356 | } | 353 | } |
| 357 | 354 | ||
diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c index 8ff50f234190..66aa3e8e786f 100644 --- a/drivers/leds/leds-pca955x.c +++ b/drivers/leds/leds-pca955x.c | |||
| @@ -342,7 +342,6 @@ exit: | |||
| 342 | } | 342 | } |
| 343 | 343 | ||
| 344 | kfree(pca955x); | 344 | kfree(pca955x); |
| 345 | i2c_set_clientdata(client, NULL); | ||
| 346 | 345 | ||
| 347 | return err; | 346 | return err; |
| 348 | } | 347 | } |
| @@ -358,7 +357,6 @@ static int __devexit pca955x_remove(struct i2c_client *client) | |||
| 358 | } | 357 | } |
| 359 | 358 | ||
| 360 | kfree(pca955x); | 359 | kfree(pca955x); |
| 361 | i2c_set_clientdata(client, NULL); | ||
| 362 | 360 | ||
| 363 | return 0; | 361 | return 0; |
| 364 | } | 362 | } |
diff --git a/drivers/macintosh/therm_adt746x.c b/drivers/macintosh/therm_adt746x.c index 16d82f17ae82..c42eeb43042d 100644 --- a/drivers/macintosh/therm_adt746x.c +++ b/drivers/macintosh/therm_adt746x.c | |||
| @@ -182,7 +182,6 @@ remove_thermostat(struct i2c_client *client) | |||
| 182 | 182 | ||
| 183 | thermostat = NULL; | 183 | thermostat = NULL; |
| 184 | 184 | ||
| 185 | i2c_set_clientdata(client, NULL); | ||
| 186 | kfree(th); | 185 | kfree(th); |
| 187 | 186 | ||
| 188 | return 0; | 187 | return 0; |
| @@ -400,7 +399,6 @@ static int probe_thermostat(struct i2c_client *client, | |||
| 400 | rc = read_reg(th, CONFIG_REG); | 399 | rc = read_reg(th, CONFIG_REG); |
| 401 | if (rc < 0) { | 400 | if (rc < 0) { |
| 402 | dev_err(&client->dev, "Thermostat failed to read config!\n"); | 401 | dev_err(&client->dev, "Thermostat failed to read config!\n"); |
| 403 | i2c_set_clientdata(client, NULL); | ||
| 404 | kfree(th); | 402 | kfree(th); |
| 405 | return -ENODEV; | 403 | return -ENODEV; |
| 406 | } | 404 | } |
diff --git a/drivers/macintosh/windfarm_lm75_sensor.c b/drivers/macintosh/windfarm_lm75_sensor.c index d8257d35afde..647c6add2193 100644 --- a/drivers/macintosh/windfarm_lm75_sensor.c +++ b/drivers/macintosh/windfarm_lm75_sensor.c | |||
| @@ -107,10 +107,8 @@ static int wf_lm75_probe(struct i2c_client *client, | |||
| 107 | i2c_set_clientdata(client, lm); | 107 | i2c_set_clientdata(client, lm); |
| 108 | 108 | ||
| 109 | rc = wf_register_sensor(&lm->sens); | 109 | rc = wf_register_sensor(&lm->sens); |
| 110 | if (rc) { | 110 | if (rc) |
| 111 | i2c_set_clientdata(client, NULL); | ||
| 112 | kfree(lm); | 111 | kfree(lm); |
| 113 | } | ||
| 114 | 112 | ||
| 115 | return rc; | 113 | return rc; |
| 116 | } | 114 | } |
| @@ -216,7 +214,6 @@ static int wf_lm75_remove(struct i2c_client *client) | |||
| 216 | /* release sensor */ | 214 | /* release sensor */ |
| 217 | wf_unregister_sensor(&lm->sens); | 215 | wf_unregister_sensor(&lm->sens); |
| 218 | 216 | ||
| 219 | i2c_set_clientdata(client, NULL); | ||
| 220 | return 0; | 217 | return 0; |
| 221 | } | 218 | } |
| 222 | 219 | ||
diff --git a/drivers/macintosh/windfarm_max6690_sensor.c b/drivers/macintosh/windfarm_max6690_sensor.c index b486eb929fde..8204113268f4 100644 --- a/drivers/macintosh/windfarm_max6690_sensor.c +++ b/drivers/macintosh/windfarm_max6690_sensor.c | |||
| @@ -81,7 +81,6 @@ static int wf_max6690_probe(struct i2c_client *client, | |||
| 81 | 81 | ||
| 82 | rc = wf_register_sensor(&max->sens); | 82 | rc = wf_register_sensor(&max->sens); |
| 83 | if (rc) { | 83 | if (rc) { |
| 84 | i2c_set_clientdata(client, NULL); | ||
| 85 | kfree(max); | 84 | kfree(max); |
| 86 | } | 85 | } |
| 87 | 86 | ||
diff --git a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c index e20330a28959..65a8ff3e1f8e 100644 --- a/drivers/macintosh/windfarm_smu_sat.c +++ b/drivers/macintosh/windfarm_smu_sat.c | |||
| @@ -376,7 +376,6 @@ static int wf_sat_remove(struct i2c_client *client) | |||
| 376 | /* XXX TODO */ | 376 | /* XXX TODO */ |
| 377 | 377 | ||
| 378 | sat->i2c = NULL; | 378 | sat->i2c = NULL; |
| 379 | i2c_set_clientdata(client, NULL); | ||
| 380 | return 0; | 379 | return 0; |
| 381 | } | 380 | } |
| 382 | 381 | ||
diff --git a/drivers/media/radio/si470x/radio-si470x-i2c.c b/drivers/media/radio/si470x/radio-si470x-i2c.c index a5844d08d8b7..67a4ec8768a6 100644 --- a/drivers/media/radio/si470x/radio-si470x-i2c.c +++ b/drivers/media/radio/si470x/radio-si470x-i2c.c | |||
| @@ -482,7 +482,6 @@ static __devexit int si470x_i2c_remove(struct i2c_client *client) | |||
| 482 | cancel_work_sync(&radio->radio_work); | 482 | cancel_work_sync(&radio->radio_work); |
| 483 | video_unregister_device(radio->videodev); | 483 | video_unregister_device(radio->videodev); |
| 484 | kfree(radio); | 484 | kfree(radio); |
| 485 | i2c_set_clientdata(client, NULL); | ||
| 486 | 485 | ||
| 487 | return 0; | 486 | return 0; |
| 488 | } | 487 | } |
diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c index b62c0bd3f8ea..e3b9a8ab37f4 100644 --- a/drivers/media/video/mt9m001.c +++ b/drivers/media/video/mt9m001.c | |||
| @@ -785,7 +785,6 @@ static int mt9m001_probe(struct i2c_client *client, | |||
| 785 | ret = mt9m001_video_probe(icd, client); | 785 | ret = mt9m001_video_probe(icd, client); |
| 786 | if (ret) { | 786 | if (ret) { |
| 787 | icd->ops = NULL; | 787 | icd->ops = NULL; |
| 788 | i2c_set_clientdata(client, NULL); | ||
| 789 | kfree(mt9m001); | 788 | kfree(mt9m001); |
| 790 | } | 789 | } |
| 791 | 790 | ||
| @@ -799,7 +798,6 @@ static int mt9m001_remove(struct i2c_client *client) | |||
| 799 | 798 | ||
| 800 | icd->ops = NULL; | 799 | icd->ops = NULL; |
| 801 | mt9m001_video_remove(icd); | 800 | mt9m001_video_remove(icd); |
| 802 | i2c_set_clientdata(client, NULL); | ||
| 803 | client->driver = NULL; | 801 | client->driver = NULL; |
| 804 | kfree(mt9m001); | 802 | kfree(mt9m001); |
| 805 | 803 | ||
diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c index d35f536f9fc3..e42162c50f0a 100644 --- a/drivers/media/video/mt9m111.c +++ b/drivers/media/video/mt9m111.c | |||
| @@ -1068,7 +1068,6 @@ static int mt9m111_probe(struct i2c_client *client, | |||
| 1068 | ret = mt9m111_video_probe(icd, client); | 1068 | ret = mt9m111_video_probe(icd, client); |
| 1069 | if (ret) { | 1069 | if (ret) { |
| 1070 | icd->ops = NULL; | 1070 | icd->ops = NULL; |
| 1071 | i2c_set_clientdata(client, NULL); | ||
| 1072 | kfree(mt9m111); | 1071 | kfree(mt9m111); |
| 1073 | } | 1072 | } |
| 1074 | 1073 | ||
| @@ -1081,7 +1080,6 @@ static int mt9m111_remove(struct i2c_client *client) | |||
| 1081 | struct soc_camera_device *icd = client->dev.platform_data; | 1080 | struct soc_camera_device *icd = client->dev.platform_data; |
| 1082 | 1081 | ||
| 1083 | icd->ops = NULL; | 1082 | icd->ops = NULL; |
| 1084 | i2c_set_clientdata(client, NULL); | ||
| 1085 | client->driver = NULL; | 1083 | client->driver = NULL; |
| 1086 | kfree(mt9m111); | 1084 | kfree(mt9m111); |
| 1087 | 1085 | ||
diff --git a/drivers/media/video/mt9t031.c b/drivers/media/video/mt9t031.c index 78b4e091d2d5..9f5ff2547f19 100644 --- a/drivers/media/video/mt9t031.c +++ b/drivers/media/video/mt9t031.c | |||
| @@ -883,7 +883,6 @@ static int mt9t031_probe(struct i2c_client *client, | |||
| 883 | if (ret) { | 883 | if (ret) { |
| 884 | if (icd) | 884 | if (icd) |
| 885 | icd->ops = NULL; | 885 | icd->ops = NULL; |
| 886 | i2c_set_clientdata(client, NULL); | ||
| 887 | kfree(mt9t031); | 886 | kfree(mt9t031); |
| 888 | } | 887 | } |
| 889 | 888 | ||
| @@ -897,7 +896,6 @@ static int mt9t031_remove(struct i2c_client *client) | |||
| 897 | 896 | ||
| 898 | if (icd) | 897 | if (icd) |
| 899 | icd->ops = NULL; | 898 | icd->ops = NULL; |
| 900 | i2c_set_clientdata(client, NULL); | ||
| 901 | client->driver = NULL; | 899 | client->driver = NULL; |
| 902 | kfree(mt9t031); | 900 | kfree(mt9t031); |
| 903 | 901 | ||
diff --git a/drivers/media/video/mt9t112.c b/drivers/media/video/mt9t112.c index 7438f8d775ba..aa4fce95098f 100644 --- a/drivers/media/video/mt9t112.c +++ b/drivers/media/video/mt9t112.c | |||
| @@ -1119,7 +1119,6 @@ static int mt9t112_probe(struct i2c_client *client, | |||
| 1119 | ret = mt9t112_camera_probe(icd, client); | 1119 | ret = mt9t112_camera_probe(icd, client); |
| 1120 | if (ret) { | 1120 | if (ret) { |
| 1121 | icd->ops = NULL; | 1121 | icd->ops = NULL; |
| 1122 | i2c_set_clientdata(client, NULL); | ||
| 1123 | kfree(priv); | 1122 | kfree(priv); |
| 1124 | } | 1123 | } |
| 1125 | 1124 | ||
| @@ -1132,7 +1131,6 @@ static int mt9t112_remove(struct i2c_client *client) | |||
| 1132 | struct soc_camera_device *icd = client->dev.platform_data; | 1131 | struct soc_camera_device *icd = client->dev.platform_data; |
| 1133 | 1132 | ||
| 1134 | icd->ops = NULL; | 1133 | icd->ops = NULL; |
| 1135 | i2c_set_clientdata(client, NULL); | ||
| 1136 | kfree(priv); | 1134 | kfree(priv); |
| 1137 | return 0; | 1135 | return 0; |
| 1138 | } | 1136 | } |
diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c index e5bae4c9393b..fb44ff006628 100644 --- a/drivers/media/video/mt9v022.c +++ b/drivers/media/video/mt9v022.c | |||
| @@ -920,7 +920,6 @@ static int mt9v022_probe(struct i2c_client *client, | |||
| 920 | ret = mt9v022_video_probe(icd, client); | 920 | ret = mt9v022_video_probe(icd, client); |
| 921 | if (ret) { | 921 | if (ret) { |
| 922 | icd->ops = NULL; | 922 | icd->ops = NULL; |
| 923 | i2c_set_clientdata(client, NULL); | ||
| 924 | kfree(mt9v022); | 923 | kfree(mt9v022); |
| 925 | } | 924 | } |
| 926 | 925 | ||
| @@ -934,7 +933,6 @@ static int mt9v022_remove(struct i2c_client *client) | |||
| 934 | 933 | ||
| 935 | icd->ops = NULL; | 934 | icd->ops = NULL; |
| 936 | mt9v022_video_remove(icd); | 935 | mt9v022_video_remove(icd); |
| 937 | i2c_set_clientdata(client, NULL); | ||
| 938 | client->driver = NULL; | 936 | client->driver = NULL; |
| 939 | kfree(mt9v022); | 937 | kfree(mt9v022); |
| 940 | 938 | ||
diff --git a/drivers/media/video/ov772x.c b/drivers/media/video/ov772x.c index 7f8ece30c77b..c33acc94b747 100644 --- a/drivers/media/video/ov772x.c +++ b/drivers/media/video/ov772x.c | |||
| @@ -1159,7 +1159,6 @@ static int ov772x_probe(struct i2c_client *client, | |||
| 1159 | ret = ov772x_video_probe(icd, client); | 1159 | ret = ov772x_video_probe(icd, client); |
| 1160 | if (ret) { | 1160 | if (ret) { |
| 1161 | icd->ops = NULL; | 1161 | icd->ops = NULL; |
| 1162 | i2c_set_clientdata(client, NULL); | ||
| 1163 | kfree(priv); | 1162 | kfree(priv); |
| 1164 | } | 1163 | } |
| 1165 | 1164 | ||
| @@ -1172,7 +1171,6 @@ static int ov772x_remove(struct i2c_client *client) | |||
| 1172 | struct soc_camera_device *icd = client->dev.platform_data; | 1171 | struct soc_camera_device *icd = client->dev.platform_data; |
| 1173 | 1172 | ||
| 1174 | icd->ops = NULL; | 1173 | icd->ops = NULL; |
| 1175 | i2c_set_clientdata(client, NULL); | ||
| 1176 | kfree(priv); | 1174 | kfree(priv); |
| 1177 | return 0; | 1175 | return 0; |
| 1178 | } | 1176 | } |
diff --git a/drivers/media/video/ov9640.c b/drivers/media/video/ov9640.c index 36599a65f548..035e9ecb0c75 100644 --- a/drivers/media/video/ov9640.c +++ b/drivers/media/video/ov9640.c | |||
| @@ -783,7 +783,6 @@ static int ov9640_probe(struct i2c_client *client, | |||
| 783 | 783 | ||
| 784 | if (ret) { | 784 | if (ret) { |
| 785 | icd->ops = NULL; | 785 | icd->ops = NULL; |
| 786 | i2c_set_clientdata(client, NULL); | ||
| 787 | kfree(priv); | 786 | kfree(priv); |
| 788 | } | 787 | } |
| 789 | 788 | ||
| @@ -794,7 +793,6 @@ static int ov9640_remove(struct i2c_client *client) | |||
| 794 | { | 793 | { |
| 795 | struct ov9640_priv *priv = i2c_get_clientdata(client); | 794 | struct ov9640_priv *priv = i2c_get_clientdata(client); |
| 796 | 795 | ||
| 797 | i2c_set_clientdata(client, NULL); | ||
| 798 | kfree(priv); | 796 | kfree(priv); |
| 799 | return 0; | 797 | return 0; |
| 800 | } | 798 | } |
diff --git a/drivers/media/video/rj54n1cb0c.c b/drivers/media/video/rj54n1cb0c.c index bbd9c11e2c5a..2c3b58c99e18 100644 --- a/drivers/media/video/rj54n1cb0c.c +++ b/drivers/media/video/rj54n1cb0c.c | |||
| @@ -1444,7 +1444,6 @@ static int rj54n1_probe(struct i2c_client *client, | |||
| 1444 | ret = rj54n1_video_probe(icd, client, rj54n1_priv); | 1444 | ret = rj54n1_video_probe(icd, client, rj54n1_priv); |
| 1445 | if (ret < 0) { | 1445 | if (ret < 0) { |
| 1446 | icd->ops = NULL; | 1446 | icd->ops = NULL; |
| 1447 | i2c_set_clientdata(client, NULL); | ||
| 1448 | kfree(rj54n1); | 1447 | kfree(rj54n1); |
| 1449 | return ret; | 1448 | return ret; |
| 1450 | } | 1449 | } |
| @@ -1461,7 +1460,6 @@ static int rj54n1_remove(struct i2c_client *client) | |||
| 1461 | icd->ops = NULL; | 1460 | icd->ops = NULL; |
| 1462 | if (icl->free_bus) | 1461 | if (icl->free_bus) |
| 1463 | icl->free_bus(icl); | 1462 | icl->free_bus(icl); |
| 1464 | i2c_set_clientdata(client, NULL); | ||
| 1465 | client->driver = NULL; | 1463 | client->driver = NULL; |
| 1466 | kfree(rj54n1); | 1464 | kfree(rj54n1); |
| 1467 | 1465 | ||
diff --git a/drivers/media/video/tcm825x.c b/drivers/media/video/tcm825x.c index b90e9da3167d..54681a535822 100644 --- a/drivers/media/video/tcm825x.c +++ b/drivers/media/video/tcm825x.c | |||
| @@ -850,7 +850,6 @@ static int tcm825x_probe(struct i2c_client *client, | |||
| 850 | const struct i2c_device_id *did) | 850 | const struct i2c_device_id *did) |
| 851 | { | 851 | { |
| 852 | struct tcm825x_sensor *sensor = &tcm825x; | 852 | struct tcm825x_sensor *sensor = &tcm825x; |
| 853 | int rval; | ||
| 854 | 853 | ||
| 855 | if (i2c_get_clientdata(client)) | 854 | if (i2c_get_clientdata(client)) |
| 856 | return -EBUSY; | 855 | return -EBUSY; |
| @@ -871,11 +870,7 @@ static int tcm825x_probe(struct i2c_client *client, | |||
| 871 | sensor->pix.height = tcm825x_sizes[QVGA].height; | 870 | sensor->pix.height = tcm825x_sizes[QVGA].height; |
| 872 | sensor->pix.pixelformat = V4L2_PIX_FMT_RGB565; | 871 | sensor->pix.pixelformat = V4L2_PIX_FMT_RGB565; |
| 873 | 872 | ||
| 874 | rval = v4l2_int_device_register(sensor->v4l2_int_device); | 873 | return v4l2_int_device_register(sensor->v4l2_int_device); |
| 875 | if (rval) | ||
| 876 | i2c_set_clientdata(client, NULL); | ||
| 877 | |||
| 878 | return rval; | ||
| 879 | } | 874 | } |
| 880 | 875 | ||
| 881 | static int tcm825x_remove(struct i2c_client *client) | 876 | static int tcm825x_remove(struct i2c_client *client) |
| @@ -886,7 +881,6 @@ static int tcm825x_remove(struct i2c_client *client) | |||
| 886 | return -ENODEV; /* our client isn't attached */ | 881 | return -ENODEV; /* our client isn't attached */ |
| 887 | 882 | ||
| 888 | v4l2_int_device_unregister(sensor->v4l2_int_device); | 883 | v4l2_int_device_unregister(sensor->v4l2_int_device); |
| 889 | i2c_set_clientdata(client, NULL); | ||
| 890 | 884 | ||
| 891 | return 0; | 885 | return 0; |
| 892 | } | 886 | } |
diff --git a/drivers/media/video/tw9910.c b/drivers/media/video/tw9910.c index 76be733eabfd..6eb3395def07 100644 --- a/drivers/media/video/tw9910.c +++ b/drivers/media/video/tw9910.c | |||
| @@ -977,7 +977,6 @@ static int tw9910_probe(struct i2c_client *client, | |||
| 977 | ret = tw9910_video_probe(icd, client); | 977 | ret = tw9910_video_probe(icd, client); |
| 978 | if (ret) { | 978 | if (ret) { |
| 979 | icd->ops = NULL; | 979 | icd->ops = NULL; |
| 980 | i2c_set_clientdata(client, NULL); | ||
| 981 | kfree(priv); | 980 | kfree(priv); |
| 982 | } | 981 | } |
| 983 | 982 | ||
| @@ -990,7 +989,6 @@ static int tw9910_remove(struct i2c_client *client) | |||
| 990 | struct soc_camera_device *icd = client->dev.platform_data; | 989 | struct soc_camera_device *icd = client->dev.platform_data; |
| 991 | 990 | ||
| 992 | icd->ops = NULL; | 991 | icd->ops = NULL; |
| 993 | i2c_set_clientdata(client, NULL); | ||
| 994 | kfree(priv); | 992 | kfree(priv); |
| 995 | return 0; | 993 | return 0; |
| 996 | } | 994 | } |
diff --git a/drivers/mfd/88pm860x-i2c.c b/drivers/mfd/88pm860x-i2c.c index c933b64d1283..bc02e6b21608 100644 --- a/drivers/mfd/88pm860x-i2c.c +++ b/drivers/mfd/88pm860x-i2c.c | |||
| @@ -200,8 +200,6 @@ static int __devexit pm860x_remove(struct i2c_client *client) | |||
| 200 | 200 | ||
| 201 | pm860x_device_exit(chip); | 201 | pm860x_device_exit(chip); |
| 202 | i2c_unregister_device(chip->companion); | 202 | i2c_unregister_device(chip->companion); |
| 203 | i2c_set_clientdata(chip->client, NULL); | ||
| 204 | i2c_set_clientdata(client, NULL); | ||
| 205 | kfree(chip); | 203 | kfree(chip); |
| 206 | return 0; | 204 | return 0; |
| 207 | } | 205 | } |
diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c index 53ebfee548fa..66379b413906 100644 --- a/drivers/mfd/ab3100-core.c +++ b/drivers/mfd/ab3100-core.c | |||
| @@ -957,7 +957,6 @@ static int __init ab3100_probe(struct i2c_client *client, | |||
| 957 | i2c_unregister_device(ab3100->testreg_client); | 957 | i2c_unregister_device(ab3100->testreg_client); |
| 958 | exit_no_testreg_client: | 958 | exit_no_testreg_client: |
| 959 | exit_no_detect: | 959 | exit_no_detect: |
| 960 | i2c_set_clientdata(client, NULL); | ||
| 961 | kfree(ab3100); | 960 | kfree(ab3100); |
| 962 | return err; | 961 | return err; |
| 963 | } | 962 | } |
| @@ -979,7 +978,6 @@ static int __exit ab3100_remove(struct i2c_client *client) | |||
| 979 | * their notifiers so deactivate IRQ | 978 | * their notifiers so deactivate IRQ |
| 980 | */ | 979 | */ |
| 981 | free_irq(client->irq, ab3100); | 980 | free_irq(client->irq, ab3100); |
| 982 | i2c_set_clientdata(client, NULL); | ||
| 983 | kfree(ab3100); | 981 | kfree(ab3100); |
| 984 | return 0; | 982 | return 0; |
| 985 | } | 983 | } |
diff --git a/drivers/mfd/ab3550-core.c b/drivers/mfd/ab3550-core.c index 1060f8e1c40a..f54ab62e7bc6 100644 --- a/drivers/mfd/ab3550-core.c +++ b/drivers/mfd/ab3550-core.c | |||
| @@ -1362,7 +1362,6 @@ static int __exit ab3550_remove(struct i2c_client *client) | |||
| 1362 | * their notifiers so deactivate IRQ | 1362 | * their notifiers so deactivate IRQ |
| 1363 | */ | 1363 | */ |
| 1364 | free_irq(client->irq, ab); | 1364 | free_irq(client->irq, ab); |
| 1365 | i2c_set_clientdata(client, NULL); | ||
| 1366 | kfree(ab); | 1365 | kfree(ab); |
| 1367 | return 0; | 1366 | return 0; |
| 1368 | } | 1367 | } |
diff --git a/drivers/mfd/adp5520.c b/drivers/mfd/adp5520.c index 005532865654..3122139b4300 100644 --- a/drivers/mfd/adp5520.c +++ b/drivers/mfd/adp5520.c | |||
| @@ -302,7 +302,6 @@ out_free_irq: | |||
| 302 | free_irq(chip->irq, chip); | 302 | free_irq(chip->irq, chip); |
| 303 | 303 | ||
| 304 | out_free_chip: | 304 | out_free_chip: |
| 305 | i2c_set_clientdata(client, NULL); | ||
| 306 | kfree(chip); | 305 | kfree(chip); |
| 307 | 306 | ||
| 308 | return ret; | 307 | return ret; |
| @@ -317,7 +316,6 @@ static int __devexit adp5520_remove(struct i2c_client *client) | |||
| 317 | 316 | ||
| 318 | adp5520_remove_subdevs(chip); | 317 | adp5520_remove_subdevs(chip); |
| 319 | adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0); | 318 | adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0); |
| 320 | i2c_set_clientdata(client, NULL); | ||
| 321 | kfree(chip); | 319 | kfree(chip); |
| 322 | return 0; | 320 | return 0; |
| 323 | } | 321 | } |
diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c index 3ad915d0589c..c07aece900fb 100644 --- a/drivers/mfd/da903x.c +++ b/drivers/mfd/da903x.c | |||
| @@ -534,7 +534,6 @@ static int __devinit da903x_probe(struct i2c_client *client, | |||
| 534 | out_free_irq: | 534 | out_free_irq: |
| 535 | free_irq(client->irq, chip); | 535 | free_irq(client->irq, chip); |
| 536 | out_free_chip: | 536 | out_free_chip: |
| 537 | i2c_set_clientdata(client, NULL); | ||
| 538 | kfree(chip); | 537 | kfree(chip); |
| 539 | return ret; | 538 | return ret; |
| 540 | } | 539 | } |
| @@ -544,7 +543,6 @@ static int __devexit da903x_remove(struct i2c_client *client) | |||
| 544 | struct da903x_chip *chip = i2c_get_clientdata(client); | 543 | struct da903x_chip *chip = i2c_get_clientdata(client); |
| 545 | 544 | ||
| 546 | da903x_remove_subdevs(chip); | 545 | da903x_remove_subdevs(chip); |
| 547 | i2c_set_clientdata(client, NULL); | ||
| 548 | kfree(chip); | 546 | kfree(chip); |
| 549 | return 0; | 547 | return 0; |
| 550 | } | 548 | } |
diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c index e73f3f5252a8..0219115e00c7 100644 --- a/drivers/mfd/max8925-i2c.c +++ b/drivers/mfd/max8925-i2c.c | |||
| @@ -173,7 +173,6 @@ static int __devexit max8925_remove(struct i2c_client *client) | |||
| 173 | max8925_device_exit(chip); | 173 | max8925_device_exit(chip); |
| 174 | i2c_unregister_device(chip->adc); | 174 | i2c_unregister_device(chip->adc); |
| 175 | i2c_unregister_device(chip->rtc); | 175 | i2c_unregister_device(chip->rtc); |
| 176 | i2c_set_clientdata(chip->i2c, NULL); | ||
| 177 | kfree(chip); | 176 | kfree(chip); |
| 178 | return 0; | 177 | return 0; |
| 179 | } | 178 | } |
diff --git a/drivers/mfd/menelaus.c b/drivers/mfd/menelaus.c index 721948be12c7..a3fb4bcb9889 100644 --- a/drivers/mfd/menelaus.c +++ b/drivers/mfd/menelaus.c | |||
| @@ -1228,7 +1228,6 @@ fail2: | |||
| 1228 | free_irq(client->irq, menelaus); | 1228 | free_irq(client->irq, menelaus); |
| 1229 | flush_scheduled_work(); | 1229 | flush_scheduled_work(); |
| 1230 | fail1: | 1230 | fail1: |
| 1231 | i2c_set_clientdata(client, NULL); | ||
| 1232 | kfree(menelaus); | 1231 | kfree(menelaus); |
| 1233 | return err; | 1232 | return err; |
| 1234 | } | 1233 | } |
| @@ -1238,7 +1237,6 @@ static int __exit menelaus_remove(struct i2c_client *client) | |||
| 1238 | struct menelaus_chip *menelaus = i2c_get_clientdata(client); | 1237 | struct menelaus_chip *menelaus = i2c_get_clientdata(client); |
| 1239 | 1238 | ||
| 1240 | free_irq(client->irq, menelaus); | 1239 | free_irq(client->irq, menelaus); |
| 1241 | i2c_set_clientdata(client, NULL); | ||
| 1242 | kfree(menelaus); | 1240 | kfree(menelaus); |
| 1243 | the_menelaus = NULL; | 1241 | the_menelaus = NULL; |
| 1244 | return 0; | 1242 | return 0; |
diff --git a/drivers/mfd/pcf50633-core.c b/drivers/mfd/pcf50633-core.c index 704736e6e9b9..23e585527285 100644 --- a/drivers/mfd/pcf50633-core.c +++ b/drivers/mfd/pcf50633-core.c | |||
| @@ -336,7 +336,6 @@ static int __devinit pcf50633_probe(struct i2c_client *client, | |||
| 336 | return 0; | 336 | return 0; |
| 337 | 337 | ||
| 338 | err_free: | 338 | err_free: |
| 339 | i2c_set_clientdata(client, NULL); | ||
| 340 | kfree(pcf); | 339 | kfree(pcf); |
| 341 | 340 | ||
| 342 | return ret; | 341 | return ret; |
| @@ -357,7 +356,6 @@ static int __devexit pcf50633_remove(struct i2c_client *client) | |||
| 357 | for (i = 0; i < PCF50633_NUM_REGULATORS; i++) | 356 | for (i = 0; i < PCF50633_NUM_REGULATORS; i++) |
| 358 | platform_device_unregister(pcf->regulator_pdev[i]); | 357 | platform_device_unregister(pcf->regulator_pdev[i]); |
| 359 | 358 | ||
| 360 | i2c_set_clientdata(client, NULL); | ||
| 361 | kfree(pcf); | 359 | kfree(pcf); |
| 362 | 360 | ||
| 363 | return 0; | 361 | return 0; |
diff --git a/drivers/mfd/tc35892.c b/drivers/mfd/tc35892.c index 715f095dd7a6..e619e2a55997 100644 --- a/drivers/mfd/tc35892.c +++ b/drivers/mfd/tc35892.c | |||
| @@ -296,7 +296,6 @@ out_freeirq: | |||
| 296 | out_removeirq: | 296 | out_removeirq: |
| 297 | tc35892_irq_remove(tc35892); | 297 | tc35892_irq_remove(tc35892); |
| 298 | out_free: | 298 | out_free: |
| 299 | i2c_set_clientdata(i2c, NULL); | ||
| 300 | kfree(tc35892); | 299 | kfree(tc35892); |
| 301 | return ret; | 300 | return ret; |
| 302 | } | 301 | } |
| @@ -310,7 +309,6 @@ static int __devexit tc35892_remove(struct i2c_client *client) | |||
| 310 | free_irq(tc35892->i2c->irq, tc35892); | 309 | free_irq(tc35892->i2c->irq, tc35892); |
| 311 | tc35892_irq_remove(tc35892); | 310 | tc35892_irq_remove(tc35892); |
| 312 | 311 | ||
| 313 | i2c_set_clientdata(client, NULL); | ||
| 314 | kfree(tc35892); | 312 | kfree(tc35892); |
| 315 | 313 | ||
| 316 | return 0; | 314 | return 0; |
diff --git a/drivers/mfd/tps65010.c b/drivers/mfd/tps65010.c index 9b22a77f70f5..d0016b67d125 100644 --- a/drivers/mfd/tps65010.c +++ b/drivers/mfd/tps65010.c | |||
| @@ -530,7 +530,6 @@ static int __exit tps65010_remove(struct i2c_client *client) | |||
| 530 | cancel_delayed_work(&tps->work); | 530 | cancel_delayed_work(&tps->work); |
| 531 | flush_scheduled_work(); | 531 | flush_scheduled_work(); |
| 532 | debugfs_remove(tps->file); | 532 | debugfs_remove(tps->file); |
| 533 | i2c_set_clientdata(client, NULL); | ||
| 534 | kfree(tps); | 533 | kfree(tps); |
| 535 | the_tps = NULL; | 534 | the_tps = NULL; |
| 536 | return 0; | 535 | return 0; |
diff --git a/drivers/mfd/wm8350-i2c.c b/drivers/mfd/wm8350-i2c.c index 7795af4b1fe1..5fe5de166adb 100644 --- a/drivers/mfd/wm8350-i2c.c +++ b/drivers/mfd/wm8350-i2c.c | |||
| @@ -80,7 +80,6 @@ static int wm8350_i2c_probe(struct i2c_client *i2c, | |||
| 80 | return ret; | 80 | return ret; |
| 81 | 81 | ||
| 82 | err: | 82 | err: |
| 83 | i2c_set_clientdata(i2c, NULL); | ||
| 84 | kfree(wm8350); | 83 | kfree(wm8350); |
| 85 | return ret; | 84 | return ret; |
| 86 | } | 85 | } |
| @@ -90,7 +89,6 @@ static int wm8350_i2c_remove(struct i2c_client *i2c) | |||
| 90 | struct wm8350 *wm8350 = i2c_get_clientdata(i2c); | 89 | struct wm8350 *wm8350 = i2c_get_clientdata(i2c); |
| 91 | 90 | ||
| 92 | wm8350_device_exit(wm8350); | 91 | wm8350_device_exit(wm8350); |
| 93 | i2c_set_clientdata(i2c, NULL); | ||
| 94 | kfree(wm8350); | 92 | kfree(wm8350); |
| 95 | 93 | ||
| 96 | return 0; | 94 | return 0; |
diff --git a/drivers/mfd/wm8400-core.c b/drivers/mfd/wm8400-core.c index e08aafa663dc..1bfef4846b07 100644 --- a/drivers/mfd/wm8400-core.c +++ b/drivers/mfd/wm8400-core.c | |||
| @@ -415,7 +415,6 @@ static int wm8400_i2c_probe(struct i2c_client *i2c, | |||
| 415 | return 0; | 415 | return 0; |
| 416 | 416 | ||
| 417 | struct_err: | 417 | struct_err: |
| 418 | i2c_set_clientdata(i2c, NULL); | ||
| 419 | kfree(wm8400); | 418 | kfree(wm8400); |
| 420 | err: | 419 | err: |
| 421 | return ret; | 420 | return ret; |
| @@ -426,7 +425,6 @@ static int wm8400_i2c_remove(struct i2c_client *i2c) | |||
| 426 | struct wm8400 *wm8400 = i2c_get_clientdata(i2c); | 425 | struct wm8400 *wm8400 = i2c_get_clientdata(i2c); |
| 427 | 426 | ||
| 428 | wm8400_release(wm8400); | 427 | wm8400_release(wm8400); |
| 429 | i2c_set_clientdata(i2c, NULL); | ||
| 430 | kfree(wm8400); | 428 | kfree(wm8400); |
| 431 | 429 | ||
| 432 | return 0; | 430 | return 0; |
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index f7ca3a42b490..559b0b3c16c3 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c | |||
| @@ -643,7 +643,6 @@ static int __devexit at24_remove(struct i2c_client *client) | |||
| 643 | 643 | ||
| 644 | kfree(at24->writebuf); | 644 | kfree(at24->writebuf); |
| 645 | kfree(at24); | 645 | kfree(at24); |
| 646 | i2c_set_clientdata(client, NULL); | ||
| 647 | return 0; | 646 | return 0; |
| 648 | } | 647 | } |
| 649 | 648 | ||
diff --git a/drivers/mtd/maps/pismo.c b/drivers/mtd/maps/pismo.c index eb476b7f8d11..f4ce273e93fd 100644 --- a/drivers/mtd/maps/pismo.c +++ b/drivers/mtd/maps/pismo.c | |||
| @@ -234,7 +234,6 @@ static int __devexit pismo_remove(struct i2c_client *client) | |||
| 234 | /* FIXME: set_vpp needs saner arguments */ | 234 | /* FIXME: set_vpp needs saner arguments */ |
| 235 | pismo_setvpp_remove_fix(pismo); | 235 | pismo_setvpp_remove_fix(pismo); |
| 236 | 236 | ||
| 237 | i2c_set_clientdata(client, NULL); | ||
| 238 | kfree(pismo); | 237 | kfree(pismo); |
| 239 | 238 | ||
| 240 | return 0; | 239 | return 0; |
| @@ -286,7 +285,6 @@ static int __devinit pismo_probe(struct i2c_client *client, | |||
| 286 | return 0; | 285 | return 0; |
| 287 | 286 | ||
| 288 | exit_free: | 287 | exit_free: |
| 289 | i2c_set_clientdata(client, NULL); | ||
| 290 | kfree(pismo); | 288 | kfree(pismo); |
| 291 | return ret; | 289 | return ret; |
| 292 | } | 290 | } |
diff --git a/drivers/power/max17040_battery.c b/drivers/power/max17040_battery.c index f3e22c9fe20a..2f2f9a6f54fa 100644 --- a/drivers/power/max17040_battery.c +++ b/drivers/power/max17040_battery.c | |||
| @@ -225,7 +225,6 @@ static int __devinit max17040_probe(struct i2c_client *client, | |||
| 225 | ret = power_supply_register(&client->dev, &chip->battery); | 225 | ret = power_supply_register(&client->dev, &chip->battery); |
| 226 | if (ret) { | 226 | if (ret) { |
| 227 | dev_err(&client->dev, "failed: power supply register\n"); | 227 | dev_err(&client->dev, "failed: power supply register\n"); |
| 228 | i2c_set_clientdata(client, NULL); | ||
| 229 | kfree(chip); | 228 | kfree(chip); |
| 230 | return ret; | 229 | return ret; |
| 231 | } | 230 | } |
| @@ -245,7 +244,6 @@ static int __devexit max17040_remove(struct i2c_client *client) | |||
| 245 | 244 | ||
| 246 | power_supply_unregister(&chip->battery); | 245 | power_supply_unregister(&chip->battery); |
| 247 | cancel_delayed_work(&chip->work); | 246 | cancel_delayed_work(&chip->work); |
| 248 | i2c_set_clientdata(client, NULL); | ||
| 249 | kfree(chip); | 247 | kfree(chip); |
| 250 | return 0; | 248 | return 0; |
| 251 | } | 249 | } |
diff --git a/drivers/regulator/lp3971.c b/drivers/regulator/lp3971.c index 671a7d1f1f0e..8ae3732eb24b 100644 --- a/drivers/regulator/lp3971.c +++ b/drivers/regulator/lp3971.c | |||
| @@ -519,8 +519,6 @@ static int __devexit lp3971_i2c_remove(struct i2c_client *i2c) | |||
| 519 | struct lp3971 *lp3971 = i2c_get_clientdata(i2c); | 519 | struct lp3971 *lp3971 = i2c_get_clientdata(i2c); |
| 520 | int i; | 520 | int i; |
| 521 | 521 | ||
| 522 | i2c_set_clientdata(i2c, NULL); | ||
| 523 | |||
| 524 | for (i = 0; i < lp3971->num_regulators; i++) | 522 | for (i = 0; i < lp3971->num_regulators; i++) |
| 525 | regulator_unregister(lp3971->rdev[i]); | 523 | regulator_unregister(lp3971->rdev[i]); |
| 526 | 524 | ||
diff --git a/drivers/regulator/max1586.c b/drivers/regulator/max1586.c index b3c1afc16889..2b54d9d75f11 100644 --- a/drivers/regulator/max1586.c +++ b/drivers/regulator/max1586.c | |||
| @@ -244,7 +244,6 @@ static int __devexit max1586_pmic_remove(struct i2c_client *client) | |||
| 244 | for (i = 0; i <= MAX1586_V6; i++) | 244 | for (i = 0; i <= MAX1586_V6; i++) |
| 245 | if (rdev[i]) | 245 | if (rdev[i]) |
| 246 | regulator_unregister(rdev[i]); | 246 | regulator_unregister(rdev[i]); |
| 247 | i2c_set_clientdata(client, NULL); | ||
| 248 | kfree(rdev); | 247 | kfree(rdev); |
| 249 | 248 | ||
| 250 | return 0; | 249 | return 0; |
diff --git a/drivers/regulator/max8649.c b/drivers/regulator/max8649.c index bfc4c5ffdc96..4520ace3f7e7 100644 --- a/drivers/regulator/max8649.c +++ b/drivers/regulator/max8649.c | |||
| @@ -357,7 +357,6 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client, | |||
| 357 | dev_info(info->dev, "Max8649 regulator device is detected.\n"); | 357 | dev_info(info->dev, "Max8649 regulator device is detected.\n"); |
| 358 | return 0; | 358 | return 0; |
| 359 | out: | 359 | out: |
| 360 | i2c_set_clientdata(client, NULL); | ||
| 361 | kfree(info); | 360 | kfree(info); |
| 362 | return ret; | 361 | return ret; |
| 363 | } | 362 | } |
| @@ -369,7 +368,6 @@ static int __devexit max8649_regulator_remove(struct i2c_client *client) | |||
| 369 | if (info) { | 368 | if (info) { |
| 370 | if (info->regulator) | 369 | if (info->regulator) |
| 371 | regulator_unregister(info->regulator); | 370 | regulator_unregister(info->regulator); |
| 372 | i2c_set_clientdata(client, NULL); | ||
| 373 | kfree(info); | 371 | kfree(info); |
| 374 | } | 372 | } |
| 375 | 373 | ||
diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c index 3790b21879ff..d97220efae5a 100644 --- a/drivers/regulator/max8660.c +++ b/drivers/regulator/max8660.c | |||
| @@ -471,7 +471,6 @@ static int __devexit max8660_remove(struct i2c_client *client) | |||
| 471 | for (i = 0; i < MAX8660_V_END; i++) | 471 | for (i = 0; i < MAX8660_V_END; i++) |
| 472 | if (rdev[i]) | 472 | if (rdev[i]) |
| 473 | regulator_unregister(rdev[i]); | 473 | regulator_unregister(rdev[i]); |
| 474 | i2c_set_clientdata(client, NULL); | ||
| 475 | kfree(rdev); | 474 | kfree(rdev); |
| 476 | 475 | ||
| 477 | return 0; | 476 | return 0; |
diff --git a/drivers/regulator/tps65023-regulator.c b/drivers/regulator/tps65023-regulator.c index 8e2f2098b005..f50afc9f287a 100644 --- a/drivers/regulator/tps65023-regulator.c +++ b/drivers/regulator/tps65023-regulator.c | |||
| @@ -538,9 +538,6 @@ static int __devexit tps_65023_remove(struct i2c_client *client) | |||
| 538 | struct tps_pmic *tps = i2c_get_clientdata(client); | 538 | struct tps_pmic *tps = i2c_get_clientdata(client); |
| 539 | int i; | 539 | int i; |
| 540 | 540 | ||
| 541 | /* clear the client data in i2c */ | ||
| 542 | i2c_set_clientdata(client, NULL); | ||
| 543 | |||
| 544 | for (i = 0; i < TPS65023_NUM_REGULATOR; i++) | 541 | for (i = 0; i < TPS65023_NUM_REGULATOR; i++) |
| 545 | regulator_unregister(tps->rdev[i]); | 542 | regulator_unregister(tps->rdev[i]); |
| 546 | 543 | ||
diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index 61945734ad00..1f0007fd4431 100644 --- a/drivers/rtc/rtc-ds1374.c +++ b/drivers/rtc/rtc-ds1374.c | |||
| @@ -403,7 +403,6 @@ out_irq: | |||
| 403 | free_irq(client->irq, client); | 403 | free_irq(client->irq, client); |
| 404 | 404 | ||
| 405 | out_free: | 405 | out_free: |
| 406 | i2c_set_clientdata(client, NULL); | ||
| 407 | kfree(ds1374); | 406 | kfree(ds1374); |
| 408 | return ret; | 407 | return ret; |
| 409 | } | 408 | } |
| @@ -422,7 +421,6 @@ static int __devexit ds1374_remove(struct i2c_client *client) | |||
| 422 | } | 421 | } |
| 423 | 422 | ||
| 424 | rtc_device_unregister(ds1374->rtc); | 423 | rtc_device_unregister(ds1374->rtc); |
| 425 | i2c_set_clientdata(client, NULL); | ||
| 426 | kfree(ds1374); | 424 | kfree(ds1374); |
| 427 | return 0; | 425 | return 0; |
| 428 | } | 426 | } |
diff --git a/drivers/rtc/rtc-rx8025.c b/drivers/rtc/rtc-rx8025.c index b65c82f792d9..789f62f9b47d 100644 --- a/drivers/rtc/rtc-rx8025.c +++ b/drivers/rtc/rtc-rx8025.c | |||
| @@ -632,7 +632,6 @@ errout_reg: | |||
| 632 | rtc_device_unregister(rx8025->rtc); | 632 | rtc_device_unregister(rx8025->rtc); |
| 633 | 633 | ||
| 634 | errout_free: | 634 | errout_free: |
| 635 | i2c_set_clientdata(client, NULL); | ||
| 636 | kfree(rx8025); | 635 | kfree(rx8025); |
| 637 | 636 | ||
| 638 | errout: | 637 | errout: |
| @@ -656,7 +655,6 @@ static int __devexit rx8025_remove(struct i2c_client *client) | |||
| 656 | 655 | ||
| 657 | rx8025_sysfs_unregister(&client->dev); | 656 | rx8025_sysfs_unregister(&client->dev); |
| 658 | rtc_device_unregister(rx8025->rtc); | 657 | rtc_device_unregister(rx8025->rtc); |
| 659 | i2c_set_clientdata(client, NULL); | ||
| 660 | kfree(rx8025); | 658 | kfree(rx8025); |
| 661 | return 0; | 659 | return 0; |
| 662 | } | 660 | } |
diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index def4d396d0b0..f789e002c9b0 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c | |||
| @@ -275,7 +275,6 @@ exit_dummy: | |||
| 275 | if (s35390a->client[i]) | 275 | if (s35390a->client[i]) |
| 276 | i2c_unregister_device(s35390a->client[i]); | 276 | i2c_unregister_device(s35390a->client[i]); |
| 277 | kfree(s35390a); | 277 | kfree(s35390a); |
| 278 | i2c_set_clientdata(client, NULL); | ||
| 279 | 278 | ||
| 280 | exit: | 279 | exit: |
| 281 | return err; | 280 | return err; |
| @@ -292,7 +291,6 @@ static int s35390a_remove(struct i2c_client *client) | |||
| 292 | 291 | ||
| 293 | rtc_device_unregister(s35390a->rtc); | 292 | rtc_device_unregister(s35390a->rtc); |
| 294 | kfree(s35390a); | 293 | kfree(s35390a); |
| 295 | i2c_set_clientdata(client, NULL); | ||
| 296 | 294 | ||
| 297 | return 0; | 295 | return 0; |
| 298 | } | 296 | } |
diff --git a/drivers/staging/dream/synaptics_i2c_rmi.c b/drivers/staging/dream/synaptics_i2c_rmi.c index 1f020dad6234..3320359408a9 100644 --- a/drivers/staging/dream/synaptics_i2c_rmi.c +++ b/drivers/staging/dream/synaptics_i2c_rmi.c | |||
| @@ -519,7 +519,6 @@ err_input_register_device_failed: | |||
| 519 | err_input_dev_alloc_failed: | 519 | err_input_dev_alloc_failed: |
| 520 | err_detect_failed: | 520 | err_detect_failed: |
| 521 | err_power_failed: | 521 | err_power_failed: |
| 522 | i2c_set_clientdata(client, NULL); | ||
| 523 | kfree(ts); | 522 | kfree(ts); |
| 524 | err_alloc_data_failed: | 523 | err_alloc_data_failed: |
| 525 | err_check_functionality_failed: | 524 | err_check_functionality_failed: |
| @@ -537,7 +536,6 @@ static int synaptics_ts_remove(struct i2c_client *client) | |||
| 537 | else | 536 | else |
| 538 | hrtimer_cancel(&ts->timer); | 537 | hrtimer_cancel(&ts->timer); |
| 539 | input_unregister_device(ts->input_dev); | 538 | input_unregister_device(ts->input_dev); |
| 540 | i2c_set_clientdata(client, NULL); | ||
| 541 | kfree(ts); | 539 | kfree(ts); |
| 542 | return 0; | 540 | return 0; |
| 543 | } | 541 | } |
diff --git a/drivers/staging/go7007/wis-saa7113.c b/drivers/staging/go7007/wis-saa7113.c index bd925457f8b7..72f5c1f56d19 100644 --- a/drivers/staging/go7007/wis-saa7113.c +++ b/drivers/staging/go7007/wis-saa7113.c | |||
| @@ -289,7 +289,6 @@ static int wis_saa7113_probe(struct i2c_client *client, | |||
| 289 | if (write_regs(client, initial_registers) < 0) { | 289 | if (write_regs(client, initial_registers) < 0) { |
| 290 | printk(KERN_ERR | 290 | printk(KERN_ERR |
| 291 | "wis-saa7113: error initializing SAA7113\n"); | 291 | "wis-saa7113: error initializing SAA7113\n"); |
| 292 | i2c_set_clientdata(client, NULL); | ||
| 293 | kfree(dec); | 292 | kfree(dec); |
| 294 | return -ENODEV; | 293 | return -ENODEV; |
| 295 | } | 294 | } |
| @@ -301,7 +300,6 @@ static int wis_saa7113_remove(struct i2c_client *client) | |||
| 301 | { | 300 | { |
| 302 | struct wis_saa7113 *dec = i2c_get_clientdata(client); | 301 | struct wis_saa7113 *dec = i2c_get_clientdata(client); |
| 303 | 302 | ||
| 304 | i2c_set_clientdata(client, NULL); | ||
| 305 | kfree(dec); | 303 | kfree(dec); |
| 306 | return 0; | 304 | return 0; |
| 307 | } | 305 | } |
diff --git a/drivers/staging/go7007/wis-saa7115.c b/drivers/staging/go7007/wis-saa7115.c index b2eb804c1954..cd950b61cf70 100644 --- a/drivers/staging/go7007/wis-saa7115.c +++ b/drivers/staging/go7007/wis-saa7115.c | |||
| @@ -422,7 +422,6 @@ static int wis_saa7115_probe(struct i2c_client *client, | |||
| 422 | if (write_regs(client, initial_registers) < 0) { | 422 | if (write_regs(client, initial_registers) < 0) { |
| 423 | printk(KERN_ERR | 423 | printk(KERN_ERR |
| 424 | "wis-saa7115: error initializing SAA7115\n"); | 424 | "wis-saa7115: error initializing SAA7115\n"); |
| 425 | i2c_set_clientdata(client, NULL); | ||
| 426 | kfree(dec); | 425 | kfree(dec); |
| 427 | return -ENODEV; | 426 | return -ENODEV; |
| 428 | } | 427 | } |
| @@ -434,7 +433,6 @@ static int wis_saa7115_remove(struct i2c_client *client) | |||
| 434 | { | 433 | { |
| 435 | struct wis_saa7115 *dec = i2c_get_clientdata(client); | 434 | struct wis_saa7115 *dec = i2c_get_clientdata(client); |
| 436 | 435 | ||
| 437 | i2c_set_clientdata(client, NULL); | ||
| 438 | kfree(dec); | 436 | kfree(dec); |
| 439 | return 0; | 437 | return 0; |
| 440 | } | 438 | } |
diff --git a/drivers/staging/go7007/wis-sony-tuner.c b/drivers/staging/go7007/wis-sony-tuner.c index b1013291190f..981c9b311b8b 100644 --- a/drivers/staging/go7007/wis-sony-tuner.c +++ b/drivers/staging/go7007/wis-sony-tuner.c | |||
| @@ -684,7 +684,6 @@ static int wis_sony_tuner_remove(struct i2c_client *client) | |||
| 684 | { | 684 | { |
| 685 | struct wis_sony_tuner *t = i2c_get_clientdata(client); | 685 | struct wis_sony_tuner *t = i2c_get_clientdata(client); |
| 686 | 686 | ||
| 687 | i2c_set_clientdata(client, NULL); | ||
| 688 | kfree(t); | 687 | kfree(t); |
| 689 | return 0; | 688 | return 0; |
| 690 | } | 689 | } |
diff --git a/drivers/staging/go7007/wis-tw2804.c b/drivers/staging/go7007/wis-tw2804.c index 315268d130dd..ee28a99dc388 100644 --- a/drivers/staging/go7007/wis-tw2804.c +++ b/drivers/staging/go7007/wis-tw2804.c | |||
| @@ -323,7 +323,6 @@ static int wis_tw2804_remove(struct i2c_client *client) | |||
| 323 | { | 323 | { |
| 324 | struct wis_tw2804 *dec = i2c_get_clientdata(client); | 324 | struct wis_tw2804 *dec = i2c_get_clientdata(client); |
| 325 | 325 | ||
| 326 | i2c_set_clientdata(client, NULL); | ||
| 327 | kfree(dec); | 326 | kfree(dec); |
| 328 | return 0; | 327 | return 0; |
| 329 | } | 328 | } |
diff --git a/drivers/staging/go7007/wis-tw9903.c b/drivers/staging/go7007/wis-tw9903.c index 2afea09091b9..80d47269b1c0 100644 --- a/drivers/staging/go7007/wis-tw9903.c +++ b/drivers/staging/go7007/wis-tw9903.c | |||
| @@ -294,7 +294,6 @@ static int wis_tw9903_probe(struct i2c_client *client, | |||
| 294 | 294 | ||
| 295 | if (write_regs(client, initial_registers) < 0) { | 295 | if (write_regs(client, initial_registers) < 0) { |
| 296 | printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); | 296 | printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); |
| 297 | i2c_set_clientdata(client, NULL); | ||
| 298 | kfree(dec); | 297 | kfree(dec); |
| 299 | return -ENODEV; | 298 | return -ENODEV; |
| 300 | } | 299 | } |
| @@ -306,7 +305,6 @@ static int wis_tw9903_remove(struct i2c_client *client) | |||
| 306 | { | 305 | { |
| 307 | struct wis_tw9903 *dec = i2c_get_clientdata(client); | 306 | struct wis_tw9903 *dec = i2c_get_clientdata(client); |
| 308 | 307 | ||
| 309 | i2c_set_clientdata(client, NULL); | ||
| 310 | kfree(dec); | 308 | kfree(dec); |
| 311 | return 0; | 309 | return 0; |
| 312 | } | 310 | } |
diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index 20e267448d1f..905f8560d31f 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c | |||
| @@ -1011,7 +1011,6 @@ error_put_reg: | |||
| 1011 | if (!IS_ERR(st->reg)) | 1011 | if (!IS_ERR(st->reg)) |
| 1012 | regulator_put(st->reg); | 1012 | regulator_put(st->reg); |
| 1013 | error_free_st: | 1013 | error_free_st: |
| 1014 | i2c_set_clientdata(client, NULL); | ||
| 1015 | kfree(st); | 1014 | kfree(st); |
| 1016 | 1015 | ||
| 1017 | error_ret: | 1016 | error_ret: |
| @@ -1030,7 +1029,6 @@ static int max1363_remove(struct i2c_client *client) | |||
| 1030 | regulator_disable(st->reg); | 1029 | regulator_disable(st->reg); |
| 1031 | regulator_put(st->reg); | 1030 | regulator_put(st->reg); |
| 1032 | } | 1031 | } |
| 1033 | i2c_set_clientdata(client, NULL); | ||
| 1034 | kfree(st); | 1032 | kfree(st); |
| 1035 | 1033 | ||
| 1036 | return 0; | 1034 | return 0; |
diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c index 43aaacff4e74..e4b0a5ef1c1f 100644 --- a/drivers/staging/iio/light/tsl2563.c +++ b/drivers/staging/iio/light/tsl2563.c | |||
| @@ -694,7 +694,6 @@ static int __devinit tsl2563_probe(struct i2c_client *client, | |||
| 694 | fail2: | 694 | fail2: |
| 695 | iio_device_unregister(chip->indio_dev); | 695 | iio_device_unregister(chip->indio_dev); |
| 696 | fail1: | 696 | fail1: |
| 697 | i2c_set_clientdata(client, NULL); | ||
| 698 | kfree(chip); | 697 | kfree(chip); |
| 699 | return err; | 698 | return err; |
| 700 | } | 699 | } |
| @@ -705,7 +704,6 @@ static int tsl2563_remove(struct i2c_client *client) | |||
| 705 | 704 | ||
| 706 | iio_device_unregister(chip->indio_dev); | 705 | iio_device_unregister(chip->indio_dev); |
| 707 | 706 | ||
| 708 | i2c_set_clientdata(client, NULL); | ||
| 709 | kfree(chip); | 707 | kfree(chip); |
| 710 | return 0; | 708 | return 0; |
| 711 | } | 709 | } |
diff --git a/drivers/video/backlight/adp8860_bl.c b/drivers/video/backlight/adp8860_bl.c index 921ca37398f3..3ec24609151e 100644 --- a/drivers/video/backlight/adp8860_bl.c +++ b/drivers/video/backlight/adp8860_bl.c | |||
| @@ -756,7 +756,6 @@ out: | |||
| 756 | out1: | 756 | out1: |
| 757 | backlight_device_unregister(bl); | 757 | backlight_device_unregister(bl); |
| 758 | out2: | 758 | out2: |
| 759 | i2c_set_clientdata(client, NULL); | ||
| 760 | kfree(data); | 759 | kfree(data); |
| 761 | 760 | ||
| 762 | return ret; | 761 | return ret; |
| @@ -776,7 +775,6 @@ static int __devexit adp8860_remove(struct i2c_client *client) | |||
| 776 | &adp8860_bl_attr_group); | 775 | &adp8860_bl_attr_group); |
| 777 | 776 | ||
| 778 | backlight_device_unregister(data->bl); | 777 | backlight_device_unregister(data->bl); |
| 779 | i2c_set_clientdata(client, NULL); | ||
| 780 | kfree(data); | 778 | kfree(data); |
| 781 | 779 | ||
| 782 | return 0; | 780 | return 0; |
diff --git a/drivers/video/backlight/tosa_bl.c b/drivers/video/backlight/tosa_bl.c index e03e60bbfd85..2a04b382ec48 100644 --- a/drivers/video/backlight/tosa_bl.c +++ b/drivers/video/backlight/tosa_bl.c | |||
| @@ -119,7 +119,6 @@ static int __devinit tosa_bl_probe(struct i2c_client *client, | |||
| 119 | 119 | ||
| 120 | err_reg: | 120 | err_reg: |
| 121 | data->bl = NULL; | 121 | data->bl = NULL; |
| 122 | i2c_set_clientdata(client, NULL); | ||
| 123 | err_gpio_dir: | 122 | err_gpio_dir: |
| 124 | gpio_free(TOSA_GPIO_BL_C20MA); | 123 | gpio_free(TOSA_GPIO_BL_C20MA); |
| 125 | err_gpio_bl: | 124 | err_gpio_bl: |
| @@ -133,7 +132,6 @@ static int __devexit tosa_bl_remove(struct i2c_client *client) | |||
| 133 | 132 | ||
| 134 | backlight_device_unregister(data->bl); | 133 | backlight_device_unregister(data->bl); |
| 135 | data->bl = NULL; | 134 | data->bl = NULL; |
| 136 | i2c_set_clientdata(client, NULL); | ||
| 137 | 135 | ||
| 138 | gpio_free(TOSA_GPIO_BL_C20MA); | 136 | gpio_free(TOSA_GPIO_BL_C20MA); |
| 139 | 137 | ||
