From: kernel test robot <lkp@intel.com>
To: Eddie James <eajames@linux.ibm.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-leds@vger.kernel.org,
Lee Jones <lee@kernel.org>,
Andy Shevchenko <andy.shevchenko@gmail.com>
Subject: [lee-leds:for-leds-next 7/10] drivers/leds/leds-pca955x.c:509:15: error: implicit declaration of function 'pca955x_num_led_regs'; did you mean 'pca955x_num_input_regs'?
Date: Fri, 21 Feb 2025 06:34:52 +0800 [thread overview]
Message-ID: <202502210631.1wjjGDNd-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git for-leds-next
head: 2f372a5dce6885f1d2647f7add01756bee0fef49
commit: 14ef0738a31dcecfbba38626884b7d9a60b75cd0 [7/10] leds: pca955x: Optimize probe LED selection
config: i386-buildonly-randconfig-001-20250221 (https://download.01.org/0day-ci/archive/20250221/202502210631.1wjjGDNd-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250221/202502210631.1wjjGDNd-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502210631.1wjjGDNd-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/leds/leds-pca955x.c: In function 'pca955x_probe':
>> drivers/leds/leds-pca955x.c:509:15: error: implicit declaration of function 'pca955x_num_led_regs'; did you mean 'pca955x_num_input_regs'? [-Werror=implicit-function-declaration]
509 | nls = pca955x_num_led_regs(chip->bits);
| ^~~~~~~~~~~~~~~~~~~~
| pca955x_num_input_regs
cc1: some warnings being treated as errors
vim +509 drivers/leds/leds-pca955x.c
440
441 static int pca955x_probe(struct i2c_client *client)
442 {
443 struct pca955x *pca955x;
444 struct pca955x_led *pca955x_led;
445 const struct pca955x_chipdef *chip;
446 struct led_classdev *led;
447 struct led_init_data init_data;
448 struct i2c_adapter *adapter;
449 int i, bit, err, nls, reg;
450 u8 ls1[4];
451 u8 ls2[4];
452 struct pca955x_platform_data *pdata;
453 bool set_default_label = false;
454 bool keep_pwm = false;
455 char default_label[8];
456
457 chip = i2c_get_match_data(client);
458 if (!chip)
459 return dev_err_probe(&client->dev, -ENODEV, "unknown chip\n");
460
461 adapter = client->adapter;
462 pdata = dev_get_platdata(&client->dev);
463 if (!pdata) {
464 pdata = pca955x_get_pdata(client, chip);
465 if (IS_ERR(pdata))
466 return PTR_ERR(pdata);
467 }
468
469 /* Make sure the slave address / chip type combo given is possible */
470 if ((client->addr & ~((1 << chip->slv_addr_shift) - 1)) !=
471 chip->slv_addr) {
472 dev_err(&client->dev, "invalid slave address %02x\n",
473 client->addr);
474 return -ENODEV;
475 }
476
477 dev_info(&client->dev, "leds-pca955x: Using %s %d-bit LED driver at "
478 "slave address 0x%02x\n", client->name, chip->bits,
479 client->addr);
480
481 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
482 return -EIO;
483
484 if (pdata->num_leds != chip->bits) {
485 dev_err(&client->dev,
486 "board info claims %d LEDs on a %d-bit chip\n",
487 pdata->num_leds, chip->bits);
488 return -ENODEV;
489 }
490
491 pca955x = devm_kzalloc(&client->dev, sizeof(*pca955x), GFP_KERNEL);
492 if (!pca955x)
493 return -ENOMEM;
494
495 pca955x->leds = devm_kcalloc(&client->dev, chip->bits,
496 sizeof(*pca955x_led), GFP_KERNEL);
497 if (!pca955x->leds)
498 return -ENOMEM;
499
500 i2c_set_clientdata(client, pca955x);
501
502 mutex_init(&pca955x->lock);
503 pca955x->client = client;
504 pca955x->chipdef = chip;
505
506 init_data.devname_mandatory = false;
507 init_data.devicename = "pca955x";
508
> 509 nls = pca955x_num_led_regs(chip->bits);
510 /* Use auto-increment feature to read all the LED selectors at once. */
511 err = i2c_smbus_read_i2c_block_data(client,
512 0x10 | (pca955x_num_input_regs(chip->bits) + 4), nls,
513 ls1);
514 if (err < 0)
515 return err;
516
517 for (i = 0; i < nls; i++)
518 ls2[i] = ls1[i];
519
520 for (i = 0; i < chip->bits; i++) {
521 pca955x_led = &pca955x->leds[i];
522 pca955x_led->led_num = i;
523 pca955x_led->pca955x = pca955x;
524 pca955x_led->type = pdata->leds[i].type;
525
526 switch (pca955x_led->type) {
527 case PCA955X_TYPE_NONE:
528 case PCA955X_TYPE_GPIO:
529 break;
530 case PCA955X_TYPE_LED:
531 bit = i % 4;
532 reg = i / 4;
533 led = &pca955x_led->led_cdev;
534 led->brightness_set_blocking = pca955x_led_set;
535 led->brightness_get = pca955x_led_get;
536
537 if (pdata->leds[i].default_state == LEDS_DEFSTATE_OFF)
538 ls2[reg] = pca955x_ledsel(ls2[reg], bit, PCA955X_LS_LED_OFF);
539 else if (pdata->leds[i].default_state == LEDS_DEFSTATE_ON)
540 ls2[reg] = pca955x_ledsel(ls2[reg], bit, PCA955X_LS_LED_ON);
541
542 init_data.fwnode = pdata->leds[i].fwnode;
543
544 if (is_of_node(init_data.fwnode)) {
545 if (to_of_node(init_data.fwnode)->name[0] ==
546 '\0')
547 set_default_label = true;
548 else
549 set_default_label = false;
550 } else {
551 set_default_label = true;
552 }
553
554 if (set_default_label) {
555 snprintf(default_label, sizeof(default_label),
556 "%d", i);
557 init_data.default_label = default_label;
558 } else {
559 init_data.default_label = NULL;
560 }
561
562 err = devm_led_classdev_register_ext(&client->dev, led,
563 &init_data);
564 if (err)
565 return err;
566
567 set_bit(i, &pca955x->active_pins);
568
569 /*
570 * For default-state == "keep", let the core update the
571 * brightness from the hardware, then check the
572 * brightness to see if it's using PWM1. If so, PWM1
573 * should not be written below.
574 */
575 if (pdata->leds[i].default_state == LEDS_DEFSTATE_KEEP) {
576 if (led->brightness != LED_FULL &&
577 led->brightness != LED_OFF &&
578 led->brightness != LED_HALF)
579 keep_pwm = true;
580 }
581 }
582 }
583
584 for (i = 0; i < nls; i++) {
585 if (ls1[i] != ls2[i]) {
586 err = pca955x_write_ls(pca955x, i, ls2[i]);
587 if (err)
588 return err;
589 }
590 }
591
592 /* PWM0 is used for half brightness or 50% duty cycle */
593 err = pca955x_write_pwm(pca955x, 0, 255 - LED_HALF);
594 if (err)
595 return err;
596
597 if (!keep_pwm) {
598 /* PWM1 is used for variable brightness, default to OFF */
599 err = pca955x_write_pwm(pca955x, 1, 0);
600 if (err)
601 return err;
602 }
603
604 /* Set to fast frequency so we do not see flashing */
605 err = pca955x_write_psc(pca955x, 0, 0);
606 if (err)
607 return err;
608 err = pca955x_write_psc(pca955x, 1, 0);
609 if (err)
610 return err;
611
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2025-02-20 22:35 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202502210631.1wjjGDNd-lkp@intel.com \
--to=lkp@intel.com \
--cc=andy.shevchenko@gmail.com \
--cc=eajames@linux.ibm.com \
--cc=lee@kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox