Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

* 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  i2c: Remove all i2c_set_clientdata(client, NULL) in drivers
  i2c/busses: Move two drivers to embedded section
  i2c: Rename i2c_check_addr to i2c_check_addr_busy
  i2c: Document reserved I2C addresses
  i2c: Check for address validity on client registration
  i2c: Share the I2C device presence detection code
  Documentation/i2c: Checkpatch cleanup
This commit is contained in:
Linus Torvalds 2010-06-03 15:44:43 -07:00
Родитель 95619be590 fbae3fb154
Коммит ceadda057c
85 изменённых файлов: 190 добавлений и 286 удалений

Просмотреть файл

@ -6,12 +6,12 @@ Supported adapters:
http://www.ali.com.tw/eng/support/datasheet_request.php http://www.ali.com.tw/eng/support/datasheet_request.php
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>, Philip Edelbrock <phil@netroedge.com>,
Mark D. Studebaker <mdsxyz123@yahoo.com>, Mark D. Studebaker <mdsxyz123@yahoo.com>,
Dan Eaton <dan.eaton@rocketlogix.com>, Dan Eaton <dan.eaton@rocketlogix.com>,
Stephen Rousset<stephen.rousset@rocketlogix.com> Stephen Rousset<stephen.rousset@rocketlogix.com>
Description Description
----------- -----------

Просмотреть файл

@ -18,7 +18,7 @@ For an overview of these chips see http://www.acerlabs.com
The M1563 southbridge is deceptively similar to the M1533, with a few The M1563 southbridge is deceptively similar to the M1533, with a few
notable exceptions. One of those happens to be the fact they upgraded the notable exceptions. One of those happens to be the fact they upgraded the
i2c core to be SMBus 2.0 compliant, and happens to be almost identical to i2c core to be SMBus 2.0 compliant, and happens to be almost identical to
the i2c controller found in the Intel 801 south bridges. the i2c controller found in the Intel 801 south bridges.
Features Features
-------- --------

Просмотреть файл

@ -6,8 +6,8 @@ Supported adapters:
http://www.ali.com.tw/eng/support/datasheet_request.php http://www.ali.com.tw/eng/support/datasheet_request.php
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>, Philip Edelbrock <phil@netroedge.com>,
Mark D. Studebaker <mdsxyz123@yahoo.com> Mark D. Studebaker <mdsxyz123@yahoo.com>
Module Parameters Module Parameters
@ -40,10 +40,10 @@ M1541 and M1543C South Bridges.
The M1543C is a South bridge for desktop systems. The M1543C is a South bridge for desktop systems.
The M1541 is a South bridge for portable systems. The M1541 is a South bridge for portable systems.
They are part of the following ALI chipsets: They are part of the following ALI chipsets:
* "Aladdin Pro 2" includes the M1621 Slot 1 North bridge with AGP and * "Aladdin Pro 2" includes the M1621 Slot 1 North bridge with AGP and
100MHz CPU Front Side bus 100MHz CPU Front Side bus
* "Aladdin V" includes the M1541 Socket 7 North bridge with AGP and 100MHz * "Aladdin V" includes the M1541 Socket 7 North bridge with AGP and 100MHz
CPU Front Side bus CPU Front Side bus
Some Aladdin V motherboards: Some Aladdin V motherboards:
Asus P5A Asus P5A
@ -77,7 +77,7 @@ output of lspci will show something similar to the following:
** then run lspci. ** then run lspci.
** If you see the 1533 and 5229 devices but NOT the 7101 device, ** If you see the 1533 and 5229 devices but NOT the 7101 device,
** then you must enable ACPI, the PMU, SMB, or something similar ** then you must enable ACPI, the PMU, SMB, or something similar
** in the BIOS. ** in the BIOS.
** The driver won't work if it can't find the M7101 device. ** The driver won't work if it can't find the M7101 device.
The SMB controller is part of the M7101 device, which is an ACPI-compliant 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
just enable the SMB alone. The SMB and the ACPI have separate I/O spaces. just enable the SMB alone. The SMB and the ACPI have separate I/O spaces.
We make sure that the SMB is enabled. We leave the ACPI alone. We make sure that the SMB is enabled. We leave the ACPI alone.
Features Features
-------- --------
This driver controls the SMB Host only. The SMB Slave This driver controls the SMB Host only. The SMB Slave
controller on the M15X3 is not enabled. This driver does not use controller on the M15X3 is not enabled. This driver does not use

Просмотреть файл

@ -1,10 +1,10 @@
Kernel driver i2c-pca-isa Kernel driver i2c-pca-isa
Supported adapters: Supported adapters:
This driver supports ISA boards using the Philips PCA 9564 This driver supports ISA boards using the Philips PCA 9564
Parallel bus to I2C bus controller Parallel bus to I2C bus controller
Author: Ian Campbell <icampbell@arcom.com>, Arcom Control Systems Author: Ian Campbell <icampbell@arcom.com>, Arcom Control Systems
Module Parameters Module Parameters
----------------- -----------------
@ -12,12 +12,12 @@ Module Parameters
* base int * base int
I/O base address I/O base address
* irq int * irq int
IRQ interrupt IRQ interrupt
* clock int * clock int
Clock rate as described in table 1 of PCA9564 datasheet Clock rate as described in table 1 of PCA9564 datasheet
Description Description
----------- -----------
This driver supports ISA boards using the Philips PCA 9564 This driver supports ISA boards using the Philips PCA 9564
Parallel bus to I2C bus controller Parallel bus to I2C bus controller

Просмотреть файл

@ -1,41 +1,41 @@
Kernel driver i2c-sis5595 Kernel driver i2c-sis5595
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
Mark D. Studebaker <mdsxyz123@yahoo.com>, Mark D. Studebaker <mdsxyz123@yahoo.com>,
Philip Edelbrock <phil@netroedge.com> Philip Edelbrock <phil@netroedge.com>
Supported adapters: Supported adapters:
* Silicon Integrated Systems Corp. SiS5595 Southbridge * Silicon Integrated Systems Corp. SiS5595 Southbridge
Datasheet: Publicly available at the Silicon Integrated Systems Corp. site. Datasheet: Publicly available at the Silicon Integrated Systems Corp. site.
Note: all have mfr. ID 0x1039. Note: all have mfr. ID 0x1039.
SUPPORTED PCI ID SUPPORTED PCI ID
5595 0008 5595 0008
Note: these chips contain a 0008 device which is incompatible with the Note: these chips contain a 0008 device which is incompatible with the
5595. We recognize these by the presence of the listed 5595. We recognize these by the presence of the listed
"blacklist" PCI ID and refuse to load. "blacklist" PCI ID and refuse to load.
NOT SUPPORTED PCI ID BLACKLIST PCI ID NOT SUPPORTED PCI ID BLACKLIST PCI ID
540 0008 0540 540 0008 0540
550 0008 0550 550 0008 0550
5513 0008 5511 5513 0008 5511
5581 0008 5597 5581 0008 5597
5582 0008 5597 5582 0008 5597
5597 0008 5597 5597 0008 5597
5598 0008 5597/5598 5598 0008 5597/5598
630 0008 0630 630 0008 0630
645 0008 0645 645 0008 0645
646 0008 0646 646 0008 0646
648 0008 0648 648 0008 0648
650 0008 0650 650 0008 0650
651 0008 0651 651 0008 0651
730 0008 0730 730 0008 0730
735 0008 0735 735 0008 0735
745 0008 0745 745 0008 0745
746 0008 0746 746 0008 0746
Module Parameters Module Parameters
----------------- -----------------

Просмотреть файл

@ -14,9 +14,9 @@ Module Parameters
* force = [1|0] Forcibly enable the SIS630. DANGEROUS! * force = [1|0] Forcibly enable the SIS630. DANGEROUS!
This can be interesting for chipsets not named This can be interesting for chipsets not named
above to check if it works for you chipset, but DANGEROUS! above to check if it works for you chipset, but DANGEROUS!
* high_clock = [1|0] Forcibly set Host Master Clock to 56KHz (default, * high_clock = [1|0] Forcibly set Host Master Clock to 56KHz (default,
what your BIOS use). DANGEROUS! This should be a bit what your BIOS use). DANGEROUS! This should be a bit
faster, but freeze some systems (i.e. my Laptop). faster, but freeze some systems (i.e. my Laptop).
@ -44,6 +44,6 @@ Philip Edelbrock <phil@netroedge.com>
- testing SiS730 support - testing SiS730 support
Mark M. Hoffman <mhoffman@lightlink.com> Mark M. Hoffman <mhoffman@lightlink.com>
- bug fixes - bug fixes
To anyone else which I forgot here ;), thanks! To anyone else which I forgot here ;), thanks!

Просмотреть файл

@ -1,17 +1,17 @@
The I2C protocol knows about two kinds of device addresses: normal 7 bit The I2C protocol knows about two kinds of device addresses: normal 7 bit
addresses, and an extended set of 10 bit addresses. The sets of addresses addresses, and an extended set of 10 bit addresses. The sets of addresses
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
address 0x10 (though a single device could respond to both of them). You address 0x10 (though a single device could respond to both of them). You
select a 10 bit address by adding an extra byte after the address select a 10 bit address by adding an extra byte after the address
byte: byte:
S Addr7 Rd/Wr .... S Addr7 Rd/Wr ....
becomes becomes
S 11110 Addr10 Rd/Wr S 11110 Addr10 Rd/Wr
S is the start bit, Rd/Wr the read/write bit, and if you count the number S is the start bit, Rd/Wr the read/write bit, and if you count the number
of bits, you will see the there are 8 after the S bit for 7 bit addresses, of bits, you will see the there are 8 after the S bit for 7 bit addresses,
and 16 after the S bit for 10 bit addresses. and 16 after the S bit for 10 bit addresses.
WARNING! The current 10 bit address support is EXPERIMENTAL. There are WARNING! The current 10 bit address support is EXPERIMENTAL. There are
several places in the code that will cause SEVERE PROBLEMS with 10 bit several places in the code that will cause SEVERE PROBLEMS with 10 bit
addresses, even though there is some basic handling and hooks. Also, addresses, even though there is some basic handling and hooks. Also,
almost no supported adapter handles the 10 bit addresses correctly. almost no supported adapter handles the 10 bit addresses correctly.

Просмотреть файл

@ -316,7 +316,6 @@ static int __devinit adt7411_probe(struct i2c_client *client,
exit_remove: exit_remove:
sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp);
exit_free: exit_free:
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return ret; return ret;
} }
@ -327,7 +326,6 @@ static int __devexit adt7411_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp);
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;
} }

Просмотреть файл

@ -1141,7 +1141,6 @@ exit_remove:
&(asc7621_params[i].sda.dev_attr)); &(asc7621_params[i].sda.dev_attr));
} }
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return err; return err;
} }
@ -1196,7 +1195,6 @@ static int asc7621_remove(struct i2c_client *client)
&(asc7621_params[i].sda.dev_attr)); &(asc7621_params[i].sda.dev_attr));
} }
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;
} }

Просмотреть файл

@ -662,7 +662,6 @@ exit_remove:
sysfs_remove_group(&client->dev.kobj, &f75375_group); sysfs_remove_group(&client->dev.kobj, &f75375_group);
exit_free: exit_free:
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return err; return err;
} }
@ -672,7 +671,6 @@ static int f75375_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &f75375_group); sysfs_remove_group(&client->dev.kobj, &f75375_group);
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -236,7 +236,6 @@ error_hwmon_device_register:
sysfs_remove_group(&client->dev.kobj, &g760a_group); sysfs_remove_group(&client->dev.kobj, &g760a_group);
error_sysfs_create_group: error_sysfs_create_group:
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return err; return err;
} }
@ -247,7 +246,6 @@ static int g760a_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &g760a_group); sysfs_remove_group(&client->dev.kobj, &g760a_group);
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -136,7 +136,6 @@ static int lm73_remove(struct i2c_client *client)
hwmon_device_unregister(hwmon_dev); hwmon_device_unregister(hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &lm73_group); sysfs_remove_group(&client->dev.kobj, &lm73_group);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -192,7 +192,6 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
exit_remove: exit_remove:
sysfs_remove_group(&client->dev.kobj, &lm75_group); sysfs_remove_group(&client->dev.kobj, &lm75_group);
exit_free: exit_free:
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return status; return status;
} }
@ -204,7 +203,6 @@ static int lm75_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &lm75_group); sysfs_remove_group(&client->dev.kobj, &lm75_group);
lm75_write_value(client, LM75_REG_CONF, data->orig_conf); lm75_write_value(client, LM75_REG_CONF, data->orig_conf);
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;
} }

Просмотреть файл

@ -399,7 +399,6 @@ static int lm95241_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &lm95241_group); sysfs_remove_group(&client->dev.kobj, &lm95241_group);
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;
} }

Просмотреть файл

@ -224,7 +224,6 @@ fail_remove_sysfs:
fail_restore_config: fail_restore_config:
tmp102_write_reg(client, TMP102_CONF_REG, tmp102->config_orig); tmp102_write_reg(client, TMP102_CONF_REG, tmp102->config_orig);
fail_free: fail_free:
i2c_set_clientdata(client, NULL);
kfree(tmp102); kfree(tmp102);
return status; return status;
@ -247,7 +246,6 @@ static int __devexit tmp102_remove(struct i2c_client *client)
config | TMP102_CONF_SD); config | TMP102_CONF_SD);
} }
i2c_set_clientdata(client, NULL);
kfree(tmp102); kfree(tmp102);
return 0; return 0;

Просмотреть файл

@ -295,7 +295,6 @@ exit_remove:
sysfs_remove_group(&client->dev.kobj, &tmp421_group); sysfs_remove_group(&client->dev.kobj, &tmp421_group);
exit_free: exit_free:
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return err; return err;
@ -308,7 +307,6 @@ static int tmp421_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &tmp421_group); sysfs_remove_group(&client->dev.kobj, &tmp421_group);
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;

Просмотреть файл

@ -1197,7 +1197,6 @@ ERROR4:
if (data->lm75[1]) if (data->lm75[1])
i2c_unregister_device(data->lm75[1]); i2c_unregister_device(data->lm75[1]);
ERROR3: ERROR3:
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
ERROR1: ERROR1:
return err; return err;
@ -1219,7 +1218,6 @@ w83781d_remove(struct i2c_client *client)
if (data->lm75[1]) if (data->lm75[1])
i2c_unregister_device(data->lm75[1]); i2c_unregister_device(data->lm75[1]);
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;

Просмотреть файл

@ -475,6 +475,26 @@ config I2C_PASEMI
help help
Supports the PA Semi PWRficient on-chip SMBus interfaces. Supports the PA Semi PWRficient on-chip SMBus interfaces.
config I2C_PCA_PLATFORM
tristate "PCA9564/PCA9665 as platform device"
select I2C_ALGOPCA
default n
help
This driver supports a memory mapped Philips PCA9564/PCA9665
parallel bus to I2C bus controller.
This driver can also be built as a module. If so, the module
will be called i2c-pca-platform.
config I2C_PMCMSP
tristate "PMC MSP I2C TWI Controller"
depends on PMC_MSP
help
This driver supports the PMC TWI controller on MSP devices.
This driver can also be built as module. If so, the module
will be called i2c-pmcmsp.
config I2C_PNX config I2C_PNX
tristate "I2C bus support for Philips PNX targets" tristate "I2C bus support for Philips PNX targets"
depends on ARCH_PNX4008 depends on ARCH_PNX4008
@ -711,26 +731,6 @@ config I2C_PCA_ISA
delays when I2C/SMBus chip drivers are loaded (e.g. at boot delays when I2C/SMBus chip drivers are loaded (e.g. at boot
time). If unsure, say N. time). If unsure, say N.
config I2C_PCA_PLATFORM
tristate "PCA9564/PCA9665 as platform device"
select I2C_ALGOPCA
default n
help
This driver supports a memory mapped Philips PCA9564/PCA9665
parallel bus to I2C bus controller.
This driver can also be built as a module. If so, the module
will be called i2c-pca-platform.
config I2C_PMCMSP
tristate "PMC MSP I2C TWI Controller"
depends on PMC_MSP
help
This driver supports the PMC TWI controller on MSP devices.
This driver can also be built as module. If so, the module
will be called i2c-pmcmsp.
config I2C_SIBYTE config I2C_SIBYTE
tristate "SiByte SMBus interface" tristate "SiByte SMBus interface"
depends on SIBYTE_SB1xxx_SOC depends on SIBYTE_SB1xxx_SOC

Просмотреть файл

@ -27,7 +27,7 @@ obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o
obj-$(CONFIG_I2C_HYDRA) += i2c-hydra.o obj-$(CONFIG_I2C_HYDRA) += i2c-hydra.o
obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o
# Embebbed system I2C/SMBus host controller drivers # Embedded system I2C/SMBus host controller drivers
obj-$(CONFIG_I2C_AT91) += i2c-at91.o obj-$(CONFIG_I2C_AT91) += i2c-at91.o
obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o
obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o
@ -46,6 +46,8 @@ obj-$(CONFIG_I2C_NOMADIK) += i2c-nomadik.o
obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o
obj-$(CONFIG_I2C_OMAP) += i2c-omap.o obj-$(CONFIG_I2C_OMAP) += i2c-omap.o
obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o
obj-$(CONFIG_I2C_PCA_PLATFORM) += i2c-pca-platform.o
obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o
obj-$(CONFIG_I2C_PNX) += i2c-pnx.o obj-$(CONFIG_I2C_PNX) += i2c-pnx.o
obj-$(CONFIG_I2C_PXA) += i2c-pxa.o obj-$(CONFIG_I2C_PXA) += i2c-pxa.o
obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o
@ -68,8 +70,6 @@ obj-$(CONFIG_I2C_TINY_USB) += i2c-tiny-usb.o
obj-$(CONFIG_I2C_ACORN) += i2c-acorn.o obj-$(CONFIG_I2C_ACORN) += i2c-acorn.o
obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o
obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o
obj-$(CONFIG_I2C_PCA_PLATFORM) += i2c-pca-platform.o
obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o
obj-$(CONFIG_I2C_SIBYTE) += i2c-sibyte.o obj-$(CONFIG_I2C_SIBYTE) += i2c-sibyte.o
obj-$(CONFIG_I2C_STUB) += i2c-stub.o obj-$(CONFIG_I2C_STUB) += i2c-stub.o
obj-$(CONFIG_SCx200_ACB) += scx200_acb.o obj-$(CONFIG_SCx200_ACB) += scx200_acb.o

Просмотреть файл

@ -47,7 +47,6 @@ static DEFINE_MUTEX(core_lock);
static DEFINE_IDR(i2c_adapter_idr); static DEFINE_IDR(i2c_adapter_idr);
static struct device_type i2c_client_type; static struct device_type i2c_client_type;
static int i2c_check_addr(struct i2c_adapter *adapter, int addr);
static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver); static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
@ -371,6 +370,59 @@ struct i2c_client *i2c_verify_client(struct device *dev)
EXPORT_SYMBOL(i2c_verify_client); EXPORT_SYMBOL(i2c_verify_client);
/* This is a permissive address validity check, I2C address map constraints
* are purposedly not enforced, except for the general call address. */
static int i2c_check_client_addr_validity(const struct i2c_client *client)
{
if (client->flags & I2C_CLIENT_TEN) {
/* 10-bit address, all values are valid */
if (client->addr > 0x3ff)
return -EINVAL;
} else {
/* 7-bit address, reject the general call address */
if (client->addr == 0x00 || client->addr > 0x7f)
return -EINVAL;
}
return 0;
}
/* And this is a strict address validity check, used when probing. If a
* device uses a reserved address, then it shouldn't be probed. 7-bit
* addressing is assumed, 10-bit address devices are rare and should be
* explicitly enumerated. */
static int i2c_check_addr_validity(unsigned short addr)
{
/*
* Reserved addresses per I2C specification:
* 0x00 General call address / START byte
* 0x01 CBUS address
* 0x02 Reserved for different bus format
* 0x03 Reserved for future purposes
* 0x04-0x07 Hs-mode master code
* 0x78-0x7b 10-bit slave addressing
* 0x7c-0x7f Reserved for future purposes
*/
if (addr < 0x08 || addr > 0x77)
return -EINVAL;
return 0;
}
static int __i2c_check_addr_busy(struct device *dev, void *addrp)
{
struct i2c_client *client = i2c_verify_client(dev);
int addr = *(int *)addrp;
if (client && client->addr == addr)
return -EBUSY;
return 0;
}
static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
{
return device_for_each_child(&adapter->dev, &addr,
__i2c_check_addr_busy);
}
/** /**
* i2c_new_device - instantiate an i2c device * i2c_new_device - instantiate an i2c device
* @adap: the adapter managing the device * @adap: the adapter managing the device
@ -410,8 +462,16 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
strlcpy(client->name, info->type, sizeof(client->name)); strlcpy(client->name, info->type, sizeof(client->name));
/* Check for address validity */
status = i2c_check_client_addr_validity(client);
if (status) {
dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
goto out_err_silent;
}
/* Check for address business */ /* Check for address business */
status = i2c_check_addr(adap, client->addr); status = i2c_check_addr_busy(adap, client->addr);
if (status) if (status)
goto out_err; goto out_err;
@ -436,6 +496,7 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
out_err: out_err:
dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x " dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x "
"(%d)\n", client->name, client->addr, status); "(%d)\n", client->name, client->addr, status);
out_err_silent:
kfree(client); kfree(client);
return NULL; return NULL;
} }
@ -561,15 +622,9 @@ i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
return -EINVAL; return -EINVAL;
} }
if (info.addr < 0x03 || info.addr > 0x77) {
dev_err(dev, "%s: Invalid I2C address 0x%hx\n", "new_device",
info.addr);
return -EINVAL;
}
client = i2c_new_device(adap, &info); client = i2c_new_device(adap, &info);
if (!client) if (!client)
return -EEXIST; return -EINVAL;
/* Keep track of the added device */ /* Keep track of the added device */
i2c_lock_adapter(adap); i2c_lock_adapter(adap);
@ -1024,21 +1079,6 @@ EXPORT_SYMBOL(i2c_del_driver);
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
static int __i2c_check_addr(struct device *dev, void *addrp)
{
struct i2c_client *client = i2c_verify_client(dev);
int addr = *(int *)addrp;
if (client && client->addr == addr)
return -EBUSY;
return 0;
}
static int i2c_check_addr(struct i2c_adapter *adapter, int addr)
{
return device_for_each_child(&adapter->dev, &addr, __i2c_check_addr);
}
/** /**
* i2c_use_client - increments the reference count of the i2c client structure * i2c_use_client - increments the reference count of the i2c client structure
* @client: the client being referenced * @client: the client being referenced
@ -1277,6 +1317,41 @@ EXPORT_SYMBOL(i2c_master_recv);
* ---------------------------------------------------- * ----------------------------------------------------
*/ */
/*
* Legacy default probe function, mostly relevant for SMBus. The default
* probe method is a quick write, but it is known to corrupt the 24RF08
* EEPROMs due to a state machine bug, and could also irreversibly
* write-protect some EEPROMs, so for address ranges 0x30-0x37 and 0x50-0x5f,
* we use a short byte read instead. Also, some bus drivers don't implement
* quick write, so we fallback to a byte read in that case too.
* On x86, there is another special case for FSC hardware monitoring chips,
* which want regular byte reads (address 0x73.) Fortunately, these are the
* only known chips using this I2C address on PC hardware.
* Returns 1 if probe succeeded, 0 if not.
*/
static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
{
int err;
union i2c_smbus_data dummy;
#ifdef CONFIG_X86
if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
&& i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
I2C_SMBUS_BYTE_DATA, &dummy);
else
#endif
if ((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50
|| !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
I2C_SMBUS_BYTE, &dummy);
else
err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
I2C_SMBUS_QUICK, NULL);
return err >= 0;
}
static int i2c_detect_address(struct i2c_client *temp_client, static int i2c_detect_address(struct i2c_client *temp_client,
struct i2c_driver *driver) struct i2c_driver *driver)
{ {
@ -1286,34 +1361,20 @@ static int i2c_detect_address(struct i2c_client *temp_client,
int err; int err;
/* Make sure the address is valid */ /* Make sure the address is valid */
if (addr < 0x03 || addr > 0x77) { err = i2c_check_addr_validity(addr);
if (err) {
dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n", dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
addr); addr);
return -EINVAL; return err;
} }
/* Skip if already in use */ /* Skip if already in use */
if (i2c_check_addr(adapter, addr)) if (i2c_check_addr_busy(adapter, addr))
return 0; return 0;
/* Make sure there is something at this address */ /* Make sure there is something at this address */
if (addr == 0x73 && (adapter->class & I2C_CLASS_HWMON)) { if (!i2c_default_probe(adapter, addr))
/* Special probe for FSC hwmon chips */ return 0;
union i2c_smbus_data dummy;
if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_READ, 0,
I2C_SMBUS_BYTE_DATA, &dummy) < 0)
return 0;
} else {
if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0,
I2C_SMBUS_QUICK, NULL) < 0)
return 0;
/* Prevent 24RF08 corruption */
if ((addr & ~0x0f) == 0x50)
i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0,
I2C_SMBUS_QUICK, NULL);
}
/* Finally call the custom detection function */ /* Finally call the custom detection function */
memset(&info, 0, sizeof(struct i2c_board_info)); memset(&info, 0, sizeof(struct i2c_board_info));
@ -1407,42 +1468,22 @@ i2c_new_probed_device(struct i2c_adapter *adap,
for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) { for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
/* Check address validity */ /* Check address validity */
if (addr_list[i] < 0x03 || addr_list[i] > 0x77) { if (i2c_check_addr_validity(addr_list[i]) < 0) {
dev_warn(&adap->dev, "Invalid 7-bit address " dev_warn(&adap->dev, "Invalid 7-bit address "
"0x%02x\n", addr_list[i]); "0x%02x\n", addr_list[i]);
continue; continue;
} }
/* Check address availability */ /* Check address availability */
if (i2c_check_addr(adap, addr_list[i])) { if (i2c_check_addr_busy(adap, addr_list[i])) {
dev_dbg(&adap->dev, "Address 0x%02x already in " dev_dbg(&adap->dev, "Address 0x%02x already in "
"use, not probing\n", addr_list[i]); "use, not probing\n", addr_list[i]);
continue; continue;
} }
/* Test address responsiveness /* Test address responsiveness */
The default probe method is a quick write, but it is known if (i2c_default_probe(adap, addr_list[i]))
to corrupt the 24RF08 EEPROMs due to a state machine bug, break;
and could also irreversibly write-protect some EEPROMs, so
for address ranges 0x30-0x37 and 0x50-0x5f, we use a byte
read instead. Also, some bus drivers don't implement
quick write, so we fallback to a byte read it that case
too. */
if ((addr_list[i] & ~0x07) == 0x30
|| (addr_list[i] & ~0x0f) == 0x50
|| !i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) {
union i2c_smbus_data data;
if (i2c_smbus_xfer(adap, addr_list[i], 0,
I2C_SMBUS_READ, 0,
I2C_SMBUS_BYTE, &data) >= 0)
break;
} else {
if (i2c_smbus_xfer(adap, addr_list[i], 0,
I2C_SMBUS_WRITE, 0,
I2C_SMBUS_QUICK, NULL) >= 0)
break;
}
} }
if (addr_list[i] == I2C_CLIENT_END) { if (addr_list[i] == I2C_CLIENT_END) {

Просмотреть файл

@ -173,7 +173,6 @@ static int smbalert_remove(struct i2c_client *ara)
cancel_work_sync(&alert->alert); cancel_work_sync(&alert->alert);
i2c_set_clientdata(ara, NULL);
kfree(alert); kfree(alert);
return 0; return 0;
} }

Просмотреть файл

@ -287,7 +287,6 @@ static int __devexit adp5588_remove(struct i2c_client *client)
free_irq(client->irq, kpad); free_irq(client->irq, kpad);
cancel_delayed_work_sync(&kpad->work); cancel_delayed_work_sync(&kpad->work);
input_unregister_device(kpad->input); input_unregister_device(kpad->input);
i2c_set_clientdata(client, NULL);
kfree(kpad); kfree(kpad);
return 0; return 0;

Просмотреть файл

@ -778,8 +778,6 @@ static int __devexit lm8323_remove(struct i2c_client *client)
struct lm8323_chip *lm = i2c_get_clientdata(client); struct lm8323_chip *lm = i2c_get_clientdata(client);
int i; int i;
i2c_set_clientdata(client, NULL);
disable_irq_wake(client->irq); disable_irq_wake(client->irq);
free_irq(client->irq, lm); free_irq(client->irq, lm);
cancel_work_sync(&lm->work); cancel_work_sync(&lm->work);

Просмотреть файл

@ -265,7 +265,6 @@ static int __devexit max7359_remove(struct i2c_client *client)
free_irq(client->irq, keypad); free_irq(client->irq, keypad);
input_unregister_device(keypad->input_dev); input_unregister_device(keypad->input_dev);
i2c_set_clientdata(client, NULL);
kfree(keypad); kfree(keypad);
return 0; return 0;

Просмотреть файл

@ -358,7 +358,6 @@ static int __devexit qt2160_remove(struct i2c_client *client)
input_unregister_device(qt2160->input); input_unregister_device(qt2160->input);
kfree(qt2160); kfree(qt2160);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -316,8 +316,6 @@ static int __devexit tca6416_keypad_remove(struct i2c_client *client)
input_unregister_device(chip->input); input_unregister_device(chip->input);
kfree(chip); kfree(chip);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -97,7 +97,6 @@ static int __devexit ad714x_i2c_remove(struct i2c_client *client)
struct ad714x_chip *chip = i2c_get_clientdata(client); struct ad714x_chip *chip = i2c_get_clientdata(client);
ad714x_remove(chip); ad714x_remove(chip);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -168,8 +168,6 @@ static int __devexit pcf8574_kp_remove(struct i2c_client *client)
input_unregister_device(lp->idev); input_unregister_device(lp->idev);
kfree(lp); kfree(lp);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -613,7 +613,6 @@ static int __devexit synaptics_i2c_remove(struct i2c_client *client)
free_irq(client->irq, touch); free_irq(client->irq, touch);
input_unregister_device(touch->input); input_unregister_device(touch->input);
i2c_set_clientdata(client, NULL);
kfree(touch); kfree(touch);
return 0; return 0;

Просмотреть файл

@ -812,10 +812,8 @@ static int __devinit ad7879_probe(struct i2c_client *client,
ts->bus = client; ts->bus = client;
error = ad7879_construct(client, ts); error = ad7879_construct(client, ts);
if (error) { if (error)
i2c_set_clientdata(client, NULL);
kfree(ts); kfree(ts);
}
return error; return error;
} }
@ -825,7 +823,6 @@ static int __devexit ad7879_remove(struct i2c_client *client)
struct ad7879 *ts = dev_get_drvdata(&client->dev); struct ad7879 *ts = dev_get_drvdata(&client->dev);
ad7879_destroy(client, ts); ad7879_destroy(client, ts);
i2c_set_clientdata(client, NULL);
kfree(ts); kfree(ts);
return 0; return 0;

Просмотреть файл

@ -238,7 +238,6 @@ err2:
input = NULL; /* so we dont try to free it below */ input = NULL; /* so we dont try to free it below */
err1: err1:
input_free_device(input); input_free_device(input);
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
err0: err0:
return err; return err;
@ -256,7 +255,6 @@ static int __devexit eeti_ts_remove(struct i2c_client *client)
enable_irq(priv->irq); enable_irq(priv->irq);
input_unregister_device(priv->input); input_unregister_device(priv->input);
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
return 0; return 0;

Просмотреть файл

@ -256,7 +256,6 @@ static int __devexit mcs5000_ts_remove(struct i2c_client *client)
free_irq(client->irq, data); free_irq(client->irq, data);
input_unregister_device(data->input_dev); input_unregister_device(data->input_dev);
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -347,8 +347,6 @@ static int __devexit tsc2007_remove(struct i2c_client *client)
struct tsc2007 *ts = i2c_get_clientdata(client); struct tsc2007 *ts = i2c_get_clientdata(client);
struct tsc2007_platform_data *pdata = client->dev.platform_data; struct tsc2007_platform_data *pdata = client->dev.platform_data;
i2c_set_clientdata(client, NULL);
tsc2007_free_irq(ts); tsc2007_free_irq(ts);
if (pdata->exit_platform_hw) if (pdata->exit_platform_hw)

Просмотреть файл

@ -742,7 +742,6 @@ failed_unregister_dev_file:
for (i--; i >= 0; i--) for (i--; i >= 0; i--)
device_remove_file(&led->client->dev, bd2802_attributes[i]); device_remove_file(&led->client->dev, bd2802_attributes[i]);
failed_free: failed_free:
i2c_set_clientdata(client, NULL);
kfree(led); kfree(led);
return ret; return ret;
@ -759,7 +758,6 @@ static int __exit bd2802_remove(struct i2c_client *client)
bd2802_disable_adv_conf(led); bd2802_disable_adv_conf(led);
for (i = 0; i < ARRAY_SIZE(bd2802_attributes); i++) for (i = 0; i < ARRAY_SIZE(bd2802_attributes); i++)
device_remove_file(&led->client->dev, bd2802_attributes[i]); device_remove_file(&led->client->dev, bd2802_attributes[i]);
i2c_set_clientdata(client, NULL);
kfree(led); kfree(led);
return 0; return 0;

Просмотреть файл

@ -432,7 +432,6 @@ static int __devexit lp3944_remove(struct i2c_client *client)
} }
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -320,10 +320,8 @@ static int pca9532_probe(struct i2c_client *client,
mutex_init(&data->update_lock); mutex_init(&data->update_lock);
err = pca9532_configure(client, data, pca9532_pdata); err = pca9532_configure(client, data, pca9532_pdata);
if (err) { if (err)
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
}
return err; return err;
} }
@ -351,7 +349,6 @@ static int pca9532_remove(struct i2c_client *client)
} }
kfree(data); kfree(data);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -342,7 +342,6 @@ exit:
} }
kfree(pca955x); kfree(pca955x);
i2c_set_clientdata(client, NULL);
return err; return err;
} }
@ -358,7 +357,6 @@ static int __devexit pca955x_remove(struct i2c_client *client)
} }
kfree(pca955x); kfree(pca955x);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -182,7 +182,6 @@ remove_thermostat(struct i2c_client *client)
thermostat = NULL; thermostat = NULL;
i2c_set_clientdata(client, NULL);
kfree(th); kfree(th);
return 0; return 0;
@ -400,7 +399,6 @@ static int probe_thermostat(struct i2c_client *client,
rc = read_reg(th, CONFIG_REG); rc = read_reg(th, CONFIG_REG);
if (rc < 0) { if (rc < 0) {
dev_err(&client->dev, "Thermostat failed to read config!\n"); dev_err(&client->dev, "Thermostat failed to read config!\n");
i2c_set_clientdata(client, NULL);
kfree(th); kfree(th);
return -ENODEV; return -ENODEV;
} }

Просмотреть файл

@ -107,10 +107,8 @@ static int wf_lm75_probe(struct i2c_client *client,
i2c_set_clientdata(client, lm); i2c_set_clientdata(client, lm);
rc = wf_register_sensor(&lm->sens); rc = wf_register_sensor(&lm->sens);
if (rc) { if (rc)
i2c_set_clientdata(client, NULL);
kfree(lm); kfree(lm);
}
return rc; return rc;
} }
@ -216,7 +214,6 @@ static int wf_lm75_remove(struct i2c_client *client)
/* release sensor */ /* release sensor */
wf_unregister_sensor(&lm->sens); wf_unregister_sensor(&lm->sens);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -81,7 +81,6 @@ static int wf_max6690_probe(struct i2c_client *client,
rc = wf_register_sensor(&max->sens); rc = wf_register_sensor(&max->sens);
if (rc) { if (rc) {
i2c_set_clientdata(client, NULL);
kfree(max); kfree(max);
} }

Просмотреть файл

@ -376,7 +376,6 @@ static int wf_sat_remove(struct i2c_client *client)
/* XXX TODO */ /* XXX TODO */
sat->i2c = NULL; sat->i2c = NULL;
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -482,7 +482,6 @@ static __devexit int si470x_i2c_remove(struct i2c_client *client)
cancel_work_sync(&radio->radio_work); cancel_work_sync(&radio->radio_work);
video_unregister_device(radio->videodev); video_unregister_device(radio->videodev);
kfree(radio); kfree(radio);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -785,7 +785,6 @@ static int mt9m001_probe(struct i2c_client *client,
ret = mt9m001_video_probe(icd, client); ret = mt9m001_video_probe(icd, client);
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(mt9m001); kfree(mt9m001);
} }
@ -799,7 +798,6 @@ static int mt9m001_remove(struct i2c_client *client)
icd->ops = NULL; icd->ops = NULL;
mt9m001_video_remove(icd); mt9m001_video_remove(icd);
i2c_set_clientdata(client, NULL);
client->driver = NULL; client->driver = NULL;
kfree(mt9m001); kfree(mt9m001);

Просмотреть файл

@ -1068,7 +1068,6 @@ static int mt9m111_probe(struct i2c_client *client,
ret = mt9m111_video_probe(icd, client); ret = mt9m111_video_probe(icd, client);
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(mt9m111); kfree(mt9m111);
} }
@ -1081,7 +1080,6 @@ static int mt9m111_remove(struct i2c_client *client)
struct soc_camera_device *icd = client->dev.platform_data; struct soc_camera_device *icd = client->dev.platform_data;
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
client->driver = NULL; client->driver = NULL;
kfree(mt9m111); kfree(mt9m111);

Просмотреть файл

@ -883,7 +883,6 @@ static int mt9t031_probe(struct i2c_client *client,
if (ret) { if (ret) {
if (icd) if (icd)
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(mt9t031); kfree(mt9t031);
} }
@ -897,7 +896,6 @@ static int mt9t031_remove(struct i2c_client *client)
if (icd) if (icd)
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
client->driver = NULL; client->driver = NULL;
kfree(mt9t031); kfree(mt9t031);

Просмотреть файл

@ -1119,7 +1119,6 @@ static int mt9t112_probe(struct i2c_client *client,
ret = mt9t112_camera_probe(icd, client); ret = mt9t112_camera_probe(icd, client);
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
} }
@ -1132,7 +1131,6 @@ static int mt9t112_remove(struct i2c_client *client)
struct soc_camera_device *icd = client->dev.platform_data; struct soc_camera_device *icd = client->dev.platform_data;
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
return 0; return 0;
} }

Просмотреть файл

@ -920,7 +920,6 @@ static int mt9v022_probe(struct i2c_client *client,
ret = mt9v022_video_probe(icd, client); ret = mt9v022_video_probe(icd, client);
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(mt9v022); kfree(mt9v022);
} }
@ -934,7 +933,6 @@ static int mt9v022_remove(struct i2c_client *client)
icd->ops = NULL; icd->ops = NULL;
mt9v022_video_remove(icd); mt9v022_video_remove(icd);
i2c_set_clientdata(client, NULL);
client->driver = NULL; client->driver = NULL;
kfree(mt9v022); kfree(mt9v022);

Просмотреть файл

@ -1159,7 +1159,6 @@ static int ov772x_probe(struct i2c_client *client,
ret = ov772x_video_probe(icd, client); ret = ov772x_video_probe(icd, client);
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
} }
@ -1172,7 +1171,6 @@ static int ov772x_remove(struct i2c_client *client)
struct soc_camera_device *icd = client->dev.platform_data; struct soc_camera_device *icd = client->dev.platform_data;
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
return 0; return 0;
} }

Просмотреть файл

@ -783,7 +783,6 @@ static int ov9640_probe(struct i2c_client *client,
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
} }
@ -794,7 +793,6 @@ static int ov9640_remove(struct i2c_client *client)
{ {
struct ov9640_priv *priv = i2c_get_clientdata(client); struct ov9640_priv *priv = i2c_get_clientdata(client);
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
return 0; return 0;
} }

Просмотреть файл

@ -1444,7 +1444,6 @@ static int rj54n1_probe(struct i2c_client *client,
ret = rj54n1_video_probe(icd, client, rj54n1_priv); ret = rj54n1_video_probe(icd, client, rj54n1_priv);
if (ret < 0) { if (ret < 0) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(rj54n1); kfree(rj54n1);
return ret; return ret;
} }
@ -1461,7 +1460,6 @@ static int rj54n1_remove(struct i2c_client *client)
icd->ops = NULL; icd->ops = NULL;
if (icl->free_bus) if (icl->free_bus)
icl->free_bus(icl); icl->free_bus(icl);
i2c_set_clientdata(client, NULL);
client->driver = NULL; client->driver = NULL;
kfree(rj54n1); kfree(rj54n1);

Просмотреть файл

@ -850,7 +850,6 @@ static int tcm825x_probe(struct i2c_client *client,
const struct i2c_device_id *did) const struct i2c_device_id *did)
{ {
struct tcm825x_sensor *sensor = &tcm825x; struct tcm825x_sensor *sensor = &tcm825x;
int rval;
if (i2c_get_clientdata(client)) if (i2c_get_clientdata(client))
return -EBUSY; return -EBUSY;
@ -871,11 +870,7 @@ static int tcm825x_probe(struct i2c_client *client,
sensor->pix.height = tcm825x_sizes[QVGA].height; sensor->pix.height = tcm825x_sizes[QVGA].height;
sensor->pix.pixelformat = V4L2_PIX_FMT_RGB565; sensor->pix.pixelformat = V4L2_PIX_FMT_RGB565;
rval = v4l2_int_device_register(sensor->v4l2_int_device); return v4l2_int_device_register(sensor->v4l2_int_device);
if (rval)
i2c_set_clientdata(client, NULL);
return rval;
} }
static int tcm825x_remove(struct i2c_client *client) static int tcm825x_remove(struct i2c_client *client)
@ -886,7 +881,6 @@ static int tcm825x_remove(struct i2c_client *client)
return -ENODEV; /* our client isn't attached */ return -ENODEV; /* our client isn't attached */
v4l2_int_device_unregister(sensor->v4l2_int_device); v4l2_int_device_unregister(sensor->v4l2_int_device);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -977,7 +977,6 @@ static int tw9910_probe(struct i2c_client *client,
ret = tw9910_video_probe(icd, client); ret = tw9910_video_probe(icd, client);
if (ret) { if (ret) {
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
} }
@ -990,7 +989,6 @@ static int tw9910_remove(struct i2c_client *client)
struct soc_camera_device *icd = client->dev.platform_data; struct soc_camera_device *icd = client->dev.platform_data;
icd->ops = NULL; icd->ops = NULL;
i2c_set_clientdata(client, NULL);
kfree(priv); kfree(priv);
return 0; return 0;
} }

Просмотреть файл

@ -200,8 +200,6 @@ static int __devexit pm860x_remove(struct i2c_client *client)
pm860x_device_exit(chip); pm860x_device_exit(chip);
i2c_unregister_device(chip->companion); i2c_unregister_device(chip->companion);
i2c_set_clientdata(chip->client, NULL);
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return 0; return 0;
} }

Просмотреть файл

@ -957,7 +957,6 @@ static int __init ab3100_probe(struct i2c_client *client,
i2c_unregister_device(ab3100->testreg_client); i2c_unregister_device(ab3100->testreg_client);
exit_no_testreg_client: exit_no_testreg_client:
exit_no_detect: exit_no_detect:
i2c_set_clientdata(client, NULL);
kfree(ab3100); kfree(ab3100);
return err; return err;
} }
@ -979,7 +978,6 @@ static int __exit ab3100_remove(struct i2c_client *client)
* their notifiers so deactivate IRQ * their notifiers so deactivate IRQ
*/ */
free_irq(client->irq, ab3100); free_irq(client->irq, ab3100);
i2c_set_clientdata(client, NULL);
kfree(ab3100); kfree(ab3100);
return 0; return 0;
} }

Просмотреть файл

@ -1362,7 +1362,6 @@ static int __exit ab3550_remove(struct i2c_client *client)
* their notifiers so deactivate IRQ * their notifiers so deactivate IRQ
*/ */
free_irq(client->irq, ab); free_irq(client->irq, ab);
i2c_set_clientdata(client, NULL);
kfree(ab); kfree(ab);
return 0; return 0;
} }

Просмотреть файл

@ -302,7 +302,6 @@ out_free_irq:
free_irq(chip->irq, chip); free_irq(chip->irq, chip);
out_free_chip: out_free_chip:
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return ret; return ret;
@ -317,7 +316,6 @@ static int __devexit adp5520_remove(struct i2c_client *client)
adp5520_remove_subdevs(chip); adp5520_remove_subdevs(chip);
adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0); adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0);
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return 0; return 0;
} }

Просмотреть файл

@ -534,7 +534,6 @@ static int __devinit da903x_probe(struct i2c_client *client,
out_free_irq: out_free_irq:
free_irq(client->irq, chip); free_irq(client->irq, chip);
out_free_chip: out_free_chip:
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return ret; return ret;
} }
@ -544,7 +543,6 @@ static int __devexit da903x_remove(struct i2c_client *client)
struct da903x_chip *chip = i2c_get_clientdata(client); struct da903x_chip *chip = i2c_get_clientdata(client);
da903x_remove_subdevs(chip); da903x_remove_subdevs(chip);
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return 0; return 0;
} }

Просмотреть файл

@ -173,7 +173,6 @@ static int __devexit max8925_remove(struct i2c_client *client)
max8925_device_exit(chip); max8925_device_exit(chip);
i2c_unregister_device(chip->adc); i2c_unregister_device(chip->adc);
i2c_unregister_device(chip->rtc); i2c_unregister_device(chip->rtc);
i2c_set_clientdata(chip->i2c, NULL);
kfree(chip); kfree(chip);
return 0; return 0;
} }

Просмотреть файл

@ -1228,7 +1228,6 @@ fail2:
free_irq(client->irq, menelaus); free_irq(client->irq, menelaus);
flush_scheduled_work(); flush_scheduled_work();
fail1: fail1:
i2c_set_clientdata(client, NULL);
kfree(menelaus); kfree(menelaus);
return err; return err;
} }
@ -1238,7 +1237,6 @@ static int __exit menelaus_remove(struct i2c_client *client)
struct menelaus_chip *menelaus = i2c_get_clientdata(client); struct menelaus_chip *menelaus = i2c_get_clientdata(client);
free_irq(client->irq, menelaus); free_irq(client->irq, menelaus);
i2c_set_clientdata(client, NULL);
kfree(menelaus); kfree(menelaus);
the_menelaus = NULL; the_menelaus = NULL;
return 0; return 0;

Просмотреть файл

@ -336,7 +336,6 @@ static int __devinit pcf50633_probe(struct i2c_client *client,
return 0; return 0;
err_free: err_free:
i2c_set_clientdata(client, NULL);
kfree(pcf); kfree(pcf);
return ret; return ret;
@ -357,7 +356,6 @@ static int __devexit pcf50633_remove(struct i2c_client *client)
for (i = 0; i < PCF50633_NUM_REGULATORS; i++) for (i = 0; i < PCF50633_NUM_REGULATORS; i++)
platform_device_unregister(pcf->regulator_pdev[i]); platform_device_unregister(pcf->regulator_pdev[i]);
i2c_set_clientdata(client, NULL);
kfree(pcf); kfree(pcf);
return 0; return 0;

Просмотреть файл

@ -296,7 +296,6 @@ out_freeirq:
out_removeirq: out_removeirq:
tc35892_irq_remove(tc35892); tc35892_irq_remove(tc35892);
out_free: out_free:
i2c_set_clientdata(i2c, NULL);
kfree(tc35892); kfree(tc35892);
return ret; return ret;
} }
@ -310,7 +309,6 @@ static int __devexit tc35892_remove(struct i2c_client *client)
free_irq(tc35892->i2c->irq, tc35892); free_irq(tc35892->i2c->irq, tc35892);
tc35892_irq_remove(tc35892); tc35892_irq_remove(tc35892);
i2c_set_clientdata(client, NULL);
kfree(tc35892); kfree(tc35892);
return 0; return 0;

Просмотреть файл

@ -530,7 +530,6 @@ static int __exit tps65010_remove(struct i2c_client *client)
cancel_delayed_work(&tps->work); cancel_delayed_work(&tps->work);
flush_scheduled_work(); flush_scheduled_work();
debugfs_remove(tps->file); debugfs_remove(tps->file);
i2c_set_clientdata(client, NULL);
kfree(tps); kfree(tps);
the_tps = NULL; the_tps = NULL;
return 0; return 0;

Просмотреть файл

@ -80,7 +80,6 @@ static int wm8350_i2c_probe(struct i2c_client *i2c,
return ret; return ret;
err: err:
i2c_set_clientdata(i2c, NULL);
kfree(wm8350); kfree(wm8350);
return ret; return ret;
} }
@ -90,7 +89,6 @@ static int wm8350_i2c_remove(struct i2c_client *i2c)
struct wm8350 *wm8350 = i2c_get_clientdata(i2c); struct wm8350 *wm8350 = i2c_get_clientdata(i2c);
wm8350_device_exit(wm8350); wm8350_device_exit(wm8350);
i2c_set_clientdata(i2c, NULL);
kfree(wm8350); kfree(wm8350);
return 0; return 0;

Просмотреть файл

@ -415,7 +415,6 @@ static int wm8400_i2c_probe(struct i2c_client *i2c,
return 0; return 0;
struct_err: struct_err:
i2c_set_clientdata(i2c, NULL);
kfree(wm8400); kfree(wm8400);
err: err:
return ret; return ret;
@ -426,7 +425,6 @@ static int wm8400_i2c_remove(struct i2c_client *i2c)
struct wm8400 *wm8400 = i2c_get_clientdata(i2c); struct wm8400 *wm8400 = i2c_get_clientdata(i2c);
wm8400_release(wm8400); wm8400_release(wm8400);
i2c_set_clientdata(i2c, NULL);
kfree(wm8400); kfree(wm8400);
return 0; return 0;

Просмотреть файл

@ -643,7 +643,6 @@ static int __devexit at24_remove(struct i2c_client *client)
kfree(at24->writebuf); kfree(at24->writebuf);
kfree(at24); kfree(at24);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -234,7 +234,6 @@ static int __devexit pismo_remove(struct i2c_client *client)
/* FIXME: set_vpp needs saner arguments */ /* FIXME: set_vpp needs saner arguments */
pismo_setvpp_remove_fix(pismo); pismo_setvpp_remove_fix(pismo);
i2c_set_clientdata(client, NULL);
kfree(pismo); kfree(pismo);
return 0; return 0;
@ -286,7 +285,6 @@ static int __devinit pismo_probe(struct i2c_client *client,
return 0; return 0;
exit_free: exit_free:
i2c_set_clientdata(client, NULL);
kfree(pismo); kfree(pismo);
return ret; return ret;
} }

Просмотреть файл

@ -225,7 +225,6 @@ static int __devinit max17040_probe(struct i2c_client *client,
ret = power_supply_register(&client->dev, &chip->battery); ret = power_supply_register(&client->dev, &chip->battery);
if (ret) { if (ret) {
dev_err(&client->dev, "failed: power supply register\n"); dev_err(&client->dev, "failed: power supply register\n");
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return ret; return ret;
} }
@ -245,7 +244,6 @@ static int __devexit max17040_remove(struct i2c_client *client)
power_supply_unregister(&chip->battery); power_supply_unregister(&chip->battery);
cancel_delayed_work(&chip->work); cancel_delayed_work(&chip->work);
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return 0; return 0;
} }

Просмотреть файл

@ -519,8 +519,6 @@ static int __devexit lp3971_i2c_remove(struct i2c_client *i2c)
struct lp3971 *lp3971 = i2c_get_clientdata(i2c); struct lp3971 *lp3971 = i2c_get_clientdata(i2c);
int i; int i;
i2c_set_clientdata(i2c, NULL);
for (i = 0; i < lp3971->num_regulators; i++) for (i = 0; i < lp3971->num_regulators; i++)
regulator_unregister(lp3971->rdev[i]); regulator_unregister(lp3971->rdev[i]);

Просмотреть файл

@ -244,7 +244,6 @@ static int __devexit max1586_pmic_remove(struct i2c_client *client)
for (i = 0; i <= MAX1586_V6; i++) for (i = 0; i <= MAX1586_V6; i++)
if (rdev[i]) if (rdev[i])
regulator_unregister(rdev[i]); regulator_unregister(rdev[i]);
i2c_set_clientdata(client, NULL);
kfree(rdev); kfree(rdev);
return 0; return 0;

Просмотреть файл

@ -357,7 +357,6 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
dev_info(info->dev, "Max8649 regulator device is detected.\n"); dev_info(info->dev, "Max8649 regulator device is detected.\n");
return 0; return 0;
out: out:
i2c_set_clientdata(client, NULL);
kfree(info); kfree(info);
return ret; return ret;
} }
@ -369,7 +368,6 @@ static int __devexit max8649_regulator_remove(struct i2c_client *client)
if (info) { if (info) {
if (info->regulator) if (info->regulator)
regulator_unregister(info->regulator); regulator_unregister(info->regulator);
i2c_set_clientdata(client, NULL);
kfree(info); kfree(info);
} }

Просмотреть файл

@ -471,7 +471,6 @@ static int __devexit max8660_remove(struct i2c_client *client)
for (i = 0; i < MAX8660_V_END; i++) for (i = 0; i < MAX8660_V_END; i++)
if (rdev[i]) if (rdev[i])
regulator_unregister(rdev[i]); regulator_unregister(rdev[i]);
i2c_set_clientdata(client, NULL);
kfree(rdev); kfree(rdev);
return 0; return 0;

Просмотреть файл

@ -538,9 +538,6 @@ static int __devexit tps_65023_remove(struct i2c_client *client)
struct tps_pmic *tps = i2c_get_clientdata(client); struct tps_pmic *tps = i2c_get_clientdata(client);
int i; int i;
/* clear the client data in i2c */
i2c_set_clientdata(client, NULL);
for (i = 0; i < TPS65023_NUM_REGULATOR; i++) for (i = 0; i < TPS65023_NUM_REGULATOR; i++)
regulator_unregister(tps->rdev[i]); regulator_unregister(tps->rdev[i]);

Просмотреть файл

@ -403,7 +403,6 @@ out_irq:
free_irq(client->irq, client); free_irq(client->irq, client);
out_free: out_free:
i2c_set_clientdata(client, NULL);
kfree(ds1374); kfree(ds1374);
return ret; return ret;
} }
@ -422,7 +421,6 @@ static int __devexit ds1374_remove(struct i2c_client *client)
} }
rtc_device_unregister(ds1374->rtc); rtc_device_unregister(ds1374->rtc);
i2c_set_clientdata(client, NULL);
kfree(ds1374); kfree(ds1374);
return 0; return 0;
} }

Просмотреть файл

@ -632,7 +632,6 @@ errout_reg:
rtc_device_unregister(rx8025->rtc); rtc_device_unregister(rx8025->rtc);
errout_free: errout_free:
i2c_set_clientdata(client, NULL);
kfree(rx8025); kfree(rx8025);
errout: errout:
@ -656,7 +655,6 @@ static int __devexit rx8025_remove(struct i2c_client *client)
rx8025_sysfs_unregister(&client->dev); rx8025_sysfs_unregister(&client->dev);
rtc_device_unregister(rx8025->rtc); rtc_device_unregister(rx8025->rtc);
i2c_set_clientdata(client, NULL);
kfree(rx8025); kfree(rx8025);
return 0; return 0;
} }

Просмотреть файл

@ -275,7 +275,6 @@ exit_dummy:
if (s35390a->client[i]) if (s35390a->client[i])
i2c_unregister_device(s35390a->client[i]); i2c_unregister_device(s35390a->client[i]);
kfree(s35390a); kfree(s35390a);
i2c_set_clientdata(client, NULL);
exit: exit:
return err; return err;
@ -292,7 +291,6 @@ static int s35390a_remove(struct i2c_client *client)
rtc_device_unregister(s35390a->rtc); rtc_device_unregister(s35390a->rtc);
kfree(s35390a); kfree(s35390a);
i2c_set_clientdata(client, NULL);
return 0; return 0;
} }

Просмотреть файл

@ -519,7 +519,6 @@ err_input_register_device_failed:
err_input_dev_alloc_failed: err_input_dev_alloc_failed:
err_detect_failed: err_detect_failed:
err_power_failed: err_power_failed:
i2c_set_clientdata(client, NULL);
kfree(ts); kfree(ts);
err_alloc_data_failed: err_alloc_data_failed:
err_check_functionality_failed: err_check_functionality_failed:
@ -537,7 +536,6 @@ static int synaptics_ts_remove(struct i2c_client *client)
else else
hrtimer_cancel(&ts->timer); hrtimer_cancel(&ts->timer);
input_unregister_device(ts->input_dev); input_unregister_device(ts->input_dev);
i2c_set_clientdata(client, NULL);
kfree(ts); kfree(ts);
return 0; return 0;
} }

Просмотреть файл

@ -289,7 +289,6 @@ static int wis_saa7113_probe(struct i2c_client *client,
if (write_regs(client, initial_registers) < 0) { if (write_regs(client, initial_registers) < 0) {
printk(KERN_ERR printk(KERN_ERR
"wis-saa7113: error initializing SAA7113\n"); "wis-saa7113: error initializing SAA7113\n");
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return -ENODEV; return -ENODEV;
} }
@ -301,7 +300,6 @@ static int wis_saa7113_remove(struct i2c_client *client)
{ {
struct wis_saa7113 *dec = i2c_get_clientdata(client); struct wis_saa7113 *dec = i2c_get_clientdata(client);
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return 0; return 0;
} }

Просмотреть файл

@ -422,7 +422,6 @@ static int wis_saa7115_probe(struct i2c_client *client,
if (write_regs(client, initial_registers) < 0) { if (write_regs(client, initial_registers) < 0) {
printk(KERN_ERR printk(KERN_ERR
"wis-saa7115: error initializing SAA7115\n"); "wis-saa7115: error initializing SAA7115\n");
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return -ENODEV; return -ENODEV;
} }
@ -434,7 +433,6 @@ static int wis_saa7115_remove(struct i2c_client *client)
{ {
struct wis_saa7115 *dec = i2c_get_clientdata(client); struct wis_saa7115 *dec = i2c_get_clientdata(client);
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return 0; return 0;
} }

Просмотреть файл

@ -684,7 +684,6 @@ static int wis_sony_tuner_remove(struct i2c_client *client)
{ {
struct wis_sony_tuner *t = i2c_get_clientdata(client); struct wis_sony_tuner *t = i2c_get_clientdata(client);
i2c_set_clientdata(client, NULL);
kfree(t); kfree(t);
return 0; return 0;
} }

Просмотреть файл

@ -323,7 +323,6 @@ static int wis_tw2804_remove(struct i2c_client *client)
{ {
struct wis_tw2804 *dec = i2c_get_clientdata(client); struct wis_tw2804 *dec = i2c_get_clientdata(client);
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return 0; return 0;
} }

Просмотреть файл

@ -294,7 +294,6 @@ static int wis_tw9903_probe(struct i2c_client *client,
if (write_regs(client, initial_registers) < 0) { if (write_regs(client, initial_registers) < 0) {
printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); printk(KERN_ERR "wis-tw9903: error initializing TW9903\n");
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return -ENODEV; return -ENODEV;
} }
@ -306,7 +305,6 @@ static int wis_tw9903_remove(struct i2c_client *client)
{ {
struct wis_tw9903 *dec = i2c_get_clientdata(client); struct wis_tw9903 *dec = i2c_get_clientdata(client);
i2c_set_clientdata(client, NULL);
kfree(dec); kfree(dec);
return 0; return 0;
} }

Просмотреть файл

@ -1011,7 +1011,6 @@ error_put_reg:
if (!IS_ERR(st->reg)) if (!IS_ERR(st->reg))
regulator_put(st->reg); regulator_put(st->reg);
error_free_st: error_free_st:
i2c_set_clientdata(client, NULL);
kfree(st); kfree(st);
error_ret: error_ret:
@ -1030,7 +1029,6 @@ static int max1363_remove(struct i2c_client *client)
regulator_disable(st->reg); regulator_disable(st->reg);
regulator_put(st->reg); regulator_put(st->reg);
} }
i2c_set_clientdata(client, NULL);
kfree(st); kfree(st);
return 0; return 0;

Просмотреть файл

@ -694,7 +694,6 @@ static int __devinit tsl2563_probe(struct i2c_client *client,
fail2: fail2:
iio_device_unregister(chip->indio_dev); iio_device_unregister(chip->indio_dev);
fail1: fail1:
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return err; return err;
} }
@ -705,7 +704,6 @@ static int tsl2563_remove(struct i2c_client *client)
iio_device_unregister(chip->indio_dev); iio_device_unregister(chip->indio_dev);
i2c_set_clientdata(client, NULL);
kfree(chip); kfree(chip);
return 0; return 0;
} }

Просмотреть файл

@ -756,7 +756,6 @@ out:
out1: out1:
backlight_device_unregister(bl); backlight_device_unregister(bl);
out2: out2:
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return ret; return ret;
@ -776,7 +775,6 @@ static int __devexit adp8860_remove(struct i2c_client *client)
&adp8860_bl_attr_group); &adp8860_bl_attr_group);
backlight_device_unregister(data->bl); backlight_device_unregister(data->bl);
i2c_set_clientdata(client, NULL);
kfree(data); kfree(data);
return 0; return 0;

Просмотреть файл

@ -119,7 +119,6 @@ static int __devinit tosa_bl_probe(struct i2c_client *client,
err_reg: err_reg:
data->bl = NULL; data->bl = NULL;
i2c_set_clientdata(client, NULL);
err_gpio_dir: err_gpio_dir:
gpio_free(TOSA_GPIO_BL_C20MA); gpio_free(TOSA_GPIO_BL_C20MA);
err_gpio_bl: err_gpio_bl:
@ -133,7 +132,6 @@ static int __devexit tosa_bl_remove(struct i2c_client *client)
backlight_device_unregister(data->bl); backlight_device_unregister(data->bl);
data->bl = NULL; data->bl = NULL;
i2c_set_clientdata(client, NULL);
gpio_free(TOSA_GPIO_BL_C20MA); gpio_free(TOSA_GPIO_BL_C20MA);