Merge branch 'depends/omap/gpio/runtime-pm-cleanup' into next/cleanup
Conflicts: arch/arm/mach-omap1/gpio16xx.c drivers/gpio/gpio-omap.c Merge in the runtime-pm-cleanup branch from the gpio tree into next/cleanup, this resolves a nonobvious merge conflict between the two branches. Both branches move parts of the gpio-omap driver into platform code, this takes the superset of both changes. Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
		
						commit
						1220547bfd
					
				| @ -42,11 +42,12 @@ static struct omap_gpio_reg_offs omap15xx_mpuio_regs = { | ||||
| 	.irqstatus	= OMAP_MPUIO_GPIO_INT, | ||||
| 	.irqenable	= OMAP_MPUIO_GPIO_MASKIT, | ||||
| 	.irqenable_inv	= true, | ||||
| 	.irqctrl	= OMAP_MPUIO_GPIO_INT_EDGE, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap15xx_mpu_gpio_config = { | ||||
| 	.virtual_irq_start	= IH_MPUIO_BASE, | ||||
| 	.bank_type		= METHOD_MPUIO, | ||||
| 	.is_mpuio		= true, | ||||
| 	.bank_width		= 16, | ||||
| 	.bank_stride		= 1, | ||||
| 	.regs			= &omap15xx_mpuio_regs, | ||||
| @ -83,11 +84,12 @@ static struct omap_gpio_reg_offs omap15xx_gpio_regs = { | ||||
| 	.irqstatus	= OMAP1510_GPIO_INT_STATUS, | ||||
| 	.irqenable	= OMAP1510_GPIO_INT_MASK, | ||||
| 	.irqenable_inv	= true, | ||||
| 	.irqctrl	= OMAP1510_GPIO_INT_CONTROL, | ||||
| 	.pinctrl	= OMAP1510_GPIO_PIN_CONTROL, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap15xx_gpio_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE, | ||||
| 	.bank_type		= METHOD_GPIO_1510, | ||||
| 	.bank_width		= 16, | ||||
| 	.regs                   = &omap15xx_gpio_regs, | ||||
| }; | ||||
| @ -115,7 +117,6 @@ static int __init omap15xx_gpio_init(void) | ||||
| 	platform_device_register(&omap15xx_mpu_gpio); | ||||
| 	platform_device_register(&omap15xx_gpio); | ||||
| 
 | ||||
| 	gpio_bank_count = 2; | ||||
| 	return 0; | ||||
| } | ||||
| postcore_initcall(omap15xx_gpio_init); | ||||
|  | ||||
| @ -24,6 +24,9 @@ | ||||
| #define OMAP1610_GPIO4_BASE		0xfffbbc00 | ||||
| #define OMAP1_MPUIO_VBASE		OMAP1_MPUIO_BASE | ||||
| 
 | ||||
| /* smart idle, enable wakeup */ | ||||
| #define SYSCONFIG_WORD			0x14 | ||||
| 
 | ||||
| /* mpu gpio */ | ||||
| static struct __initdata resource omap16xx_mpu_gpio_resources[] = { | ||||
| 	{ | ||||
| @ -45,11 +48,12 @@ static struct omap_gpio_reg_offs omap16xx_mpuio_regs = { | ||||
| 	.irqstatus	= OMAP_MPUIO_GPIO_INT, | ||||
| 	.irqenable	= OMAP_MPUIO_GPIO_MASKIT, | ||||
| 	.irqenable_inv	= true, | ||||
| 	.irqctrl	= OMAP_MPUIO_GPIO_INT_EDGE, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap16xx_mpu_gpio_config = { | ||||
| 	.virtual_irq_start	= IH_MPUIO_BASE, | ||||
| 	.bank_type		= METHOD_MPUIO, | ||||
| 	.is_mpuio		= true, | ||||
| 	.bank_width		= 16, | ||||
| 	.bank_stride		= 1, | ||||
| 	.regs                   = &omap16xx_mpuio_regs, | ||||
| @ -89,11 +93,13 @@ static struct omap_gpio_reg_offs omap16xx_gpio_regs = { | ||||
| 	.irqenable	= OMAP1610_GPIO_IRQENABLE1, | ||||
| 	.set_irqenable	= OMAP1610_GPIO_SET_IRQENABLE1, | ||||
| 	.clr_irqenable	= OMAP1610_GPIO_CLEAR_IRQENABLE1, | ||||
| 	.wkup_en	= OMAP1610_GPIO_WAKEUPENABLE, | ||||
| 	.edgectrl1	= OMAP1610_GPIO_EDGE_CTRL1, | ||||
| 	.edgectrl2	= OMAP1610_GPIO_EDGE_CTRL2, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap16xx_gpio1_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE, | ||||
| 	.bank_type		= METHOD_GPIO_1610, | ||||
| 	.bank_width		= 16, | ||||
| 	.regs                   = &omap16xx_gpio_regs, | ||||
| }; | ||||
| @ -123,7 +129,6 @@ static struct __initdata resource omap16xx_gpio2_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap16xx_gpio2_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 16, | ||||
| 	.bank_type		= METHOD_GPIO_1610, | ||||
| 	.bank_width		= 16, | ||||
| 	.regs                   = &omap16xx_gpio_regs, | ||||
| }; | ||||
| @ -153,7 +158,6 @@ static struct __initdata resource omap16xx_gpio3_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap16xx_gpio3_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 32, | ||||
| 	.bank_type		= METHOD_GPIO_1610, | ||||
| 	.bank_width		= 16, | ||||
| 	.regs                   = &omap16xx_gpio_regs, | ||||
| }; | ||||
| @ -183,7 +187,6 @@ static struct __initdata resource omap16xx_gpio4_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap16xx_gpio4_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 48, | ||||
| 	.bank_type		= METHOD_GPIO_1610, | ||||
| 	.bank_width		= 16, | ||||
| 	.regs                   = &omap16xx_gpio_regs, | ||||
| }; | ||||
| @ -214,6 +217,10 @@ static struct __initdata platform_device * omap16xx_gpio_dev[] = { | ||||
| static int __init omap16xx_gpio_init(void) | ||||
| { | ||||
| 	int i; | ||||
| 	void __iomem *base; | ||||
| 	struct resource *res; | ||||
| 	struct platform_device *pdev; | ||||
| 	struct omap_gpio_platform_data *pdata; | ||||
| 
 | ||||
| 	if (!cpu_is_omap16xx()) | ||||
| 		return -EINVAL; | ||||
| @ -225,10 +232,27 @@ static int __init omap16xx_gpio_init(void) | ||||
| 	omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, | ||||
| 					ULPD_CAM_CLK_CTRL); | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(omap16xx_gpio_dev); i++) | ||||
| 		platform_device_register(omap16xx_gpio_dev[i]); | ||||
| 	for (i = 0; i < ARRAY_SIZE(omap16xx_gpio_dev); i++) { | ||||
| 		pdev = omap16xx_gpio_dev[i]; | ||||
| 		pdata = pdev->dev.platform_data; | ||||
| 
 | ||||
| 	gpio_bank_count = ARRAY_SIZE(omap16xx_gpio_dev); | ||||
| 		res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||||
| 		if (unlikely(!res)) { | ||||
| 			dev_err(&pdev->dev, "Invalid mem resource.\n"); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 
 | ||||
| 		base = ioremap(res->start, resource_size(res)); | ||||
| 		if (unlikely(!base)) { | ||||
| 			dev_err(&pdev->dev, "ioremap failed.\n"); | ||||
| 			return -ENOMEM; | ||||
| 		} | ||||
| 
 | ||||
| 		__raw_writel(SYSCONFIG_WORD, base + OMAP1610_GPIO_SYSCONFIG); | ||||
| 		iounmap(base); | ||||
| 
 | ||||
| 		platform_device_register(omap16xx_gpio_dev[i]); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @ -47,12 +47,13 @@ static struct omap_gpio_reg_offs omap7xx_mpuio_regs = { | ||||
| 	.irqstatus	= OMAP_MPUIO_GPIO_INT / 2, | ||||
| 	.irqenable	= OMAP_MPUIO_GPIO_MASKIT / 2, | ||||
| 	.irqenable_inv	= true, | ||||
| 	.irqctrl	= OMAP_MPUIO_GPIO_INT_EDGE >> 1, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_mpu_gpio_config = { | ||||
| 	.virtual_irq_start	= IH_MPUIO_BASE, | ||||
| 	.bank_type		= METHOD_MPUIO, | ||||
| 	.bank_width		= 32, | ||||
| 	.is_mpuio		= true, | ||||
| 	.bank_width		= 16, | ||||
| 	.bank_stride		= 2, | ||||
| 	.regs                   = &omap7xx_mpuio_regs, | ||||
| }; | ||||
| @ -88,11 +89,11 @@ static struct omap_gpio_reg_offs omap7xx_gpio_regs = { | ||||
| 	.irqstatus	= OMAP7XX_GPIO_INT_STATUS, | ||||
| 	.irqenable	= OMAP7XX_GPIO_INT_MASK, | ||||
| 	.irqenable_inv	= true, | ||||
| 	.irqctrl	= OMAP7XX_GPIO_INT_CONTROL, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_gpio1_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE, | ||||
| 	.bank_type		= METHOD_GPIO_7XX, | ||||
| 	.bank_width		= 32, | ||||
| 	.regs			= &omap7xx_gpio_regs, | ||||
| }; | ||||
| @ -122,7 +123,6 @@ static struct __initdata resource omap7xx_gpio2_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_gpio2_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 32, | ||||
| 	.bank_type		= METHOD_GPIO_7XX, | ||||
| 	.bank_width		= 32, | ||||
| 	.regs			= &omap7xx_gpio_regs, | ||||
| }; | ||||
| @ -152,7 +152,6 @@ static struct __initdata resource omap7xx_gpio3_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_gpio3_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 64, | ||||
| 	.bank_type		= METHOD_GPIO_7XX, | ||||
| 	.bank_width		= 32, | ||||
| 	.regs			= &omap7xx_gpio_regs, | ||||
| }; | ||||
| @ -182,7 +181,6 @@ static struct __initdata resource omap7xx_gpio4_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_gpio4_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 96, | ||||
| 	.bank_type		= METHOD_GPIO_7XX, | ||||
| 	.bank_width		= 32, | ||||
| 	.regs			= &omap7xx_gpio_regs, | ||||
| }; | ||||
| @ -212,7 +210,6 @@ static struct __initdata resource omap7xx_gpio5_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_gpio5_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 128, | ||||
| 	.bank_type		= METHOD_GPIO_7XX, | ||||
| 	.bank_width		= 32, | ||||
| 	.regs			= &omap7xx_gpio_regs, | ||||
| }; | ||||
| @ -242,7 +239,6 @@ static struct __initdata resource omap7xx_gpio6_resources[] = { | ||||
| 
 | ||||
| static struct __initdata omap_gpio_platform_data omap7xx_gpio6_config = { | ||||
| 	.virtual_irq_start	= IH_GPIO_BASE + 160, | ||||
| 	.bank_type		= METHOD_GPIO_7XX, | ||||
| 	.bank_width		= 32, | ||||
| 	.regs			= &omap7xx_gpio_regs, | ||||
| }; | ||||
| @ -282,8 +278,6 @@ static int __init omap7xx_gpio_init(void) | ||||
| 	for (i = 0; i < ARRAY_SIZE(omap7xx_gpio_dev); i++) | ||||
| 		platform_device_register(omap7xx_gpio_dev[i]); | ||||
| 
 | ||||
| 	gpio_bank_count = ARRAY_SIZE(omap7xx_gpio_dev); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| postcore_initcall(omap7xx_gpio_init); | ||||
|  | ||||
| @ -23,6 +23,9 @@ | ||||
| 
 | ||||
| #include <plat/omap_hwmod.h> | ||||
| #include <plat/omap_device.h> | ||||
| #include <plat/omap-pm.h> | ||||
| 
 | ||||
| #include "powerdomain.h" | ||||
| 
 | ||||
| static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| { | ||||
| @ -31,6 +34,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 	struct omap_gpio_dev_attr *dev_attr; | ||||
| 	char *name = "omap_gpio"; | ||||
| 	int id; | ||||
| 	struct powerdomain *pwrdm; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * extract the device id from name field available in the | ||||
| @ -52,7 +56,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 	pdata->bank_width = dev_attr->bank_width; | ||||
| 	pdata->dbck_flag = dev_attr->dbck_flag; | ||||
| 	pdata->virtual_irq_start = IH_GPIO_BASE + 32 * (id - 1); | ||||
| 
 | ||||
| 	pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; | ||||
| 	pdata->regs = kzalloc(sizeof(struct omap_gpio_reg_offs), GFP_KERNEL); | ||||
| 	if (!pdata) { | ||||
| 		pr_err("gpio%d: Memory allocation failed\n", id); | ||||
| @ -61,8 +65,15 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 
 | ||||
| 	switch (oh->class->rev) { | ||||
| 	case 0: | ||||
| 		if (id == 1) | ||||
| 			/* non-wakeup GPIO pins for OMAP2 Bank1 */ | ||||
| 			pdata->non_wakeup_gpios = 0xe203ffc0; | ||||
| 		else if (id == 2) | ||||
| 			/* non-wakeup GPIO pins for OMAP2 Bank2 */ | ||||
| 			pdata->non_wakeup_gpios = 0x08700040; | ||||
| 		/* fall through */ | ||||
| 
 | ||||
| 	case 1: | ||||
| 		pdata->bank_type = METHOD_GPIO_24XX; | ||||
| 		pdata->regs->revision = OMAP24XX_GPIO_REVISION; | ||||
| 		pdata->regs->direction = OMAP24XX_GPIO_OE; | ||||
| 		pdata->regs->datain = OMAP24XX_GPIO_DATAIN; | ||||
| @ -72,13 +83,19 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 		pdata->regs->irqstatus = OMAP24XX_GPIO_IRQSTATUS1; | ||||
| 		pdata->regs->irqstatus2 = OMAP24XX_GPIO_IRQSTATUS2; | ||||
| 		pdata->regs->irqenable = OMAP24XX_GPIO_IRQENABLE1; | ||||
| 		pdata->regs->irqenable2 = OMAP24XX_GPIO_IRQENABLE2; | ||||
| 		pdata->regs->set_irqenable = OMAP24XX_GPIO_SETIRQENABLE1; | ||||
| 		pdata->regs->clr_irqenable = OMAP24XX_GPIO_CLEARIRQENABLE1; | ||||
| 		pdata->regs->debounce = OMAP24XX_GPIO_DEBOUNCE_VAL; | ||||
| 		pdata->regs->debounce_en = OMAP24XX_GPIO_DEBOUNCE_EN; | ||||
| 		pdata->regs->ctrl = OMAP24XX_GPIO_CTRL; | ||||
| 		pdata->regs->wkup_en = OMAP24XX_GPIO_WAKE_EN; | ||||
| 		pdata->regs->leveldetect0 = OMAP24XX_GPIO_LEVELDETECT0; | ||||
| 		pdata->regs->leveldetect1 = OMAP24XX_GPIO_LEVELDETECT1; | ||||
| 		pdata->regs->risingdetect = OMAP24XX_GPIO_RISINGDETECT; | ||||
| 		pdata->regs->fallingdetect = OMAP24XX_GPIO_FALLINGDETECT; | ||||
| 		break; | ||||
| 	case 2: | ||||
| 		pdata->bank_type = METHOD_GPIO_44XX; | ||||
| 		pdata->regs->revision = OMAP4_GPIO_REVISION; | ||||
| 		pdata->regs->direction = OMAP4_GPIO_OE; | ||||
| 		pdata->regs->datain = OMAP4_GPIO_DATAIN; | ||||
| @ -88,10 +105,17 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 		pdata->regs->irqstatus = OMAP4_GPIO_IRQSTATUS0; | ||||
| 		pdata->regs->irqstatus2 = OMAP4_GPIO_IRQSTATUS1; | ||||
| 		pdata->regs->irqenable = OMAP4_GPIO_IRQSTATUSSET0; | ||||
| 		pdata->regs->irqenable2 = OMAP4_GPIO_IRQSTATUSSET1; | ||||
| 		pdata->regs->set_irqenable = OMAP4_GPIO_IRQSTATUSSET0; | ||||
| 		pdata->regs->clr_irqenable = OMAP4_GPIO_IRQSTATUSCLR0; | ||||
| 		pdata->regs->debounce = OMAP4_GPIO_DEBOUNCINGTIME; | ||||
| 		pdata->regs->debounce_en = OMAP4_GPIO_DEBOUNCENABLE; | ||||
| 		pdata->regs->ctrl = OMAP4_GPIO_CTRL; | ||||
| 		pdata->regs->wkup_en = OMAP4_GPIO_IRQWAKEN0; | ||||
| 		pdata->regs->leveldetect0 = OMAP4_GPIO_LEVELDETECT0; | ||||
| 		pdata->regs->leveldetect1 = OMAP4_GPIO_LEVELDETECT1; | ||||
| 		pdata->regs->risingdetect = OMAP4_GPIO_RISINGDETECT; | ||||
| 		pdata->regs->fallingdetect = OMAP4_GPIO_FALLINGDETECT; | ||||
| 		break; | ||||
| 	default: | ||||
| 		WARN(1, "Invalid gpio bank_type\n"); | ||||
| @ -99,6 +123,9 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	pwrdm = omap_hwmod_get_pwrdm(oh); | ||||
| 	pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm); | ||||
| 
 | ||||
| 	pdev = omap_device_build(name, id - 1, oh, pdata, | ||||
| 				sizeof(*pdata),	NULL, 0, false); | ||||
| 	kfree(pdata); | ||||
| @ -109,9 +136,6 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | ||||
| 		return PTR_ERR(pdev); | ||||
| 	} | ||||
| 
 | ||||
| 	omap_device_disable_idle_on_suspend(pdev); | ||||
| 
 | ||||
| 	gpio_bank_count++; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -75,16 +75,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm; | ||||
| static struct powerdomain *core_pwrdm, *per_pwrdm; | ||||
| static struct powerdomain *cam_pwrdm; | ||||
| 
 | ||||
| static inline void omap3_per_save_context(void) | ||||
| { | ||||
| 	omap_gpio_save_context(); | ||||
| } | ||||
| 
 | ||||
| static inline void omap3_per_restore_context(void) | ||||
| { | ||||
| 	omap_gpio_restore_context(); | ||||
| } | ||||
| 
 | ||||
| static void omap3_enable_io_chain(void) | ||||
| { | ||||
| 	int timeout = 0; | ||||
| @ -332,8 +322,6 @@ void omap_sram_idle(void) | ||||
| 	if (per_next_state < PWRDM_POWER_ON) { | ||||
| 		per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0; | ||||
| 		omap2_gpio_prepare_for_idle(per_going_off); | ||||
| 		if (per_next_state == PWRDM_POWER_OFF) | ||||
| 				omap3_per_save_context(); | ||||
| 	} | ||||
| 
 | ||||
| 	/* CORE */ | ||||
| @ -399,8 +387,6 @@ void omap_sram_idle(void) | ||||
| 	if (per_next_state < PWRDM_POWER_ON) { | ||||
| 		per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); | ||||
| 		omap2_gpio_resume_after_idle(); | ||||
| 		if (per_prev_state == PWRDM_POWER_OFF) | ||||
| 			omap3_per_restore_context(); | ||||
| 	} | ||||
| 
 | ||||
| 	/* Disable IO-PAD and IO-CHAIN wakeup */ | ||||
|  | ||||
| @ -162,13 +162,6 @@ | ||||
| 				 IH_MPUIO_BASE + ((nr) & 0x0f) : \ | ||||
| 				 IH_GPIO_BASE + (nr)) | ||||
| 
 | ||||
| #define METHOD_MPUIO		0 | ||||
| #define METHOD_GPIO_1510	1 | ||||
| #define METHOD_GPIO_1610	2 | ||||
| #define METHOD_GPIO_7XX		3 | ||||
| #define METHOD_GPIO_24XX	5 | ||||
| #define METHOD_GPIO_44XX	6 | ||||
| 
 | ||||
| struct omap_gpio_dev_attr { | ||||
| 	int bank_width;		/* GPIO bank width */ | ||||
| 	bool dbck_flag;		/* dbck required or not - True for OMAP3&4 */ | ||||
| @ -184,10 +177,21 @@ struct omap_gpio_reg_offs { | ||||
| 	u16 irqstatus; | ||||
| 	u16 irqstatus2; | ||||
| 	u16 irqenable; | ||||
| 	u16 irqenable2; | ||||
| 	u16 set_irqenable; | ||||
| 	u16 clr_irqenable; | ||||
| 	u16 debounce; | ||||
| 	u16 debounce_en; | ||||
| 	u16 ctrl; | ||||
| 	u16 wkup_en; | ||||
| 	u16 leveldetect0; | ||||
| 	u16 leveldetect1; | ||||
| 	u16 risingdetect; | ||||
| 	u16 fallingdetect; | ||||
| 	u16 irqctrl; | ||||
| 	u16 edgectrl1; | ||||
| 	u16 edgectrl2; | ||||
| 	u16 pinctrl; | ||||
| 
 | ||||
| 	bool irqenable_inv; | ||||
| }; | ||||
| @ -198,19 +202,20 @@ struct omap_gpio_platform_data { | ||||
| 	int bank_width;		/* GPIO bank width */ | ||||
| 	int bank_stride;	/* Only needed for omap1 MPUIO */ | ||||
| 	bool dbck_flag;		/* dbck required or not - True for OMAP3&4 */ | ||||
| 	bool loses_context;	/* whether the bank would ever lose context */ | ||||
| 	bool is_mpuio;		/* whether the bank is of type MPUIO */ | ||||
| 	u32 non_wakeup_gpios; | ||||
| 
 | ||||
| 	struct omap_gpio_reg_offs *regs; | ||||
| }; | ||||
| 
 | ||||
| /* TODO: Analyze removing gpio_bank_count usage from driver code */ | ||||
| extern int gpio_bank_count; | ||||
| 	/* Return context loss count due to PM states changing */ | ||||
| 	int (*get_context_loss_count)(struct device *dev); | ||||
| }; | ||||
| 
 | ||||
| extern void omap2_gpio_prepare_for_idle(int off_mode); | ||||
| extern void omap2_gpio_resume_after_idle(void); | ||||
| extern void omap_set_gpio_debounce(int gpio, int enable); | ||||
| extern void omap_set_gpio_debounce_time(int gpio, int enable); | ||||
| extern void omap_gpio_save_context(void); | ||||
| extern void omap_gpio_restore_context(void); | ||||
| /*-------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| /* Wrappers for "new style" GPIO calls, using the new infrastructure
 | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user