From: Qiwu Huang <[email protected]>
This patchset aims to provide power supply properties about wireless/wired charging.
"quick_charge_type" reports different types of quick charge based on the charging power;
"tx_adapter" shows" the type of wireless charging adapter;
"signal_strength" shows the coupling level between TX and RX;
"reverse_chg_mode" provides the interface of enabling/disabling wireless reverse charging.
Changes in v9
- Set bat_imax When get quick charger type
Changes in v8
- Add quick charge type driver in qcom_smbb suggested by GregKH
Changes in v7
- Fix PATCH version error in 0/X email
Changes in v6
- Replace "phones" with "devices" suggested by GregKH
- Add permission statement for "reverse_chg_mode"
- Update description for "reverse_chg_mode" in ABI suggested by GregKH
- Update description for "PING phase" in ABI suggested by GregKH
Changes in v5
- Add details in 0/X email
Changes in v4
- Exclude the patch of "power: supply: supply battery soc with decimal form"
- Fix some typo
Changes in v3
- Add enumederated for quick charge type
- Add enumederated for tx adapter type
- Update the return type and description in ABI
Changes in v2
- modify to capital letters for "power_supply_attrs"
- Update the return type and description in ABI
Qiwu Huang (4):
power: supply: core: add quick charge type property
power: supply: core: add wireless charger adapter type property
power: supply: core: add wireless signal strength property
power: supply: core: property to control reverse charge
Documentation/ABI/testing/sysfs-class-power | 85 +++++++++++++++++++++
drivers/power/supply/power_supply_sysfs.c | 4 +
drivers/power/supply/qcom_smbb.c | 79 +++++++++++++++++++
include/linux/power_supply.h | 35 +++++++++
4 files changed, 203 insertions(+)
--
2.28.0
From: Qiwu Huang <[email protected]>
Reports what type of wireless adapter connection is
currently active for the supply.
for example it can show if ADAPTER_PD capable source is attached.
Signed-off-by: Qiwu Huang <[email protected]>
---
Documentation/ABI/testing/sysfs-class-power | 28 +++++++++++++++++++++
drivers/power/supply/power_supply_sysfs.c | 1 +
include/linux/power_supply.h | 19 ++++++++++++++
3 files changed, 48 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index dd3773dcf16a..03ab449fae8a 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -729,3 +729,31 @@ Contact: Fei Jiang <[email protected]>
3: QUICK_CHARGE_TURBE,
4: QUICK_CHARGE_SUPER.
+===== Wireless Charger Properties =====
+What: /sys/class/power_supply/<supply_name>/tx_adapter
+Date: Jul 2020
+Contact: Fei Jiang <[email protected]>
+Description:
+ Reports the type of wireless adapter connection is currently active for
+ the supply, for example it can show if ADAPTER_PD capable source
+ is attached. Expect common wireless adapter type, also increase by
+ some vendor private adapter type(ex. ADAPTER_PD_40W).
+
+ Access: Read-Only
+ Valid values:
+ 0: ADAPTER_NONE,
+ 1: ADAPTER_SDP,
+ 2: ADAPTER_DCP,
+ 3: ADAPTER_CDP,
+ 4: ADAPTER_OCP,
+ 5: ADAPTER_QC2,
+ 6: ADAPTER_QC3,
+ 7: ADAPTER_PD,
+ 8: ADAPTER_AUTH_FAILED,
+ 9: ADAPTER_PRIVATE_QC3,
+ 10: ADAPTER_PRIVATE_PD,
+ 11: ADAPTER_CAR_POWER,
+ 12: ADAPTER_PRIVATE_PD_40W,
+ 13: ADAPTER_VOICE_BOX,
+ 14: ADAPTER_PRIVATE_PD_50W.
+
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index 9554d7907373..f2458e21d02b 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -207,6 +207,7 @@ static struct power_supply_attr power_supply_attrs[] = {
POWER_SUPPLY_ATTR(MANUFACTURER),
POWER_SUPPLY_ATTR(SERIAL_NUMBER),
POWER_SUPPLY_ATTR(QUICK_CHARGE_TYPE),
+ POWER_SUPPLY_ATTR(TX_ADAPTER),
};
static struct attribute *
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index bd99658c05be..00254e096a4a 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -168,6 +168,7 @@ enum power_supply_property {
POWER_SUPPLY_PROP_MANUFACTURER,
POWER_SUPPLY_PROP_SERIAL_NUMBER,
POWER_SUPPLY_PROP_QUICK_CHARGE_TYPE,
+ POWER_SUPPLY_PROP_TX_ADAPTER,
};
enum power_supply_type {
@@ -211,6 +212,24 @@ enum power_supply_quick_charge_type {
QUICK_CHARGE_MAX,
};
+enum power_supply_tx_adapter_type {
+ ADAPTER_NONE = 0, /* Nothing Attached */
+ ADAPTER_SDP, /* Standard Downstream Port */
+ ADAPTER_CDP, /* Charging Downstream Port */
+ ADAPTER_DCP, /* Dedicated Charging Port */
+ ADAPTER_OCP, /* Other Charging Port */
+ ADAPTER_QC2, /* Qualcomm Charge 2.0 */
+ ADAPTER_QC3, /* Qualcomm Charge 3.0 */
+ ADAPTER_PD, /* Power Delivery Port */
+ ADAPTER_AUTH_FAILED, /* Authenticated Failed Adapter */
+ ADAPTER_PRIVATE_QC3, /* Qualcomm Charge 3.0 with Private Protocol */
+ ADAPTER_PRIVATE_PD, /* PD Adapter with Private Protocol */
+ ADAPTER_CAR_POWER, /* Wireless Car Charger */
+ ADAPTER_PRIVATE_PD_40W, /* 40W PD Adapter with Private Protocol */
+ ADAPTER_VOICE_BOX, /* Voice Box which Support Wireless Charger */
+ ADAPTER_PRIVATE_PD_50W, /* 50W PD Adapter with Private Protocol */
+};
+
enum power_supply_notifier_events {
PSY_EVENT_PROP_CHANGED,
};
--
2.28.0
From: Qiwu Huang <[email protected]>
Interface to control wireless reverse charge.
Signed-off-by: Qiwu Huang <[email protected]>
---
Documentation/ABI/testing/sysfs-class-power | 14 ++++++++++++++
drivers/power/supply/power_supply_sysfs.c | 1 +
include/linux/power_supply.h | 1 +
3 files changed, 16 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index 4459b720feb2..8840fdf483a7 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -779,3 +779,17 @@ Description:
Access: Read-Only
Valid values: 0 - 100
+
+What: /sys/class/power_supply/<supply_name>/reverse_chg_mode
+Date: Jul 2020
+Contact: Fei Jiang <[email protected]>
+Description:
+ Some devices support wireless reverse charge function which
+ charge other devices.The property provider interface to
+ enable/disable wireless reverse charge.If enabled, start TX
+ mode and detect RX. Disabled when timeout or manual setting.
+
+ Access: Read, Write
+ Valid values:
+ - 1: enabled
+ - 0: disabled
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index e420a453095e..81916b6b6ccf 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -209,6 +209,7 @@ static struct power_supply_attr power_supply_attrs[] = {
POWER_SUPPLY_ATTR(QUICK_CHARGE_TYPE),
POWER_SUPPLY_ATTR(TX_ADAPTER),
POWER_SUPPLY_ATTR(SIGNAL_STRENGTH),
+ POWER_SUPPLY_ATTR(REVERSE_CHG_MODE),
};
static struct attribute *
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 747338118fa1..988d3f05ea1c 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -170,6 +170,7 @@ enum power_supply_property {
POWER_SUPPLY_PROP_QUICK_CHARGE_TYPE,
POWER_SUPPLY_PROP_TX_ADAPTER,
POWER_SUPPLY_PROP_SIGNAL_STRENGTH,
+ POWER_SUPPLY_PROP_REVERSE_CHG_MODE,
};
enum power_supply_type {
--
2.28.0
From: Qiwu Huang <[email protected]>
Reports the kind of quick charge type based on
different adapter power.
Signed-off-by: Qiwu Huang <[email protected]>
---
Documentation/ABI/testing/sysfs-class-power | 21 ++++++
drivers/power/supply/power_supply_sysfs.c | 1 +
drivers/power/supply/qcom_smbb.c | 79 +++++++++++++++++++++
include/linux/power_supply.h | 14 ++++
4 files changed, 115 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index 216d61a22f1e..dd3773dcf16a 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -708,3 +708,24 @@ Description:
Access: Read
Valid values: 1-31
+
+What: /sys/class/power_supply/<supply_name>/quick_charge_type
+Date: Jul 2020
+Contact: Fei Jiang <[email protected]>
+ Description:
+ Reports the kind of quick charge type based on different adapter power.
+ Different quick charge type represent different charging power.
+ QUICK_CHARGE_NORMAL : Charging Power <= 10W
+ QUICK_CHARGE_FAST : 10W < Charging Power <= 20W
+ QUICK_CHARGE_FLASH : 20W < Charging Power <= 30W
+ QUICK_CHARGE_TURBE : 30W < Charging Power <= 50W
+ QUICK_CHARGE_SUPER : Charging Power > 50W
+
+ Access: Read-Only
+ Valid values:
+ 0: QUICK_CHARGE_NORMAL,
+ 1: QUICK_CHARGE_FAST,
+ 2: QUICK_CHARGE_FLASH,
+ 3: QUICK_CHARGE_TURBE,
+ 4: QUICK_CHARGE_SUPER.
+
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index bc79560229b5..9554d7907373 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -206,6 +206,7 @@ static struct power_supply_attr power_supply_attrs[] = {
POWER_SUPPLY_ATTR(MODEL_NAME),
POWER_SUPPLY_ATTR(MANUFACTURER),
POWER_SUPPLY_ATTR(SERIAL_NUMBER),
+ POWER_SUPPLY_ATTR(QUICK_CHARGE_TYPE),
};
static struct attribute *
diff --git a/drivers/power/supply/qcom_smbb.c b/drivers/power/supply/qcom_smbb.c
index c890e1cec720..7dbb385531ca 100644
--- a/drivers/power/supply/qcom_smbb.c
+++ b/drivers/power/supply/qcom_smbb.c
@@ -90,6 +90,12 @@
#define STATUS_CHG_FAST BIT(7) /* Fast charging */
#define STATUS_CHG_GONE BIT(8) /* No charger is connected */
+#define IMAX_NORMAL 2000000
+#define IMAX_FAST 4000000
+#define IMAX_FLASH 6000000
+#define IMAX_TURBE 10000000
+#define IMAX_SUPER 12000000
+
enum smbb_attr {
ATTR_BAT_ISAFE,
ATTR_BAT_IMAX,
@@ -111,6 +117,7 @@ struct smbb_charger {
bool dc_disabled;
bool jeita_ext_temp;
+ bool pd_verifed;
unsigned long status;
struct mutex statlock;
@@ -485,6 +492,58 @@ static const struct smbb_irq {
{ "dc-valid", smbb_dc_valid_handler },
};
+struct quick_charge {
+ enum power_supply_type adap_type;
+ enum power_supply_quick_charge_type adap_cap;
+};
+
+static struct quick_charge adapter_cap[10] = {
+ { POWER_SUPPLY_TYPE_USB, QUICK_CHARGE_NORMAL },
+ { POWER_SUPPLY_TYPE_USB_DCP, QUICK_CHARGE_NORMAL },
+ { POWER_SUPPLY_TYPE_USB_CDP, QUICK_CHARGE_NORMAL },
+ { POWER_SUPPLY_TYPE_USB_ACA, QUICK_CHARGE_NORMAL },
+ { POWER_SUPPLY_TYPE_USB_FLOAT, QUICK_CHARGE_NORMAL },
+ { POWER_SUPPLY_TYPE_USB_PD, QUICK_CHARGE_FAST },
+ { POWER_SUPPLY_TYPE_USB_HVDCP, QUICK_CHARGE_FAST },
+ { POWER_SUPPLY_TYPE_USB_HVDCP_3, QUICK_CHARGE_FAST },
+ { POWER_SUPPLY_TYPE_USB_HVDCP_3P5, QUICK_CHARGE_FAST },
+ {0, 0},
+};
+
+static int get_quick_charge_type(struct smbb_charger *chg)
+{
+ union power_supply_propval prop = {0, };
+ int charger_type, rc;
+ int i = 0;
+
+ rc = power_supply_get_property(chg->bat_psy,
+ POWER_SUPPLY_PROP_STATUS, &prop);
+ if (rc < 0)
+ return rc;
+ if (prop.intval == POWER_SUPPLY_STATUS_DISCHARGING)
+ return 0;
+
+ rc = power_supply_get_property(chg->usb_psy,
+ POWER_SUPPLY_PROP_USB_TYPE, &prop);
+ if (rc < 0)
+ return rc;
+ charger_type = prop.intval;
+
+ /* when pd adapter is authenticated successfully */
+ if ((charger_type == POWER_SUPPLY_TYPE_USB_PD) && chg->pd_verifed) {
+ return QUICK_CHARGE_TURBE;
+ }
+
+ while (adapter_cap[i].adap_type != 0) {
+ if (charger_type == adapter_cap[i].adap_type) {
+ return adapter_cap[i].adap_cap;
+ }
+ i++;
+ }
+
+ return 0;
+}
+
static int smbb_usbin_get_property(struct power_supply *psy,
enum power_supply_property psp,
union power_supply_propval *val)
@@ -505,6 +564,9 @@ static int smbb_usbin_get_property(struct power_supply *psy,
case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX:
val->intval = 2500000;
break;
+ case POWER_SUPPLY_PROP_QUICK_CHARGE_TYPE:
+ val->intval = get_quick_charge_type(chg);
+ break;
default:
rc = -EINVAL;
break;
@@ -662,10 +724,26 @@ static int smbb_battery_set_property(struct power_supply *psy,
const union power_supply_propval *val)
{
struct smbb_charger *chg = power_supply_get_drvdata(psy);
+ int charger_type, bat_imax;
int rc;
switch (psp) {
case POWER_SUPPLY_PROP_CURRENT_MAX:
+ charger_type = get_quick_charge_type(chg);
+ if (charger_type == QUICK_CHARGE_NORMAL)
+ bat_imax = IMAX_NORMAL;
+ else if (charger_type == QUICK_CHARGE_FAST)
+ bat_imax = IMAX_FAST;
+ else if (charger_type == QUICK_CHARGE_FLASH)
+ bat_imax = IMAX_FLASH;
+ else if (charger_type == QUICK_CHARGE_TURBE)
+ bat_imax = IMAX_TURBE;
+ else if (charger_type == QUICK_CHARGE_SUPER)
+ bat_imax = IMAX_SUPER;
+ else
+ bat_imax = IMAX_NORMAL;
+
+ val->intval = min(val->intval, bat_imax)
rc = smbb_charger_attr_write(chg, ATTR_BAT_IMAX, val->intval);
break;
case POWER_SUPPLY_PROP_VOLTAGE_MAX:
@@ -695,6 +773,7 @@ static enum power_supply_property smbb_charger_properties[] = {
POWER_SUPPLY_PROP_ONLINE,
POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT,
POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
+ POWER_SUPPLY_PROP_QUICK_CHARGE_TYPE,
};
static enum power_supply_property smbb_battery_properties[] = {
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index ac1345a48ad0..bd99658c05be 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -167,6 +167,7 @@ enum power_supply_property {
POWER_SUPPLY_PROP_MODEL_NAME,
POWER_SUPPLY_PROP_MANUFACTURER,
POWER_SUPPLY_PROP_SERIAL_NUMBER,
+ POWER_SUPPLY_PROP_QUICK_CHARGE_TYPE,
};
enum power_supply_type {
@@ -182,6 +183,10 @@ enum power_supply_type {
POWER_SUPPLY_TYPE_USB_PD, /* Power Delivery Port */
POWER_SUPPLY_TYPE_USB_PD_DRP, /* PD Dual Role Port */
POWER_SUPPLY_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */
+ POWER_SUPPLY_TYPE_USB_HVDCP, /* High Voltage DCP */
+ POWER_SUPPLY_TYPE_USB_HVDCP_3, /* Efficient High Voltage DCP */
+ POWER_SUPPLY_TYPE_USB_HVDCP_3P5, /* Efficient High Voltage DCP */
+ POWER_SUPPLY_TYPE_USB_FLOAT, /* Floating charger */
};
enum power_supply_usb_type {
@@ -197,6 +202,15 @@ enum power_supply_usb_type {
POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */
};
+enum power_supply_quick_charge_type {
+ QUICK_CHARGE_NORMAL = 0, /* Charging Power <= 10W */
+ QUICK_CHARGE_FAST, /* 10W < Charging Power <= 20W */
+ QUICK_CHARGE_FLASH, /* 20W < Charging Power <= 30W */
+ QUICK_CHARGE_TURBE, /* 30W < Charging Power <= 50W */
+ QUICK_CHARGE_SUPER, /* Charging Power > 50W */
+ QUICK_CHARGE_MAX,
+};
+
enum power_supply_notifier_events {
PSY_EVENT_PROP_CHANGED,
};
--
2.28.0
From: Qiwu Huang <[email protected]>
reports wireless signal strength.
The value show degree of coupling between tx and rx.
Signed-off-by: Qiwu Huang <[email protected]>
---
Documentation/ABI/testing/sysfs-class-power | 22 +++++++++++++++++++++
drivers/power/supply/power_supply_sysfs.c | 1 +
include/linux/power_supply.h | 1 +
3 files changed, 24 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index 03ab449fae8a..4459b720feb2 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -757,3 +757,25 @@ Description:
13: ADAPTER_VOICE_BOX,
14: ADAPTER_PRIVATE_PD_50W.
+What: /sys/class/power_supply/<supply_name>/signal_strength
+Date: Jul 2020
+Contact: Fei Jiang <[email protected]>
+Description:
+ In PING phase, RX transmits a signal strength packet as the
+ first communication packet to instruct the base to keep power
+ signal on.The value reports wireless signal strength and show
+ degree of coupling.
+
+ The Qi Wireless Power Transfer System is published by the
+ Wireless Power Consortium.The ping phase is the necessary stage
+ for matching transmitter and receiver. In this phase,the Power
+ Transmitter executes a Digital Ping, and listens for a response.
+ If the Power Transmitter discovers a Power Receiver, the Power
+ Transmitter may extend the Digital Ping,i.e. maintain the Power
+ Signal at the level of the Digital Ping. This causes the system
+ to proceed to the identification & configuration phase. If the
+ Power Transmitter does not extend the Digital Ping, the system
+ shall revert to the selection phase.
+
+ Access: Read-Only
+ Valid values: 0 - 100
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index f2458e21d02b..e420a453095e 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -208,6 +208,7 @@ static struct power_supply_attr power_supply_attrs[] = {
POWER_SUPPLY_ATTR(SERIAL_NUMBER),
POWER_SUPPLY_ATTR(QUICK_CHARGE_TYPE),
POWER_SUPPLY_ATTR(TX_ADAPTER),
+ POWER_SUPPLY_ATTR(SIGNAL_STRENGTH),
};
static struct attribute *
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 00254e096a4a..747338118fa1 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -169,6 +169,7 @@ enum power_supply_property {
POWER_SUPPLY_PROP_SERIAL_NUMBER,
POWER_SUPPLY_PROP_QUICK_CHARGE_TYPE,
POWER_SUPPLY_PROP_TX_ADAPTER,
+ POWER_SUPPLY_PROP_SIGNAL_STRENGTH,
};
enum power_supply_type {
--
2.28.0
Hi Qiwu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on power-supply/for-next]
[also build test ERROR on linux/master linus/master v5.9-rc2 next-20200825]
[cannot apply to battery/master]
[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]
url: https://github.com/0day-ci/linux/commits/Qiwu-Huang/add-some-power-supply-properties-about-wireless-wired-charging/20200825-144140
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: x86_64-randconfig-a016-20200825 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 77e5a195f818b9ace91f7b12ab948b21d7918238)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# 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 <[email protected]>
All errors (new ones prefixed by >>):
>> drivers/power/supply/qcom_smbb.c:746:15: error: cannot assign to variable 'val' with const-qualified type 'const union power_supply_propval *'
val->intval = min(val->intval, bat_imax)
~~~~~~~~~~~ ^
drivers/power/supply/qcom_smbb.c:724:37: note: variable 'val' declared const here
const union power_supply_propval *val)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
1 error generated.
# https://github.com/0day-ci/linux/commit/2a1fea164283b387b06e51d0dc66555b46e3aabe
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Qiwu-Huang/add-some-power-supply-properties-about-wireless-wired-charging/20200825-144140
git checkout 2a1fea164283b387b06e51d0dc66555b46e3aabe
vim +746 drivers/power/supply/qcom_smbb.c
721
722 static int smbb_battery_set_property(struct power_supply *psy,
723 enum power_supply_property psp,
724 const union power_supply_propval *val)
725 {
726 struct smbb_charger *chg = power_supply_get_drvdata(psy);
727 int charger_type, bat_imax;
728 int rc;
729
730 switch (psp) {
731 case POWER_SUPPLY_PROP_CURRENT_MAX:
732 charger_type = get_quick_charge_type(chg);
733 if (charger_type == QUICK_CHARGE_NORMAL)
734 bat_imax = IMAX_NORMAL;
735 else if (charger_type == QUICK_CHARGE_FAST)
736 bat_imax = IMAX_FAST;
737 else if (charger_type == QUICK_CHARGE_FLASH)
738 bat_imax = IMAX_FLASH;
739 else if (charger_type == QUICK_CHARGE_TURBE)
740 bat_imax = IMAX_TURBE;
741 else if (charger_type == QUICK_CHARGE_SUPER)
742 bat_imax = IMAX_SUPER;
743 else
744 bat_imax = IMAX_NORMAL;
745
> 746 val->intval = min(val->intval, bat_imax)
747 rc = smbb_charger_attr_write(chg, ATTR_BAT_IMAX, val->intval);
748 break;
749 case POWER_SUPPLY_PROP_VOLTAGE_MAX:
750 rc = smbb_charger_attr_write(chg, ATTR_BAT_VMAX, val->intval);
751 break;
752 default:
753 rc = -EINVAL;
754 break;
755 }
756
757 return rc;
758 }
759
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
Hi Qiwu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on power-supply/for-next]
[also build test ERROR on linux/master linus/master v5.9-rc2 next-20200824]
[cannot apply to battery/master]
[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]
url: https://github.com/0day-ci/linux/commits/Qiwu-Huang/add-some-power-supply-properties-about-wireless-wired-charging/20200825-144140
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: mips-allyesconfig (attached as .config)
compiler: mips-linux-gcc (GCC) 9.3.0
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
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All errors (new ones prefixed by >>):
drivers/power/supply/qcom_smbb.c: In function 'smbb_battery_set_property':
>> drivers/power/supply/qcom_smbb.c:746:15: error: assignment of member 'intval' in read-only object
746 | val->intval = min(val->intval, bat_imax)
| ^
>> drivers/power/supply/qcom_smbb.c:747:3: error: expected ';' before 'rc'
747 | rc = smbb_charger_attr_write(chg, ATTR_BAT_IMAX, val->intval);
| ^~
# https://github.com/0day-ci/linux/commit/2a1fea164283b387b06e51d0dc66555b46e3aabe
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Qiwu-Huang/add-some-power-supply-properties-about-wireless-wired-charging/20200825-144140
git checkout 2a1fea164283b387b06e51d0dc66555b46e3aabe
vim +/intval +746 drivers/power/supply/qcom_smbb.c
721
722 static int smbb_battery_set_property(struct power_supply *psy,
723 enum power_supply_property psp,
724 const union power_supply_propval *val)
725 {
726 struct smbb_charger *chg = power_supply_get_drvdata(psy);
727 int charger_type, bat_imax;
728 int rc;
729
730 switch (psp) {
731 case POWER_SUPPLY_PROP_CURRENT_MAX:
732 charger_type = get_quick_charge_type(chg);
733 if (charger_type == QUICK_CHARGE_NORMAL)
734 bat_imax = IMAX_NORMAL;
735 else if (charger_type == QUICK_CHARGE_FAST)
736 bat_imax = IMAX_FAST;
737 else if (charger_type == QUICK_CHARGE_FLASH)
738 bat_imax = IMAX_FLASH;
739 else if (charger_type == QUICK_CHARGE_TURBE)
740 bat_imax = IMAX_TURBE;
741 else if (charger_type == QUICK_CHARGE_SUPER)
742 bat_imax = IMAX_SUPER;
743 else
744 bat_imax = IMAX_NORMAL;
745
> 746 val->intval = min(val->intval, bat_imax)
> 747 rc = smbb_charger_attr_write(chg, ATTR_BAT_IMAX, val->intval);
748 break;
749 case POWER_SUPPLY_PROP_VOLTAGE_MAX:
750 rc = smbb_charger_attr_write(chg, ATTR_BAT_VMAX, val->intval);
751 break;
752 default:
753 rc = -EINVAL;
754 break;
755 }
756
757 return rc;
758 }
759
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]