diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-02-02 17:41:28 -0800 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-02-08 13:34:41 +0100 |
commit | d3e1b617ae20c459627f501b4bc55b1ea91f662b (patch) | |
tree | 67d2a5e6dfa455d3f7d4d99451d8963f0cc30466 /drivers/i2c/i2c-core.c | |
parent | 2d479e1fa2d09c5a9518a75a5d21ef2713117946 (diff) | |
download | linux-d3e1b617ae20c459627f501b4bc55b1ea91f662b.tar.gz linux-d3e1b617ae20c459627f501b4bc55b1ea91f662b.tar.bz2 linux-d3e1b617ae20c459627f501b4bc55b1ea91f662b.zip |
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>
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r-- | drivers/i2c/i2c-core.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 583e95042a21..f72292156faf 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -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", |