drivers/platform/x86/barco-p50-gpio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
The GPIO get callback is expected to return 0 or 1 (or a negative error
code). Ensure that the value returned by p50_gpio_get() is normalized
to the [0, 1] range.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/platform/x86/barco-p50-gpio.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/barco-p50-gpio.c b/drivers/platform/x86/barco-p50-gpio.c
index 6f13e81f98fb..360ffd8505d6 100644
--- a/drivers/platform/x86/barco-p50-gpio.c
+++ b/drivers/platform/x86/barco-p50-gpio.c
@@ -275,8 +275,11 @@ static int p50_gpio_get(struct gpio_chip *gc, unsigned int offset)
mutex_lock(&p50->lock);
ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
- if (ret == 0)
+ if (ret == 0) {
ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
+ if (ret >= 0)
+ ret = !!ret;
+ }
mutex_unlock(&p50->lock);
--
2.53.0.335.g19a08e0c02-goog
--
Dmitry
On Wed, 18 Feb 2026, Dmitry Torokhov wrote:
> The GPIO get callback is expected to return 0 or 1 (or a negative error
> code). Ensure that the value returned by p50_gpio_get() is normalized
> to the [0, 1] range.
>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
> drivers/platform/x86/barco-p50-gpio.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/platform/x86/barco-p50-gpio.c b/drivers/platform/x86/barco-p50-gpio.c
> index 6f13e81f98fb..360ffd8505d6 100644
> --- a/drivers/platform/x86/barco-p50-gpio.c
> +++ b/drivers/platform/x86/barco-p50-gpio.c
> @@ -275,8 +275,11 @@ static int p50_gpio_get(struct gpio_chip *gc, unsigned int offset)
> mutex_lock(&p50->lock);
>
> ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
> - if (ret == 0)
> + if (ret == 0) {
> ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
> + if (ret >= 0)
> + ret = !!ret;
> + }
>
> mutex_unlock(&p50->lock);
A simpler flow would be preferrable over all that nesting. Is this
logically correct:
guard(mutex)(p50->lock);
ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
if (ret < 0)
return ret;
ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
if (ret < 0)
return ret;
return !!ret;
?
--
i.
On Mon, Feb 23, 2026 at 04:11:10PM +0200, Ilpo Järvinen wrote:
> On Wed, 18 Feb 2026, Dmitry Torokhov wrote:
>
> > The GPIO get callback is expected to return 0 or 1 (or a negative error
> > code). Ensure that the value returned by p50_gpio_get() is normalized
> > to the [0, 1] range.
> >
> > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > ---
> > drivers/platform/x86/barco-p50-gpio.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/platform/x86/barco-p50-gpio.c b/drivers/platform/x86/barco-p50-gpio.c
> > index 6f13e81f98fb..360ffd8505d6 100644
> > --- a/drivers/platform/x86/barco-p50-gpio.c
> > +++ b/drivers/platform/x86/barco-p50-gpio.c
> > @@ -275,8 +275,11 @@ static int p50_gpio_get(struct gpio_chip *gc, unsigned int offset)
> > mutex_lock(&p50->lock);
> >
> > ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
> > - if (ret == 0)
> > + if (ret == 0) {
> > ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
> > + if (ret >= 0)
> > + ret = !!ret;
> > + }
> >
> > mutex_unlock(&p50->lock);
>
> A simpler flow would be preferrable over all that nesting. Is this
> logically correct:
>
> guard(mutex)(p50->lock);
> ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
> if (ret < 0)
> return ret;
>
> ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
> if (ret < 0)
> return ret;
>
> return !!ret;
Yes, but I wanted to minimize the amount of change. Maybe I should send
a followup patch converting to guard()?
Thanks.
--
Dmitry
On Mon, 9 Mar 2026, Dmitry Torokhov wrote:
> On Mon, Feb 23, 2026 at 04:11:10PM +0200, Ilpo Järvinen wrote:
> > On Wed, 18 Feb 2026, Dmitry Torokhov wrote:
> >
> > > The GPIO get callback is expected to return 0 or 1 (or a negative error
> > > code). Ensure that the value returned by p50_gpio_get() is normalized
> > > to the [0, 1] range.
> > >
> > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > > ---
> > > drivers/platform/x86/barco-p50-gpio.c | 5 ++++-
> > > 1 file changed, 4 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/platform/x86/barco-p50-gpio.c b/drivers/platform/x86/barco-p50-gpio.c
> > > index 6f13e81f98fb..360ffd8505d6 100644
> > > --- a/drivers/platform/x86/barco-p50-gpio.c
> > > +++ b/drivers/platform/x86/barco-p50-gpio.c
> > > @@ -275,8 +275,11 @@ static int p50_gpio_get(struct gpio_chip *gc, unsigned int offset)
> > > mutex_lock(&p50->lock);
> > >
> > > ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
> > > - if (ret == 0)
> > > + if (ret == 0) {
> > > ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
> > > + if (ret >= 0)
> > > + ret = !!ret;
> > > + }
> > >
> > > mutex_unlock(&p50->lock);
> >
> > A simpler flow would be preferrable over all that nesting. Is this
> > logically correct:
> >
> > guard(mutex)(p50->lock);
> > ret = p50_send_mbox_cmd(p50, P50_MBOX_CMD_READ_GPIO, gpio_params[offset], 0);
> > if (ret < 0)
> > return ret;
> >
> > ret = p50_read_mbox_reg(p50, P50_MBOX_REG_DATA);
> > if (ret < 0)
> > return ret;
> >
> > return !!ret;
>
> Yes, but I wanted to minimize the amount of change. Maybe I should send
> a followup patch converting to guard()?
Please do. I don't want to be adding into complexity when we've a nice
solution to simplify it using guard().
--
i.
On Wed, Feb 18, 2026 at 9:59 PM Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote: > The GPIO get callback is expected to return 0 or 1 (or a negative error > code). Ensure that the value returned by p50_gpio_get() is normalized > to the [0, 1] range. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Linus Walleij <linusw@kernel.org> Yours, Linus Walleij
© 2016 - 2026 Red Hat, Inc.