i2c: Shrink struct i2c_client
This shrinks the size of "struct i2c_client" by 40 bytes: - Substantially shrinks the string used to identify the chip type - The "flags" don't need to be so big - Removes some internal padding It also adds kerneldoc for that struct, explaining how "name" is really a chip type identifier; it's otherwise potentially confusing. Because the I2C_NAME_SIZE symbol was abused for both i2c_client.name and for i2c_adapter.name, this needed to affect i2c_adapter too. The adapters which used that symbol now use the more-obviously-correct idiom of taking the size of that field. JD: Shorten i2c_adapter.name from 50 to 48 bytes while we're here, to avoid wasting space in padding. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
parent
4ad4eac606
commit
2096b956d2
|
@ -497,7 +497,7 @@ static int __devinit ali1535_probe(struct pci_dev *dev, const struct pci_device_
|
||||||
/* set up the sysfs linkage to our parent device */
|
/* set up the sysfs linkage to our parent device */
|
||||||
ali1535_adapter.dev.parent = &dev->dev;
|
ali1535_adapter.dev.parent = &dev->dev;
|
||||||
|
|
||||||
snprintf(ali1535_adapter.name, I2C_NAME_SIZE,
|
snprintf(ali1535_adapter.name, sizeof(ali1535_adapter.name),
|
||||||
"SMBus ALI1535 adapter at %04x", ali1535_smba);
|
"SMBus ALI1535 adapter at %04x", ali1535_smba);
|
||||||
return i2c_add_adapter(&ali1535_adapter);
|
return i2c_add_adapter(&ali1535_adapter);
|
||||||
}
|
}
|
||||||
|
|
|
@ -492,7 +492,7 @@ static int __devinit ali15x3_probe(struct pci_dev *dev, const struct pci_device_
|
||||||
/* set up the sysfs linkage to our parent device */
|
/* set up the sysfs linkage to our parent device */
|
||||||
ali15x3_adapter.dev.parent = &dev->dev;
|
ali15x3_adapter.dev.parent = &dev->dev;
|
||||||
|
|
||||||
snprintf(ali15x3_adapter.name, I2C_NAME_SIZE,
|
snprintf(ali15x3_adapter.name, sizeof(ali15x3_adapter.name),
|
||||||
"SMBus ALI15X3 adapter at %04x", ali15x3_smba);
|
"SMBus ALI15X3 adapter at %04x", ali15x3_smba);
|
||||||
return i2c_add_adapter(&ali15x3_adapter);
|
return i2c_add_adapter(&ali15x3_adapter);
|
||||||
}
|
}
|
||||||
|
|
|
@ -365,7 +365,7 @@ static int __devinit amd8111_probe(struct pci_dev *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
smbus->adapter.owner = THIS_MODULE;
|
smbus->adapter.owner = THIS_MODULE;
|
||||||
snprintf(smbus->adapter.name, I2C_NAME_SIZE,
|
snprintf(smbus->adapter.name, sizeof(smbus->adapter.name),
|
||||||
"SMBus2 AMD8111 adapter at %04x", smbus->base);
|
"SMBus2 AMD8111 adapter at %04x", smbus->base);
|
||||||
smbus->adapter.id = I2C_HW_SMBUS_AMD8111;
|
smbus->adapter.id = I2C_HW_SMBUS_AMD8111;
|
||||||
smbus->adapter.class = I2C_CLASS_HWMON;
|
smbus->adapter.class = I2C_CLASS_HWMON;
|
||||||
|
|
|
@ -527,7 +527,7 @@ static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id
|
||||||
/* set up the sysfs linkage to our parent device */
|
/* set up the sysfs linkage to our parent device */
|
||||||
i801_adapter.dev.parent = &dev->dev;
|
i801_adapter.dev.parent = &dev->dev;
|
||||||
|
|
||||||
snprintf(i801_adapter.name, I2C_NAME_SIZE,
|
snprintf(i801_adapter.name, sizeof(i801_adapter.name),
|
||||||
"SMBus I801 adapter at %04lx", i801_smba);
|
"SMBus I801 adapter at %04lx", i801_smba);
|
||||||
err = i2c_add_adapter(&i801_adapter);
|
err = i2c_add_adapter(&i801_adapter);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
@ -118,7 +118,7 @@ static int ixp2000_i2c_probe(struct platform_device *plat_dev)
|
||||||
|
|
||||||
drv_data->adapter.id = I2C_HW_B_IXP2000,
|
drv_data->adapter.id = I2C_HW_B_IXP2000,
|
||||||
strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
|
strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
|
||||||
I2C_NAME_SIZE);
|
sizeof(drv_data->adapter.name));
|
||||||
drv_data->adapter.algo_data = &drv_data->algo_data,
|
drv_data->adapter.algo_data = &drv_data->algo_data,
|
||||||
|
|
||||||
drv_data->adapter.dev.parent = &plat_dev->dev;
|
drv_data->adapter.dev.parent = &plat_dev->dev;
|
||||||
|
|
|
@ -127,7 +127,7 @@ static int ixp4xx_i2c_probe(struct platform_device *plat_dev)
|
||||||
drv_data->adapter.id = I2C_HW_B_IXP4XX;
|
drv_data->adapter.id = I2C_HW_B_IXP4XX;
|
||||||
drv_data->adapter.class = I2C_CLASS_HWMON;
|
drv_data->adapter.class = I2C_CLASS_HWMON;
|
||||||
strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
|
strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
|
||||||
I2C_NAME_SIZE);
|
sizeof(drv_data->adapter.name));
|
||||||
drv_data->adapter.algo_data = &drv_data->algo_data;
|
drv_data->adapter.algo_data = &drv_data->algo_data;
|
||||||
|
|
||||||
drv_data->adapter.dev.parent = &plat_dev->dev;
|
drv_data->adapter.dev.parent = &plat_dev->dev;
|
||||||
|
|
|
@ -508,7 +508,7 @@ mv64xxx_i2c_probe(struct platform_device *pd)
|
||||||
}
|
}
|
||||||
|
|
||||||
strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
|
strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
|
||||||
I2C_NAME_SIZE);
|
sizeof(drv_data->adapter.name));
|
||||||
|
|
||||||
init_waitqueue_head(&drv_data->waitq);
|
init_waitqueue_head(&drv_data->waitq);
|
||||||
spin_lock_init(&drv_data->lock);
|
spin_lock_init(&drv_data->lock);
|
||||||
|
|
|
@ -240,7 +240,7 @@ static int __devinit nforce2_probe_smb (struct pci_dev *dev, int bar,
|
||||||
smbus->adapter.algo = &smbus_algorithm;
|
smbus->adapter.algo = &smbus_algorithm;
|
||||||
smbus->adapter.algo_data = smbus;
|
smbus->adapter.algo_data = smbus;
|
||||||
smbus->adapter.dev.parent = &dev->dev;
|
smbus->adapter.dev.parent = &dev->dev;
|
||||||
snprintf(smbus->adapter.name, I2C_NAME_SIZE,
|
snprintf(smbus->adapter.name, sizeof(smbus->adapter.name),
|
||||||
"SMBus nForce2 adapter at %04x", smbus->base);
|
"SMBus nForce2 adapter at %04x", smbus->base);
|
||||||
|
|
||||||
error = i2c_add_adapter(&smbus->adapter);
|
error = i2c_add_adapter(&smbus->adapter);
|
||||||
|
|
|
@ -358,7 +358,7 @@ static int __devinit pasemi_smb_probe(struct pci_dev *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
smbus->adapter.owner = THIS_MODULE;
|
smbus->adapter.owner = THIS_MODULE;
|
||||||
snprintf(smbus->adapter.name, I2C_NAME_SIZE,
|
snprintf(smbus->adapter.name, sizeof(smbus->adapter.name),
|
||||||
"PA Semi SMBus adapter at 0x%lx", smbus->base);
|
"PA Semi SMBus adapter at 0x%lx", smbus->base);
|
||||||
smbus->adapter.class = I2C_CLASS_HWMON;
|
smbus->adapter.class = I2C_CLASS_HWMON;
|
||||||
smbus->adapter.algo = &smbus_algorithm;
|
smbus->adapter.algo = &smbus_algorithm;
|
||||||
|
|
|
@ -428,7 +428,7 @@ static int __devinit piix4_probe(struct pci_dev *dev,
|
||||||
/* set up the sysfs linkage to our parent device */
|
/* set up the sysfs linkage to our parent device */
|
||||||
piix4_adapter.dev.parent = &dev->dev;
|
piix4_adapter.dev.parent = &dev->dev;
|
||||||
|
|
||||||
snprintf(piix4_adapter.name, I2C_NAME_SIZE,
|
snprintf(piix4_adapter.name, sizeof(piix4_adapter.name),
|
||||||
"SMBus PIIX4 adapter at %04x", piix4_smba);
|
"SMBus PIIX4 adapter at %04x", piix4_smba);
|
||||||
|
|
||||||
if ((retval = i2c_add_adapter(&piix4_adapter))) {
|
if ((retval = i2c_add_adapter(&piix4_adapter))) {
|
||||||
|
|
|
@ -300,7 +300,7 @@ static int __devinit sis96x_probe(struct pci_dev *dev,
|
||||||
/* set up the sysfs linkage to our parent device */
|
/* set up the sysfs linkage to our parent device */
|
||||||
sis96x_adapter.dev.parent = &dev->dev;
|
sis96x_adapter.dev.parent = &dev->dev;
|
||||||
|
|
||||||
snprintf(sis96x_adapter.name, I2C_NAME_SIZE,
|
snprintf(sis96x_adapter.name, sizeof(sis96x_adapter.name),
|
||||||
"SiS96x SMBus adapter at 0x%04x", sis96x_smbus_base);
|
"SiS96x SMBus adapter at 0x%04x", sis96x_smbus_base);
|
||||||
|
|
||||||
if ((retval = i2c_add_adapter(&sis96x_adapter))) {
|
if ((retval = i2c_add_adapter(&sis96x_adapter))) {
|
||||||
|
|
|
@ -404,7 +404,7 @@ found:
|
||||||
}
|
}
|
||||||
|
|
||||||
vt596_adapter.dev.parent = &pdev->dev;
|
vt596_adapter.dev.parent = &pdev->dev;
|
||||||
snprintf(vt596_adapter.name, I2C_NAME_SIZE,
|
snprintf(vt596_adapter.name, sizeof(vt596_adapter.name),
|
||||||
"SMBus Via Pro adapter at %04x", vt596_smba);
|
"SMBus Via Pro adapter at %04x", vt596_smba);
|
||||||
|
|
||||||
vt596_pdev = pci_dev_get(pdev);
|
vt596_pdev = pci_dev_get(pdev);
|
||||||
|
|
|
@ -441,7 +441,7 @@ static __init struct scx200_acb_iface *scx200_create_iface(const char *text,
|
||||||
|
|
||||||
adapter = &iface->adapter;
|
adapter = &iface->adapter;
|
||||||
i2c_set_adapdata(adapter, iface);
|
i2c_set_adapdata(adapter, iface);
|
||||||
snprintf(adapter->name, I2C_NAME_SIZE, "%s ACB%d", text, index);
|
snprintf(adapter->name, sizeof(adapter->name), "%s ACB%d", text, index);
|
||||||
adapter->owner = THIS_MODULE;
|
adapter->owner = THIS_MODULE;
|
||||||
adapter->id = I2C_HW_SMBUS_SCX200;
|
adapter->id = I2C_HW_SMBUS_SCX200;
|
||||||
adapter->algo = &scx200_acb_algorithm;
|
adapter->algo = &scx200_acb_algorithm;
|
||||||
|
|
|
@ -183,7 +183,8 @@ int flexcop_i2c_init(struct flexcop_device *fc)
|
||||||
mutex_init(&fc->i2c_mutex);
|
mutex_init(&fc->i2c_mutex);
|
||||||
|
|
||||||
memset(&fc->i2c_adap, 0, sizeof(struct i2c_adapter));
|
memset(&fc->i2c_adap, 0, sizeof(struct i2c_adapter));
|
||||||
strncpy(fc->i2c_adap.name, "B2C2 FlexCop device",I2C_NAME_SIZE);
|
strncpy(fc->i2c_adap.name, "B2C2 FlexCop device",
|
||||||
|
sizeof(fc->i2c_adap.name));
|
||||||
|
|
||||||
i2c_set_adapdata(&fc->i2c_adap,fc);
|
i2c_set_adapdata(&fc->i2c_adap,fc);
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ int dvb_usb_i2c_init(struct dvb_usb_device *d)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy(d->i2c_adap.name,d->desc->name,I2C_NAME_SIZE);
|
strncpy(d->i2c_adap.name, d->desc->name, sizeof(d->i2c_adap.name));
|
||||||
#ifdef I2C_ADAP_CLASS_TV_DIGITAL
|
#ifdef I2C_ADAP_CLASS_TV_DIGITAL
|
||||||
d->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL,
|
d->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL,
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -105,9 +105,9 @@ struct i2c_adapter * dibx000_get_i2c_adapter(struct dibx000_i2c_master *mst, enu
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dibx000_get_i2c_adapter);
|
EXPORT_SYMBOL(dibx000_get_i2c_adapter);
|
||||||
|
|
||||||
static int i2c_adapter_init(struct i2c_adapter *i2c_adap, struct i2c_algorithm *algo, const char name[I2C_NAME_SIZE], struct dibx000_i2c_master *mst)
|
static int i2c_adapter_init(struct i2c_adapter *i2c_adap, struct i2c_algorithm *algo, const char *name, struct dibx000_i2c_master *mst)
|
||||||
{
|
{
|
||||||
strncpy(i2c_adap->name, name, I2C_NAME_SIZE);
|
strncpy(i2c_adap->name, name, sizeof(i2c_adap->name));
|
||||||
i2c_adap->class = I2C_CLASS_TV_DIGITAL,
|
i2c_adap->class = I2C_CLASS_TV_DIGITAL,
|
||||||
i2c_adap->algo = algo;
|
i2c_adap->algo = algo;
|
||||||
i2c_adap->algo_data = NULL;
|
i2c_adap->algo_data = NULL;
|
||||||
|
|
|
@ -104,7 +104,8 @@ static int intelfb_setup_i2c_bus(struct intelfb_info *dinfo,
|
||||||
|
|
||||||
chan->dinfo = dinfo;
|
chan->dinfo = dinfo;
|
||||||
chan->reg = reg;
|
chan->reg = reg;
|
||||||
snprintf(chan->adapter.name, I2C_NAME_SIZE, "intelfb %s", name);
|
snprintf(chan->adapter.name, sizeof(chan->adapter.name),
|
||||||
|
"intelfb %s", name);
|
||||||
chan->adapter.owner = THIS_MODULE;
|
chan->adapter.owner = THIS_MODULE;
|
||||||
chan->adapter.id = I2C_HW_B_INTELFB;
|
chan->adapter.id = I2C_HW_B_INTELFB;
|
||||||
chan->adapter.algo_data = &chan->algo;
|
chan->adapter.algo_data = &chan->algo;
|
||||||
|
|
|
@ -111,7 +111,7 @@ static int i2c_bus_reg(struct i2c_bit_adapter* b, struct matrox_fb_info* minfo,
|
||||||
b->mask.data = data;
|
b->mask.data = data;
|
||||||
b->mask.clock = clock;
|
b->mask.clock = clock;
|
||||||
b->adapter = matrox_i2c_adapter_template;
|
b->adapter = matrox_i2c_adapter_template;
|
||||||
snprintf(b->adapter.name, I2C_NAME_SIZE, name,
|
snprintf(b->adapter.name, sizeof(b->adapter.name), name,
|
||||||
minfo->fbcon.node);
|
minfo->fbcon.node);
|
||||||
i2c_set_adapdata(&b->adapter, b);
|
i2c_set_adapdata(&b->adapter, b);
|
||||||
b->adapter.algo_data = &b->bac;
|
b->adapter.algo_data = &b->bac;
|
||||||
|
|
|
@ -140,25 +140,30 @@ struct i2c_driver {
|
||||||
};
|
};
|
||||||
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
|
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
|
||||||
|
|
||||||
#define I2C_NAME_SIZE 50
|
#define I2C_NAME_SIZE 20
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* i2c_client identifies a single device (i.e. chip) that is connected to an
|
* struct i2c_client - represent an I2C slave device
|
||||||
* i2c bus. The behaviour is defined by the routines of the driver. This
|
* @addr: Address used on the I2C bus connected to the parent adapter.
|
||||||
* function is mainly used for lookup & other admin. functions.
|
* @name: Indicates the type of the device, usually a chip name that's
|
||||||
|
* generic enough to hide second-sourcing and compatible revisions.
|
||||||
|
* @dev: Driver model device node for the slave.
|
||||||
|
*
|
||||||
|
* An i2c_client identifies a single device (i.e. chip) connected to an
|
||||||
|
* i2c bus. The behaviour is defined by the routines of the driver.
|
||||||
*/
|
*/
|
||||||
struct i2c_client {
|
struct i2c_client {
|
||||||
unsigned int flags; /* div., see below */
|
unsigned short flags; /* div., see below */
|
||||||
unsigned short addr; /* chip address - NOTE: 7bit */
|
unsigned short addr; /* chip address - NOTE: 7bit */
|
||||||
/* addresses are stored in the */
|
/* addresses are stored in the */
|
||||||
/* _LOWER_ 7 bits */
|
/* _LOWER_ 7 bits */
|
||||||
|
char name[I2C_NAME_SIZE];
|
||||||
struct i2c_adapter *adapter; /* the adapter we sit on */
|
struct i2c_adapter *adapter; /* the adapter we sit on */
|
||||||
struct i2c_driver *driver; /* and our access routines */
|
struct i2c_driver *driver; /* and our access routines */
|
||||||
int usage_count; /* How many accesses currently */
|
int usage_count; /* How many accesses currently */
|
||||||
/* to the client */
|
/* to the client */
|
||||||
struct device dev; /* the device structure */
|
struct device dev; /* the device structure */
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
char name[I2C_NAME_SIZE];
|
|
||||||
struct completion released;
|
struct completion released;
|
||||||
};
|
};
|
||||||
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
|
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
|
||||||
|
@ -231,7 +236,7 @@ struct i2c_adapter {
|
||||||
int nr;
|
int nr;
|
||||||
struct list_head clients;
|
struct list_head clients;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
char name[I2C_NAME_SIZE];
|
char name[48];
|
||||||
struct completion dev_released;
|
struct completion dev_released;
|
||||||
};
|
};
|
||||||
#define dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
|
#define dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
|
||||||
|
|
Loading…
Reference in New Issue