455
461
return single_open(file, i8k_proc_show, NULL);
469
static ssize_t i8k_hwmon_show_temp(struct device *dev,
470
struct device_attribute *devattr,
475
cpu_temp = i8k_get_temp(0);
478
return sprintf(buf, "%d\n", cpu_temp * 1000);
481
static ssize_t i8k_hwmon_show_fan(struct device *dev,
482
struct device_attribute *devattr,
485
int index = to_sensor_dev_attr(devattr)->index;
488
fan_speed = i8k_get_fan_speed(index);
491
return sprintf(buf, "%d\n", fan_speed);
494
static ssize_t i8k_hwmon_show_label(struct device *dev,
495
struct device_attribute *devattr,
498
static const char *labels[4] = {
504
int index = to_sensor_dev_attr(devattr)->index;
506
return sprintf(buf, "%s\n", labels[index]);
509
static DEVICE_ATTR(temp1_input, S_IRUGO, i8k_hwmon_show_temp, NULL);
510
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, i8k_hwmon_show_fan, NULL,
512
static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, i8k_hwmon_show_fan, NULL,
514
static SENSOR_DEVICE_ATTR(name, S_IRUGO, i8k_hwmon_show_label, NULL, 0);
515
static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, i8k_hwmon_show_label, NULL, 1);
516
static SENSOR_DEVICE_ATTR(fan1_label, S_IRUGO, i8k_hwmon_show_label, NULL, 2);
517
static SENSOR_DEVICE_ATTR(fan2_label, S_IRUGO, i8k_hwmon_show_label, NULL, 3);
519
static void i8k_hwmon_remove_files(struct device *dev)
521
device_remove_file(dev, &dev_attr_temp1_input);
522
device_remove_file(dev, &sensor_dev_attr_fan1_input.dev_attr);
523
device_remove_file(dev, &sensor_dev_attr_fan2_input.dev_attr);
524
device_remove_file(dev, &sensor_dev_attr_temp1_label.dev_attr);
525
device_remove_file(dev, &sensor_dev_attr_fan1_label.dev_attr);
526
device_remove_file(dev, &sensor_dev_attr_fan2_label.dev_attr);
527
device_remove_file(dev, &sensor_dev_attr_name.dev_attr);
530
static int __init i8k_init_hwmon(void)
534
i8k_hwmon_dev = hwmon_device_register(NULL);
535
if (IS_ERR(i8k_hwmon_dev)) {
536
err = PTR_ERR(i8k_hwmon_dev);
537
i8k_hwmon_dev = NULL;
538
printk(KERN_ERR "i8k: hwmon registration failed (%d)\n", err);
542
/* Required name attribute */
543
err = device_create_file(i8k_hwmon_dev,
544
&sensor_dev_attr_name.dev_attr);
546
goto exit_unregister;
548
/* CPU temperature attributes, if temperature reading is OK */
549
err = i8k_get_temp(0);
551
dev_dbg(i8k_hwmon_dev,
552
"Not creating temperature attributes (%d)\n", err);
554
err = device_create_file(i8k_hwmon_dev, &dev_attr_temp1_input);
556
goto exit_remove_files;
557
err = device_create_file(i8k_hwmon_dev,
558
&sensor_dev_attr_temp1_label.dev_attr);
560
goto exit_remove_files;
563
/* Left fan attributes, if left fan is present */
564
err = i8k_get_fan_status(I8K_FAN_LEFT);
566
dev_dbg(i8k_hwmon_dev,
567
"Not creating %s fan attributes (%d)\n", "left", err);
569
err = device_create_file(i8k_hwmon_dev,
570
&sensor_dev_attr_fan1_input.dev_attr);
572
goto exit_remove_files;
573
err = device_create_file(i8k_hwmon_dev,
574
&sensor_dev_attr_fan1_label.dev_attr);
576
goto exit_remove_files;
579
/* Right fan attributes, if right fan is present */
580
err = i8k_get_fan_status(I8K_FAN_RIGHT);
582
dev_dbg(i8k_hwmon_dev,
583
"Not creating %s fan attributes (%d)\n", "right", err);
585
err = device_create_file(i8k_hwmon_dev,
586
&sensor_dev_attr_fan2_input.dev_attr);
588
goto exit_remove_files;
589
err = device_create_file(i8k_hwmon_dev,
590
&sensor_dev_attr_fan2_label.dev_attr);
592
goto exit_remove_files;
598
i8k_hwmon_remove_files(i8k_hwmon_dev);
600
hwmon_device_unregister(i8k_hwmon_dev);
604
static void __exit i8k_exit_hwmon(void)
606
i8k_hwmon_remove_files(i8k_hwmon_dev);
607
hwmon_device_unregister(i8k_hwmon_dev);
458
610
static struct dmi_system_id __initdata i8k_dmi_table[] = {
460
612
.ident = "Dell Inspiron",