Message ID | YXQStu5yv4bwj2Tn@fedora (mailing list archive) |
---|---|
State | Awaiting Upstream |
Headers | show |
Series | backlight: lp855x: Switch to atomic PWM API | expand |
Hi "Maíra,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on lee-backlight/for-backlight-next]
[also build test ERROR on v5.15-rc7 next-20211026]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Ma-ra-Canal/backlight-lp855x-Switch-to-atomic-PWM-API/20211024-103835
base: https://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight.git for-backlight-next
config: riscv-buildonly-randconfig-r005-20211026 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project e5fb79b31424267704e9d2d9674089fd7316453e)
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 riscv cross compiling tool for clang build
# apt-get install binutils-riscv64-linux-gnu
# https://github.com/0day-ci/linux/commit/f79ab2c306d1c5d666df34f3062f9f1a0b8e4448
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ma-ra-Canal/backlight-lp855x-Switch-to-atomic-PWM-API/20211024-103835
git checkout f79ab2c306d1c5d666df34f3062f9f1a0b8e4448
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=riscv
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/video/backlight/lp855x_bl.c:10:
In file included from include/linux/i2c.h:18:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:464:31: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
val = __raw_readb(PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:477:61: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:36:51: note: expanded from macro '__le16_to_cpu'
#define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
^
In file included from drivers/video/backlight/lp855x_bl.c:10:
In file included from include/linux/i2c.h:18:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:490:61: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:34:51: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
^
In file included from drivers/video/backlight/lp855x_bl.c:10:
In file included from include/linux/i2c.h:18:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:501:33: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
__raw_writeb(value, PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:511:59: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
__raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:521:59: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
__raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:1024:55: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
~~~~~~~~~~ ^
>> drivers/video/backlight/lp855x_bl.c:242:6: error: variable 'pwm' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
if (!lp->pwm) {
^~~~~~~~
drivers/video/backlight/lp855x_bl.c:260:18: note: uninitialized use occurs here
pwm_apply_state(pwm, &state);
^~~
drivers/video/backlight/lp855x_bl.c:242:2: note: remove the 'if' if its condition is always true
if (!lp->pwm) {
^~~~~~~~~~~~~~
drivers/video/backlight/lp855x_bl.c:238:24: note: initialize the variable 'pwm' to silence this warning
struct pwm_device *pwm;
^
= NULL
8 errors generated.
vim +242 drivers/video/backlight/lp855x_bl.c
7be865ab8634d4e Kim, Milo 2012-03-23 233
8cc9764c9c7d01a Kim, Milo 2012-12-17 234 static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
8cc9764c9c7d01a Kim, Milo 2012-12-17 235 {
8cc9764c9c7d01a Kim, Milo 2012-12-17 236 unsigned int period = lp->pdata->period_ns;
8cc9764c9c7d01a Kim, Milo 2012-12-17 237 unsigned int duty = br * period / max_br;
8cc9764c9c7d01a Kim, Milo 2012-12-17 238 struct pwm_device *pwm;
f79ab2c306d1c5d Maíra Canal 2021-10-23 239 struct pwm_state state;
8cc9764c9c7d01a Kim, Milo 2012-12-17 240
8cc9764c9c7d01a Kim, Milo 2012-12-17 241 /* request pwm device with the consumer name */
8cc9764c9c7d01a Kim, Milo 2012-12-17 @242 if (!lp->pwm) {
8cc9764c9c7d01a Kim, Milo 2012-12-17 243 pwm = devm_pwm_get(lp->dev, lp->chipname);
8cc9764c9c7d01a Kim, Milo 2012-12-17 244 if (IS_ERR(pwm))
8cc9764c9c7d01a Kim, Milo 2012-12-17 245 return;
8cc9764c9c7d01a Kim, Milo 2012-12-17 246
8cc9764c9c7d01a Kim, Milo 2012-12-17 247 lp->pwm = pwm;
8cc9764c9c7d01a Kim, Milo 2012-12-17 248 }
8cc9764c9c7d01a Kim, Milo 2012-12-17 249
f79ab2c306d1c5d Maíra Canal 2021-10-23 250 pwm_init_state(pwm, &state);
f79ab2c306d1c5d Maíra Canal 2021-10-23 251
f79ab2c306d1c5d Maíra Canal 2021-10-23 252 state.duty_cycle = duty;
f79ab2c306d1c5d Maíra Canal 2021-10-23 253 state.period = period;
f79ab2c306d1c5d Maíra Canal 2021-10-23 254
8cc9764c9c7d01a Kim, Milo 2012-12-17 255 if (duty)
f79ab2c306d1c5d Maíra Canal 2021-10-23 256 state.enabled = true;
8cc9764c9c7d01a Kim, Milo 2012-12-17 257 else
f79ab2c306d1c5d Maíra Canal 2021-10-23 258 state.enabled = false;
f79ab2c306d1c5d Maíra Canal 2021-10-23 259
f79ab2c306d1c5d Maíra Canal 2021-10-23 260 pwm_apply_state(pwm, &state);
8cc9764c9c7d01a Kim, Milo 2012-12-17 261 }
8cc9764c9c7d01a Kim, Milo 2012-12-17 262
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c index e94932c69f54..dd63141a0d26 100644 --- a/drivers/video/backlight/lp855x_bl.c +++ b/drivers/video/backlight/lp855x_bl.c @@ -236,6 +236,7 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br) unsigned int period = lp->pdata->period_ns; unsigned int duty = br * period / max_br; struct pwm_device *pwm; + struct pwm_state state; /* request pwm device with the consumer name */ if (!lp->pwm) { @@ -244,19 +245,19 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br) return; lp->pwm = pwm; - - /* - * FIXME: pwm_apply_args() should be removed when switching to - * the atomic PWM API. - */ - pwm_apply_args(pwm); } - pwm_config(lp->pwm, duty, period); + pwm_init_state(pwm, &state); + + state.duty_cycle = duty; + state.period = period; + if (duty) - pwm_enable(lp->pwm); + state.enabled = true; else - pwm_disable(lp->pwm); + state.enabled = false; + + pwm_apply_state(pwm, &state); } static int lp855x_bl_update_status(struct backlight_device *bl)
Remove legacy PWM interface (pwm_config, pwm_enable, pwm_disable) and replace it for the atomic PWM API. Signed-off-by: Maíra Canal <maira.canal@usp.br> --- drivers/video/backlight/lp855x_bl.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)