Re: [PATCH v19 4/4] power: wm831x_power: Support USB charger current limit management
From: kbuild test robot
Date: Mon Feb 20 2017 - 05:22:10 EST
Hi Baolin,
[auto build test ERROR on v4.9-rc8]
[cannot apply to balbi-usb/next usb/usb-testing battery/master next-20170220]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Baolin-Wang/Introduce-usb-charger-framework-to-deal-with-the-usb-gadget-power-negotation/20170220-173051
config: i386-randconfig-x017-201708 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
In file included from drivers/power/supply/wm831x_power.c:16:0:
include/linux/usb/charger.h: In function 'usb_charger_get_state':
include/linux/usb/charger.h:151:9: error: 'USB_CHARGER_REMOVE' undeclared (first use in this function)
return USB_CHARGER_REMOVE;
^~~~~~~~~~~~~~~~~~
include/linux/usb/charger.h:151:9: note: each undeclared identifier is reported only once for each function it appears in
drivers/power/supply/wm831x_power.c: In function 'wm831x_usb_limit_change':
>> drivers/power/supply/wm831x_power.c:151:2: error: 'best' undeclared (first use in this function)
best = 0;
^~~~
>> drivers/power/supply/wm831x_power.c:152:7: error: 'i' undeclared (first use in this function)
for (i = 0; i < ARRAY_SIZE(wm831x_usb_limits); i++) {
^
vim +/best +151 drivers/power/supply/wm831x_power.c
10
11 #include <linux/module.h>
12 #include <linux/err.h>
13 #include <linux/platform_device.h>
14 #include <linux/power_supply.h>
15 #include <linux/slab.h>
> 16 #include <linux/usb/charger.h>
17
18 #include <linux/mfd/wm831x/core.h>
19 #include <linux/mfd/wm831x/auxadc.h>
20 #include <linux/mfd/wm831x/pmu.h>
21 #include <linux/mfd/wm831x/pdata.h>
22
23 struct wm831x_power {
24 struct wm831x *wm831x;
25 struct power_supply *wall;
26 struct power_supply *usb;
27 struct power_supply *battery;
28 struct power_supply_desc wall_desc;
29 struct power_supply_desc usb_desc;
30 struct power_supply_desc battery_desc;
31 char wall_name[20];
32 char usb_name[20];
33 char battery_name[20];
34 bool have_battery;
35 struct usb_charger *usb_charger;
36 struct notifier_block usb_notify;
37 };
38
39 static int wm831x_power_check_online(struct wm831x *wm831x, int supply,
40 union power_supply_propval *val)
41 {
42 int ret;
43
44 ret = wm831x_reg_read(wm831x, WM831X_SYSTEM_STATUS);
45 if (ret < 0)
46 return ret;
47
48 if (ret & supply)
49 val->intval = 1;
50 else
51 val->intval = 0;
52
53 return 0;
54 }
55
56 static int wm831x_power_read_voltage(struct wm831x *wm831x,
57 enum wm831x_auxadc src,
58 union power_supply_propval *val)
59 {
60 int ret;
61
62 ret = wm831x_auxadc_read_uv(wm831x, src);
63 if (ret >= 0)
64 val->intval = ret;
65
66 return ret;
67 }
68
69 /*********************************************************************
70 * WALL Power
71 *********************************************************************/
72 static int wm831x_wall_get_prop(struct power_supply *psy,
73 enum power_supply_property psp,
74 union power_supply_propval *val)
75 {
76 struct wm831x_power *wm831x_power = dev_get_drvdata(psy->dev.parent);
77 struct wm831x *wm831x = wm831x_power->wm831x;
78 int ret = 0;
79
80 switch (psp) {
81 case POWER_SUPPLY_PROP_ONLINE:
82 ret = wm831x_power_check_online(wm831x, WM831X_PWR_WALL, val);
83 break;
84 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
85 ret = wm831x_power_read_voltage(wm831x, WM831X_AUX_WALL, val);
86 break;
87 default:
88 ret = -EINVAL;
89 break;
90 }
91
92 return ret;
93 }
94
95 static enum power_supply_property wm831x_wall_props[] = {
96 POWER_SUPPLY_PROP_ONLINE,
97 POWER_SUPPLY_PROP_VOLTAGE_NOW,
98 };
99
100 /*********************************************************************
101 * USB Power
102 *********************************************************************/
103 static int wm831x_usb_get_prop(struct power_supply *psy,
104 enum power_supply_property psp,
105 union power_supply_propval *val)
106 {
107 struct wm831x_power *wm831x_power = dev_get_drvdata(psy->dev.parent);
108 struct wm831x *wm831x = wm831x_power->wm831x;
109 int ret = 0;
110
111 switch (psp) {
112 case POWER_SUPPLY_PROP_ONLINE:
113 ret = wm831x_power_check_online(wm831x, WM831X_PWR_USB, val);
114 break;
115 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
116 ret = wm831x_power_read_voltage(wm831x, WM831X_AUX_USB, val);
117 break;
118 default:
119 ret = -EINVAL;
120 break;
121 }
122
123 return ret;
124 }
125
126 static enum power_supply_property wm831x_usb_props[] = {
127 POWER_SUPPLY_PROP_ONLINE,
128 POWER_SUPPLY_PROP_VOLTAGE_NOW,
129 };
130
131 /* In milliamps */
132 static const unsigned int wm831x_usb_limits[] = {
133 0,
134 2,
135 100,
136 500,
137 900,
138 1500,
139 1800,
140 550,
141 };
142
143 static int wm831x_usb_limit_change(struct notifier_block *nb,
144 unsigned long limit, void *data)
145 {
146 struct wm831x_power *wm831x_power = container_of(nb,
147 struct wm831x_power,
148 usb_notify);
149
150 /* Find the highest supported limit */
> 151 best = 0;
> 152 for (i = 0; i < ARRAY_SIZE(wm831x_usb_limits); i++) {
153 if (limit >= wm831x_usb_limits[i] &&
154 wm831x_usb_limits[best] < wm831x_usb_limits[i])
155 best = i;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip