diff options
author | Guenter Roeck <linux@roeck-us.net> | 2013-09-04 19:39:12 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2013-10-18 12:11:57 -0400 |
commit | 9d86bd6ba3ba2f254720e2916dfda64737974963 (patch) | |
tree | 12d26e4b22a76308a2db02dd4fc323a96f43e5f9 | |
parent | f3643ac7ffd8bf9a3b0bac8e207529d01bebf269 (diff) |
hwmon: (lm95234) Convert to use devm_hwmon_device_register_with_groups
Also use new macro ATTRIBUTE_GROUPS to declare attribute groups.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r-- | drivers/hwmon/lm95234.c | 137 |
1 files changed, 50 insertions, 87 deletions
diff --git a/drivers/hwmon/lm95234.c b/drivers/hwmon/lm95234.c index 307c9eaeeb9f..cf8750745c88 100644 --- a/drivers/hwmon/lm95234.c +++ b/drivers/hwmon/lm95234.c | |||
@@ -57,7 +57,7 @@ static const unsigned short normal_i2c[] = { 0x18, 0x4d, 0x4e, I2C_CLIENT_END }; | |||
57 | 57 | ||
58 | /* Client data (each client gets its own) */ | 58 | /* Client data (each client gets its own) */ |
59 | struct lm95234_data { | 59 | struct lm95234_data { |
60 | struct device *hwmon_dev; | 60 | struct i2c_client *client; |
61 | struct mutex update_lock; | 61 | struct mutex update_lock; |
62 | unsigned long last_updated, interval; /* in jiffies */ | 62 | unsigned long last_updated, interval; /* in jiffies */ |
63 | bool valid; /* false until following fields are valid */ | 63 | bool valid; /* false until following fields are valid */ |
@@ -114,9 +114,9 @@ static u16 update_intervals[] = { 143, 364, 1000, 2500 }; | |||
114 | 114 | ||
115 | /* Fill value cache. Must be called with update lock held. */ | 115 | /* Fill value cache. Must be called with update lock held. */ |
116 | 116 | ||
117 | static int lm95234_fill_cache(struct i2c_client *client) | 117 | static int lm95234_fill_cache(struct lm95234_data *data, |
118 | struct i2c_client *client) | ||
118 | { | 119 | { |
119 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
120 | int i, ret; | 120 | int i, ret; |
121 | 121 | ||
122 | ret = i2c_smbus_read_byte_data(client, LM95234_REG_CONVRATE); | 122 | ret = i2c_smbus_read_byte_data(client, LM95234_REG_CONVRATE); |
@@ -157,9 +157,9 @@ static int lm95234_fill_cache(struct i2c_client *client) | |||
157 | return 0; | 157 | return 0; |
158 | } | 158 | } |
159 | 159 | ||
160 | static int lm95234_update_device(struct i2c_client *client, | 160 | static int lm95234_update_device(struct lm95234_data *data) |
161 | struct lm95234_data *data) | ||
162 | { | 161 | { |
162 | struct i2c_client *client = data->client; | ||
163 | int ret; | 163 | int ret; |
164 | 164 | ||
165 | mutex_lock(&data->update_lock); | 165 | mutex_lock(&data->update_lock); |
@@ -169,7 +169,7 @@ static int lm95234_update_device(struct i2c_client *client, | |||
169 | int i; | 169 | int i; |
170 | 170 | ||
171 | if (!data->valid) { | 171 | if (!data->valid) { |
172 | ret = lm95234_fill_cache(client); | 172 | ret = lm95234_fill_cache(data, client); |
173 | if (ret < 0) | 173 | if (ret < 0) |
174 | goto abort; | 174 | goto abort; |
175 | } | 175 | } |
@@ -209,10 +209,9 @@ abort: | |||
209 | static ssize_t show_temp(struct device *dev, struct device_attribute *attr, | 209 | static ssize_t show_temp(struct device *dev, struct device_attribute *attr, |
210 | char *buf) | 210 | char *buf) |
211 | { | 211 | { |
212 | struct i2c_client *client = to_i2c_client(dev); | 212 | struct lm95234_data *data = dev_get_drvdata(dev); |
213 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
214 | int index = to_sensor_dev_attr(attr)->index; | 213 | int index = to_sensor_dev_attr(attr)->index; |
215 | int ret = lm95234_update_device(client, data); | 214 | int ret = lm95234_update_device(data); |
216 | 215 | ||
217 | if (ret) | 216 | if (ret) |
218 | return ret; | 217 | return ret; |
@@ -224,10 +223,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr, | |||
224 | static ssize_t show_alarm(struct device *dev, | 223 | static ssize_t show_alarm(struct device *dev, |
225 | struct device_attribute *attr, char *buf) | 224 | struct device_attribute *attr, char *buf) |
226 | { | 225 | { |
227 | struct i2c_client *client = to_i2c_client(dev); | 226 | struct lm95234_data *data = dev_get_drvdata(dev); |
228 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
229 | u32 mask = to_sensor_dev_attr(attr)->index; | 227 | u32 mask = to_sensor_dev_attr(attr)->index; |
230 | int ret = lm95234_update_device(client, data); | 228 | int ret = lm95234_update_device(data); |
231 | 229 | ||
232 | if (ret) | 230 | if (ret) |
233 | return ret; | 231 | return ret; |
@@ -238,10 +236,9 @@ static ssize_t show_alarm(struct device *dev, | |||
238 | static ssize_t show_type(struct device *dev, struct device_attribute *attr, | 236 | static ssize_t show_type(struct device *dev, struct device_attribute *attr, |
239 | char *buf) | 237 | char *buf) |
240 | { | 238 | { |
241 | struct i2c_client *client = to_i2c_client(dev); | 239 | struct lm95234_data *data = dev_get_drvdata(dev); |
242 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
243 | u8 mask = to_sensor_dev_attr(attr)->index; | 240 | u8 mask = to_sensor_dev_attr(attr)->index; |
244 | int ret = lm95234_update_device(client, data); | 241 | int ret = lm95234_update_device(data); |
245 | 242 | ||
246 | if (ret) | 243 | if (ret) |
247 | return ret; | 244 | return ret; |
@@ -252,11 +249,10 @@ static ssize_t show_type(struct device *dev, struct device_attribute *attr, | |||
252 | static ssize_t set_type(struct device *dev, struct device_attribute *attr, | 249 | static ssize_t set_type(struct device *dev, struct device_attribute *attr, |
253 | const char *buf, size_t count) | 250 | const char *buf, size_t count) |
254 | { | 251 | { |
255 | struct i2c_client *client = to_i2c_client(dev); | 252 | struct lm95234_data *data = dev_get_drvdata(dev); |
256 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
257 | unsigned long val; | 253 | unsigned long val; |
258 | u8 mask = to_sensor_dev_attr(attr)->index; | 254 | u8 mask = to_sensor_dev_attr(attr)->index; |
259 | int ret = lm95234_update_device(client, data); | 255 | int ret = lm95234_update_device(data); |
260 | 256 | ||
261 | if (ret) | 257 | if (ret) |
262 | return ret; | 258 | return ret; |
@@ -274,7 +270,7 @@ static ssize_t set_type(struct device *dev, struct device_attribute *attr, | |||
274 | else | 270 | else |
275 | data->sensor_type &= ~mask; | 271 | data->sensor_type &= ~mask; |
276 | data->valid = false; | 272 | data->valid = false; |
277 | i2c_smbus_write_byte_data(client, LM95234_REG_REM_MODEL, | 273 | i2c_smbus_write_byte_data(data->client, LM95234_REG_REM_MODEL, |
278 | data->sensor_type); | 274 | data->sensor_type); |
279 | mutex_unlock(&data->update_lock); | 275 | mutex_unlock(&data->update_lock); |
280 | 276 | ||
@@ -284,10 +280,9 @@ static ssize_t set_type(struct device *dev, struct device_attribute *attr, | |||
284 | static ssize_t show_tcrit2(struct device *dev, struct device_attribute *attr, | 280 | static ssize_t show_tcrit2(struct device *dev, struct device_attribute *attr, |
285 | char *buf) | 281 | char *buf) |
286 | { | 282 | { |
287 | struct i2c_client *client = to_i2c_client(dev); | 283 | struct lm95234_data *data = dev_get_drvdata(dev); |
288 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
289 | int index = to_sensor_dev_attr(attr)->index; | 284 | int index = to_sensor_dev_attr(attr)->index; |
290 | int ret = lm95234_update_device(client, data); | 285 | int ret = lm95234_update_device(data); |
291 | 286 | ||
292 | if (ret) | 287 | if (ret) |
293 | return ret; | 288 | return ret; |
@@ -298,11 +293,10 @@ static ssize_t show_tcrit2(struct device *dev, struct device_attribute *attr, | |||
298 | static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr, | 293 | static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr, |
299 | const char *buf, size_t count) | 294 | const char *buf, size_t count) |
300 | { | 295 | { |
301 | struct i2c_client *client = to_i2c_client(dev); | 296 | struct lm95234_data *data = dev_get_drvdata(dev); |
302 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
303 | int index = to_sensor_dev_attr(attr)->index; | 297 | int index = to_sensor_dev_attr(attr)->index; |
304 | long val; | 298 | long val; |
305 | int ret = lm95234_update_device(client, data); | 299 | int ret = lm95234_update_device(data); |
306 | 300 | ||
307 | if (ret) | 301 | if (ret) |
308 | return ret; | 302 | return ret; |
@@ -315,7 +309,7 @@ static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr, | |||
315 | 309 | ||
316 | mutex_lock(&data->update_lock); | 310 | mutex_lock(&data->update_lock); |
317 | data->tcrit2[index] = val; | 311 | data->tcrit2[index] = val; |
318 | i2c_smbus_write_byte_data(client, LM95234_REG_TCRIT2(index), val); | 312 | i2c_smbus_write_byte_data(data->client, LM95234_REG_TCRIT2(index), val); |
319 | mutex_unlock(&data->update_lock); | 313 | mutex_unlock(&data->update_lock); |
320 | 314 | ||
321 | return count; | 315 | return count; |
@@ -324,10 +318,9 @@ static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr, | |||
324 | static ssize_t show_tcrit2_hyst(struct device *dev, | 318 | static ssize_t show_tcrit2_hyst(struct device *dev, |
325 | struct device_attribute *attr, char *buf) | 319 | struct device_attribute *attr, char *buf) |
326 | { | 320 | { |
327 | struct i2c_client *client = to_i2c_client(dev); | 321 | struct lm95234_data *data = dev_get_drvdata(dev); |
328 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
329 | int index = to_sensor_dev_attr(attr)->index; | 322 | int index = to_sensor_dev_attr(attr)->index; |
330 | int ret = lm95234_update_device(client, data); | 323 | int ret = lm95234_update_device(data); |
331 | 324 | ||
332 | if (ret) | 325 | if (ret) |
333 | return ret; | 326 | return ret; |
@@ -340,8 +333,7 @@ static ssize_t show_tcrit2_hyst(struct device *dev, | |||
340 | static ssize_t show_tcrit1(struct device *dev, struct device_attribute *attr, | 333 | static ssize_t show_tcrit1(struct device *dev, struct device_attribute *attr, |
341 | char *buf) | 334 | char *buf) |
342 | { | 335 | { |
343 | struct i2c_client *client = to_i2c_client(dev); | 336 | struct lm95234_data *data = dev_get_drvdata(dev); |
344 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
345 | int index = to_sensor_dev_attr(attr)->index; | 337 | int index = to_sensor_dev_attr(attr)->index; |
346 | 338 | ||
347 | return sprintf(buf, "%u", data->tcrit1[index] * 1000); | 339 | return sprintf(buf, "%u", data->tcrit1[index] * 1000); |
@@ -350,11 +342,10 @@ static ssize_t show_tcrit1(struct device *dev, struct device_attribute *attr, | |||
350 | static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr, | 342 | static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr, |
351 | const char *buf, size_t count) | 343 | const char *buf, size_t count) |
352 | { | 344 | { |
353 | struct i2c_client *client = to_i2c_client(dev); | 345 | struct lm95234_data *data = dev_get_drvdata(dev); |
354 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
355 | int index = to_sensor_dev_attr(attr)->index; | 346 | int index = to_sensor_dev_attr(attr)->index; |
347 | int ret = lm95234_update_device(data); | ||
356 | long val; | 348 | long val; |
357 | int ret = lm95234_update_device(client, data); | ||
358 | 349 | ||
359 | if (ret) | 350 | if (ret) |
360 | return ret; | 351 | return ret; |
@@ -367,7 +358,7 @@ static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr, | |||
367 | 358 | ||
368 | mutex_lock(&data->update_lock); | 359 | mutex_lock(&data->update_lock); |
369 | data->tcrit1[index] = val; | 360 | data->tcrit1[index] = val; |
370 | i2c_smbus_write_byte_data(client, LM95234_REG_TCRIT1(index), val); | 361 | i2c_smbus_write_byte_data(data->client, LM95234_REG_TCRIT1(index), val); |
371 | mutex_unlock(&data->update_lock); | 362 | mutex_unlock(&data->update_lock); |
372 | 363 | ||
373 | return count; | 364 | return count; |
@@ -376,10 +367,9 @@ static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr, | |||
376 | static ssize_t show_tcrit1_hyst(struct device *dev, | 367 | static ssize_t show_tcrit1_hyst(struct device *dev, |
377 | struct device_attribute *attr, char *buf) | 368 | struct device_attribute *attr, char *buf) |
378 | { | 369 | { |
379 | struct i2c_client *client = to_i2c_client(dev); | 370 | struct lm95234_data *data = dev_get_drvdata(dev); |
380 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
381 | int index = to_sensor_dev_attr(attr)->index; | 371 | int index = to_sensor_dev_attr(attr)->index; |
382 | int ret = lm95234_update_device(client, data); | 372 | int ret = lm95234_update_device(data); |
383 | 373 | ||
384 | if (ret) | 374 | if (ret) |
385 | return ret; | 375 | return ret; |
@@ -393,11 +383,10 @@ static ssize_t set_tcrit1_hyst(struct device *dev, | |||
393 | struct device_attribute *attr, | 383 | struct device_attribute *attr, |
394 | const char *buf, size_t count) | 384 | const char *buf, size_t count) |
395 | { | 385 | { |
396 | struct i2c_client *client = to_i2c_client(dev); | 386 | struct lm95234_data *data = dev_get_drvdata(dev); |
397 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
398 | int index = to_sensor_dev_attr(attr)->index; | 387 | int index = to_sensor_dev_attr(attr)->index; |
388 | int ret = lm95234_update_device(data); | ||
399 | long val; | 389 | long val; |
400 | int ret = lm95234_update_device(client, data); | ||
401 | 390 | ||
402 | if (ret) | 391 | if (ret) |
403 | return ret; | 392 | return ret; |
@@ -411,7 +400,7 @@ static ssize_t set_tcrit1_hyst(struct device *dev, | |||
411 | 400 | ||
412 | mutex_lock(&data->update_lock); | 401 | mutex_lock(&data->update_lock); |
413 | data->thyst = val; | 402 | data->thyst = val; |
414 | i2c_smbus_write_byte_data(client, LM95234_REG_TCRIT_HYST, val); | 403 | i2c_smbus_write_byte_data(data->client, LM95234_REG_TCRIT_HYST, val); |
415 | mutex_unlock(&data->update_lock); | 404 | mutex_unlock(&data->update_lock); |
416 | 405 | ||
417 | return count; | 406 | return count; |
@@ -420,10 +409,9 @@ static ssize_t set_tcrit1_hyst(struct device *dev, | |||
420 | static ssize_t show_offset(struct device *dev, struct device_attribute *attr, | 409 | static ssize_t show_offset(struct device *dev, struct device_attribute *attr, |
421 | char *buf) | 410 | char *buf) |
422 | { | 411 | { |
423 | struct i2c_client *client = to_i2c_client(dev); | 412 | struct lm95234_data *data = dev_get_drvdata(dev); |
424 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
425 | int index = to_sensor_dev_attr(attr)->index; | 413 | int index = to_sensor_dev_attr(attr)->index; |
426 | int ret = lm95234_update_device(client, data); | 414 | int ret = lm95234_update_device(data); |
427 | 415 | ||
428 | if (ret) | 416 | if (ret) |
429 | return ret; | 417 | return ret; |
@@ -434,11 +422,10 @@ static ssize_t show_offset(struct device *dev, struct device_attribute *attr, | |||
434 | static ssize_t set_offset(struct device *dev, struct device_attribute *attr, | 422 | static ssize_t set_offset(struct device *dev, struct device_attribute *attr, |
435 | const char *buf, size_t count) | 423 | const char *buf, size_t count) |
436 | { | 424 | { |
437 | struct i2c_client *client = to_i2c_client(dev); | 425 | struct lm95234_data *data = dev_get_drvdata(dev); |
438 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
439 | int index = to_sensor_dev_attr(attr)->index; | 426 | int index = to_sensor_dev_attr(attr)->index; |
427 | int ret = lm95234_update_device(data); | ||
440 | long val; | 428 | long val; |
441 | int ret = lm95234_update_device(client, data); | ||
442 | 429 | ||
443 | if (ret) | 430 | if (ret) |
444 | return ret; | 431 | return ret; |
@@ -452,7 +439,7 @@ static ssize_t set_offset(struct device *dev, struct device_attribute *attr, | |||
452 | 439 | ||
453 | mutex_lock(&data->update_lock); | 440 | mutex_lock(&data->update_lock); |
454 | data->toffset[index] = val; | 441 | data->toffset[index] = val; |
455 | i2c_smbus_write_byte_data(client, LM95234_REG_OFFSET(index), val); | 442 | i2c_smbus_write_byte_data(data->client, LM95234_REG_OFFSET(index), val); |
456 | mutex_unlock(&data->update_lock); | 443 | mutex_unlock(&data->update_lock); |
457 | 444 | ||
458 | return count; | 445 | return count; |
@@ -461,9 +448,8 @@ static ssize_t set_offset(struct device *dev, struct device_attribute *attr, | |||
461 | static ssize_t show_interval(struct device *dev, struct device_attribute *attr, | 448 | static ssize_t show_interval(struct device *dev, struct device_attribute *attr, |
462 | char *buf) | 449 | char *buf) |
463 | { | 450 | { |
464 | struct i2c_client *client = to_i2c_client(dev); | 451 | struct lm95234_data *data = dev_get_drvdata(dev); |
465 | struct lm95234_data *data = i2c_get_clientdata(client); | 452 | int ret = lm95234_update_device(data); |
466 | int ret = lm95234_update_device(client, data); | ||
467 | 453 | ||
468 | if (ret) | 454 | if (ret) |
469 | return ret; | 455 | return ret; |
@@ -475,11 +461,10 @@ static ssize_t show_interval(struct device *dev, struct device_attribute *attr, | |||
475 | static ssize_t set_interval(struct device *dev, struct device_attribute *attr, | 461 | static ssize_t set_interval(struct device *dev, struct device_attribute *attr, |
476 | const char *buf, size_t count) | 462 | const char *buf, size_t count) |
477 | { | 463 | { |
478 | struct i2c_client *client = to_i2c_client(dev); | 464 | struct lm95234_data *data = dev_get_drvdata(dev); |
479 | struct lm95234_data *data = i2c_get_clientdata(client); | 465 | int ret = lm95234_update_device(data); |
480 | unsigned long val; | 466 | unsigned long val; |
481 | u8 regval; | 467 | u8 regval; |
482 | int ret = lm95234_update_device(client, data); | ||
483 | 468 | ||
484 | if (ret) | 469 | if (ret) |
485 | return ret; | 470 | return ret; |
@@ -495,7 +480,7 @@ static ssize_t set_interval(struct device *dev, struct device_attribute *attr, | |||
495 | 480 | ||
496 | mutex_lock(&data->update_lock); | 481 | mutex_lock(&data->update_lock); |
497 | data->interval = msecs_to_jiffies(update_intervals[regval]); | 482 | data->interval = msecs_to_jiffies(update_intervals[regval]); |
498 | i2c_smbus_write_byte_data(client, LM95234_REG_CONVRATE, regval); | 483 | i2c_smbus_write_byte_data(data->client, LM95234_REG_CONVRATE, regval); |
499 | mutex_unlock(&data->update_lock); | 484 | mutex_unlock(&data->update_lock); |
500 | 485 | ||
501 | return count; | 486 | return count; |
@@ -579,7 +564,7 @@ static SENSOR_DEVICE_ATTR(temp5_offset, S_IWUSR | S_IRUGO, show_offset, | |||
579 | static DEVICE_ATTR(update_interval, S_IWUSR | S_IRUGO, show_interval, | 564 | static DEVICE_ATTR(update_interval, S_IWUSR | S_IRUGO, show_interval, |
580 | set_interval); | 565 | set_interval); |
581 | 566 | ||
582 | static struct attribute *lm95234_attributes[] = { | 567 | static struct attribute *lm95234_attrs[] = { |
583 | &sensor_dev_attr_temp1_input.dev_attr.attr, | 568 | &sensor_dev_attr_temp1_input.dev_attr.attr, |
584 | &sensor_dev_attr_temp2_input.dev_attr.attr, | 569 | &sensor_dev_attr_temp2_input.dev_attr.attr, |
585 | &sensor_dev_attr_temp3_input.dev_attr.attr, | 570 | &sensor_dev_attr_temp3_input.dev_attr.attr, |
@@ -621,10 +606,7 @@ static struct attribute *lm95234_attributes[] = { | |||
621 | &dev_attr_update_interval.attr, | 606 | &dev_attr_update_interval.attr, |
622 | NULL | 607 | NULL |
623 | }; | 608 | }; |
624 | 609 | ATTRIBUTE_GROUPS(lm95234); | |
625 | static const struct attribute_group lm95234_group = { | ||
626 | .attrs = lm95234_attributes, | ||
627 | }; | ||
628 | 610 | ||
629 | static int lm95234_detect(struct i2c_client *client, | 611 | static int lm95234_detect(struct i2c_client *client, |
630 | struct i2c_board_info *info) | 612 | struct i2c_board_info *info) |
@@ -701,13 +683,14 @@ static int lm95234_probe(struct i2c_client *client, | |||
701 | { | 683 | { |
702 | struct device *dev = &client->dev; | 684 | struct device *dev = &client->dev; |
703 | struct lm95234_data *data; | 685 | struct lm95234_data *data; |
686 | struct device *hwmon_dev; | ||
704 | int err; | 687 | int err; |
705 | 688 | ||
706 | data = devm_kzalloc(dev, sizeof(struct lm95234_data), GFP_KERNEL); | 689 | data = devm_kzalloc(dev, sizeof(struct lm95234_data), GFP_KERNEL); |
707 | if (!data) | 690 | if (!data) |
708 | return -ENOMEM; | 691 | return -ENOMEM; |
709 | 692 | ||
710 | i2c_set_clientdata(client, data); | 693 | data->client = client; |
711 | mutex_init(&data->update_lock); | 694 | mutex_init(&data->update_lock); |
712 | 695 | ||
713 | /* Initialize the LM95234 chip */ | 696 | /* Initialize the LM95234 chip */ |
@@ -715,30 +698,11 @@ static int lm95234_probe(struct i2c_client *client, | |||
715 | if (err < 0) | 698 | if (err < 0) |
716 | return err; | 699 | return err; |
717 | 700 | ||
718 | /* Register sysfs hooks */ | 701 | hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, |
719 | err = sysfs_create_group(&dev->kobj, &lm95234_group); | 702 | data, |
720 | if (err) | 703 | lm95234_groups); |
721 | return err; | 704 | if (IS_ERR(hwmon_dev)) |
722 | 705 | return PTR_ERR(hwmon_dev); | |
723 | data->hwmon_dev = hwmon_device_register(dev); | ||
724 | if (IS_ERR(data->hwmon_dev)) { | ||
725 | err = PTR_ERR(data->hwmon_dev); | ||
726 | goto exit_remove_files; | ||
727 | } | ||
728 | |||
729 | return 0; | ||
730 | |||
731 | exit_remove_files: | ||
732 | sysfs_remove_group(&dev->kobj, &lm95234_group); | ||
733 | return err; | ||
734 | } | ||
735 | |||
736 | static int lm95234_remove(struct i2c_client *client) | ||
737 | { | ||
738 | struct lm95234_data *data = i2c_get_clientdata(client); | ||
739 | |||
740 | hwmon_device_unregister(data->hwmon_dev); | ||
741 | sysfs_remove_group(&client->dev.kobj, &lm95234_group); | ||
742 | 706 | ||
743 | return 0; | 707 | return 0; |
744 | } | 708 | } |
@@ -756,7 +720,6 @@ static struct i2c_driver lm95234_driver = { | |||
756 | .name = DRVNAME, | 720 | .name = DRVNAME, |
757 | }, | 721 | }, |
758 | .probe = lm95234_probe, | 722 | .probe = lm95234_probe, |
759 | .remove = lm95234_remove, | ||
760 | .id_table = lm95234_id, | 723 | .id_table = lm95234_id, |
761 | .detect = lm95234_detect, | 724 | .detect = lm95234_detect, |
762 | .address_list = normal_i2c, | 725 | .address_list = normal_i2c, |