All of lore.kernel.org
 help / color / mirror / Atom feed
From: grinberg@compulab.co.il (Igor Grinberg)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 04/10] gpio: pxa: remove gpio_type
Date: Thu, 07 Feb 2013 17:17:09 +0200	[thread overview]
Message-ID: <5113C575.2050606@compulab.co.il> (raw)
In-Reply-To: <1359886551-20950-5-git-send-email-haojian.zhuang@linaro.org>



On 02/03/13 12:15, Haojian Zhuang wrote:
> Since gpio_type is used to check whether gafr register is valid. So
> move it into platform data.
> 
> Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>

Tested-by: Igor Grinberg <grinberg@compulab.co.il>

> ---
>  arch/arm/mach-pxa/pxa25x.c |    1 +
>  arch/arm/mach-pxa/pxa27x.c |    1 +
>  drivers/gpio/gpio-pxa.c    |   43 ++++++-------------------------------------
>  include/linux/gpio-pxa.h   |    1 +
>  4 files changed, 9 insertions(+), 37 deletions(-)
> 
> diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c
> index 66dafb7..3460de1 100644
> --- a/arch/arm/mach-pxa/pxa25x.c
> +++ b/arch/arm/mach-pxa/pxa25x.c
> @@ -343,6 +343,7 @@ static struct pxa_gpio_platform_data pxa25x_gpio_info __initdata = {
>  #ifdef CONFIG_CPU_PXA26x
>  	.inverted = true,
>  #endif
> +	.gafr = true,
>  	.gpio_set_wake = gpio_set_wake,
>  };
>  
> diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
> index 67f5fd2..999d681 100644
> --- a/arch/arm/mach-pxa/pxa27x.c
> +++ b/arch/arm/mach-pxa/pxa27x.c
> @@ -430,6 +430,7 @@ void __init pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info)
>  }
>  
>  static struct pxa_gpio_platform_data pxa27x_gpio_info __initdata = {
> +	.gafr = true,
>  	.gpio_set_wake = gpio_set_wake,
>  };
>  
> diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
> index 1f8dfc8..6c6e21c 100644
> --- a/drivers/gpio/gpio-pxa.c
> +++ b/drivers/gpio/gpio-pxa.c
> @@ -72,6 +72,7 @@ struct pxa_gpio_chip {
>  	void __iomem	*regbase;
>  	unsigned int	irq_base;
>  	bool		inverted;
> +	bool		gafr;
>  	char label[10];
>  
>  	unsigned long	irq_mask;
> @@ -87,18 +88,8 @@ struct pxa_gpio_chip {
>  #endif
>  };
>  
> -enum {
> -	PXA25X_GPIO = 0,
> -	PXA26X_GPIO,
> -	PXA27X_GPIO,
> -	PXA3XX_GPIO,
> -	PXA93X_GPIO,
> -	MMP_GPIO = 0x10,
> -};
> -
>  static DEFINE_SPINLOCK(gpio_lock);
>  static struct pxa_gpio_chip *pxa_gpio_chips;
> -static int gpio_type;
>  static void __iomem *gpio_reg_base;
>  
>  #define for_each_gpio_chip(i, c)			\
> @@ -114,16 +105,6 @@ static inline struct pxa_gpio_chip *gpio_to_pxachip(unsigned gpio)
>  	return &pxa_gpio_chips[gpio_to_bank(gpio)];
>  }
>  
> -static inline int gpio_is_pxa_type(int type)
> -{
> -	return (type & MMP_GPIO) == 0;
> -}
> -
> -static inline int gpio_is_mmp_type(int type)
> -{
> -	return (type & MMP_GPIO) != 0;
> -}
> -
>  /* GPIO86/87/88/89 on PXA26x have their direction bits in PXA_GPDR(2 inverted,
>   * as well as their Alternate Function value being '1' for GPIO in GAFRx.
>   */
> @@ -149,10 +130,7 @@ static inline int __gpio_is_occupied(struct pxa_gpio_chip *chip, unsigned gpio)
>  	base = gpio_chip_base(&chip->chip);
>  	gpdr = readl_relaxed(base + GPDR_OFFSET);
>  
> -	switch (gpio_type) {
> -	case PXA25X_GPIO:
> -	case PXA26X_GPIO:
> -	case PXA27X_GPIO:
> +	if (chip->gafr) {
>  		gafr = readl_relaxed(base + GAFR_OFFSET);
>  		af = (gafr >> ((gpio & 0xf) * 2)) & 0x3;
>  		dir = gpdr & GPIO_bit(gpio);
> @@ -161,10 +139,8 @@ static inline int __gpio_is_occupied(struct pxa_gpio_chip *chip, unsigned gpio)
>  			ret = (af != 1) || (dir == 0);
>  		else
>  			ret = (af != 0) || (dir != 0);
> -		break;
> -	default:
> +	} else {
>  		ret = gpdr & GPIO_bit(gpio);
> -		break;
>  	}
>  	return ret;
>  }
> @@ -412,30 +388,23 @@ static int pxa_gpio_nums(void)
>  	if (cpu_is_pxa25x()) {
>  #ifdef CONFIG_CPU_PXA26x
>  		count = 89;
> -		gpio_type = PXA26X_GPIO;
>  #elif defined(CONFIG_PXA25x)
>  		count = 84;
> -		gpio_type = PXA26X_GPIO;
>  #endif /* CONFIG_CPU_PXA26x */
>  	} else if (cpu_is_pxa27x()) {
>  		count = 120;
> -		gpio_type = PXA27X_GPIO;
>  	} else if (cpu_is_pxa93x()) {
>  		count = 191;
> -		gpio_type = PXA93X_GPIO;
>  	} else if (cpu_is_pxa3xx()) {
>  		count = 127;
> -		gpio_type = PXA3XX_GPIO;
>  	}
>  #endif /* CONFIG_ARCH_PXA */
>  
>  #ifdef CONFIG_ARCH_MMP
>  	if (cpu_is_pxa168() || cpu_is_pxa910()) {
>  		count = 127;
> -		gpio_type = MMP_GPIO;
>  	} else if (cpu_is_mmp2()) {
>  		count = 191;
> -		gpio_type = MMP_GPIO;
>  	}
>  #endif /* CONFIG_ARCH_MMP */
>  	return count;
> @@ -458,7 +427,7 @@ static const struct irq_domain_ops pxa_irq_domain_ops = {
>  #ifdef CONFIG_OF
>  static struct of_device_id pxa_gpio_dt_ids[] = {
>  	{ .compatible = "mrvl,pxa-gpio" },
> -	{ .compatible = "mrvl,mmp-gpio", .data = (void *)MMP_GPIO },
> +	{ .compatible = "mrvl,mmp-gpio" },
>  	{}
>  };
>  
> @@ -484,7 +453,6 @@ static int pxa_gpio_probe_dt(struct platform_device *pdev)
>  		pdata->inverted = true;
>  	/* set the platform data */
>  	pdev->dev.platform_data = pdata;
> -	gpio_type = (int)of_id->data;
>  
>  	next = of_get_next_child(np, NULL);
>  	prev = next;
> @@ -624,8 +592,9 @@ static int pxa_gpio_probe(struct platform_device *pdev)
>  		/* unmask GPIO edge detect for AP side */
>  		if (info->ed_mask)
>  			writel_relaxed(~0, c->regbase + ED_MASK_OFFSET);
> -		/* update for gpio inverted */
> +		/* update for gpio inverted & gafr */
>  		c->inverted = info->inverted;
> +		c->gafr = info->gafr;
>  	}
>  
>  	if (!use_of) {
> diff --git a/include/linux/gpio-pxa.h b/include/linux/gpio-pxa.h
> index 0c212a1..80e0322 100644
> --- a/include/linux/gpio-pxa.h
> +++ b/include/linux/gpio-pxa.h
> @@ -18,6 +18,7 @@ extern int pxa_irq_to_gpio(struct irq_data *d);
>  struct pxa_gpio_platform_data {
>  	bool ed_mask;	/* true means that ed_mask reg is available */
>  	bool inverted;	/* only valid for PXA26x */
> +	bool gafr;	/* only valid for PXA25x/PXA26x/PXA27x */
>  	int (*gpio_set_wake)(unsigned int gpio, unsigned int on);
>  };
>  
> 

-- 
Regards,
Igor.

  reply	other threads:[~2013-02-07 15:17 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-03 10:15 [PATCH v2 00/10] rework pxa gpio driver for pinctrl Haojian Zhuang
2013-02-03 10:15 ` [PATCH v2 01/10] gpio: pxa: identify ed mask reg with platform data Haojian Zhuang
2013-02-03 10:15 ` [PATCH v2 02/10] gpio: pxa: avoid to use global irq base Haojian Zhuang
2013-02-07 15:17   ` Igor Grinberg
2013-02-13 14:18   ` Igor Grinberg
2013-02-13 14:55     ` Haojian Zhuang
2013-02-14  9:27       ` Igor Grinberg
2013-02-14 12:19         ` Linus Walleij
2013-02-14 12:45           ` Igor Grinberg
2013-02-14 15:34             ` Linus Walleij
2013-02-17 14:54             ` Haojian Zhuang
2013-02-03 10:15 ` [PATCH v2 03/10] gpio: pxa: use platform data for gpio inverted Haojian Zhuang
2013-02-07 15:17   ` Igor Grinberg
2013-02-03 10:15 ` [PATCH v2 04/10] gpio: pxa: remove gpio_type Haojian Zhuang
2013-02-07 15:17   ` Igor Grinberg [this message]
2013-02-03 10:15 ` [PATCH v2 05/10] gpio: pxa: define nr gpios in platform data Haojian Zhuang
2013-02-03 13:18   ` Igor Grinberg
2013-02-03 15:00     ` [PATCH v2 05/11] " Haojian Zhuang
2013-02-07 15:17       ` Igor Grinberg
2013-02-03 15:03     ` [PATCH v2 05/10] " Haojian Zhuang
2013-02-03 10:15 ` [PATCH v2 06/10] gpio: pxa: clean code for compatible name Haojian Zhuang
2013-02-07 15:17   ` Igor Grinberg
2013-02-03 10:15 ` [PATCH v2 07/10] gpio: pxa: remove arch related macro Haojian Zhuang
2013-02-07 15:17   ` Igor Grinberg
2013-02-03 10:15 ` [PATCH v2 08/10] gpio: pxa: move gpio properties into child node Haojian Zhuang
2013-02-03 10:15 ` [PATCH v2 09/10] gpio: pxa: bind to pinctrl by request Haojian Zhuang
2013-02-06 14:11   ` Igor Grinberg
2013-02-07 15:17   ` Igor Grinberg
2013-02-03 10:15 ` [PATCH v2 10/10] ARM: dts: support pinmux in pxa910 Haojian Zhuang
2013-02-06 14:12   ` Igor Grinberg
2013-02-05 16:44 ` [PATCH v2 00/10] rework pxa gpio driver for pinctrl Linus Walleij
2013-02-06  2:08   ` Haojian Zhuang
2013-02-07 15:32     ` Igor Grinberg
2013-02-07 15:52       ` Linus Walleij

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=5113C575.2050606@compulab.co.il \
    --to=grinberg@compulab.co.il \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.