From: k00278426 <kong.kongxinwei@hisilicon.com>
To: Haojian Zhuang <haojian.zhuang@linaro.org>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
Linus Walleij <linus.walleij@linaro.org>
Subject: Re: [PATCH] gpio: pl061: hook request if gpio-ranges avaiable
Date: Thu, 9 Oct 2014 19:15:52 +0800 [thread overview]
Message-ID: <54366E68.5050804@hisilicon.com> (raw)
In-Reply-To: <CAD6h2NRNCwFsQBF6z3ZrP4X6_F9cjBES4X_kYi-6Oa0vwYsp2w@mail.gmail.com>
hi jian
In the afternoon,we submit a patch about gpio-ranges item,we slove this issue by setting the .request pointer which is null. before coming true the
pl061_gpio_request function, we slove the issue.you can study it.
Best Regards
xinwei
On 2014/10/9 18:56, Haojian Zhuang wrote:
> Hi Xinwei,
>
> Do I miss anything? At here, .request pointer isn't null. It always
> points to pl061_gpio_request().
>
> Best Regards
> Haojian
>
> On 9 October 2014 18:38, k00278426 <kong.kongxinwei@hisilicon.com> wrote:
>> On 2014/10/9 17:42, Haojian Zhuang wrote:
>>
>> gpio-ranges property could binds gpio to pinctrl. But there may be some
>> gpios without pinctrl operation. So check whether gpio-ranges property
>> exists in device node first.
>>
>> Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
>> ---
>> drivers/gpio/gpio-pl061.c | 21 +++++++++++++++------
>> 1 file changed, 15 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
>> index 84b49cf..d1813f0 100644
>> --- a/drivers/gpio/gpio-pl061.c
>> +++ b/drivers/gpio/gpio-pl061.c
>> @@ -52,28 +52,34 @@ struct pl061_gpio {
>>
>> void __iomem *base;
>> struct gpio_chip gc;
>> + int uses_pinctrl;
>>
>> #ifdef CONFIG_PM
>> struct pl061_context_save_regs csave_regs;
>> #endif
>> };
>>
>> -static int pl061_gpio_request(struct gpio_chip *chip, unsigned offset)
>> +static int pl061_gpio_request(struct gpio_chip *gc, unsigned offset)
>> {
>> /*
>> * Map back to global GPIO space and request muxing, the direction
>> * parameter does not matter for this controller.
>> */
>> - int gpio = chip->base + offset;
>> + struct pl061_gpio *chip = container_of(gc, struct pl061_gpio, gc);
>> + int gpio = gc->base + offset;
>>
>> - return pinctrl_request_gpio(gpio);
>> + if (chip->uses_pinctrl)
>> + return pinctrl_request_gpio(gpio);
>> + return 0;
>> }
>>
>> In the request_gpio process,if the .request point is null,the return
>> of request_gpio process will value 0. the request_gpio process will not
>> enter the pintrcl system.
>> so the request_gpio have deal with the "if" branch.
>>
>>
>> -static void pl061_gpio_free(struct gpio_chip *chip, unsigned offset)
>> +static void pl061_gpio_free(struct gpio_chip *gc, unsigned offset)
>> {
>> - int gpio = chip->base + offset;
>> + struct pl061_gpio *chip = container_of(gc, struct pl061_gpio, gc);
>> + int gpio = gc->base + offset;
>>
>> - pinctrl_free_gpio(gpio);
>> + if (chip->uses_pinctrl)
>> + pinctrl_free_gpio(gpio);
>> }
>>
>> static int pl061_direction_input(struct gpio_chip *gc, unsigned offset)
>> @@ -264,6 +270,9 @@ static int pl061_probe(struct amba_device *adev, const
>> struct amba_id *id)
>>
>> spin_lock_init(&chip->lock);
>>
>> + /* Hook the request()/free() for pinctrl operation */
>> + if (of_property_read_bool(dev->of_node, "gpio-ranges"))
>> + chip->uses_pinctrl = true;
>> chip->gc.request = pl061_gpio_request;
>> chip->gc.free = pl061_gpio_free;
>> chip->gc.direction_input = pl061_direction_input;
>>
>>
> .
>
WARNING: multiple messages have this Message-ID (diff)
From: kong.kongxinwei@hisilicon.com (k00278426)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] gpio: pl061: hook request if gpio-ranges avaiable
Date: Thu, 9 Oct 2014 19:15:52 +0800 [thread overview]
Message-ID: <54366E68.5050804@hisilicon.com> (raw)
In-Reply-To: <CAD6h2NRNCwFsQBF6z3ZrP4X6_F9cjBES4X_kYi-6Oa0vwYsp2w@mail.gmail.com>
hi jian
In the afternoon,we submit a patch about gpio-ranges item,we slove this issue by setting the .request pointer which is null. before coming true the
pl061_gpio_request function, we slove the issue.you can study it.
Best Regards
xinwei
On 2014/10/9 18:56, Haojian Zhuang wrote:
> Hi Xinwei,
>
> Do I miss anything? At here, .request pointer isn't null. It always
> points to pl061_gpio_request().
>
> Best Regards
> Haojian
>
> On 9 October 2014 18:38, k00278426 <kong.kongxinwei@hisilicon.com> wrote:
>> On 2014/10/9 17:42, Haojian Zhuang wrote:
>>
>> gpio-ranges property could binds gpio to pinctrl. But there may be some
>> gpios without pinctrl operation. So check whether gpio-ranges property
>> exists in device node first.
>>
>> Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
>> ---
>> drivers/gpio/gpio-pl061.c | 21 +++++++++++++++------
>> 1 file changed, 15 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
>> index 84b49cf..d1813f0 100644
>> --- a/drivers/gpio/gpio-pl061.c
>> +++ b/drivers/gpio/gpio-pl061.c
>> @@ -52,28 +52,34 @@ struct pl061_gpio {
>>
>> void __iomem *base;
>> struct gpio_chip gc;
>> + int uses_pinctrl;
>>
>> #ifdef CONFIG_PM
>> struct pl061_context_save_regs csave_regs;
>> #endif
>> };
>>
>> -static int pl061_gpio_request(struct gpio_chip *chip, unsigned offset)
>> +static int pl061_gpio_request(struct gpio_chip *gc, unsigned offset)
>> {
>> /*
>> * Map back to global GPIO space and request muxing, the direction
>> * parameter does not matter for this controller.
>> */
>> - int gpio = chip->base + offset;
>> + struct pl061_gpio *chip = container_of(gc, struct pl061_gpio, gc);
>> + int gpio = gc->base + offset;
>>
>> - return pinctrl_request_gpio(gpio);
>> + if (chip->uses_pinctrl)
>> + return pinctrl_request_gpio(gpio);
>> + return 0;
>> }
>>
>> In the request_gpio process,if the .request point is null,the return
>> of request_gpio process will value 0. the request_gpio process will not
>> enter the pintrcl system.
>> so the request_gpio have deal with the "if" branch.
>>
>>
>> -static void pl061_gpio_free(struct gpio_chip *chip, unsigned offset)
>> +static void pl061_gpio_free(struct gpio_chip *gc, unsigned offset)
>> {
>> - int gpio = chip->base + offset;
>> + struct pl061_gpio *chip = container_of(gc, struct pl061_gpio, gc);
>> + int gpio = gc->base + offset;
>>
>> - pinctrl_free_gpio(gpio);
>> + if (chip->uses_pinctrl)
>> + pinctrl_free_gpio(gpio);
>> }
>>
>> static int pl061_direction_input(struct gpio_chip *gc, unsigned offset)
>> @@ -264,6 +270,9 @@ static int pl061_probe(struct amba_device *adev, const
>> struct amba_id *id)
>>
>> spin_lock_init(&chip->lock);
>>
>> + /* Hook the request()/free() for pinctrl operation */
>> + if (of_property_read_bool(dev->of_node, "gpio-ranges"))
>> + chip->uses_pinctrl = true;
>> chip->gc.request = pl061_gpio_request;
>> chip->gc.free = pl061_gpio_free;
>> chip->gc.direction_input = pl061_direction_input;
>>
>>
> .
>
next prev parent reply other threads:[~2014-10-09 11:16 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-09 9:42 [PATCH] gpio: pl061: hook request if gpio-ranges avaiable Haojian Zhuang
2014-10-09 9:42 ` Haojian Zhuang
[not found] ` <543665A4.6000404@hisilicon.com>
2014-10-09 10:56 ` Haojian Zhuang
2014-10-09 10:56 ` Haojian Zhuang
2014-10-09 11:15 ` k00278426 [this message]
2014-10-09 11:15 ` k00278426
2014-10-09 11:23 ` Haojian Zhuang
2014-10-09 11:23 ` Haojian Zhuang
2014-10-17 9:26 ` Alexandre Courbot
2014-10-17 9:26 ` Alexandre Courbot
-- strict thread matches above, loose matches on Subject: below --
2014-11-21 6:43 Yunlei He
2014-11-28 7:53 ` Alexandre Courbot
2014-11-28 12:26 ` Linus Walleij
2014-11-28 17:00 ` Haojian Zhuang
2014-12-01 13:59 ` Linus Walleij
2014-12-02 7:39 ` Xinwei Kong
2014-12-02 1:39 ` He YunLei
2013-10-23 6:36 Haojian Zhuang
2013-10-23 6:36 ` Haojian Zhuang
2013-10-28 22:55 ` Linus Walleij
2013-10-28 22:55 ` Linus Walleij
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=54366E68.5050804@hisilicon.com \
--to=kong.kongxinwei@hisilicon.com \
--cc=haojian.zhuang@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.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.