[PATCH 3/7] sh: pfc: Allow device tree registration
From: horms@verge.net.au (Simon Horman)
Date: 2012-11-26 00:16:50
Also in:
linux-sh
Subsystem:
superh, the rest · Maintainers:
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz, Linus Torvalds
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 <redacted> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Simon Horman <horms@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