All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hamish Martin <hamish.martin@alliedtelesis.co.nz>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] dm: gpio: MPC85XX GPIO platform data support
Date: Tue, 31 May 2016 09:00:18 +1200	[thread overview]
Message-ID: <20160530210018.23378-1-hamish.martin@alliedtelesis.co.nz> (raw)

Define a platform data structure for the MPC85XX GPIO driver to allow
use of the driver without device tree. Users should define the GPIO
blocks for their platform like this:
  struct mpc85xx_gpio_plat gpio_blocks[] = {
         {
                 .addr = 0x130000,
                 .ngpios = 32,
         },
         {
                 .addr = 0x131000,
                 .ngpios = 32,
         },
  };

  U_BOOT_DEVICES(my_platform_gpios) = {
         { "gpio_mpc85xx", &gpio_blocks[0] },
         { "gpio_mpc85xx", &gpio_blocks[1] },
  };

This is intended to build upon the recent submission of the base
MPC85XX driver from Mario Six. We need to use that new driver
without dts support and this patch gives us that flexibility.
This has been tested on a Freescale T2080 CPU, although only the first
GPIO block.

Signed-off-by: Hamish Martin <hamish.martin@alliedtelesis.co.nz>
Reviewed-by: Mario Six <mario.six@gdsys.cc>
Tested-by: Mario Six <mario.six@gdsys.cc>
---
 arch/powerpc/include/asm/arch-mpc85xx/gpio.h |  6 +++++
 drivers/gpio/mpc85xx_gpio.c                  | 36 ++++++++++++++++++++++------
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/include/asm/arch-mpc85xx/gpio.h b/arch/powerpc/include/asm/arch-mpc85xx/gpio.h
index 41b6677bba38..76faa22c8b43 100644
--- a/arch/powerpc/include/asm/arch-mpc85xx/gpio.h
+++ b/arch/powerpc/include/asm/arch-mpc85xx/gpio.h
@@ -18,4 +18,10 @@
 #include <asm/mpc85xx_gpio.h>
 #endif
 
+struct mpc85xx_gpio_plat {
+	ulong addr;
+	unsigned long size;
+	uint ngpios;
+};
+
 #endif
diff --git a/drivers/gpio/mpc85xx_gpio.c b/drivers/gpio/mpc85xx_gpio.c
index 04773e2b31c3..c4563bee4d84 100644
--- a/drivers/gpio/mpc85xx_gpio.c
+++ b/drivers/gpio/mpc85xx_gpio.c
@@ -163,23 +163,41 @@ static int mpc85xx_gpio_get_function(struct udevice *dev, unsigned gpio)
 	return dir ? GPIOF_OUTPUT : GPIOF_INPUT;
 }
 
+#if CONFIG_IS_ENABLED(OF_CONTROL)
 static int mpc85xx_gpio_ofdata_to_platdata(struct udevice *dev) {
-	struct mpc85xx_gpio_data *data = dev_get_priv(dev);
+	struct mpc85xx_gpio_plat *plat = dev_get_platdata(dev)
 	fdt_addr_t addr;
 	fdt_size_t size;
 
 	addr = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset,
 						  "reg", 0, &size);
 
-	data->addr = addr;
-	data->base = map_sysmem(CONFIG_SYS_IMMR + addr, size);
+	plat->addr = addr;
+	plat->size = size;
+	plat->ngpios = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
+						  "ngpios", 32);
 
-	if (!data->base)
+	return 0;
+}
+#endif
+
+static int mpc85xx_gpio_platdata_to_priv(struct udevice *dev)
+{
+	struct mpc85xx_gpio_data *priv = dev_get_priv(dev);
+	struct mpc85xx_gpio_plat *plat = dev_get_platdata(dev);
+	unsigned long size = plat->size;
+
+	if (size == 0)
+		size = 0x100;
+
+	priv->addr = plat->addr;
+	priv->base = map_sysmem(CONFIG_SYS_IMMR + plat->addr, size);
+
+	if (!priv->base)
 		return -ENOMEM;
 
-	data->gpio_count = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
-					  "ngpios", 32);
-	data->dat_shadow = 0;
+	priv->gpio_count = plat->ngpios;
+	priv->dat_shadow = 0;
 
 	return 0;
 }
@@ -190,6 +208,8 @@ static int mpc85xx_gpio_probe(struct udevice *dev)
 	struct mpc85xx_gpio_data *data = dev_get_priv(dev);
 	char name[32], *str;
 
+	mpc85xx_gpio_platdata_to_priv(dev);
+
 	snprintf(name, sizeof(name), "MPC@%lx_", data->addr);
 	str = strdup(name);
 
@@ -221,8 +241,10 @@ U_BOOT_DRIVER(gpio_mpc85xx) = {
 	.name	= "gpio_mpc85xx",
 	.id	= UCLASS_GPIO,
 	.ops	= &gpio_mpc85xx_ops,
+#if CONFIG_IS_ENABLED(OF_CONTROL)
 	.ofdata_to_platdata = mpc85xx_gpio_ofdata_to_platdata,
 	.of_match = mpc85xx_gpio_ids,
+#endif
 	.probe	= mpc85xx_gpio_probe,
 	.priv_auto_alloc_size = sizeof(struct mpc85xx_gpio_data),
 };
-- 
2.8.3

             reply	other threads:[~2016-05-30 21:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-30 21:00 Hamish Martin [this message]
2016-05-31  5:58 ` [U-Boot] [PATCH] dm: gpio: MPC85XX GPIO platform data support Mario Six
  -- strict thread matches above, loose matches on Subject: below --
2016-05-31 20:44 Hamish Martin
2016-06-10  0:34 ` Simon Glass
2016-05-30  0:57 Hamish Martin
2016-05-30  8:01 ` Mario Six

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=20160530210018.23378-1-hamish.martin@alliedtelesis.co.nz \
    --to=hamish.martin@alliedtelesis.co.nz \
    --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.