All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Werner <andy@wernerandy.de>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: linux-gpio@vger.kernel.org, Alexandre Courbot <acourbot@nvidia.com>
Subject: Re: [PATCH] gpio: menz127: use the new open drain callback
Date: Wed, 11 May 2016 19:39:55 +0200	[thread overview]
Message-ID: <20160511173955.GA3574@linux-ah44> (raw)
In-Reply-To: <1460231815-8635-1-git-send-email-linus.walleij@linaro.org>

On Sat, Apr 09, 2016 at 09:56:55PM +0200, Linus Walleij wrote:
> The menz127 driver tries to support open drain by detecting it
> at request time. However: without the new callbacks from the
> gpiolib it is not really working: the core will still just emulate
> the open drain mode by switching the line to an input.
> 
> By adding a hook into the new .set_single_ended() call rather than
> trying to autodetect at request() time, proper open drain can be
> supported.
> 
> Cc: Andreas Werner <andy@wernerandy.de>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/gpio/gpio-menz127.c | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-menz127.c b/drivers/gpio/gpio-menz127.c
> index 8c1ab8e1974f..334fe270dcf1 100644
> --- a/drivers/gpio/gpio-menz127.c
> +++ b/drivers/gpio/gpio-menz127.c
> @@ -88,21 +88,25 @@ static int men_z127_debounce(struct gpio_chip *gc, unsigned gpio,
>  	return 0;
>  }
>  
> -static int men_z127_request(struct gpio_chip *gc, unsigned gpio_pin)
> +static int men_z127_set_single_ended(struct gpio_chip *gc,
> +				     unsigned offset,
> +				     enum single_ended_mode mode)
>  {
>  	struct men_z127_gpio *priv = gpiochip_get_data(gc);
>  	u32 od_en;
>  
> -	if (gpio_pin >= gc->ngpio)
> -		return -EINVAL;
> +	if (mode != LINE_MODE_OPEN_DRAIN &&
> +	    mode != LINE_MODE_PUSH_PULL)
> +		return -ENOTSUPP;
>  
>  	spin_lock(&priv->lock);
>  	od_en = readl(priv->reg_base + MEN_Z127_ODER);
>  
> -	if (gpiochip_line_is_open_drain(gc, gpio_pin))
> -		od_en |= BIT(gpio_pin);
> +	if (mode == LINE_MODE_OPEN_DRAIN)
> +		od_en |= BIT(offset);
>  	else
> -		od_en &= ~BIT(gpio_pin);
> +		/* Implicitly LINE_MODE_PUSH_PULL */
> +		od_en &= ~BIT(offset);
>  
>  	writel(od_en, priv->reg_base + MEN_Z127_ODER);
>  	spin_unlock(&priv->lock);
> @@ -147,7 +151,7 @@ static int men_z127_probe(struct mcb_device *mdev,
>  		goto err_unmap;
>  
>  	men_z127_gpio->gc.set_debounce = men_z127_debounce;
> -	men_z127_gpio->gc.request = men_z127_request;
> +	men_z127_gpio->gc.set_single_ended = men_z127_set_single_ended;
>  
>  	ret = gpiochip_add_data(&men_z127_gpio->gc, men_z127_gpio);
>  	if (ret) {
> -- 
> 2.4.3
> 

Hi Linus,
sorry for the late answer.

I will try to get the hardware and will test the patch.

I think this is exactly what I need to support the "real" open drain
mode.

Regards
Andy


      reply	other threads:[~2016-05-11 17:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-09 19:56 [PATCH] gpio: menz127: use the new open drain callback Linus Walleij
2016-05-11 17:39 ` Andreas Werner [this message]

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=20160511173955.GA3574@linux-ah44 \
    --to=andy@wernerandy.de \
    --cc=acourbot@nvidia.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.