diff options
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 1e52395e90a7..bfb6ba7cac00 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -1336,15 +1336,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",  | 
