i2c: allow specify device properties in i2c_board_info
With many drivers converting to using generic device properties, it is useful to provide array of device properties when instantiating new i2c client via i2c_board_info and have them automatically added to the device in question. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
2d479e1fa2
commit
d3e1b617ae
|
@ -1335,15 +1335,29 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
|
|||
client->dev.fwnode = info->fwnode;
|
||||
|
||||
i2c_dev_set_name(adap, client);
|
||||
|
||||
if (info->properties) {
|
||||
status = device_add_properties(&client->dev, info->properties);
|
||||
if (status) {
|
||||
dev_err(&adap->dev,
|
||||
"Failed to add properties to client %s: %d\n",
|
||||
client->name, status);
|
||||
goto out_err;
|
||||
}
|
||||
}
|
||||
|
||||
status = device_register(&client->dev);
|
||||
if (status)
|
||||
goto out_err;
|
||||
goto out_free_props;
|
||||
|
||||
dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
|
||||
client->name, dev_name(&client->dev));
|
||||
|
||||
return client;
|
||||
|
||||
out_free_props:
|
||||
if (info->properties)
|
||||
device_remove_properties(&client->dev);
|
||||
out_err:
|
||||
dev_err(&adap->dev,
|
||||
"Failed to register i2c client %s at 0x%02x (%d)\n",
|
||||
|
|
|
@ -51,6 +51,7 @@ enum i2c_slave_event;
|
|||
typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
|
||||
|
||||
struct module;
|
||||
struct property_entry;
|
||||
|
||||
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
|
||||
/*
|
||||
|
@ -299,6 +300,7 @@ static inline int i2c_slave_event(struct i2c_client *client,
|
|||
* @archdata: copied into i2c_client.dev.archdata
|
||||
* @of_node: pointer to OpenFirmware device node
|
||||
* @fwnode: device node supplied by the platform firmware
|
||||
* @properties: additional device properties for the device
|
||||
* @irq: stored in i2c_client.irq
|
||||
*
|
||||
* I2C doesn't actually support hardware probing, although controllers and
|
||||
|
@ -320,6 +322,7 @@ struct i2c_board_info {
|
|||
struct dev_archdata *archdata;
|
||||
struct device_node *of_node;
|
||||
struct fwnode_handle *fwnode;
|
||||
const struct property_entry *properties;
|
||||
int irq;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue