All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.