2020-01-07 18:26:48

by Daniel Campello

[permalink] [raw]
Subject: [PATCH] platform/chrome: wilco_ec: Fix keyboard backlight probing

The EC on the Wilco platform responds with 0xFF to commands related to
the keyboard backlight on the absence of a keyboard backlight module.
This change allows the EC driver to continue loading even if the
backlight module is not present.

Signed-off-by: Daniel Campello <[email protected]>
---

.../platform/chrome/wilco_ec/keyboard_leds.c | 28 +++++++++++++------
1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/platform/chrome/wilco_ec/keyboard_leds.c b/drivers/platform/chrome/wilco_ec/keyboard_leds.c
index bb0edf51dfda..5731d1b60e28 100644
--- a/drivers/platform/chrome/wilco_ec/keyboard_leds.c
+++ b/drivers/platform/chrome/wilco_ec/keyboard_leds.c
@@ -73,13 +73,6 @@ static int send_kbbl_msg(struct wilco_ec_device *ec,
return ret;
}

- if (response->status) {
- dev_err(ec->dev,
- "EC reported failure sending keyboard LEDs command: %d",
- response->status);
- return -EIO;
- }
-
return 0;
}

@@ -87,6 +80,7 @@ static int set_kbbl(struct wilco_ec_device *ec, enum led_brightness brightness)
{
struct wilco_keyboard_leds_msg request;
struct wilco_keyboard_leds_msg response;
+ int ret;

memset(&request, 0, sizeof(request));
request.command = WILCO_EC_COMMAND_KBBL;
@@ -94,7 +88,18 @@ static int set_kbbl(struct wilco_ec_device *ec, enum led_brightness brightness)
request.mode = WILCO_KBBL_MODE_FLAG_PWM;
request.percent = brightness;

- return send_kbbl_msg(ec, &request, &response);
+ ret = send_kbbl_msg(ec, &request, &response);
+ if (ret < 0)
+ return ret;
+
+ if (response.status) {
+ dev_err(ec->dev,
+ "EC reported failure sending keyboard LEDs command: %d",
+ response.status);
+ return -EIO;
+ }
+
+ return 0;
}

static int kbbl_exist(struct wilco_ec_device *ec, bool *exists)
@@ -140,6 +145,13 @@ static int kbbl_init(struct wilco_ec_device *ec)
if (ret < 0)
return ret;

+ if (response.status) {
+ dev_err(ec->dev,
+ "EC reported failure sending keyboard LEDs command: %d",
+ response.status);
+ return -EIO;
+ }
+
if (response.mode & WILCO_KBBL_MODE_FLAG_PWM)
return response.percent;

--
2.24.1.735.g03f4e72817-goog


2020-01-08 11:19:31

by Enric Balletbo i Serra

[permalink] [raw]
Subject: Re: [PATCH] platform/chrome: wilco_ec: Fix keyboard backlight probing

Hi Daniel,

Many thanks for sending the patch upstream.

On 7/1/20 19:24, Daniel Campello wrote:
> The EC on the Wilco platform responds with 0xFF to commands related to
> the keyboard backlight on the absence of a keyboard backlight module.
> This change allows the EC driver to continue loading even if the
> backlight module is not present.
>

Could you explain a bit more which is the problem you're trying to solve? I am
not sure I understand it, isn't the kbbl_exist call for that purpose? (in
absence of the keyboard backligh module just don't init the device?)

Thanks,
Enric


> Signed-off-by: Daniel Campello <[email protected]>
> ---
>
> .../platform/chrome/wilco_ec/keyboard_leds.c | 28 +++++++++++++------
> 1 file changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/platform/chrome/wilco_ec/keyboard_leds.c b/drivers/platform/chrome/wilco_ec/keyboard_leds.c
> index bb0edf51dfda..5731d1b60e28 100644
> --- a/drivers/platform/chrome/wilco_ec/keyboard_leds.c
> +++ b/drivers/platform/chrome/wilco_ec/keyboard_leds.c
> @@ -73,13 +73,6 @@ static int send_kbbl_msg(struct wilco_ec_device *ec,
> return ret;
> }
>
> - if (response->status) {
> - dev_err(ec->dev,
> - "EC reported failure sending keyboard LEDs command: %d",
> - response->status);
> - return -EIO;
> - }
> -
> return 0;
> }
>
> @@ -87,6 +80,7 @@ static int set_kbbl(struct wilco_ec_device *ec, enum led_brightness brightness)
> {
> struct wilco_keyboard_leds_msg request;
> struct wilco_keyboard_leds_msg response;
> + int ret;
>
> memset(&request, 0, sizeof(request));
> request.command = WILCO_EC_COMMAND_KBBL;
> @@ -94,7 +88,18 @@ static int set_kbbl(struct wilco_ec_device *ec, enum led_brightness brightness)
> request.mode = WILCO_KBBL_MODE_FLAG_PWM;
> request.percent = brightness;
>
> - return send_kbbl_msg(ec, &request, &response);
> + ret = send_kbbl_msg(ec, &request, &response);
> + if (ret < 0)
> + return ret;
> +
> + if (response.status) {
> + dev_err(ec->dev,
> + "EC reported failure sending keyboard LEDs command: %d",
> + response.status);
> + return -EIO;
> + }
> +
> + return 0;
> }
>
> static int kbbl_exist(struct wilco_ec_device *ec, bool *exists)
> @@ -140,6 +145,13 @@ static int kbbl_init(struct wilco_ec_device *ec)
> if (ret < 0)
> return ret;
>
> + if (response.status) {
> + dev_err(ec->dev,
> + "EC reported failure sending keyboard LEDs command: %d",
> + response.status);
> + return -EIO;
> + }
> +
> if (response.mode & WILCO_KBBL_MODE_FLAG_PWM)
> return response.percent;
>
> --
> 2.24.1.735.g03f4e72817-goog
>

2020-01-08 18:41:43

by Daniel Campello

[permalink] [raw]
Subject: Re: [PATCH] platform/chrome: wilco_ec: Fix keyboard backlight probing

Hi Enric,

On Wed, Jan 08, 2020 at 11:38:58AM +0100, Enric Balletbo i Serra wrote:
> Hi Daniel,
>
> Many thanks for sending the patch upstream.
>
> On 7/1/20 19:24, Daniel Campello wrote:
> > The EC on the Wilco platform responds with 0xFF to commands related to
> > the keyboard backlight on the absence of a keyboard backlight module.
> > This change allows the EC driver to continue loading even if the
> > backlight module is not present.
> >
>
> Could you explain a bit more which is the problem you're trying to solve? I am
> not sure I understand it, isn't the kbbl_exist call for that purpose? (in
> absence of the keyboard backligh module just don't init the device?)

kbbl_exists is intended to return a bool based on response.status !=
0xFF. Without this patch kbbl_exists will fail and return an -EIO
error on any value of response.status

>
> Thanks,
> Enric
>

2020-01-10 10:47:37

by Enric Balletbo i Serra

[permalink] [raw]
Subject: Re: [PATCH] platform/chrome: wilco_ec: Fix keyboard backlight probing

Hi Daniel,
On 8/1/20 16:59, Daniel Campello wrote:
> Hi Enric,
>
> On Wed, Jan 08, 2020 at 11:38:58AM +0100, Enric Balletbo i Serra wrote:
>> Hi Daniel,
>>
>> Many thanks for sending the patch upstream.
>>
>> On 7/1/20 19:24, Daniel Campello wrote:
>>> The EC on the Wilco platform responds with 0xFF to commands related to
>>> the keyboard backlight on the absence of a keyboard backlight module.
>>> This change allows the EC driver to continue loading even if the
>>> backlight module is not present.
>>>
>>
>> Could you explain a bit more which is the problem you're trying to solve? I am
>> not sure I understand it, isn't the kbbl_exist call for that purpose? (in
>> absence of the keyboard backligh module just don't init the device?)
>
> kbbl_exists is intended to return a bool based on response.status !=
> 0xFF. Without this patch kbbl_exists will fail and return an -EIO
> error on any value of response.status
>

Thanks for the explanation I understand now what is happening. I added the Fixed
tag and queued as a fix for chrome-platform-5.5

Thanks,
Enric

>>
>> Thanks,
>> Enric
>>