diff options
author | Olof Johansson <olof@lixom.net> | 2012-11-26 00:34:34 -0500 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2012-11-26 00:34:34 -0500 |
commit | 0f9cb211ba5db93d488fe6b154138231fdd0e22d (patch) | |
tree | 293871b042e9ebc49b1d783f1b110eef541ddc97 /arch/arm | |
parent | 007108a2279123ad6639b6c653ad1a731febb60f (diff) | |
parent | 9489e9dcae718d5fde988e4a684a0f55b5f94d17 (diff) |
Merge tag 'v3.7-rc7' into next/cleanup
Merging in mainline back to next/cleanup since it has collected a few
conflicts between fixes going upstream and some of the cleanup patches.
Git doesn't auto-resolve some of them, and they're mostly noise so let's
take care of it locally.
Conflicts are in:
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
arch/arm/plat-omap/i2c.c
drivers/video/omap2/dss/dss.c
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm')
26 files changed, 236 insertions, 62 deletions
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index f2aa09eb658e..9137df539b61 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile | |||
@@ -33,7 +33,7 @@ ifeq ($(CONFIG_XIP_KERNEL),y) | |||
33 | 33 | ||
34 | $(obj)/xipImage: vmlinux FORCE | 34 | $(obj)/xipImage: vmlinux FORCE |
35 | $(call if_changed,objcopy) | 35 | $(call if_changed,objcopy) |
36 | $(kecho) ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))' | 36 | @$(kecho) ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))' |
37 | 37 | ||
38 | $(obj)/Image $(obj)/zImage: FORCE | 38 | $(obj)/Image $(obj)/zImage: FORCE |
39 | @echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)' | 39 | @echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)' |
@@ -48,14 +48,14 @@ $(obj)/xipImage: FORCE | |||
48 | 48 | ||
49 | $(obj)/Image: vmlinux FORCE | 49 | $(obj)/Image: vmlinux FORCE |
50 | $(call if_changed,objcopy) | 50 | $(call if_changed,objcopy) |
51 | $(kecho) ' Kernel: $@ is ready' | 51 | @$(kecho) ' Kernel: $@ is ready' |
52 | 52 | ||
53 | $(obj)/compressed/vmlinux: $(obj)/Image FORCE | 53 | $(obj)/compressed/vmlinux: $(obj)/Image FORCE |
54 | $(Q)$(MAKE) $(build)=$(obj)/compressed $@ | 54 | $(Q)$(MAKE) $(build)=$(obj)/compressed $@ |
55 | 55 | ||
56 | $(obj)/zImage: $(obj)/compressed/vmlinux FORCE | 56 | $(obj)/zImage: $(obj)/compressed/vmlinux FORCE |
57 | $(call if_changed,objcopy) | 57 | $(call if_changed,objcopy) |
58 | $(kecho) ' Kernel: $@ is ready' | 58 | @$(kecho) ' Kernel: $@ is ready' |
59 | 59 | ||
60 | endif | 60 | endif |
61 | 61 | ||
@@ -90,7 +90,7 @@ fi | |||
90 | $(obj)/uImage: $(obj)/zImage FORCE | 90 | $(obj)/uImage: $(obj)/zImage FORCE |
91 | @$(check_for_multiple_loadaddr) | 91 | @$(check_for_multiple_loadaddr) |
92 | $(call if_changed,uimage) | 92 | $(call if_changed,uimage) |
93 | $(kecho) ' Image $@ is ready' | 93 | @$(kecho) ' Image $@ is ready' |
94 | 94 | ||
95 | $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE | 95 | $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE |
96 | $(Q)$(MAKE) $(build)=$(obj)/bootp $@ | 96 | $(Q)$(MAKE) $(build)=$(obj)/bootp $@ |
@@ -98,7 +98,7 @@ $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE | |||
98 | 98 | ||
99 | $(obj)/bootpImage: $(obj)/bootp/bootp FORCE | 99 | $(obj)/bootpImage: $(obj)/bootp/bootp FORCE |
100 | $(call if_changed,objcopy) | 100 | $(call if_changed,objcopy) |
101 | $(kecho) ' Kernel: $@ is ready' | 101 | @$(kecho) ' Kernel: $@ is ready' |
102 | 102 | ||
103 | PHONY += initrd FORCE | 103 | PHONY += initrd FORCE |
104 | initrd: | 104 | initrd: |
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index b1497c7d7d68..df7f2270fc91 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi | |||
@@ -73,8 +73,8 @@ | |||
73 | 73 | ||
74 | pinmux: pinmux { | 74 | pinmux: pinmux { |
75 | compatible = "nvidia,tegra30-pinmux"; | 75 | compatible = "nvidia,tegra30-pinmux"; |
76 | reg = <0x70000868 0xd0 /* Pad control registers */ | 76 | reg = <0x70000868 0xd4 /* Pad control registers */ |
77 | 0x70003000 0x3e0>; /* Mux registers */ | 77 | 0x70003000 0x3e4>; /* Mux registers */ |
78 | }; | 78 | }; |
79 | 79 | ||
80 | serial@70006000 { | 80 | serial@70006000 { |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 1e122bcd7845..3cee0e6ea7c3 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
@@ -68,7 +68,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) | |||
68 | 68 | ||
69 | /* Enable overcurrent notification */ | 69 | /* Enable overcurrent notification */ |
70 | for (i = 0; i < data->ports; i++) { | 70 | for (i = 0; i < data->ports; i++) { |
71 | if (data->overcurrent_pin[i]) | 71 | if (gpio_is_valid(data->overcurrent_pin[i])) |
72 | at91_set_gpio_input(data->overcurrent_pin[i], 1); | 72 | at91_set_gpio_input(data->overcurrent_pin[i], 1); |
73 | } | 73 | } |
74 | 74 | ||
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index aa1e58729885..414bd855fb0c 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -72,7 +72,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) | |||
72 | 72 | ||
73 | /* Enable overcurrent notification */ | 73 | /* Enable overcurrent notification */ |
74 | for (i = 0; i < data->ports; i++) { | 74 | for (i = 0; i < data->ports; i++) { |
75 | if (data->overcurrent_pin[i]) | 75 | if (gpio_is_valid(data->overcurrent_pin[i])) |
76 | at91_set_gpio_input(data->overcurrent_pin[i], 1); | 76 | at91_set_gpio_input(data->overcurrent_pin[i], 1); |
77 | } | 77 | } |
78 | 78 | ||
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index b9487696b7be..cd604aad8e96 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
@@ -72,7 +72,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) | |||
72 | 72 | ||
73 | /* Enable overcurrent notification */ | 73 | /* Enable overcurrent notification */ |
74 | for (i = 0; i < data->ports; i++) { | 74 | for (i = 0; i < data->ports; i++) { |
75 | if (data->overcurrent_pin[i]) | 75 | if (gpio_is_valid(data->overcurrent_pin[i])) |
76 | at91_set_gpio_input(data->overcurrent_pin[i], 1); | 76 | at91_set_gpio_input(data->overcurrent_pin[i], 1); |
77 | } | 77 | } |
78 | 78 | ||
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index cb85da2eccea..9c61e59a2104 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
@@ -78,7 +78,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) | |||
78 | 78 | ||
79 | /* Enable overcurrent notification */ | 79 | /* Enable overcurrent notification */ |
80 | for (i = 0; i < data->ports; i++) { | 80 | for (i = 0; i < data->ports; i++) { |
81 | if (data->overcurrent_pin[i]) | 81 | if (gpio_is_valid(data->overcurrent_pin[i])) |
82 | at91_set_gpio_input(data->overcurrent_pin[i], 1); | 82 | at91_set_gpio_input(data->overcurrent_pin[i], 1); |
83 | } | 83 | } |
84 | 84 | ||
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index b1596072dcc2..fcd233cb33d2 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -1841,8 +1841,8 @@ static struct resource sha_resources[] = { | |||
1841 | .flags = IORESOURCE_MEM, | 1841 | .flags = IORESOURCE_MEM, |
1842 | }, | 1842 | }, |
1843 | [1] = { | 1843 | [1] = { |
1844 | .start = AT91SAM9G45_ID_AESTDESSHA, | 1844 | .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA, |
1845 | .end = AT91SAM9G45_ID_AESTDESSHA, | 1845 | .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA, |
1846 | .flags = IORESOURCE_IRQ, | 1846 | .flags = IORESOURCE_IRQ, |
1847 | }, | 1847 | }, |
1848 | }; | 1848 | }; |
@@ -1874,8 +1874,8 @@ static struct resource tdes_resources[] = { | |||
1874 | .flags = IORESOURCE_MEM, | 1874 | .flags = IORESOURCE_MEM, |
1875 | }, | 1875 | }, |
1876 | [1] = { | 1876 | [1] = { |
1877 | .start = AT91SAM9G45_ID_AESTDESSHA, | 1877 | .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA, |
1878 | .end = AT91SAM9G45_ID_AESTDESSHA, | 1878 | .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA, |
1879 | .flags = IORESOURCE_IRQ, | 1879 | .flags = IORESOURCE_IRQ, |
1880 | }, | 1880 | }, |
1881 | }; | 1881 | }; |
@@ -1910,8 +1910,8 @@ static struct resource aes_resources[] = { | |||
1910 | .flags = IORESOURCE_MEM, | 1910 | .flags = IORESOURCE_MEM, |
1911 | }, | 1911 | }, |
1912 | [1] = { | 1912 | [1] = { |
1913 | .start = AT91SAM9G45_ID_AESTDESSHA, | 1913 | .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA, |
1914 | .end = AT91SAM9G45_ID_AESTDESSHA, | 1914 | .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA, |
1915 | .flags = IORESOURCE_IRQ, | 1915 | .flags = IORESOURCE_IRQ, |
1916 | }, | 1916 | }, |
1917 | }; | 1917 | }; |
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c index cd0c8b1e1ecf..14e9947bad6e 100644 --- a/arch/arm/mach-davinci/dm644x.c +++ b/arch/arm/mach-davinci/dm644x.c | |||
@@ -713,8 +713,7 @@ static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type, | |||
713 | break; | 713 | break; |
714 | case VPBE_ENC_CUSTOM_TIMINGS: | 714 | case VPBE_ENC_CUSTOM_TIMINGS: |
715 | if (pclock <= 27000000) { | 715 | if (pclock <= 27000000) { |
716 | v |= DM644X_VPSS_MUXSEL_PLL2_MODE | | 716 | v |= DM644X_VPSS_DACCLKEN; |
717 | DM644X_VPSS_DACCLKEN; | ||
718 | writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL)); | 717 | writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL)); |
719 | } else { | 718 | } else { |
720 | /* | 719 | /* |
diff --git a/arch/arm/mach-exynos/dma.c b/arch/arm/mach-exynos/dma.c index 21d568b3b149..87e07d6fc615 100644 --- a/arch/arm/mach-exynos/dma.c +++ b/arch/arm/mach-exynos/dma.c | |||
@@ -275,6 +275,9 @@ static int __init exynos_dma_init(void) | |||
275 | exynos_pdma1_pdata.nr_valid_peri = | 275 | exynos_pdma1_pdata.nr_valid_peri = |
276 | ARRAY_SIZE(exynos4210_pdma1_peri); | 276 | ARRAY_SIZE(exynos4210_pdma1_peri); |
277 | exynos_pdma1_pdata.peri_id = exynos4210_pdma1_peri; | 277 | exynos_pdma1_pdata.peri_id = exynos4210_pdma1_peri; |
278 | |||
279 | if (samsung_rev() == EXYNOS4210_REV_0) | ||
280 | exynos_mdma1_device.res.start = EXYNOS4_PA_S_MDMA1; | ||
278 | } else if (soc_is_exynos4212() || soc_is_exynos4412()) { | 281 | } else if (soc_is_exynos4212() || soc_is_exynos4412()) { |
279 | exynos_pdma0_pdata.nr_valid_peri = | 282 | exynos_pdma0_pdata.nr_valid_peri = |
280 | ARRAY_SIZE(exynos4212_pdma0_peri); | 283 | ARRAY_SIZE(exynos4212_pdma0_peri); |
diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h index e7373311bfbc..872840b2ff45 100644 --- a/arch/arm/mach-exynos/include/mach/map.h +++ b/arch/arm/mach-exynos/include/mach/map.h | |||
@@ -90,6 +90,7 @@ | |||
90 | 90 | ||
91 | #define EXYNOS4_PA_MDMA0 0x10810000 | 91 | #define EXYNOS4_PA_MDMA0 0x10810000 |
92 | #define EXYNOS4_PA_MDMA1 0x12850000 | 92 | #define EXYNOS4_PA_MDMA1 0x12850000 |
93 | #define EXYNOS4_PA_S_MDMA1 0x12840000 | ||
93 | #define EXYNOS4_PA_PDMA0 0x12680000 | 94 | #define EXYNOS4_PA_PDMA0 0x12680000 |
94 | #define EXYNOS4_PA_PDMA1 0x12690000 | 95 | #define EXYNOS4_PA_PDMA1 0x12690000 |
95 | #define EXYNOS5_PA_MDMA0 0x10800000 | 96 | #define EXYNOS5_PA_MDMA0 0x10800000 |
diff --git a/arch/arm/mach-highbank/system.c b/arch/arm/mach-highbank/system.c index 82c27230d4a9..86e37cd9376c 100644 --- a/arch/arm/mach-highbank/system.c +++ b/arch/arm/mach-highbank/system.c | |||
@@ -28,6 +28,7 @@ void highbank_restart(char mode, const char *cmd) | |||
28 | hignbank_set_pwr_soft_reset(); | 28 | hignbank_set_pwr_soft_reset(); |
29 | 29 | ||
30 | scu_power_mode(scu_base_addr, SCU_PM_POWEROFF); | 30 | scu_power_mode(scu_base_addr, SCU_PM_POWEROFF); |
31 | cpu_do_idle(); | 31 | while (1) |
32 | cpu_do_idle(); | ||
32 | } | 33 | } |
33 | 34 | ||
diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c index 3c1b8ff9a0a6..cc49c7ae186e 100644 --- a/arch/arm/mach-imx/clk-gate2.c +++ b/arch/arm/mach-imx/clk-gate2.c | |||
@@ -112,7 +112,7 @@ struct clk *clk_register_gate2(struct device *dev, const char *name, | |||
112 | 112 | ||
113 | clk = clk_register(dev, &gate->hw); | 113 | clk = clk_register(dev, &gate->hw); |
114 | if (IS_ERR(clk)) | 114 | if (IS_ERR(clk)) |
115 | kfree(clk); | 115 | kfree(gate); |
116 | 116 | ||
117 | return clk; | 117 | return clk; |
118 | } | 118 | } |
diff --git a/arch/arm/mach-imx/ehci-imx25.c b/arch/arm/mach-imx/ehci-imx25.c index 27e40d17de99..134c190e3003 100644 --- a/arch/arm/mach-imx/ehci-imx25.c +++ b/arch/arm/mach-imx/ehci-imx25.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #define MX25_H1_SIC_SHIFT 21 | 30 | #define MX25_H1_SIC_SHIFT 21 |
31 | #define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT) | 31 | #define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT) |
32 | #define MX25_H1_PP_BIT (1 << 18) | 32 | #define MX25_H1_PP_BIT (1 << 18) |
33 | #define MX25_H1_PM_BIT (1 << 8) | 33 | #define MX25_H1_PM_BIT (1 << 16) |
34 | #define MX25_H1_IPPUE_UP_BIT (1 << 7) | 34 | #define MX25_H1_IPPUE_UP_BIT (1 << 7) |
35 | #define MX25_H1_IPPUE_DOWN_BIT (1 << 6) | 35 | #define MX25_H1_IPPUE_DOWN_BIT (1 << 6) |
36 | #define MX25_H1_TLL_BIT (1 << 5) | 36 | #define MX25_H1_TLL_BIT (1 << 5) |
diff --git a/arch/arm/mach-imx/ehci-imx35.c b/arch/arm/mach-imx/ehci-imx35.c index a596f709a937..554e7cccff53 100644 --- a/arch/arm/mach-imx/ehci-imx35.c +++ b/arch/arm/mach-imx/ehci-imx35.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #define MX35_H1_SIC_SHIFT 21 | 30 | #define MX35_H1_SIC_SHIFT 21 |
31 | #define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT) | 31 | #define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT) |
32 | #define MX35_H1_PP_BIT (1 << 18) | 32 | #define MX35_H1_PP_BIT (1 << 18) |
33 | #define MX35_H1_PM_BIT (1 << 8) | 33 | #define MX35_H1_PM_BIT (1 << 16) |
34 | #define MX35_H1_IPPUE_UP_BIT (1 << 7) | 34 | #define MX35_H1_IPPUE_UP_BIT (1 << 7) |
35 | #define MX35_H1_IPPUE_DOWN_BIT (1 << 6) | 35 | #define MX35_H1_IPPUE_DOWN_BIT (1 << 6) |
36 | #define MX35_H1_TLL_BIT (1 << 5) | 36 | #define MX35_H1_TLL_BIT (1 << 5) |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index cea5d5292628..0f24cb84ba5a 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
@@ -579,6 +579,11 @@ static void __init igep_wlan_bt_init(void) | |||
579 | } else | 579 | } else |
580 | return; | 580 | return; |
581 | 581 | ||
582 | /* Make sure that the GPIO pins are muxed correctly */ | ||
583 | omap_mux_init_gpio(igep_wlan_bt_gpios[0].gpio, OMAP_PIN_OUTPUT); | ||
584 | omap_mux_init_gpio(igep_wlan_bt_gpios[1].gpio, OMAP_PIN_OUTPUT); | ||
585 | omap_mux_init_gpio(igep_wlan_bt_gpios[2].gpio, OMAP_PIN_OUTPUT); | ||
586 | |||
582 | err = gpio_request_array(igep_wlan_bt_gpios, | 587 | err = gpio_request_array(igep_wlan_bt_gpios, |
583 | ARRAY_SIZE(igep_wlan_bt_gpios)); | 588 | ARRAY_SIZE(igep_wlan_bt_gpios)); |
584 | if (err) { | 589 | if (err) { |
diff --git a/arch/arm/mach-omap2/clockdomains44xx_data.c b/arch/arm/mach-omap2/clockdomains44xx_data.c index b56d06b48782..95192a062d5d 100644 --- a/arch/arm/mach-omap2/clockdomains44xx_data.c +++ b/arch/arm/mach-omap2/clockdomains44xx_data.c | |||
@@ -359,7 +359,7 @@ static struct clockdomain iss_44xx_clkdm = { | |||
359 | .clkdm_offs = OMAP4430_CM2_CAM_CAM_CDOFFS, | 359 | .clkdm_offs = OMAP4430_CM2_CAM_CAM_CDOFFS, |
360 | .wkdep_srcs = iss_wkup_sleep_deps, | 360 | .wkdep_srcs = iss_wkup_sleep_deps, |
361 | .sleepdep_srcs = iss_wkup_sleep_deps, | 361 | .sleepdep_srcs = iss_wkup_sleep_deps, |
362 | .flags = CLKDM_CAN_HWSUP_SWSUP, | 362 | .flags = CLKDM_CAN_SWSUP, |
363 | }; | 363 | }; |
364 | 364 | ||
365 | static struct clockdomain l3_dss_44xx_clkdm = { | 365 | static struct clockdomain l3_dss_44xx_clkdm = { |
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c index ad856092c06a..d246efd9f734 100644 --- a/arch/arm/mach-omap2/common-board-devices.c +++ b/arch/arm/mach-omap2/common-board-devices.c | |||
@@ -63,30 +63,36 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce, | |||
63 | struct spi_board_info *spi_bi = &ads7846_spi_board_info; | 63 | struct spi_board_info *spi_bi = &ads7846_spi_board_info; |
64 | int err; | 64 | int err; |
65 | 65 | ||
66 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); | 66 | /* |
67 | if (err) { | 67 | * If a board defines get_pendown_state() function, request the pendown |
68 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); | 68 | * GPIO and set the GPIO debounce time. |
69 | return; | 69 | * If a board does not define the get_pendown_state() function, then |
70 | } | 70 | * the ads7846 driver will setup the pendown GPIO itself. |
71 | */ | ||
72 | if (board_pdata && board_pdata->get_pendown_state) { | ||
73 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); | ||
74 | if (err) { | ||
75 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); | ||
76 | return; | ||
77 | } | ||
78 | |||
79 | if (gpio_debounce) | ||
80 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
71 | 81 | ||
72 | if (gpio_debounce) | 82 | gpio_export(gpio_pendown, 0); |
73 | gpio_set_debounce(gpio_pendown, gpio_debounce); | 83 | } |
74 | 84 | ||
75 | spi_bi->bus_num = bus_num; | 85 | spi_bi->bus_num = bus_num; |
76 | spi_bi->irq = gpio_to_irq(gpio_pendown); | 86 | spi_bi->irq = gpio_to_irq(gpio_pendown); |
77 | 87 | ||
88 | ads7846_config.gpio_pendown = gpio_pendown; | ||
89 | |||
78 | if (board_pdata) { | 90 | if (board_pdata) { |
79 | board_pdata->gpio_pendown = gpio_pendown; | 91 | board_pdata->gpio_pendown = gpio_pendown; |
92 | board_pdata->gpio_pendown_debounce = gpio_debounce; | ||
80 | spi_bi->platform_data = board_pdata; | 93 | spi_bi->platform_data = board_pdata; |
81 | if (board_pdata->get_pendown_state) | ||
82 | gpio_export(gpio_pendown, 0); | ||
83 | } else { | ||
84 | ads7846_config.gpio_pendown = gpio_pendown; | ||
85 | } | 94 | } |
86 | 95 | ||
87 | if (!board_pdata || (board_pdata && !board_pdata->get_pendown_state)) | ||
88 | gpio_free(gpio_pendown); | ||
89 | |||
90 | spi_register_board_info(&ads7846_spi_board_info, 1); | 96 | spi_register_board_info(&ads7846_spi_board_info, 1); |
91 | } | 97 | } |
92 | #else | 98 | #else |
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index cf365c387c06..d2215e9873a5 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/of.h> | 19 | #include <linux/of.h> |
20 | #include <linux/pinctrl/machine.h> | 20 | #include <linux/pinctrl/machine.h> |
21 | #include <linux/platform_data/omap4-keypad.h> | 21 | #include <linux/platform_data/omap4-keypad.h> |
22 | #include <linux/platform_data/omap_ocp2scp.h> | ||
22 | 23 | ||
23 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
24 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
@@ -615,6 +616,83 @@ static void omap_init_vout(void) | |||
615 | static inline void omap_init_vout(void) {} | 616 | static inline void omap_init_vout(void) {} |
616 | #endif | 617 | #endif |
617 | 618 | ||
619 | #if defined(CONFIG_OMAP_OCP2SCP) || defined(CONFIG_OMAP_OCP2SCP_MODULE) | ||
620 | static int count_ocp2scp_devices(struct omap_ocp2scp_dev *ocp2scp_dev) | ||
621 | { | ||
622 | int cnt = 0; | ||
623 | |||
624 | while (ocp2scp_dev->drv_name != NULL) { | ||
625 | cnt++; | ||
626 | ocp2scp_dev++; | ||
627 | } | ||
628 | |||
629 | return cnt; | ||
630 | } | ||
631 | |||
632 | static void omap_init_ocp2scp(void) | ||
633 | { | ||
634 | struct omap_hwmod *oh; | ||
635 | struct platform_device *pdev; | ||
636 | int bus_id = -1, dev_cnt = 0, i; | ||
637 | struct omap_ocp2scp_dev *ocp2scp_dev; | ||
638 | const char *oh_name, *name; | ||
639 | struct omap_ocp2scp_platform_data *pdata; | ||
640 | |||
641 | if (!cpu_is_omap44xx()) | ||
642 | return; | ||
643 | |||
644 | oh_name = "ocp2scp_usb_phy"; | ||
645 | name = "omap-ocp2scp"; | ||
646 | |||
647 | oh = omap_hwmod_lookup(oh_name); | ||
648 | if (!oh) { | ||
649 | pr_err("%s: could not find omap_hwmod for %s\n", __func__, | ||
650 | oh_name); | ||
651 | return; | ||
652 | } | ||
653 | |||
654 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); | ||
655 | if (!pdata) { | ||
656 | pr_err("%s: No memory for ocp2scp pdata\n", __func__); | ||
657 | return; | ||
658 | } | ||
659 | |||
660 | ocp2scp_dev = oh->dev_attr; | ||
661 | dev_cnt = count_ocp2scp_devices(ocp2scp_dev); | ||
662 | |||
663 | if (!dev_cnt) { | ||
664 | pr_err("%s: No devices connected to ocp2scp\n", __func__); | ||
665 | kfree(pdata); | ||
666 | return; | ||
667 | } | ||
668 | |||
669 | pdata->devices = kzalloc(sizeof(struct omap_ocp2scp_dev *) | ||
670 | * dev_cnt, GFP_KERNEL); | ||
671 | if (!pdata->devices) { | ||
672 | pr_err("%s: No memory for ocp2scp pdata devices\n", __func__); | ||
673 | kfree(pdata); | ||
674 | return; | ||
675 | } | ||
676 | |||
677 | for (i = 0; i < dev_cnt; i++, ocp2scp_dev++) | ||
678 | pdata->devices[i] = ocp2scp_dev; | ||
679 | |||
680 | pdata->dev_cnt = dev_cnt; | ||
681 | |||
682 | pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata), NULL, | ||
683 | 0, false); | ||
684 | if (IS_ERR(pdev)) { | ||
685 | pr_err("Could not build omap_device for %s %s\n", | ||
686 | name, oh_name); | ||
687 | kfree(pdata->devices); | ||
688 | kfree(pdata); | ||
689 | return; | ||
690 | } | ||
691 | } | ||
692 | #else | ||
693 | static inline void omap_init_ocp2scp(void) { } | ||
694 | #endif | ||
695 | |||
618 | /*-------------------------------------------------------------------------*/ | 696 | /*-------------------------------------------------------------------------*/ |
619 | 697 | ||
620 | static int __init omap2_init_devices(void) | 698 | static int __init omap2_init_devices(void) |
@@ -642,6 +720,7 @@ static int __init omap2_init_devices(void) | |||
642 | omap_init_sham(); | 720 | omap_init_sham(); |
643 | omap_init_aes(); | 721 | omap_init_aes(); |
644 | omap_init_vout(); | 722 | omap_init_vout(); |
723 | omap_init_ocp2scp(); | ||
645 | 724 | ||
646 | return 0; | 725 | return 0; |
647 | } | 726 | } |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 139adca3bda1..b3b00f43dd7c 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -420,6 +420,38 @@ static int _set_softreset(struct omap_hwmod *oh, u32 *v) | |||
420 | } | 420 | } |
421 | 421 | ||
422 | /** | 422 | /** |
423 | * _wait_softreset_complete - wait for an OCP softreset to complete | ||
424 | * @oh: struct omap_hwmod * to wait on | ||
425 | * | ||
426 | * Wait until the IP block represented by @oh reports that its OCP | ||
427 | * softreset is complete. This can be triggered by software (see | ||
428 | * _ocp_softreset()) or by hardware upon returning from off-mode (one | ||
429 | * example is HSMMC). Waits for up to MAX_MODULE_SOFTRESET_WAIT | ||
430 | * microseconds. Returns the number of microseconds waited. | ||
431 | */ | ||
432 | static int _wait_softreset_complete(struct omap_hwmod *oh) | ||
433 | { | ||
434 | struct omap_hwmod_class_sysconfig *sysc; | ||
435 | u32 softrst_mask; | ||
436 | int c = 0; | ||
437 | |||
438 | sysc = oh->class->sysc; | ||
439 | |||
440 | if (sysc->sysc_flags & SYSS_HAS_RESET_STATUS) | ||
441 | omap_test_timeout((omap_hwmod_read(oh, sysc->syss_offs) | ||
442 | & SYSS_RESETDONE_MASK), | ||
443 | MAX_MODULE_SOFTRESET_WAIT, c); | ||
444 | else if (sysc->sysc_flags & SYSC_HAS_RESET_STATUS) { | ||
445 | softrst_mask = (0x1 << sysc->sysc_fields->srst_shift); | ||
446 | omap_test_timeout(!(omap_hwmod_read(oh, sysc->sysc_offs) | ||
447 | & softrst_mask), | ||
448 | MAX_MODULE_SOFTRESET_WAIT, c); | ||
449 | } | ||
450 | |||
451 | return c; | ||
452 | } | ||
453 | |||
454 | /** | ||
423 | * _set_dmadisable: set OCP_SYSCONFIG.DMADISABLE bit in @v | 455 | * _set_dmadisable: set OCP_SYSCONFIG.DMADISABLE bit in @v |
424 | * @oh: struct omap_hwmod * | 456 | * @oh: struct omap_hwmod * |
425 | * | 457 | * |
@@ -1280,6 +1312,18 @@ static void _enable_sysc(struct omap_hwmod *oh) | |||
1280 | if (!oh->class->sysc) | 1312 | if (!oh->class->sysc) |
1281 | return; | 1313 | return; |
1282 | 1314 | ||
1315 | /* | ||
1316 | * Wait until reset has completed, this is needed as the IP | ||
1317 | * block is reset automatically by hardware in some cases | ||
1318 | * (off-mode for example), and the drivers require the | ||
1319 | * IP to be ready when they access it | ||
1320 | */ | ||
1321 | if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET) | ||
1322 | _enable_optional_clocks(oh); | ||
1323 | _wait_softreset_complete(oh); | ||
1324 | if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET) | ||
1325 | _disable_optional_clocks(oh); | ||
1326 | |||
1283 | v = oh->_sysc_cache; | 1327 | v = oh->_sysc_cache; |
1284 | sf = oh->class->sysc->sysc_flags; | 1328 | sf = oh->class->sysc->sysc_flags; |
1285 | 1329 | ||
@@ -1802,7 +1846,7 @@ static int _am33xx_disable_module(struct omap_hwmod *oh) | |||
1802 | */ | 1846 | */ |
1803 | static int _ocp_softreset(struct omap_hwmod *oh) | 1847 | static int _ocp_softreset(struct omap_hwmod *oh) |
1804 | { | 1848 | { |
1805 | u32 v, softrst_mask; | 1849 | u32 v; |
1806 | int c = 0; | 1850 | int c = 0; |
1807 | int ret = 0; | 1851 | int ret = 0; |
1808 | 1852 | ||
@@ -1832,19 +1876,7 @@ static int _ocp_softreset(struct omap_hwmod *oh) | |||
1832 | if (oh->class->sysc->srst_udelay) | 1876 | if (oh->class->sysc->srst_udelay) |
1833 | udelay(oh->class->sysc->srst_udelay); | 1877 | udelay(oh->class->sysc->srst_udelay); |
1834 | 1878 | ||
1835 | if (oh->class->sysc->sysc_flags & SYSS_HAS_RESET_STATUS) | 1879 | c = _wait_softreset_complete(oh); |
1836 | omap_test_timeout((omap_hwmod_read(oh, | ||
1837 | oh->class->sysc->syss_offs) | ||
1838 | & SYSS_RESETDONE_MASK), | ||
1839 | MAX_MODULE_SOFTRESET_WAIT, c); | ||
1840 | else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS) { | ||
1841 | softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift); | ||
1842 | omap_test_timeout(!(omap_hwmod_read(oh, | ||
1843 | oh->class->sysc->sysc_offs) | ||
1844 | & softrst_mask), | ||
1845 | MAX_MODULE_SOFTRESET_WAIT, c); | ||
1846 | } | ||
1847 | |||
1848 | if (c == MAX_MODULE_SOFTRESET_WAIT) | 1880 | if (c == MAX_MODULE_SOFTRESET_WAIT) |
1849 | pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n", | 1881 | pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n", |
1850 | oh->name, MAX_MODULE_SOFTRESET_WAIT); | 1882 | oh->name, MAX_MODULE_SOFTRESET_WAIT); |
@@ -2351,6 +2383,9 @@ static int __init _setup_reset(struct omap_hwmod *oh) | |||
2351 | if (oh->_state != _HWMOD_STATE_INITIALIZED) | 2383 | if (oh->_state != _HWMOD_STATE_INITIALIZED) |
2352 | return -EINVAL; | 2384 | return -EINVAL; |
2353 | 2385 | ||
2386 | if (oh->flags & HWMOD_EXT_OPT_MAIN_CLK) | ||
2387 | return -EPERM; | ||
2388 | |||
2354 | if (oh->rst_lines_cnt == 0) { | 2389 | if (oh->rst_lines_cnt == 0) { |
2355 | r = _enable(oh); | 2390 | r = _enable(oh); |
2356 | if (r) { | 2391 | if (r) { |
diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 87b59b45c678..87a3c5b7aa74 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h | |||
@@ -442,6 +442,11 @@ struct omap_hwmod_omap4_prcm { | |||
442 | * in order to complete the reset. Optional clocks will be disabled | 442 | * in order to complete the reset. Optional clocks will be disabled |
443 | * again after the reset. | 443 | * again after the reset. |
444 | * HWMOD_16BIT_REG: Module has 16bit registers | 444 | * HWMOD_16BIT_REG: Module has 16bit registers |
445 | * HWMOD_EXT_OPT_MAIN_CLK: The only main functional clock source for | ||
446 | * this IP block comes from an off-chip source and is not always | ||
447 | * enabled. This prevents the hwmod code from being able to | ||
448 | * enable and reset the IP block early. XXX Eventually it should | ||
449 | * be possible to query the clock framework for this information. | ||
445 | */ | 450 | */ |
446 | #define HWMOD_SWSUP_SIDLE (1 << 0) | 451 | #define HWMOD_SWSUP_SIDLE (1 << 0) |
447 | #define HWMOD_SWSUP_MSTANDBY (1 << 1) | 452 | #define HWMOD_SWSUP_MSTANDBY (1 << 1) |
@@ -452,6 +457,7 @@ struct omap_hwmod_omap4_prcm { | |||
452 | #define HWMOD_NO_IDLEST (1 << 6) | 457 | #define HWMOD_NO_IDLEST (1 << 6) |
453 | #define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7) | 458 | #define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7) |
454 | #define HWMOD_16BIT_REG (1 << 8) | 459 | #define HWMOD_16BIT_REG (1 << 8) |
460 | #define HWMOD_EXT_OPT_MAIN_CLK (1 << 9) | ||
455 | 461 | ||
456 | /* | 462 | /* |
457 | * omap_hwmod._int_flags definitions | 463 | * omap_hwmod._int_flags definitions |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index 7a6132848f5d..b80bbf607ef8 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -25,6 +25,7 @@ | |||
25 | 25 | ||
26 | #include <plat-omap/dma-omap.h> | 26 | #include <plat-omap/dma-omap.h> |
27 | 27 | ||
28 | #include <linux/platform_data/omap_ocp2scp.h> | ||
28 | #include <linux/platform_data/spi-omap2-mcspi.h> | 29 | #include <linux/platform_data/spi-omap2-mcspi.h> |
29 | #include <linux/platform_data/asoc-ti-mcbsp.h> | 30 | #include <linux/platform_data/asoc-ti-mcbsp.h> |
30 | #include <plat/dmtimer.h> | 31 | #include <plat/dmtimer.h> |
@@ -2126,6 +2127,14 @@ static struct omap_hwmod omap44xx_mcpdm_hwmod = { | |||
2126 | .name = "mcpdm", | 2127 | .name = "mcpdm", |
2127 | .class = &omap44xx_mcpdm_hwmod_class, | 2128 | .class = &omap44xx_mcpdm_hwmod_class, |
2128 | .clkdm_name = "abe_clkdm", | 2129 | .clkdm_name = "abe_clkdm", |
2130 | /* | ||
2131 | * It's suspected that the McPDM requires an off-chip main | ||
2132 | * functional clock, controlled via I2C. This IP block is | ||
2133 | * currently reset very early during boot, before I2C is | ||
2134 | * available, so it doesn't seem that we have any choice in | ||
2135 | * the kernel other than to avoid resetting it. | ||
2136 | */ | ||
2137 | .flags = HWMOD_EXT_OPT_MAIN_CLK, | ||
2129 | .mpu_irqs = omap44xx_mcpdm_irqs, | 2138 | .mpu_irqs = omap44xx_mcpdm_irqs, |
2130 | .sdma_reqs = omap44xx_mcpdm_sdma_reqs, | 2139 | .sdma_reqs = omap44xx_mcpdm_sdma_reqs, |
2131 | .main_clk = "mcpdm_fck", | 2140 | .main_clk = "mcpdm_fck", |
@@ -2682,6 +2691,32 @@ static struct omap_hwmod_class omap44xx_ocp2scp_hwmod_class = { | |||
2682 | .sysc = &omap44xx_ocp2scp_sysc, | 2691 | .sysc = &omap44xx_ocp2scp_sysc, |
2683 | }; | 2692 | }; |
2684 | 2693 | ||
2694 | /* ocp2scp dev_attr */ | ||
2695 | static struct resource omap44xx_usb_phy_and_pll_addrs[] = { | ||
2696 | { | ||
2697 | .name = "usb_phy", | ||
2698 | .start = 0x4a0ad080, | ||
2699 | .end = 0x4a0ae000, | ||
2700 | .flags = IORESOURCE_MEM, | ||
2701 | }, | ||
2702 | { | ||
2703 | /* XXX: Remove this once control module driver is in place */ | ||
2704 | .name = "ctrl_dev", | ||
2705 | .start = 0x4a002300, | ||
2706 | .end = 0x4a002303, | ||
2707 | .flags = IORESOURCE_MEM, | ||
2708 | }, | ||
2709 | { } | ||
2710 | }; | ||
2711 | |||
2712 | static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = { | ||
2713 | { | ||
2714 | .drv_name = "omap-usb2", | ||
2715 | .res = omap44xx_usb_phy_and_pll_addrs, | ||
2716 | }, | ||
2717 | { } | ||
2718 | }; | ||
2719 | |||
2685 | /* ocp2scp_usb_phy */ | 2720 | /* ocp2scp_usb_phy */ |
2686 | static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = { | 2721 | static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = { |
2687 | .name = "ocp2scp_usb_phy", | 2722 | .name = "ocp2scp_usb_phy", |
@@ -2695,6 +2730,7 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = { | |||
2695 | .modulemode = MODULEMODE_HWCTRL, | 2730 | .modulemode = MODULEMODE_HWCTRL, |
2696 | }, | 2731 | }, |
2697 | }, | 2732 | }, |
2733 | .dev_attr = ocp2scp_dev_attr, | ||
2698 | }; | 2734 | }; |
2699 | 2735 | ||
2700 | /* | 2736 | /* |
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index 827f54a1dd1d..e49b40b4c90a 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c | |||
@@ -70,6 +70,7 @@ void __init omap4_pmic_init(const char *pmic_type, | |||
70 | { | 70 | { |
71 | /* PMIC part*/ | 71 | /* PMIC part*/ |
72 | omap_mux_init_signal("sys_nirq1", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); | 72 | omap_mux_init_signal("sys_nirq1", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); |
73 | omap_mux_init_signal("fref_clk0_out.sys_drm_msecure", OMAP_PIN_OUTPUT); | ||
73 | omap_pmic_init(1, 400, pmic_type, 7 + OMAP44XX_IRQ_GIC_START, pmic_data); | 74 | omap_pmic_init(1, 400, pmic_type, 7 + OMAP44XX_IRQ_GIC_START, pmic_data); |
74 | 75 | ||
75 | /* Register additional devices on i2c1 bus if needed */ | 76 | /* Register additional devices on i2c1 bus if needed */ |
@@ -363,7 +364,7 @@ static struct regulator_init_data omap4_clk32kg_idata = { | |||
363 | }; | 364 | }; |
364 | 365 | ||
365 | static struct regulator_consumer_supply omap4_vdd1_supply[] = { | 366 | static struct regulator_consumer_supply omap4_vdd1_supply[] = { |
366 | REGULATOR_SUPPLY("vcc", "mpu.0"), | 367 | REGULATOR_SUPPLY("vcc", "cpu0"), |
367 | }; | 368 | }; |
368 | 369 | ||
369 | static struct regulator_consumer_supply omap4_vdd2_supply[] = { | 370 | static struct regulator_consumer_supply omap4_vdd2_supply[] = { |
diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c index 880249b17012..75878c37959b 100644 --- a/arch/arm/mach-omap2/vc.c +++ b/arch/arm/mach-omap2/vc.c | |||
@@ -264,7 +264,7 @@ static void __init omap_vc_i2c_init(struct voltagedomain *voltdm) | |||
264 | 264 | ||
265 | if (initialized) { | 265 | if (initialized) { |
266 | if (voltdm->pmic->i2c_high_speed != i2c_high_speed) | 266 | if (voltdm->pmic->i2c_high_speed != i2c_high_speed) |
267 | pr_warn("%s: I2C config for vdd_%s does not match other channels (%u).", | 267 | pr_warn("%s: I2C config for vdd_%s does not match other channels (%u).\n", |
268 | __func__, voltdm->name, i2c_high_speed); | 268 | __func__, voltdm->name, i2c_high_speed); |
269 | return; | 269 | return; |
270 | } | 270 | } |
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index 5ecbd17b5641..e2c6391863fe 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/mfd/asic3.h> | 28 | #include <linux/mfd/asic3.h> |
29 | #include <linux/mtd/physmap.h> | 29 | #include <linux/mtd/physmap.h> |
30 | #include <linux/pda_power.h> | 30 | #include <linux/pda_power.h> |
31 | #include <linux/pwm.h> | ||
31 | #include <linux/pwm_backlight.h> | 32 | #include <linux/pwm_backlight.h> |
32 | #include <linux/regulator/driver.h> | 33 | #include <linux/regulator/driver.h> |
33 | #include <linux/regulator/gpio-regulator.h> | 34 | #include <linux/regulator/gpio-regulator.h> |
@@ -556,7 +557,7 @@ static struct platform_device hx4700_lcd = { | |||
556 | */ | 557 | */ |
557 | 558 | ||
558 | static struct platform_pwm_backlight_data backlight_data = { | 559 | static struct platform_pwm_backlight_data backlight_data = { |
559 | .pwm_id = 1, | 560 | .pwm_id = -1, /* Superseded by pwm_lookup */ |
560 | .max_brightness = 200, | 561 | .max_brightness = 200, |
561 | .dft_brightness = 100, | 562 | .dft_brightness = 100, |
562 | .pwm_period_ns = 30923, | 563 | .pwm_period_ns = 30923, |
@@ -571,6 +572,10 @@ static struct platform_device backlight = { | |||
571 | }, | 572 | }, |
572 | }; | 573 | }; |
573 | 574 | ||
575 | static struct pwm_lookup hx4700_pwm_lookup[] = { | ||
576 | PWM_LOOKUP("pxa27x-pwm.1", 0, "pwm-backlight", NULL), | ||
577 | }; | ||
578 | |||
574 | /* | 579 | /* |
575 | * USB "Transceiver" | 580 | * USB "Transceiver" |
576 | */ | 581 | */ |
@@ -872,6 +877,7 @@ static void __init hx4700_init(void) | |||
872 | pxa_set_stuart_info(NULL); | 877 | pxa_set_stuart_info(NULL); |
873 | 878 | ||
874 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 879 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
880 | pwm_add_table(hx4700_pwm_lookup, ARRAY_SIZE(hx4700_pwm_lookup)); | ||
875 | 881 | ||
876 | pxa_set_ficp_info(&ficp_info); | 882 | pxa_set_ficp_info(&ficp_info); |
877 | pxa27x_set_i2c_power_info(NULL); | 883 | pxa27x_set_i2c_power_info(NULL); |
diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c index 438f02fe122a..842596d4d31e 100644 --- a/arch/arm/mach-pxa/spitz_pm.c +++ b/arch/arm/mach-pxa/spitz_pm.c | |||
@@ -86,10 +86,7 @@ static void spitz_discharge1(int on) | |||
86 | gpio_set_value(SPITZ_GPIO_LED_GREEN, on); | 86 | gpio_set_value(SPITZ_GPIO_LED_GREEN, on); |
87 | } | 87 | } |
88 | 88 | ||
89 | static unsigned long gpio18_config[] = { | 89 | static unsigned long gpio18_config = GPIO18_GPIO; |
90 | GPIO18_RDY, | ||
91 | GPIO18_GPIO, | ||
92 | }; | ||
93 | 90 | ||
94 | static void spitz_presuspend(void) | 91 | static void spitz_presuspend(void) |
95 | { | 92 | { |
@@ -112,7 +109,7 @@ static void spitz_presuspend(void) | |||
112 | PGSR3 &= ~SPITZ_GPIO_G3_STROBE_BIT; | 109 | PGSR3 &= ~SPITZ_GPIO_G3_STROBE_BIT; |
113 | PGSR2 |= GPIO_bit(SPITZ_GPIO_KEY_STROBE0); | 110 | PGSR2 |= GPIO_bit(SPITZ_GPIO_KEY_STROBE0); |
114 | 111 | ||
115 | pxa2xx_mfp_config(&gpio18_config[0], 1); | 112 | pxa2xx_mfp_config(&gpio18_config, 1); |
116 | gpio_request_one(18, GPIOF_OUT_INIT_HIGH, "Unknown"); | 113 | gpio_request_one(18, GPIOF_OUT_INIT_HIGH, "Unknown"); |
117 | gpio_free(18); | 114 | gpio_free(18); |
118 | 115 | ||
@@ -131,7 +128,6 @@ static void spitz_presuspend(void) | |||
131 | 128 | ||
132 | static void spitz_postsuspend(void) | 129 | static void spitz_postsuspend(void) |
133 | { | 130 | { |
134 | pxa2xx_mfp_config(&gpio18_config[1], 1); | ||
135 | } | 131 | } |
136 | 132 | ||
137 | static int spitz_should_wakeup(unsigned int resume_on_alarm) | 133 | static int spitz_should_wakeup(unsigned int resume_on_alarm) |
diff --git a/arch/arm/tools/Makefile b/arch/arm/tools/Makefile index cd60a81163e9..32d05c8219dc 100644 --- a/arch/arm/tools/Makefile +++ b/arch/arm/tools/Makefile | |||
@@ -5,6 +5,6 @@ | |||
5 | # | 5 | # |
6 | 6 | ||
7 | include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types | 7 | include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types |
8 | $(kecho) ' Generating $@' | 8 | @$(kecho) ' Generating $@' |
9 | @mkdir -p $(dir $@) | 9 | @mkdir -p $(dir $@) |
10 | $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } | 10 | $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } |