From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
To: Jiri Kosina <jikos@kernel.org>, Bastien Nocera <hadess@hadess.net>
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v3 14/19] HID: logitech-hidpp: battery: provide ONLINE property
Date: Mon, 27 Mar 2017 16:59:34 +0200 [thread overview]
Message-ID: <20170327145939.29824-15-benjamin.tissoires@redhat.com> (raw)
In-Reply-To: <20170327145939.29824-1-benjamin.tissoires@redhat.com>
When ONLINE isn't set, upower should ignore the battery capacity,
so there is no need to overload it with some random values.
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
---
completely reworked in v3:
- store a online field in hidpp->battery to be able to fine control
the value
- provide POWER_SUPPLY_STATUS_UNKNOWN to the status when the device
is disconnected
---
drivers/hid/hid-logitech-hidpp.c | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index 0781d2b..7e4445a 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -120,6 +120,7 @@ struct hidpp_battery {
char name[64];
int status;
int level;
+ bool online;
};
struct hidpp_device {
@@ -686,7 +687,6 @@ static int hidpp20_batterylevel_map_status_level(u8 data[3], int *level,
int *next_level)
{
int status;
- int level_override;
*level = data[0];
*next_level = data[1];
@@ -698,36 +698,28 @@ static int hidpp20_batterylevel_map_status_level(u8 data[3], int *level,
switch (data[2]) {
case 0: /* discharging (in use) */
status = POWER_SUPPLY_STATUS_DISCHARGING;
- level_override = 0;
break;
case 1: /* recharging */
status = POWER_SUPPLY_STATUS_CHARGING;
- level_override = 80;
break;
case 2: /* charge in final stage */
status = POWER_SUPPLY_STATUS_CHARGING;
- level_override = 90;
break;
case 3: /* charge complete */
status = POWER_SUPPLY_STATUS_FULL;
- level_override = 100;
+ *level = 100;
break;
case 4: /* recharging below optimal speed */
status = POWER_SUPPLY_STATUS_CHARGING;
- level_override = 50;
break;
/* 5 = invalid battery type
6 = thermal error
7 = other charging error */
default:
status = POWER_SUPPLY_STATUS_NOT_CHARGING;
- level_override = 0;
break;
}
- if (level_override != 0 && *level == 0)
- *level = level_override;
-
return status;
}
@@ -781,6 +773,9 @@ static int hidpp20_query_battery_info(struct hidpp_device *hidpp)
hidpp->battery.status = status;
hidpp->battery.level = level;
+ /* the capacity is only available when discharging or full */
+ hidpp->battery.online = status == POWER_SUPPLY_STATUS_DISCHARGING ||
+ status == POWER_SUPPLY_STATUS_FULL;
return 0;
}
@@ -799,6 +794,10 @@ static int hidpp20_battery_event(struct hidpp_device *hidpp,
status = hidpp20_batterylevel_map_status_level(report->fap.params,
&level, &next_level);
+ /* the capacity is only available when discharging or full */
+ hidpp->battery.online = status == POWER_SUPPLY_STATUS_DISCHARGING ||
+ status == POWER_SUPPLY_STATUS_FULL;
+
changed = level != hidpp->battery.level ||
status != hidpp->battery.status;
@@ -813,6 +812,7 @@ static int hidpp20_battery_event(struct hidpp_device *hidpp,
}
static enum power_supply_property hidpp_battery_props[] = {
+ POWER_SUPPLY_PROP_ONLINE,
POWER_SUPPLY_PROP_STATUS,
POWER_SUPPLY_PROP_CAPACITY,
POWER_SUPPLY_PROP_SCOPE,
@@ -838,6 +838,9 @@ static int hidpp_battery_get_property(struct power_supply *psy,
case POWER_SUPPLY_PROP_SCOPE:
val->intval = POWER_SUPPLY_SCOPE_DEVICE;
break;
+ case POWER_SUPPLY_PROP_ONLINE:
+ val->intval = hidpp->battery.online;
+ break;
case POWER_SUPPLY_PROP_MODEL_NAME:
if (!strncmp(hidpp->name, "Logitech ", 9))
val->strval = hidpp->name + 9;
@@ -2416,8 +2419,14 @@ static void hidpp_connect_event(struct hidpp_device *hidpp)
struct input_dev *input;
char *name, *devm_name;
- if (!connected)
+ if (!connected) {
+ if (hidpp->battery.ps) {
+ hidpp->battery.online = false;
+ hidpp->battery.status = POWER_SUPPLY_STATUS_UNKNOWN;
+ power_supply_changed(hidpp->battery.ps);
+ }
return;
+ }
if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
ret = wtp_connect(hdev, connected);
--
2.9.3
next prev parent reply other threads:[~2017-03-27 15:00 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-27 14:59 [PATCH v3 00/19] Report power supply from hid-logitech-hidpp Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 01/19] HID: logitech-dj: allow devices to request full pairing information Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 02/19] HID: logitech-hidpp: Add scope to battery Benjamin Tissoires
2017-04-06 9:48 ` Jiri Kosina
2017-04-06 9:57 ` Benjamin Tissoires
2017-04-06 18:34 ` Jiri Kosina
2017-03-27 14:59 ` [PATCH v3 03/19] HID: logitech-hidpp: make sure we only register one battery per device Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 04/19] HID: logitech-hidpp: do not query the name through HID++ for 1.0 devices Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 05/19] HID: logitech-hidpp: create a capabilities bits field Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 06/19] HID: logitech-hidpp: rework probe path for unifying devices Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 07/19] HID: logitech-hidpp: retrieve the HID++ device name when available Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 08/19] HID: logitech-hidpp: rework hidpp_connect_event() Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 09/19] HID: logitech-hidpp: handle battery events in hidpp_raw_hidpp_event() Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 10/19] HID: logitech-hidpp: forward device info in power_supply Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 11/19] HID: logitech-hidpp: create the battery for all types of HID++ devices Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 12/19] HID: logitech-hidpp: return an error if the queried feature is not present Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 13/19] HID: logitech-hidpp: notify battery on connect Benjamin Tissoires
2017-03-27 14:59 ` Benjamin Tissoires [this message]
2017-03-27 14:59 ` [PATCH v3 15/19] HID: logitech-hidpp: rename battery level into capacity Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 16/19] HID: logitech-hidpp: battery: provide CAPACITY_LEVEL Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 17/19] HID: logitech-hidpp: add support for battery status for the K750 Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 18/19] HID: logitech-hidpp: enable HID++ 1.0 battery reporting Benjamin Tissoires
2017-03-27 14:59 ` [PATCH v3 19/19] HID: logitech-hidpp: add a sysfs file to tell we support power_supply Benjamin Tissoires
2017-03-27 16:23 ` [PATCH v3 00/19] Report power supply from hid-logitech-hidpp Bastien Nocera
2017-06-01 18:06 ` Dave Hansen
2017-06-01 19:26 ` Bastien Nocera
2017-06-02 7:29 ` Benjamin Tissoires
2017-06-02 12:54 ` Bastien Nocera
2017-06-02 13:47 ` Benjamin Tissoires
2017-06-02 14:10 ` Dave Hansen
2017-06-05 8:01 ` Jiri Kosina
2017-06-05 13:09 ` Bastien Nocera
2017-06-05 14:53 ` Dave Hansen
2017-06-05 16:22 ` Bastien Nocera
2017-06-06 7:25 ` Benjamin Tissoires
2017-06-06 7:46 ` Bastien Nocera
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=20170327145939.29824-15-benjamin.tissoires@redhat.com \
--to=benjamin.tissoires@redhat.com \
--cc=hadess@hadess.net \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.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;
as well as URLs for NNTP newsgroup(s).