bq27x00_battery: Add patch bq27x00-sysfs-registers.diff which export all registers...
[kernel-power] / kernel-power-2.6.28 / debian / patches / bq27x00-sysfs-registers.diff
1 --- kernel-power/drivers/power/bq27x00_battery.c.orig   2012-07-10 08:45:20.296054973 +0200
2 +++ kernel-power/drivers/power/bq27x00_battery.c        2012-07-10 10:21:21.043990227 +0200
3 @@ -718,6 +718,70 @@ static void bq27x00_battery_reg_exit(str
4         di->regdev = NULL;
5  }
6  
7 +/* code for register device access via sysfs */
8 +
9 +static ssize_t bq27x00_battery_sysfs_print_reg(struct bq27x00_device_info *di,
10 +                                       u8 reg, bool single, char *buf)
11 +{
12 +       int ret = bq27x00_read(di, reg, single);
13 +       if (ret < 0)
14 +               return sprintf(buf, "%#.2x=error %d\n", reg, ret);
15 +       else
16 +               return sprintf(buf, "%#.2x=%#.2x\n", reg, ret);
17 +}
18 +
19 +static ssize_t bq27x00_battery_sysfs_show_registers(struct device *dev,
20 +               struct device_attribute *attr, char *buf)
21 +{
22 +       struct power_supply *psy = dev_get_drvdata(dev);
23 +       struct bq27x00_device_info *di = container_of(psy,
24 +                                               struct bq27x00_device_info,
25 +                                               bat);
26 +       u8 reg;
27 +       ssize_t ret = 0;
28 +
29 +       for (reg=0x00; reg<=0x01; reg+=1)
30 +               ret += bq27x00_battery_sysfs_print_reg(di, reg, true, buf+ret);
31 +
32 +       for (reg=0x02; reg<=0x08; reg+=2)
33 +               ret += bq27x00_battery_sysfs_print_reg(di, reg, false, buf+ret);
34 +
35 +       for (reg=0x0A; reg<=0x0B; reg+=1)
36 +               ret += bq27x00_battery_sysfs_print_reg(di, reg, true, buf+ret);
37 +
38 +       for (reg=0x0C; reg<=0x2A; reg+=2)
39 +               ret += bq27x00_battery_sysfs_print_reg(di, reg, false, buf+ret);
40 +
41 +       for (reg=0x2C; reg<=0x7F; reg+=1)
42 +               ret += bq27x00_battery_sysfs_print_reg(di, reg, true, buf+ret);
43 +
44 +       return ret;
45 +}
46 +
47 +static DEVICE_ATTR(registers, S_IRUGO,
48 +               bq27x00_battery_sysfs_show_registers, NULL);
49 +
50 +static struct attribute *bq27x00_battery_sysfs_attributes[] = {
51 +       &dev_attr_registers.attr,
52 +       NULL,
53 +};
54 +
55 +static const struct attribute_group bq27x00_battery_sysfs_attr_group = {
56 +       .attrs = bq27x00_battery_sysfs_attributes,
57 +};
58 +
59 +static int bq27x00_battery_sysfs_init(struct bq27x00_device_info *di)
60 +{
61 +       return sysfs_create_group(&di->bat.dev->kobj,
62 +                       &bq27x00_battery_sysfs_attr_group);
63 +}
64 +
65 +static void bq27x00_battery_sysfs_exit(struct bq27x00_device_info *di)
66 +{
67 +       sysfs_remove_group(&di->bat.dev->kobj,
68 +                       &bq27x00_battery_sysfs_attr_group);
69 +}
70 +
71  static int bq27x00_powersupply_init(struct bq27x00_device_info *di)
72  {
73         int ret;
74 @@ -741,6 +805,7 @@ static int bq27x00_powersupply_init(stru
75  
76         bq27x00_update(di);
77         bq27x00_battery_reg_init(di);
78 +       bq27x00_battery_sysfs_init(di);
79  
80         return 0;
81  }
82 @@ -754,6 +819,7 @@ static void bq27x00_powersupply_unregist
83         cancel_delayed_work_sync(&di->work);
84  
85         bq27x00_battery_reg_exit(di);
86 +       bq27x00_battery_sysfs_exit(di);
87  
88         power_supply_unregister(&di->bat);
89