static int lm92_probe(struct i2c_client *new_client, const struct i2c_device_id *id) { struct device *hwmon_dev; struct lm92_data *data; data = devm_kzalloc(&new_client->dev, sizeof(struct lm92_data), GFP_KERNEL); if (!data) return -ENOMEM; data->client = new_client; mutex_init(&data->update_lock); /* Initialize the chipset */ lm92_init_client(new_client); hwmon_dev = devm_hwmon_device_register_with_groups(&new_client->dev, new_client->name, data, lm92_groups); return PTR_ERR_OR_ZERO(hwmon_dev); }
static int lm92_probe(struct i2c_client *new_client, const struct i2c_device_id *id) { struct lm92_data *data; int err; data = kzalloc(sizeof(struct lm92_data), GFP_KERNEL); if (!data) { err = -ENOMEM; goto exit; } i2c_set_clientdata(new_client, data); data->valid = 0; mutex_init(&data->update_lock); /* */ lm92_init_client(new_client); /* */ err = sysfs_create_group(&new_client->dev.kobj, &lm92_group); if (err) goto exit_free; data->hwmon_dev = hwmon_device_register(&new_client->dev); if (IS_ERR(data->hwmon_dev)) { err = PTR_ERR(data->hwmon_dev); goto exit_remove; } return 0; exit_remove: sysfs_remove_group(&new_client->dev.kobj, &lm92_group); exit_free: kfree(data); exit: return err; }