tree: git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git for-next head: 239f32b4f161c1584cd4b386d6ab8766432a6ede commit: 239f32b4f161c1584cd4b386d6ab8766432a6ede [32/32] leds: pca955x: Switch to i2c probe_new config: x86_64-randconfig-a014-20210820 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d9c5613e856cf2addfbf892fc4c1ce9ef9feceaa) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git/commit/?id=239f32b4f161c1584cd4b386d6ab8766432a6ede git remote add pavel-linux-leds git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git git fetch --no-tags pavel-linux-leds for-next git checkout 239f32b4f161c1584cd4b386d6ab8766432a6ede # 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@xxxxxxxxx> All warnings (new ones prefixed by >>): >> drivers/leds/leds-pca955x.c:500:15: warning: cast to smaller integer type 'enum pca955x_type' from 'const void *' [-Wvoid-pointer-to-enum-cast] chip_type = (enum pca955x_type)md; ^~~~~~~~~~~~~~~~~~~~~ drivers/leds/leds-pca955x.c:147:19: warning: unused function 'pca95xx_num_led_regs' [-Wunused-function] static inline int pca95xx_num_led_regs(int bits) ^ 2 warnings generated. vim +500 drivers/leds/leds-pca955x.c 481 482 static int pca955x_probe(struct i2c_client *client) 483 { 484 struct pca955x *pca955x; 485 struct pca955x_led *pca955x_led; 486 struct pca955x_chipdef *chip; 487 struct led_classdev *led; 488 struct led_init_data init_data; 489 struct i2c_adapter *adapter; 490 int i, err; 491 struct pca955x_platform_data *pdata; 492 int ngpios = 0; 493 bool set_default_label = false; 494 bool keep_pwm = false; 495 char default_label[8]; 496 enum pca955x_type chip_type; 497 const void *md = device_get_match_data(&client->dev); 498 499 if (md) { > 500 chip_type = (enum pca955x_type)md; 501 } else { 502 const struct i2c_device_id *id = i2c_match_id(pca955x_id, 503 client); 504 505 if (id) { 506 chip_type = (enum pca955x_type)id->driver_data; 507 } else { 508 dev_err(&client->dev, "unknown chip\n"); 509 return -ENODEV; 510 } 511 } 512 513 chip = &pca955x_chipdefs[chip_type]; 514 adapter = client->adapter; 515 pdata = dev_get_platdata(&client->dev); 516 if (!pdata) { 517 pdata = pca955x_get_pdata(client, chip); 518 if (IS_ERR(pdata)) 519 return PTR_ERR(pdata); 520 } 521 522 /* Make sure the slave address / chip type combo given is possible */ 523 if ((client->addr & ~((1 << chip->slv_addr_shift) - 1)) != 524 chip->slv_addr) { 525 dev_err(&client->dev, "invalid slave address %02x\n", 526 client->addr); 527 return -ENODEV; 528 } 529 530 dev_info(&client->dev, "leds-pca955x: Using %s %d-bit LED driver at " 531 "slave address 0x%02x\n", client->name, chip->bits, 532 client->addr); 533 534 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 535 return -EIO; 536 537 if (pdata->num_leds != chip->bits) { 538 dev_err(&client->dev, 539 "board info claims %d LEDs on a %d-bit chip\n", 540 pdata->num_leds, chip->bits); 541 return -ENODEV; 542 } 543 544 pca955x = devm_kzalloc(&client->dev, sizeof(*pca955x), GFP_KERNEL); 545 if (!pca955x) 546 return -ENOMEM; 547 548 pca955x->leds = devm_kcalloc(&client->dev, chip->bits, 549 sizeof(*pca955x_led), GFP_KERNEL); 550 if (!pca955x->leds) 551 return -ENOMEM; 552 553 i2c_set_clientdata(client, pca955x); 554 555 mutex_init(&pca955x->lock); 556 pca955x->client = client; 557 pca955x->chipdef = chip; 558 559 init_data.devname_mandatory = false; 560 init_data.devicename = "pca955x"; 561 562 for (i = 0; i < chip->bits; i++) { 563 pca955x_led = &pca955x->leds[i]; 564 pca955x_led->led_num = i; 565 pca955x_led->pca955x = pca955x; 566 pca955x_led->type = pdata->leds[i].type; 567 568 switch (pca955x_led->type) { 569 case PCA955X_TYPE_NONE: 570 break; 571 case PCA955X_TYPE_GPIO: 572 ngpios++; 573 break; 574 case PCA955X_TYPE_LED: 575 led = &pca955x_led->led_cdev; 576 led->brightness_set_blocking = pca955x_led_set; 577 led->brightness_get = pca955x_led_get; 578 579 if (pdata->leds[i].default_state == 580 LEDS_GPIO_DEFSTATE_OFF) { 581 err = pca955x_led_set(led, LED_OFF); 582 if (err) 583 return err; 584 } else if (pdata->leds[i].default_state == 585 LEDS_GPIO_DEFSTATE_ON) { 586 err = pca955x_led_set(led, LED_FULL); 587 if (err) 588 return err; 589 } 590 591 init_data.fwnode = pdata->leds[i].fwnode; 592 593 if (is_of_node(init_data.fwnode)) { 594 if (to_of_node(init_data.fwnode)->name[0] == 595 '\0') 596 set_default_label = true; 597 else 598 set_default_label = false; 599 } else { 600 set_default_label = true; 601 } 602 603 if (set_default_label) { 604 snprintf(default_label, sizeof(default_label), 605 "%d", i); 606 init_data.default_label = default_label; 607 } else { 608 init_data.default_label = NULL; 609 } 610 611 err = devm_led_classdev_register_ext(&client->dev, led, 612 &init_data); 613 if (err) 614 return err; 615 616 /* 617 * For default-state == "keep", let the core update the 618 * brightness from the hardware, then check the 619 * brightness to see if it's using PWM1. If so, PWM1 620 * should not be written below. 621 */ 622 if (pdata->leds[i].default_state == 623 LEDS_GPIO_DEFSTATE_KEEP) { 624 if (led->brightness != LED_FULL && 625 led->brightness != LED_OFF && 626 led->brightness != LED_HALF) 627 keep_pwm = true; 628 } 629 } 630 } 631 632 /* PWM0 is used for half brightness or 50% duty cycle */ 633 err = pca955x_write_pwm(client, 0, 255 - LED_HALF); 634 if (err) 635 return err; 636 637 if (!keep_pwm) { 638 /* PWM1 is used for variable brightness, default to OFF */ 639 err = pca955x_write_pwm(client, 1, 0); 640 if (err) 641 return err; 642 } 643 644 /* Set to fast frequency so we do not see flashing */ 645 err = pca955x_write_psc(client, 0, 0); 646 if (err) 647 return err; 648 err = pca955x_write_psc(client, 1, 0); 649 if (err) 650 return err; 651 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip