bq27x00_battery: Add patch bq27x00-sysfs-registers.diff which export all registers...
authorPali Rohár <pali.rohar@gmail.com>
Tue, 10 Jul 2012 09:27:44 +0000 (11:27 +0200)
committerPali Rohár <pali.rohar@gmail.com>
Tue, 10 Jul 2012 09:30:17 +0000 (11:30 +0200)
kernel-power-2.6.28/debian/patches/bq27x00-sysfs-registers.diff [new file with mode: 0644]
kernel-power-2.6.28/debian/patches/series

diff --git a/kernel-power-2.6.28/debian/patches/bq27x00-sysfs-registers.diff b/kernel-power-2.6.28/debian/patches/bq27x00-sysfs-registers.diff
new file mode 100644 (file)
index 0000000..3f0ac97
--- /dev/null
@@ -0,0 +1,89 @@
+--- kernel-power/drivers/power/bq27x00_battery.c.orig  2012-07-10 08:45:20.296054973 +0200
++++ kernel-power/drivers/power/bq27x00_battery.c       2012-07-10 10:21:21.043990227 +0200
+@@ -718,6 +718,70 @@ static void bq27x00_battery_reg_exit(str
+       di->regdev = NULL;
+ }
++/* code for register device access via sysfs */
++
++static ssize_t bq27x00_battery_sysfs_print_reg(struct bq27x00_device_info *di,
++                                      u8 reg, bool single, char *buf)
++{
++      int ret = bq27x00_read(di, reg, single);
++      if (ret < 0)
++              return sprintf(buf, "%#.2x=error %d\n", reg, ret);
++      else
++              return sprintf(buf, "%#.2x=%#.2x\n", reg, ret);
++}
++
++static ssize_t bq27x00_battery_sysfs_show_registers(struct device *dev,
++              struct device_attribute *attr, char *buf)
++{
++      struct power_supply *psy = dev_get_drvdata(dev);
++      struct bq27x00_device_info *di = container_of(psy,
++                                              struct bq27x00_device_info,
++                                              bat);
++      u8 reg;
++      ssize_t ret = 0;
++
++      for (reg=0x00; reg<=0x01; reg+=1)
++              ret += bq27x00_battery_sysfs_print_reg(di, reg, true, buf+ret);
++
++      for (reg=0x02; reg<=0x08; reg+=2)
++              ret += bq27x00_battery_sysfs_print_reg(di, reg, false, buf+ret);
++
++      for (reg=0x0A; reg<=0x0B; reg+=1)
++              ret += bq27x00_battery_sysfs_print_reg(di, reg, true, buf+ret);
++
++      for (reg=0x0C; reg<=0x2A; reg+=2)
++              ret += bq27x00_battery_sysfs_print_reg(di, reg, false, buf+ret);
++
++      for (reg=0x2C; reg<=0x7F; reg+=1)
++              ret += bq27x00_battery_sysfs_print_reg(di, reg, true, buf+ret);
++
++      return ret;
++}
++
++static DEVICE_ATTR(registers, S_IRUGO,
++              bq27x00_battery_sysfs_show_registers, NULL);
++
++static struct attribute *bq27x00_battery_sysfs_attributes[] = {
++      &dev_attr_registers.attr,
++      NULL,
++};
++
++static const struct attribute_group bq27x00_battery_sysfs_attr_group = {
++      .attrs = bq27x00_battery_sysfs_attributes,
++};
++
++static int bq27x00_battery_sysfs_init(struct bq27x00_device_info *di)
++{
++      return sysfs_create_group(&di->bat.dev->kobj,
++                      &bq27x00_battery_sysfs_attr_group);
++}
++
++static void bq27x00_battery_sysfs_exit(struct bq27x00_device_info *di)
++{
++      sysfs_remove_group(&di->bat.dev->kobj,
++                      &bq27x00_battery_sysfs_attr_group);
++}
++
+ static int bq27x00_powersupply_init(struct bq27x00_device_info *di)
+ {
+       int ret;
+@@ -741,6 +805,7 @@ static int bq27x00_powersupply_init(stru
+       bq27x00_update(di);
+       bq27x00_battery_reg_init(di);
++      bq27x00_battery_sysfs_init(di);
+       return 0;
+ }
+@@ -754,6 +819,7 @@ static void bq27x00_powersupply_unregist
+       cancel_delayed_work_sync(&di->work);
+       bq27x00_battery_reg_exit(di);
++      bq27x00_battery_sysfs_exit(di);
+       power_supply_unregister(&di->bat);
index 4128432..50f0f8e 100644 (file)
@@ -44,6 +44,7 @@ power-supply-no-verbose.diff
 bq27x00-rx51-board.diff
 bq27x00-upstream.diff
 bq27x00-maemo.diff
+bq27x00-sysfs-registers.diff
 l2cap_parent.diff
 wl12xx-rx-fix.diff
 anti-io-stalling.diff