diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-24 17:35:57 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-24 17:35:57 -0400 |
commit | f27884aeadff9654f4a1e8a05dd92f4b140afe29 (patch) | |
tree | 22db0c732fcc4e68be25190454631ee1d249e295 /drivers/w1 | |
parent | c6223048259006759237d826219f0fa4f312fb47 (diff) | |
parent | a35d01a5d2ac533edab94a8e3b6749ab213c91c5 (diff) |
Merge git://git.infradead.org/battery-2.6
* git://git.infradead.org/battery-2.6:
da9030_battery: Fix race between event handler and monitor
Add MAX17040 Fuel Gauge driver
w1: ds2760_battery: add support for sleep mode feature
w1: ds2760: add support for EEPROM read and write
ds2760_battery: cleanups in ds2760_battery_probe()
Diffstat (limited to 'drivers/w1')
-rw-r--r-- | drivers/w1/slaves/w1_ds2760.c | 30 | ||||
-rw-r--r-- | drivers/w1/slaves/w1_ds2760.h | 7 |
2 files changed, 37 insertions, 0 deletions
diff --git a/drivers/w1/slaves/w1_ds2760.c b/drivers/w1/slaves/w1_ds2760.c index 1f09d4e4144c..59f708efe25f 100644 --- a/drivers/w1/slaves/w1_ds2760.c +++ b/drivers/w1/slaves/w1_ds2760.c | |||
@@ -68,6 +68,34 @@ int w1_ds2760_write(struct device *dev, char *buf, int addr, size_t count) | |||
68 | return w1_ds2760_io(dev, buf, addr, count, 1); | 68 | return w1_ds2760_io(dev, buf, addr, count, 1); |
69 | } | 69 | } |
70 | 70 | ||
71 | static int w1_ds2760_eeprom_cmd(struct device *dev, int addr, int cmd) | ||
72 | { | ||
73 | struct w1_slave *sl = container_of(dev, struct w1_slave, dev); | ||
74 | |||
75 | if (!dev) | ||
76 | return -EINVAL; | ||
77 | |||
78 | mutex_lock(&sl->master->mutex); | ||
79 | |||
80 | if (w1_reset_select_slave(sl) == 0) { | ||
81 | w1_write_8(sl->master, cmd); | ||
82 | w1_write_8(sl->master, addr); | ||
83 | } | ||
84 | |||
85 | mutex_unlock(&sl->master->mutex); | ||
86 | return 0; | ||
87 | } | ||
88 | |||
89 | int w1_ds2760_store_eeprom(struct device *dev, int addr) | ||
90 | { | ||
91 | return w1_ds2760_eeprom_cmd(dev, addr, W1_DS2760_COPY_DATA); | ||
92 | } | ||
93 | |||
94 | int w1_ds2760_recall_eeprom(struct device *dev, int addr) | ||
95 | { | ||
96 | return w1_ds2760_eeprom_cmd(dev, addr, W1_DS2760_RECALL_DATA); | ||
97 | } | ||
98 | |||
71 | static ssize_t w1_ds2760_read_bin(struct kobject *kobj, | 99 | static ssize_t w1_ds2760_read_bin(struct kobject *kobj, |
72 | struct bin_attribute *bin_attr, | 100 | struct bin_attribute *bin_attr, |
73 | char *buf, loff_t off, size_t count) | 101 | char *buf, loff_t off, size_t count) |
@@ -200,6 +228,8 @@ static void __exit w1_ds2760_exit(void) | |||
200 | 228 | ||
201 | EXPORT_SYMBOL(w1_ds2760_read); | 229 | EXPORT_SYMBOL(w1_ds2760_read); |
202 | EXPORT_SYMBOL(w1_ds2760_write); | 230 | EXPORT_SYMBOL(w1_ds2760_write); |
231 | EXPORT_SYMBOL(w1_ds2760_store_eeprom); | ||
232 | EXPORT_SYMBOL(w1_ds2760_recall_eeprom); | ||
203 | 233 | ||
204 | module_init(w1_ds2760_init); | 234 | module_init(w1_ds2760_init); |
205 | module_exit(w1_ds2760_exit); | 235 | module_exit(w1_ds2760_exit); |
diff --git a/drivers/w1/slaves/w1_ds2760.h b/drivers/w1/slaves/w1_ds2760.h index f1302429cb02..58e774141568 100644 --- a/drivers/w1/slaves/w1_ds2760.h +++ b/drivers/w1/slaves/w1_ds2760.h | |||
@@ -25,6 +25,10 @@ | |||
25 | 25 | ||
26 | #define DS2760_PROTECTION_REG 0x00 | 26 | #define DS2760_PROTECTION_REG 0x00 |
27 | #define DS2760_STATUS_REG 0x01 | 27 | #define DS2760_STATUS_REG 0x01 |
28 | #define DS2760_STATUS_IE (1 << 2) | ||
29 | #define DS2760_STATUS_SWEN (1 << 3) | ||
30 | #define DS2760_STATUS_RNAOP (1 << 4) | ||
31 | #define DS2760_STATUS_PMOD (1 << 5) | ||
28 | #define DS2760_EEPROM_REG 0x07 | 32 | #define DS2760_EEPROM_REG 0x07 |
29 | #define DS2760_SPECIAL_FEATURE_REG 0x08 | 33 | #define DS2760_SPECIAL_FEATURE_REG 0x08 |
30 | #define DS2760_VOLTAGE_MSB 0x0c | 34 | #define DS2760_VOLTAGE_MSB 0x0c |
@@ -38,6 +42,7 @@ | |||
38 | #define DS2760_EEPROM_BLOCK0 0x20 | 42 | #define DS2760_EEPROM_BLOCK0 0x20 |
39 | #define DS2760_ACTIVE_FULL 0x20 | 43 | #define DS2760_ACTIVE_FULL 0x20 |
40 | #define DS2760_EEPROM_BLOCK1 0x30 | 44 | #define DS2760_EEPROM_BLOCK1 0x30 |
45 | #define DS2760_STATUS_WRITE_REG 0x31 | ||
41 | #define DS2760_RATED_CAPACITY 0x32 | 46 | #define DS2760_RATED_CAPACITY 0x32 |
42 | #define DS2760_CURRENT_OFFSET_BIAS 0x33 | 47 | #define DS2760_CURRENT_OFFSET_BIAS 0x33 |
43 | #define DS2760_ACTIVE_EMPTY 0x3b | 48 | #define DS2760_ACTIVE_EMPTY 0x3b |
@@ -46,5 +51,7 @@ extern int w1_ds2760_read(struct device *dev, char *buf, int addr, | |||
46 | size_t count); | 51 | size_t count); |
47 | extern int w1_ds2760_write(struct device *dev, char *buf, int addr, | 52 | extern int w1_ds2760_write(struct device *dev, char *buf, int addr, |
48 | size_t count); | 53 | size_t count); |
54 | extern int w1_ds2760_store_eeprom(struct device *dev, int addr); | ||
55 | extern int w1_ds2760_recall_eeprom(struct device *dev, int addr); | ||
49 | 56 | ||
50 | #endif /* !__w1_ds2760_h__ */ | 57 | #endif /* !__w1_ds2760_h__ */ |