From: Linus Walleij <linus.walleij@linaro.org>
To: Andrew Bresticker <abrestic@chromium.org>
Cc: Alexandre Courbot <gnurou@gmail.com>,
Ralf Baechle <ralf@linux-mips.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
Linux MIPS <linux-mips@linux-mips.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Ezequiel Garcia <ezequiel.garcia@imgtec.com>,
James Hartley <james.hartley@imgtec.com>,
James Hogan <james.hogan@imgtec.com>,
Damien Horsley <Damien.Horsley@imgtec.com>,
Govindraj Raja <govindraj.raja@imgtec.com>
Subject: Re: [PATCH 2/2] pinctrl: Add Pistachio SoC pin control driver
Date: Fri, 6 Mar 2015 12:55:12 +0100 [thread overview]
Message-ID: <CACRpkdbqioAreyDwM2JN87=gH20n1OkUXPjdkW885iDWUV1NnA@mail.gmail.com> (raw)
In-Reply-To: <1424744104-14151-3-git-send-email-abrestic@chromium.org>
On Tue, Feb 24, 2015 at 3:15 AM, Andrew Bresticker
<abrestic@chromium.org> wrote:
> Add a driver for the pin controller present on the IMG Pistachio SoC.
> This driver provides pinmux and pinconfig operations as well as GPIO
> and IRQ chips for the GPIO banks.
>
> Signed-off-by: Damien Horsley <Damien.Horsley@imgtec.com>
> Signed-off-by: Govindraj Raja <govindraj.raja@imgtec.com>
> Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
(...)
> +static inline u32 pctl_readl(struct pistachio_pinctrl *pctl, u32 reg)
> +{
> + return readl(pctl->base + reg);
> +}
> +
> +static inline void pctl_writel(struct pistachio_pinctrl *pctl, u32 val, u32 reg)
> +{
> + writel(val, pctl->base + reg);
> +}
> +
> +static inline u32 gpio_readl(struct pistachio_gpio_bank *bank, u32 reg)
> +{
> + return readl(bank->base + reg);
> +}
> +
> +static inline void gpio_writel(struct pistachio_gpio_bank *bank, u32 val,
> + u32 reg)
> +{
> + writel(val, bank->base + reg);
> +}
I don't see the point of these special readl/writel accessors. Just
use readl/writel
directly. Or consider readl/writel_relaxed() if MIPS has this.
> +static inline void gpio_mask_writel(struct pistachio_gpio_bank *bank,
> + u32 reg, unsigned int bit, u32 val)
> +{
> + gpio_writel(bank, (0x10000 | val) << bit, reg);
> +}
Magic mask? Some comment on what is happening here when OR:in
on 0x10000?
(...)
> +static int pistachio_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
> +{
> + struct pistachio_gpio_bank *bank = gc_to_bank(chip);
> +
> + if (gpio_readl(bank, GPIO_OUTPUT_EN) & BIT(offset))
> + return GPIOF_DIR_OUT;
> + return GPIOF_DIR_IN;
> +}
These flags are not for the driver API.
Do this:
return !gpio_readl(bank, GPIO_OUTPUT_EN) & BIT(offset));
> +static void pistachio_gpio_set(struct gpio_chip *chip, unsigned offset,
> + int value)
> +{
> + struct pistachio_gpio_bank *bank = gc_to_bank(chip);
> +
> + gpio_mask_writel(bank, GPIO_OUTPUT, offset, !!value);
> +}
Hm we should clamp value in the core and make the parameter "value"
a bool.... sigh for another day when things are calm.
(...)
> +static void pistachio_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
> +{
> + struct gpio_chip *gc = irq_get_handler_data(irq);
> + struct pistachio_gpio_bank *bank = gc_to_bank(gc);
> + struct irq_chip *chip = irq_get_chip(irq);
> + unsigned long pending;
> + unsigned int pin, virq;
Don't call it virq, just call it irq. All Linux irq numbers are virtual
so just go with irq.
> +
> + chained_irq_enter(chip, desc);
> + pending = gpio_readl(bank, GPIO_INTERRUPT_STATUS) &
> + gpio_readl(bank, GPIO_INTERRUPT_EN);
> + for_each_set_bit(pin, &pending, 16) {
> + virq = irq_linear_revmap(gc->irqdomain, pin);
> + generic_handle_irq(virq);
> + }
> + chained_irq_exit(chip, desc);
> +}
(...)
> +static int pistachio_gpio_register(struct pistachio_pinctrl *pctl)
> +{
> + struct device_node *child, *node = pctl->dev->of_node;
> + struct pistachio_gpio_bank *bank;
> + unsigned int i = 0;
> + int irq, ret = 0;
> +
> + for_each_child_of_node(node, child) {
> + if (!of_find_property(child, "gpio-controller", NULL))
> + continue;
So why not instead specify "simple-bus" as compatible on the parent node
and have each subnode be its own device (simple-bus will spawn platform
devices for all subnodes).
Overall this composite-device pattern is discouraged if we can instead have
unique devices for each bank.
Apart from these things the driver looks very nice!
Yours,
Linus Walleij
next prev parent reply other threads:[~2015-03-06 11:55 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-24 2:15 [PATCH 0/2] pinctrl: Support for IMG Pistachio Andrew Bresticker
2015-02-24 2:15 ` [PATCH 1/2] pinctrl: Add Pistachio SoC pin control binding document Andrew Bresticker
2015-03-06 11:37 ` Linus Walleij
[not found] ` <CACRpkdbCavYLk-Uo8hjTrGcGLJe6NEB9dVPVNm_fyd3eGccnEw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-06 18:10 ` Andrew Bresticker
[not found] ` <1424744104-14151-1-git-send-email-abrestic-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2015-02-24 2:15 ` [PATCH 2/2] pinctrl: Add Pistachio SoC pin control driver Andrew Bresticker
2015-03-06 11:55 ` Linus Walleij [this message]
2015-03-06 18:51 ` Andrew Bresticker
2015-03-17 12:16 ` Linus Walleij
2015-03-17 16:56 ` Andrew Bresticker
2015-03-19 8:42 ` Linus Walleij
2015-03-06 11:29 ` [PATCH 0/2] pinctrl: Support for IMG Pistachio Linus Walleij
[not found] ` <CACRpkdbCOHNPs5Y58h--X6pOVvYyxTrgcFhFyk5dWE+JLo=rhg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-06 18:07 ` Andrew Bresticker
2015-04-01 10:03 ` Ralf Baechle
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='CACRpkdbqioAreyDwM2JN87=gH20n1OkUXPjdkW885iDWUV1NnA@mail.gmail.com' \
--to=linus.walleij@linaro.org \
--cc=Damien.Horsley@imgtec.com \
--cc=abrestic@chromium.org \
--cc=devicetree@vger.kernel.org \
--cc=ezequiel.garcia@imgtec.com \
--cc=gnurou@gmail.com \
--cc=govindraj.raja@imgtec.com \
--cc=james.hartley@imgtec.com \
--cc=james.hogan@imgtec.com \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).