From: Jakob Hauser <jahau@rocketmail.com>
To: kernel test robot <lkp@intel.com>
Cc: oe-kbuild-all@lists.linux.dev,
Linux Memory Management List <linux-mm@kvack.org>,
Lee Jones <lee@kernel.org>,
Stephen Rothwell <sfr@canb.auug.org.au>,
Sebastian Reichel <sre@kernel.org>,
Chanwoo Choi <cw00.choi@samsung.com>,
MyungJoo Ham <myungjoo.ham@samsung.com>
Subject: Re: [linux-next:master 10528/12208] drivers/power/supply/rt5033_charger.c:696: undefined reference to `extcon_find_edev_by_node'
Date: Thu, 24 Aug 2023 07:39:29 +0200 [thread overview]
Message-ID: <333a1ce0-6c97-1896-b612-5580124aebbb@rocketmail.com> (raw)
In-Reply-To: <202308240723.O2rW0InU-lkp@intel.com>
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
prev parent reply other threads:[~2023-08-24 5:39 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-23 23:18 kernel test robot
2023-08-24 5:39 ` Jakob Hauser [this message]
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=333a1ce0-6c97-1896-b612-5580124aebbb@rocketmail.com \
--to=jahau@rocketmail.com \
--cc=cw00.choi@samsung.com \
--cc=lee@kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=myungjoo.ham@samsung.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sfr@canb.auug.org.au \
--cc=sre@kernel.org \
/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