diff options
-rw-r--r-- | drivers/hwmon/pc87360.c | 775 |
1 files changed, 405 insertions, 370 deletions
diff --git a/drivers/hwmon/pc87360.c b/drivers/hwmon/pc87360.c index 08fcb5aea764..2e5a659db58c 100644 --- a/drivers/hwmon/pc87360.c +++ b/drivers/hwmon/pc87360.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/i2c.h> | 40 | #include <linux/i2c.h> |
41 | #include <linux/i2c-isa.h> | 41 | #include <linux/i2c-isa.h> |
42 | #include <linux/hwmon.h> | 42 | #include <linux/hwmon.h> |
43 | #include <linux/hwmon-sysfs.h> | ||
43 | #include <linux/hwmon-vid.h> | 44 | #include <linux/hwmon-vid.h> |
44 | #include <linux/err.h> | 45 | #include <linux/err.h> |
45 | #include <asm/io.h> | 46 | #include <asm/io.h> |
@@ -245,7 +246,7 @@ static struct i2c_driver pc87360_driver = { | |||
245 | * Sysfs stuff | 246 | * Sysfs stuff |
246 | */ | 247 | */ |
247 | 248 | ||
248 | static ssize_t set_fan_min(struct device *dev, const char *buf, | 249 | static ssize_t _set_fan_min(struct device *dev, const char *buf, |
249 | size_t count, int nr) | 250 | size_t count, int nr) |
250 | { | 251 | { |
251 | struct i2c_client *client = to_i2c_client(dev); | 252 | struct i2c_client *client = to_i2c_client(dev); |
@@ -274,139 +275,155 @@ static ssize_t set_fan_min(struct device *dev, const char *buf, | |||
274 | return count; | 275 | return count; |
275 | } | 276 | } |
276 | 277 | ||
278 | static ssize_t show_fan_input(struct device *dev, struct device_attribute *devattr, char *buf) | ||
279 | { | ||
280 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
281 | struct pc87360_data *data = pc87360_update_device(dev); | ||
282 | return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan[attr->index-1], | ||
283 | FAN_DIV_FROM_REG(data->fan_status[attr->index-1]))); | ||
284 | } | ||
285 | static ssize_t show_fan_min(struct device *dev, struct device_attribute *devattr, char *buf) | ||
286 | { | ||
287 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
288 | struct pc87360_data *data = pc87360_update_device(dev); | ||
289 | return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan_min[attr->index-1], | ||
290 | FAN_DIV_FROM_REG(data->fan_status[attr->index-1]))); | ||
291 | } | ||
292 | static ssize_t show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf) | ||
293 | { | ||
294 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
295 | struct pc87360_data *data = pc87360_update_device(dev); | ||
296 | return sprintf(buf, "%u\n", | ||
297 | FAN_DIV_FROM_REG(data->fan_status[attr->index-1])); | ||
298 | } | ||
299 | static ssize_t show_fan_status(struct device *dev, struct device_attribute *devattr, char *buf) | ||
300 | { | ||
301 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
302 | struct pc87360_data *data = pc87360_update_device(dev); | ||
303 | return sprintf(buf, "%u\n", | ||
304 | FAN_STATUS_FROM_REG(data->fan_status[attr->index-1])); | ||
305 | } | ||
306 | static ssize_t set_fan_min(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
307 | size_t count) | ||
308 | { | ||
309 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
310 | return _set_fan_min(dev, buf, count, attr->index-1); | ||
311 | } | ||
312 | |||
277 | #define show_and_set_fan(offset) \ | 313 | #define show_and_set_fan(offset) \ |
278 | static ssize_t show_fan##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \ | 314 | static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ |
279 | { \ | 315 | show_fan_input, NULL, offset); \ |
280 | struct pc87360_data *data = pc87360_update_device(dev); \ | 316 | static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IWUSR | S_IRUGO, \ |
281 | return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan[offset-1], \ | 317 | show_fan_min, set_fan_min, offset); \ |
282 | FAN_DIV_FROM_REG(data->fan_status[offset-1]))); \ | 318 | static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO, \ |
283 | } \ | 319 | show_fan_div, NULL, offset); \ |
284 | static ssize_t show_fan##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ | 320 | static SENSOR_DEVICE_ATTR(fan##offset##_status, S_IRUGO, \ |
285 | { \ | 321 | show_fan_status, NULL, offset); |
286 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
287 | return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan_min[offset-1], \ | ||
288 | FAN_DIV_FROM_REG(data->fan_status[offset-1]))); \ | ||
289 | } \ | ||
290 | static ssize_t show_fan##offset##_div(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
291 | { \ | ||
292 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
293 | return sprintf(buf, "%u\n", \ | ||
294 | FAN_DIV_FROM_REG(data->fan_status[offset-1])); \ | ||
295 | } \ | ||
296 | static ssize_t show_fan##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
297 | { \ | ||
298 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
299 | return sprintf(buf, "%u\n", \ | ||
300 | FAN_STATUS_FROM_REG(data->fan_status[offset-1])); \ | ||
301 | } \ | ||
302 | static ssize_t set_fan##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
303 | size_t count) \ | ||
304 | { \ | ||
305 | return set_fan_min(dev, buf, count, offset-1); \ | ||
306 | } \ | ||
307 | static DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ | ||
308 | show_fan##offset##_input, NULL); \ | ||
309 | static DEVICE_ATTR(fan##offset##_min, S_IWUSR | S_IRUGO, \ | ||
310 | show_fan##offset##_min, set_fan##offset##_min); \ | ||
311 | static DEVICE_ATTR(fan##offset##_div, S_IRUGO, \ | ||
312 | show_fan##offset##_div, NULL); \ | ||
313 | static DEVICE_ATTR(fan##offset##_status, S_IRUGO, \ | ||
314 | show_fan##offset##_status, NULL); | ||
315 | show_and_set_fan(1) | 322 | show_and_set_fan(1) |
316 | show_and_set_fan(2) | 323 | show_and_set_fan(2) |
317 | show_and_set_fan(3) | 324 | show_and_set_fan(3) |
318 | 325 | ||
326 | static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr, char *buf) | ||
327 | { | ||
328 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
329 | struct pc87360_data *data = pc87360_update_device(dev); | ||
330 | return sprintf(buf, "%u\n", | ||
331 | PWM_FROM_REG(data->pwm[attr->index-1], | ||
332 | FAN_CONFIG_INVERT(data->fan_conf, | ||
333 | attr->index-1))); | ||
334 | } | ||
335 | static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
336 | size_t count) | ||
337 | { | ||
338 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
339 | struct i2c_client *client = to_i2c_client(dev); | ||
340 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
341 | long val = simple_strtol(buf, NULL, 10); | ||
342 | |||
343 | down(&data->update_lock); | ||
344 | data->pwm[attr->index-1] = PWM_TO_REG(val, | ||
345 | FAN_CONFIG_INVERT(data->fan_conf, attr->index-1)); | ||
346 | pc87360_write_value(data, LD_FAN, NO_BANK, PC87360_REG_PWM(attr->index-1), | ||
347 | data->pwm[attr->index-1]); | ||
348 | up(&data->update_lock); | ||
349 | return count; | ||
350 | } | ||
351 | |||
319 | #define show_and_set_pwm(offset) \ | 352 | #define show_and_set_pwm(offset) \ |
320 | static ssize_t show_pwm##offset(struct device *dev, struct device_attribute *attr, char *buf) \ | 353 | static SENSOR_DEVICE_ATTR(pwm##offset, S_IWUSR | S_IRUGO, \ |
321 | { \ | 354 | show_pwm, set_pwm, offset); |
322 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
323 | return sprintf(buf, "%u\n", \ | ||
324 | PWM_FROM_REG(data->pwm[offset-1], \ | ||
325 | FAN_CONFIG_INVERT(data->fan_conf, \ | ||
326 | offset-1))); \ | ||
327 | } \ | ||
328 | static ssize_t set_pwm##offset(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
329 | size_t count) \ | ||
330 | { \ | ||
331 | struct i2c_client *client = to_i2c_client(dev); \ | ||
332 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
333 | long val = simple_strtol(buf, NULL, 10); \ | ||
334 | \ | ||
335 | down(&data->update_lock); \ | ||
336 | data->pwm[offset-1] = PWM_TO_REG(val, \ | ||
337 | FAN_CONFIG_INVERT(data->fan_conf, offset-1)); \ | ||
338 | pc87360_write_value(data, LD_FAN, NO_BANK, PC87360_REG_PWM(offset-1), \ | ||
339 | data->pwm[offset-1]); \ | ||
340 | up(&data->update_lock); \ | ||
341 | return count; \ | ||
342 | } \ | ||
343 | static DEVICE_ATTR(pwm##offset, S_IWUSR | S_IRUGO, \ | ||
344 | show_pwm##offset, set_pwm##offset); | ||
345 | show_and_set_pwm(1) | 355 | show_and_set_pwm(1) |
346 | show_and_set_pwm(2) | 356 | show_and_set_pwm(2) |
347 | show_and_set_pwm(3) | 357 | show_and_set_pwm(3) |
348 | 358 | ||
359 | static ssize_t show_in_input(struct device *dev, struct device_attribute *devattr, char *buf) | ||
360 | { | ||
361 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
362 | struct pc87360_data *data = pc87360_update_device(dev); | ||
363 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in[attr->index], | ||
364 | data->in_vref)); | ||
365 | } | ||
366 | static ssize_t show_in_min(struct device *dev, struct device_attribute *devattr, char *buf) | ||
367 | { | ||
368 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
369 | struct pc87360_data *data = pc87360_update_device(dev); | ||
370 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[attr->index], | ||
371 | data->in_vref)); | ||
372 | } | ||
373 | static ssize_t show_in_max(struct device *dev, struct device_attribute *devattr, char *buf) | ||
374 | { | ||
375 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
376 | struct pc87360_data *data = pc87360_update_device(dev); | ||
377 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[attr->index], | ||
378 | data->in_vref)); | ||
379 | } | ||
380 | static ssize_t show_in_status(struct device *dev, struct device_attribute *devattr, char *buf) | ||
381 | { | ||
382 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
383 | struct pc87360_data *data = pc87360_update_device(dev); | ||
384 | return sprintf(buf, "%u\n", data->in_status[attr->index]); | ||
385 | } | ||
386 | static ssize_t set_in_min(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
387 | size_t count) | ||
388 | { | ||
389 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
390 | struct i2c_client *client = to_i2c_client(dev); | ||
391 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
392 | long val = simple_strtol(buf, NULL, 10); | ||
393 | |||
394 | down(&data->update_lock); | ||
395 | data->in_min[attr->index] = IN_TO_REG(val, data->in_vref); | ||
396 | pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_IN_MIN, | ||
397 | data->in_min[attr->index]); | ||
398 | up(&data->update_lock); | ||
399 | return count; | ||
400 | } | ||
401 | static ssize_t set_in_max(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
402 | size_t count) | ||
403 | { | ||
404 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
405 | struct i2c_client *client = to_i2c_client(dev); | ||
406 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
407 | long val = simple_strtol(buf, NULL, 10); | ||
408 | |||
409 | down(&data->update_lock); | ||
410 | data->in_max[attr->index] = IN_TO_REG(val, | ||
411 | data->in_vref); | ||
412 | pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_IN_MAX, | ||
413 | data->in_max[attr->index]); | ||
414 | up(&data->update_lock); | ||
415 | return count; | ||
416 | } | ||
417 | |||
349 | #define show_and_set_in(offset) \ | 418 | #define show_and_set_in(offset) \ |
350 | static ssize_t show_in##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \ | 419 | static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \ |
351 | { \ | 420 | show_in_input, NULL, offset); \ |
352 | struct pc87360_data *data = pc87360_update_device(dev); \ | 421 | static SENSOR_DEVICE_ATTR(in##offset##_min, S_IWUSR | S_IRUGO, \ |
353 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in[offset], \ | 422 | show_in_min, set_in_min, offset); \ |
354 | data->in_vref)); \ | 423 | static SENSOR_DEVICE_ATTR(in##offset##_max, S_IWUSR | S_IRUGO, \ |
355 | } \ | 424 | show_in_max, set_in_max, offset); \ |
356 | static ssize_t show_in##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ | 425 | static SENSOR_DEVICE_ATTR(in##offset##_status, S_IRUGO, \ |
357 | { \ | 426 | show_in_status, NULL, offset); |
358 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
359 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[offset], \ | ||
360 | data->in_vref)); \ | ||
361 | } \ | ||
362 | static ssize_t show_in##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
363 | { \ | ||
364 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
365 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[offset], \ | ||
366 | data->in_vref)); \ | ||
367 | } \ | ||
368 | static ssize_t show_in##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
369 | { \ | ||
370 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
371 | return sprintf(buf, "%u\n", data->in_status[offset]); \ | ||
372 | } \ | ||
373 | static ssize_t set_in##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
374 | size_t count) \ | ||
375 | { \ | ||
376 | struct i2c_client *client = to_i2c_client(dev); \ | ||
377 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
378 | long val = simple_strtol(buf, NULL, 10); \ | ||
379 | \ | ||
380 | down(&data->update_lock); \ | ||
381 | data->in_min[offset] = IN_TO_REG(val, data->in_vref); \ | ||
382 | pc87360_write_value(data, LD_IN, offset, PC87365_REG_IN_MIN, \ | ||
383 | data->in_min[offset]); \ | ||
384 | up(&data->update_lock); \ | ||
385 | return count; \ | ||
386 | } \ | ||
387 | static ssize_t set_in##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
388 | size_t count) \ | ||
389 | { \ | ||
390 | struct i2c_client *client = to_i2c_client(dev); \ | ||
391 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
392 | long val = simple_strtol(buf, NULL, 10); \ | ||
393 | \ | ||
394 | down(&data->update_lock); \ | ||
395 | data->in_max[offset] = IN_TO_REG(val, \ | ||
396 | data->in_vref); \ | ||
397 | pc87360_write_value(data, LD_IN, offset, PC87365_REG_IN_MAX, \ | ||
398 | data->in_max[offset]); \ | ||
399 | up(&data->update_lock); \ | ||
400 | return count; \ | ||
401 | } \ | ||
402 | static DEVICE_ATTR(in##offset##_input, S_IRUGO, \ | ||
403 | show_in##offset##_input, NULL); \ | ||
404 | static DEVICE_ATTR(in##offset##_min, S_IWUSR | S_IRUGO, \ | ||
405 | show_in##offset##_min, set_in##offset##_min); \ | ||
406 | static DEVICE_ATTR(in##offset##_max, S_IWUSR | S_IRUGO, \ | ||
407 | show_in##offset##_max, set_in##offset##_max); \ | ||
408 | static DEVICE_ATTR(in##offset##_status, S_IRUGO, \ | ||
409 | show_in##offset##_status, NULL); | ||
410 | show_and_set_in(0) | 427 | show_and_set_in(0) |
411 | show_and_set_in(1) | 428 | show_and_set_in(1) |
412 | show_and_set_in(2) | 429 | show_and_set_in(2) |
@@ -419,88 +436,97 @@ show_and_set_in(8) | |||
419 | show_and_set_in(9) | 436 | show_and_set_in(9) |
420 | show_and_set_in(10) | 437 | show_and_set_in(10) |
421 | 438 | ||
439 | static ssize_t show_therm_input(struct device *dev, struct device_attribute *devattr, char *buf) | ||
440 | { | ||
441 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
442 | struct pc87360_data *data = pc87360_update_device(dev); | ||
443 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in[attr->index+7], | ||
444 | data->in_vref)); | ||
445 | } | ||
446 | static ssize_t show_therm_min(struct device *dev, struct device_attribute *devattr, char *buf) | ||
447 | { | ||
448 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
449 | struct pc87360_data *data = pc87360_update_device(dev); | ||
450 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[attr->index+7], | ||
451 | data->in_vref)); | ||
452 | } | ||
453 | static ssize_t show_therm_max(struct device *dev, struct device_attribute *devattr, char *buf) | ||
454 | { | ||
455 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
456 | struct pc87360_data *data = pc87360_update_device(dev); | ||
457 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[attr->index+7], | ||
458 | data->in_vref)); | ||
459 | } | ||
460 | static ssize_t show_therm_crit(struct device *dev, struct device_attribute *devattr, char *buf) | ||
461 | { | ||
462 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
463 | struct pc87360_data *data = pc87360_update_device(dev); | ||
464 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_crit[attr->index-4], | ||
465 | data->in_vref)); | ||
466 | } | ||
467 | static ssize_t show_therm_status(struct device *dev, struct device_attribute *devattr, char *buf) | ||
468 | { | ||
469 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
470 | struct pc87360_data *data = pc87360_update_device(dev); | ||
471 | return sprintf(buf, "%u\n", data->in_status[attr->index+7]); | ||
472 | } | ||
473 | static ssize_t set_therm_min(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
474 | size_t count) | ||
475 | { | ||
476 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
477 | struct i2c_client *client = to_i2c_client(dev); | ||
478 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
479 | long val = simple_strtol(buf, NULL, 10); | ||
480 | |||
481 | down(&data->update_lock); | ||
482 | data->in_min[attr->index+7] = IN_TO_REG(val, data->in_vref); | ||
483 | pc87360_write_value(data, LD_IN, attr->index+7, PC87365_REG_TEMP_MIN, | ||
484 | data->in_min[attr->index+7]); | ||
485 | up(&data->update_lock); | ||
486 | return count; | ||
487 | } | ||
488 | static ssize_t set_therm_max(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
489 | size_t count) | ||
490 | { | ||
491 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
492 | struct i2c_client *client = to_i2c_client(dev); | ||
493 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
494 | long val = simple_strtol(buf, NULL, 10); | ||
495 | |||
496 | down(&data->update_lock); | ||
497 | data->in_max[attr->index+7] = IN_TO_REG(val, data->in_vref); | ||
498 | pc87360_write_value(data, LD_IN, attr->index+7, PC87365_REG_TEMP_MAX, | ||
499 | data->in_max[attr->index+7]); | ||
500 | up(&data->update_lock); | ||
501 | return count; | ||
502 | } | ||
503 | static ssize_t set_therm_crit(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
504 | size_t count) | ||
505 | { | ||
506 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
507 | struct i2c_client *client = to_i2c_client(dev); | ||
508 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
509 | long val = simple_strtol(buf, NULL, 10); | ||
510 | |||
511 | down(&data->update_lock); | ||
512 | data->in_crit[attr->index-4] = IN_TO_REG(val, data->in_vref); | ||
513 | pc87360_write_value(data, LD_IN, attr->index+7, PC87365_REG_TEMP_CRIT, | ||
514 | data->in_crit[attr->index-4]); | ||
515 | up(&data->update_lock); | ||
516 | return count; | ||
517 | } | ||
518 | |||
422 | #define show_and_set_therm(offset) \ | 519 | #define show_and_set_therm(offset) \ |
423 | static ssize_t show_temp##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \ | 520 | static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ |
424 | { \ | 521 | show_therm_input, NULL, offset); \ |
425 | struct pc87360_data *data = pc87360_update_device(dev); \ | 522 | static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \ |
426 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in[offset+7], \ | 523 | show_therm_min, set_therm_min, offset); \ |
427 | data->in_vref)); \ | 524 | static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \ |
428 | } \ | 525 | show_therm_max, set_therm_max, offset); \ |
429 | static ssize_t show_temp##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ | 526 | static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IWUSR | S_IRUGO, \ |
430 | { \ | 527 | show_therm_crit, set_therm_crit, offset); \ |
431 | struct pc87360_data *data = pc87360_update_device(dev); \ | 528 | static SENSOR_DEVICE_ATTR(temp##offset##_status, S_IRUGO, \ |
432 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[offset+7], \ | 529 | show_therm_status, NULL, offset); |
433 | data->in_vref)); \ | ||
434 | } \ | ||
435 | static ssize_t show_temp##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
436 | { \ | ||
437 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
438 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[offset+7], \ | ||
439 | data->in_vref)); \ | ||
440 | } \ | ||
441 | static ssize_t show_temp##offset##_crit(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
442 | { \ | ||
443 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
444 | return sprintf(buf, "%u\n", IN_FROM_REG(data->in_crit[offset-4], \ | ||
445 | data->in_vref)); \ | ||
446 | } \ | ||
447 | static ssize_t show_temp##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
448 | { \ | ||
449 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
450 | return sprintf(buf, "%u\n", data->in_status[offset+7]); \ | ||
451 | } \ | ||
452 | static ssize_t set_temp##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
453 | size_t count) \ | ||
454 | { \ | ||
455 | struct i2c_client *client = to_i2c_client(dev); \ | ||
456 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
457 | long val = simple_strtol(buf, NULL, 10); \ | ||
458 | \ | ||
459 | down(&data->update_lock); \ | ||
460 | data->in_min[offset+7] = IN_TO_REG(val, data->in_vref); \ | ||
461 | pc87360_write_value(data, LD_IN, offset+7, PC87365_REG_TEMP_MIN, \ | ||
462 | data->in_min[offset+7]); \ | ||
463 | up(&data->update_lock); \ | ||
464 | return count; \ | ||
465 | } \ | ||
466 | static ssize_t set_temp##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
467 | size_t count) \ | ||
468 | { \ | ||
469 | struct i2c_client *client = to_i2c_client(dev); \ | ||
470 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
471 | long val = simple_strtol(buf, NULL, 10); \ | ||
472 | \ | ||
473 | down(&data->update_lock); \ | ||
474 | data->in_max[offset+7] = IN_TO_REG(val, data->in_vref); \ | ||
475 | pc87360_write_value(data, LD_IN, offset+7, PC87365_REG_TEMP_MAX, \ | ||
476 | data->in_max[offset+7]); \ | ||
477 | up(&data->update_lock); \ | ||
478 | return count; \ | ||
479 | } \ | ||
480 | static ssize_t set_temp##offset##_crit(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
481 | size_t count) \ | ||
482 | { \ | ||
483 | struct i2c_client *client = to_i2c_client(dev); \ | ||
484 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
485 | long val = simple_strtol(buf, NULL, 10); \ | ||
486 | \ | ||
487 | down(&data->update_lock); \ | ||
488 | data->in_crit[offset-4] = IN_TO_REG(val, data->in_vref); \ | ||
489 | pc87360_write_value(data, LD_IN, offset+7, PC87365_REG_TEMP_CRIT, \ | ||
490 | data->in_crit[offset-4]); \ | ||
491 | up(&data->update_lock); \ | ||
492 | return count; \ | ||
493 | } \ | ||
494 | static DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ | ||
495 | show_temp##offset##_input, NULL); \ | ||
496 | static DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \ | ||
497 | show_temp##offset##_min, set_temp##offset##_min); \ | ||
498 | static DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \ | ||
499 | show_temp##offset##_max, set_temp##offset##_max); \ | ||
500 | static DEVICE_ATTR(temp##offset##_crit, S_IWUSR | S_IRUGO, \ | ||
501 | show_temp##offset##_crit, set_temp##offset##_crit); \ | ||
502 | static DEVICE_ATTR(temp##offset##_status, S_IRUGO, \ | ||
503 | show_temp##offset##_status, NULL); | ||
504 | show_and_set_therm(4) | 530 | show_and_set_therm(4) |
505 | show_and_set_therm(5) | 531 | show_and_set_therm(5) |
506 | show_and_set_therm(6) | 532 | show_and_set_therm(6) |
@@ -533,84 +559,93 @@ static ssize_t show_in_alarms(struct device *dev, struct device_attribute *attr, | |||
533 | } | 559 | } |
534 | static DEVICE_ATTR(alarms_in, S_IRUGO, show_in_alarms, NULL); | 560 | static DEVICE_ATTR(alarms_in, S_IRUGO, show_in_alarms, NULL); |
535 | 561 | ||
562 | static ssize_t show_temp_input(struct device *dev, struct device_attribute *devattr, char *buf) | ||
563 | { | ||
564 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
565 | struct pc87360_data *data = pc87360_update_device(dev); | ||
566 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index-1])); | ||
567 | } | ||
568 | static ssize_t show_temp_min(struct device *dev, struct device_attribute *devattr, char *buf) | ||
569 | { | ||
570 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
571 | struct pc87360_data *data = pc87360_update_device(dev); | ||
572 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[attr->index-1])); | ||
573 | } | ||
574 | static ssize_t show_temp_max(struct device *dev, struct device_attribute *devattr, char *buf) | ||
575 | { | ||
576 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
577 | struct pc87360_data *data = pc87360_update_device(dev); | ||
578 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[attr->index-1])); | ||
579 | } | ||
580 | static ssize_t show_temp_crit(struct device *dev, struct device_attribute *devattr, char *buf) | ||
581 | { | ||
582 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
583 | struct pc87360_data *data = pc87360_update_device(dev); | ||
584 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[attr->index-1])); | ||
585 | } | ||
586 | static ssize_t show_temp_status(struct device *dev, struct device_attribute *devattr, char *buf) | ||
587 | { | ||
588 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
589 | struct pc87360_data *data = pc87360_update_device(dev); | ||
590 | return sprintf(buf, "%d\n", data->temp_status[attr->index-1]); | ||
591 | } | ||
592 | static ssize_t set_temp_min(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
593 | size_t count) | ||
594 | { | ||
595 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
596 | struct i2c_client *client = to_i2c_client(dev); | ||
597 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
598 | long val = simple_strtol(buf, NULL, 10); | ||
599 | |||
600 | down(&data->update_lock); | ||
601 | data->temp_min[attr->index-1] = TEMP_TO_REG(val); | ||
602 | pc87360_write_value(data, LD_TEMP, attr->index-1, PC87365_REG_TEMP_MIN, | ||
603 | data->temp_min[attr->index-1]); | ||
604 | up(&data->update_lock); | ||
605 | return count; | ||
606 | } | ||
607 | static ssize_t set_temp_max(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
608 | size_t count) | ||
609 | { | ||
610 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
611 | struct i2c_client *client = to_i2c_client(dev); | ||
612 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
613 | long val = simple_strtol(buf, NULL, 10); | ||
614 | |||
615 | down(&data->update_lock); | ||
616 | data->temp_max[attr->index-1] = TEMP_TO_REG(val); | ||
617 | pc87360_write_value(data, LD_TEMP, attr->index-1, PC87365_REG_TEMP_MAX, | ||
618 | data->temp_max[attr->index-1]); | ||
619 | up(&data->update_lock); | ||
620 | return count; | ||
621 | } | ||
622 | static ssize_t set_temp_crit(struct device *dev, struct device_attribute *devattr, const char *buf, | ||
623 | size_t count) | ||
624 | { | ||
625 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | ||
626 | struct i2c_client *client = to_i2c_client(dev); | ||
627 | struct pc87360_data *data = i2c_get_clientdata(client); | ||
628 | long val = simple_strtol(buf, NULL, 10); | ||
629 | |||
630 | down(&data->update_lock); | ||
631 | data->temp_crit[attr->index-1] = TEMP_TO_REG(val); | ||
632 | pc87360_write_value(data, LD_TEMP, attr->index-1, PC87365_REG_TEMP_CRIT, | ||
633 | data->temp_crit[attr->index-1]); | ||
634 | up(&data->update_lock); | ||
635 | return count; | ||
636 | } | ||
637 | |||
536 | #define show_and_set_temp(offset) \ | 638 | #define show_and_set_temp(offset) \ |
537 | static ssize_t show_temp##offset##_input(struct device *dev, struct device_attribute *attr, char *buf) \ | 639 | static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ |
538 | { \ | 640 | show_temp_input, NULL, offset); \ |
539 | struct pc87360_data *data = pc87360_update_device(dev); \ | 641 | static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \ |
540 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[offset-1])); \ | 642 | show_temp_min, set_temp_min, offset); \ |
541 | } \ | 643 | static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \ |
542 | static ssize_t show_temp##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ | 644 | show_temp_max, set_temp_max, offset); \ |
543 | { \ | 645 | static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IWUSR | S_IRUGO, \ |
544 | struct pc87360_data *data = pc87360_update_device(dev); \ | 646 | show_temp_crit, set_temp_crit, offset); \ |
545 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[offset-1])); \ | 647 | static SENSOR_DEVICE_ATTR(temp##offset##_status, S_IRUGO, \ |
546 | } \ | 648 | show_temp_status, NULL, offset); |
547 | static ssize_t show_temp##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
548 | { \ | ||
549 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
550 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[offset-1])); \ | ||
551 | }\ | ||
552 | static ssize_t show_temp##offset##_crit(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
553 | { \ | ||
554 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
555 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[offset-1])); \ | ||
556 | }\ | ||
557 | static ssize_t show_temp##offset##_status(struct device *dev, struct device_attribute *attr, char *buf) \ | ||
558 | { \ | ||
559 | struct pc87360_data *data = pc87360_update_device(dev); \ | ||
560 | return sprintf(buf, "%d\n", data->temp_status[offset-1]); \ | ||
561 | }\ | ||
562 | static ssize_t set_temp##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
563 | size_t count) \ | ||
564 | { \ | ||
565 | struct i2c_client *client = to_i2c_client(dev); \ | ||
566 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
567 | long val = simple_strtol(buf, NULL, 10); \ | ||
568 | \ | ||
569 | down(&data->update_lock); \ | ||
570 | data->temp_min[offset-1] = TEMP_TO_REG(val); \ | ||
571 | pc87360_write_value(data, LD_TEMP, offset-1, PC87365_REG_TEMP_MIN, \ | ||
572 | data->temp_min[offset-1]); \ | ||
573 | up(&data->update_lock); \ | ||
574 | return count; \ | ||
575 | } \ | ||
576 | static ssize_t set_temp##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
577 | size_t count) \ | ||
578 | { \ | ||
579 | struct i2c_client *client = to_i2c_client(dev); \ | ||
580 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
581 | long val = simple_strtol(buf, NULL, 10); \ | ||
582 | \ | ||
583 | down(&data->update_lock); \ | ||
584 | data->temp_max[offset-1] = TEMP_TO_REG(val); \ | ||
585 | pc87360_write_value(data, LD_TEMP, offset-1, PC87365_REG_TEMP_MAX, \ | ||
586 | data->temp_max[offset-1]); \ | ||
587 | up(&data->update_lock); \ | ||
588 | return count; \ | ||
589 | } \ | ||
590 | static ssize_t set_temp##offset##_crit(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
591 | size_t count) \ | ||
592 | { \ | ||
593 | struct i2c_client *client = to_i2c_client(dev); \ | ||
594 | struct pc87360_data *data = i2c_get_clientdata(client); \ | ||
595 | long val = simple_strtol(buf, NULL, 10); \ | ||
596 | \ | ||
597 | down(&data->update_lock); \ | ||
598 | data->temp_crit[offset-1] = TEMP_TO_REG(val); \ | ||
599 | pc87360_write_value(data, LD_TEMP, offset-1, PC87365_REG_TEMP_CRIT, \ | ||
600 | data->temp_crit[offset-1]); \ | ||
601 | up(&data->update_lock); \ | ||
602 | return count; \ | ||
603 | } \ | ||
604 | static DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ | ||
605 | show_temp##offset##_input, NULL); \ | ||
606 | static DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \ | ||
607 | show_temp##offset##_min, set_temp##offset##_min); \ | ||
608 | static DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \ | ||
609 | show_temp##offset##_max, set_temp##offset##_max); \ | ||
610 | static DEVICE_ATTR(temp##offset##_crit, S_IWUSR | S_IRUGO, \ | ||
611 | show_temp##offset##_crit, set_temp##offset##_crit); \ | ||
612 | static DEVICE_ATTR(temp##offset##_status, S_IRUGO, \ | ||
613 | show_temp##offset##_status, NULL); | ||
614 | show_and_set_temp(1) | 649 | show_and_set_temp(1) |
615 | show_and_set_temp(2) | 650 | show_and_set_temp(2) |
616 | show_and_set_temp(3) | 651 | show_and_set_temp(3) |
@@ -829,50 +864,50 @@ static int pc87360_detect(struct i2c_adapter *adapter) | |||
829 | } | 864 | } |
830 | 865 | ||
831 | if (data->innr) { | 866 | if (data->innr) { |
832 | device_create_file(&new_client->dev, &dev_attr_in0_input); | 867 | device_create_file(&new_client->dev, &sensor_dev_attr_in0_input.dev_attr); |
833 | device_create_file(&new_client->dev, &dev_attr_in1_input); | 868 | device_create_file(&new_client->dev, &sensor_dev_attr_in1_input.dev_attr); |
834 | device_create_file(&new_client->dev, &dev_attr_in2_input); | 869 | device_create_file(&new_client->dev, &sensor_dev_attr_in2_input.dev_attr); |
835 | device_create_file(&new_client->dev, &dev_attr_in3_input); | 870 | device_create_file(&new_client->dev, &sensor_dev_attr_in3_input.dev_attr); |
836 | device_create_file(&new_client->dev, &dev_attr_in4_input); | 871 | device_create_file(&new_client->dev, &sensor_dev_attr_in4_input.dev_attr); |
837 | device_create_file(&new_client->dev, &dev_attr_in5_input); | 872 | device_create_file(&new_client->dev, &sensor_dev_attr_in5_input.dev_attr); |
838 | device_create_file(&new_client->dev, &dev_attr_in6_input); | 873 | device_create_file(&new_client->dev, &sensor_dev_attr_in6_input.dev_attr); |
839 | device_create_file(&new_client->dev, &dev_attr_in7_input); | 874 | device_create_file(&new_client->dev, &sensor_dev_attr_in7_input.dev_attr); |
840 | device_create_file(&new_client->dev, &dev_attr_in8_input); | 875 | device_create_file(&new_client->dev, &sensor_dev_attr_in8_input.dev_attr); |
841 | device_create_file(&new_client->dev, &dev_attr_in9_input); | 876 | device_create_file(&new_client->dev, &sensor_dev_attr_in9_input.dev_attr); |
842 | device_create_file(&new_client->dev, &dev_attr_in10_input); | 877 | device_create_file(&new_client->dev, &sensor_dev_attr_in10_input.dev_attr); |
843 | device_create_file(&new_client->dev, &dev_attr_in0_min); | 878 | device_create_file(&new_client->dev, &sensor_dev_attr_in0_min.dev_attr); |
844 | device_create_file(&new_client->dev, &dev_attr_in1_min); | 879 | device_create_file(&new_client->dev, &sensor_dev_attr_in1_min.dev_attr); |
845 | device_create_file(&new_client->dev, &dev_attr_in2_min); | 880 | device_create_file(&new_client->dev, &sensor_dev_attr_in2_min.dev_attr); |
846 | device_create_file(&new_client->dev, &dev_attr_in3_min); | 881 | device_create_file(&new_client->dev, &sensor_dev_attr_in3_min.dev_attr); |
847 | device_create_file(&new_client->dev, &dev_attr_in4_min); | 882 | device_create_file(&new_client->dev, &sensor_dev_attr_in4_min.dev_attr); |
848 | device_create_file(&new_client->dev, &dev_attr_in5_min); | 883 | device_create_file(&new_client->dev, &sensor_dev_attr_in5_min.dev_attr); |
849 | device_create_file(&new_client->dev, &dev_attr_in6_min); | 884 | device_create_file(&new_client->dev, &sensor_dev_attr_in6_min.dev_attr); |
850 | device_create_file(&new_client->dev, &dev_attr_in7_min); | 885 | device_create_file(&new_client->dev, &sensor_dev_attr_in7_min.dev_attr); |
851 | device_create_file(&new_client->dev, &dev_attr_in8_min); | 886 | device_create_file(&new_client->dev, &sensor_dev_attr_in8_min.dev_attr); |
852 | device_create_file(&new_client->dev, &dev_attr_in9_min); | 887 | device_create_file(&new_client->dev, &sensor_dev_attr_in9_min.dev_attr); |
853 | device_create_file(&new_client->dev, &dev_attr_in10_min); | 888 | device_create_file(&new_client->dev, &sensor_dev_attr_in10_min.dev_attr); |
854 | device_create_file(&new_client->dev, &dev_attr_in0_max); | 889 | device_create_file(&new_client->dev, &sensor_dev_attr_in0_max.dev_attr); |
855 | device_create_file(&new_client->dev, &dev_attr_in1_max); | 890 | device_create_file(&new_client->dev, &sensor_dev_attr_in1_max.dev_attr); |
856 | device_create_file(&new_client->dev, &dev_attr_in2_max); | 891 | device_create_file(&new_client->dev, &sensor_dev_attr_in2_max.dev_attr); |
857 | device_create_file(&new_client->dev, &dev_attr_in3_max); | 892 | device_create_file(&new_client->dev, &sensor_dev_attr_in3_max.dev_attr); |
858 | device_create_file(&new_client->dev, &dev_attr_in4_max); | 893 | device_create_file(&new_client->dev, &sensor_dev_attr_in4_max.dev_attr); |
859 | device_create_file(&new_client->dev, &dev_attr_in5_max); | 894 | device_create_file(&new_client->dev, &sensor_dev_attr_in5_max.dev_attr); |
860 | device_create_file(&new_client->dev, &dev_attr_in6_max); | 895 | device_create_file(&new_client->dev, &sensor_dev_attr_in6_max.dev_attr); |
861 | device_create_file(&new_client->dev, &dev_attr_in7_max); | 896 | device_create_file(&new_client->dev, &sensor_dev_attr_in7_max.dev_attr); |
862 | device_create_file(&new_client->dev, &dev_attr_in8_max); | 897 | device_create_file(&new_client->dev, &sensor_dev_attr_in8_max.dev_attr); |
863 | device_create_file(&new_client->dev, &dev_attr_in9_max); | 898 | device_create_file(&new_client->dev, &sensor_dev_attr_in9_max.dev_attr); |
864 | device_create_file(&new_client->dev, &dev_attr_in10_max); | 899 | device_create_file(&new_client->dev, &sensor_dev_attr_in10_max.dev_attr); |
865 | device_create_file(&new_client->dev, &dev_attr_in0_status); | 900 | device_create_file(&new_client->dev, &sensor_dev_attr_in0_status.dev_attr); |
866 | device_create_file(&new_client->dev, &dev_attr_in1_status); | 901 | device_create_file(&new_client->dev, &sensor_dev_attr_in1_status.dev_attr); |
867 | device_create_file(&new_client->dev, &dev_attr_in2_status); | 902 | device_create_file(&new_client->dev, &sensor_dev_attr_in2_status.dev_attr); |
868 | device_create_file(&new_client->dev, &dev_attr_in3_status); | 903 | device_create_file(&new_client->dev, &sensor_dev_attr_in3_status.dev_attr); |
869 | device_create_file(&new_client->dev, &dev_attr_in4_status); | 904 | device_create_file(&new_client->dev, &sensor_dev_attr_in4_status.dev_attr); |
870 | device_create_file(&new_client->dev, &dev_attr_in5_status); | 905 | device_create_file(&new_client->dev, &sensor_dev_attr_in5_status.dev_attr); |
871 | device_create_file(&new_client->dev, &dev_attr_in6_status); | 906 | device_create_file(&new_client->dev, &sensor_dev_attr_in6_status.dev_attr); |
872 | device_create_file(&new_client->dev, &dev_attr_in7_status); | 907 | device_create_file(&new_client->dev, &sensor_dev_attr_in7_status.dev_attr); |
873 | device_create_file(&new_client->dev, &dev_attr_in8_status); | 908 | device_create_file(&new_client->dev, &sensor_dev_attr_in8_status.dev_attr); |
874 | device_create_file(&new_client->dev, &dev_attr_in9_status); | 909 | device_create_file(&new_client->dev, &sensor_dev_attr_in9_status.dev_attr); |
875 | device_create_file(&new_client->dev, &dev_attr_in10_status); | 910 | device_create_file(&new_client->dev, &sensor_dev_attr_in10_status.dev_attr); |
876 | 911 | ||
877 | device_create_file(&new_client->dev, &dev_attr_cpu0_vid); | 912 | device_create_file(&new_client->dev, &dev_attr_cpu0_vid); |
878 | device_create_file(&new_client->dev, &dev_attr_vrm); | 913 | device_create_file(&new_client->dev, &dev_attr_vrm); |
@@ -880,86 +915,86 @@ static int pc87360_detect(struct i2c_adapter *adapter) | |||
880 | } | 915 | } |
881 | 916 | ||
882 | if (data->tempnr) { | 917 | if (data->tempnr) { |
883 | device_create_file(&new_client->dev, &dev_attr_temp1_input); | 918 | device_create_file(&new_client->dev, &sensor_dev_attr_temp1_input.dev_attr); |
884 | device_create_file(&new_client->dev, &dev_attr_temp2_input); | 919 | device_create_file(&new_client->dev, &sensor_dev_attr_temp2_input.dev_attr); |
885 | device_create_file(&new_client->dev, &dev_attr_temp1_min); | 920 | device_create_file(&new_client->dev, &sensor_dev_attr_temp1_min.dev_attr); |
886 | device_create_file(&new_client->dev, &dev_attr_temp2_min); | 921 | device_create_file(&new_client->dev, &sensor_dev_attr_temp2_min.dev_attr); |
887 | device_create_file(&new_client->dev, &dev_attr_temp1_max); | 922 | device_create_file(&new_client->dev, &sensor_dev_attr_temp1_max.dev_attr); |
888 | device_create_file(&new_client->dev, &dev_attr_temp2_max); | 923 | device_create_file(&new_client->dev, &sensor_dev_attr_temp2_max.dev_attr); |
889 | device_create_file(&new_client->dev, &dev_attr_temp1_crit); | 924 | device_create_file(&new_client->dev, &sensor_dev_attr_temp1_crit.dev_attr); |
890 | device_create_file(&new_client->dev, &dev_attr_temp2_crit); | 925 | device_create_file(&new_client->dev, &sensor_dev_attr_temp2_crit.dev_attr); |
891 | device_create_file(&new_client->dev, &dev_attr_temp1_status); | 926 | device_create_file(&new_client->dev, &sensor_dev_attr_temp1_status.dev_attr); |
892 | device_create_file(&new_client->dev, &dev_attr_temp2_status); | 927 | device_create_file(&new_client->dev, &sensor_dev_attr_temp2_status.dev_attr); |
893 | 928 | ||
894 | device_create_file(&new_client->dev, &dev_attr_alarms_temp); | 929 | device_create_file(&new_client->dev, &dev_attr_alarms_temp); |
895 | } | 930 | } |
896 | if (data->tempnr == 3) { | 931 | if (data->tempnr == 3) { |
897 | device_create_file(&new_client->dev, &dev_attr_temp3_input); | 932 | device_create_file(&new_client->dev, &sensor_dev_attr_temp3_input.dev_attr); |
898 | device_create_file(&new_client->dev, &dev_attr_temp3_min); | 933 | device_create_file(&new_client->dev, &sensor_dev_attr_temp3_min.dev_attr); |
899 | device_create_file(&new_client->dev, &dev_attr_temp3_max); | 934 | device_create_file(&new_client->dev, &sensor_dev_attr_temp3_max.dev_attr); |
900 | device_create_file(&new_client->dev, &dev_attr_temp3_crit); | 935 | device_create_file(&new_client->dev, &sensor_dev_attr_temp3_crit.dev_attr); |
901 | device_create_file(&new_client->dev, &dev_attr_temp3_status); | 936 | device_create_file(&new_client->dev, &sensor_dev_attr_temp3_status.dev_attr); |
902 | } | 937 | } |
903 | if (data->innr == 14) { | 938 | if (data->innr == 14) { |
904 | device_create_file(&new_client->dev, &dev_attr_temp4_input); | 939 | device_create_file(&new_client->dev, &sensor_dev_attr_temp4_input.dev_attr); |
905 | device_create_file(&new_client->dev, &dev_attr_temp5_input); | 940 | device_create_file(&new_client->dev, &sensor_dev_attr_temp5_input.dev_attr); |
906 | device_create_file(&new_client->dev, &dev_attr_temp6_input); | 941 | device_create_file(&new_client->dev, &sensor_dev_attr_temp6_input.dev_attr); |
907 | device_create_file(&new_client->dev, &dev_attr_temp4_min); | 942 | device_create_file(&new_client->dev, &sensor_dev_attr_temp4_min.dev_attr); |
908 | device_create_file(&new_client->dev, &dev_attr_temp5_min); | 943 | device_create_file(&new_client->dev, &sensor_dev_attr_temp5_min.dev_attr); |
909 | device_create_file(&new_client->dev, &dev_attr_temp6_min); | 944 | device_create_file(&new_client->dev, &sensor_dev_attr_temp6_min.dev_attr); |
910 | device_create_file(&new_client->dev, &dev_attr_temp4_max); | 945 | device_create_file(&new_client->dev, &sensor_dev_attr_temp4_max.dev_attr); |
911 | device_create_file(&new_client->dev, &dev_attr_temp5_max); | 946 | device_create_file(&new_client->dev, &sensor_dev_attr_temp5_max.dev_attr); |
912 | device_create_file(&new_client->dev, &dev_attr_temp6_max); | 947 | device_create_file(&new_client->dev, &sensor_dev_attr_temp6_max.dev_attr); |
913 | device_create_file(&new_client->dev, &dev_attr_temp4_crit); | 948 | device_create_file(&new_client->dev, &sensor_dev_attr_temp4_crit.dev_attr); |
914 | device_create_file(&new_client->dev, &dev_attr_temp5_crit); | 949 | device_create_file(&new_client->dev, &sensor_dev_attr_temp5_crit.dev_attr); |
915 | device_create_file(&new_client->dev, &dev_attr_temp6_crit); | 950 | device_create_file(&new_client->dev, &sensor_dev_attr_temp6_crit.dev_attr); |
916 | device_create_file(&new_client->dev, &dev_attr_temp4_status); | 951 | device_create_file(&new_client->dev, &sensor_dev_attr_temp4_status.dev_attr); |
917 | device_create_file(&new_client->dev, &dev_attr_temp5_status); | 952 | device_create_file(&new_client->dev, &sensor_dev_attr_temp5_status.dev_attr); |
918 | device_create_file(&new_client->dev, &dev_attr_temp6_status); | 953 | device_create_file(&new_client->dev, &sensor_dev_attr_temp6_status.dev_attr); |
919 | } | 954 | } |
920 | 955 | ||
921 | if (data->fannr) { | 956 | if (data->fannr) { |
922 | if (FAN_CONFIG_MONITOR(data->fan_conf, 0)) { | 957 | if (FAN_CONFIG_MONITOR(data->fan_conf, 0)) { |
923 | device_create_file(&new_client->dev, | 958 | device_create_file(&new_client->dev, |
924 | &dev_attr_fan1_input); | 959 | &sensor_dev_attr_fan1_input.dev_attr); |
925 | device_create_file(&new_client->dev, | 960 | device_create_file(&new_client->dev, |
926 | &dev_attr_fan1_min); | 961 | &sensor_dev_attr_fan1_min.dev_attr); |
927 | device_create_file(&new_client->dev, | 962 | device_create_file(&new_client->dev, |
928 | &dev_attr_fan1_div); | 963 | &sensor_dev_attr_fan1_div.dev_attr); |
929 | device_create_file(&new_client->dev, | 964 | device_create_file(&new_client->dev, |
930 | &dev_attr_fan1_status); | 965 | &sensor_dev_attr_fan1_status.dev_attr); |
931 | } | 966 | } |
932 | 967 | ||
933 | if (FAN_CONFIG_MONITOR(data->fan_conf, 1)) { | 968 | if (FAN_CONFIG_MONITOR(data->fan_conf, 1)) { |
934 | device_create_file(&new_client->dev, | 969 | device_create_file(&new_client->dev, |
935 | &dev_attr_fan2_input); | 970 | &sensor_dev_attr_fan2_input.dev_attr); |
936 | device_create_file(&new_client->dev, | 971 | device_create_file(&new_client->dev, |
937 | &dev_attr_fan2_min); | 972 | &sensor_dev_attr_fan2_min.dev_attr); |
938 | device_create_file(&new_client->dev, | 973 | device_create_file(&new_client->dev, |
939 | &dev_attr_fan2_div); | 974 | &sensor_dev_attr_fan2_div.dev_attr); |
940 | device_create_file(&new_client->dev, | 975 | device_create_file(&new_client->dev, |
941 | &dev_attr_fan2_status); | 976 | &sensor_dev_attr_fan2_status.dev_attr); |
942 | } | 977 | } |
943 | 978 | ||
944 | if (FAN_CONFIG_CONTROL(data->fan_conf, 0)) | 979 | if (FAN_CONFIG_CONTROL(data->fan_conf, 0)) |
945 | device_create_file(&new_client->dev, &dev_attr_pwm1); | 980 | device_create_file(&new_client->dev, &sensor_dev_attr_pwm1.dev_attr); |
946 | if (FAN_CONFIG_CONTROL(data->fan_conf, 1)) | 981 | if (FAN_CONFIG_CONTROL(data->fan_conf, 1)) |
947 | device_create_file(&new_client->dev, &dev_attr_pwm2); | 982 | device_create_file(&new_client->dev, &sensor_dev_attr_pwm2.dev_attr); |
948 | } | 983 | } |
949 | if (data->fannr == 3) { | 984 | if (data->fannr == 3) { |
950 | if (FAN_CONFIG_MONITOR(data->fan_conf, 2)) { | 985 | if (FAN_CONFIG_MONITOR(data->fan_conf, 2)) { |
951 | device_create_file(&new_client->dev, | 986 | device_create_file(&new_client->dev, |
952 | &dev_attr_fan3_input); | 987 | &sensor_dev_attr_fan3_input.dev_attr); |
953 | device_create_file(&new_client->dev, | 988 | device_create_file(&new_client->dev, |
954 | &dev_attr_fan3_min); | 989 | &sensor_dev_attr_fan3_min.dev_attr); |
955 | device_create_file(&new_client->dev, | 990 | device_create_file(&new_client->dev, |
956 | &dev_attr_fan3_div); | 991 | &sensor_dev_attr_fan3_div.dev_attr); |
957 | device_create_file(&new_client->dev, | 992 | device_create_file(&new_client->dev, |
958 | &dev_attr_fan3_status); | 993 | &sensor_dev_attr_fan3_status.dev_attr); |
959 | } | 994 | } |
960 | 995 | ||
961 | if (FAN_CONFIG_CONTROL(data->fan_conf, 2)) | 996 | if (FAN_CONFIG_CONTROL(data->fan_conf, 2)) |
962 | device_create_file(&new_client->dev, &dev_attr_pwm3); | 997 | device_create_file(&new_client->dev, &sensor_dev_attr_pwm3.dev_attr); |
963 | } | 998 | } |
964 | 999 | ||
965 | return 0; | 1000 | return 0; |