Re: [PATCH 3/3] leds: leds-lp5569: Add support for Texas Instruments LP5569

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Christian,

kernel test robot noticed the following build errors:

[auto build test ERROR on lee-leds/for-leds-next]
[also build test ERROR on robh/for-next linus/master v6.9 next-20240517]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Christian-Marangi/dt-bindings-leds-lp55xx-Add-new-ti-lp5569-compatible/20240515-223434
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git for-leds-next
patch link:    https://lore.kernel.org/r/20240515143129.31557-3-ansuelsmth%40gmail.com
patch subject: [PATCH 3/3] leds: leds-lp5569: Add support for Texas Instruments LP5569
config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20240518/202405182007.uyC8NXfY-lkp@xxxxxxxxx/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project d3455f4ddd16811401fa153298fadd2f59f6914e)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240518/202405182007.uyC8NXfY-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405182007.uyC8NXfY-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

   In file included from drivers/leds/leds-lp5569.c:15:
   In file included from include/linux/i2c.h:19:
   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/hexagon/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/hexagon/include/asm/io.h:328:
   include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     547 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     560 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
         |                                                   ^
   In file included from drivers/leds/leds-lp5569.c:15:
   In file included from include/linux/i2c.h:19:
   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/hexagon/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/hexagon/include/asm/io.h:328:
   include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     573 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
         |                                                   ^
   In file included from drivers/leds/leds-lp5569.c:15:
   In file included from include/linux/i2c.h:19:
   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/hexagon/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/hexagon/include/asm/io.h:328:
   include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     584 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     594 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     604 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   In file included from drivers/leds/leds-lp5569.c:15:
   In file included from include/linux/i2c.h:19:
   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:21:
   In file included from include/linux/mm.h:2208:
   include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
>> drivers/leds/leds-lp5569.c:169:9: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     169 |         val |= FIELD_PREP(LP5569_CP_MODE_MASK, chip->pdata->charge_pump_mode);
         |                ^
>> drivers/leds/leds-lp5569.c:195:8: error: call to undeclared function 'FIELD_PREP_CONST'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     195 |         val = LP5569_MODE_LOAD_ENG << LP5569_MODE_ENGn_SHIFT(idx);
         |               ^
   drivers/leds/leds-lp5569.c:41:33: note: expanded from macro 'LP5569_MODE_LOAD_ENG'
      41 | #define   LP5569_MODE_LOAD_ENG          FIELD_PREP_CONST(LP5569_MODE_ENG_MASK, 0x1)
         |                                         ^
   drivers/leds/leds-lp5569.c:262:40: error: call to undeclared function 'FIELD_PREP_CONST'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     262 |                 if (LP5569_MODE_ENGn_GET(i, mode) != LP5569_MODE_LOAD_ENG)
         |                                                      ^
   drivers/leds/leds-lp5569.c:41:33: note: expanded from macro 'LP5569_MODE_LOAD_ENG'
      41 | #define   LP5569_MODE_LOAD_ENG          FIELD_PREP_CONST(LP5569_MODE_ENG_MASK, 0x1)
         |                                         ^
>> drivers/leds/leds-lp5569.c:321:11: error: call to undeclared function 'FIELD_GET'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     321 |         status = FIELD_GET(LP5569_ENG_STATUS_MASK, status);
         |                  ^
   drivers/leds/leds-lp5569.c:601:6: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     601 |                                  FIELD_PREP(LP5569_CP_MODE_MASK, LP55XX_CP_BOOST),
         |                                  ^
   drivers/leds/leds-lp5569.c:696:6: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     696 |                                  FIELD_PREP(LP5569_CP_MODE_MASK, LP55XX_CP_BYPASS),
         |                                  ^
   drivers/leds/leds-lp5569.c:903:9: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     903 |                 val = FIELD_PREP(LP5569_FADER_MAPPING_MASK, val);
         |                       ^
>> drivers/leds/leds-lp5569.c:904:13: error: call to undeclared function 'FIELD_MAX'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     904 |                 if (val > FIELD_MAX(LP5569_FADER_MAPPING_MASK)) {
         |                           ^
   drivers/leds/leds-lp5569.c:932:10: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     932 |                         val = FIELD_PREP(LP5569_FADER_MAPPING_MASK, buf[i] - '0');
         |                               ^
   7 warnings and 9 errors generated.


vim +/FIELD_PREP +169 drivers/leds/leds-lp5569.c

   155	
   156	static int lp5569_post_init_device(struct lp55xx_chip *chip)
   157	{
   158		int ret;
   159		int val;
   160	
   161		ret = lp55xx_write(chip, LP5569_REG_ENABLE, LP5569_ENABLE);
   162		if (ret)
   163			return ret;
   164	
   165		/* Chip startup time is 500 us, 1 - 2 ms gives some margin */
   166		usleep_range(1000, 2000);
   167	
   168		val = LP5569_DEFAULT_CONFIG;
 > 169		val |= FIELD_PREP(LP5569_CP_MODE_MASK, chip->pdata->charge_pump_mode);
   170	
   171		if (chip->pdata->clock_mode == LP55XX_CLOCK_INT)
   172			val |= LP5569_INTERNAL_CLK;
   173	
   174		ret = lp55xx_write(chip, LP5569_REG_MISC, val);
   175		if (ret)
   176			return ret;
   177	
   178		if (chip->pdata->clock_mode == LP55XX_CLOCK_INT) {
   179			ret = lp55xx_update_bits(chip, LP5569_REG_IO_CONTROL,
   180						 LP5569_CLK_OUTPUT,
   181						 LP5569_CLK_OUTPUT);
   182			if (ret)
   183				return ret;
   184		}
   185	
   186		return lp5569_init_program_engine(chip);
   187	}
   188	
   189	static void lp5569_load_engine(struct lp55xx_chip *chip)
   190	{
   191		enum lp55xx_engine_index idx = chip->engine_idx;
   192		u8 mask, val;
   193	
   194		mask = LP5569_MODE_ENGn_MASK(idx);
 > 195		val = LP5569_MODE_LOAD_ENG << LP5569_MODE_ENGn_SHIFT(idx);
   196	
   197		lp55xx_update_bits(chip, LP5569_REG_OP_MODE, mask, val);
   198	
   199		lp5569_wait_opmode_done();
   200	}
   201	
   202	static void lp5569_load_engine_and_select_page(struct lp55xx_chip *chip)
   203	{
   204		enum lp55xx_engine_index idx = chip->engine_idx;
   205	
   206		lp5569_load_engine(chip);
   207	
   208		lp55xx_write(chip, LP5569_REG_PROG_PAGE_SEL, LP5569_PAGE_ENG(idx));
   209	}
   210	
   211	static void lp5569_stop_all_engines(struct lp55xx_chip *chip)
   212	{
   213		lp55xx_write(chip, LP5569_REG_OP_MODE, 0);
   214		lp5569_wait_opmode_done();
   215	}
   216	
   217	static void lp5569_stop_engine(struct lp55xx_chip *chip)
   218	{
   219		enum lp55xx_engine_index idx = chip->engine_idx;
   220	
   221		lp55xx_update_bits(chip, LP5569_REG_OP_MODE, LP5569_MODE_ENGn_MASK(idx), 0);
   222	
   223		lp5569_wait_opmode_done();
   224	}
   225	
   226	static void lp5569_turn_off_channels(struct lp55xx_chip *chip)
   227	{
   228		int i;
   229	
   230		for (i = 0; i < LP5569_MAX_LEDS; i++)
   231			lp55xx_write(chip, LP5569_REG_LED_PWM_BASE + i, 0);
   232	}
   233	
   234	static void lp5569_run_engine(struct lp55xx_chip *chip, bool start)
   235	{
   236		int i, ret;
   237		u8 mode;
   238		u8 exec;
   239	
   240		/* stop engine */
   241		if (!start) {
   242			lp5569_stop_engine(chip);
   243			lp5569_turn_off_channels(chip);
   244			return;
   245		}
   246	
   247		/*
   248		 * To run the engine,
   249		 * operation mode and enable register should updated at the same time
   250		 */
   251	
   252		ret = lp55xx_read(chip, LP5569_REG_OP_MODE, &mode);
   253		if (ret)
   254			return;
   255	
   256		ret = lp55xx_read(chip, LP5569_REG_EXEC_CTRL, &exec);
   257		if (ret)
   258			return;
   259	
   260		/* change operation mode to RUN only when each engine is loading */
   261		for (i = LP55XX_ENGINE_1; i <= LP55XX_ENGINE_3; i++) {
   262			if (LP5569_MODE_ENGn_GET(i, mode) != LP5569_MODE_LOAD_ENG)
   263				continue;
   264	
   265			mode &= ~LP5569_MODE_ENGn_MASK(i);
   266			mode |= LP5569_MODE_RUN_ENG << LP5569_MODE_ENGn_SHIFT(i);
   267			exec &= ~LP5569_EXEC_ENGn_MASK(i);
   268			exec |= LP5569_EXEC_RUN_ENG << LP5569_EXEC_ENGn_SHIFT(i);
   269		}
   270	
   271		lp55xx_write(chip, LP5569_REG_OP_MODE, mode);
   272		lp5569_wait_opmode_done();
   273	
   274		lp55xx_write(chip, LP5569_REG_EXEC_CTRL, exec);
   275	}
   276	
   277	static int lp5569_init_program_engine(struct lp55xx_chip *chip)
   278	{
   279		int i;
   280		int j;
   281		int ret;
   282		u8 status;
   283		/* one pattern per engine setting LED MUX start and stop addresses */
   284		static const u8 pattern[][LP5569_PROGRAM_LENGTH] =  {
   285			{ 0x9c, LP5569_ENG1_MUX_ADDR, 0x9c, 0xb0, 0x9d, 0x80, 0xd8, 0x00, 0},
   286			{ 0x9c, LP5569_ENG2_MUX_ADDR, 0x9c, 0xc0, 0x9d, 0x80, 0xd8, 0x00, 0},
   287			{ 0x9c, LP5569_ENG3_MUX_ADDR, 0x9c, 0xd0, 0x9d, 0x80, 0xd8, 0x00, 0},
   288		};
   289	
   290		/* hardcode 32 bytes of memory for each engine from program memory */
   291		ret = lp55xx_write(chip, LP5569_REG_CH1_PROG_START, LP5569_ENG1_PROG_ADDR);
   292		if (ret)
   293			return ret;
   294	
   295		ret = lp55xx_write(chip, LP5569_REG_CH2_PROG_START, LP5569_ENG2_PROG_ADDR);
   296		if (ret)
   297			return ret;
   298	
   299		ret = lp55xx_write(chip, LP5569_REG_CH3_PROG_START, LP5569_ENG3_PROG_ADDR);
   300		if (ret)
   301			return ret;
   302	
   303		/* write LED MUX address space for each engine */
   304		for (i = LP55XX_ENGINE_1; i <= LP55XX_ENGINE_3; i++) {
   305			chip->engine_idx = i;
   306			lp5569_load_engine_and_select_page(chip);
   307	
   308			for (j = 0; j < LP5569_PROGRAM_LENGTH; j++) {
   309				ret = lp55xx_write(chip, LP5569_REG_PROG_MEM + j,
   310						   pattern[i - 1][j]);
   311				if (ret)
   312					goto out;
   313			}
   314		}
   315	
   316		lp5569_run_engine(chip, true);
   317	
   318		/* Let the programs run for couple of ms and check the engine status */
   319		usleep_range(3000, 6000);
   320		lp55xx_read(chip, LP5569_REG_STATUS, &status);
 > 321		status = FIELD_GET(LP5569_ENG_STATUS_MASK, status);
   322	
   323		if (status != LP5569_ENG_STATUS_MASK) {
   324			dev_err(&chip->cl->dev,
   325				"could not configure LED engine, status = 0x%.2x\n",
   326				status);
   327			ret = -1;
   328		}
   329	
   330	out:
   331		lp5569_stop_all_engines(chip);
   332		return ret;
   333	}
   334	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux