aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/w1/w1_therm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/w1/w1_therm.c')
-rw-r--r--drivers/w1/w1_therm.c32
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
45static ssize_t w1_therm_read_name(struct device *, struct device_attribute *attr, char *);
46static ssize_t w1_therm_read_bin(struct kobject *, char *, loff_t, size_t); 45static ssize_t w1_therm_read_bin(struct kobject *, char *, loff_t, size_t);
47 46
47static 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
57static 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
62static void w1_therm_remove_slave(struct w1_slave *sl)
63{
64 sysfs_remove_bin_file(&sl->dev.kobj, &w1_therm_bin_attr);
65}
66
48static struct w1_family_ops w1_therm_fops = { 67static 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
53static struct w1_family w1_therm_family_DS18S20 = { 72static 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
62static struct w1_family w1_therm_family_DS1822 = { 82static 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
93static 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
99static inline int w1_DS18B20_convert_temp(u8 rom[9]) 113static 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];