All of lore.kernel.org
 help / color / mirror / Atom feed
From: kbuild test robot <lkp@intel.com>
To: "Michał Mirosław" <mirq-linux@rere.qmqm.pl>
Cc: kbuild-all@lists.01.org, Sebastian Reichel <sre@kernel.org>,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org
Subject: Re: [PATCH 12/14] power: supply: bq25890: show VSYS as output voltage
Date: Sat, 4 Apr 2020 05:41:54 +0800	[thread overview]
Message-ID: <202004040518.LyQwFC6f%lkp@intel.com> (raw)
In-Reply-To: <fdd9ec41a66113264c3b233658a72e00159f65d5.1585838679.git.mirq-linux@rere.qmqm.pl>

[-- Attachment #1: Type: text/plain, Size: 15837 bytes --]

Hi "Michał,

I love your patch! Yet something to improve:

[auto build test ERROR on power-supply/for-next]
[also build test ERROR on linus/master v5.6 next-20200403]
[cannot apply to linux/master]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Micha-Miros-aw/power-supply-bq25890-fix-and-extend/20200404-010738
base:   https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.3.0 make.cross ARCH=parisc 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/power/supply/bq25890_charger.c: In function 'bq25890_is_adc_property':
   drivers/power/supply/bq25890_charger.c:383:7: error: 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     383 |  case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c:383:7: note: each undeclared identifier is reported only once for each function it appears in
   drivers/power/supply/bq25890_charger.c:384:7: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_VOLTAGE_NOW'?
     384 |  case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_VOLTAGE_NOW
   drivers/power/supply/bq25890_charger.c: In function 'bq25890_power_supply_get_property':
   drivers/power/supply/bq25890_charger.c:509:7: error: 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     509 |  case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c:527:7: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_VOLTAGE_NOW'?
     527 |  case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_VOLTAGE_NOW
>> drivers/power/supply/bq25890_charger.c:536:7: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     536 |  case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c: At top level:
   drivers/power/supply/bq25890_charger.c:730:2: error: 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW' undeclared here (not in a function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     730 |  POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW,
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |  POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
>> drivers/power/supply/bq25890_charger.c:731:2: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW' undeclared here (not in a function); did you mean 'POWER_SUPPLY_PROP_VOLTAGE_NOW'?
     731 |  POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW,
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |  POWER_SUPPLY_PROP_VOLTAGE_NOW
>> drivers/power/supply/bq25890_charger.c:732:2: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN' undeclared here (not in a function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     732 |  POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN,
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |  POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c:743:16: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     743 |  .properties = bq25890_power_supply_props,
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~

vim +536 drivers/power/supply/bq25890_charger.c

   395	
   396	static int bq25890_power_supply_get_property(struct power_supply *psy,
   397						     enum power_supply_property psp,
   398						     union power_supply_propval *val)
   399	{
   400		struct bq25890_device *bq = power_supply_get_drvdata(psy);
   401		struct bq25890_state state;
   402		bool do_adc_conv;
   403		int ret;
   404	
   405		mutex_lock(&bq->lock);
   406		/* update state in case we lost an interrupt */
   407		__bq25890_handle_irq(bq);
   408		state = bq->state;
   409		do_adc_conv = !state.online && bq25890_is_adc_property(psp);
   410		if (do_adc_conv)
   411			bq25890_field_write(bq, F_CONV_START, 1);
   412		mutex_unlock(&bq->lock);
   413	
   414		if (do_adc_conv)
   415			regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START],
   416				ret, !ret, 25000, 1000000);
   417	
   418		switch (psp) {
   419		case POWER_SUPPLY_PROP_STATUS:
   420			if (!state.online)
   421				val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
   422			else if (state.chrg_status == STATUS_NOT_CHARGING)
   423				val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
   424			else if (state.chrg_status == STATUS_PRE_CHARGING ||
   425				 state.chrg_status == STATUS_FAST_CHARGING)
   426				val->intval = POWER_SUPPLY_STATUS_CHARGING;
   427			else if (state.chrg_status == STATUS_TERMINATION_DONE)
   428				val->intval = POWER_SUPPLY_STATUS_FULL;
   429			else
   430				val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
   431	
   432			break;
   433	
   434		case POWER_SUPPLY_PROP_CHARGE_TYPE:
   435			if (!state.online || state.chrg_status == STATUS_NOT_CHARGING ||
   436			    state.chrg_status == STATUS_TERMINATION_DONE)
   437				val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
   438			else if (state.chrg_status == STATUS_PRE_CHARGING)
   439				val->intval = POWER_SUPPLY_CHARGE_TYPE_STANDARD;
   440			else if (state.chrg_status == STATUS_FAST_CHARGING)
   441				val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST;
   442			else /* unreachable */
   443				val->intval = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
   444			break;
   445	
   446		case POWER_SUPPLY_PROP_MANUFACTURER:
   447			val->strval = BQ25890_MANUFACTURER;
   448			break;
   449	
   450		case POWER_SUPPLY_PROP_MODEL_NAME:
   451			val->strval = bq25890_chip_name[bq->chip_version];
   452			break;
   453	
   454		case POWER_SUPPLY_PROP_ONLINE:
   455			val->intval = state.online;
   456			break;
   457	
   458		case POWER_SUPPLY_PROP_HEALTH:
   459			if (!state.chrg_fault && !state.bat_fault && !state.boost_fault)
   460				val->intval = POWER_SUPPLY_HEALTH_GOOD;
   461			else if (state.bat_fault)
   462				val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
   463			else if (state.chrg_fault == CHRG_FAULT_TIMER_EXPIRED)
   464				val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
   465			else if (state.chrg_fault == CHRG_FAULT_THERMAL_SHUTDOWN)
   466				val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
   467			else
   468				val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
   469			break;
   470	
   471		case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
   472			val->intval = bq25890_find_val(bq->init_data.ichg, TBL_ICHG);
   473			break;
   474	
   475		case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
   476			if (!state.online) {
   477				val->intval = 0;
   478				break;
   479			}
   480	
   481			ret = bq25890_field_read(bq, F_BATV); /* read measured value */
   482			if (ret < 0)
   483				return ret;
   484	
   485			/* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
   486			val->intval = 2304000 + ret * 20000;
   487			break;
   488	
   489		case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
   490			val->intval = bq25890_find_val(bq->init_data.vreg, TBL_VREG);
   491			break;
   492	
   493		case POWER_SUPPLY_PROP_PRECHARGE_CURRENT:
   494			val->intval = bq25890_find_val(bq->init_data.iprechg, TBL_ITERM);
   495			break;
   496	
   497		case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT:
   498			val->intval = bq25890_find_val(bq->init_data.iterm, TBL_ITERM);
   499			break;
   500	
   501		case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
   502			ret = bq25890_field_read(bq, F_IILIM);
   503			if (ret < 0)
   504				return ret;
   505	
   506			val->intval = bq25890_find_val(ret, TBL_IILIM);
   507			break;
   508	
   509		case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
   510			ret = bq25890_field_read(bq, F_VBUS_GD); /* is VBUS connected? */
   511			if (ret < 0)
   512				return ret;
   513	
   514			if (!ret) {
   515				val->intval = 0;
   516				break;
   517			}
   518	
   519			ret = bq25890_field_read(bq, F_VBUSV); /* read measured value */
   520			if (ret < 0)
   521				return ret;
   522	
   523			/* converted_val = 2.6V + ADC_val * 100mV */
   524			val->intval = 2600000 + ret * 100000;
   525			break;
   526	
   527		case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
   528			ret = bq25890_field_read(bq, F_SYSV); /* read measured value */
   529			if (ret < 0)
   530				return ret;
   531	
   532			/* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
   533			val->intval = 2304000 + ret * 20000;
   534			break;
   535	
 > 536		case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN:
   537			val->intval = bq25890_find_val(bq->init_data.sysvmin, TBL_SYSVMIN);
   538			break;
   539	
   540		case POWER_SUPPLY_PROP_CURRENT_NOW:
   541			ret = bq25890_field_read(bq, F_ICHGR); /* read measured value */
   542			if (ret < 0)
   543				return ret;
   544	
   545			/* converted_val = ADC_val * 50mA (table 10.3.19) */
   546			val->intval = ret * -50000;
   547			break;
   548	
   549		default:
   550			return -EINVAL;
   551		}
   552	
   553		return 0;
   554	}
   555	
   556	static int bq25890_get_chip_state(struct bq25890_device *bq,
   557					  struct bq25890_state *state)
   558	{
   559		int i, ret;
   560	
   561		struct {
   562			enum bq25890_fields id;
   563			u8 *data;
   564		} state_fields[] = {
   565			{F_CHG_STAT,	&state->chrg_status},
   566			{F_PG_STAT,	&state->online},
   567			{F_VSYS_STAT,	&state->vsys_status},
   568			{F_BOOST_FAULT, &state->boost_fault},
   569			{F_BAT_FAULT,	&state->bat_fault},
   570			{F_CHG_FAULT,	&state->chrg_fault}
   571		};
   572	
   573		for (i = 0; i < ARRAY_SIZE(state_fields); i++) {
   574			ret = bq25890_field_read(bq, state_fields[i].id);
   575			if (ret < 0)
   576				return ret;
   577	
   578			*state_fields[i].data = ret;
   579		}
   580	
   581		dev_dbg(bq->dev, "S:CHG/PG/VSYS=%d/%d/%d, F:CHG/BOOST/BAT=%d/%d/%d\n",
   582			state->chrg_status, state->online, state->vsys_status,
   583			state->chrg_fault, state->boost_fault, state->bat_fault);
   584	
   585		return 0;
   586	}
   587	
   588	static irqreturn_t __bq25890_handle_irq(struct bq25890_device *bq)
   589	{
   590		struct bq25890_state new_state;
   591		int ret;
   592	
   593		ret = bq25890_get_chip_state(bq, &new_state);
   594		if (ret < 0)
   595			return IRQ_NONE;
   596	
   597		if (!memcmp(&bq->state, &new_state, sizeof(new_state)))
   598			return IRQ_NONE;
   599	
   600		if (!new_state.online && bq->state.online) {	    /* power removed */
   601			/* disable ADC */
   602			ret = bq25890_field_write(bq, F_CONV_START, 0);
   603			if (ret < 0)
   604				goto error;
   605		} else if (new_state.online && !bq->state.online) { /* power inserted */
   606			/* enable ADC, to have control of charge current/voltage */
   607			ret = bq25890_field_write(bq, F_CONV_START, 1);
   608			if (ret < 0)
   609				goto error;
   610		}
   611	
   612		bq->state = new_state;
   613		power_supply_changed(bq->charger);
   614	
   615		return IRQ_HANDLED;
   616	error:
   617		dev_err(bq->dev, "Error communicating with the chip: %pe\n",
   618			ERR_PTR(ret));
   619		return IRQ_HANDLED;
   620	}
   621	
   622	static irqreturn_t bq25890_irq_handler_thread(int irq, void *private)
   623	{
   624		struct bq25890_device *bq = private;
   625		irqreturn_t ret;
   626	
   627		mutex_lock(&bq->lock);
   628		ret = __bq25890_handle_irq(bq);
   629		mutex_unlock(&bq->lock);
   630	
   631		return ret;
   632	}
   633	
   634	static int bq25890_chip_reset(struct bq25890_device *bq)
   635	{
   636		int ret;
   637		int rst_check_counter = 10;
   638	
   639		ret = bq25890_field_write(bq, F_REG_RST, 1);
   640		if (ret < 0)
   641			return ret;
   642	
   643		do {
   644			ret = bq25890_field_read(bq, F_REG_RST);
   645			if (ret < 0)
   646				return ret;
   647	
   648			usleep_range(5, 10);
   649		} while (ret == 1 && --rst_check_counter);
   650	
   651		if (!rst_check_counter)
   652			return -ETIMEDOUT;
   653	
   654		return 0;
   655	}
   656	
   657	static int bq25890_hw_init(struct bq25890_device *bq)
   658	{
   659		int ret;
   660		int i;
   661	
   662		const struct {
   663			enum bq25890_fields id;
   664			u32 value;
   665		} init_data[] = {
   666			{F_ICHG,	 bq->init_data.ichg},
   667			{F_VREG,	 bq->init_data.vreg},
   668			{F_ITERM,	 bq->init_data.iterm},
   669			{F_IPRECHG,	 bq->init_data.iprechg},
   670			{F_SYSVMIN,	 bq->init_data.sysvmin},
   671			{F_BOOSTV,	 bq->init_data.boostv},
   672			{F_BOOSTI,	 bq->init_data.boosti},
   673			{F_BOOSTF,	 bq->init_data.boostf},
   674			{F_EN_ILIM,	 bq->init_data.ilim_en},
   675			{F_TREG,	 bq->init_data.treg}
   676		};
   677	
   678		ret = bq25890_chip_reset(bq);
   679		if (ret < 0) {
   680			dev_dbg(bq->dev, "Reset failed %d\n", ret);
   681			return ret;
   682		}
   683	
   684		/* disable watchdog */
   685		ret = bq25890_field_write(bq, F_WD, 0);
   686		if (ret < 0) {
   687			dev_dbg(bq->dev, "Disabling watchdog failed %d\n", ret);
   688			return ret;
   689		}
   690	
   691		/* initialize currents/voltages and other parameters */
   692		for (i = 0; i < ARRAY_SIZE(init_data); i++) {
   693			ret = bq25890_field_write(bq, init_data[i].id,
   694						  init_data[i].value);
   695			if (ret < 0) {
   696				dev_dbg(bq->dev, "Writing init data failed %d\n", ret);
   697				return ret;
   698			}
   699		}
   700	
   701		/* Configure ADC for continuous conversions when charging */
   702		ret = bq25890_field_write(bq, F_CONV_RATE, !!bq->state.online);
   703		if (ret < 0) {
   704			dev_dbg(bq->dev, "Config ADC failed %d\n", ret);
   705			return ret;
   706		}
   707	
   708		ret = bq25890_get_chip_state(bq, &bq->state);
   709		if (ret < 0) {
   710			dev_dbg(bq->dev, "Get state failed %d\n", ret);
   711			return ret;
   712		}
   713	
   714		return 0;
   715	}
   716	
   717	static const enum power_supply_property bq25890_power_supply_props[] = {
   718		POWER_SUPPLY_PROP_MANUFACTURER,
   719		POWER_SUPPLY_PROP_MODEL_NAME,
   720		POWER_SUPPLY_PROP_STATUS,
   721		POWER_SUPPLY_PROP_CHARGE_TYPE,
   722		POWER_SUPPLY_PROP_ONLINE,
   723		POWER_SUPPLY_PROP_HEALTH,
   724		POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
   725		POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
   726		POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
   727		POWER_SUPPLY_PROP_PRECHARGE_CURRENT,
   728		POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
   729		POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
   730		POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW,
 > 731		POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW,
 > 732		POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN,
   733		POWER_SUPPLY_PROP_CURRENT_NOW,
   734	};
   735	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 60612 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 12/14] power: supply: bq25890: show VSYS as output voltage
Date: Sat, 04 Apr 2020 05:41:54 +0800	[thread overview]
Message-ID: <202004040518.LyQwFC6f%lkp@intel.com> (raw)
In-Reply-To: <fdd9ec41a66113264c3b233658a72e00159f65d5.1585838679.git.mirq-linux@rere.qmqm.pl>

[-- Attachment #1: Type: text/plain, Size: 16252 bytes --]

Hi "Michał,

I love your patch! Yet something to improve:

[auto build test ERROR on power-supply/for-next]
[also build test ERROR on linus/master v5.6 next-20200403]
[cannot apply to linux/master]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Micha-Miros-aw/power-supply-bq25890-fix-and-extend/20200404-010738
base:   https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.3.0 make.cross ARCH=parisc 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/power/supply/bq25890_charger.c: In function 'bq25890_is_adc_property':
   drivers/power/supply/bq25890_charger.c:383:7: error: 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     383 |  case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c:383:7: note: each undeclared identifier is reported only once for each function it appears in
   drivers/power/supply/bq25890_charger.c:384:7: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_VOLTAGE_NOW'?
     384 |  case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_VOLTAGE_NOW
   drivers/power/supply/bq25890_charger.c: In function 'bq25890_power_supply_get_property':
   drivers/power/supply/bq25890_charger.c:509:7: error: 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     509 |  case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c:527:7: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_VOLTAGE_NOW'?
     527 |  case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_VOLTAGE_NOW
>> drivers/power/supply/bq25890_charger.c:536:7: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN' undeclared (first use in this function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     536 |  case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN:
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |       POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c: At top level:
   drivers/power/supply/bq25890_charger.c:730:2: error: 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW' undeclared here (not in a function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     730 |  POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW,
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |  POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
>> drivers/power/supply/bq25890_charger.c:731:2: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW' undeclared here (not in a function); did you mean 'POWER_SUPPLY_PROP_VOLTAGE_NOW'?
     731 |  POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW,
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |  POWER_SUPPLY_PROP_VOLTAGE_NOW
>> drivers/power/supply/bq25890_charger.c:732:2: error: 'POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN' undeclared here (not in a function); did you mean 'POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT'?
     732 |  POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN,
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |  POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT
   drivers/power/supply/bq25890_charger.c:743:16: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     743 |  .properties = bq25890_power_supply_props,
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~

vim +536 drivers/power/supply/bq25890_charger.c

   395	
   396	static int bq25890_power_supply_get_property(struct power_supply *psy,
   397						     enum power_supply_property psp,
   398						     union power_supply_propval *val)
   399	{
   400		struct bq25890_device *bq = power_supply_get_drvdata(psy);
   401		struct bq25890_state state;
   402		bool do_adc_conv;
   403		int ret;
   404	
   405		mutex_lock(&bq->lock);
   406		/* update state in case we lost an interrupt */
   407		__bq25890_handle_irq(bq);
   408		state = bq->state;
   409		do_adc_conv = !state.online && bq25890_is_adc_property(psp);
   410		if (do_adc_conv)
   411			bq25890_field_write(bq, F_CONV_START, 1);
   412		mutex_unlock(&bq->lock);
   413	
   414		if (do_adc_conv)
   415			regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START],
   416				ret, !ret, 25000, 1000000);
   417	
   418		switch (psp) {
   419		case POWER_SUPPLY_PROP_STATUS:
   420			if (!state.online)
   421				val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
   422			else if (state.chrg_status == STATUS_NOT_CHARGING)
   423				val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
   424			else if (state.chrg_status == STATUS_PRE_CHARGING ||
   425				 state.chrg_status == STATUS_FAST_CHARGING)
   426				val->intval = POWER_SUPPLY_STATUS_CHARGING;
   427			else if (state.chrg_status == STATUS_TERMINATION_DONE)
   428				val->intval = POWER_SUPPLY_STATUS_FULL;
   429			else
   430				val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
   431	
   432			break;
   433	
   434		case POWER_SUPPLY_PROP_CHARGE_TYPE:
   435			if (!state.online || state.chrg_status == STATUS_NOT_CHARGING ||
   436			    state.chrg_status == STATUS_TERMINATION_DONE)
   437				val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
   438			else if (state.chrg_status == STATUS_PRE_CHARGING)
   439				val->intval = POWER_SUPPLY_CHARGE_TYPE_STANDARD;
   440			else if (state.chrg_status == STATUS_FAST_CHARGING)
   441				val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST;
   442			else /* unreachable */
   443				val->intval = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
   444			break;
   445	
   446		case POWER_SUPPLY_PROP_MANUFACTURER:
   447			val->strval = BQ25890_MANUFACTURER;
   448			break;
   449	
   450		case POWER_SUPPLY_PROP_MODEL_NAME:
   451			val->strval = bq25890_chip_name[bq->chip_version];
   452			break;
   453	
   454		case POWER_SUPPLY_PROP_ONLINE:
   455			val->intval = state.online;
   456			break;
   457	
   458		case POWER_SUPPLY_PROP_HEALTH:
   459			if (!state.chrg_fault && !state.bat_fault && !state.boost_fault)
   460				val->intval = POWER_SUPPLY_HEALTH_GOOD;
   461			else if (state.bat_fault)
   462				val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
   463			else if (state.chrg_fault == CHRG_FAULT_TIMER_EXPIRED)
   464				val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
   465			else if (state.chrg_fault == CHRG_FAULT_THERMAL_SHUTDOWN)
   466				val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
   467			else
   468				val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
   469			break;
   470	
   471		case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
   472			val->intval = bq25890_find_val(bq->init_data.ichg, TBL_ICHG);
   473			break;
   474	
   475		case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
   476			if (!state.online) {
   477				val->intval = 0;
   478				break;
   479			}
   480	
   481			ret = bq25890_field_read(bq, F_BATV); /* read measured value */
   482			if (ret < 0)
   483				return ret;
   484	
   485			/* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
   486			val->intval = 2304000 + ret * 20000;
   487			break;
   488	
   489		case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
   490			val->intval = bq25890_find_val(bq->init_data.vreg, TBL_VREG);
   491			break;
   492	
   493		case POWER_SUPPLY_PROP_PRECHARGE_CURRENT:
   494			val->intval = bq25890_find_val(bq->init_data.iprechg, TBL_ITERM);
   495			break;
   496	
   497		case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT:
   498			val->intval = bq25890_find_val(bq->init_data.iterm, TBL_ITERM);
   499			break;
   500	
   501		case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
   502			ret = bq25890_field_read(bq, F_IILIM);
   503			if (ret < 0)
   504				return ret;
   505	
   506			val->intval = bq25890_find_val(ret, TBL_IILIM);
   507			break;
   508	
   509		case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
   510			ret = bq25890_field_read(bq, F_VBUS_GD); /* is VBUS connected? */
   511			if (ret < 0)
   512				return ret;
   513	
   514			if (!ret) {
   515				val->intval = 0;
   516				break;
   517			}
   518	
   519			ret = bq25890_field_read(bq, F_VBUSV); /* read measured value */
   520			if (ret < 0)
   521				return ret;
   522	
   523			/* converted_val = 2.6V + ADC_val * 100mV */
   524			val->intval = 2600000 + ret * 100000;
   525			break;
   526	
   527		case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
   528			ret = bq25890_field_read(bq, F_SYSV); /* read measured value */
   529			if (ret < 0)
   530				return ret;
   531	
   532			/* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
   533			val->intval = 2304000 + ret * 20000;
   534			break;
   535	
 > 536		case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN:
   537			val->intval = bq25890_find_val(bq->init_data.sysvmin, TBL_SYSVMIN);
   538			break;
   539	
   540		case POWER_SUPPLY_PROP_CURRENT_NOW:
   541			ret = bq25890_field_read(bq, F_ICHGR); /* read measured value */
   542			if (ret < 0)
   543				return ret;
   544	
   545			/* converted_val = ADC_val * 50mA (table 10.3.19) */
   546			val->intval = ret * -50000;
   547			break;
   548	
   549		default:
   550			return -EINVAL;
   551		}
   552	
   553		return 0;
   554	}
   555	
   556	static int bq25890_get_chip_state(struct bq25890_device *bq,
   557					  struct bq25890_state *state)
   558	{
   559		int i, ret;
   560	
   561		struct {
   562			enum bq25890_fields id;
   563			u8 *data;
   564		} state_fields[] = {
   565			{F_CHG_STAT,	&state->chrg_status},
   566			{F_PG_STAT,	&state->online},
   567			{F_VSYS_STAT,	&state->vsys_status},
   568			{F_BOOST_FAULT, &state->boost_fault},
   569			{F_BAT_FAULT,	&state->bat_fault},
   570			{F_CHG_FAULT,	&state->chrg_fault}
   571		};
   572	
   573		for (i = 0; i < ARRAY_SIZE(state_fields); i++) {
   574			ret = bq25890_field_read(bq, state_fields[i].id);
   575			if (ret < 0)
   576				return ret;
   577	
   578			*state_fields[i].data = ret;
   579		}
   580	
   581		dev_dbg(bq->dev, "S:CHG/PG/VSYS=%d/%d/%d, F:CHG/BOOST/BAT=%d/%d/%d\n",
   582			state->chrg_status, state->online, state->vsys_status,
   583			state->chrg_fault, state->boost_fault, state->bat_fault);
   584	
   585		return 0;
   586	}
   587	
   588	static irqreturn_t __bq25890_handle_irq(struct bq25890_device *bq)
   589	{
   590		struct bq25890_state new_state;
   591		int ret;
   592	
   593		ret = bq25890_get_chip_state(bq, &new_state);
   594		if (ret < 0)
   595			return IRQ_NONE;
   596	
   597		if (!memcmp(&bq->state, &new_state, sizeof(new_state)))
   598			return IRQ_NONE;
   599	
   600		if (!new_state.online && bq->state.online) {	    /* power removed */
   601			/* disable ADC */
   602			ret = bq25890_field_write(bq, F_CONV_START, 0);
   603			if (ret < 0)
   604				goto error;
   605		} else if (new_state.online && !bq->state.online) { /* power inserted */
   606			/* enable ADC, to have control of charge current/voltage */
   607			ret = bq25890_field_write(bq, F_CONV_START, 1);
   608			if (ret < 0)
   609				goto error;
   610		}
   611	
   612		bq->state = new_state;
   613		power_supply_changed(bq->charger);
   614	
   615		return IRQ_HANDLED;
   616	error:
   617		dev_err(bq->dev, "Error communicating with the chip: %pe\n",
   618			ERR_PTR(ret));
   619		return IRQ_HANDLED;
   620	}
   621	
   622	static irqreturn_t bq25890_irq_handler_thread(int irq, void *private)
   623	{
   624		struct bq25890_device *bq = private;
   625		irqreturn_t ret;
   626	
   627		mutex_lock(&bq->lock);
   628		ret = __bq25890_handle_irq(bq);
   629		mutex_unlock(&bq->lock);
   630	
   631		return ret;
   632	}
   633	
   634	static int bq25890_chip_reset(struct bq25890_device *bq)
   635	{
   636		int ret;
   637		int rst_check_counter = 10;
   638	
   639		ret = bq25890_field_write(bq, F_REG_RST, 1);
   640		if (ret < 0)
   641			return ret;
   642	
   643		do {
   644			ret = bq25890_field_read(bq, F_REG_RST);
   645			if (ret < 0)
   646				return ret;
   647	
   648			usleep_range(5, 10);
   649		} while (ret == 1 && --rst_check_counter);
   650	
   651		if (!rst_check_counter)
   652			return -ETIMEDOUT;
   653	
   654		return 0;
   655	}
   656	
   657	static int bq25890_hw_init(struct bq25890_device *bq)
   658	{
   659		int ret;
   660		int i;
   661	
   662		const struct {
   663			enum bq25890_fields id;
   664			u32 value;
   665		} init_data[] = {
   666			{F_ICHG,	 bq->init_data.ichg},
   667			{F_VREG,	 bq->init_data.vreg},
   668			{F_ITERM,	 bq->init_data.iterm},
   669			{F_IPRECHG,	 bq->init_data.iprechg},
   670			{F_SYSVMIN,	 bq->init_data.sysvmin},
   671			{F_BOOSTV,	 bq->init_data.boostv},
   672			{F_BOOSTI,	 bq->init_data.boosti},
   673			{F_BOOSTF,	 bq->init_data.boostf},
   674			{F_EN_ILIM,	 bq->init_data.ilim_en},
   675			{F_TREG,	 bq->init_data.treg}
   676		};
   677	
   678		ret = bq25890_chip_reset(bq);
   679		if (ret < 0) {
   680			dev_dbg(bq->dev, "Reset failed %d\n", ret);
   681			return ret;
   682		}
   683	
   684		/* disable watchdog */
   685		ret = bq25890_field_write(bq, F_WD, 0);
   686		if (ret < 0) {
   687			dev_dbg(bq->dev, "Disabling watchdog failed %d\n", ret);
   688			return ret;
   689		}
   690	
   691		/* initialize currents/voltages and other parameters */
   692		for (i = 0; i < ARRAY_SIZE(init_data); i++) {
   693			ret = bq25890_field_write(bq, init_data[i].id,
   694						  init_data[i].value);
   695			if (ret < 0) {
   696				dev_dbg(bq->dev, "Writing init data failed %d\n", ret);
   697				return ret;
   698			}
   699		}
   700	
   701		/* Configure ADC for continuous conversions when charging */
   702		ret = bq25890_field_write(bq, F_CONV_RATE, !!bq->state.online);
   703		if (ret < 0) {
   704			dev_dbg(bq->dev, "Config ADC failed %d\n", ret);
   705			return ret;
   706		}
   707	
   708		ret = bq25890_get_chip_state(bq, &bq->state);
   709		if (ret < 0) {
   710			dev_dbg(bq->dev, "Get state failed %d\n", ret);
   711			return ret;
   712		}
   713	
   714		return 0;
   715	}
   716	
   717	static const enum power_supply_property bq25890_power_supply_props[] = {
   718		POWER_SUPPLY_PROP_MANUFACTURER,
   719		POWER_SUPPLY_PROP_MODEL_NAME,
   720		POWER_SUPPLY_PROP_STATUS,
   721		POWER_SUPPLY_PROP_CHARGE_TYPE,
   722		POWER_SUPPLY_PROP_ONLINE,
   723		POWER_SUPPLY_PROP_HEALTH,
   724		POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
   725		POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
   726		POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
   727		POWER_SUPPLY_PROP_PRECHARGE_CURRENT,
   728		POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
   729		POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
   730		POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW,
 > 731		POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW,
 > 732		POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN,
   733		POWER_SUPPLY_PROP_CURRENT_NOW,
   734	};
   735	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 60612 bytes --]

  reply	other threads:[~2020-04-03 21:42 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-02 14:58 [PATCH 00/14] power: supply: bq25890: fix and extend Michał Mirosław
2020-04-02 14:58 ` [PATCH 01/14] power: supply: bq25890: remove redundant I2C bus check Michał Mirosław
2020-04-02 14:58 ` [PATCH 02/14] power: supply: bq25890: simplify chip name property getter Michał Mirosław
2020-04-02 14:58 ` [PATCH 03/14] power: supply: bq25890: make property table const Michał Mirosław
2020-04-03 19:52   ` kbuild test robot
2020-04-03 19:52     ` kbuild test robot
2020-04-04  3:41   ` kbuild test robot
2020-04-04  3:41     ` kbuild test robot
2020-04-02 14:58 ` [PATCH 05/14] power: supply: bq25890: fix ADC mode configuration Michał Mirosław
2020-04-03 20:29   ` kbuild test robot
2020-04-03 20:29     ` kbuild test robot
2020-04-03 22:14   ` kbuild test robot
2020-04-03 22:14     ` kbuild test robot
2020-04-04  5:14   ` kbuild test robot
2020-04-04  5:14     ` kbuild test robot
2020-04-02 14:58 ` [PATCH 04/14] power: supply: bq25890: protect view of the chip's state Michał Mirosław
2020-04-02 14:58 ` [PATCH 07/14] power: supply: bq25890: implement CHARGE_TYPE property Michał Mirosław
2020-04-02 14:58 ` [PATCH 06/14] power: supply: bq25890: update state on property read Michał Mirosław
2020-04-02 14:58 ` [PATCH 09/14] power: supply: bq25890: implement INPUT_CURRENT_LIMIT property Michał Mirosław
2020-04-02 14:58 ` [PATCH 08/14] power: supply: bq25890: implement PRECHARGE_CURRENT property Michał Mirosław
2020-04-02 14:58 ` [PATCH 10/14] power: supply: bq25890: use proper CURRENT_NOW property for I_BAT Michał Mirosław
2020-04-02 14:58 ` [PATCH 11/14] power: supply: bq25890: show measured VBUS Michał Mirosław
2020-04-03 21:06   ` kbuild test robot
2020-04-03 21:06     ` kbuild test robot
2020-04-03 23:04   ` kbuild test robot
2020-04-03 23:04     ` kbuild test robot
2020-04-02 14:58 ` [PATCH 12/14] power: supply: bq25890: show VSYS as output voltage Michał Mirosław
2020-04-03 21:41   ` kbuild test robot [this message]
2020-04-03 21:41     ` kbuild test robot
2020-04-02 14:58 ` [PATCH 13/14] power: supply: bq25890: show VBAT as VOLTAGE_NOW Michał Mirosław
2020-04-02 14:58 ` [PATCH 14/14] power: supply: bq25890: support IBAT compensation Michał Mirosław

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=202004040518.LyQwFC6f%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mirq-linux@rere.qmqm.pl \
    --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 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.