From: Gregory CLEMENT <gregory.clement@free-electrons.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Andrew Lunn <andrew@lunn.ch>, Jason Cooper <jason@lakedaemon.net>,
Hua Jing <jinghua@marvell.com>, Omri Itach <omrii@marvell.com>,
Nadav Haklai <nadavh@marvell.com>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
Victor Gu <xigu@marvell.com>, Terry Zhou <bjzhou@marvell.com>,
Marcin Wojtas <mw@semihalf.com>,
Wilson Ding <dingwei@marvell.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Subject: Re: [PATCH 3/6] pinctrl: armada-37xx: Add gpio support
Date: Wed, 22 Mar 2017 12:54:50 +0100 [thread overview]
Message-ID: <874lylfrw5.fsf@free-electrons.com> (raw)
In-Reply-To: <CACRpkdY_68=5oBN3TLs_ohc0gc2=yiG3qizg7MGh4F7Z+-ZzSg@mail.gmail.com> (Linus Walleij's message of "Fri, 30 Dec 2016 09:51:51 +0100")
Hi Linus,
On ven., déc. 30 2016, Linus Walleij <linus.walleij@linaro.org> wrote:
> On Thu, Dec 22, 2016 at 6:24 PM, Gregory CLEMENT
> <gregory.clement@free-electrons.com> wrote:
>
>> GPIO management is pretty simple and is part of the same IP than the pin
>> controller for the Armada 37xx SoCs. This patch adds the GPIO support to
>> the pinctrl-armada-37xx.c file, it also allows sharing common functions
>> between the gpiolib and the pinctrl drivers.
>>
>> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
>
> Some remarks:
>
>> +static int armada_37xx_gpio_get_direction(struct gpio_chip *chip,
>> + unsigned int offset)
>> +{
>> + struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
>> + unsigned int reg = OUTPUT_EN;
>> + unsigned int val, mask;
>> +
>> + if (offset >= GPIO_PER_REG) {
>> + offset -= GPIO_PER_REG;
>> + reg += sizeof(u32);
>> + }
>
> Add a comment saying we never have more than two registers?
> If there would be three registers this would fail, right?
I added the comment
>
>> + mask = BIT(offset);
>> +
>> + regmap_read(info->regmap, reg, &val);
>>
>> + return (val & mask) == 0;
>
> Use this:
>
> return !(val & mask);
done but I could tou explain the advantage of doing it?
>
>> +static int armada_37xx_gpio_get(struct gpio_chip *chip, unsigned int offset)
>> +{
>> + struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
>> + unsigned int reg = INPUT_VAL;
>> + unsigned int val, mask;
>> +
>> + if (offset >= GPIO_PER_REG) {
>> + offset -= GPIO_PER_REG;
>> + reg += sizeof(u32);
>> + }
>> + mask = BIT(offset);
>
> This code is repeating. Break out a static (inline?) helper to do
> this.
done
>
>> +static int armada_37xx_gpiolib_register(struct platform_device *pdev,
>> + struct armada_37xx_pinctrl *info)
>
> Nit: gpiochip_register or so is more to the point.
>
>> + ret = gpiochip_add_pin_range(&info->gpio_chip, dev_name(dev), 0,
>> + pinbase, info->data->nr_pins);
>> + if (ret)
>> + return ret;
>
> Why do you do this?
>
> Why not just put the ranges into the device tree? We already support
> this in the gpiolib core and it is helpful.
>
> See Documentation/devicetree/bindings/gpio/gpio.txt
> and other DTS files for gpio-ranges.
Following your review, I tried to use it but it didn't work for
me. When the second pin controller was probed then there was collision
for the gpio number. I tried several combination without any luck.
So for now I left it aside.
I can show you the errors message I get and the binding I used if you
are interested.
Thanks,
Gregory
--
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: gregory.clement@free-electrons.com (Gregory CLEMENT)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/6] pinctrl: armada-37xx: Add gpio support
Date: Wed, 22 Mar 2017 12:54:50 +0100 [thread overview]
Message-ID: <874lylfrw5.fsf@free-electrons.com> (raw)
In-Reply-To: <CACRpkdY_68=5oBN3TLs_ohc0gc2=yiG3qizg7MGh4F7Z+-ZzSg@mail.gmail.com> (Linus Walleij's message of "Fri, 30 Dec 2016 09:51:51 +0100")
Hi Linus,
On ven., d?c. 30 2016, Linus Walleij <linus.walleij@linaro.org> wrote:
> On Thu, Dec 22, 2016 at 6:24 PM, Gregory CLEMENT
> <gregory.clement@free-electrons.com> wrote:
>
>> GPIO management is pretty simple and is part of the same IP than the pin
>> controller for the Armada 37xx SoCs. This patch adds the GPIO support to
>> the pinctrl-armada-37xx.c file, it also allows sharing common functions
>> between the gpiolib and the pinctrl drivers.
>>
>> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
>
> Some remarks:
>
>> +static int armada_37xx_gpio_get_direction(struct gpio_chip *chip,
>> + unsigned int offset)
>> +{
>> + struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
>> + unsigned int reg = OUTPUT_EN;
>> + unsigned int val, mask;
>> +
>> + if (offset >= GPIO_PER_REG) {
>> + offset -= GPIO_PER_REG;
>> + reg += sizeof(u32);
>> + }
>
> Add a comment saying we never have more than two registers?
> If there would be three registers this would fail, right?
I added the comment
>
>> + mask = BIT(offset);
>> +
>> + regmap_read(info->regmap, reg, &val);
>>
>> + return (val & mask) == 0;
>
> Use this:
>
> return !(val & mask);
done but I could tou explain the advantage of doing it?
>
>> +static int armada_37xx_gpio_get(struct gpio_chip *chip, unsigned int offset)
>> +{
>> + struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
>> + unsigned int reg = INPUT_VAL;
>> + unsigned int val, mask;
>> +
>> + if (offset >= GPIO_PER_REG) {
>> + offset -= GPIO_PER_REG;
>> + reg += sizeof(u32);
>> + }
>> + mask = BIT(offset);
>
> This code is repeating. Break out a static (inline?) helper to do
> this.
done
>
>> +static int armada_37xx_gpiolib_register(struct platform_device *pdev,
>> + struct armada_37xx_pinctrl *info)
>
> Nit: gpiochip_register or so is more to the point.
>
>> + ret = gpiochip_add_pin_range(&info->gpio_chip, dev_name(dev), 0,
>> + pinbase, info->data->nr_pins);
>> + if (ret)
>> + return ret;
>
> Why do you do this?
>
> Why not just put the ranges into the device tree? We already support
> this in the gpiolib core and it is helpful.
>
> See Documentation/devicetree/bindings/gpio/gpio.txt
> and other DTS files for gpio-ranges.
Following your review, I tried to use it but it didn't work for
me. When the second pin controller was probed then there was collision
for the gpio number. I tried several combination without any luck.
So for now I left it aside.
I can show you the errors message I get and the binding I used if you
are interested.
Thanks,
Gregory
--
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
next prev parent reply other threads:[~2017-03-22 11:54 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-22 17:24 [PATCH 0/6] Add support for pinctrl/gpio on Armada 37xx Gregory CLEMENT
2016-12-22 17:24 ` Gregory CLEMENT
2016-12-22 17:24 ` [PATCH 1/6] pinctrl: dt-bindings: Add documentation for Armada 37xx pin controllers Gregory CLEMENT
2016-12-22 17:24 ` Gregory CLEMENT
2016-12-30 8:35 ` Linus Walleij
2016-12-30 8:35 ` Linus Walleij
2017-03-22 11:42 ` Gregory CLEMENT
2017-03-22 11:42 ` Gregory CLEMENT
2016-12-22 17:24 ` [PATCH 2/6] pinctrl: armada-37xx: Add pin controller support for Armada 37xx Gregory CLEMENT
2016-12-22 17:24 ` Gregory CLEMENT
2016-12-30 8:44 ` Linus Walleij
2016-12-30 8:44 ` Linus Walleij
2017-03-22 11:47 ` Gregory CLEMENT
2017-03-22 11:47 ` Gregory CLEMENT
2016-12-22 17:24 ` [PATCH 3/6] pinctrl: armada-37xx: Add gpio support Gregory CLEMENT
2016-12-22 17:24 ` Gregory CLEMENT
2016-12-30 8:51 ` Linus Walleij
2016-12-30 8:51 ` Linus Walleij
2017-03-22 11:54 ` Gregory CLEMENT [this message]
2017-03-22 11:54 ` Gregory CLEMENT
2017-03-23 10:28 ` Linus Walleij
2017-03-23 10:28 ` Linus Walleij
2017-03-23 14:47 ` Gregory CLEMENT
2017-03-23 14:47 ` Gregory CLEMENT
2016-12-22 17:24 ` [PATCH 4/6] pinctrl: aramda-37xx: Add irqchip support Gregory CLEMENT
2016-12-22 17:24 ` Gregory CLEMENT
2016-12-30 8:58 ` Linus Walleij
2016-12-30 8:58 ` Linus Walleij
2017-03-22 12:02 ` Gregory CLEMENT
2017-03-22 12:02 ` Gregory CLEMENT
2017-03-23 10:36 ` Linus Walleij
2017-03-23 10:36 ` Linus Walleij
2017-03-23 14:41 ` Gregory CLEMENT
2017-03-23 14:41 ` Gregory CLEMENT
2016-12-22 17:25 ` [PATCH 5/6] ARM64: dts: marvell: Add pinctrl nodes for Armada 3700 Gregory CLEMENT
2016-12-22 17:25 ` Gregory CLEMENT
2016-12-22 17:25 ` [PATCH 6/6] ARM64: dts: marvell: armada37xx: add pinctrl definition Gregory CLEMENT
2016-12-22 17:25 ` Gregory CLEMENT
2016-12-30 9:00 ` Linus Walleij
2016-12-30 9:00 ` 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=874lylfrw5.fsf@free-electrons.com \
--to=gregory.clement@free-electrons.com \
--cc=andrew@lunn.ch \
--cc=bjzhou@marvell.com \
--cc=dingwei@marvell.com \
--cc=jason@lakedaemon.net \
--cc=jinghua@marvell.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=mw@semihalf.com \
--cc=nadavh@marvell.com \
--cc=omrii@marvell.com \
--cc=sebastian.hesselbarth@gmail.com \
--cc=thomas.petazzoni@free-electrons.com \
--cc=xigu@marvell.com \
/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.