diff options
Diffstat (limited to 'drivers/w1/w1_therm.c')
-rw-r--r-- | drivers/w1/w1_therm.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/drivers/w1/w1_therm.c b/drivers/w1/w1_therm.c index 2ed0e0f48268..4577df3cfc48 100644 --- a/drivers/w1/w1_therm.c +++ b/drivers/w1/w1_therm.c | |||
@@ -42,12 +42,31 @@ static u8 bad_roms[][9] = { | |||
42 | {} | 42 | {} |
43 | }; | 43 | }; |
44 | 44 | ||
45 | static ssize_t w1_therm_read_name(struct device *, struct device_attribute *attr, char *); | ||
46 | static ssize_t w1_therm_read_bin(struct kobject *, char *, loff_t, size_t); | 45 | static ssize_t w1_therm_read_bin(struct kobject *, char *, loff_t, size_t); |
47 | 46 | ||
47 | static struct bin_attribute w1_therm_bin_attr = { | ||
48 | .attr = { | ||
49 | .name = "w1_slave", | ||
50 | .mode = S_IRUGO, | ||
51 | .owner = THIS_MODULE, | ||
52 | }, | ||
53 | .size = W1_SLAVE_DATA_SIZE, | ||
54 | .read = w1_therm_read_bin, | ||
55 | }; | ||
56 | |||
57 | static int w1_therm_add_slave(struct w1_slave *sl) | ||
58 | { | ||
59 | return sysfs_create_bin_file(&sl->dev.kobj, &w1_therm_bin_attr); | ||
60 | } | ||
61 | |||
62 | static void w1_therm_remove_slave(struct w1_slave *sl) | ||
63 | { | ||
64 | sysfs_remove_bin_file(&sl->dev.kobj, &w1_therm_bin_attr); | ||
65 | } | ||
66 | |||
48 | static struct w1_family_ops w1_therm_fops = { | 67 | static struct w1_family_ops w1_therm_fops = { |
49 | .rname = &w1_therm_read_name, | 68 | .add_slave = w1_therm_add_slave, |
50 | .rbin = &w1_therm_read_bin, | 69 | .remove_slave = w1_therm_remove_slave, |
51 | }; | 70 | }; |
52 | 71 | ||
53 | static struct w1_family w1_therm_family_DS18S20 = { | 72 | static struct w1_family w1_therm_family_DS18S20 = { |
@@ -59,6 +78,7 @@ static struct w1_family w1_therm_family_DS18B20 = { | |||
59 | .fid = W1_THERM_DS18B20, | 78 | .fid = W1_THERM_DS18B20, |
60 | .fops = &w1_therm_fops, | 79 | .fops = &w1_therm_fops, |
61 | }; | 80 | }; |
81 | |||
62 | static struct w1_family w1_therm_family_DS1822 = { | 82 | static struct w1_family w1_therm_family_DS1822 = { |
63 | .fid = W1_THERM_DS1822, | 83 | .fid = W1_THERM_DS1822, |
64 | .fops = &w1_therm_fops, | 84 | .fops = &w1_therm_fops, |
@@ -90,12 +110,6 @@ static struct w1_therm_family_converter w1_therm_families[] = { | |||
90 | }, | 110 | }, |
91 | }; | 111 | }; |
92 | 112 | ||
93 | static ssize_t w1_therm_read_name(struct device *dev, struct device_attribute *attr, char *buf) | ||
94 | { | ||
95 | struct w1_slave *sl = dev_to_w1_slave(dev); | ||
96 | return sprintf(buf, "%s\n", sl->name); | ||
97 | } | ||
98 | |||
99 | static inline int w1_DS18B20_convert_temp(u8 rom[9]) | 113 | static inline int w1_DS18B20_convert_temp(u8 rom[9]) |
100 | { | 114 | { |
101 | int t = (rom[1] << 8) | rom[0]; | 115 | int t = (rom[1] << 8) | rom[0]; |