lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202512061522.S28ch1Qu-lkp@intel.com>
Date: Sat, 6 Dec 2025 16:01:32 +0800
From: kernel test robot <lkp@...el.com>
To: Timothy Pearson <tpearson@...torengineering.com>,
	devicetree@...r.kernel.org
Cc: llvm@...ts.linux.dev, oe-kbuild-all@...ts.linux.dev,
	linux-kernel@...r.kernel.org, robh+dt@...nel.org,
	conor+dt@...nel.org, krzysztof.kozlowski+dt@...aro.org,
	lee@...nel.org, Georgy.Yakovlev@...y.com,
	sanastasio@...torengineering.com,
	Timothy Pearson <tpearson@...torengineering.com>
Subject: Re: [PATCH v5 3/4] led: sony-cronos-smc: Add RGB LED driver for Sony
 Cronos SMC

Hi Timothy,

kernel test robot noticed the following build errors:

[auto build test ERROR on lee-mfd/for-mfd-next]
[also build test ERROR on lee-mfd/for-mfd-fixes lee-leds/for-leds-next robh/for-next linus/master v6.18 next-20251205]
[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/Timothy-Pearson/dt-bindings-mfd-Add-sony-cronos-smc/20251205-030506
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
patch link:    https://lore.kernel.org/r/20251204185015.1364439-4-tpearson%40raptorengineering.com
patch subject: [PATCH v5 3/4] led: sony-cronos-smc: Add RGB LED driver for Sony Cronos SMC
config: um-allmodconfig (https://download.01.org/0day-ci/archive/20251206/202512061522.S28ch1Qu-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251206/202512061522.S28ch1Qu-lkp@intel.com/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@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202512061522.S28ch1Qu-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   In file included from drivers/leds/leds-sony-cronos.c:16:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:12:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:1209:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
    1209 |         return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
         |                                                   ~~~~~~~~~~ ^
>> drivers/leds/leds-sony-cronos.c:140:10: warning: variable 'ret' is uninitialized when used here [-Wuninitialized]
     140 |                 return ret;
         |                        ^~~
   drivers/leds/leds-sony-cronos.c:119:9: note: initialize the variable 'ret' to silence this warning
     119 |         int ret;
         |                ^
         |                 = 0
>> drivers/leds/leds-sony-cronos.c:304:32: error: incompatible function pointer types assigning to 'int (*)(struct led_classdev *, enum led_brightness)' from 'ssize_t (struct led_classdev *, enum led_brightness)' (aka 'long (struct led_classdev *, enum led_brightness)') [-Wincompatible-function-pointer-types]
     304 |         cdev->brightness_set_blocking = cronos_led_set_brightness;
         |                                       ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
   2 warnings and 1 error generated.


vim +304 drivers/leds/leds-sony-cronos.c

   110	
   111	static int cronos_led_color_store(struct sony_cronos_smc *chip, struct sony_cronos_led *led)
   112	{
   113		u8 byte;
   114		u8 color_mask;
   115		u8 color_shift;
   116		u8 color_key_red;
   117		u8 color_key_green;
   118		u8 color_key_blue;
   119		int ret;
   120	
   121		if (led->led_type == LED_TYPE_STATUS) {
   122			color_mask = CRONOS_LEDS_STATUS_COLOR_MASK;
   123			color_shift = CRONOS_LEDS_STATUS_COLOR_SHIFT;
   124		} else if (led->led_type == LED_TYPE_LINK) {
   125			color_mask = CRONOS_LEDS_LINK_COLOR_MASK;
   126			color_shift = CRONOS_LEDS_LINK_COLOR_SHIFT;
   127		} else if (led->led_id == LED_ID_CCM1_POWER) {
   128			color_mask = CRONOS_LEDS_CCM1_POWER_COLOR_MASK;
   129			color_shift = CRONOS_LEDS_CCM1_POWER_COLOR_SHIFT;
   130		} else if (led->led_id == LED_ID_CCM2_POWER) {
   131			color_mask = CRONOS_LEDS_CCM2_POWER_COLOR_MASK;
   132			color_shift = CRONOS_LEDS_CCM2_POWER_COLOR_SHIFT;
   133		} else if (led->led_id == LED_ID_CCM3_POWER) {
   134			color_mask = CRONOS_LEDS_CCM3_POWER_COLOR_MASK;
   135			color_shift = CRONOS_LEDS_CCM3_POWER_COLOR_SHIFT;
   136		} else if (led->led_id == LED_ID_CCM4_POWER) {
   137			color_mask = CRONOS_LEDS_CCM4_POWER_COLOR_MASK;
   138			color_shift = CRONOS_LEDS_CCM4_POWER_COLOR_SHIFT;
   139		} else
 > 140			return ret;
   141	
   142		switch (led->led_type) {
   143		case LED_TYPE_POWER:
   144			color_key_red = LED_COLOR_POWER_RED;
   145			color_key_green = LED_COLOR_POWER_GREEN;
   146			/* Blue channel does not exist for CCM power LEDs */
   147			color_key_blue = LED_COLOR_POWER_OFF;
   148			break;
   149		default:
   150			color_key_red = LED_COLOR_RED;
   151			color_key_green = LED_COLOR_GREEN;
   152			color_key_blue = LED_COLOR_BLUE;
   153		}
   154	
   155		/* Assemble SMC color command code */
   156		byte = LED_COLOR_POWER_OFF;
   157		if (led->subled_info[0].brightness > 128)
   158			byte |= color_key_red;
   159		if (led->subled_info[1].brightness > 128)
   160			byte |= color_key_green;
   161		if (led->subled_info[2].brightness > 128)
   162			byte |= color_key_blue;
   163	
   164		ret = regmap_update_bits(chip->regmap, led->led_register, color_mask, byte << color_shift);
   165		if (ret) {
   166			dev_err(chip->dev, "Failed to set color value 0x%02x to LED register 0x%02x", byte,
   167				led->led_register);
   168			return ret;
   169		}
   170		return 0;
   171	}
   172	
   173	static ssize_t cronos_led_set_brightness(struct led_classdev *cdev, enum led_brightness brightness)
   174	{
   175		struct led_classdev_mc *mc_cdev = lcdev_to_mccdev(cdev);
   176		struct sony_cronos_leds *leds = dev_get_drvdata(cdev->dev->parent);
   177		struct sony_cronos_led *led = to_cronos_led(mc_cdev);
   178	
   179		led_mc_calc_color_components(mc_cdev, brightness ?: cdev->max_brightness);
   180	
   181		return cronos_led_color_store(leds->hw, led);
   182	}
   183	
   184	static int sony_cronos_led_register(struct device *dev, struct sony_cronos_leds *leds,
   185					    struct sony_cronos_led *led, struct device_node *np)
   186	{
   187		struct led_init_data init_data = {};
   188		struct led_classdev *cdev;
   189		int led_index;
   190		int ret, color;
   191	
   192		ret = of_property_read_u32(np, "reg", &led_index);
   193		if (ret || led_index >= LED_COUNT_ALL) {
   194			dev_err(dev, "'reg' property is out of range (0-%i)\n", LED_COUNT_ALL - 1);
   195			return -EINVAL;
   196		}
   197	
   198		switch (led_index) {
   199		case 0:
   200			led->led_register = CRONOS_LEDS_CCM1_STATUS_REG;
   201			led->led_type = LED_TYPE_STATUS;
   202			led->led_id = LED_ID_CCM1_STATUS;
   203			break;
   204		case 1:
   205			led->led_register = CRONOS_LEDS_CCM2_STATUS_REG;
   206			led->led_type = LED_TYPE_STATUS;
   207			led->led_id = LED_ID_CCM2_STATUS;
   208			break;
   209		case 2:
   210			led->led_register = CRONOS_LEDS_CCM3_STATUS_REG;
   211			led->led_type = LED_TYPE_STATUS;
   212			led->led_id = LED_ID_CCM3_STATUS;
   213			break;
   214		case 3:
   215			led->led_register = CRONOS_LEDS_CCM4_STATUS_REG;
   216			led->led_type = LED_TYPE_STATUS;
   217			led->led_id = LED_ID_CCM4_STATUS;
   218			break;
   219		case 4:
   220			led->led_register = CRONOS_LEDS_SWITCH_STATUS_REG;
   221			led->led_type = LED_TYPE_STATUS;
   222			led->led_id = LED_ID_SWITCH_STATUS;
   223			break;
   224		case 5:
   225			led->led_register = CRONOS_LEDS_SMC_STATUS_REG;
   226			led->led_type = LED_TYPE_STATUS;
   227			led->led_id = LED_ID_SMC_STATUS;
   228			break;
   229		case 6:
   230			led->led_register = CRONOS_LEDS_CCM1_STATUS_REG;
   231			led->led_type = LED_TYPE_LINK;
   232			led->led_id = LED_ID_CCM1_LINK;
   233			break;
   234		case 7:
   235			led->led_register = CRONOS_LEDS_CCM2_STATUS_REG;
   236			led->led_type = LED_TYPE_LINK;
   237			led->led_id = LED_ID_CCM1_LINK;
   238			break;
   239		case 8:
   240			led->led_register = CRONOS_LEDS_CCM3_STATUS_REG;
   241			led->led_type = LED_TYPE_LINK;
   242			led->led_id = LED_ID_CCM2_LINK;
   243			break;
   244		case 9:
   245			led->led_register = CRONOS_LEDS_CCM4_STATUS_REG;
   246			led->led_type = LED_TYPE_LINK;
   247			led->led_id = LED_ID_CCM3_LINK;
   248			break;
   249		case 10:
   250			led->led_register = CRONOS_LEDS_SWITCH_STATUS_REG;
   251			led->led_type = LED_TYPE_LINK;
   252			led->led_id = LED_ID_CCM4_LINK;
   253			break;
   254		case 11:
   255			led->led_register = CRONOS_LEDS_CCM_POWER_REG;
   256			led->led_type = LED_TYPE_POWER;
   257			led->led_id = LED_ID_CCM1_POWER;
   258			break;
   259		case 12:
   260			led->led_register = CRONOS_LEDS_CCM_POWER_REG;
   261			led->led_type = LED_TYPE_POWER;
   262			led->led_id = LED_ID_CCM2_POWER;
   263			break;
   264		case 13:
   265			led->led_register = CRONOS_LEDS_CCM_POWER_REG;
   266			led->led_type = LED_TYPE_POWER;
   267			led->led_id = LED_ID_CCM3_POWER;
   268			break;
   269		case 14:
   270			led->led_register = CRONOS_LEDS_CCM_POWER_REG;
   271			led->led_type = LED_TYPE_POWER;
   272			led->led_id = LED_ID_CCM4_POWER;
   273			break;
   274		default:
   275			return -EINVAL;
   276		}
   277	
   278		ret = of_property_read_u32(np, "color", &color);
   279		if (ret || color != LED_COLOR_ID_RGB) {
   280			dev_warn(dev,
   281				 "Node %pOF: must contain 'color' property with value LED_COLOR_ID_RGB\n",
   282				 np);
   283			return -EINVAL;
   284		}
   285	
   286		led->subled_info[0].color_index = LED_COLOR_ID_RED;
   287		led->subled_info[1].color_index = LED_COLOR_ID_GREEN;
   288		led->subled_info[2].color_index = LED_COLOR_ID_BLUE;
   289	
   290		/* Initial color is white */
   291		for (int i = 0; i < LED_COUNT_ALL; i++) {
   292			led->subled_info[i].intensity = 255;
   293			led->subled_info[i].brightness = 255;
   294			led->subled_info[i].channel = i;
   295		}
   296	
   297		led->mc_cdev.subled_info = led->subled_info;
   298		led->mc_cdev.num_colors = LED_COUNT_ALL;
   299	
   300		init_data.fwnode = &np->fwnode;
   301	
   302		cdev = &led->mc_cdev.led_cdev;
   303		cdev->max_brightness = 255;
 > 304		cdev->brightness_set_blocking = cronos_led_set_brightness;
   305	
   306		/* Set initial color */
   307		ret = cronos_led_color_store(leds->hw, led);
   308		if (ret < 0)
   309			return dev_err_probe(dev, ret, "Cannot set LED %pOF initial color\n", np);
   310	
   311		ret = devm_led_classdev_multicolor_register_ext(dev, &led->mc_cdev, &init_data);
   312		if (ret)
   313			return dev_err_probe(dev, ret, "Cannot register LED %pOF\n", np);
   314	
   315		/* Set global brightness for all LEDs */
   316		ret = regmap_write(leds->hw->regmap, CRONOS_SMC_BRIGHTNESS_RED_REG, 0x00);
   317		ret = regmap_write(leds->hw->regmap, CRONOS_SMC_BRIGHTNESS_GREEN_REG, 0x00);
   318		ret = regmap_write(leds->hw->regmap, CRONOS_SMC_BRIGHTNESS_BLUE_REG, 0x00);
   319	
   320		return 0;
   321	}
   322	

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ