From 0d87c60d8581717dc75643a3a9a0360b1efd61f8 Mon Sep 17 00:00:00 2001 From: Daniel Mack Date: Tue, 28 Apr 2009 10:55:01 +0200 Subject: [PATCH] --- yaml --- r: 154302 b: refs/heads/master c: 0b47b5703b1cc6c3aa89663ac70e28dadedf6ccc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/w1/slaves/w1_ds2760.c | 30 +++++++++++++++++++++++++++++ trunk/drivers/w1/slaves/w1_ds2760.h | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 3f37c30a8c94..781aafacad5c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ae9fb6e814ecede683bcd404910085cea3ab1260 +refs/heads/master: 0b47b5703b1cc6c3aa89663ac70e28dadedf6ccc diff --git a/trunk/drivers/w1/slaves/w1_ds2760.c b/trunk/drivers/w1/slaves/w1_ds2760.c index 1f09d4e4144c..59f708efe25f 100644 --- a/trunk/drivers/w1/slaves/w1_ds2760.c +++ b/trunk/drivers/w1/slaves/w1_ds2760.c @@ -68,6 +68,34 @@ int w1_ds2760_write(struct device *dev, char *buf, int addr, size_t count) return w1_ds2760_io(dev, buf, addr, count, 1); } +static int w1_ds2760_eeprom_cmd(struct device *dev, int addr, int cmd) +{ + struct w1_slave *sl = container_of(dev, struct w1_slave, dev); + + if (!dev) + return -EINVAL; + + mutex_lock(&sl->master->mutex); + + if (w1_reset_select_slave(sl) == 0) { + w1_write_8(sl->master, cmd); + w1_write_8(sl->master, addr); + } + + mutex_unlock(&sl->master->mutex); + return 0; +} + +int w1_ds2760_store_eeprom(struct device *dev, int addr) +{ + return w1_ds2760_eeprom_cmd(dev, addr, W1_DS2760_COPY_DATA); +} + +int w1_ds2760_recall_eeprom(struct device *dev, int addr) +{ + return w1_ds2760_eeprom_cmd(dev, addr, W1_DS2760_RECALL_DATA); +} + static ssize_t w1_ds2760_read_bin(struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count) @@ -200,6 +228,8 @@ static void __exit w1_ds2760_exit(void) EXPORT_SYMBOL(w1_ds2760_read); EXPORT_SYMBOL(w1_ds2760_write); +EXPORT_SYMBOL(w1_ds2760_store_eeprom); +EXPORT_SYMBOL(w1_ds2760_recall_eeprom); module_init(w1_ds2760_init); module_exit(w1_ds2760_exit); diff --git a/trunk/drivers/w1/slaves/w1_ds2760.h b/trunk/drivers/w1/slaves/w1_ds2760.h index f1302429cb02..ea39419172a6 100644 --- a/trunk/drivers/w1/slaves/w1_ds2760.h +++ b/trunk/drivers/w1/slaves/w1_ds2760.h @@ -46,5 +46,7 @@ extern int w1_ds2760_read(struct device *dev, char *buf, int addr, size_t count); extern int w1_ds2760_write(struct device *dev, char *buf, int addr, size_t count); +extern int w1_ds2760_store_eeprom(struct device *dev, int addr); +extern int w1_ds2760_recall_eeprom(struct device *dev, int addr); #endif /* !__w1_ds2760_h__ */