[PATCH 05/16] [ARM] pxa/cm-x270: avoid direct access of GPIO/MFP registers

Mike Rapoport mike at compulab.co.il
Mon Jan 11 10:19:42 EST 2010


Eric Miao wrote:
> Signed-off-by: Eric Miao <eric.y.miao at gmail.com>
> ---
>  arch/arm/mach-pxa/cm-x270.c |   62 ++++++++++++++++++++++++++++++------------
>  1 files changed, 44 insertions(+), 18 deletions(-)
> 
> diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
> index 425efbc..ce503f4 100644
> --- a/arch/arm/mach-pxa/cm-x270.c
> +++ b/arch/arm/mach-pxa/cm-x270.c
> @@ -178,31 +178,57 @@ static struct resource cmx270_2700G_resource[] = {
>  
>  static unsigned long save_lcd_regs[10];

This can be dropped as well.

> +static unsigned long cmx270_marathon_on[] = {
> +	GPIO58_GPIO,
> +	GPIO59_GPIO,
> +	GPIO60_GPIO,
> +	GPIO61_GPIO,
> +	GPIO62_GPIO,
> +	GPIO63_GPIO,
> +	GPIO64_GPIO,
> +	GPIO65_GPIO,
> +	GPIO66_GPIO,
> +	GPIO67_GPIO,
> +	GPIO68_GPIO,
> +	GPIO69_GPIO,
> +	GPIO70_GPIO,
> +	GPIO71_GPIO,
> +	GPIO72_GPIO,
> +	GPIO73_GPIO,
> +	GPIO74_GPIO,
> +	GPIO75_GPIO,
> +	GPIO76_GPIO,
> +	GPIO77_GPIO,
> +};
> +
> +static unsigned long cmx270_marathon_off[] = {
> +	GPIOxx_LCD_TFT_16BPP,
> +};
> +
>  static int cmx270_marathon_probe(struct fb_info *fb)
>  {
> -	/* save PXA-270 pin settings before enabling 2700G */
> -	save_lcd_regs[0] = GPDR1;
> -	save_lcd_regs[1] = GPDR2;
> -	save_lcd_regs[2] = GAFR1_U;
> -	save_lcd_regs[3] = GAFR2_L;
> -	save_lcd_regs[4] = GAFR2_U;
> -
> -	/* Disable PXA-270 on-chip controller driving pins */
> -	GPDR1 &= ~(0xfc000000);
> -	GPDR2 &= ~(0x00c03fff);
> -	GAFR1_U &= ~(0xfff00000);
> -	GAFR2_L &= ~(0x0fffffff);
> -	GAFR2_U &= ~(0x0000f000);
> +	int gpio, err;
> +
> +	for (gpio = 58; gpio <= 77; gpio++) {
> +		err = gpio_request(gpio, "LCD");
> +		if (err)
> +			return err;
> +		gpio_direction_input(gpio);
> +	}
> +
> +	pxa2xx_mfp_config(ARRAY_AND_SIZE(cmx270_marathon_on));
>  	return 0;
>  }
>  
>  static int cmx270_marathon_remove(struct fb_info *fb)
>  {
> -	GPDR1 =   save_lcd_regs[0];
> -	GPDR2 =   save_lcd_regs[1];
> -	GAFR1_U = save_lcd_regs[2];
> -	GAFR2_L = save_lcd_regs[3];
> -	GAFR2_U = save_lcd_regs[4];
> +	int gpio;
> +
> +	pxa2xx_mfp_config(ARRAY_AND_SIZE(cmx270_marathon_off));
> +
> +	for (gpio = 58; gpio <= 77; gpio++)
> +		gpio_free(gpio);
> +
>  	return 0;
>  }
>  


-- 
Sincerely yours,
Mike.



More information about the linux-arm-kernel mailing list