* [linux-next:master 10528/12208] drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node'
@ 2023-08-23 23:18 kernel test robot
2023-08-24 5:39 ` Jakob Hauser
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2023-08-23 23:18 UTC (permalink / raw)
To: Jakob Hauser; +Cc: oe-kbuild-all, Linux Memory Management List, Lee Jones
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: e3f80d3eae76c3557b3c9b5938ad01c0e6cf25ec
commit: 12cc585f36b8dffa68b809c2d23a9bd73ee6ffd2 [10528/12208] power: supply: rt5033_charger: Add cable detection and USB OTG supply
config: x86_64-randconfig-r011-20230823 (https://download.01.org/0day-ci/archive/20230824/202308240723.O2rW0InU-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230824/202308240723.O2rW0InU-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/202308240723.O2rW0InU-lkp@intel.com/
All errors (new ones prefixed by >>):
ld: vmlinux.o: in function `rt5033_charger_probe':
>> drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node'
>> ld: drivers/power/supply/rt5033_charger.c:710: undefined reference to `devm_extcon_register_notifier_all'
ld: vmlinux.o: in function `rt5033_charger_extcon_work':
>> drivers/power/supply/rt5033_charger.c:578: undefined reference to `extcon_get_state'
vim +696 drivers/power/supply/rt5033_charger.c
567
568 static void rt5033_charger_extcon_work(struct work_struct *work)
569 {
570 struct rt5033_charger *charger =
571 container_of(work, struct rt5033_charger, extcon_work);
572 struct extcon_dev *edev = charger->edev;
573 int connector, state;
574 int ret;
575
576 for (connector = EXTCON_USB_HOST; connector <= EXTCON_CHG_USB_PD;
577 connector++) {
> 578 state = extcon_get_state(edev, connector);
579 if (state == 1)
580 break;
581 }
582
583 /*
584 * Adding a delay between extcon notification and extcon action. This
585 * makes extcon action execution more reliable. Without the delay the
586 * execution sometimes fails, possibly because the chip is busy or not
587 * ready.
588 */
589 msleep(100);
590
591 switch (connector) {
592 case EXTCON_CHG_USB_SDP:
593 ret = rt5033_charger_set_mivr(charger);
594 if (ret) {
595 dev_err(charger->dev, "failed to set USB mode\n");
596 break;
597 }
598 dev_info(charger->dev, "USB mode. connector type: %d\n",
599 connector);
600 break;
601 case EXTCON_CHG_USB_DCP:
602 case EXTCON_CHG_USB_CDP:
603 case EXTCON_CHG_USB_ACA:
604 case EXTCON_CHG_USB_FAST:
605 case EXTCON_CHG_USB_SLOW:
606 case EXTCON_CHG_WPT:
607 case EXTCON_CHG_USB_PD:
608 ret = rt5033_charger_set_charging(charger);
609 if (ret) {
610 dev_err(charger->dev, "failed to set charging\n");
611 break;
612 }
613 dev_info(charger->dev, "charging. connector type: %d\n",
614 connector);
615 break;
616 case EXTCON_USB_HOST:
617 ret = rt5033_charger_set_otg(charger);
618 if (ret) {
619 dev_err(charger->dev, "failed to set OTG\n");
620 break;
621 }
622 dev_info(charger->dev, "OTG enabled\n");
623 break;
624 default:
625 ret = rt5033_charger_set_disconnect(charger);
626 if (ret) {
627 dev_err(charger->dev, "failed to set disconnect\n");
628 break;
629 }
630 dev_info(charger->dev, "disconnected\n");
631 break;
632 }
633
634 power_supply_changed(charger->psy);
635 }
636
637 static int rt5033_charger_extcon_notifier(struct notifier_block *nb,
638 unsigned long event, void *param)
639 {
640 struct rt5033_charger *charger =
641 container_of(nb, struct rt5033_charger, extcon_nb);
642
643 schedule_work(&charger->extcon_work);
644
645 return NOTIFY_OK;
646 }
647
648 static const struct power_supply_desc rt5033_charger_desc = {
649 .name = "rt5033-charger",
650 .type = POWER_SUPPLY_TYPE_USB,
651 .properties = rt5033_charger_props,
652 .num_properties = ARRAY_SIZE(rt5033_charger_props),
653 .get_property = rt5033_charger_get_property,
654 };
655
656 static int rt5033_charger_probe(struct platform_device *pdev)
657 {
658 struct rt5033_charger *charger;
659 struct power_supply_config psy_cfg = {};
660 struct device_node *np_conn, *np_edev;
661 int ret;
662
663 charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL);
664 if (!charger)
665 return -ENOMEM;
666
667 platform_set_drvdata(pdev, charger);
668 charger->dev = &pdev->dev;
669 charger->regmap = dev_get_regmap(pdev->dev.parent, NULL);
670 mutex_init(&charger->lock);
671
672 psy_cfg.of_node = pdev->dev.of_node;
673 psy_cfg.drv_data = charger;
674
675 charger->psy = devm_power_supply_register(&pdev->dev,
676 &rt5033_charger_desc,
677 &psy_cfg);
678 if (IS_ERR(charger->psy))
679 return dev_err_probe(&pdev->dev, PTR_ERR(charger->psy),
680 "Failed to register power supply\n");
681
682 charger->chg = rt5033_charger_dt_init(charger);
683 if (IS_ERR_OR_NULL(charger->chg))
684 return PTR_ERR(charger->chg);
685
686 ret = rt5033_charger_reg_init(charger);
687 if (ret)
688 return ret;
689
690 /*
691 * Extcon support is not vital for the charger to work. If no extcon
692 * is available, just emit a warning and leave the probe function.
693 */
694 np_conn = of_parse_phandle(pdev->dev.of_node, "richtek,usb-connector", 0);
695 np_edev = of_get_parent(np_conn);
> 696 charger->edev = extcon_find_edev_by_node(np_edev);
697 if (IS_ERR(charger->edev)) {
698 dev_warn(&pdev->dev, "no extcon device found in device-tree\n");
699 goto out;
700 }
701
702 ret = devm_work_autocancel(&pdev->dev, &charger->extcon_work,
703 rt5033_charger_extcon_work);
704 if (ret) {
705 dev_err(&pdev->dev, "failed to initialize extcon work\n");
706 return ret;
707 }
708
709 charger->extcon_nb.notifier_call = rt5033_charger_extcon_notifier;
> 710 ret = devm_extcon_register_notifier_all(&pdev->dev, charger->edev,
711 &charger->extcon_nb);
712 if (ret) {
713 dev_err(&pdev->dev, "failed to register extcon notifier\n");
714 return ret;
715 }
716 out:
717 return 0;
718 }
719
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [linux-next:master 10528/12208] drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node'
2023-08-23 23:18 [linux-next:master 10528/12208] drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node' kernel test robot
@ 2023-08-24 5:39 ` Jakob Hauser
0 siblings, 0 replies; 2+ messages in thread
From: Jakob Hauser @ 2023-08-24 5:39 UTC (permalink / raw)
To: kernel test robot
Cc: oe-kbuild-all, Linux Memory Management List, Lee Jones,
Stephen Rothwell, Sebastian Reichel, Chanwoo Choi, MyungJoo Ham
Dear all,
On 24.08.23 01:18, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head: e3f80d3eae76c3557b3c9b5938ad01c0e6cf25ec
> commit: 12cc585f36b8dffa68b809c2d23a9bd73ee6ffd2 [10528/12208] power: supply: rt5033_charger: Add cable detection and USB OTG supply
> config: x86_64-randconfig-r011-20230823 (https://download.01.org/0day-ci/archive/20230824/202308240723.O2rW0InU-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce: (https://download.01.org/0day-ci/archive/20230824/202308240723.O2rW0InU-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/202308240723.O2rW0InU-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> ld: vmlinux.o: in function `rt5033_charger_probe':
>>> drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node'
>>> ld: drivers/power/supply/rt5033_charger.c:710: undefined reference to `devm_extcon_register_notifier_all'
> ld: vmlinux.o: in function `rt5033_charger_extcon_work':
>>> drivers/power/supply/rt5033_charger.c:578: undefined reference to `extcon_get_state'
>
>
> vim +696 drivers/power/supply/rt5033_charger.c
>
> 567
> 568 static void rt5033_charger_extcon_work(struct work_struct *work)
> 569 {
> 570 struct rt5033_charger *charger =
> 571 container_of(work, struct rt5033_charger, extcon_work);
> 572 struct extcon_dev *edev = charger->edev;
> 573 int connector, state;
> 574 int ret;
> 575
> 576 for (connector = EXTCON_USB_HOST; connector <= EXTCON_CHG_USB_PD;
> 577 connector++) {
> > 578 state = extcon_get_state(edev, connector);
> 579 if (state == 1)
> 580 break;
> 581 }
> 582
> 583 /*
> 584 * Adding a delay between extcon notification and extcon action. This
> 585 * makes extcon action execution more reliable. Without the delay the
> 586 * execution sometimes fails, possibly because the chip is busy or not
> 587 * ready.
> 588 */
> 589 msleep(100);
> 590
> 591 switch (connector) {
> 592 case EXTCON_CHG_USB_SDP:
> 593 ret = rt5033_charger_set_mivr(charger);
> 594 if (ret) {
> 595 dev_err(charger->dev, "failed to set USB mode\n");
> 596 break;
> 597 }
> 598 dev_info(charger->dev, "USB mode. connector type: %d\n",
> 599 connector);
> 600 break;
> 601 case EXTCON_CHG_USB_DCP:
> 602 case EXTCON_CHG_USB_CDP:
> 603 case EXTCON_CHG_USB_ACA:
> 604 case EXTCON_CHG_USB_FAST:
> 605 case EXTCON_CHG_USB_SLOW:
> 606 case EXTCON_CHG_WPT:
> 607 case EXTCON_CHG_USB_PD:
> 608 ret = rt5033_charger_set_charging(charger);
> 609 if (ret) {
> 610 dev_err(charger->dev, "failed to set charging\n");
> 611 break;
> 612 }
> 613 dev_info(charger->dev, "charging. connector type: %d\n",
> 614 connector);
> 615 break;
> 616 case EXTCON_USB_HOST:
> 617 ret = rt5033_charger_set_otg(charger);
> 618 if (ret) {
> 619 dev_err(charger->dev, "failed to set OTG\n");
> 620 break;
> 621 }
> 622 dev_info(charger->dev, "OTG enabled\n");
> 623 break;
> 624 default:
> 625 ret = rt5033_charger_set_disconnect(charger);
> 626 if (ret) {
> 627 dev_err(charger->dev, "failed to set disconnect\n");
> 628 break;
> 629 }
> 630 dev_info(charger->dev, "disconnected\n");
> 631 break;
> 632 }
> 633
> 634 power_supply_changed(charger->psy);
> 635 }
> 636
> 637 static int rt5033_charger_extcon_notifier(struct notifier_block *nb,
> 638 unsigned long event, void *param)
> 639 {
> 640 struct rt5033_charger *charger =
> 641 container_of(nb, struct rt5033_charger, extcon_nb);
> 642
> 643 schedule_work(&charger->extcon_work);
> 644
> 645 return NOTIFY_OK;
> 646 }
> 647
> 648 static const struct power_supply_desc rt5033_charger_desc = {
> 649 .name = "rt5033-charger",
> 650 .type = POWER_SUPPLY_TYPE_USB,
> 651 .properties = rt5033_charger_props,
> 652 .num_properties = ARRAY_SIZE(rt5033_charger_props),
> 653 .get_property = rt5033_charger_get_property,
> 654 };
> 655
> 656 static int rt5033_charger_probe(struct platform_device *pdev)
> 657 {
> 658 struct rt5033_charger *charger;
> 659 struct power_supply_config psy_cfg = {};
> 660 struct device_node *np_conn, *np_edev;
> 661 int ret;
> 662
> 663 charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL);
> 664 if (!charger)
> 665 return -ENOMEM;
> 666
> 667 platform_set_drvdata(pdev, charger);
> 668 charger->dev = &pdev->dev;
> 669 charger->regmap = dev_get_regmap(pdev->dev.parent, NULL);
> 670 mutex_init(&charger->lock);
> 671
> 672 psy_cfg.of_node = pdev->dev.of_node;
> 673 psy_cfg.drv_data = charger;
> 674
> 675 charger->psy = devm_power_supply_register(&pdev->dev,
> 676 &rt5033_charger_desc,
> 677 &psy_cfg);
> 678 if (IS_ERR(charger->psy))
> 679 return dev_err_probe(&pdev->dev, PTR_ERR(charger->psy),
> 680 "Failed to register power supply\n");
> 681
> 682 charger->chg = rt5033_charger_dt_init(charger);
> 683 if (IS_ERR_OR_NULL(charger->chg))
> 684 return PTR_ERR(charger->chg);
> 685
> 686 ret = rt5033_charger_reg_init(charger);
> 687 if (ret)
> 688 return ret;
> 689
> 690 /*
> 691 * Extcon support is not vital for the charger to work. If no extcon
> 692 * is available, just emit a warning and leave the probe function.
> 693 */
> 694 np_conn = of_parse_phandle(pdev->dev.of_node, "richtek,usb-connector", 0);
> 695 np_edev = of_get_parent(np_conn);
> > 696 charger->edev = extcon_find_edev_by_node(np_edev);
> 697 if (IS_ERR(charger->edev)) {
> 698 dev_warn(&pdev->dev, "no extcon device found in device-tree\n");
> 699 goto out;
> 700 }
> 701
> 702 ret = devm_work_autocancel(&pdev->dev, &charger->extcon_work,
> 703 rt5033_charger_extcon_work);
> 704 if (ret) {
> 705 dev_err(&pdev->dev, "failed to initialize extcon work\n");
> 706 return ret;
> 707 }
> 708
> 709 charger->extcon_nb.notifier_call = rt5033_charger_extcon_notifier;
> > 710 ret = devm_extcon_register_notifier_all(&pdev->dev, charger->edev,
> 711 &charger->extcon_nb);
> 712 if (ret) {
> 713 dev_err(&pdev->dev, "failed to register extcon notifier\n");
> 714 return ret;
> 715 }
> 716 out:
> 717 return 0;
> 718 }
> 719
>
I don't know why this happens. The patch [1] contains "#include
<linux/extcon.h>", where the mentioned functions are referenced [2].
Could it be related to the conditions "#if IS_ENABLED(CONFIG_EXTCON)"
and "#else /* CONFIG_EXTCON */" within "include/linux/extcon.h"? And
that CONFIG_EXTCON maybe is not enabled in x86_64_defconfig [3]?
Btw. because a number of issues with that patch arose, Lee Jones
withdrew the pull request of that patch for the merge window to 6.6-rc1 [4].
[1]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/power/supply/rt5033_charger.c?h=next-20230824&id=12cc585f36b8dffa68b809c2d23a9bd73ee6ffd2
[2]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/include/linux/extcon.h?h=next-20230824
[3]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/x86/configs/x86_64_defconfig?h=next-20230824
[4]
https://lore.kernel.org/linux-pm/cover.1684182964.git.jahau@rocketmail.com/T/#m3b7a4e487f402e0b817c617f58abf51f856831db
Kind regards,
Jakob
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-08-24 5:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-23 23:18 [linux-next:master 10528/12208] drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node' kernel test robot
2023-08-24 5:39 ` Jakob Hauser
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox