Hi jaap,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on hwmon/hwmon-next]
[also build test ERROR on v5.8-rc5 next-20200714]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use as documented in
https://git-scm.com/docs/git-format-patch]
url:
https://github.com/0day-ci/linux/commits/jaap-aarts/hwmon-add-fan-pwm-dri...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
hwmon-next
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (
https://github.com/llvm/llvm-project
02946de3802d3bc65bc9f2eb9b8d4969b5a7add8)
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
> drivers/hwmon/asetek_gen6.c:212:12: error: incompatible pointer
types passing 'char [43]' to parameter of type 'const struct device *'
[-Werror,-Wincompatible-pointer-types]
dev_info("[*] Failled
setting fan curve %d,%d,%d/%d\n",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:12: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:48:37: note: passing argument to parameter 'dev'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
> drivers/hwmon/asetek_gen6.c:213:5: warning: incompatible integer
to pointer conversion passing 'char' to parameter of type 'const char *';
take the address with & [-Wint-conversion]
recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
^~~~~~~~~~~
&
include/linux/dev_printk.h:110:25: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:19:22: note: expanded from macro 'dev_fmt'
#define dev_fmt(fmt) fmt
^~~
include/linux/dev_printk.h:48:54: note: passing argument to parameter 'fmt'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:174:5: warning: no previous prototype for function
'set_fan_rpm_curve' [-Wmissing-prototypes]
int set_fan_rpm_curve(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
drivers/hwmon/asetek_gen6.c:174:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int set_fan_rpm_curve(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
static
drivers/hwmon/asetek_gen6.c:246:12: error: incompatible pointer types passing 'char
[41]' to parameter of type 'const struct device *'
[-Werror,-Wincompatible-pointer-types]
dev_info("[*] Failled setting fan rpm %d,%d,%d/%d\n",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:12: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:48:37: note: passing argument to parameter 'dev'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:247:5: warning: incompatible integer to pointer conversion
passing 'char' to parameter of type 'const char *'; take the address with
& [-Wint-conversion]
recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
^~~~~~~~~~~
&
include/linux/dev_printk.h:110:25: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:19:22: note: expanded from macro 'dev_fmt'
#define dev_fmt(fmt) fmt
^~~
include/linux/dev_printk.h:48:54: note: passing argument to parameter 'fmt'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:217:5: warning: no previous prototype for function
'set_fan_target_rpm' [-Wmissing-prototypes]
int set_fan_target_rpm(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
drivers/hwmon/asetek_gen6.c:217:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int set_fan_target_rpm(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
static
drivers/hwmon/asetek_gen6.c:251:6: warning: no previous prototype for function
'get_fan_target_rpm' [-Wmissing-prototypes]
void get_fan_target_rpm(struct hwmon_fan_data *fan_data, long *val)
^
drivers/hwmon/asetek_gen6.c:251:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
void get_fan_target_rpm(struct hwmon_fan_data *fan_data, long *val)
^
static
drivers/hwmon/asetek_gen6.c:280:12: error: incompatible pointer types passing 'char
[44]' to parameter of type 'const struct device *'
[-Werror,-Wincompatible-pointer-types]
dev_info("[*] Failled retrieving fan rmp %d,%d,%d/%d\n",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:12: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:48:37: note: passing argument to parameter 'dev'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:281:5: warning: incompatible integer to pointer conversion
passing 'char' to parameter of type 'const char *'; take the address with
& [-Wint-conversion]
recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
^~~~~~~~~~~
&
include/linux/dev_printk.h:110:25: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:19:22: note: expanded from macro 'dev_fmt'
#define dev_fmt(fmt) fmt
^~~
include/linux/dev_printk.h:48:54: note: passing argument to parameter 'fmt'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:256:5: warning: no previous prototype for function
'get_fan_current_rpm' [-Wmissing-prototypes]
int get_fan_current_rpm(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
drivers/hwmon/asetek_gen6.c:256:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int get_fan_current_rpm(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
static
drivers/hwmon/asetek_gen6.c:315:12: error: incompatible pointer types passing 'char
[41]' to parameter of type 'const struct device *'
[-Werror,-Wincompatible-pointer-types]
dev_info("[*] Failled setting fan pwm %d,%d,%d/%d\n",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:12: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:48:37: note: passing argument to parameter 'dev'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
> drivers/hwmon/asetek_gen6.c:316:5: warning: incompatible integer
to pointer conversion passing 'unsigned char' to parameter of type 'const char
*' [-Wint-conversion]
recv_buf[0], recv_buf[1],
recv_buf[2], recv_buf[3]);
^~~~~~~~~~~
include/linux/dev_printk.h:110:25: note: expanded from macro 'dev_info'
_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/dev_printk.h:19:22: note: expanded from macro 'dev_fmt'
#define dev_fmt(fmt) fmt
^~~
include/linux/dev_printk.h:48:54: note: passing argument to parameter 'fmt'
here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:287:5: warning: no previous prototype for function
'set_fan_target_pwm' [-Wmissing-prototypes]
int set_fan_target_pwm(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
drivers/hwmon/asetek_gen6.c:287:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int set_fan_target_pwm(struct driver *cdev, struct hwmon_fan_data *fan_data,
^
static
drivers/hwmon/asetek_gen6.c:320:9: warning: no previous prototype for function
'is_visible_func' [-Wmissing-prototypes]
umode_t is_visible_func(const void *d, enum hwmon_sensor_types type, u32 attr,
^
drivers/hwmon/asetek_gen6.c:320:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
umode_t is_visible_func(const void *d, enum hwmon_sensor_types type, u32 attr,
^
static
drivers/hwmon/asetek_gen6.c:475:5: warning: no previous prototype for function
'read_func' [-Wmissing-prototypes]
int read_func(struct device *dev, enum hwmon_sensor_types type, u32 attr,
^
drivers/hwmon/asetek_gen6.c:475:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int read_func(struct device *dev, enum hwmon_sensor_types type, u32 attr,
^
static
drivers/hwmon/asetek_gen6.c:556:6: warning: no previous prototype for function
'does_fan_exist' [-Wmissing-prototypes]
bool does_fan_exist(struct driver *cdev, int channel)
^
drivers/hwmon/asetek_gen6.c:556:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
bool does_fan_exist(struct driver *cdev, int channel)
^
static
drivers/hwmon/asetek_gen6.c:569:16: warning: implicit conversion from 'int' to
'char' changes value from 600 to 88 [-Wconstant-conversion]
send_buf[3] = 600;
~ ^~~
drivers/hwmon/asetek_gen6.c:584:5: warning: no previous prototype for function
'get_fan_count' [-Wmissing-prototypes]
int get_fan_count(struct driver *dev)
^
drivers/hwmon/asetek_gen6.c:584:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int get_fan_count(struct driver *dev)
^
static
> drivers/hwmon/asetek_gen6.c:650:30: error: too few arguments
provided to function-like macro invocation
dev_info("[*] Setup
hwmon\n");
^
include/linux/dev_printk.h:109:9: note: macro 'dev_info' defined here
#define dev_info(dev, fmt, ...) \
^
> drivers/hwmon/asetek_gen6.c:650:2: error: use of undeclared
identifier 'dev_info'; did you mean '_dev_info'?
dev_info("[*] Setup hwmon\n");
^~~~~~~~
_dev_info
include/linux/dev_printk.h:48:6: note: '_dev_info' declared here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:650:2: warning: expression result unused [-Wunused-value]
dev_info("[*] Setup hwmon\n");
^~~~~~~~
drivers/hwmon/asetek_gen6.c:593:6: warning: no previous prototype for function
'hwmon_init' [-Wmissing-prototypes]
void hwmon_init(struct driver *dev)
^
drivers/hwmon/asetek_gen6.c:593:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
void hwmon_init(struct driver *dev)
^
static
drivers/hwmon/asetek_gen6.c:656:35: error: too few arguments provided to function-like
macro invocation
dev_info("[*] HWMON DISCONNECT\n");
^
include/linux/dev_printk.h:109:9: note: macro 'dev_info' defined here
#define dev_info(dev, fmt, ...) \
^
drivers/hwmon/asetek_gen6.c:656:2: error: use of undeclared identifier
'dev_info'; did you mean '_dev_info'?
dev_info("[*] HWMON DISCONNECT\n");
^~~~~~~~
_dev_info
include/linux/dev_printk.h:48:6: note: '_dev_info' declared here
void _dev_info(const struct device *dev, const char *fmt, ...);
^
drivers/hwmon/asetek_gen6.c:656:2: warning: expression result unused [-Wunused-value]
dev_info("[*] HWMON DISCONNECT\n");
^~~~~~~~
drivers/hwmon/asetek_gen6.c:653:6: warning: no previous prototype for function
'hwmon_deinit' [-Wmissing-prototypes]
void hwmon_deinit(struct driver *dev)
^
drivers/hwmon/asetek_gen6.c:653:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
void hwmon_deinit(struct driver *dev)
^
static
drivers/hwmon/asetek_gen6.c:670:5: warning: no previous prototype for function
'init_device' [-Wmissing-prototypes]
int init_device(struct usb_device *udev)
^
drivers/hwmon/asetek_gen6.c:670:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int init_device(struct usb_device *udev)
^
static
drivers/hwmon/asetek_gen6.c:688:5: warning: no previous prototype for function
'deinit_device' [-Wmissing-prototypes]
int deinit_device(struct usb_device *udev)
^
drivers/hwmon/asetek_gen6.c:688:1: note: declare 'static' if the function is
not intended to be used outside of this translation unit
int deinit_device(struct usb_device *udev)
^
static
20 warnings and 8 errors generated.
vim +212 drivers/hwmon/asetek_gen6.c
173
174 int set_fan_rpm_curve(struct driver *cdev, struct hwmon_fan_data *fan_data,
175 struct curve_point point[7])
176 {
177 int retval;
178 int wrote;
179 int sndpipe = usb_sndbulkpipe(cdev->udev, cdev->bulk_out_endpointAddr);
180 int rcvpipe = usb_rcvbulkpipe(cdev->udev, cdev->bulk_in_endpointAddr);
181 char *send_buf = cdev->bulk_out_buffer;
182 char *recv_buf = cdev->bulk_in_buffer;
183
184 memcpy(fan_data->curve, point, sizeof(fan_data->curve));
185
186 send_buf[0] = 0x40;
187 send_buf[1] = fan_data->fan_channel;
188 send_buf[2] = point[0].temp;
189 send_buf[3] = point[1].temp;
190 send_buf[4] = point[2].temp;
191 send_buf[5] = point[3].temp;
192 send_buf[6] = point[4].temp;
193 send_buf[7] = point[5].temp;
194 send_buf[8] = point[6].temp;
195 send_buf[9] = point[0].pwm;
196 send_buf[10] = point[1].pwm;
197 send_buf[11] = point[2].pwm;
198 send_buf[12] = point[3].pwm;
199 send_buf[13] = point[4].pwm;
200 send_buf[14] = point[5].pwm;
201 send_buf[15] = point[6].pwm;
202
203 retval = usb_bulk_msg(cdev->udev, sndpipe, send_buf, 16, &wrote, 100);
204 if (retval != 0)
205 return retval;
206
207 retval = usb_bulk_msg(cdev->udev, rcvpipe, recv_buf, 4, &wrote, 100);
208 if (retval != 0)
209 return retval;
210
211 if (!check_succes(send_buf[0], recv_buf))
212 dev_info("[*] Failled setting fan curve
%d,%d,%d/%d\n",
213 recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
214 return 0;
215 }
216
217 int set_fan_target_rpm(struct driver *cdev, struct hwmon_fan_data *fan_data,
218 long val)
219 {
220 int retval;
221 int wrote;
222 int sndpipe = usb_sndbulkpipe(cdev->udev, cdev->bulk_out_endpointAddr);
223 int rcvpipe = usb_rcvbulkpipe(cdev->udev, cdev->bulk_in_endpointAddr);
224
225 char *send_buf = cdev->bulk_out_buffer;
226 char *recv_buf = cdev->bulk_in_buffer;
227
228 fan_data->fan_target = val;
229 fan_data->fan_pwm_target = 0;
230
231 send_buf[0] = 0x43;
232 send_buf[1] = fan_data->fan_channel;
233 send_buf[2] = (fan_data->fan_target >> 8);
234 send_buf[3] = fan_data->fan_target;
235
236 retval = usb_bulk_msg(cdev->udev, sndpipe, send_buf, 4, &wrote, 100);
237 if (retval != 0)
238 return retval;
239
240 retval = usb_bulk_msg(cdev->udev, rcvpipe, recv_buf, 6, &wrote, 100000);
241 if (retval != 0)
242 return retval;
243
244 //no error
245 if (!check_succes(send_buf[0], recv_buf))
246 dev_info("[*] Failled setting fan rpm %d,%d,%d/%d\n",
247 recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
248 return 0;
249 }
250
251 void get_fan_target_rpm(struct hwmon_fan_data *fan_data, long *val)
252 {
253 *val = fan_data->fan_target;
254 }
255
256 int get_fan_current_rpm(struct driver *cdev, struct hwmon_fan_data *fan_data,
257 long *val)
258 {
259 int retval;
260 int wrote;
261 int sndpipe = usb_sndbulkpipe(cdev->udev, cdev->bulk_out_endpointAddr);
262 int rcvpipe = usb_rcvbulkpipe(cdev->udev, cdev->bulk_in_endpointAddr);
263
264 char *send_buf = cdev->bulk_out_buffer;
265 char *recv_buf = cdev->bulk_in_buffer;
266
267 send_buf[0] = 0x41;
268 send_buf[1] = fan_data->fan_channel;
269
270 retval = usb_bulk_msg(cdev->udev, sndpipe, send_buf, 2, &wrote, 100);
271 if (retval != 0)
272 return retval;
273
274 retval = usb_bulk_msg(cdev->udev, rcvpipe, recv_buf, 6, &wrote, 100);
275 if (retval != 0)
276 return retval;
277
278 if (!check_succes(0x41, recv_buf) ||
279 recv_buf[3] != fan_data->fan_channel)
280 dev_info("[*] Failled retrieving fan rmp %d,%d,%d/%d\n",
281 recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
282
283 *val = (((uint8_t)recv_buf[4]) << 8) + (uint8_t)recv_buf[5];
284 return 0;
285 }
286
287 int set_fan_target_pwm(struct driver *cdev, struct hwmon_fan_data *fan_data,
288 long val)
289 {
290 int retval;
291 int wrote;
292 int sndpipe = usb_sndbulkpipe(cdev->udev, cdev->bulk_out_endpointAddr);
293 int rcvpipe = usb_rcvbulkpipe(cdev->udev, cdev->bulk_in_endpointAddr);
294
295 unsigned char *send_buf = cdev->bulk_out_buffer;
296 unsigned char *recv_buf = cdev->bulk_in_buffer;
297
298 fan_data->fan_pwm_target = val;
299 fan_data->fan_target = 0;
300
301 send_buf[0] = 0x42;
302 send_buf[1] = fan_data->fan_channel;
303 send_buf[3] = fan_data->fan_pwm_target;
304
305 retval = usb_bulk_msg(cdev->udev, sndpipe, send_buf, 4, &wrote, 100);
306 if (retval != 0)
307 return retval;
308
309 retval = usb_bulk_msg(cdev->udev, rcvpipe, recv_buf, 6, &wrote, 100000);
310 if (retval != 0)
311 return retval;
312
313 //no error
314 if (!check_succes(send_buf[0], recv_buf))
315 dev_info("[*] Failled setting fan pwm %d,%d,%d/%d\n",
316 recv_buf[0], recv_buf[1], recv_buf[2], recv_buf[3]);
317 return 0;
318 }
319
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org