[PATCH 08/11] UCB1400: Pass ucb1400-gpio data through ac97 bus

Eric Miao eric.y.miao at gmail.com
Mon Sep 20 10:45:59 EDT 2010


Cc'ed David.

David,

Do you mind it goes through my tree as there is subsequent patches
following that have dependency? In that case, your Ack is mostly
welcome.

On Thu, Sep 16, 2010 at 10:32 AM, Marek Vasut <marek.vasut at gmail.com> wrote:
> Signed-off-by: Marek Vasut <marek.vasut at gmail.com>
> ---
>  drivers/gpio/ucb1400_gpio.c |   19 ++++++-------------
>  drivers/mfd/ucb1400_core.c  |    5 +++++
>  include/linux/ucb1400.h     |   19 ++++++-------------
>  3 files changed, 17 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpio/ucb1400_gpio.c b/drivers/gpio/ucb1400_gpio.c
> index 50e6bd1..fba45a5 100644
> --- a/drivers/gpio/ucb1400_gpio.c
> +++ b/drivers/gpio/ucb1400_gpio.c
> @@ -12,8 +12,6 @@
>  #include <linux/module.h>
>  #include <linux/ucb1400.h>
>
> -struct ucb1400_gpio_data *ucbdata;
> -
>  static int ucb1400_gpio_dir_in(struct gpio_chip *gc, unsigned off)
>  {
>        struct ucb1400_gpio *gpio;
> @@ -50,7 +48,7 @@ static int ucb1400_gpio_probe(struct platform_device *dev)
>        struct ucb1400_gpio *ucb = dev->dev.platform_data;
>        int err = 0;
>
> -       if (!(ucbdata && ucbdata->gpio_offset)) {
> +       if (!(ucb && ucb->gpio_offset)) {
>                err = -EINVAL;
>                goto err;
>        }
> @@ -58,7 +56,7 @@ static int ucb1400_gpio_probe(struct platform_device *dev)
>        platform_set_drvdata(dev, ucb);
>
>        ucb->gc.label = "ucb1400_gpio";
> -       ucb->gc.base = ucbdata->gpio_offset;
> +       ucb->gc.base = ucb->gpio_offset;
>        ucb->gc.ngpio = 10;
>        ucb->gc.owner = THIS_MODULE;
>
> @@ -72,8 +70,8 @@ static int ucb1400_gpio_probe(struct platform_device *dev)
>        if (err)
>                goto err;
>
> -       if (ucbdata && ucbdata->gpio_setup)
> -               err = ucbdata->gpio_setup(&dev->dev, ucb->gc.ngpio);
> +       if (ucb && ucb->gpio_setup)
> +               err = ucb->gpio_setup(&dev->dev, ucb->gc.ngpio);
>
>  err:
>        return err;
> @@ -85,8 +83,8 @@ static int ucb1400_gpio_remove(struct platform_device *dev)
>        int err = 0;
>        struct ucb1400_gpio *ucb = platform_get_drvdata(dev);
>
> -       if (ucbdata && ucbdata->gpio_teardown) {
> -               err = ucbdata->gpio_teardown(&dev->dev, ucb->gc.ngpio);
> +       if (ucb && ucb->gpio_teardown) {
> +               err = ucb->gpio_teardown(&dev->dev, ucb->gc.ngpio);
>                if (err)
>                        return err;
>        }
> @@ -113,11 +111,6 @@ static void __exit ucb1400_gpio_exit(void)
>        platform_driver_unregister(&ucb1400_gpio_driver);
>  }
>
> -void __init ucb1400_gpio_set_data(struct ucb1400_gpio_data *data)
> -{
> -       ucbdata = data;
> -}
> -
>  module_init(ucb1400_gpio_init);
>  module_exit(ucb1400_gpio_exit);
>
> diff --git a/drivers/mfd/ucb1400_core.c b/drivers/mfd/ucb1400_core.c
> index d73f84b..63f4969 100644
> --- a/drivers/mfd/ucb1400_core.c
> +++ b/drivers/mfd/ucb1400_core.c
> @@ -75,6 +75,11 @@ static int ucb1400_core_probe(struct device *dev)
>
>        /* GPIO */
>        ucb_gpio.ac97 = ac97;
> +       if (pdata) {
> +               ucb_gpio.gpio_setup = pdata->gpio_setup;
> +               ucb_gpio.gpio_teardown = pdata->gpio_teardown;
> +               ucb_gpio.gpio_offset = pdata->gpio_offset;
> +       }
>        ucb->ucb1400_gpio = platform_device_alloc("ucb1400_gpio", -1);
>        if (!ucb->ucb1400_gpio) {
>                err = -ENOMEM;
> diff --git a/include/linux/ucb1400.h b/include/linux/ucb1400.h
> index 1b47909..1a6bfdd 100644
> --- a/include/linux/ucb1400.h
> +++ b/include/linux/ucb1400.h
> @@ -83,15 +83,12 @@
>  #define UCB_ID                 0x7e
>  #define UCB_ID_1400             0x4304
>
> -struct ucb1400_gpio_data {
> -       int gpio_offset;
> -       int (*gpio_setup)(struct device *dev, int ngpio);
> -       int (*gpio_teardown)(struct device *dev, int ngpio);
> -};
> -
>  struct ucb1400_gpio {
>        struct gpio_chip        gc;
>        struct snd_ac97         *ac97;
> +       int                     gpio_offset;
> +       int (*gpio_setup)(struct device *dev, int ngpio);
> +       int (*gpio_teardown)(struct device *dev, int ngpio);
>  };
>
>  struct ucb1400_ts {
> @@ -112,6 +109,9 @@ struct ucb1400 {
>
>  struct ucb1400_pdata {
>        int     irq;
> +       int     gpio_offset;
> +       int (*gpio_setup)(struct device *dev, int ngpio);
> +       int (*gpio_teardown)(struct device *dev, int ngpio);
>  };
>
>  static inline u16 ucb1400_reg_read(struct snd_ac97 *ac97, u16 reg)
> @@ -163,11 +163,4 @@ static inline void ucb1400_adc_disable(struct snd_ac97 *ac97)
>
>  unsigned int ucb1400_adc_read(struct snd_ac97 *ac97, u16 adc_channel,
>                              int adcsync);
> -
> -#ifdef CONFIG_GPIO_UCB1400
> -void __init ucb1400_gpio_set_data(struct ucb1400_gpio_data *data);
> -#else
> -static inline void ucb1400_gpio_set_data(struct ucb1400_gpio_data *data) {}
> -#endif
> -
>  #endif
> --
> 1.7.1
>
>



More information about the linux-arm-kernel mailing list