From: kernel test robot <lkp@intel.com>
To: Caleb Connolly <caleb.connolly@linaro.org>,
Sebastian Reichel <sre@kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Andy Gross <agross@kernel.org>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Tom Rix <trix@redhat.com>,
linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
llvm@lists.linux.dev, phone-devel@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH v4 1/2] power: supply: add Qualcomm PMI8998 SMB2 Charger driver
Date: Thu, 7 Jul 2022 23:40:11 +0800 [thread overview]
Message-ID: <202207072358.2odInqXi-lkp@intel.com> (raw)
In-Reply-To: <20220706194125.1861256-2-caleb.connolly@linaro.org>
Hi Caleb,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on sre-power-supply/for-next]
[also build test WARNING on robh/for-next linus/master v5.19-rc5 next-20220707]
[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/Caleb-Connolly/power-supply-introduce-support-for-the-Qualcomm-smb2-charger/20220707-034307
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: arm64-allmodconfig (https://download.01.org/0day-ci/archive/20220707/202207072358.2odInqXi-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f553287b588916de09c66e3e32bf75e5060f967f)
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
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/a6b315467a158024bb1af7fed00c9a5227c9b293
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Caleb-Connolly/power-supply-introduce-support-for-the-Qualcomm-smb2-charger/20220707-034307
git checkout a6b315467a158024bb1af7fed00c9a5227c9b293
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/power/supply/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/power/supply/qcom_pmi8998_charger.c:425:5: warning: no previous prototype for function 'smb2_get_prop_usb_online' [-Wmissing-prototypes]
int smb2_get_prop_usb_online(struct smb2_chip *chip, int *val)
^
drivers/power/supply/qcom_pmi8998_charger.c:425:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int smb2_get_prop_usb_online(struct smb2_chip *chip, int *val)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:486:5: warning: no previous prototype for function 'smb2_get_prop_status' [-Wmissing-prototypes]
int smb2_get_prop_status(struct smb2_chip *chip, int *val)
^
drivers/power/supply/qcom_pmi8998_charger.c:486:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int smb2_get_prop_status(struct smb2_chip *chip, int *val)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:565:6: warning: no previous prototype for function 'smb2_status_change_work' [-Wmissing-prototypes]
void smb2_status_change_work(struct work_struct *work)
^
drivers/power/supply/qcom_pmi8998_charger.c:565:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void smb2_status_change_work(struct work_struct *work)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:614:5: warning: no previous prototype for function 'smb2_get_iio_chan' [-Wmissing-prototypes]
int smb2_get_iio_chan(struct smb2_chip *chip, struct iio_channel *chan,
^
drivers/power/supply/qcom_pmi8998_charger.c:614:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int smb2_get_iio_chan(struct smb2_chip *chip, struct iio_channel *chan,
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:635:5: warning: no previous prototype for function 'smb2_get_prop_health' [-Wmissing-prototypes]
int smb2_get_prop_health(struct smb2_chip *chip, int *val)
^
drivers/power/supply/qcom_pmi8998_charger.c:635:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int smb2_get_prop_health(struct smb2_chip *chip, int *val)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:736:13: warning: no previous prototype for function 'smb2_handle_batt_overvoltage' [-Wmissing-prototypes]
irqreturn_t smb2_handle_batt_overvoltage(int irq, void *data)
^
drivers/power/supply/qcom_pmi8998_charger.c:736:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
irqreturn_t smb2_handle_batt_overvoltage(int irq, void *data)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:754:13: warning: no previous prototype for function 'smb2_handle_usb_plugin' [-Wmissing-prototypes]
irqreturn_t smb2_handle_usb_plugin(int irq, void *data)
^
drivers/power/supply/qcom_pmi8998_charger.c:754:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
irqreturn_t smb2_handle_usb_plugin(int irq, void *data)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:766:13: warning: no previous prototype for function 'smb2_handle_usb_icl_change' [-Wmissing-prototypes]
irqreturn_t smb2_handle_usb_icl_change(int irq, void *data)
^
drivers/power/supply/qcom_pmi8998_charger.c:766:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
irqreturn_t smb2_handle_usb_icl_change(int irq, void *data)
^
static
>> drivers/power/supply/qcom_pmi8998_charger.c:775:13: warning: no previous prototype for function 'smb2_handle_wdog_bark' [-Wmissing-prototypes]
irqreturn_t smb2_handle_wdog_bark(int irq, void *data)
^
drivers/power/supply/qcom_pmi8998_charger.c:775:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
irqreturn_t smb2_handle_wdog_bark(int irq, void *data)
^
static
drivers/power/supply/qcom_pmi8998_charger.c:896:12: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
.addr = 1950000 / 25000 },
^~~~~~~~~~~~~~~
drivers/power/supply/qcom_pmi8998_charger.c:894:12: note: previous initialization is here
{ .addr = FAST_CHARGE_CURRENT_CFG,
^~~~~~~~~~~~~~~~~~~~~~~
drivers/power/supply/qcom_pmi8998_charger.c:76:36: note: expanded from macro 'FAST_CHARGE_CURRENT_CFG'
#define FAST_CHARGE_CURRENT_CFG 0x61
^~~~
10 warnings generated.
vim +/smb2_get_prop_usb_online +425 drivers/power/supply/qcom_pmi8998_charger.c
424
> 425 int smb2_get_prop_usb_online(struct smb2_chip *chip, int *val)
426 {
427 unsigned int stat;
428 int rc;
429
430 rc = regmap_read(chip->regmap, chip->base + POWER_PATH_STATUS, &stat);
431 if (rc < 0) {
432 dev_err(chip->dev, "Couldn't read POWER_PATH_STATUS! ret=%d\n",
433 rc);
434 return rc;
435 }
436
437 *val = (stat & P_PATH_USE_USBIN_BIT) &&
438 (stat & P_PATH_VALID_INPUT_POWER_SOURCE_STS_BIT);
439 return 0;
440 }
441
442 /*
443 * Qualcomm "automatic power source detection" aka APSD
444 * tells us what type of charger we're connected to.
445 */
446 static int smb2_apsd_get_charger_type(struct smb2_chip *chip, int *val)
447 {
448 int rc;
449 unsigned int apsd_stat, stat;
450 int usb_online;
451
452 rc = smb2_get_prop_usb_online(chip, &usb_online);
453 if (rc < 0 || !usb_online) {
454 *val = POWER_SUPPLY_USB_TYPE_UNKNOWN;
455 return 0;
456 }
457
458 rc = regmap_read(chip->regmap, chip->base + APSD_STATUS, &apsd_stat);
459 if (rc < 0) {
460 dev_err(chip->dev, "Failed to read apsd status, rc = %d", rc);
461 return rc;
462 }
463 if (!(apsd_stat & APSD_DTC_STATUS_DONE_BIT)) {
464 dev_err(chip->dev, "Apsd not ready");
465 return -EAGAIN;
466 }
467
468 rc = regmap_read(chip->regmap, chip->base + APSD_RESULT_STATUS, &stat);
469 if (rc < 0) {
470 dev_err(chip->dev, "Failed to read apsd result, rc = %d", rc);
471 return rc;
472 }
473
474 stat &= APSD_RESULT_STATUS_MASK;
475
476 if (stat & CDP_CHARGER_BIT)
477 *val = POWER_SUPPLY_USB_TYPE_CDP;
478 else if (stat & (DCP_CHARGER_BIT | OCP_CHARGER_BIT | FLOAT_CHARGER_BIT))
479 *val = POWER_SUPPLY_USB_TYPE_DCP;
480 else /* SDP_CHARGER_BIT (or others) */
481 *val = POWER_SUPPLY_USB_TYPE_SDP;
482
483 return 0;
484 }
485
> 486 int smb2_get_prop_status(struct smb2_chip *chip, int *val)
487 {
488 int usb_online_val;
489 unsigned char stat[2];
490 int rc;
491
492 rc = smb2_get_prop_usb_online(chip, &usb_online_val);
493 if (rc < 0) {
494 dev_err(chip->dev, "Couldn't get usb online property rc = %d\n",
495 rc);
496 return rc;
497 }
498
499 if (!usb_online_val) {
500 *val = POWER_SUPPLY_STATUS_DISCHARGING;
501 return rc;
502 }
503
504 rc = regmap_bulk_read(chip->regmap,
505 chip->base + BATTERY_CHARGER_STATUS_1, &stat, 2);
506 if (rc < 0) {
507 dev_err(chip->dev, "Failed to read charging status ret=%d\n",
508 rc);
509 return rc;
510 }
511
512 if (stat[1] & CHARGER_ERROR_STATUS_BAT_OV_BIT) {
513 *val = POWER_SUPPLY_STATUS_NOT_CHARGING;
514 return 0;
515 }
516
517 stat[0] = stat[0] & BATTERY_CHARGER_STATUS_MASK;
518
519 switch (stat[0]) {
520 case TRICKLE_CHARGE:
521 case PRE_CHARGE:
522 case FAST_CHARGE:
523 case FULLON_CHARGE:
524 case TAPER_CHARGE:
525 *val = POWER_SUPPLY_STATUS_CHARGING;
526 return rc;
527 case DISABLE_CHARGE:
528 *val = POWER_SUPPLY_STATUS_NOT_CHARGING;
529 return rc;
530 case TERMINATE_CHARGE:
531 *val = POWER_SUPPLY_STATUS_FULL;
532 return rc;
533 case INHIBIT_CHARGE:
534 default:
535 *val = POWER_SUPPLY_STATUS_UNKNOWN;
536 return rc;
537 }
538 }
539
540 static inline int smb2_get_current_limit(struct smb2_chip *chip,
541 unsigned int *val)
542 {
543 int rc = regmap_read(chip->regmap, chip->base + ICL_STATUS, val);
544
545 if (rc >= 0)
546 *val *= 25000;
547 return rc;
548 }
549
550 static int smb2_set_current_limit(struct smb2_chip *chip, unsigned int val)
551 {
552 unsigned char val_raw;
553
554 if (val > 4800000) {
555 dev_err(chip->dev,
556 "Can't set current limit higher than 4800000uA");
557 return -EINVAL;
558 }
559 val_raw = val / 25000;
560
561 return regmap_write(chip->regmap, chip->base + USBIN_CURRENT_LIMIT_CFG,
562 val_raw);
563 }
564
> 565 void smb2_status_change_work(struct work_struct *work)
566 {
567 struct smb2_chip *chip =
568 container_of(work, struct smb2_chip, status_change_work.work);
569 unsigned int charger_type, current_ua;
570 int usb_online, count, rc;
571
572 smb2_get_prop_usb_online(chip, &usb_online);
573 if (usb_online == 0) {
574 chip->default_curr_limit = 0;
575 return;
576 }
577
578 for (count = 0; count < 3; count++) {
579 dev_dbg(chip->dev, "get charger type retry %d\n", count);
580 rc = smb2_apsd_get_charger_type(chip, &charger_type);
581 if (rc == 0)
582 break;
583 msleep(100);
584 }
585
586 if (rc < 0) {
587 rc = regmap_update_bits(chip->regmap, chip->base + CMD_APSD,
588 APSD_RERUN_BIT, APSD_RERUN_BIT);
589 schedule_delayed_work(&chip->status_change_work,
590 msecs_to_jiffies(1500));
591 dev_dbg(chip->dev, "get charger type failed, rerun apsd\n");
592 return;
593 }
594
595 switch (charger_type) {
596 case POWER_SUPPLY_USB_TYPE_CDP:
597 current_ua = CDP_CURRENT_UA;
598 break;
599 case POWER_SUPPLY_USB_TYPE_DCP:
600 current_ua = DCP_CURRENT_UA;
601 break;
602 case POWER_SUPPLY_USB_TYPE_SDP:
603 default:
604 current_ua = SDP_CURRENT_UA;
605 break;
606 }
607
608 chip->default_curr_limit = current_ua;
609
610 smb2_set_current_limit(chip, current_ua);
611 power_supply_changed(chip->chg_psy);
612 }
613
> 614 int smb2_get_iio_chan(struct smb2_chip *chip, struct iio_channel *chan,
615 int *val)
616 {
617 int rc;
618 union power_supply_propval status;
619
620 rc = power_supply_get_property(chip->chg_psy, POWER_SUPPLY_PROP_STATUS,
621 &status);
622 if (rc < 0 || status.intval != POWER_SUPPLY_STATUS_CHARGING) {
623 *val = 0;
624 return 0;
625 }
626
627 if (IS_ERR(chan)) {
628 dev_err(chip->dev, "Failed to chan, err = %li", PTR_ERR(chan));
629 return PTR_ERR(chan);
630 }
631
632 return iio_read_channel_processed(chan, val);
633 }
634
--
0-DAY CI Kernel Test Service
https://01.org/lkp
next prev parent reply other threads:[~2022-07-07 15:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-06 19:41 [PATCH v4 0/2] power: supply: introduce support for the Qualcomm smb2 charger Caleb Connolly
2022-07-06 19:41 ` [PATCH v4 1/2] power: supply: add Qualcomm PMI8998 SMB2 Charger driver Caleb Connolly
2022-07-07 15:40 ` kernel test robot [this message]
2022-07-07 16:00 ` kernel test robot
2022-07-16 22:17 ` Sebastian Reichel
2022-08-16 19:24 ` Caleb Connolly
2022-07-06 19:41 ` [PATCH v4 2/2] dt-bindings: power: supply: qcom,pmi8998-charger: add bindings for smb2 driver Caleb Connolly
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=202207072358.2odInqXi-lkp@intel.com \
--to=lkp@intel.com \
--cc=agross@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=caleb.connolly@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=kbuild-all@lists.01.org \
--cc=krzk@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=phone-devel@vger.kernel.org \
--cc=robh+dt@kernel.org \
--cc=sre@kernel.org \
--cc=trix@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.