Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2583467ybl; Mon, 20 Jan 2020 05:44:49 -0800 (PST) X-Google-Smtp-Source: APXvYqxwkWZuKUqonvJfPcOioJTC+O1Nfa++YWbXx3dX6WFyjl/Adn9yCHnENMAdR6V8R8/ILJIG X-Received: by 2002:aca:b1d4:: with SMTP id a203mr12570019oif.150.1579527888912; Mon, 20 Jan 2020 05:44:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579527888; cv=none; d=google.com; s=arc-20160816; b=HYmLm0PNXzbAphj1guSkEubWH9w9JdG2zlu8wM2i/XLDpNz+c+q1pn+8n1Rkeq49Da zWrfV3jgqVFgwZH8Vcnw1pZCfxe1aTJVYpp4iiWe2F3Cuw7+YfklZrSUsWMY6oqwLGtj oHC48G5Rd+AxgzEdo1MLdXJVx6Q6UXQQGyOpuXLZ8nn6Di9dbEJ3C6D8y6ncjqps+R7j a3f1jjYR+EK+OmhZF92GP9pe1iPwQKAU5Tdx+bOGPPGHI8CserKIh4nL+elNpwlC8hU9 qEmDm5erROB6PQDo17lc1ydPWPQ45sC/60kH0nSIlGhHW2CyVQJtHA4Lvy7FpQDZwTue IYXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:dkim-signature:dkim-signature; bh=SibAiAd7KR/fy3khbzYlcHHfTc+BnLMI3tLmysU5OEo=; b=vZJ1B4pTUwdx4h8ENJ14/xD7/aNuskh0FHPeRsZ0VraAeEFt93mFx/6wZhHdqRr9ZN dtOTlPu/ebGfClv3Cc87Xc2irfq4r/AXpmDdCMuV74QOR3jM807b3qJDAk+Mcda+XloH Oeu7D77hSw8bFLG/id4K8jv9AzYz+bt+f0xuHPvVjBA/I6vscXJ7hRZzVBWL9O6rLC0R DQYYRgsV5O+Pqk6AGm5CU/rhe38XLk4fXBhTRS/VjajAZlU1h/d6QFFuuJJnPowoO5ZV sh4NF9/oMi/2STqbjlef9zZ9GsdhQ0DP7wAS7bT1Q3NgTsu5FlKP31X1SffJjgw4aLRb Z1Pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@pedrovanzella.com header.s=fm2 header.b=VnJdwdbN; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=Zxm2g+z7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f4si17360321oij.133.2020.01.20.05.44.35; Mon, 20 Jan 2020 05:44:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@pedrovanzella.com header.s=fm2 header.b=VnJdwdbN; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=Zxm2g+z7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727048AbgATNnl (ORCPT + 99 others); Mon, 20 Jan 2020 08:43:41 -0500 Received: from out4-smtp.messagingengine.com ([66.111.4.28]:46937 "EHLO out4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726626AbgATNnl (ORCPT ); Mon, 20 Jan 2020 08:43:41 -0500 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id AB6F020FBE; Mon, 20 Jan 2020 08:43:39 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 20 Jan 2020 08:43:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= pedrovanzella.com; h=subject:to:references:from:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; s=fm2; bh=SibAiAd7KR/fy3khbzYlcHHfTc +BnLMI3tLmysU5OEo=; b=VnJdwdbNJshVQbNM/Lk4NN9O6xQrF0V99U33Ygr/hA FIgMUOWs5z8nPCL3ssv2WXQaPZnK680OXbtKwolLHx4brrX3KwPJfY3ozo8QaPz7 ErVrrXb1Gf9tXc1qhdfEDlwj1mgy6coAQI6L1lVMNvBD8eeIMcMl5BWisPnuyYZ5 sc+NktqzkobCmJJT89GSLYD2vVMxfT0dL5eAPpujpOUYJpwFK3zxHxZGAHTq50XP xFSf+gZVxZzAOY+Wpi/Kheg/K1Dl+e+yuLFqReWyG7JubrgaGaMt+8AWXMyMHts6 jQDpnzF8JVbNrJyd/zkQaGPgShX2Sn+kQ3JH1H2bsuHw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=SibAiAd7KR/fy3khbzYlcHHfTc+BnLMI3tLmysU5O Eo=; b=Zxm2g+z7kMKIU2RK3pIkM/fGqMer2XcMjqbfZKxkKRELEKplzs1RYBybQ 2utvkqwGh9gTZVJvpu5irYIpxeAUbv3fBO9C5FAzMRqokZlR2SMRmLNOOLjGlMIB cC/wxPoScrTvHAMXQ1MclmL/y0+6M4zMeLsr9AkZhs0yx4Ie+wMtrXg2gSDIXTIN ga8LlbmhVH6d+B0lztWRJsLhs4jm85IQq41T8UJ3PRoXShabtgO9/gwpK9mE0Q+X 6ezBEBj8JiQ92hFTlEFEMGEA+r/hdHpEZZAFVdEUfjNsA4rXvboO0wVp1NhxnHVi wLpsfloyLor3+0jJw4ToWoWruuk8Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrudehgdegfecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefuvfhfhffkffgfgggjtgfgsehtkeertddtfeejnecuhfhrohhmpefrvggurhho ucggrghniigvlhhlrgcuoehpvggurhhosehpvggurhhovhgrnhiivghllhgrrdgtohhmqe enucfkphepvddtuddrkeejrddvtdehrddvheegnecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepphgvughrohesphgvughrohhvrghniigvlhhlrg drtghomh X-ME-Proxy: Received: from [192.168.20.6] (unknown [201.87.205.254]) by mail.messagingengine.com (Postfix) with ESMTPA id AC5D880061; Mon, 20 Jan 2020 08:43:37 -0500 (EST) Subject: Re: [PATCH] HID: logitech-hidpp: BatteryVoltage: only read chargeStatus if extPower is active To: =?UTF-8?Q?Filipe_La=c3=adns?= , Jiri Kosina , Benjamin Tissoires , Henrik Rydberg , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org References: <20200111192419.2503922-1-lains@archlinux.org> From: Pedro Vanzella Message-ID: Date: Mon, 20 Jan 2020 10:43:36 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <20200111192419.2503922-1-lains@archlinux.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/11/20 4:24 PM, Filipe Laíns wrote: > In the HID++ 2.0 function getBatteryInfo() from the BatteryVoltage > (0x1001) feature, chargeStatus is only valid if extPower is active. > > Previously we were ignoring extPower, which resulted in wrong values. Nice catch. Sorry for missing that the first time around. > > Example: > With an unplugged mouse > > $ cat /sys/class/power_supply/hidpp_battery_0/status > Charging Tested and it works as expected now. > > This patch makes fixes that, it also renames charge_sts to flags as > charge_sts can be confused with chargeStatus from the spec. > > Spec: > +--------+-------------------------------------------------------------------------+ > | byte | 2 | > +--------+--------------+------------+------------+----------+----------+----------+ > | bit | 0..2 | 3 | 4 | 5 | 6 | 7 | > +--------+--------------+------------+------------+----------+----------+----------+ > | buffer | chargeStatus | fastCharge | slowCharge | critical | (unused) | extPower | > +--------+--------------+------------+------------+----------+----------+----------+ > Table 1 - battery voltage (0x1001), getBatteryInfo() (ASE 0), 3rd byte > > +-------+--------------------------------------+ > | value | meaning | > +-------+--------------------------------------+ > | 0 | Charging | > +-------+--------------------------------------+ > | 1 | End of charge (100% charged) | > +-------+--------------------------------------+ > | 2 | Charge stopped (any "normal" reason) | > +-------+--------------------------------------+ > | 7 | Hardware error | > +-------+--------------------------------------+ > Table 2 - chargeStatus value > > Signed-off-by: Filipe Laíns > --- > drivers/hid/hid-logitech-hidpp.c | 43 ++++++++++++++++---------------- > 1 file changed, 21 insertions(+), 22 deletions(-) > > diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c > index bb063e7d48df..39a5ee0aaab0 100644 > --- a/drivers/hid/hid-logitech-hidpp.c > +++ b/drivers/hid/hid-logitech-hidpp.c > @@ -1256,36 +1256,35 @@ static int hidpp20_battery_map_status_voltage(u8 data[3], int *voltage, > { > int status; > > - long charge_sts = (long)data[2]; > + long flags = (long) data[2]; > > - *level = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; > - switch (data[2] & 0xe0) { > - case 0x00: > - status = POWER_SUPPLY_STATUS_CHARGING; > - break; > - case 0x20: > - status = POWER_SUPPLY_STATUS_FULL; > - *level = POWER_SUPPLY_CAPACITY_LEVEL_FULL; > - break; > - case 0x40: > + if (flags & 0x80) > + switch (flags & 0x07) { > + case 0: > + status = POWER_SUPPLY_STATUS_CHARGING; > + break; > + case 1: > + status = POWER_SUPPLY_STATUS_FULL; > + *level = POWER_SUPPLY_CAPACITY_LEVEL_FULL; > + break; > + case 2: > + status = POWER_SUPPLY_STATUS_NOT_CHARGING; > + break; > + default: > + status = POWER_SUPPLY_STATUS_UNKNOWN; > + break; > + } > + else > status = POWER_SUPPLY_STATUS_DISCHARGING; > - break; > - case 0xe0: > - status = POWER_SUPPLY_STATUS_NOT_CHARGING; > - break; > - default: > - status = POWER_SUPPLY_STATUS_UNKNOWN; > - } > > *charge_type = POWER_SUPPLY_CHARGE_TYPE_STANDARD; > - if (test_bit(3, &charge_sts)) { > + if (test_bit(3, &flags)) { > *charge_type = POWER_SUPPLY_CHARGE_TYPE_FAST; > } > - if (test_bit(4, &charge_sts)) { > + if (test_bit(4, &flags)) { > *charge_type = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; > } > - > - if (test_bit(5, &charge_sts)) { > + if (test_bit(5, &flags)) { > *level = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; > } > > Tested-by: Pedro Vanzella Reviewed-by: Pedro Vanzella