diff options
Diffstat (limited to 'drivers/gpio/gpio-samsung.c')
| -rw-r--r-- | drivers/gpio/gpio-samsung.c | 54 | 
1 files changed, 19 insertions, 35 deletions
diff --git a/drivers/gpio/gpio-samsung.c b/drivers/gpio/gpio-samsung.c index 358a21c2d81..07105ee5c9a 100644 --- a/drivers/gpio/gpio-samsung.c +++ b/drivers/gpio/gpio-samsung.c @@ -30,10 +30,13 @@  #include <asm/irq.h> -#include <mach/hardware.h>  #include <mach/map.h>  #include <mach/regs-gpio.h> +#if defined(CONFIG_ARCH_S3C24XX) || defined(CONFIG_ARCH_S3C64XX) +#include <mach/gpio-samsung.h> +#endif +  #include <plat/cpu.h>  #include <plat/gpio-core.h>  #include <plat/gpio-cfg.h> @@ -376,6 +379,7 @@ static int s5p64x0_gpio_setcfg_rbank(struct samsung_gpio_chip *chip,  	case 6:  		shift = ((off + 1) & 7) * 4;  		reg -= 4; +		break;  	default:  		shift = ((off + 1) & 7) * 4;  		break; @@ -1033,7 +1037,7 @@ static int s3c24xx_gpiolib_fbank_to_irq(struct gpio_chip *chip, unsigned offset)  }  #endif -#ifdef CONFIG_PLAT_S3C64XX +#ifdef CONFIG_ARCH_S3C64XX  static int s3c64xx_gpiolib_mbank_to_irq(struct gpio_chip *chip, unsigned pin)  {  	return pin < 5 ? IRQ_EINT(23) + pin : -ENXIO; @@ -1053,7 +1057,7 @@ struct samsung_gpio_chip s3c24xx_gpios[] = {  			.base			= S3C2410_GPA(0),  			.owner			= THIS_MODULE,  			.label			= "GPIOA", -			.ngpio			= 24, +			.ngpio			= 27,  			.direction_input	= s3c24xx_gpiolib_banka_input,  			.direction_output	= s3c24xx_gpiolib_banka_output,  		}, @@ -1062,7 +1066,7 @@ struct samsung_gpio_chip s3c24xx_gpios[] = {  			.base	= S3C2410_GPB(0),  			.owner	= THIS_MODULE,  			.label	= "GPIOB", -			.ngpio	= 16, +			.ngpio	= 11,  		},  	}, {  		.chip	= { @@ -1107,7 +1111,7 @@ struct samsung_gpio_chip s3c24xx_gpios[] = {  			.base	= S3C2410_GPH(0),  			.owner	= THIS_MODULE,  			.label	= "GPIOH", -			.ngpio	= 11, +			.ngpio	= 15,  		},  	},  		/* GPIOS for the S3C2443 and later devices. */ @@ -1174,7 +1178,7 @@ struct samsung_gpio_chip s3c24xx_gpios[] = {   */  static struct samsung_gpio_chip s3c64xx_gpios_4bit[] = { -#ifdef CONFIG_PLAT_S3C64XX +#ifdef CONFIG_ARCH_S3C64XX  	{  		.chip	= {  			.base	= S3C64XX_GPA(0), @@ -1227,7 +1231,7 @@ static struct samsung_gpio_chip s3c64xx_gpios_4bit[] = {  };  static struct samsung_gpio_chip s3c64xx_gpios_4bit2[] = { -#ifdef CONFIG_PLAT_S3C64XX +#ifdef CONFIG_ARCH_S3C64XX  	{  		.base	= S3C64XX_GPH_BASE + 0x4,  		.chip	= { @@ -1257,7 +1261,7 @@ static struct samsung_gpio_chip s3c64xx_gpios_4bit2[] = {  };  static struct samsung_gpio_chip s3c64xx_gpios_2bit[] = { -#ifdef CONFIG_PLAT_S3C64XX +#ifdef CONFIG_ARCH_S3C64XX  	{  		.base	= S3C64XX_GPF_BASE,  		.config	= &samsung_gpio_cfgs[6], @@ -2082,34 +2086,14 @@ static __init int samsung_gpiolib_init(void)  	int i, nr_chips;  	int group = 0; -#if defined(CONFIG_PINCTRL_EXYNOS) || defined(CONFIG_PINCTRL_EXYNOS5440)  	/* -	* This gpio driver includes support for device tree support and there -	* are platforms using it. In order to maintain compatibility with those -	* platforms, and to allow non-dt Exynos4210 platforms to use this -	* gpiolib support, a check is added to find out if there is a active -	* pin-controller driver support available. If it is available, this -	* gpiolib support is ignored and the gpiolib support available in -	* pin-controller driver is used. This is a temporary check and will go -	* away when all of the Exynos4210 platforms have switched to using -	* device tree and the pin-ctrl driver. -	*/ -	struct device_node *pctrl_np; -	static const struct of_device_id exynos_pinctrl_ids[] = { -		{ .compatible = "samsung,s3c2412-pinctrl", }, -		{ .compatible = "samsung,s3c2416-pinctrl", }, -		{ .compatible = "samsung,s3c2440-pinctrl", }, -		{ .compatible = "samsung,s3c2450-pinctrl", }, -		{ .compatible = "samsung,exynos4210-pinctrl", }, -		{ .compatible = "samsung,exynos4x12-pinctrl", }, -		{ .compatible = "samsung,exynos5250-pinctrl", }, -		{ .compatible = "samsung,exynos5440-pinctrl", }, -		{ } -	}; -	for_each_matching_node(pctrl_np, exynos_pinctrl_ids) -		if (pctrl_np && of_device_is_available(pctrl_np)) -			return -ENODEV; -#endif +	 * Currently there are two drivers that can provide GPIO support for +	 * Samsung SoCs. For device tree enabled platforms, the new +	 * pinctrl-samsung driver is used, providing both GPIO and pin control +	 * interfaces. For legacy (non-DT) platforms this driver is used. +	 */ +	if (of_have_populated_dt()) +		return -ENODEV;  	samsung_gpiolib_set_cfg(samsung_gpio_cfgs, ARRAY_SIZE(samsung_gpio_cfgs));  | 
