From f7c5cc456211da7d0b0aefd3886e57b313a0e00f Mon Sep 17 00:00:00 2001 From: Mika Westerberg Date: Wed, 29 Dec 2010 13:01:31 +0200 Subject: OMAP: GPIO: fix _set_gpio_triggering() for OMAP2+ In case on OMAP2+ we call set_24xx_gpio_triggering() instead of updating reg and l values. However, at the end of the function we perform a write: __raw_writel(l, reg); So on OMAP2+ we end up writing 0 to the bank->base which is not correct (typically this points to GPIO_REVISION register). Fix this by returning immediately after call to set_24xx_gpio_triggering(). Signed-off-by: Mika Westerberg Signed-off-by: Kevin Hilman --- arch/arm/plat-omap/gpio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/arm/plat-omap') diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 1f98e0b9484..60631f22779 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -718,7 +718,7 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger) case METHOD_GPIO_24XX: case METHOD_GPIO_44XX: set_24xx_gpio_triggering(bank, gpio, trigger); - break; + return 0; #endif default: goto bad; -- cgit v1.2.3-70-g09d2 From 1a9b5878671d417a856fdafe971306c99297b7f0 Mon Sep 17 00:00:00 2001 From: Felipe Balbi Date: Wed, 5 Jan 2011 08:46:18 +0200 Subject: arm: omap: gpio: don't access irq_desc array directly Instead of accessing the irq_desc array directly we can use irq_to_desc(irq). That will allow us to, if wanted, select SPARSE_IRQ and irq_descs will be added to a radix tree, instead of a array. Signed-off-by: Felipe Balbi Signed-off-by: Kevin Hilman --- arch/arm/plat-omap/gpio.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'arch/arm/plat-omap') diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 60631f22779..ccf2660f415 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -756,8 +756,10 @@ static int gpio_irq_type(unsigned irq, unsigned type) spin_lock_irqsave(&bank->lock, flags); retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type); if (retval == 0) { - irq_desc[irq].status &= ~IRQ_TYPE_SENSE_MASK; - irq_desc[irq].status |= type; + struct irq_desc *d = irq_to_desc(irq); + + d->status &= ~IRQ_TYPE_SENSE_MASK; + d->status |= type; } spin_unlock_irqrestore(&bank->lock, flags); @@ -1671,7 +1673,9 @@ static void __init omap_gpio_chip_init(struct gpio_bank *bank) for (j = bank->virtual_irq_start; j < bank->virtual_irq_start + bank_width; j++) { - lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class); + struct irq_desc *d = irq_to_desc(j); + + lockdep_set_class(&d->lock, &gpio_lock_class); set_irq_chip_data(j, bank); if (bank_is_mpuio(bank)) set_irq_chip(j, &mpuio_irq_chip); -- cgit v1.2.3-70-g09d2 From d7e08f1b8fcb85968c35ddecbf912bdab4cf2508 Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar Date: Wed, 5 Jan 2011 16:27:02 +0530 Subject: omap2plus: voltage: Trivial warning fix 'no return statement' Fix below build warnings CC arch/arm/mach-omap2/common.o CC arch/arm/mach-omap2/gpio.o In file included from arch/arm/plat-omap/include/plat/omap_hwmod.h:38, from arch/arm/mach-omap2/gpio.c:25: arch/arm/plat-omap/include/plat/voltage.h: In function 'omap_voltage_register_pmic': arch/arm/plat-omap/include/plat/voltage.h:137: warning: no return statement in function returning non-void CC arch/arm/mach-omap2/dma.o In file included from arch/arm/plat-omap/include/plat/omap_hwmod.h:38, from arch/arm/mach-omap2/dma.c:32: arch/arm/plat-omap/include/plat/voltage.h: In function 'omap_voltage_register_pmic': arch/arm/plat-omap/include/plat/voltage.h:137: warning: no return statement in function returning non-void CC arch/arm/mach-omap2/wd_timer.o In file included from arch/arm/plat-omap/include/plat/omap_hwmod.h:38, from arch/arm/mach-omap2/wd_timer.c:15: arch/arm/plat-omap/include/plat/voltage.h: In function 'omap_voltage_register_pmic': arch/arm/plat-omap/include/plat/voltage.h:137: warning: no return statement in function returning non-void CC arch/arm/mach-omap2/prm44xx.o CC arch/arm/mach-omap2/omap_hwmod.o In file included from arch/arm/plat-omap/include/plat/omap_hwmod.h:38, from arch/arm/mach-omap2/omap_hwmod.c:145: arch/arm/plat-omap/include/plat/voltage.h: In function 'omap_voltage_register_pmic': arch/arm/plat-omap/include/plat/voltage.h:137: warning: no return statement in function returning non-void CC arch/arm/mach-omap2/omap_hwmod_common_data.o In file included from arch/arm/plat-omap/include/plat/omap_hwmod.h:38, from arch/arm/mach-omap2/omap_hwmod_common_data.c:20: arch/arm/plat-omap/include/plat/voltage.h: In function 'omap_voltage_register_pmic': arch/arm/plat-omap/include/plat/voltage.h:137: warning: no return statement in function returning non-void The error is reported when omap2plus_defconfig built with CONFIG_PM disabled Signed-off-by: Santosh Shilimkar Cc: Thara Gopinath Cc: Kevin Hilman Cc: Nishanth Menon Signed-off-by: Kevin Hilman --- arch/arm/plat-omap/include/plat/voltage.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'arch/arm/plat-omap') diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h index 0ff123399f3..9943c667f8e 100644 --- a/arch/arm/plat-omap/include/plat/voltage.h +++ b/arch/arm/plat-omap/include/plat/voltage.h @@ -134,7 +134,10 @@ void omap_change_voltscale_method(struct voltagedomain *voltdm, int omap_voltage_late_init(void); #else static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm, - struct omap_volt_pmic_info *pmic_info) {} + struct omap_volt_pmic_info *pmic_info) +{ + return -EINVAL; +} static inline void omap_change_voltscale_method(struct voltagedomain *voltdm, int voltscale_method) {} static inline int omap_voltage_late_init(void) -- cgit v1.2.3-70-g09d2 From dd361b6ff6de54f628e55a39b8667108589c74bf Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar Date: Wed, 5 Jan 2011 16:27:03 +0530 Subject: omap2plus: voltage: Trivial linking fix 'undefined reference' LD init/built-in.o LD .tmp_vmlinux1 arch/arm/mach-omap2/built-in.o: In function `omap2_set_init_voltage': arch/arm/mach-omap2/pm.c:181: undefined reference to `omap_voltage_domain_lookup' arch/arm/mach-omap2/built-in.o: In function `omap4_twl_init': arch/arm/mach-omap2/omap_twl.c:244: undefined reference to `omap_voltage_domain_lookup' arch/arm/mach-omap2/omap_twl.c:247: undefined reference to `omap_voltage_domain_lookup' arch/arm/mach-omap2/omap_twl.c:250: undefined reference to `omap_voltage_domain_lookup' make: *** [.tmp_vmlinux1] Error 1 The error is reported when omap2plus_defconfig built with CONFIG_PM disabled Signed-off-by: Santosh Shilimkar Cc: Thara Gopinath Cc: Kevin Hilman Cc: Nishanth Menon Signed-off-by: Kevin Hilman --- arch/arm/plat-omap/include/plat/voltage.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'arch/arm/plat-omap') diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h index 9943c667f8e..4b02227e409 100644 --- a/arch/arm/plat-omap/include/plat/voltage.h +++ b/arch/arm/plat-omap/include/plat/voltage.h @@ -65,9 +65,6 @@ struct voltagedomain { char *name; }; -/* API to get the voltagedomain pointer */ -struct voltagedomain *omap_voltage_domain_lookup(char *name); - /** * struct omap_volt_data - Omap voltage specific data. * @voltage_nominal: The possible voltage value in uV @@ -131,6 +128,9 @@ int omap_voltage_register_pmic(struct voltagedomain *voltdm, struct omap_volt_pmic_info *pmic_info); void omap_change_voltscale_method(struct voltagedomain *voltdm, int voltscale_method); +/* API to get the voltagedomain pointer */ +struct voltagedomain *omap_voltage_domain_lookup(char *name); + int omap_voltage_late_init(void); #else static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm, @@ -144,6 +144,10 @@ static inline int omap_voltage_late_init(void) { return -EINVAL; } +static inline struct voltagedomain *omap_voltage_domain_lookup(char *name) +{ + return ERR_PTR(-EINVAL); +} #endif #endif -- cgit v1.2.3-70-g09d2 From faacebc50902d367071e788c6586882a32bf09f2 Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar Date: Wed, 5 Jan 2011 16:27:04 +0530 Subject: omap2plus: voltage: Trivial linking fix for 'EINVAL' undeclared CC arch/arm/mach-omap2/omap_hwmod_common_data.o In file included from arch/arm/plat-omap/include/plat/omap_hwmod.h:38, from arch/arm/mach-omap2/omap_hwmod_common_data.c:20: arch/arm/plat-omap/include/plat/voltage.h: In function 'omap_voltage_late_init': arch/arm/plat-omap/include/plat/voltage.h:145: error: 'EINVAL' undeclared (first use in this function) arch/arm/plat-omap/include/plat/voltage.h:145: error: (Each undeclared identifier is reported only once arch/arm/plat-omap/include/plat/voltage.h:145: error: for each function it appears in.) make[1]: *** [arch/arm/mach-omap2/omap_hwmod_common_data.o] Error 1 make: *** [arch/arm/mach-omap2] Error 2 The error is reported when omap2plus_defconfig built with CONFIG_PM disabled Signed-off-by: Santosh Shilimkar Cc: Thara Gopinath Cc: Kevin Hilman Cc: Nishanth Menon Signed-off-by: Kevin Hilman --- arch/arm/plat-omap/include/plat/voltage.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'arch/arm/plat-omap') diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h index 4b02227e409..5bd204e55c3 100644 --- a/arch/arm/plat-omap/include/plat/voltage.h +++ b/arch/arm/plat-omap/include/plat/voltage.h @@ -14,6 +14,8 @@ #ifndef __ARCH_ARM_MACH_OMAP2_VOLTAGE_H #define __ARCH_ARM_MACH_OMAP2_VOLTAGE_H +#include + #define VOLTSCALE_VPFORCEUPDATE 1 #define VOLTSCALE_VCBYPASS 2 -- cgit v1.2.3-70-g09d2