Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 292220
b: refs/heads/master
c: 8b313ca
h: refs/heads/master
v: v3
  • Loading branch information
Guenter Roeck authored and Guenter Roeck committed Mar 19, 2012
1 parent 9e505df commit 16362cd
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 155 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 07404aab52f5106ec436692474cf8f40978f5dac
refs/heads/master: 8b313ca7f1b98263ce22519b25a9c2a362eeb898
16 changes: 3 additions & 13 deletions trunk/drivers/hwmon/pmbus/adm1275.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,8 @@ static int adm1275_probe(struct i2c_client *client,
if (device_config < 0)
return device_config;

data = kzalloc(sizeof(struct adm1275_data), GFP_KERNEL);
data = devm_kzalloc(&client->dev, sizeof(struct adm1275_data),
GFP_KERNEL);
if (!data)
return -ENOMEM;

Expand Down Expand Up @@ -297,23 +298,12 @@ static int adm1275_probe(struct i2c_client *client,
break;
}

ret = pmbus_do_probe(client, id, info);
if (ret)
goto err_mem;
return 0;

err_mem:
kfree(data);
return ret;
return pmbus_do_probe(client, id, info);
}

static int adm1275_remove(struct i2c_client *client)
{
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
const struct adm1275_data *data = to_adm1275_data(info);

pmbus_do_remove(client);
kfree(data);
return 0;
}

Expand Down
26 changes: 6 additions & 20 deletions trunk/drivers/hwmon/pmbus/lm25066.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,23 +176,21 @@ static int lm25066_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
int config;
int ret;
struct lm25066_data *data;
struct pmbus_driver_info *info;

if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_READ_BYTE_DATA))
return -ENODEV;

data = kzalloc(sizeof(struct lm25066_data), GFP_KERNEL);
data = devm_kzalloc(&client->dev, sizeof(struct lm25066_data),
GFP_KERNEL);
if (!data)
return -ENOMEM;

config = i2c_smbus_read_byte_data(client, LM25066_DEVICE_SETUP);
if (config < 0) {
ret = config;
goto err_mem;
}
if (config < 0)
return config;

data->id = id->driver_data;
info = &data->info;
Expand Down Expand Up @@ -291,27 +289,15 @@ static int lm25066_probe(struct i2c_client *client,
}
break;
default:
ret = -ENODEV;
goto err_mem;
return -ENODEV;
}

ret = pmbus_do_probe(client, id, info);
if (ret)
goto err_mem;
return 0;

err_mem:
kfree(data);
return ret;
return pmbus_do_probe(client, id, info);
}

static int lm25066_remove(struct i2c_client *client)
{
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
const struct lm25066_data *data = to_lm25066_data(info);

pmbus_do_remove(client);
kfree(data);
return 0;
}

Expand Down
30 changes: 8 additions & 22 deletions trunk/drivers/hwmon/pmbus/ltc2978.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,32 +287,30 @@ MODULE_DEVICE_TABLE(i2c, ltc2978_id);
static int ltc2978_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
int chip_id, ret, i;
int chip_id, i;
struct ltc2978_data *data;
struct pmbus_driver_info *info;

if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_READ_WORD_DATA))
return -ENODEV;

data = kzalloc(sizeof(struct ltc2978_data), GFP_KERNEL);
data = devm_kzalloc(&client->dev, sizeof(struct ltc2978_data),
GFP_KERNEL);
if (!data)
return -ENOMEM;

chip_id = i2c_smbus_read_word_data(client, LTC2978_MFR_SPECIAL_ID);
if (chip_id < 0) {
ret = chip_id;
goto err_mem;
}
if (chip_id < 0)
return chip_id;

if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2) {
data->id = ltc2978;
} else if ((chip_id & LTC3880_ID_MASK) == LTC3880_ID) {
data->id = ltc3880;
} else {
dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id);
ret = -ENODEV;
goto err_mem;
return -ENODEV;
}
if (data->id != id->driver_data)
dev_warn(&client->dev,
Expand Down Expand Up @@ -357,27 +355,15 @@ static int ltc2978_probe(struct i2c_client *client,
data->vout_min[1] = 0xffff;
break;
default:
ret = -ENODEV;
goto err_mem;
return -ENODEV;
}

ret = pmbus_do_probe(client, id, info);
if (ret)
goto err_mem;
return 0;

err_mem:
kfree(data);
return ret;
return pmbus_do_probe(client, id, info);
}

static int ltc2978_remove(struct i2c_client *client)
{
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
const struct ltc2978_data *data = to_ltc2978_data(info);

pmbus_do_remove(client);
kfree(data);
return 0;
}

Expand Down
17 changes: 3 additions & 14 deletions trunk/drivers/hwmon/pmbus/pmbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,32 +166,21 @@ static int pmbus_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct pmbus_driver_info *info;
int ret;

info = kzalloc(sizeof(struct pmbus_driver_info), GFP_KERNEL);
info = devm_kzalloc(&client->dev, sizeof(struct pmbus_driver_info),
GFP_KERNEL);
if (!info)
return -ENOMEM;

info->pages = id->driver_data;
info->identify = pmbus_identify;

ret = pmbus_do_probe(client, id, info);
if (ret < 0)
goto out;
return 0;

out:
kfree(info);
return ret;
return pmbus_do_probe(client, id, info);
}

static int pmbus_remove(struct i2c_client *client)
{
const struct pmbus_driver_info *info;

info = pmbus_get_driver_info(client);
pmbus_do_remove(client);
kfree(info);
return 0;
}

Expand Down
54 changes: 18 additions & 36 deletions trunk/drivers/hwmon/pmbus/pmbus_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1676,7 +1676,7 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
| I2C_FUNC_SMBUS_WORD_DATA))
return -ENODEV;

data = kzalloc(sizeof(*data), GFP_KERNEL);
data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
if (!data) {
dev_err(&client->dev, "No memory to allocate driver data\n");
return -ENOMEM;
Expand All @@ -1688,8 +1688,7 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
/* Bail out if PMBus status register does not exist. */
if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0) {
dev_err(&client->dev, "PMBus status register not found\n");
ret = -ENODEV;
goto out_data;
return -ENODEV;
}

if (pdata)
Expand All @@ -1702,50 +1701,49 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
ret = (*info->identify)(client, info);
if (ret < 0) {
dev_err(&client->dev, "Chip identification failed\n");
goto out_data;
return ret;
}
}

if (info->pages <= 0 || info->pages > PMBUS_PAGES) {
dev_err(&client->dev, "Bad number of PMBus pages: %d\n",
info->pages);
ret = -ENODEV;
goto out_data;
return -ENODEV;
}

ret = pmbus_identify_common(client, data);
if (ret < 0) {
dev_err(&client->dev, "Failed to identify chip capabilities\n");
goto out_data;
return ret;
}

ret = -ENOMEM;
data->sensors = kzalloc(sizeof(struct pmbus_sensor) * data->max_sensors,
GFP_KERNEL);
data->sensors = devm_kzalloc(&client->dev, sizeof(struct pmbus_sensor)
* data->max_sensors, GFP_KERNEL);
if (!data->sensors) {
dev_err(&client->dev, "No memory to allocate sensor data\n");
goto out_data;
return -ENOMEM;
}

data->booleans = kzalloc(sizeof(struct pmbus_boolean)
data->booleans = devm_kzalloc(&client->dev, sizeof(struct pmbus_boolean)
* data->max_booleans, GFP_KERNEL);
if (!data->booleans) {
dev_err(&client->dev, "No memory to allocate boolean data\n");
goto out_sensors;
return -ENOMEM;
}

data->labels = kzalloc(sizeof(struct pmbus_label) * data->max_labels,
GFP_KERNEL);
data->labels = devm_kzalloc(&client->dev, sizeof(struct pmbus_label)
* data->max_labels, GFP_KERNEL);
if (!data->labels) {
dev_err(&client->dev, "No memory to allocate label data\n");
goto out_booleans;
return -ENOMEM;
}

data->attributes = kzalloc(sizeof(struct attribute *)
* data->max_attributes, GFP_KERNEL);
data->attributes = devm_kzalloc(&client->dev, sizeof(struct attribute *)
* data->max_attributes, GFP_KERNEL);
if (!data->attributes) {
dev_err(&client->dev, "No memory to allocate attribute data\n");
goto out_labels;
return -ENOMEM;
}

pmbus_find_attributes(client, data);
Expand All @@ -1756,16 +1754,15 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
*/
if (!data->num_attributes) {
dev_err(&client->dev, "No attributes found\n");
ret = -ENODEV;
goto out_attributes;
return -ENODEV;
}

/* Register sysfs hooks */
data->group.attrs = data->attributes;
ret = sysfs_create_group(&client->dev.kobj, &data->group);
if (ret) {
dev_err(&client->dev, "Failed to create sysfs entries\n");
goto out_attributes;
return ret;
}
data->hwmon_dev = hwmon_device_register(&client->dev);
if (IS_ERR(data->hwmon_dev)) {
Expand All @@ -1777,16 +1774,6 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,

out_hwmon_device_register:
sysfs_remove_group(&client->dev.kobj, &data->group);
out_attributes:
kfree(data->attributes);
out_labels:
kfree(data->labels);
out_booleans:
kfree(data->booleans);
out_sensors:
kfree(data->sensors);
out_data:
kfree(data);
return ret;
}
EXPORT_SYMBOL_GPL(pmbus_do_probe);
Expand All @@ -1796,11 +1783,6 @@ void pmbus_do_remove(struct i2c_client *client)
struct pmbus_data *data = i2c_get_clientdata(client);
hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &data->group);
kfree(data->attributes);
kfree(data->labels);
kfree(data->booleans);
kfree(data->sensors);
kfree(data);
}
EXPORT_SYMBOL_GPL(pmbus_do_remove);

Expand Down
Loading

0 comments on commit 16362cd

Please sign in to comment.