greybus: i2c-gb: actually add the i2c adapter properly...

This commit is contained in:
Greg Kroah-Hartman 2014-08-11 17:01:15 +08:00
parent 4c009fada1
commit 53419e07cc
1 changed files with 13 additions and 0 deletions

View File

@ -79,6 +79,7 @@ static int i2c_gb_probe(struct greybus_device *gdev, const struct greybus_device
{ {
struct i2c_gb_data *i2c_gb_data; struct i2c_gb_data *i2c_gb_data;
struct i2c_adapter *adapter; struct i2c_adapter *adapter;
int retval;
i2c_gb_data = kzalloc(sizeof(*i2c_gb_data), GFP_KERNEL); i2c_gb_data = kzalloc(sizeof(*i2c_gb_data), GFP_KERNEL);
if (!i2c_gb_data) if (!i2c_gb_data)
@ -93,12 +94,24 @@ static int i2c_gb_probe(struct greybus_device *gdev, const struct greybus_device
adapter->owner = THIS_MODULE; adapter->owner = THIS_MODULE;
adapter->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; adapter->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
adapter->algo = &smbus_algorithm; adapter->algo = &smbus_algorithm;
adapter->dev.parent = &gdev->dev;
adapter->retries = 3; /* we have to pick something... */
snprintf(adapter->name, sizeof(adapter->name), "Greybus i2c adapter");
retval = i2c_add_adapter(adapter);
if (retval) {
dev_err(&gdev->dev, "Can not add SMBus adapter\n");
goto error;
}
i2c_gb_data->gdev = gdev; i2c_gb_data->gdev = gdev;
i2c_gb_data->adapter = adapter; i2c_gb_data->adapter = adapter;
greybus_set_drvdata(gdev, i2c_gb_data); greybus_set_drvdata(gdev, i2c_gb_data);
return 0; return 0;
error:
kfree(adapter);
kfree(i2c_gb_data);
return retval;
} }
static void i2c_gb_disconnect(struct greybus_device *gdev) static void i2c_gb_disconnect(struct greybus_device *gdev)