[PATCH 3/7] sh: pfc: Allow device tree registration
Simon Horman
horms at verge.net.au
Sun Nov 25 19:16:50 EST 2012
This is a crude mechanism to allow the pfc driver to
be registered through device tree. The mofication of this
is to provide a way for pfc gpios to be looked up by
device tree for devices which use pfc gpios.
More specifically, the motivation is to allow the registration
of the card-detect gpio for the Micro-SD SDHI slot of the KZM9G board.
Cc: Paul Mundt <lethal at linux-sh.org>
Cc: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Signed-off-by: Simon Horman <horms at verge.net.au>
---
drivers/sh/pfc/gpio.c | 15 +++++++++++++++
include/linux/sh_pfc.h | 7 +++++++
2 files changed, 22 insertions(+)
diff --git a/drivers/sh/pfc/gpio.c b/drivers/sh/pfc/gpio.c
index 038fa07..322b927 100644
--- a/drivers/sh/pfc/gpio.c
+++ b/drivers/sh/pfc/gpio.c
@@ -136,6 +136,19 @@ static void sh_pfc_gpio_setup(struct sh_pfc_chip *chip)
gc->ngpio = (pfc->last_gpio - pfc->first_gpio) + 1;
}
+#ifdef CONFIG_OF_GPIO
+static void
+sh_pfc_register_gpiochip_dt(struct sh_pfc *pfc, struct gpio_chip *chip)
+{
+ chip->of_node = pfc->of_node;
+ chip->of_gpio_n_cells = pfc->of_gpio_n_cells;
+ chip->of_xlate = pfc->of_xlate;
+}
+#else
+static void sh_pfc_register_gpiochip_dt(struct sh_pfc *pfc,
+ struct gpio_chip *chip) {}
+#endif
+
int sh_pfc_register_gpiochip(struct sh_pfc *pfc)
{
struct sh_pfc_chip *chip;
@@ -153,6 +166,8 @@ int sh_pfc_register_gpiochip(struct sh_pfc *pfc)
if (unlikely(ret < 0))
kfree(chip);
+ sh_pfc_register_gpiochip_dt(pfc, &chip->gpio_chip);
+
pr_info("%s handling gpio %d -> %d\n",
pfc->name, pfc->first_gpio, pfc->last_gpio);
diff --git a/include/linux/sh_pfc.h b/include/linux/sh_pfc.h
index c19a092..9963370 100644
--- a/include/linux/sh_pfc.h
+++ b/include/linux/sh_pfc.h
@@ -124,6 +124,13 @@ struct sh_pfc {
struct pfc_window *window;
unsigned long unlock_reg;
+
+#ifdef CONFIG_OF_GPIO
+ struct device_node *of_node;
+ int of_gpio_n_cells;
+ int (*of_xlate)(struct gpio_chip *gc,
+ const struct of_phandle_args *gpiospec, u32 *flags);
+#endif
};
/* XXX compat for now */
--
1.7.10.4
More information about the linux-arm-kernel
mailing list