aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-12-09 17:38:28 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-09 17:38:28 -0500
commit6cd94d5e57ab97ddd672b707ab4bb639672c1727 (patch)
treeb1b301b16433d4deab6bd52e81d04a7b58c239d3 /arch/arm/mach-pxa
parent6c9e92476bc924ede6d6d2f0bfed2c06ae148d29 (diff)
parent842f7d2c4d392c0571cf72e3eaca26742bebbd1e (diff)
Merge tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC platform changes from Arnd Bergmann: "New and updated SoC support, notable changes include: - bcm: brcmstb SMP support initial iproc/cygnus support - exynos: Exynos4415 SoC support PMU and suspend support for Exynos5420 PMU support for Exynos3250 pm related maintenance - imx: new LS1021A SoC support vybrid 610 global timer support - integrator: convert to using multiplatform configuration - mediatek: earlyprintk support for mt8127/mt8135 - meson: meson8 soc and l2 cache controller support - mvebu: Armada 38x CPU hotplug support drop support for prerelease Armada 375 Z1 stepping extended suspend support, now works on Armada 370/XP - omap: hwmod related maintenance prcm cleanup - pxa: initial pxa27x DT handling - rockchip: SMP support for rk3288 add cpu frequency scaling support - shmobile: r8a7740 power domain support various small restart, timer, pci apmu changes - sunxi: Allwinner A80 (sun9i) earlyprintk support - ux500: power domain support Overall, a significant chunk of changes, coming mostly from the usual suspects: omap, shmobile, samsung and mvebu, all of which already contain a lot of platform specific code in arch/arm" * tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (187 commits) ARM: mvebu: use the cpufreq-dt platform_data for independent clocks soc: integrator: Add terminating entry for integrator_cm_match ARM: mvebu: add SDRAM controller description for Armada XP ARM: mvebu: adjust mbus controller description on Armada 370/XP ARM: mvebu: add suspend/resume DT information for Armada XP GP ARM: mvebu: synchronize secondary CPU clocks on resume ARM: mvebu: make sure MMU is disabled in armada_370_xp_cpu_resume ARM: mvebu: Armada XP GP specific suspend/resume code ARM: mvebu: reserve the first 10 KB of each memory bank for suspend/resume ARM: mvebu: implement suspend/resume support for Armada XP clk: mvebu: add suspend/resume for gatable clocks bus: mvebu-mbus: provide a mechanism to save SDRAM window configuration bus: mvebu-mbus: suspend/resume support clocksource: time-armada-370-xp: add suspend/resume support irqchip: armada-370-xp: Add suspend/resume support ARM: add lolevel debug support for asm9260 ARM: add mach-asm9260 ARM: EXYNOS: use u8 for val[] in struct exynos_pmu_conf power: reset: imx-snvs-poweroff: add power off driver for i.mx6 ARM: imx: temporarily remove CONFIG_SOC_FSL from LS1021A ...
Diffstat (limited to 'arch/arm/mach-pxa')
-rw-r--r--arch/arm/mach-pxa/Kconfig11
-rw-r--r--arch/arm/mach-pxa/Makefile1
-rw-r--r--arch/arm/mach-pxa/em-x270.c4
-rw-r--r--arch/arm/mach-pxa/generic.h65
-rw-r--r--arch/arm/mach-pxa/gumstix.c3
-rw-r--r--arch/arm/mach-pxa/include/mach/pxa25x.h8
-rw-r--r--arch/arm/mach-pxa/include/mach/pxa27x.h4
-rw-r--r--arch/arm/mach-pxa/include/mach/pxa3xx.h5
-rw-r--r--arch/arm/mach-pxa/mfp-pxa2xx.c12
-rw-r--r--arch/arm/mach-pxa/poodle.c2
-rw-r--r--arch/arm/mach-pxa/pxa-dt.c18
-rw-r--r--arch/arm/mach-pxa/pxa27x.c6
-rw-r--r--arch/arm/mach-pxa/pxa3xx-ulpi.c6
-rw-r--r--arch/arm/mach-pxa/raumfeld.c26
-rw-r--r--arch/arm/mach-pxa/tosa.c41
15 files changed, 107 insertions, 105 deletions
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index e6690a44917d..83efe914bf7d 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -4,6 +4,17 @@ menu "Intel PXA2xx/PXA3xx Implementations"
4 4
5comment "Intel/Marvell Dev Platforms (sorted by hardware release time)" 5comment "Intel/Marvell Dev Platforms (sorted by hardware release time)"
6 6
7config MACH_PXA27X_DT
8 bool "Support PXA27x platforms from device tree"
9 select CPU_PXA27x
10 select POWER_SUPPLY
11 select PXA27x
12 select USE_OF
13 help
14 Include support for Marvell PXA27x based platforms using
15 the device tree. Needn't select any other machine while
16 MACH_PXA27X_DT is enabled.
17
7config MACH_PXA3XX_DT 18config MACH_PXA3XX_DT
8 bool "Support PXA3xx platforms from device tree" 19 bool "Support PXA3xx platforms from device tree"
9 select CPU_PXA300 20 select CPU_PXA300
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index 2fe1824c6dcb..eb0bf7678a99 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_CPU_PXA930) += pxa930.o
21 21
22# Device Tree support 22# Device Tree support
23obj-$(CONFIG_MACH_PXA3XX_DT) += pxa-dt.o 23obj-$(CONFIG_MACH_PXA3XX_DT) += pxa-dt.o
24obj-$(CONFIG_MACH_PXA27X_DT) += pxa-dt.o
24 25
25# Intel/Marvell Dev Platforms 26# Intel/Marvell Dev Platforms
26obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o 27obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c
index 6915a9f6b3a3..51531ecffca8 100644
--- a/arch/arm/mach-pxa/em-x270.c
+++ b/arch/arm/mach-pxa/em-x270.c
@@ -378,7 +378,7 @@ static void __init em_x270_init_nand(void)
378 378
379 err = gpio_request(GPIO11_NAND_CS, "NAND CS"); 379 err = gpio_request(GPIO11_NAND_CS, "NAND CS");
380 if (err) { 380 if (err) {
381 pr_warning("EM-X270: failed to request NAND CS gpio\n"); 381 pr_warn("EM-X270: failed to request NAND CS gpio\n");
382 return; 382 return;
383 } 383 }
384 384
@@ -386,7 +386,7 @@ static void __init em_x270_init_nand(void)
386 386
387 err = gpio_request(nand_rb, "NAND R/B"); 387 err = gpio_request(nand_rb, "NAND R/B");
388 if (err) { 388 if (err) {
389 pr_warning("EM-X270: failed to request NAND R/B gpio\n"); 389 pr_warn("EM-X270: failed to request NAND R/B gpio\n");
390 gpio_free(GPIO11_NAND_CS); 390 gpio_free(GPIO11_NAND_CS);
391 return; 391 return;
392 } 392 }
diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h
index 8963984d1f43..7a9fa1aa4e41 100644
--- a/arch/arm/mach-pxa/generic.h
+++ b/arch/arm/mach-pxa/generic.h
@@ -13,11 +13,11 @@
13 13
14struct irq_data; 14struct irq_data;
15 15
16extern void pxa_timer_init(void);
17
18extern void __init pxa_map_io(void);
19
20extern unsigned int get_clk_frequency_khz(int info); 16extern unsigned int get_clk_frequency_khz(int info);
17extern void __init pxa_dt_irq_init(int (*fn)(struct irq_data *,
18 unsigned int));
19extern void __init pxa_map_io(void);
20extern void pxa_timer_init(void);
21 21
22#define SET_BANK(__nr,__start,__size) \ 22#define SET_BANK(__nr,__start,__size) \
23 mi->bank[__nr].start = (__start), \ 23 mi->bank[__nr].start = (__start), \
@@ -25,6 +25,43 @@ extern unsigned int get_clk_frequency_khz(int info);
25 25
26#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) 26#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
27 27
28#define pxa25x_handle_irq icip_handle_irq
29extern void __init pxa25x_init_irq(void);
30extern void __init pxa25x_map_io(void);
31extern void __init pxa26x_init_irq(void);
32
33#define pxa27x_handle_irq ichp_handle_irq
34extern void __init pxa27x_dt_init_irq(void);
35extern unsigned pxa27x_get_clk_frequency_khz(int);
36extern void __init pxa27x_init_irq(void);
37extern void __init pxa27x_map_io(void);
38
39#define pxa3xx_handle_irq ichp_handle_irq
40extern void __init pxa3xx_dt_init_irq(void);
41extern void __init pxa3xx_init_irq(void);
42extern void __init pxa3xx_map_io(void);
43
44extern struct syscore_ops pxa_irq_syscore_ops;
45extern struct syscore_ops pxa2xx_mfp_syscore_ops;
46extern struct syscore_ops pxa3xx_mfp_syscore_ops;
47
48void __init pxa_set_ffuart_info(void *info);
49void __init pxa_set_btuart_info(void *info);
50void __init pxa_set_stuart_info(void *info);
51void __init pxa_set_hwuart_info(void *info);
52
53void pxa_restart(enum reboot_mode, const char *);
54
55#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
56extern void pxa2xx_clear_reset_status(unsigned int);
57#else
58static inline void pxa2xx_clear_reset_status(unsigned int mask) {}
59#endif
60
61/*
62 * Once fully converted to the clock framework, all these functions should be
63 * removed, and replaced with a clk_get(NULL, "core").
64 */
28#ifdef CONFIG_PXA25x 65#ifdef CONFIG_PXA25x
29extern unsigned pxa25x_get_clk_frequency_khz(int); 66extern unsigned pxa25x_get_clk_frequency_khz(int);
30#else 67#else
@@ -32,30 +69,12 @@ extern unsigned pxa25x_get_clk_frequency_khz(int);
32#endif 69#endif
33 70
34#ifdef CONFIG_PXA27x 71#ifdef CONFIG_PXA27x
35extern unsigned pxa27x_get_clk_frequency_khz(int);
36#else 72#else
37#define pxa27x_get_clk_frequency_khz(x) (0) 73#define pxa27x_get_clk_frequency_khz(x) (0)
38#endif 74#endif
39 75
40#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
41extern void pxa2xx_clear_reset_status(unsigned int);
42#else
43static inline void pxa2xx_clear_reset_status(unsigned int mask) {}
44#endif
45
46#ifdef CONFIG_PXA3xx 76#ifdef CONFIG_PXA3xx
47extern unsigned pxa3xx_get_clk_frequency_khz(int); 77extern unsigned pxa3xx_get_clk_frequency_khz(int);
48#else 78#else
49#define pxa3xx_get_clk_frequency_khz(x) (0) 79#define pxa3xx_get_clk_frequency_khz(x) (0)
50#endif 80#endif
51
52extern struct syscore_ops pxa_irq_syscore_ops;
53extern struct syscore_ops pxa2xx_mfp_syscore_ops;
54extern struct syscore_ops pxa3xx_mfp_syscore_ops;
55
56void __init pxa_set_ffuart_info(void *info);
57void __init pxa_set_btuart_info(void *info);
58void __init pxa_set_stuart_info(void *info);
59void __init pxa_set_hwuart_info(void *info);
60
61void pxa_restart(enum reboot_mode, const char *);
diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c
index 00b92dad7b81..f6c76a3ee3b2 100644
--- a/arch/arm/mach-pxa/gumstix.c
+++ b/arch/arm/mach-pxa/gumstix.c
@@ -140,8 +140,7 @@ static void gumstix_setup_bt_clock(void)
140 int timeout = 500; 140 int timeout = 500;
141 141
142 if (!(OSCC & OSCC_OOK)) 142 if (!(OSCC & OSCC_OOK))
143 pr_warning("32kHz clock was not on. Bootloader may need to " 143 pr_warn("32kHz clock was not on. Bootloader may need to be updated\n");
144 "be updated\n");
145 else 144 else
146 return; 145 return;
147 146
diff --git a/arch/arm/mach-pxa/include/mach/pxa25x.h b/arch/arm/mach-pxa/include/mach/pxa25x.h
index 3ac0baac7350..5a341752e32c 100644
--- a/arch/arm/mach-pxa/include/mach/pxa25x.h
+++ b/arch/arm/mach-pxa/include/mach/pxa25x.h
@@ -6,12 +6,4 @@
6#include <mach/mfp-pxa25x.h> 6#include <mach/mfp-pxa25x.h>
7#include <mach/irqs.h> 7#include <mach/irqs.h>
8 8
9extern void __init pxa25x_map_io(void);
10extern void __init pxa25x_init_irq(void);
11#ifdef CONFIG_CPU_PXA26x
12extern void __init pxa26x_init_irq(void);
13#endif
14
15#define pxa25x_handle_irq icip_handle_irq
16
17#endif /* __MACH_PXA25x_H */ 9#endif /* __MACH_PXA25x_H */
diff --git a/arch/arm/mach-pxa/include/mach/pxa27x.h b/arch/arm/mach-pxa/include/mach/pxa27x.h
index 7cff640582b8..599b925a657c 100644
--- a/arch/arm/mach-pxa/include/mach/pxa27x.h
+++ b/arch/arm/mach-pxa/include/mach/pxa27x.h
@@ -19,11 +19,7 @@
19#define ARB_CORE_PARK (1<<24) /* Be parked with core when idle */ 19#define ARB_CORE_PARK (1<<24) /* Be parked with core when idle */
20#define ARB_LOCK_FLAG (1<<23) /* Only Locking masters gain access to the bus */ 20#define ARB_LOCK_FLAG (1<<23) /* Only Locking masters gain access to the bus */
21 21
22extern void __init pxa27x_map_io(void);
23extern void __init pxa27x_init_irq(void);
24extern int __init pxa27x_set_pwrmode(unsigned int mode); 22extern int __init pxa27x_set_pwrmode(unsigned int mode);
25extern void pxa27x_cpu_pm_enter(suspend_state_t state); 23extern void pxa27x_cpu_pm_enter(suspend_state_t state);
26 24
27#define pxa27x_handle_irq ichp_handle_irq
28
29#endif /* __MACH_PXA27x_H */ 25#endif /* __MACH_PXA27x_H */
diff --git a/arch/arm/mach-pxa/include/mach/pxa3xx.h b/arch/arm/mach-pxa/include/mach/pxa3xx.h
index 6dd7fa163e29..b4143fb6631f 100644
--- a/arch/arm/mach-pxa/include/mach/pxa3xx.h
+++ b/arch/arm/mach-pxa/include/mach/pxa3xx.h
@@ -5,9 +5,4 @@
5#include <mach/pxa3xx-regs.h> 5#include <mach/pxa3xx-regs.h>
6#include <mach/irqs.h> 6#include <mach/irqs.h>
7 7
8extern void __init pxa3xx_map_io(void);
9extern void __init pxa3xx_init_irq(void);
10
11#define pxa3xx_handle_irq ichp_handle_irq
12
13#endif /* __MACH_PXA3XX_H */ 8#endif /* __MACH_PXA3XX_H */
diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c
index ef0426a159d4..666b78972c40 100644
--- a/arch/arm/mach-pxa/mfp-pxa2xx.c
+++ b/arch/arm/mach-pxa/mfp-pxa2xx.c
@@ -93,8 +93,8 @@ static int __mfp_config_gpio(unsigned gpio, unsigned long c)
93 break; 93 break;
94 default: 94 default:
95 /* warning and fall through, treat as MFP_LPM_DEFAULT */ 95 /* warning and fall through, treat as MFP_LPM_DEFAULT */
96 pr_warning("%s: GPIO%d: unsupported low power mode\n", 96 pr_warn("%s: GPIO%d: unsupported low power mode\n",
97 __func__, gpio); 97 __func__, gpio);
98 break; 98 break;
99 } 99 }
100 100
@@ -107,14 +107,12 @@ static int __mfp_config_gpio(unsigned gpio, unsigned long c)
107 * configurations of those pins not able to wakeup 107 * configurations of those pins not able to wakeup
108 */ 108 */
109 if ((c & MFP_LPM_CAN_WAKEUP) && !gpio_desc[gpio].can_wakeup) { 109 if ((c & MFP_LPM_CAN_WAKEUP) && !gpio_desc[gpio].can_wakeup) {
110 pr_warning("%s: GPIO%d unable to wakeup\n", 110 pr_warn("%s: GPIO%d unable to wakeup\n", __func__, gpio);
111 __func__, gpio);
112 return -EINVAL; 111 return -EINVAL;
113 } 112 }
114 113
115 if ((c & MFP_LPM_CAN_WAKEUP) && is_out) { 114 if ((c & MFP_LPM_CAN_WAKEUP) && is_out) {
116 pr_warning("%s: output GPIO%d unable to wakeup\n", 115 pr_warn("%s: output GPIO%d unable to wakeup\n", __func__, gpio);
117 __func__, gpio);
118 return -EINVAL; 116 return -EINVAL;
119 } 117 }
120 118
@@ -126,7 +124,7 @@ static inline int __mfp_validate(int mfp)
126 int gpio = mfp_to_gpio(mfp); 124 int gpio = mfp_to_gpio(mfp);
127 125
128 if ((mfp > MFP_PIN_GPIO127) || !gpio_desc[gpio].valid) { 126 if ((mfp > MFP_PIN_GPIO127) || !gpio_desc[gpio].valid) {
129 pr_warning("%s: GPIO%d is invalid pin\n", __func__, gpio); 127 pr_warn("%s: GPIO%d is invalid pin\n", __func__, gpio);
130 return -1; 128 return -1;
131 } 129 }
132 130
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index 131991629116..29019beae591 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -446,7 +446,7 @@ static void __init poodle_init(void)
446 446
447 ret = platform_add_devices(devices, ARRAY_SIZE(devices)); 447 ret = platform_add_devices(devices, ARRAY_SIZE(devices));
448 if (ret) 448 if (ret)
449 pr_warning("poodle: Unable to register LoCoMo device\n"); 449 pr_warn("poodle: Unable to register LoCoMo device\n");
450 450
451 pxa_set_fb_info(&poodle_locomo_device.dev, &poodle_fb_info); 451 pxa_set_fb_info(&poodle_locomo_device.dev, &poodle_fb_info);
452 pxa_set_udc_info(&udc_info); 452 pxa_set_udc_info(&udc_info);
diff --git a/arch/arm/mach-pxa/pxa-dt.c b/arch/arm/mach-pxa/pxa-dt.c
index f6a2c4b1c1dc..7e0e5bd0c9de 100644
--- a/arch/arm/mach-pxa/pxa-dt.c
+++ b/arch/arm/mach-pxa/pxa-dt.c
@@ -15,13 +15,10 @@
15#include <asm/mach/arch.h> 15#include <asm/mach/arch.h>
16#include <asm/mach/time.h> 16#include <asm/mach/time.h>
17#include <mach/irqs.h> 17#include <mach/irqs.h>
18#include <mach/pxa3xx.h>
19 18
20#include "generic.h" 19#include "generic.h"
21 20
22#ifdef CONFIG_PXA3xx 21#ifdef CONFIG_PXA3xx
23extern void __init pxa3xx_dt_init_irq(void);
24
25static const struct of_dev_auxdata pxa3xx_auxdata_lookup[] __initconst = { 22static const struct of_dev_auxdata pxa3xx_auxdata_lookup[] __initconst = {
26 OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40100000, "pxa2xx-uart.0", NULL), 23 OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40100000, "pxa2xx-uart.0", NULL),
27 OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40200000, "pxa2xx-uart.1", NULL), 24 OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40200000, "pxa2xx-uart.1", NULL),
@@ -61,3 +58,18 @@ DT_MACHINE_START(PXA_DT, "Marvell PXA3xx (Device Tree Support)")
61 .dt_compat = pxa3xx_dt_board_compat, 58 .dt_compat = pxa3xx_dt_board_compat,
62MACHINE_END 59MACHINE_END
63#endif 60#endif
61
62#ifdef CONFIG_PXA27x
63static const char * const pxa27x_dt_board_compat[] __initconst = {
64 "marvell,pxa270",
65 NULL,
66};
67
68DT_MACHINE_START(PXA27X_DT, "Marvell PXA2xx (Device Tree Support)")
69 .map_io = pxa27x_map_io,
70 .init_irq = pxa27x_dt_init_irq,
71 .handle_irq = pxa27x_handle_irq,
72 .restart = pxa_restart,
73 .dt_compat = pxa27x_dt_board_compat,
74MACHINE_END
75#endif
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index b040d7d14888..af423a48c2e3 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -398,6 +398,12 @@ void __init pxa27x_init_irq(void)
398 pxa_init_irq(34, pxa27x_set_wake); 398 pxa_init_irq(34, pxa27x_set_wake);
399} 399}
400 400
401void __init pxa27x_dt_init_irq(void)
402{
403 if (IS_ENABLED(CONFIG_OF))
404 pxa_dt_irq_init(pxa27x_set_wake);
405}
406
401static struct map_desc pxa27x_io_desc[] __initdata = { 407static struct map_desc pxa27x_io_desc[] __initdata = {
402 { /* Mem Ctl */ 408 { /* Mem Ctl */
403 .virtual = (unsigned long)SMEMC_VIRT, 409 .virtual = (unsigned long)SMEMC_VIRT,
diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c
index e329ccefd364..614003e8b081 100644
--- a/arch/arm/mach-pxa/pxa3xx-ulpi.c
+++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c
@@ -74,7 +74,7 @@ static int pxa310_ulpi_poll(void)
74 cpu_relax(); 74 cpu_relax();
75 } 75 }
76 76
77 pr_warning("%s: ULPI access timed out!\n", __func__); 77 pr_warn("%s: ULPI access timed out!\n", __func__);
78 78
79 return -ETIMEDOUT; 79 return -ETIMEDOUT;
80} 80}
@@ -84,7 +84,7 @@ static int pxa310_ulpi_read(struct usb_phy *otg, u32 reg)
84 int err; 84 int err;
85 85
86 if (pxa310_ulpi_get_phymode() != SYNCH) { 86 if (pxa310_ulpi_get_phymode() != SYNCH) {
87 pr_warning("%s: PHY is not in SYNCH mode!\n", __func__); 87 pr_warn("%s: PHY is not in SYNCH mode!\n", __func__);
88 return -EBUSY; 88 return -EBUSY;
89 } 89 }
90 90
@@ -101,7 +101,7 @@ static int pxa310_ulpi_read(struct usb_phy *otg, u32 reg)
101static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg) 101static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg)
102{ 102{
103 if (pxa310_ulpi_get_phymode() != SYNCH) { 103 if (pxa310_ulpi_get_phymode() != SYNCH) {
104 pr_warning("%s: PHY is not in SYNCH mode!\n", __func__); 104 pr_warn("%s: PHY is not in SYNCH mode!\n", __func__);
105 return -EBUSY; 105 return -EBUSY;
106 } 106 }
107 107
diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c
index 8386dc30b3e4..a762b23ac830 100644
--- a/arch/arm/mach-pxa/raumfeld.c
+++ b/arch/arm/mach-pxa/raumfeld.c
@@ -521,7 +521,7 @@ static void __init raumfeld_w1_init(void)
521 "W1 external pullup enable"); 521 "W1 external pullup enable");
522 522
523 if (ret < 0) 523 if (ret < 0)
524 pr_warning("Unable to request GPIO_W1_PULLUP_ENABLE\n"); 524 pr_warn("Unable to request GPIO_W1_PULLUP_ENABLE\n");
525 else 525 else
526 gpio_direction_output(GPIO_W1_PULLUP_ENABLE, 0); 526 gpio_direction_output(GPIO_W1_PULLUP_ENABLE, 0);
527 527
@@ -600,7 +600,7 @@ static void __init raumfeld_lcd_init(void)
600 600
601 ret = gpio_request(GPIO_TFT_VA_EN, "display VA enable"); 601 ret = gpio_request(GPIO_TFT_VA_EN, "display VA enable");
602 if (ret < 0) 602 if (ret < 0)
603 pr_warning("Unable to request GPIO_TFT_VA_EN\n"); 603 pr_warn("Unable to request GPIO_TFT_VA_EN\n");
604 else 604 else
605 gpio_direction_output(GPIO_TFT_VA_EN, 1); 605 gpio_direction_output(GPIO_TFT_VA_EN, 1);
606 606
@@ -608,7 +608,7 @@ static void __init raumfeld_lcd_init(void)
608 608
609 ret = gpio_request(GPIO_DISPLAY_ENABLE, "display enable"); 609 ret = gpio_request(GPIO_DISPLAY_ENABLE, "display enable");
610 if (ret < 0) 610 if (ret < 0)
611 pr_warning("Unable to request GPIO_DISPLAY_ENABLE\n"); 611 pr_warn("Unable to request GPIO_DISPLAY_ENABLE\n");
612 else 612 else
613 gpio_direction_output(GPIO_DISPLAY_ENABLE, 1); 613 gpio_direction_output(GPIO_DISPLAY_ENABLE, 1);
614 614
@@ -814,17 +814,17 @@ static void __init raumfeld_power_init(void)
814 /* Set PEN2 high to enable maximum charge current */ 814 /* Set PEN2 high to enable maximum charge current */
815 ret = gpio_request(GPIO_CHRG_PEN2, "CHRG_PEN2"); 815 ret = gpio_request(GPIO_CHRG_PEN2, "CHRG_PEN2");
816 if (ret < 0) 816 if (ret < 0)
817 pr_warning("Unable to request GPIO_CHRG_PEN2\n"); 817 pr_warn("Unable to request GPIO_CHRG_PEN2\n");
818 else 818 else
819 gpio_direction_output(GPIO_CHRG_PEN2, 1); 819 gpio_direction_output(GPIO_CHRG_PEN2, 1);
820 820
821 ret = gpio_request(GPIO_CHARGE_DC_OK, "CABLE_DC_OK"); 821 ret = gpio_request(GPIO_CHARGE_DC_OK, "CABLE_DC_OK");
822 if (ret < 0) 822 if (ret < 0)
823 pr_warning("Unable to request GPIO_CHARGE_DC_OK\n"); 823 pr_warn("Unable to request GPIO_CHARGE_DC_OK\n");
824 824
825 ret = gpio_request(GPIO_CHARGE_USB_SUSP, "CHARGE_USB_SUSP"); 825 ret = gpio_request(GPIO_CHARGE_USB_SUSP, "CHARGE_USB_SUSP");
826 if (ret < 0) 826 if (ret < 0)
827 pr_warning("Unable to request GPIO_CHARGE_USB_SUSP\n"); 827 pr_warn("Unable to request GPIO_CHARGE_USB_SUSP\n");
828 else 828 else
829 gpio_direction_output(GPIO_CHARGE_USB_SUSP, 0); 829 gpio_direction_output(GPIO_CHARGE_USB_SUSP, 0);
830 830
@@ -976,19 +976,19 @@ static void __init raumfeld_audio_init(void)
976 976
977 ret = gpio_request(GPIO_CODEC_RESET, "cs4270 reset"); 977 ret = gpio_request(GPIO_CODEC_RESET, "cs4270 reset");
978 if (ret < 0) 978 if (ret < 0)
979 pr_warning("unable to request GPIO_CODEC_RESET\n"); 979 pr_warn("unable to request GPIO_CODEC_RESET\n");
980 else 980 else
981 gpio_direction_output(GPIO_CODEC_RESET, 1); 981 gpio_direction_output(GPIO_CODEC_RESET, 1);
982 982
983 ret = gpio_request(GPIO_SPDIF_RESET, "ak4104 s/pdif reset"); 983 ret = gpio_request(GPIO_SPDIF_RESET, "ak4104 s/pdif reset");
984 if (ret < 0) 984 if (ret < 0)
985 pr_warning("unable to request GPIO_SPDIF_RESET\n"); 985 pr_warn("unable to request GPIO_SPDIF_RESET\n");
986 else 986 else
987 gpio_direction_output(GPIO_SPDIF_RESET, 1); 987 gpio_direction_output(GPIO_SPDIF_RESET, 1);
988 988
989 ret = gpio_request(GPIO_MCLK_RESET, "MCLK reset"); 989 ret = gpio_request(GPIO_MCLK_RESET, "MCLK reset");
990 if (ret < 0) 990 if (ret < 0)
991 pr_warning("unable to request GPIO_MCLK_RESET\n"); 991 pr_warn("unable to request GPIO_MCLK_RESET\n");
992 else 992 else
993 gpio_direction_output(GPIO_MCLK_RESET, 1); 993 gpio_direction_output(GPIO_MCLK_RESET, 1);
994 994
@@ -1019,20 +1019,20 @@ static void __init raumfeld_common_init(void)
1019 1019
1020 ret = gpio_request(GPIO_W2W_RESET, "Wi2Wi reset"); 1020 ret = gpio_request(GPIO_W2W_RESET, "Wi2Wi reset");
1021 if (ret < 0) 1021 if (ret < 0)
1022 pr_warning("Unable to request GPIO_W2W_RESET\n"); 1022 pr_warn("Unable to request GPIO_W2W_RESET\n");
1023 else 1023 else
1024 gpio_direction_output(GPIO_W2W_RESET, 0); 1024 gpio_direction_output(GPIO_W2W_RESET, 0);
1025 1025
1026 ret = gpio_request(GPIO_W2W_PDN, "Wi2Wi powerup"); 1026 ret = gpio_request(GPIO_W2W_PDN, "Wi2Wi powerup");
1027 if (ret < 0) 1027 if (ret < 0)
1028 pr_warning("Unable to request GPIO_W2W_PDN\n"); 1028 pr_warn("Unable to request GPIO_W2W_PDN\n");
1029 else 1029 else
1030 gpio_direction_output(GPIO_W2W_PDN, 0); 1030 gpio_direction_output(GPIO_W2W_PDN, 0);
1031 1031
1032 /* this can be used to switch off the device */ 1032 /* this can be used to switch off the device */
1033 ret = gpio_request(GPIO_SHUTDOWN_SUPPLY, "supply shutdown"); 1033 ret = gpio_request(GPIO_SHUTDOWN_SUPPLY, "supply shutdown");
1034 if (ret < 0) 1034 if (ret < 0)
1035 pr_warning("Unable to request GPIO_SHUTDOWN_SUPPLY\n"); 1035 pr_warn("Unable to request GPIO_SHUTDOWN_SUPPLY\n");
1036 else 1036 else
1037 gpio_direction_output(GPIO_SHUTDOWN_SUPPLY, 0); 1037 gpio_direction_output(GPIO_SHUTDOWN_SUPPLY, 0);
1038 1038
@@ -1051,7 +1051,7 @@ static void __init raumfeld_controller_init(void)
1051 1051
1052 ret = gpio_request(GPIO_SHUTDOWN_BATT, "battery shutdown"); 1052 ret = gpio_request(GPIO_SHUTDOWN_BATT, "battery shutdown");
1053 if (ret < 0) 1053 if (ret < 0)
1054 pr_warning("Unable to request GPIO_SHUTDOWN_BATT\n"); 1054 pr_warn("Unable to request GPIO_SHUTDOWN_BATT\n");
1055 else 1055 else
1056 gpio_direction_output(GPIO_SHUTDOWN_BATT, 0); 1056 gpio_direction_output(GPIO_SHUTDOWN_BATT, 0);
1057 1057
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index c158a6e3e0aa..7780d1faa06f 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -30,7 +30,7 @@
30#include <linux/gpio_keys.h> 30#include <linux/gpio_keys.h>
31#include <linux/input.h> 31#include <linux/input.h>
32#include <linux/gpio.h> 32#include <linux/gpio.h>
33#include <linux/pda_power.h> 33#include <linux/power/gpio-charger.h>
34#include <linux/spi/spi.h> 34#include <linux/spi/spi.h>
35#include <linux/spi/pxa2xx_spi.h> 35#include <linux/spi/pxa2xx_spi.h>
36#include <linux/input/matrix_keypad.h> 36#include <linux/input/matrix_keypad.h>
@@ -361,44 +361,17 @@ static struct pxaficp_platform_data tosa_ficp_platform_data = {
361/* 361/*
362 * Tosa AC IN 362 * Tosa AC IN
363 */ 363 */
364static int tosa_power_init(struct device *dev)
365{
366 int ret = gpio_request(TOSA_GPIO_AC_IN, "ac in");
367 if (ret)
368 goto err_gpio_req;
369
370 ret = gpio_direction_input(TOSA_GPIO_AC_IN);
371 if (ret)
372 goto err_gpio_in;
373
374 return 0;
375
376err_gpio_in:
377 gpio_free(TOSA_GPIO_AC_IN);
378err_gpio_req:
379 return ret;
380}
381
382static void tosa_power_exit(struct device *dev)
383{
384 gpio_free(TOSA_GPIO_AC_IN);
385}
386
387static int tosa_power_ac_online(void)
388{
389 return gpio_get_value(TOSA_GPIO_AC_IN) == 0;
390}
391
392static char *tosa_ac_supplied_to[] = { 364static char *tosa_ac_supplied_to[] = {
393 "main-battery", 365 "main-battery",
394 "backup-battery", 366 "backup-battery",
395 "jacket-battery", 367 "jacket-battery",
396}; 368};
397 369
398static struct pda_power_pdata tosa_power_data = { 370static struct gpio_charger_platform_data tosa_power_data = {
399 .init = tosa_power_init, 371 .name = "charger",
400 .is_ac_online = tosa_power_ac_online, 372 .type = POWER_SUPPLY_TYPE_MAINS,
401 .exit = tosa_power_exit, 373 .gpio = TOSA_GPIO_AC_IN,
374 .gpio_active_low = 1,
402 .supplied_to = tosa_ac_supplied_to, 375 .supplied_to = tosa_ac_supplied_to,
403 .num_supplicants = ARRAY_SIZE(tosa_ac_supplied_to), 376 .num_supplicants = ARRAY_SIZE(tosa_ac_supplied_to),
404}; 377};
@@ -415,7 +388,7 @@ static struct resource tosa_power_resource[] = {
415}; 388};
416 389
417static struct platform_device tosa_power_device = { 390static struct platform_device tosa_power_device = {
418 .name = "pda-power", 391 .name = "gpio-charger",
419 .id = -1, 392 .id = -1,
420 .dev.platform_data = &tosa_power_data, 393 .dev.platform_data = &tosa_power_data,
421 .resource = tosa_power_resource, 394 .resource = tosa_power_resource,