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:
Коммит
ceadda057c
|
@ -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 */
|
|
||||||
union i2c_smbus_data dummy;
|
|
||||||
|
|
||||||
if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_READ, 0,
|
|
||||||
I2C_SMBUS_BYTE_DATA, &dummy) < 0)
|
|
||||||
return 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,
|
|
||||||
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;
|
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);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче