From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] gpio: Add DW APB GPIO driver
Date: Mon, 3 Aug 2015 00:19:50 +0200 [thread overview]
Message-ID: <201508030019.50295.marex@denx.de> (raw)
In-Reply-To: <CAPnjgZ3Pio-W1GJhUoNKppYE6jDBCia16QLOPyBwL3ofj8HPwA@mail.gmail.com>
On Sunday, August 02, 2015 at 11:28:13 PM, Simon Glass wrote:
> Hi Marek,
Hi,
> On 27 July 2015 at 14:44, Marek Vasut <marex@denx.de> wrote:
> > Add driver for the DesignWare APB GPIO IP block.
> > This driver is DM capable and probes from DT.
> >
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Simon Glass <sjg@chromium.org>
[...]
> > +#define GPIO_SWPORTA_DR 0x00
> > +#define GPIO_SWPORTA_DDR 0x04
> > +#define GPIO_INTEN 0x30
> > +#define GPIO_INTMASK 0x34
> > +#define GPIO_INTTYPE_LEVEL 0x38
> > +#define GPIO_INT_POLARITY 0x3c
> > +#define GPIO_INTSTATUS 0x40
> > +#define GPIO_PORTA_DEBOUNCE 0x48
> > +#define GPIO_PORTA_EOI 0x4c
> > +#define GPIO_EXT_PORTA 0x50
>
> Should use C structure, right?
My understanding is that we no longer want C structs . Tom ?
[...]
> > +static const struct dm_gpio_ops gpio_dwapb_ops = {
> > + .direction_input = dwapb_gpio_direction_input,
> > + .direction_output = dwapb_gpio_direction_output,
> > + .get_value = dwapb_gpio_get_value,
> > + .set_value = dwapb_gpio_set_value,
>
> Do you want to implement .function?
No, the pinmuxing on SoCFPGA is still in a weird state.
> > +};
> > +
> > +static int gpio_dwapb_probe(struct udevice *dev)
> > +{
> > + struct gpio_dev_priv *priv = dev_get_uclass_priv(dev);
> > + struct gpio_dwapb_platdata *plat = dev->platdata;
> > +
> > + if (!plat)
> > + return 0;
> > +
> > + priv->gpio_count = plat->pins;
> > + priv->bank_name = plat->name;
> > +
> > + return 0;
> > +}
> > +
> > +static int gpio_dwapb_bind(struct udevice *dev)
> > +{
> > + struct gpio_dwapb_platdata *plat = dev_get_platdata(dev);
> > + const void *blob = gd->fdt_blob;
> > + struct udevice *subdev;
> > + fdt_addr_t base;
> > + int node, bank = 0;
> > + const char *name;
> > +
> > + /* If this is a child device, there is nothing to do here */
> > + if (plat)
> > + return 0;
> > +
> > + base = fdtdec_get_addr(blob, dev->of_offset, "reg");
> > + if (base == FDT_ADDR_T_NONE) {
> > + debug("Can't get the GPIO register base address\n");
> > + return -ENXIO;
> > + }
> > +
> > + name = fdt_get_name(blob, dev->of_offset, NULL);
> > +
> > + for (node = fdt_first_subnode(blob, dev->of_offset);
> > + node > 0;
> > + node = fdt_next_subnode(blob, node)) {
> > + int ret;
> > +
> > + if (!fdtdec_get_bool(blob, node, "gpio-controller"))
> > + continue;
> > +
> > + plat = NULL;
> > + plat = calloc(1, sizeof(*plat));
>
> I suppose this should use devm_alloc() now.
Is that even in u-boot/master ? Also, I'm not sure it's a good idea to put
this in if I use this driver in SPL.
> > + if (!plat)
> > + return -ENOMEM;
> > +
> > + plat->base = base;
> > + plat->bank = bank;
> > + plat->pins = fdtdec_get_int(blob, node, "snps,nr-gpios",
> > 0); + snprintf(plat->name, sizeof(plat->name) - 1,
> > "%s-bank%i-", + name, bank);
>
> Why such a long name? That's going to be a pain to type in the 'gpio'
> command.
Do you have a suggestion please ?
Also, I can as well use "gpio <operation> N" , where N is a number.
> > +
> > + ret = device_bind(dev, dev->driver, plat->name,
> > + plat, -1, &subdev);
> > + if (ret)
> > + return ret;
> > +
> > + subdev->of_offset = node;
> > + bank++;
> > + }
> > +
> > +
> > + return 0;
> > +}
> > +
> > +static const struct udevice_id gpio_dwapb_ids[] = {
> > + { .compatible = "snps,dw-apb-gpio" },
> > + { }
> > +};
> > +
> > +U_BOOT_DRIVER(gpio_dwapb) = {
> > + .name = "gpio-dwapb",
> > + .id = UCLASS_GPIO,
> > + .of_match = gpio_dwapb_ids,
> > + .ops = &gpio_dwapb_ops,
> > + .bind = gpio_dwapb_bind,
> > + .probe = gpio_dwapb_probe,
> > +};
> > --
> > 2.1.4
>
> Regards,
> Simon
next prev parent reply other threads:[~2015-08-02 22:19 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-27 20:44 [U-Boot] [PATCH 1/2] gpio: Add DW APB GPIO driver Marek Vasut
2015-07-27 20:44 ` [U-Boot] [PATCH 2/2] arm: socfpga: Enable DWAPB " Marek Vasut
2015-08-02 21:28 ` Simon Glass
2015-08-02 21:28 ` [U-Boot] [PATCH 1/2] gpio: Add DW APB " Simon Glass
2015-08-02 22:19 ` Marek Vasut [this message]
2015-08-02 23:38 ` Simon Glass
2015-08-03 0:16 ` Marek Vasut
2015-08-05 14:39 ` Simon Glass
2015-08-06 1:49 ` Marek Vasut
2015-08-07 19:13 ` Simon Glass
2015-08-07 20:35 ` Marek Vasut
2015-08-07 20:37 ` Simon Glass
2015-08-10 15:01 ` Marek Vasut
2015-08-10 15:35 ` Simon Glass
2015-08-10 16:28 ` Marek Vasut
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=201508030019.50295.marex@denx.de \
--to=marex@denx.de \
--cc=u-boot@lists.denx.de \
/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.