From 916c179141f0ff39919cf7f1002f3f42f220ac7d Mon Sep 17 00:00:00 2001 From: Clifton Barnes Date: Wed, 2 Nov 2011 13:39:52 -0700 Subject: [PATCH] --- yaml --- r: 273271 b: refs/heads/master c: 9fe678fa2feb4aaac0b4220de63e1b7f8ccebae6 h: refs/heads/master i: 273269: 16d44480266864bd3b3edde63d0110648a90ed7f 273267: cb3f1328fb66bc6f76f679570448f1d419f8f167 273263: 44fbafdfb7069558741fe9e34a512d3e2aece7c3 v: v3 --- [refs] | 2 +- trunk/drivers/w1/slaves/w1_ds2780.c | 48 +++++++++++++++++++++-------- trunk/drivers/w1/slaves/w1_ds2780.h | 2 ++ 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index b488dabe6614..4553ae5b7f7a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 853eee72f74f449797f0500ea19fc1bf497428d8 +refs/heads/master: 9fe678fa2feb4aaac0b4220de63e1b7f8ccebae6 diff --git a/trunk/drivers/w1/slaves/w1_ds2780.c b/trunk/drivers/w1/slaves/w1_ds2780.c index a134b38e34b2..39f78c0b143c 100644 --- a/trunk/drivers/w1/slaves/w1_ds2780.c +++ b/trunk/drivers/w1/slaves/w1_ds2780.c @@ -26,20 +26,14 @@ #include "../w1_family.h" #include "w1_ds2780.h" -int w1_ds2780_io(struct device *dev, char *buf, int addr, size_t count, - int io) +static int w1_ds2780_do_io(struct device *dev, char *buf, int addr, + size_t count, int io) { struct w1_slave *sl = container_of(dev, struct w1_slave, dev); - if (!dev) - return -ENODEV; + if (addr > DS2780_DATA_SIZE || addr < 0) + return 0; - mutex_lock(&sl->master->mutex); - - if (addr > DS2780_DATA_SIZE || addr < 0) { - count = 0; - goto out; - } count = min_t(int, count, DS2780_DATA_SIZE - addr); if (w1_reset_select_slave(sl) == 0) { @@ -47,7 +41,6 @@ int w1_ds2780_io(struct device *dev, char *buf, int addr, size_t count, w1_write_8(sl->master, W1_DS2780_WRITE_DATA); w1_write_8(sl->master, addr); w1_write_block(sl->master, buf, count); - /* XXX w1_write_block returns void, not n_written */ } else { w1_write_8(sl->master, W1_DS2780_READ_DATA); w1_write_8(sl->master, addr); @@ -55,13 +48,42 @@ int w1_ds2780_io(struct device *dev, char *buf, int addr, size_t count, } } -out: + return count; +} + +int w1_ds2780_io(struct device *dev, char *buf, int addr, size_t count, + int io) +{ + struct w1_slave *sl = container_of(dev, struct w1_slave, dev); + int ret; + + if (!dev) + return -ENODEV; + + mutex_lock(&sl->master->mutex); + + ret = w1_ds2780_do_io(dev, buf, addr, count, io); + mutex_unlock(&sl->master->mutex); - return count; + return ret; } EXPORT_SYMBOL(w1_ds2780_io); +int w1_ds2780_io_nolock(struct device *dev, char *buf, int addr, size_t count, + int io) +{ + int ret; + + if (!dev) + return -ENODEV; + + ret = w1_ds2780_do_io(dev, buf, addr, count, io); + + return ret; +} +EXPORT_SYMBOL(w1_ds2780_io_nolock); + int w1_ds2780_eeprom_cmd(struct device *dev, int addr, int cmd) { struct w1_slave *sl = container_of(dev, struct w1_slave, dev); diff --git a/trunk/drivers/w1/slaves/w1_ds2780.h b/trunk/drivers/w1/slaves/w1_ds2780.h index a1fba79eb1b5..737379365021 100644 --- a/trunk/drivers/w1/slaves/w1_ds2780.h +++ b/trunk/drivers/w1/slaves/w1_ds2780.h @@ -124,6 +124,8 @@ extern int w1_ds2780_io(struct device *dev, char *buf, int addr, size_t count, int io); +extern int w1_ds2780_io_nolock(struct device *dev, char *buf, int addr, + size_t count, int io); extern int w1_ds2780_eeprom_cmd(struct device *dev, int addr, int cmd); #endif /* !_W1_DS2780_H */