aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAndres Salomon <dilinger@collabora.co.uk>2009-06-30 02:14:00 -0400
committerAnton Vorontsov <cbouatmailru@gmail.com>2009-06-30 18:36:38 -0400
commit04a820ead0838c76e9c1242feb5e71048bf3e9dc (patch)
treecbcc95a15782189403d3e632dcd0b1b13bdb9c82 /drivers
parent5a4f13fad1ab5bd08dea78fc55321e429d83cddf (diff)
olpc_battery: Fix up eeprom read function
The eeprom read function was placing values into the wrong place in 'buf'; we were starting from buf[off], rather than buf[0]. Also, the for loop that we were using was much uglier than it needed to be. This cleans it up a bit. Signed-off-by: Andres Salomon <dilinger@collabora.co.uk> Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/power/olpc_battery.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/power/olpc_battery.c b/drivers/power/olpc_battery.c
index 5fbca2681baa..9c216dd41550 100644
--- a/drivers/power/olpc_battery.c
+++ b/drivers/power/olpc_battery.c
@@ -8,6 +8,7 @@
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10 10
11#include <linux/kernel.h>
11#include <linux/module.h> 12#include <linux/module.h>
12#include <linux/err.h> 13#include <linux/err.h>
13#include <linux/platform_device.h> 14#include <linux/platform_device.h>
@@ -334,21 +335,21 @@ static ssize_t olpc_bat_eeprom_read(struct kobject *kobj,
334 struct bin_attribute *attr, char *buf, loff_t off, size_t count) 335 struct bin_attribute *attr, char *buf, loff_t off, size_t count)
335{ 336{
336 uint8_t ec_byte; 337 uint8_t ec_byte;
337 int ret, end; 338 int ret;
339 int i;
338 340
339 if (off >= EEPROM_SIZE) 341 if (off >= EEPROM_SIZE)
340 return 0; 342 return 0;
341 if (off + count > EEPROM_SIZE) 343 if (off + count > EEPROM_SIZE)
342 count = EEPROM_SIZE - off; 344 count = EEPROM_SIZE - off;
343 345
344 end = EEPROM_START + off + count; 346 for (i = 0; i < count; i++) {
345 for (ec_byte = EEPROM_START + off; ec_byte < end; ec_byte++) { 347 ec_byte = EEPROM_START + off + i;
346 ret = olpc_ec_cmd(EC_BAT_EEPROM, &ec_byte, 1, 348 ret = olpc_ec_cmd(EC_BAT_EEPROM, &ec_byte, 1, &buf[i], 1);
347 &buf[ec_byte - EEPROM_START], 1);
348 if (ret) { 349 if (ret) {
349 printk(KERN_ERR "olpc-battery: EC command " 350 pr_err("olpc-battery: "
350 "EC_BAT_EEPROM @ 0x%x failed -" 351 "EC_BAT_EEPROM cmd @ 0x%x failed - %d!\n",
351 " %d!\n", ec_byte, ret); 352 ec_byte, ret);
352 return -EIO; 353 return -EIO;
353 } 354 }
354 } 355 }