Skip to content

Commit

Permalink
eeprom: at24: Tidy at24_read()
Browse files Browse the repository at this point in the history
The elegant code in at24_read() has the drawback that we now need
to make a copy of all parameters to pass them to the post-processing
callback function if there is one. Rewrite the loop in such a way that
the parameters are not modified, so saving them is no longer needed.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
  • Loading branch information
Jean Delvare authored and Bartosz Golaszewski committed Aug 25, 2020
1 parent a4423ce commit 99363d1
Showing 1 changed file with 4 additions and 10 deletions.
14 changes: 4 additions & 10 deletions drivers/misc/eeprom/at24.c
Original file line number Diff line number Diff line change
Expand Up @@ -422,10 +422,7 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
struct at24_data *at24;
struct device *dev;
char *buf = val;
int ret;
unsigned int orig_off = off;
char *orig_buf = buf;
size_t orig_count = count;
int i, ret;

at24 = priv;
dev = at24_base_client_dev(at24);
Expand All @@ -448,24 +445,21 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
*/
mutex_lock(&at24->lock);

while (count) {
ret = at24_regmap_read(at24, buf, off, count);
for (i = 0; count; i += ret, count -= ret) {
ret = at24_regmap_read(at24, buf + i, off + i, count);
if (ret < 0) {
mutex_unlock(&at24->lock);
pm_runtime_put(dev);
return ret;
}
buf += ret;
off += ret;
count -= ret;
}

mutex_unlock(&at24->lock);

pm_runtime_put(dev);

if (unlikely(at24->read_post))
at24->read_post(orig_off, orig_buf, orig_count);
at24->read_post(off, buf, i);

return 0;
}
Expand Down

0 comments on commit 99363d1

Please sign in to comment.