Re: [PATCH RESEND 12/13] platform/chrome: cros_ec_lightbar - Add userspace lightbar control bit to EC

From: Benson Leung
Date: Fri Jun 23 2017 - 18:12:48 EST


Hi Enric,

Looks good.

On 05/16/2017 09:13 AM, Enric Balletbo i Serra wrote:
> From: Eric Caruso <ejcaruso@xxxxxxxxxxxx>
>
> Some devices might want to turn off the lightbar if e.g. the
> system turns the screen off due to idleness. This prevents the
> kernel from going through its normal suspend/resume pathways.
>
> Signed-off-by: Eric Caruso <ejcaruso@xxxxxxxxxxxx>
> Signed-off-by: Guenter Roeck <groeck@xxxxxxxxxxxx>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@xxxxxxxxxxxxx>

Signed-off-by: Benson Leung <bleung@xxxxxxxxxxxx>

Applied.

> ---
> drivers/platform/chrome/cros_ec_lightbar.c | 38 ++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/drivers/platform/chrome/cros_ec_lightbar.c b/drivers/platform/chrome/cros_ec_lightbar.c
> index 4df379d..e570c1e 100644
> --- a/drivers/platform/chrome/cros_ec_lightbar.c
> +++ b/drivers/platform/chrome/cros_ec_lightbar.c
> @@ -38,6 +38,12 @@
> /* Rate-limit the lightbar interface to prevent DoS. */
> static unsigned long lb_interval_jiffies = 50 * HZ / 1000;
>
> +/*
> + * Whether or not we have given userspace control of the lightbar.
> + * If this is true, we won't do anything during suspend/resume.
> + */
> +static bool userspace_control;
> +
> static ssize_t interval_msec_show(struct device *dev,
> struct device_attribute *attr, char *buf)
> {
> @@ -407,11 +413,17 @@ int lb_manual_suspend_ctrl(struct cros_ec_dev *ec, uint8_t enable)
>
> int lb_suspend(struct cros_ec_dev *ec)
> {
> + if (userspace_control)
> + return 0;
> +
> return lb_send_empty_cmd(ec, LIGHTBAR_CMD_SUSPEND);
> }
>
> int lb_resume(struct cros_ec_dev *ec)
> {
> + if (userspace_control)
> + return 0;
> +
> return lb_send_empty_cmd(ec, LIGHTBAR_CMD_RESUME);
> }
>
> @@ -528,6 +540,30 @@ static ssize_t program_store(struct device *dev, struct device_attribute *attr,
> return ret;
> }
>
> +static ssize_t userspace_control_show(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + return scnprintf(buf, PAGE_SIZE, "%d\n", userspace_control);
> +}
> +
> +static ssize_t userspace_control_store(struct device *dev,
> + struct device_attribute *attr,
> + const char *buf,
> + size_t count)
> +{
> + bool enable;
> + int ret;
> +
> + ret = strtobool(buf, &enable);
> + if (ret < 0)
> + return ret;
> +
> + userspace_control = enable;
> +
> + return count;
> +}
> +
> /* Module initialization */
>
> static DEVICE_ATTR_RW(interval_msec);
> @@ -536,6 +572,7 @@ static DEVICE_ATTR_WO(brightness);
> static DEVICE_ATTR_WO(led_rgb);
> static DEVICE_ATTR_RW(sequence);
> static DEVICE_ATTR_WO(program);
> +static DEVICE_ATTR_RW(userspace_control);
>
> static struct attribute *__lb_cmds_attrs[] = {
> &dev_attr_interval_msec.attr,
> @@ -544,6 +581,7 @@ static struct attribute *__lb_cmds_attrs[] = {
> &dev_attr_led_rgb.attr,
> &dev_attr_sequence.attr,
> &dev_attr_program.attr,
> + &dev_attr_userspace_control.attr,
> NULL,
> };
>
>

--
Benson Leung
Staff Software Engineer
Chrome OS Kernel
Google Inc.
bleung@xxxxxxxxxx
Chromium OS Project
bleung@xxxxxxxxxxxx

Attachment: signature.asc
Description: OpenPGP digital signature