diff options
35 files changed, 550 insertions, 398 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a91009c61870..0063845d2088 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -936,6 +936,7 @@ config ARCH_DAVINCI | |||
| 936 | 936 | ||
| 937 | config ARCH_OMAP | 937 | config ARCH_OMAP |
| 938 | bool "TI OMAP" | 938 | bool "TI OMAP" |
| 939 | depends on MMU | ||
| 939 | select HAVE_CLK | 940 | select HAVE_CLK |
| 940 | select ARCH_REQUIRE_GPIOLIB | 941 | select ARCH_REQUIRE_GPIOLIB |
| 941 | select ARCH_HAS_CPUFREQ | 942 | select ARCH_HAS_CPUFREQ |
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts index 5b4506c0a8c4..cdcb98c7e075 100644 --- a/arch/arm/boot/dts/omap3-beagle.dts +++ b/arch/arm/boot/dts/omap3-beagle.dts | |||
| @@ -61,9 +61,9 @@ | |||
| 61 | }; | 61 | }; |
| 62 | 62 | ||
| 63 | &mmc2 { | 63 | &mmc2 { |
| 64 | status = "disable"; | 64 | status = "disabled"; |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | &mmc3 { | 67 | &mmc3 { |
| 68 | status = "disable"; | 68 | status = "disabled"; |
| 69 | }; | 69 | }; |
diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts index 1efe0c587985..9d8abf0938e0 100644 --- a/arch/arm/boot/dts/omap4-panda.dts +++ b/arch/arm/boot/dts/omap4-panda.dts | |||
| @@ -74,15 +74,15 @@ | |||
| 74 | }; | 74 | }; |
| 75 | 75 | ||
| 76 | &mmc2 { | 76 | &mmc2 { |
| 77 | status = "disable"; | 77 | status = "disabled"; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | &mmc3 { | 80 | &mmc3 { |
| 81 | status = "disable"; | 81 | status = "disabled"; |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| 84 | &mmc4 { | 84 | &mmc4 { |
| 85 | status = "disable"; | 85 | status = "disabled"; |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | &mmc5 { | 88 | &mmc5 { |
diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index d08c4d137280..9b1c13a16c2c 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts | |||
| @@ -147,11 +147,11 @@ | |||
| 147 | }; | 147 | }; |
| 148 | 148 | ||
| 149 | &mmc3 { | 149 | &mmc3 { |
| 150 | status = "disable"; | 150 | status = "disabled"; |
| 151 | }; | 151 | }; |
| 152 | 152 | ||
| 153 | &mmc4 { | 153 | &mmc4 { |
| 154 | status = "disable"; | 154 | status = "disabled"; |
| 155 | }; | 155 | }; |
| 156 | 156 | ||
| 157 | &mmc5 { | 157 | &mmc5 { |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index 9854ff4279e0..f3087cb0ab08 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
| @@ -197,6 +197,7 @@ CONFIG_RTC_DRV_TWL4030=y | |||
| 197 | CONFIG_EXT2_FS=y | 197 | CONFIG_EXT2_FS=y |
| 198 | CONFIG_EXT3_FS=y | 198 | CONFIG_EXT3_FS=y |
| 199 | # CONFIG_EXT3_FS_XATTR is not set | 199 | # CONFIG_EXT3_FS_XATTR is not set |
| 200 | CONFIG_EXT4_FS=y | ||
| 200 | CONFIG_QUOTA=y | 201 | CONFIG_QUOTA=y |
| 201 | CONFIG_QFMT_V2=y | 202 | CONFIG_QFMT_V2=y |
| 202 | CONFIG_MSDOS_FS=y | 203 | CONFIG_MSDOS_FS=y |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 4cf5142f22cc..2f4ace6f91d1 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
| @@ -35,6 +35,7 @@ config ARCH_OMAP3 | |||
| 35 | select CPU_V7 | 35 | select CPU_V7 |
| 36 | select USB_ARCH_HAS_EHCI if USB_SUPPORT | 36 | select USB_ARCH_HAS_EHCI if USB_SUPPORT |
| 37 | select ARCH_HAS_OPP | 37 | select ARCH_HAS_OPP |
| 38 | select PM_RUNTIME if CPU_IDLE | ||
| 38 | select PM_OPP if PM | 39 | select PM_OPP if PM |
| 39 | select ARM_CPU_SUSPEND if PM | 40 | select ARM_CPU_SUSPEND if PM |
| 40 | select MULTI_IRQ_HANDLER | 41 | select MULTI_IRQ_HANDLER |
| @@ -52,6 +53,7 @@ config ARCH_OMAP4 | |||
| 52 | select PL310_ERRATA_727915 | 53 | select PL310_ERRATA_727915 |
| 53 | select ARM_ERRATA_720789 | 54 | select ARM_ERRATA_720789 |
| 54 | select ARCH_HAS_OPP | 55 | select ARCH_HAS_OPP |
| 56 | select PM_RUNTIME if CPU_IDLE | ||
| 55 | select PM_OPP if PM | 57 | select PM_OPP if PM |
| 56 | select USB_ARCH_HAS_EHCI if USB_SUPPORT | 58 | select USB_ARCH_HAS_EHCI if USB_SUPPORT |
| 57 | select ARM_CPU_SUSPEND if PM | 59 | select ARM_CPU_SUSPEND if PM |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index fa742f3c2629..6be43ac5c35c 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
| @@ -66,9 +66,7 @@ ifeq ($(CONFIG_PM),y) | |||
| 66 | obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o | 66 | obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o |
| 67 | obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o | 67 | obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o |
| 68 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o | 68 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o |
| 69 | obj-$(CONFIG_ARCH_OMAP3) += cpuidle34xx.o | ||
| 70 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o | 69 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o |
| 71 | obj-$(CONFIG_ARCH_OMAP4) += cpuidle44xx.o | ||
| 72 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o | 70 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o |
| 73 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o | 71 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o |
| 74 | obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o | 72 | obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o |
| @@ -82,6 +80,11 @@ endif | |||
| 82 | 80 | ||
| 83 | endif | 81 | endif |
| 84 | 82 | ||
| 83 | ifeq ($(CONFIG_CPU_IDLE),y) | ||
| 84 | obj-$(CONFIG_ARCH_OMAP3) += cpuidle34xx.o | ||
| 85 | obj-$(CONFIG_ARCH_OMAP4) += cpuidle44xx.o | ||
| 86 | endif | ||
| 87 | |||
| 85 | # PRCM | 88 | # PRCM |
| 86 | obj-y += prm_common.o | 89 | obj-y += prm_common.o |
| 87 | obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o | 90 | obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o |
diff --git a/arch/arm/mach-omap2/am35xx-emac.c b/arch/arm/mach-omap2/am35xx-emac.c index 447682c4e11c..2c90ac686686 100644 --- a/arch/arm/mach-omap2/am35xx-emac.c +++ b/arch/arm/mach-omap2/am35xx-emac.c | |||
| @@ -15,27 +15,13 @@ | |||
| 15 | * General Public License for more details. | 15 | * General Public License for more details. |
| 16 | */ | 16 | */ |
| 17 | 17 | ||
| 18 | #include <linux/clk.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/davinci_emac.h> | 19 | #include <linux/davinci_emac.h> |
| 20 | #include <linux/platform_device.h> | 20 | #include <asm/system.h> |
| 21 | #include <plat/irqs.h> | 21 | #include <plat/omap_device.h> |
| 22 | #include <mach/am35xx.h> | 22 | #include <mach/am35xx.h> |
| 23 | |||
| 24 | #include "control.h" | 23 | #include "control.h" |
| 25 | 24 | #include "am35xx-emac.h" | |
| 26 | static struct mdio_platform_data am35xx_emac_mdio_pdata; | ||
| 27 | |||
| 28 | static struct resource am35xx_emac_mdio_resources[] = { | ||
| 29 | DEFINE_RES_MEM(AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET, SZ_4K), | ||
| 30 | }; | ||
| 31 | |||
| 32 | static struct platform_device am35xx_emac_mdio_device = { | ||
| 33 | .name = "davinci_mdio", | ||
| 34 | .id = 0, | ||
| 35 | .num_resources = ARRAY_SIZE(am35xx_emac_mdio_resources), | ||
| 36 | .resource = am35xx_emac_mdio_resources, | ||
| 37 | .dev.platform_data = &am35xx_emac_mdio_pdata, | ||
| 38 | }; | ||
| 39 | 25 | ||
| 40 | static void am35xx_enable_emac_int(void) | 26 | static void am35xx_enable_emac_int(void) |
| 41 | { | 27 | { |
| @@ -69,41 +55,57 @@ static struct emac_platform_data am35xx_emac_pdata = { | |||
| 69 | .interrupt_disable = am35xx_disable_emac_int, | 55 | .interrupt_disable = am35xx_disable_emac_int, |
| 70 | }; | 56 | }; |
| 71 | 57 | ||
| 72 | static struct resource am35xx_emac_resources[] = { | 58 | static struct mdio_platform_data am35xx_mdio_pdata; |
| 73 | DEFINE_RES_MEM(AM35XX_IPSS_EMAC_BASE, 0x30000), | ||
| 74 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_RXTHRESH_IRQ), | ||
| 75 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_RX_PULSE_IRQ), | ||
| 76 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_TX_PULSE_IRQ), | ||
| 77 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_MISC_PULSE_IRQ), | ||
| 78 | }; | ||
| 79 | 59 | ||
| 80 | static struct platform_device am35xx_emac_device = { | 60 | static int __init omap_davinci_emac_dev_init(struct omap_hwmod *oh, |
| 81 | .name = "davinci_emac", | 61 | void *pdata, int pdata_len) |
| 82 | .id = -1, | 62 | { |
| 83 | .num_resources = ARRAY_SIZE(am35xx_emac_resources), | 63 | struct platform_device *pdev; |
| 84 | .resource = am35xx_emac_resources, | 64 | |
| 85 | .dev = { | 65 | pdev = omap_device_build(oh->class->name, 0, oh, pdata, pdata_len, |
| 86 | .platform_data = &am35xx_emac_pdata, | 66 | NULL, 0, false); |
| 87 | }, | 67 | if (IS_ERR(pdev)) { |
| 88 | }; | 68 | WARN(1, "Can't build omap_device for %s:%s.\n", |
| 69 | oh->class->name, oh->name); | ||
| 70 | return PTR_ERR(pdev); | ||
| 71 | } | ||
| 72 | |||
| 73 | return 0; | ||
| 74 | } | ||
| 89 | 75 | ||
| 90 | void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) | 76 | void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) |
| 91 | { | 77 | { |
| 78 | struct omap_hwmod *oh; | ||
| 92 | u32 v; | 79 | u32 v; |
| 93 | int err; | 80 | int ret; |
| 94 | 81 | ||
| 95 | am35xx_emac_pdata.rmii_en = rmii_en; | 82 | oh = omap_hwmod_lookup("davinci_mdio"); |
| 96 | am35xx_emac_mdio_pdata.bus_freq = mdio_bus_freq; | 83 | if (!oh) { |
| 97 | err = platform_device_register(&am35xx_emac_device); | 84 | pr_err("Could not find davinci_mdio hwmod\n"); |
| 98 | if (err) { | 85 | return; |
| 99 | pr_err("AM35x: failed registering EMAC device: %d\n", err); | 86 | } |
| 87 | |||
| 88 | am35xx_mdio_pdata.bus_freq = mdio_bus_freq; | ||
| 89 | |||
| 90 | ret = omap_davinci_emac_dev_init(oh, &am35xx_mdio_pdata, | ||
| 91 | sizeof(am35xx_mdio_pdata)); | ||
| 92 | if (ret) { | ||
| 93 | pr_err("Could not build davinci_mdio hwmod device\n"); | ||
| 100 | return; | 94 | return; |
| 101 | } | 95 | } |
| 102 | 96 | ||
| 103 | err = platform_device_register(&am35xx_emac_mdio_device); | 97 | oh = omap_hwmod_lookup("davinci_emac"); |
| 104 | if (err) { | 98 | if (!oh) { |
| 105 | pr_err("AM35x: failed registering EMAC MDIO device: %d\n", err); | 99 | pr_err("Could not find davinci_emac hwmod\n"); |
| 106 | platform_device_unregister(&am35xx_emac_device); | 100 | return; |
| 101 | } | ||
| 102 | |||
| 103 | am35xx_emac_pdata.rmii_en = rmii_en; | ||
| 104 | |||
| 105 | ret = omap_davinci_emac_dev_init(oh, &am35xx_emac_pdata, | ||
| 106 | sizeof(am35xx_emac_pdata)); | ||
| 107 | if (ret) { | ||
| 108 | pr_err("Could not build davinci_emac hwmod device\n"); | ||
| 107 | return; | 109 | return; |
| 108 | } | 110 | } |
| 109 | 111 | ||
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 99ca6bad5c30..0dac4db01139 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
| @@ -218,9 +218,6 @@ static struct twl4030_gpio_platform_data sdp2430_gpio_data = { | |||
| 218 | }; | 218 | }; |
| 219 | 219 | ||
| 220 | static struct twl4030_platform_data sdp2430_twldata = { | 220 | static struct twl4030_platform_data sdp2430_twldata = { |
| 221 | .irq_base = TWL4030_IRQ_BASE, | ||
| 222 | .irq_end = TWL4030_IRQ_END, | ||
| 223 | |||
| 224 | /* platform_data for children goes here */ | 221 | /* platform_data for children goes here */ |
| 225 | .gpio = &sdp2430_gpio_data, | 222 | .gpio = &sdp2430_gpio_data, |
| 226 | .vmmc1 = &sdp2430_vmmc1, | 223 | .vmmc1 = &sdp2430_vmmc1, |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 580fd17208da..6202fc76e490 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
| @@ -433,7 +433,7 @@ static struct platform_device *omap3_beagle_devices[] __initdata = { | |||
| 433 | 433 | ||
| 434 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { | 434 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { |
| 435 | 435 | ||
| 436 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 436 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, |
| 437 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 437 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
| 438 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | 438 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, |
| 439 | 439 | ||
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index 932e1778aff9..fca93d1afd43 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c | |||
| @@ -93,9 +93,6 @@ static struct twl4030_usb_data omap3logic_usb_data = { | |||
| 93 | 93 | ||
| 94 | 94 | ||
| 95 | static struct twl4030_platform_data omap3logic_twldata = { | 95 | static struct twl4030_platform_data omap3logic_twldata = { |
| 96 | .irq_base = TWL4030_IRQ_BASE, | ||
| 97 | .irq_end = TWL4030_IRQ_END, | ||
| 98 | |||
| 99 | /* platform_data for children goes here */ | 96 | /* platform_data for children goes here */ |
| 100 | .gpio = &omap3logic_gpio_data, | 97 | .gpio = &omap3logic_gpio_data, |
| 101 | .vmmc1 = &omap3logic_vmmc1, | 98 | .vmmc1 = &omap3logic_vmmc1, |
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c index 1efdec236ae8..a67aaa97dcd8 100644 --- a/arch/arm/mach-omap2/clock3xxx_data.c +++ b/arch/arm/mach-omap2/clock3xxx_data.c | |||
| @@ -2490,13 +2490,13 @@ static struct clk uart4_fck = { | |||
| 2490 | }; | 2490 | }; |
| 2491 | 2491 | ||
| 2492 | static struct clk uart4_fck_am35xx = { | 2492 | static struct clk uart4_fck_am35xx = { |
| 2493 | .name = "uart4_fck", | 2493 | .name = "uart4_fck", |
| 2494 | .ops = &clkops_omap2_dflt_wait, | 2494 | .ops = &clkops_omap2_dflt_wait, |
| 2495 | .parent = &per_48m_fck, | 2495 | .parent = &core_48m_fck, |
| 2496 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), | 2496 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), |
| 2497 | .enable_bit = OMAP3430_EN_UART4_SHIFT, | 2497 | .enable_bit = AM35XX_EN_UART4_SHIFT, |
| 2498 | .clkdm_name = "core_l4_clkdm", | 2498 | .clkdm_name = "core_l4_clkdm", |
| 2499 | .recalc = &followparent_recalc, | 2499 | .recalc = &followparent_recalc, |
| 2500 | }; | 2500 | }; |
| 2501 | 2501 | ||
| 2502 | static struct clk gpt2_fck = { | 2502 | static struct clk gpt2_fck = { |
| @@ -3201,8 +3201,12 @@ static struct clk vpfe_fck = { | |||
| 3201 | }; | 3201 | }; |
| 3202 | 3202 | ||
| 3203 | /* | 3203 | /* |
| 3204 | * The UART1/2 functional clock acts as the functional | 3204 | * The UART1/2 functional clock acts as the functional clock for |
| 3205 | * clock for UART4. No separate fclk control available. | 3205 | * UART4. No separate fclk control available. XXX Well now we have a |
| 3206 | * uart4_fck that is apparently used as the UART4 functional clock, | ||
| 3207 | * but it also seems that uart1_fck or uart2_fck are still needed, at | ||
| 3208 | * least for UART4 softresets to complete. This really needs | ||
| 3209 | * clarification. | ||
| 3206 | */ | 3210 | */ |
| 3207 | static struct clk uart4_ick_am35xx = { | 3211 | static struct clk uart4_ick_am35xx = { |
| 3208 | .name = "uart4_ick", | 3212 | .name = "uart4_ick", |
| @@ -3474,12 +3478,12 @@ static struct omap_clk omap3xxx_clks[] = { | |||
| 3474 | CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX), | 3478 | CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX), |
| 3475 | CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX), | 3479 | CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX), |
| 3476 | CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX), | 3480 | CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX), |
| 3477 | CLK("davinci_emac", NULL, &emac_ick, CK_AM35XX), | 3481 | CLK("davinci_emac.0", NULL, &emac_ick, CK_AM35XX), |
| 3478 | CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX), | 3482 | CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX), |
| 3479 | CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX), | 3483 | CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX), |
| 3480 | CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX), | 3484 | CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX), |
| 3481 | CLK("musb-am35x", "ick", &hsotgusb_ick_am35xx, CK_AM35XX), | 3485 | CLK(NULL, "hsotgusb_ick", &hsotgusb_ick_am35xx, CK_AM35XX), |
| 3482 | CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), | 3486 | CLK(NULL, "hsotgusb_fck", &hsotgusb_fck_am35xx, CK_AM35XX), |
| 3483 | CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), | 3487 | CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), |
| 3484 | CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), | 3488 | CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), |
| 3485 | CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX), | 3489 | CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX), |
diff --git a/arch/arm/mach-omap2/clockdomains3xxx_data.c b/arch/arm/mach-omap2/clockdomains3xxx_data.c index 6038adb97710..8e35080026d3 100644 --- a/arch/arm/mach-omap2/clockdomains3xxx_data.c +++ b/arch/arm/mach-omap2/clockdomains3xxx_data.c | |||
| @@ -59,6 +59,12 @@ static struct clkdm_dep gfx_sgx_3xxx_wkdeps[] = { | |||
| 59 | { NULL }, | 59 | { NULL }, |
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | static struct clkdm_dep gfx_sgx_am35x_wkdeps[] = { | ||
| 63 | { .clkdm_name = "mpu_clkdm" }, | ||
| 64 | { .clkdm_name = "wkup_clkdm" }, | ||
| 65 | { NULL }, | ||
| 66 | }; | ||
| 67 | |||
| 62 | /* 3430: PM_WKDEP_PER: CORE, IVA2, MPU, WKUP */ | 68 | /* 3430: PM_WKDEP_PER: CORE, IVA2, MPU, WKUP */ |
| 63 | static struct clkdm_dep per_wkdeps[] = { | 69 | static struct clkdm_dep per_wkdeps[] = { |
| 64 | { .clkdm_name = "core_l3_clkdm" }, | 70 | { .clkdm_name = "core_l3_clkdm" }, |
| @@ -69,6 +75,14 @@ static struct clkdm_dep per_wkdeps[] = { | |||
| 69 | { NULL }, | 75 | { NULL }, |
| 70 | }; | 76 | }; |
| 71 | 77 | ||
| 78 | static struct clkdm_dep per_am35x_wkdeps[] = { | ||
| 79 | { .clkdm_name = "core_l3_clkdm" }, | ||
| 80 | { .clkdm_name = "core_l4_clkdm" }, | ||
| 81 | { .clkdm_name = "mpu_clkdm" }, | ||
| 82 | { .clkdm_name = "wkup_clkdm" }, | ||
| 83 | { NULL }, | ||
| 84 | }; | ||
| 85 | |||
| 72 | /* 3430ES2: PM_WKDEP_USBHOST: CORE, IVA2, MPU, WKUP */ | 86 | /* 3430ES2: PM_WKDEP_USBHOST: CORE, IVA2, MPU, WKUP */ |
| 73 | static struct clkdm_dep usbhost_wkdeps[] = { | 87 | static struct clkdm_dep usbhost_wkdeps[] = { |
| 74 | { .clkdm_name = "core_l3_clkdm" }, | 88 | { .clkdm_name = "core_l3_clkdm" }, |
| @@ -79,6 +93,14 @@ static struct clkdm_dep usbhost_wkdeps[] = { | |||
| 79 | { NULL }, | 93 | { NULL }, |
| 80 | }; | 94 | }; |
| 81 | 95 | ||
| 96 | static struct clkdm_dep usbhost_am35x_wkdeps[] = { | ||
| 97 | { .clkdm_name = "core_l3_clkdm" }, | ||
| 98 | { .clkdm_name = "core_l4_clkdm" }, | ||
| 99 | { .clkdm_name = "mpu_clkdm" }, | ||
| 100 | { .clkdm_name = "wkup_clkdm" }, | ||
| 101 | { NULL }, | ||
| 102 | }; | ||
| 103 | |||
| 82 | /* 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER */ | 104 | /* 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER */ |
| 83 | static struct clkdm_dep mpu_3xxx_wkdeps[] = { | 105 | static struct clkdm_dep mpu_3xxx_wkdeps[] = { |
| 84 | { .clkdm_name = "core_l3_clkdm" }, | 106 | { .clkdm_name = "core_l3_clkdm" }, |
| @@ -89,6 +111,14 @@ static struct clkdm_dep mpu_3xxx_wkdeps[] = { | |||
| 89 | { NULL }, | 111 | { NULL }, |
| 90 | }; | 112 | }; |
| 91 | 113 | ||
| 114 | static struct clkdm_dep mpu_am35x_wkdeps[] = { | ||
| 115 | { .clkdm_name = "core_l3_clkdm" }, | ||
| 116 | { .clkdm_name = "core_l4_clkdm" }, | ||
| 117 | { .clkdm_name = "dss_clkdm" }, | ||
| 118 | { .clkdm_name = "per_clkdm" }, | ||
| 119 | { NULL }, | ||
| 120 | }; | ||
| 121 | |||
| 92 | /* 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER */ | 122 | /* 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER */ |
| 93 | static struct clkdm_dep iva2_wkdeps[] = { | 123 | static struct clkdm_dep iva2_wkdeps[] = { |
| 94 | { .clkdm_name = "core_l3_clkdm" }, | 124 | { .clkdm_name = "core_l3_clkdm" }, |
| @@ -116,6 +146,12 @@ static struct clkdm_dep dss_wkdeps[] = { | |||
| 116 | { NULL }, | 146 | { NULL }, |
| 117 | }; | 147 | }; |
| 118 | 148 | ||
| 149 | static struct clkdm_dep dss_am35x_wkdeps[] = { | ||
| 150 | { .clkdm_name = "mpu_clkdm" }, | ||
| 151 | { .clkdm_name = "wkup_clkdm" }, | ||
| 152 | { NULL }, | ||
| 153 | }; | ||
| 154 | |||
| 119 | /* 3430: PM_WKDEP_NEON: MPU */ | 155 | /* 3430: PM_WKDEP_NEON: MPU */ |
| 120 | static struct clkdm_dep neon_wkdeps[] = { | 156 | static struct clkdm_dep neon_wkdeps[] = { |
| 121 | { .clkdm_name = "mpu_clkdm" }, | 157 | { .clkdm_name = "mpu_clkdm" }, |
| @@ -131,6 +167,11 @@ static struct clkdm_dep dss_sleepdeps[] = { | |||
| 131 | { NULL }, | 167 | { NULL }, |
| 132 | }; | 168 | }; |
| 133 | 169 | ||
| 170 | static struct clkdm_dep dss_am35x_sleepdeps[] = { | ||
| 171 | { .clkdm_name = "mpu_clkdm" }, | ||
| 172 | { NULL }, | ||
| 173 | }; | ||
| 174 | |||
| 134 | /* 3430: CM_SLEEPDEP_PER: MPU, IVA */ | 175 | /* 3430: CM_SLEEPDEP_PER: MPU, IVA */ |
| 135 | static struct clkdm_dep per_sleepdeps[] = { | 176 | static struct clkdm_dep per_sleepdeps[] = { |
| 136 | { .clkdm_name = "mpu_clkdm" }, | 177 | { .clkdm_name = "mpu_clkdm" }, |
| @@ -138,6 +179,11 @@ static struct clkdm_dep per_sleepdeps[] = { | |||
| 138 | { NULL }, | 179 | { NULL }, |
| 139 | }; | 180 | }; |
| 140 | 181 | ||
| 182 | static struct clkdm_dep per_am35x_sleepdeps[] = { | ||
| 183 | { .clkdm_name = "mpu_clkdm" }, | ||
| 184 | { NULL }, | ||
| 185 | }; | ||
| 186 | |||
| 141 | /* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */ | 187 | /* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */ |
| 142 | static struct clkdm_dep usbhost_sleepdeps[] = { | 188 | static struct clkdm_dep usbhost_sleepdeps[] = { |
| 143 | { .clkdm_name = "mpu_clkdm" }, | 189 | { .clkdm_name = "mpu_clkdm" }, |
| @@ -145,6 +191,11 @@ static struct clkdm_dep usbhost_sleepdeps[] = { | |||
| 145 | { NULL }, | 191 | { NULL }, |
| 146 | }; | 192 | }; |
| 147 | 193 | ||
| 194 | static struct clkdm_dep usbhost_am35x_sleepdeps[] = { | ||
| 195 | { .clkdm_name = "mpu_clkdm" }, | ||
| 196 | { NULL }, | ||
| 197 | }; | ||
| 198 | |||
| 148 | /* 3430: CM_SLEEPDEP_CAM: MPU */ | 199 | /* 3430: CM_SLEEPDEP_CAM: MPU */ |
| 149 | static struct clkdm_dep cam_sleepdeps[] = { | 200 | static struct clkdm_dep cam_sleepdeps[] = { |
| 150 | { .clkdm_name = "mpu_clkdm" }, | 201 | { .clkdm_name = "mpu_clkdm" }, |
| @@ -175,6 +226,15 @@ static struct clockdomain mpu_3xxx_clkdm = { | |||
| 175 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, | 226 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, |
| 176 | }; | 227 | }; |
| 177 | 228 | ||
| 229 | static struct clockdomain mpu_am35x_clkdm = { | ||
| 230 | .name = "mpu_clkdm", | ||
| 231 | .pwrdm = { .name = "mpu_pwrdm" }, | ||
| 232 | .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP, | ||
| 233 | .dep_bit = OMAP3430_EN_MPU_SHIFT, | ||
| 234 | .wkdep_srcs = mpu_am35x_wkdeps, | ||
| 235 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, | ||
| 236 | }; | ||
| 237 | |||
| 178 | static struct clockdomain neon_clkdm = { | 238 | static struct clockdomain neon_clkdm = { |
| 179 | .name = "neon_clkdm", | 239 | .name = "neon_clkdm", |
| 180 | .pwrdm = { .name = "neon_pwrdm" }, | 240 | .pwrdm = { .name = "neon_pwrdm" }, |
| @@ -210,6 +270,15 @@ static struct clockdomain sgx_clkdm = { | |||
| 210 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, | 270 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, |
| 211 | }; | 271 | }; |
| 212 | 272 | ||
| 273 | static struct clockdomain sgx_am35x_clkdm = { | ||
| 274 | .name = "sgx_clkdm", | ||
| 275 | .pwrdm = { .name = "sgx_pwrdm" }, | ||
| 276 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
| 277 | .wkdep_srcs = gfx_sgx_am35x_wkdeps, | ||
| 278 | .sleepdep_srcs = gfx_sgx_sleepdeps, | ||
| 279 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, | ||
| 280 | }; | ||
| 281 | |||
| 213 | /* | 282 | /* |
| 214 | * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but | 283 | * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but |
| 215 | * then that information was removed from the 34xx ES2+ TRM. It is | 284 | * then that information was removed from the 34xx ES2+ TRM. It is |
| @@ -261,6 +330,16 @@ static struct clockdomain dss_3xxx_clkdm = { | |||
| 261 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, | 330 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, |
| 262 | }; | 331 | }; |
| 263 | 332 | ||
| 333 | static struct clockdomain dss_am35x_clkdm = { | ||
| 334 | .name = "dss_clkdm", | ||
| 335 | .pwrdm = { .name = "dss_pwrdm" }, | ||
| 336 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
| 337 | .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT, | ||
| 338 | .wkdep_srcs = dss_am35x_wkdeps, | ||
| 339 | .sleepdep_srcs = dss_am35x_sleepdeps, | ||
| 340 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, | ||
| 341 | }; | ||
| 342 | |||
| 264 | static struct clockdomain cam_clkdm = { | 343 | static struct clockdomain cam_clkdm = { |
| 265 | .name = "cam_clkdm", | 344 | .name = "cam_clkdm", |
| 266 | .pwrdm = { .name = "cam_pwrdm" }, | 345 | .pwrdm = { .name = "cam_pwrdm" }, |
| @@ -279,6 +358,15 @@ static struct clockdomain usbhost_clkdm = { | |||
| 279 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, | 358 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, |
| 280 | }; | 359 | }; |
| 281 | 360 | ||
| 361 | static struct clockdomain usbhost_am35x_clkdm = { | ||
| 362 | .name = "usbhost_clkdm", | ||
| 363 | .pwrdm = { .name = "core_pwrdm" }, | ||
| 364 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
| 365 | .wkdep_srcs = usbhost_am35x_wkdeps, | ||
| 366 | .sleepdep_srcs = usbhost_am35x_sleepdeps, | ||
| 367 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, | ||
| 368 | }; | ||
| 369 | |||
| 282 | static struct clockdomain per_clkdm = { | 370 | static struct clockdomain per_clkdm = { |
| 283 | .name = "per_clkdm", | 371 | .name = "per_clkdm", |
| 284 | .pwrdm = { .name = "per_pwrdm" }, | 372 | .pwrdm = { .name = "per_pwrdm" }, |
| @@ -289,6 +377,16 @@ static struct clockdomain per_clkdm = { | |||
| 289 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, | 377 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, |
| 290 | }; | 378 | }; |
| 291 | 379 | ||
| 380 | static struct clockdomain per_am35x_clkdm = { | ||
| 381 | .name = "per_clkdm", | ||
| 382 | .pwrdm = { .name = "per_pwrdm" }, | ||
| 383 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
| 384 | .dep_bit = OMAP3430_EN_PER_SHIFT, | ||
| 385 | .wkdep_srcs = per_am35x_wkdeps, | ||
| 386 | .sleepdep_srcs = per_am35x_sleepdeps, | ||
| 387 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, | ||
| 388 | }; | ||
| 389 | |||
| 292 | /* | 390 | /* |
| 293 | * Disable hw supervised mode for emu_clkdm, because emu_pwrdm is | 391 | * Disable hw supervised mode for emu_clkdm, because emu_pwrdm is |
| 294 | * switched of even if sdti is in use | 392 | * switched of even if sdti is in use |
| @@ -341,31 +439,44 @@ static struct clkdm_autodep clkdm_autodeps[] = { | |||
| 341 | } | 439 | } |
| 342 | }; | 440 | }; |
| 343 | 441 | ||
| 442 | static struct clkdm_autodep clkdm_am35x_autodeps[] = { | ||
| 443 | { | ||
| 444 | .clkdm = { .name = "mpu_clkdm" }, | ||
| 445 | }, | ||
| 446 | { | ||
| 447 | .clkdm = { .name = NULL }, | ||
| 448 | } | ||
| 449 | }; | ||
| 450 | |||
| 344 | /* | 451 | /* |
| 345 | * | 452 | * |
| 346 | */ | 453 | */ |
| 347 | 454 | ||
| 348 | static struct clockdomain *clockdomains_omap3430_common[] __initdata = { | 455 | static struct clockdomain *clockdomains_common[] __initdata = { |
| 349 | &wkup_common_clkdm, | 456 | &wkup_common_clkdm, |
| 350 | &cm_common_clkdm, | 457 | &cm_common_clkdm, |
| 351 | &prm_common_clkdm, | 458 | &prm_common_clkdm, |
| 352 | &mpu_3xxx_clkdm, | ||
| 353 | &neon_clkdm, | 459 | &neon_clkdm, |
| 354 | &iva2_clkdm, | ||
| 355 | &d2d_clkdm, | ||
| 356 | &core_l3_3xxx_clkdm, | 460 | &core_l3_3xxx_clkdm, |
| 357 | &core_l4_3xxx_clkdm, | 461 | &core_l4_3xxx_clkdm, |
| 358 | &dss_3xxx_clkdm, | ||
| 359 | &cam_clkdm, | ||
| 360 | &per_clkdm, | ||
| 361 | &emu_clkdm, | 462 | &emu_clkdm, |
| 362 | &dpll1_clkdm, | 463 | &dpll1_clkdm, |
| 363 | &dpll2_clkdm, | ||
| 364 | &dpll3_clkdm, | 464 | &dpll3_clkdm, |
| 365 | &dpll4_clkdm, | 465 | &dpll4_clkdm, |
| 366 | NULL | 466 | NULL |
| 367 | }; | 467 | }; |
| 368 | 468 | ||
| 469 | static struct clockdomain *clockdomains_omap3430[] __initdata = { | ||
| 470 | &mpu_3xxx_clkdm, | ||
| 471 | &iva2_clkdm, | ||
| 472 | &d2d_clkdm, | ||
| 473 | &dss_3xxx_clkdm, | ||
| 474 | &cam_clkdm, | ||
| 475 | &per_clkdm, | ||
| 476 | &dpll2_clkdm, | ||
| 477 | NULL | ||
| 478 | }; | ||
| 479 | |||
| 369 | static struct clockdomain *clockdomains_omap3430es1[] __initdata = { | 480 | static struct clockdomain *clockdomains_omap3430es1[] __initdata = { |
| 370 | &gfx_3430es1_clkdm, | 481 | &gfx_3430es1_clkdm, |
| 371 | NULL, | 482 | NULL, |
| @@ -378,21 +489,41 @@ static struct clockdomain *clockdomains_omap3430es2plus[] __initdata = { | |||
| 378 | NULL, | 489 | NULL, |
| 379 | }; | 490 | }; |
| 380 | 491 | ||
| 492 | static struct clockdomain *clockdomains_am35x[] __initdata = { | ||
| 493 | &mpu_am35x_clkdm, | ||
| 494 | &sgx_am35x_clkdm, | ||
| 495 | &dss_am35x_clkdm, | ||
| 496 | &per_am35x_clkdm, | ||
| 497 | &usbhost_am35x_clkdm, | ||
| 498 | &dpll5_clkdm, | ||
| 499 | NULL | ||
| 500 | }; | ||
| 501 | |||
| 381 | void __init omap3xxx_clockdomains_init(void) | 502 | void __init omap3xxx_clockdomains_init(void) |
| 382 | { | 503 | { |
| 383 | struct clockdomain **sc; | 504 | struct clockdomain **sc; |
| 505 | unsigned int rev; | ||
| 384 | 506 | ||
| 385 | if (!cpu_is_omap34xx()) | 507 | if (!cpu_is_omap34xx()) |
| 386 | return; | 508 | return; |
| 387 | 509 | ||
| 388 | clkdm_register_platform_funcs(&omap3_clkdm_operations); | 510 | clkdm_register_platform_funcs(&omap3_clkdm_operations); |
| 389 | clkdm_register_clkdms(clockdomains_omap3430_common); | 511 | clkdm_register_clkdms(clockdomains_common); |
| 390 | 512 | ||
| 391 | sc = (omap_rev() == OMAP3430_REV_ES1_0) ? clockdomains_omap3430es1 : | 513 | rev = omap_rev(); |
| 392 | clockdomains_omap3430es2plus; | ||
| 393 | 514 | ||
| 394 | clkdm_register_clkdms(sc); | 515 | if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) { |
| 516 | clkdm_register_clkdms(clockdomains_am35x); | ||
| 517 | clkdm_register_autodeps(clkdm_am35x_autodeps); | ||
| 518 | } else { | ||
| 519 | clkdm_register_clkdms(clockdomains_omap3430); | ||
| 520 | |||
| 521 | sc = (rev == OMAP3430_REV_ES1_0) ? | ||
| 522 | clockdomains_omap3430es1 : clockdomains_omap3430es2plus; | ||
| 523 | |||
| 524 | clkdm_register_clkdms(sc); | ||
| 525 | clkdm_register_autodeps(clkdm_autodeps); | ||
| 526 | } | ||
| 395 | 527 | ||
| 396 | clkdm_register_autodeps(clkdm_autodeps); | ||
| 397 | clkdm_complete_init(); | 528 | clkdm_complete_init(); |
| 398 | } | 529 | } |
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h index 8083a8cdc55f..766338fe4d34 100644 --- a/arch/arm/mach-omap2/cm-regbits-34xx.h +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h | |||
| @@ -169,8 +169,6 @@ | |||
| 169 | /* AM35XX specific CM_ICLKEN1_CORE bits */ | 169 | /* AM35XX specific CM_ICLKEN1_CORE bits */ |
| 170 | #define AM35XX_EN_IPSS_MASK (1 << 4) | 170 | #define AM35XX_EN_IPSS_MASK (1 << 4) |
| 171 | #define AM35XX_EN_IPSS_SHIFT 4 | 171 | #define AM35XX_EN_IPSS_SHIFT 4 |
| 172 | #define AM35XX_EN_UART4_MASK (1 << 23) | ||
| 173 | #define AM35XX_EN_UART4_SHIFT 23 | ||
| 174 | 172 | ||
| 175 | /* CM_ICLKEN2_CORE */ | 173 | /* CM_ICLKEN2_CORE */ |
| 176 | #define OMAP3430_EN_PKA_MASK (1 << 4) | 174 | #define OMAP3430_EN_PKA_MASK (1 << 4) |
| @@ -207,6 +205,8 @@ | |||
| 207 | #define OMAP3430_ST_DES2_MASK (1 << 26) | 205 | #define OMAP3430_ST_DES2_MASK (1 << 26) |
| 208 | #define OMAP3430_ST_MSPRO_SHIFT 23 | 206 | #define OMAP3430_ST_MSPRO_SHIFT 23 |
| 209 | #define OMAP3430_ST_MSPRO_MASK (1 << 23) | 207 | #define OMAP3430_ST_MSPRO_MASK (1 << 23) |
| 208 | #define AM35XX_ST_UART4_SHIFT 23 | ||
| 209 | #define AM35XX_ST_UART4_MASK (1 << 23) | ||
| 210 | #define OMAP3430_ST_HDQ_SHIFT 22 | 210 | #define OMAP3430_ST_HDQ_SHIFT 22 |
| 211 | #define OMAP3430_ST_HDQ_MASK (1 << 22) | 211 | #define OMAP3430_ST_HDQ_MASK (1 << 22) |
| 212 | #define OMAP3430ES1_ST_FAC_SHIFT 8 | 212 | #define OMAP3430ES1_ST_FAC_SHIFT 8 |
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c index 1706ebcec08d..c1875862679f 100644 --- a/arch/arm/mach-omap2/common-board-devices.c +++ b/arch/arm/mach-omap2/common-board-devices.c | |||
| @@ -63,28 +63,30 @@ 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 | if (board_pdata && board_pdata->get_pendown_state) { | 66 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); |
| 67 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); | 67 | if (err) { |
| 68 | if (err) { | 68 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); |
| 69 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); | 69 | return; |
| 70 | return; | ||
| 71 | } | ||
| 72 | gpio_export(gpio_pendown, 0); | ||
| 73 | |||
| 74 | if (gpio_debounce) | ||
| 75 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
| 76 | } | 70 | } |
| 77 | 71 | ||
| 72 | if (gpio_debounce) | ||
| 73 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
| 74 | |||
| 78 | spi_bi->bus_num = bus_num; | 75 | spi_bi->bus_num = bus_num; |
| 79 | spi_bi->irq = gpio_to_irq(gpio_pendown); | 76 | spi_bi->irq = gpio_to_irq(gpio_pendown); |
| 80 | 77 | ||
| 81 | if (board_pdata) { | 78 | if (board_pdata) { |
| 82 | board_pdata->gpio_pendown = gpio_pendown; | 79 | board_pdata->gpio_pendown = gpio_pendown; |
| 83 | spi_bi->platform_data = board_pdata; | 80 | spi_bi->platform_data = board_pdata; |
| 81 | if (board_pdata->get_pendown_state) | ||
| 82 | gpio_export(gpio_pendown, 0); | ||
| 84 | } else { | 83 | } else { |
| 85 | ads7846_config.gpio_pendown = gpio_pendown; | 84 | ads7846_config.gpio_pendown = gpio_pendown; |
| 86 | } | 85 | } |
| 87 | 86 | ||
| 87 | if (!board_pdata || (board_pdata && !board_pdata->get_pendown_state)) | ||
| 88 | gpio_free(gpio_pendown); | ||
| 89 | |||
| 88 | spi_register_board_info(&ads7846_spi_board_info, 1); | 90 | spi_register_board_info(&ads7846_spi_board_info, 1); |
| 89 | } | 91 | } |
| 90 | #else | 92 | #else |
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 207bc1c7759f..31344528eb54 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c | |||
| @@ -36,8 +36,6 @@ | |||
| 36 | #include "control.h" | 36 | #include "control.h" |
| 37 | #include "common.h" | 37 | #include "common.h" |
| 38 | 38 | ||
| 39 | #ifdef CONFIG_CPU_IDLE | ||
| 40 | |||
| 41 | /* Mach specific information to be recorded in the C-state driver_data */ | 39 | /* Mach specific information to be recorded in the C-state driver_data */ |
| 42 | struct omap3_idle_statedata { | 40 | struct omap3_idle_statedata { |
| 43 | u32 mpu_state; | 41 | u32 mpu_state; |
| @@ -379,9 +377,3 @@ int __init omap3_idle_init(void) | |||
| 379 | 377 | ||
| 380 | return 0; | 378 | return 0; |
| 381 | } | 379 | } |
| 382 | #else | ||
| 383 | int __init omap3_idle_init(void) | ||
| 384 | { | ||
| 385 | return 0; | ||
| 386 | } | ||
| 387 | #endif /* CONFIG_CPU_IDLE */ | ||
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c index be1617ca84bd..02d15bbd4e35 100644 --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c | |||
| @@ -22,8 +22,6 @@ | |||
| 22 | #include "pm.h" | 22 | #include "pm.h" |
| 23 | #include "prm.h" | 23 | #include "prm.h" |
| 24 | 24 | ||
| 25 | #ifdef CONFIG_CPU_IDLE | ||
| 26 | |||
| 27 | /* Machine specific information */ | 25 | /* Machine specific information */ |
| 28 | struct omap4_idle_statedata { | 26 | struct omap4_idle_statedata { |
| 29 | u32 cpu_state; | 27 | u32 cpu_state; |
| @@ -199,9 +197,3 @@ int __init omap4_idle_init(void) | |||
| 199 | 197 | ||
| 200 | return 0; | 198 | return 0; |
| 201 | } | 199 | } |
| 202 | #else | ||
| 203 | int __init omap4_idle_init(void) | ||
| 204 | { | ||
| 205 | return 0; | ||
| 206 | } | ||
| 207 | #endif /* CONFIG_CPU_IDLE */ | ||
diff --git a/arch/arm/mach-omap2/include/mach/am35xx.h b/arch/arm/mach-omap2/include/mach/am35xx.h index f1e13d1ca5e7..95594495fcf6 100644 --- a/arch/arm/mach-omap2/include/mach/am35xx.h +++ b/arch/arm/mach-omap2/include/mach/am35xx.h | |||
| @@ -36,6 +36,8 @@ | |||
| 36 | #define AM35XX_EMAC_CNTRL_MOD_OFFSET (0x0) | 36 | #define AM35XX_EMAC_CNTRL_MOD_OFFSET (0x0) |
| 37 | #define AM35XX_EMAC_CNTRL_RAM_OFFSET (0x20000) | 37 | #define AM35XX_EMAC_CNTRL_RAM_OFFSET (0x20000) |
| 38 | #define AM35XX_EMAC_MDIO_OFFSET (0x30000) | 38 | #define AM35XX_EMAC_MDIO_OFFSET (0x30000) |
| 39 | #define AM35XX_IPSS_MDIO_BASE (AM35XX_IPSS_EMAC_BASE + \ | ||
| 40 | AM35XX_EMAC_MDIO_OFFSET) | ||
| 39 | #define AM35XX_EMAC_CNTRL_RAM_SIZE (0x2000) | 41 | #define AM35XX_EMAC_CNTRL_RAM_SIZE (0x2000) |
| 40 | #define AM35XX_EMAC_RAM_ADDR (AM3517_EMAC_BASE + \ | 42 | #define AM35XX_EMAC_RAM_ADDR (AM3517_EMAC_BASE + \ |
| 41 | AM3517_EMAC_CNTRL_RAM_OFFSET) | 43 | AM3517_EMAC_CNTRL_RAM_OFFSET) |
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index 6038a8c84b74..4c35366c7e4d 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c | |||
| @@ -262,7 +262,7 @@ int __init omap_intc_of_init(struct device_node *node, | |||
| 262 | struct device_node *parent) | 262 | struct device_node *parent) |
| 263 | { | 263 | { |
| 264 | struct resource res; | 264 | struct resource res; |
| 265 | u32 nr_irqs = 96; | 265 | u32 nr_irq = 96; |
| 266 | 266 | ||
| 267 | if (WARN_ON(!node)) | 267 | if (WARN_ON(!node)) |
| 268 | return -ENODEV; | 268 | return -ENODEV; |
| @@ -272,10 +272,10 @@ int __init omap_intc_of_init(struct device_node *node, | |||
| 272 | return -EINVAL; | 272 | return -EINVAL; |
| 273 | } | 273 | } |
| 274 | 274 | ||
| 275 | if (of_property_read_u32(node, "ti,intc-size", &nr_irqs)) | 275 | if (of_property_read_u32(node, "ti,intc-size", &nr_irq)) |
| 276 | pr_warn("unable to get intc-size, default to %d\n", nr_irqs); | 276 | pr_warn("unable to get intc-size, default to %d\n", nr_irq); |
| 277 | 277 | ||
| 278 | omap_init_irq(res.start, nr_irqs, of_node_get(node)); | 278 | omap_init_irq(res.start, nr_irq, of_node_get(node)); |
| 279 | 279 | ||
| 280 | return 0; | 280 | return 0; |
| 281 | } | 281 | } |
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index 19b8b6774862..6875be837d9f 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c | |||
| @@ -83,8 +83,6 @@ static int omap2_mbox_startup(struct omap_mbox *mbox) | |||
| 83 | l = mbox_read_reg(MAILBOX_REVISION); | 83 | l = mbox_read_reg(MAILBOX_REVISION); |
| 84 | pr_debug("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f)); | 84 | pr_debug("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f)); |
| 85 | 85 | ||
| 86 | omap2_mbox_enable_irq(mbox, IRQ_RX); | ||
| 87 | |||
| 88 | return 0; | 86 | return 0; |
| 89 | } | 87 | } |
| 90 | 88 | ||
diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c index ac49384d0285..1be8bcb52e93 100644 --- a/arch/arm/mach-omap2/omap-iommu.c +++ b/arch/arm/mach-omap2/omap-iommu.c | |||
| @@ -73,19 +73,17 @@ static struct iommu_device omap4_devices[] = { | |||
| 73 | .da_end = 0xFFFFF000, | 73 | .da_end = 0xFFFFF000, |
| 74 | }, | 74 | }, |
| 75 | }, | 75 | }, |
| 76 | #if defined(CONFIG_MPU_TESLA_IOMMU) | ||
| 77 | { | 76 | { |
| 78 | .base = OMAP4_MMU2_BASE, | 77 | .base = OMAP4_MMU2_BASE, |
| 79 | .irq = INT_44XX_DSP_MMU, | 78 | .irq = OMAP44XX_IRQ_TESLA_MMU, |
| 80 | .pdata = { | 79 | .pdata = { |
| 81 | .name = "tesla", | 80 | .name = "tesla", |
| 82 | .nr_tlb_entries = 32, | 81 | .nr_tlb_entries = 32, |
| 83 | .clk_name = "tesla_ick", | 82 | .clk_name = "dsp_fck", |
| 84 | .da_start = 0x0, | 83 | .da_start = 0x0, |
| 85 | .da_end = 0xFFFFF000, | 84 | .da_end = 0xFFFFF000, |
| 86 | }, | 85 | }, |
| 87 | }, | 86 | }, |
| 88 | #endif | ||
| 89 | }; | 87 | }; |
| 90 | #define NR_OMAP4_IOMMU_DEVICES ARRAY_SIZE(omap4_devices) | 88 | #define NR_OMAP4_IOMMU_DEVICES ARRAY_SIZE(omap4_devices) |
| 91 | static struct platform_device *omap4_iommu_pdev[NR_OMAP4_IOMMU_DEVICES]; | 89 | static struct platform_device *omap4_iommu_pdev[NR_OMAP4_IOMMU_DEVICES]; |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index b26d3c9bca16..a8653af19697 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
| @@ -527,11 +527,27 @@ static struct omap_hwmod omap36xx_uart4_hwmod = { | |||
| 527 | 527 | ||
| 528 | static struct omap_hwmod_irq_info am35xx_uart4_mpu_irqs[] = { | 528 | static struct omap_hwmod_irq_info am35xx_uart4_mpu_irqs[] = { |
| 529 | { .irq = INT_35XX_UART4_IRQ, }, | 529 | { .irq = INT_35XX_UART4_IRQ, }, |
| 530 | { .irq = -1 } | ||
| 530 | }; | 531 | }; |
| 531 | 532 | ||
| 532 | static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = { | 533 | static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = { |
| 533 | { .name = "rx", .dma_req = AM35XX_DMA_UART4_RX, }, | 534 | { .name = "rx", .dma_req = AM35XX_DMA_UART4_RX, }, |
| 534 | { .name = "tx", .dma_req = AM35XX_DMA_UART4_TX, }, | 535 | { .name = "tx", .dma_req = AM35XX_DMA_UART4_TX, }, |
| 536 | { .dma_req = -1 } | ||
| 537 | }; | ||
| 538 | |||
| 539 | /* | ||
| 540 | * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or | ||
| 541 | * uart2_fck being enabled. So we add uart1_fck as an optional clock, | ||
| 542 | * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET. This really | ||
| 543 | * should not be needed. The functional clock structure of the AM35xx | ||
| 544 | * UART4 is extremely unclear and opaque; it is unclear what the role | ||
| 545 | * of uart1/2_fck is for the UART4. Any clarification from either | ||
| 546 | * empirical testing or the AM3505/3517 hardware designers would be | ||
| 547 | * most welcome. | ||
| 548 | */ | ||
| 549 | static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = { | ||
| 550 | { .role = "softreset_uart1_fck", .clk = "uart1_fck" }, | ||
| 535 | }; | 551 | }; |
| 536 | 552 | ||
| 537 | static struct omap_hwmod am35xx_uart4_hwmod = { | 553 | static struct omap_hwmod am35xx_uart4_hwmod = { |
| @@ -543,11 +559,14 @@ static struct omap_hwmod am35xx_uart4_hwmod = { | |||
| 543 | .omap2 = { | 559 | .omap2 = { |
| 544 | .module_offs = CORE_MOD, | 560 | .module_offs = CORE_MOD, |
| 545 | .prcm_reg_id = 1, | 561 | .prcm_reg_id = 1, |
| 546 | .module_bit = OMAP3430_EN_UART4_SHIFT, | 562 | .module_bit = AM35XX_EN_UART4_SHIFT, |
| 547 | .idlest_reg_id = 1, | 563 | .idlest_reg_id = 1, |
| 548 | .idlest_idle_bit = OMAP3430_EN_UART4_SHIFT, | 564 | .idlest_idle_bit = AM35XX_ST_UART4_SHIFT, |
| 549 | }, | 565 | }, |
| 550 | }, | 566 | }, |
| 567 | .opt_clks = am35xx_uart4_opt_clks, | ||
| 568 | .opt_clks_cnt = ARRAY_SIZE(am35xx_uart4_opt_clks), | ||
| 569 | .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, | ||
| 551 | .class = &omap2_uart_class, | 570 | .class = &omap2_uart_class, |
| 552 | }; | 571 | }; |
| 553 | 572 | ||
| @@ -1638,25 +1657,20 @@ static struct omap_hwmod omap3xxx_usbhsotg_hwmod = { | |||
| 1638 | 1657 | ||
| 1639 | /* usb_otg_hs */ | 1658 | /* usb_otg_hs */ |
| 1640 | static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = { | 1659 | static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = { |
| 1641 | |||
| 1642 | { .name = "mc", .irq = 71 }, | 1660 | { .name = "mc", .irq = 71 }, |
| 1643 | { .irq = -1 } | 1661 | { .irq = -1 } |
| 1644 | }; | 1662 | }; |
| 1645 | 1663 | ||
| 1646 | static struct omap_hwmod_class am35xx_usbotg_class = { | 1664 | static struct omap_hwmod_class am35xx_usbotg_class = { |
| 1647 | .name = "am35xx_usbotg", | 1665 | .name = "am35xx_usbotg", |
| 1648 | .sysc = NULL, | ||
| 1649 | }; | 1666 | }; |
| 1650 | 1667 | ||
| 1651 | static struct omap_hwmod am35xx_usbhsotg_hwmod = { | 1668 | static struct omap_hwmod am35xx_usbhsotg_hwmod = { |
| 1652 | .name = "am35x_otg_hs", | 1669 | .name = "am35x_otg_hs", |
| 1653 | .mpu_irqs = am35xx_usbhsotg_mpu_irqs, | 1670 | .mpu_irqs = am35xx_usbhsotg_mpu_irqs, |
| 1654 | .main_clk = NULL, | 1671 | .main_clk = "hsotgusb_fck", |
| 1655 | .prcm = { | ||
| 1656 | .omap2 = { | ||
| 1657 | }, | ||
| 1658 | }, | ||
| 1659 | .class = &am35xx_usbotg_class, | 1672 | .class = &am35xx_usbotg_class, |
| 1673 | .flags = HWMOD_NO_IDLEST, | ||
| 1660 | }; | 1674 | }; |
| 1661 | 1675 | ||
| 1662 | /* MMC/SD/SDIO common */ | 1676 | /* MMC/SD/SDIO common */ |
| @@ -2097,9 +2111,10 @@ static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = { | |||
| 2097 | static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = { | 2111 | static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = { |
| 2098 | .master = &am35xx_usbhsotg_hwmod, | 2112 | .master = &am35xx_usbhsotg_hwmod, |
| 2099 | .slave = &omap3xxx_l3_main_hwmod, | 2113 | .slave = &omap3xxx_l3_main_hwmod, |
| 2100 | .clk = "core_l3_ick", | 2114 | .clk = "hsotgusb_ick", |
| 2101 | .user = OCP_USER_MPU, | 2115 | .user = OCP_USER_MPU, |
| 2102 | }; | 2116 | }; |
| 2117 | |||
| 2103 | /* L4_CORE -> L4_WKUP interface */ | 2118 | /* L4_CORE -> L4_WKUP interface */ |
| 2104 | static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = { | 2119 | static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = { |
| 2105 | .master = &omap3xxx_l4_core_hwmod, | 2120 | .master = &omap3xxx_l4_core_hwmod, |
| @@ -2243,6 +2258,7 @@ static struct omap_hwmod_addr_space am35xx_uart4_addr_space[] = { | |||
| 2243 | .pa_end = OMAP3_UART4_AM35XX_BASE + SZ_1K - 1, | 2258 | .pa_end = OMAP3_UART4_AM35XX_BASE + SZ_1K - 1, |
| 2244 | .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, | 2259 | .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, |
| 2245 | }, | 2260 | }, |
| 2261 | { } | ||
| 2246 | }; | 2262 | }; |
| 2247 | 2263 | ||
| 2248 | static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = { | 2264 | static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = { |
| @@ -2393,7 +2409,7 @@ static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = { | |||
| 2393 | static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = { | 2409 | static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = { |
| 2394 | .master = &omap3xxx_l4_core_hwmod, | 2410 | .master = &omap3xxx_l4_core_hwmod, |
| 2395 | .slave = &am35xx_usbhsotg_hwmod, | 2411 | .slave = &am35xx_usbhsotg_hwmod, |
| 2396 | .clk = "l4_ick", | 2412 | .clk = "hsotgusb_ick", |
| 2397 | .addr = am35xx_usbhsotg_addrs, | 2413 | .addr = am35xx_usbhsotg_addrs, |
| 2398 | .user = OCP_USER_MPU, | 2414 | .user = OCP_USER_MPU, |
| 2399 | }; | 2415 | }; |
| @@ -3138,6 +3154,107 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__counter_32k = { | |||
| 3138 | .user = OCP_USER_MPU | OCP_USER_SDMA, | 3154 | .user = OCP_USER_MPU | OCP_USER_SDMA, |
| 3139 | }; | 3155 | }; |
| 3140 | 3156 | ||
| 3157 | /* am35xx has Davinci MDIO & EMAC */ | ||
| 3158 | static struct omap_hwmod_class am35xx_mdio_class = { | ||
| 3159 | .name = "davinci_mdio", | ||
| 3160 | }; | ||
| 3161 | |||
| 3162 | static struct omap_hwmod am35xx_mdio_hwmod = { | ||
| 3163 | .name = "davinci_mdio", | ||
| 3164 | .class = &am35xx_mdio_class, | ||
| 3165 | .flags = HWMOD_NO_IDLEST, | ||
| 3166 | }; | ||
| 3167 | |||
| 3168 | /* | ||
| 3169 | * XXX Should be connected to an IPSS hwmod, not the L3 directly; | ||
| 3170 | * but this will probably require some additional hwmod core support, | ||
| 3171 | * so is left as a future to-do item. | ||
| 3172 | */ | ||
| 3173 | static struct omap_hwmod_ocp_if am35xx_mdio__l3 = { | ||
| 3174 | .master = &am35xx_mdio_hwmod, | ||
| 3175 | .slave = &omap3xxx_l3_main_hwmod, | ||
| 3176 | .clk = "emac_fck", | ||
| 3177 | .user = OCP_USER_MPU, | ||
| 3178 | }; | ||
| 3179 | |||
| 3180 | static struct omap_hwmod_addr_space am35xx_mdio_addrs[] = { | ||
| 3181 | { | ||
| 3182 | .pa_start = AM35XX_IPSS_MDIO_BASE, | ||
| 3183 | .pa_end = AM35XX_IPSS_MDIO_BASE + SZ_4K - 1, | ||
| 3184 | .flags = ADDR_TYPE_RT, | ||
| 3185 | }, | ||
| 3186 | { } | ||
| 3187 | }; | ||
| 3188 | |||
| 3189 | /* l4_core -> davinci mdio */ | ||
| 3190 | /* | ||
| 3191 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; | ||
| 3192 | * but this will probably require some additional hwmod core support, | ||
| 3193 | * so is left as a future to-do item. | ||
| 3194 | */ | ||
| 3195 | static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = { | ||
| 3196 | .master = &omap3xxx_l4_core_hwmod, | ||
| 3197 | .slave = &am35xx_mdio_hwmod, | ||
| 3198 | .clk = "emac_fck", | ||
| 3199 | .addr = am35xx_mdio_addrs, | ||
| 3200 | .user = OCP_USER_MPU, | ||
| 3201 | }; | ||
| 3202 | |||
| 3203 | static struct omap_hwmod_irq_info am35xx_emac_mpu_irqs[] = { | ||
| 3204 | { .name = "rxthresh", .irq = INT_35XX_EMAC_C0_RXTHRESH_IRQ }, | ||
| 3205 | { .name = "rx_pulse", .irq = INT_35XX_EMAC_C0_RX_PULSE_IRQ }, | ||
| 3206 | { .name = "tx_pulse", .irq = INT_35XX_EMAC_C0_TX_PULSE_IRQ }, | ||
| 3207 | { .name = "misc_pulse", .irq = INT_35XX_EMAC_C0_MISC_PULSE_IRQ }, | ||
| 3208 | { .irq = -1 } | ||
| 3209 | }; | ||
| 3210 | |||
| 3211 | static struct omap_hwmod_class am35xx_emac_class = { | ||
| 3212 | .name = "davinci_emac", | ||
| 3213 | }; | ||
| 3214 | |||
| 3215 | static struct omap_hwmod am35xx_emac_hwmod = { | ||
| 3216 | .name = "davinci_emac", | ||
| 3217 | .mpu_irqs = am35xx_emac_mpu_irqs, | ||
| 3218 | .class = &am35xx_emac_class, | ||
| 3219 | .flags = HWMOD_NO_IDLEST, | ||
| 3220 | }; | ||
| 3221 | |||
| 3222 | /* l3_core -> davinci emac interface */ | ||
| 3223 | /* | ||
| 3224 | * XXX Should be connected to an IPSS hwmod, not the L3 directly; | ||
| 3225 | * but this will probably require some additional hwmod core support, | ||
| 3226 | * so is left as a future to-do item. | ||
| 3227 | */ | ||
| 3228 | static struct omap_hwmod_ocp_if am35xx_emac__l3 = { | ||
| 3229 | .master = &am35xx_emac_hwmod, | ||
| 3230 | .slave = &omap3xxx_l3_main_hwmod, | ||
| 3231 | .clk = "emac_ick", | ||
| 3232 | .user = OCP_USER_MPU, | ||
| 3233 | }; | ||
| 3234 | |||
| 3235 | static struct omap_hwmod_addr_space am35xx_emac_addrs[] = { | ||
| 3236 | { | ||
| 3237 | .pa_start = AM35XX_IPSS_EMAC_BASE, | ||
| 3238 | .pa_end = AM35XX_IPSS_EMAC_BASE + 0x30000 - 1, | ||
| 3239 | .flags = ADDR_TYPE_RT, | ||
| 3240 | }, | ||
| 3241 | { } | ||
| 3242 | }; | ||
| 3243 | |||
| 3244 | /* l4_core -> davinci emac */ | ||
| 3245 | /* | ||
| 3246 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; | ||
| 3247 | * but this will probably require some additional hwmod core support, | ||
| 3248 | * so is left as a future to-do item. | ||
| 3249 | */ | ||
| 3250 | static struct omap_hwmod_ocp_if am35xx_l4_core__emac = { | ||
| 3251 | .master = &omap3xxx_l4_core_hwmod, | ||
| 3252 | .slave = &am35xx_emac_hwmod, | ||
| 3253 | .clk = "emac_ick", | ||
| 3254 | .addr = am35xx_emac_addrs, | ||
| 3255 | .user = OCP_USER_MPU, | ||
| 3256 | }; | ||
| 3257 | |||
| 3141 | static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = { | 3258 | static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = { |
| 3142 | &omap3xxx_l3_main__l4_core, | 3259 | &omap3xxx_l3_main__l4_core, |
| 3143 | &omap3xxx_l3_main__l4_per, | 3260 | &omap3xxx_l3_main__l4_per, |
| @@ -3266,6 +3383,10 @@ static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = { | |||
| 3266 | &omap3xxx_l4_core__usb_tll_hs, | 3383 | &omap3xxx_l4_core__usb_tll_hs, |
| 3267 | &omap3xxx_l4_core__es3plus_mmc1, | 3384 | &omap3xxx_l4_core__es3plus_mmc1, |
| 3268 | &omap3xxx_l4_core__es3plus_mmc2, | 3385 | &omap3xxx_l4_core__es3plus_mmc2, |
| 3386 | &am35xx_mdio__l3, | ||
| 3387 | &am35xx_l4_core__mdio, | ||
| 3388 | &am35xx_emac__l3, | ||
| 3389 | &am35xx_l4_core__emac, | ||
| 3269 | NULL | 3390 | NULL |
| 3270 | }; | 3391 | }; |
| 3271 | 3392 | ||
diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c index de6d46451746..d8f6dbf45d16 100644 --- a/arch/arm/mach-omap2/opp.c +++ b/arch/arm/mach-omap2/opp.c | |||
| @@ -53,7 +53,7 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, | |||
| 53 | omap_table_init = 1; | 53 | omap_table_init = 1; |
| 54 | 54 | ||
| 55 | /* Lets now register with OPP library */ | 55 | /* Lets now register with OPP library */ |
| 56 | for (i = 0; i < opp_def_size; i++) { | 56 | for (i = 0; i < opp_def_size; i++, opp_def++) { |
| 57 | struct omap_hwmod *oh; | 57 | struct omap_hwmod *oh; |
| 58 | struct device *dev; | 58 | struct device *dev; |
| 59 | 59 | ||
| @@ -86,7 +86,6 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, | |||
| 86 | __func__, opp_def->freq, | 86 | __func__, opp_def->freq, |
| 87 | opp_def->hwmod_name, i, r); | 87 | opp_def->hwmod_name, i, r); |
| 88 | } | 88 | } |
| 89 | opp_def++; | ||
| 90 | } | 89 | } |
| 91 | 90 | ||
| 92 | return 0; | 91 | return 0; |
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 78564895e914..ab04d3bba2e7 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h | |||
| @@ -15,12 +15,25 @@ | |||
| 15 | 15 | ||
| 16 | #include "powerdomain.h" | 16 | #include "powerdomain.h" |
| 17 | 17 | ||
| 18 | #ifdef CONFIG_CPU_IDLE | ||
| 19 | extern int __init omap3_idle_init(void); | ||
| 20 | extern int __init omap4_idle_init(void); | ||
| 21 | #else | ||
| 22 | static inline int omap3_idle_init(void) | ||
| 23 | { | ||
| 24 | return 0; | ||
| 25 | } | ||
| 26 | |||
| 27 | static inline int omap4_idle_init(void) | ||
| 28 | { | ||
| 29 | return 0; | ||
| 30 | } | ||
| 31 | #endif | ||
| 32 | |||
| 18 | extern void *omap3_secure_ram_storage; | 33 | extern void *omap3_secure_ram_storage; |
| 19 | extern void omap3_pm_off_mode_enable(int); | 34 | extern void omap3_pm_off_mode_enable(int); |
| 20 | extern void omap_sram_idle(void); | 35 | extern void omap_sram_idle(void); |
| 21 | extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state); | 36 | extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state); |
| 22 | extern int omap3_idle_init(void); | ||
| 23 | extern int omap4_idle_init(void); | ||
| 24 | extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused); | 37 | extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused); |
| 25 | extern int (*omap_pm_suspend)(void); | 38 | extern int (*omap_pm_suspend)(void); |
| 26 | 39 | ||
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 3a595e899724..9b463c987508 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
| @@ -581,10 +581,13 @@ static void __init prcm_setup_regs(void) | |||
| 581 | OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); | 581 | OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); |
| 582 | 582 | ||
| 583 | /* Don't attach IVA interrupts */ | 583 | /* Don't attach IVA interrupts */ |
| 584 | omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); | 584 | if (omap3_has_iva()) { |
| 585 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); | 585 | omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); |
| 586 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); | 586 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); |
| 587 | omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL); | 587 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); |
| 588 | omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, | ||
| 589 | OMAP3430_PM_IVAGRPSEL); | ||
| 590 | } | ||
| 588 | 591 | ||
| 589 | /* Clear any pending 'reset' flags */ | 592 | /* Clear any pending 'reset' flags */ |
| 590 | omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); | 593 | omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); |
| @@ -598,7 +601,9 @@ static void __init prcm_setup_regs(void) | |||
| 598 | /* Clear any pending PRCM interrupts */ | 601 | /* Clear any pending PRCM interrupts */ |
| 599 | omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); | 602 | omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); |
| 600 | 603 | ||
| 601 | omap3_iva_idle(); | 604 | if (omap3_has_iva()) |
| 605 | omap3_iva_idle(); | ||
| 606 | |||
| 602 | omap3_d2d_idle(); | 607 | omap3_d2d_idle(); |
| 603 | } | 608 | } |
| 604 | 609 | ||
diff --git a/arch/arm/mach-omap2/powerdomains3xxx_data.c b/arch/arm/mach-omap2/powerdomains3xxx_data.c index fb0a0a6869d1..bb883e463078 100644 --- a/arch/arm/mach-omap2/powerdomains3xxx_data.c +++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c | |||
| @@ -71,6 +71,22 @@ static struct powerdomain mpu_3xxx_pwrdm = { | |||
| 71 | .voltdm = { .name = "mpu_iva" }, | 71 | .voltdm = { .name = "mpu_iva" }, |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | static struct powerdomain mpu_am35x_pwrdm = { | ||
| 75 | .name = "mpu_pwrdm", | ||
| 76 | .prcm_offs = MPU_MOD, | ||
| 77 | .pwrsts = PWRSTS_ON, | ||
| 78 | .pwrsts_logic_ret = PWRSTS_ON, | ||
| 79 | .flags = PWRDM_HAS_MPU_QUIRK, | ||
| 80 | .banks = 1, | ||
| 81 | .pwrsts_mem_ret = { | ||
| 82 | [0] = PWRSTS_ON, | ||
| 83 | }, | ||
| 84 | .pwrsts_mem_on = { | ||
| 85 | [0] = PWRSTS_ON, | ||
| 86 | }, | ||
| 87 | .voltdm = { .name = "mpu_iva" }, | ||
| 88 | }; | ||
| 89 | |||
| 74 | /* | 90 | /* |
| 75 | * The USBTLL Save-and-Restore mechanism is broken on | 91 | * The USBTLL Save-and-Restore mechanism is broken on |
| 76 | * 3430s up to ES3.0 and 3630ES1.0. Hence this feature | 92 | * 3430s up to ES3.0 and 3630ES1.0. Hence this feature |
| @@ -120,6 +136,23 @@ static struct powerdomain core_3xxx_es3_1_pwrdm = { | |||
| 120 | .voltdm = { .name = "core" }, | 136 | .voltdm = { .name = "core" }, |
| 121 | }; | 137 | }; |
| 122 | 138 | ||
| 139 | static struct powerdomain core_am35x_pwrdm = { | ||
| 140 | .name = "core_pwrdm", | ||
| 141 | .prcm_offs = CORE_MOD, | ||
| 142 | .pwrsts = PWRSTS_ON, | ||
| 143 | .pwrsts_logic_ret = PWRSTS_ON, | ||
| 144 | .banks = 2, | ||
| 145 | .pwrsts_mem_ret = { | ||
| 146 | [0] = PWRSTS_ON, /* MEM1RETSTATE */ | ||
| 147 | [1] = PWRSTS_ON, /* MEM2RETSTATE */ | ||
| 148 | }, | ||
| 149 | .pwrsts_mem_on = { | ||
| 150 | [0] = PWRSTS_ON, /* MEM1ONSTATE */ | ||
| 151 | [1] = PWRSTS_ON, /* MEM2ONSTATE */ | ||
| 152 | }, | ||
| 153 | .voltdm = { .name = "core" }, | ||
| 154 | }; | ||
| 155 | |||
| 123 | static struct powerdomain dss_pwrdm = { | 156 | static struct powerdomain dss_pwrdm = { |
| 124 | .name = "dss_pwrdm", | 157 | .name = "dss_pwrdm", |
| 125 | .prcm_offs = OMAP3430_DSS_MOD, | 158 | .prcm_offs = OMAP3430_DSS_MOD, |
| @@ -135,6 +168,21 @@ static struct powerdomain dss_pwrdm = { | |||
| 135 | .voltdm = { .name = "core" }, | 168 | .voltdm = { .name = "core" }, |
| 136 | }; | 169 | }; |
| 137 | 170 | ||
| 171 | static struct powerdomain dss_am35x_pwrdm = { | ||
| 172 | .name = "dss_pwrdm", | ||
| 173 | .prcm_offs = OMAP3430_DSS_MOD, | ||
| 174 | .pwrsts = PWRSTS_ON, | ||
| 175 | .pwrsts_logic_ret = PWRSTS_ON, | ||
| 176 | .banks = 1, | ||
| 177 | .pwrsts_mem_ret = { | ||
| 178 | [0] = PWRSTS_ON, /* MEMRETSTATE */ | ||
| 179 | }, | ||
| 180 | .pwrsts_mem_on = { | ||
| 181 | [0] = PWRSTS_ON, /* MEMONSTATE */ | ||
| 182 | }, | ||
| 183 | .voltdm = { .name = "core" }, | ||
| 184 | }; | ||
| 185 | |||
| 138 | /* | 186 | /* |
| 139 | * Although the 34XX TRM Rev K Table 4-371 notes that retention is a | 187 | * Although the 34XX TRM Rev K Table 4-371 notes that retention is a |
| 140 | * possible SGX powerstate, the SGX device itself does not support | 188 | * possible SGX powerstate, the SGX device itself does not support |
| @@ -156,6 +204,21 @@ static struct powerdomain sgx_pwrdm = { | |||
| 156 | .voltdm = { .name = "core" }, | 204 | .voltdm = { .name = "core" }, |
| 157 | }; | 205 | }; |
| 158 | 206 | ||
| 207 | static struct powerdomain sgx_am35x_pwrdm = { | ||
| 208 | .name = "sgx_pwrdm", | ||
| 209 | .prcm_offs = OMAP3430ES2_SGX_MOD, | ||
| 210 | .pwrsts = PWRSTS_ON, | ||
| 211 | .pwrsts_logic_ret = PWRSTS_ON, | ||
| 212 | .banks = 1, | ||
| 213 | .pwrsts_mem_ret = { | ||
| 214 | [0] = PWRSTS_ON, /* MEMRETSTATE */ | ||
| 215 | }, | ||
| 216 | .pwrsts_mem_on = { | ||
| 217 | [0] = PWRSTS_ON, /* MEMONSTATE */ | ||
| 218 | }, | ||
| 219 | .voltdm = { .name = "core" }, | ||
| 220 | }; | ||
| 221 | |||
| 159 | static struct powerdomain cam_pwrdm = { | 222 | static struct powerdomain cam_pwrdm = { |
| 160 | .name = "cam_pwrdm", | 223 | .name = "cam_pwrdm", |
| 161 | .prcm_offs = OMAP3430_CAM_MOD, | 224 | .prcm_offs = OMAP3430_CAM_MOD, |
| @@ -186,6 +249,21 @@ static struct powerdomain per_pwrdm = { | |||
| 186 | .voltdm = { .name = "core" }, | 249 | .voltdm = { .name = "core" }, |
| 187 | }; | 250 | }; |
| 188 | 251 | ||
| 252 | static struct powerdomain per_am35x_pwrdm = { | ||
| 253 | .name = "per_pwrdm", | ||
| 254 | .prcm_offs = OMAP3430_PER_MOD, | ||
| 255 | .pwrsts = PWRSTS_ON, | ||
| 256 | .pwrsts_logic_ret = PWRSTS_ON, | ||
| 257 | .banks = 1, | ||
| 258 | .pwrsts_mem_ret = { | ||
| 259 | [0] = PWRSTS_ON, /* MEMRETSTATE */ | ||
| 260 | }, | ||
| 261 | .pwrsts_mem_on = { | ||
| 262 | [0] = PWRSTS_ON, /* MEMONSTATE */ | ||
| 263 | }, | ||
| 264 | .voltdm = { .name = "core" }, | ||
| 265 | }; | ||
| 266 | |||
| 189 | static struct powerdomain emu_pwrdm = { | 267 | static struct powerdomain emu_pwrdm = { |
| 190 | .name = "emu_pwrdm", | 268 | .name = "emu_pwrdm", |
| 191 | .prcm_offs = OMAP3430_EMU_MOD, | 269 | .prcm_offs = OMAP3430_EMU_MOD, |
| @@ -200,6 +278,14 @@ static struct powerdomain neon_pwrdm = { | |||
| 200 | .voltdm = { .name = "mpu_iva" }, | 278 | .voltdm = { .name = "mpu_iva" }, |
| 201 | }; | 279 | }; |
| 202 | 280 | ||
| 281 | static struct powerdomain neon_am35x_pwrdm = { | ||
| 282 | .name = "neon_pwrdm", | ||
| 283 | .prcm_offs = OMAP3430_NEON_MOD, | ||
| 284 | .pwrsts = PWRSTS_ON, | ||
| 285 | .pwrsts_logic_ret = PWRSTS_ON, | ||
| 286 | .voltdm = { .name = "mpu_iva" }, | ||
| 287 | }; | ||
| 288 | |||
| 203 | static struct powerdomain usbhost_pwrdm = { | 289 | static struct powerdomain usbhost_pwrdm = { |
| 204 | .name = "usbhost_pwrdm", | 290 | .name = "usbhost_pwrdm", |
| 205 | .prcm_offs = OMAP3430ES2_USBHOST_MOD, | 291 | .prcm_offs = OMAP3430ES2_USBHOST_MOD, |
| @@ -293,6 +379,22 @@ static struct powerdomain *powerdomains_omap3430es3_1plus[] __initdata = { | |||
| 293 | NULL | 379 | NULL |
| 294 | }; | 380 | }; |
| 295 | 381 | ||
| 382 | static struct powerdomain *powerdomains_am35x[] __initdata = { | ||
| 383 | &wkup_omap2_pwrdm, | ||
| 384 | &mpu_am35x_pwrdm, | ||
| 385 | &neon_am35x_pwrdm, | ||
| 386 | &core_am35x_pwrdm, | ||
| 387 | &sgx_am35x_pwrdm, | ||
| 388 | &dss_am35x_pwrdm, | ||
| 389 | &per_am35x_pwrdm, | ||
| 390 | &emu_pwrdm, | ||
| 391 | &dpll1_pwrdm, | ||
| 392 | &dpll3_pwrdm, | ||
| 393 | &dpll4_pwrdm, | ||
| 394 | &dpll5_pwrdm, | ||
| 395 | NULL | ||
| 396 | }; | ||
| 397 | |||
| 296 | void __init omap3xxx_powerdomains_init(void) | 398 | void __init omap3xxx_powerdomains_init(void) |
| 297 | { | 399 | { |
| 298 | unsigned int rev; | 400 | unsigned int rev; |
| @@ -301,21 +403,34 @@ void __init omap3xxx_powerdomains_init(void) | |||
| 301 | return; | 403 | return; |
| 302 | 404 | ||
| 303 | pwrdm_register_platform_funcs(&omap3_pwrdm_operations); | 405 | pwrdm_register_platform_funcs(&omap3_pwrdm_operations); |
| 304 | pwrdm_register_pwrdms(powerdomains_omap3430_common); | ||
| 305 | 406 | ||
| 306 | rev = omap_rev(); | 407 | rev = omap_rev(); |
| 307 | 408 | ||
| 308 | if (rev == OMAP3430_REV_ES1_0) | 409 | if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) { |
| 309 | pwrdm_register_pwrdms(powerdomains_omap3430es1); | 410 | pwrdm_register_pwrdms(powerdomains_am35x); |
| 310 | else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 || | 411 | } else { |
| 311 | rev == OMAP3430_REV_ES3_0 || rev == OMAP3630_REV_ES1_0) | 412 | pwrdm_register_pwrdms(powerdomains_omap3430_common); |
| 312 | pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0); | 413 | |
| 313 | else if (rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2 || | 414 | switch (rev) { |
| 314 | rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1 || | 415 | case OMAP3430_REV_ES1_0: |
| 315 | rev == OMAP3630_REV_ES1_1 || rev == OMAP3630_REV_ES1_2) | 416 | pwrdm_register_pwrdms(powerdomains_omap3430es1); |
| 316 | pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus); | 417 | break; |
| 317 | else | 418 | case OMAP3430_REV_ES2_0: |
| 318 | WARN(1, "OMAP3 powerdomain init: unknown chip type\n"); | 419 | case OMAP3430_REV_ES2_1: |
| 420 | case OMAP3430_REV_ES3_0: | ||
| 421 | case OMAP3630_REV_ES1_0: | ||
| 422 | pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0); | ||
| 423 | break; | ||
| 424 | case OMAP3430_REV_ES3_1: | ||
| 425 | case OMAP3430_REV_ES3_1_2: | ||
| 426 | case OMAP3630_REV_ES1_1: | ||
| 427 | case OMAP3630_REV_ES1_2: | ||
| 428 | pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus); | ||
| 429 | break; | ||
| 430 | default: | ||
| 431 | WARN(1, "OMAP3 powerdomain init: unknown chip type\n"); | ||
| 432 | } | ||
| 433 | } | ||
| 319 | 434 | ||
| 320 | pwrdm_complete_init(); | 435 | pwrdm_complete_init(); |
| 321 | } | 436 | } |
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index 6da3ba483ad1..cc1398e8b469 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h | |||
| @@ -203,8 +203,8 @@ | |||
| 203 | #define OMAP3430_EN_MMC2_SHIFT 25 | 203 | #define OMAP3430_EN_MMC2_SHIFT 25 |
| 204 | #define OMAP3430_EN_MMC1_MASK (1 << 24) | 204 | #define OMAP3430_EN_MMC1_MASK (1 << 24) |
| 205 | #define OMAP3430_EN_MMC1_SHIFT 24 | 205 | #define OMAP3430_EN_MMC1_SHIFT 24 |
| 206 | #define OMAP3430_EN_UART4_MASK (1 << 23) | 206 | #define AM35XX_EN_UART4_MASK (1 << 23) |
| 207 | #define OMAP3430_EN_UART4_SHIFT 23 | 207 | #define AM35XX_EN_UART4_SHIFT 23 |
| 208 | #define OMAP3430_EN_MCSPI4_MASK (1 << 21) | 208 | #define OMAP3430_EN_MCSPI4_MASK (1 << 21) |
| 209 | #define OMAP3430_EN_MCSPI4_SHIFT 21 | 209 | #define OMAP3430_EN_MCSPI4_SHIFT 21 |
| 210 | #define OMAP3430_EN_MCSPI3_MASK (1 << 20) | 210 | #define OMAP3430_EN_MCSPI3_MASK (1 << 20) |
diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c index dfe00ddb5c60..534d732caa1e 100644 --- a/arch/arm/mach-omap2/prm_common.c +++ b/arch/arm/mach-omap2/prm_common.c | |||
| @@ -85,7 +85,7 @@ static void omap_prcm_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
| 85 | unsigned long priority_pending[OMAP_PRCM_MAX_NR_PENDING_REG]; | 85 | unsigned long priority_pending[OMAP_PRCM_MAX_NR_PENDING_REG]; |
| 86 | struct irq_chip *chip = irq_desc_get_chip(desc); | 86 | struct irq_chip *chip = irq_desc_get_chip(desc); |
| 87 | unsigned int virtirq; | 87 | unsigned int virtirq; |
| 88 | int nr_irqs = prcm_irq_setup->nr_regs * 32; | 88 | int nr_irq = prcm_irq_setup->nr_regs * 32; |
| 89 | 89 | ||
| 90 | /* | 90 | /* |
| 91 | * If we are suspended, mask all interrupts from PRCM level, | 91 | * If we are suspended, mask all interrupts from PRCM level, |
| @@ -110,7 +110,7 @@ static void omap_prcm_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
| 110 | prcm_irq_setup->read_pending_irqs(pending); | 110 | prcm_irq_setup->read_pending_irqs(pending); |
| 111 | 111 | ||
| 112 | /* No bit set, then all IRQs are handled */ | 112 | /* No bit set, then all IRQs are handled */ |
| 113 | if (find_first_bit(pending, nr_irqs) >= nr_irqs) | 113 | if (find_first_bit(pending, nr_irq) >= nr_irq) |
| 114 | break; | 114 | break; |
| 115 | 115 | ||
| 116 | omap_prcm_events_filter_priority(pending, priority_pending); | 116 | omap_prcm_events_filter_priority(pending, priority_pending); |
| @@ -121,11 +121,11 @@ static void omap_prcm_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
| 121 | */ | 121 | */ |
| 122 | 122 | ||
| 123 | /* Serve priority events first */ | 123 | /* Serve priority events first */ |
| 124 | for_each_set_bit(virtirq, priority_pending, nr_irqs) | 124 | for_each_set_bit(virtirq, priority_pending, nr_irq) |
| 125 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); | 125 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); |
| 126 | 126 | ||
| 127 | /* Serve normal events next */ | 127 | /* Serve normal events next */ |
| 128 | for_each_set_bit(virtirq, pending, nr_irqs) | 128 | for_each_set_bit(virtirq, pending, nr_irq) |
| 129 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); | 129 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); |
| 130 | } | 130 | } |
| 131 | if (chip->irq_ack) | 131 | if (chip->irq_ack) |
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index 119d5a910f3a..afafd83c84c0 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c | |||
| @@ -48,6 +48,7 @@ static struct i2c_board_info __initdata omap4_i2c1_board_info[] = { | |||
| 48 | }, | 48 | }, |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | ||
| 51 | static int twl_set_voltage(void *data, int target_uV) | 52 | static int twl_set_voltage(void *data, int target_uV) |
| 52 | { | 53 | { |
| 53 | struct voltagedomain *voltdm = (struct voltagedomain *)data; | 54 | struct voltagedomain *voltdm = (struct voltagedomain *)data; |
| @@ -59,6 +60,7 @@ static int twl_get_voltage(void *data) | |||
| 59 | struct voltagedomain *voltdm = (struct voltagedomain *)data; | 60 | struct voltagedomain *voltdm = (struct voltagedomain *)data; |
| 60 | return voltdm_get_voltage(voltdm); | 61 | return voltdm_get_voltage(voltdm); |
| 61 | } | 62 | } |
| 63 | #endif | ||
| 62 | 64 | ||
| 63 | void __init omap_pmic_init(int bus, u32 clkrate, | 65 | void __init omap_pmic_init(int bus, u32 clkrate, |
| 64 | const char *pmic_type, int pmic_irq, | 66 | const char *pmic_type, int pmic_irq, |
| @@ -211,10 +213,6 @@ static struct twl_regulator_driver_data omap3_vdd2_drvdata = { | |||
| 211 | void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, | 213 | void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, |
| 212 | u32 pdata_flags, u32 regulators_flags) | 214 | u32 pdata_flags, u32 regulators_flags) |
| 213 | { | 215 | { |
| 214 | if (!pmic_data->irq_base) | ||
| 215 | pmic_data->irq_base = TWL4030_IRQ_BASE; | ||
| 216 | if (!pmic_data->irq_end) | ||
| 217 | pmic_data->irq_end = TWL4030_IRQ_END; | ||
| 218 | if (!pmic_data->vdd1) { | 216 | if (!pmic_data->vdd1) { |
| 219 | omap3_vdd1.driver_data = &omap3_vdd1_drvdata; | 217 | omap3_vdd1.driver_data = &omap3_vdd1_drvdata; |
| 220 | omap3_vdd1_drvdata.data = voltdm_lookup("mpu_iva"); | 218 | omap3_vdd1_drvdata.data = voltdm_lookup("mpu_iva"); |
| @@ -479,11 +477,6 @@ static struct regulator_init_data omap4_v2v1_idata = { | |||
| 479 | void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, | 477 | void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, |
| 480 | u32 pdata_flags, u32 regulators_flags) | 478 | u32 pdata_flags, u32 regulators_flags) |
| 481 | { | 479 | { |
| 482 | if (!pmic_data->irq_base) | ||
| 483 | pmic_data->irq_base = TWL6030_IRQ_BASE; | ||
| 484 | if (!pmic_data->irq_end) | ||
| 485 | pmic_data->irq_end = TWL6030_IRQ_END; | ||
| 486 | |||
| 487 | if (!pmic_data->vdd1) { | 480 | if (!pmic_data->vdd1) { |
| 488 | omap4_vdd1.driver_data = &omap4_vdd1_drvdata; | 481 | omap4_vdd1.driver_data = &omap4_vdd1_drvdata; |
| 489 | omap4_vdd1_drvdata.data = voltdm_lookup("mpu"); | 482 | omap4_vdd1_drvdata.data = voltdm_lookup("mpu"); |
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index de6c0a08f461..430081ac0c47 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
| @@ -238,9 +238,7 @@ IS_AM_SUBCLASS(335x, 0x335) | |||
| 238 | /* | 238 | /* |
| 239 | * Macros to detect individual cpu types. | 239 | * Macros to detect individual cpu types. |
| 240 | * These are only rarely needed. | 240 | * These are only rarely needed. |
| 241 | * cpu_is_omap330(): True for OMAP330 | 241 | * cpu_is_omap310(): True for OMAP310 |
| 242 | * cpu_is_omap730(): True for OMAP730 | ||
| 243 | * cpu_is_omap850(): True for OMAP850 | ||
| 244 | * cpu_is_omap1510(): True for OMAP1510 | 242 | * cpu_is_omap1510(): True for OMAP1510 |
| 245 | * cpu_is_omap1610(): True for OMAP1610 | 243 | * cpu_is_omap1610(): True for OMAP1610 |
| 246 | * cpu_is_omap1611(): True for OMAP1611 | 244 | * cpu_is_omap1611(): True for OMAP1611 |
| @@ -262,8 +260,6 @@ static inline int is_omap ##type (void) \ | |||
| 262 | } | 260 | } |
| 263 | 261 | ||
| 264 | IS_OMAP_TYPE(310, 0x0310) | 262 | IS_OMAP_TYPE(310, 0x0310) |
| 265 | IS_OMAP_TYPE(730, 0x0730) | ||
| 266 | IS_OMAP_TYPE(850, 0x0850) | ||
| 267 | IS_OMAP_TYPE(1510, 0x1510) | 263 | IS_OMAP_TYPE(1510, 0x1510) |
| 268 | IS_OMAP_TYPE(1610, 0x1610) | 264 | IS_OMAP_TYPE(1610, 0x1610) |
| 269 | IS_OMAP_TYPE(1611, 0x1611) | 265 | IS_OMAP_TYPE(1611, 0x1611) |
| @@ -277,8 +273,6 @@ IS_OMAP_TYPE(2430, 0x2430) | |||
| 277 | IS_OMAP_TYPE(3430, 0x3430) | 273 | IS_OMAP_TYPE(3430, 0x3430) |
| 278 | 274 | ||
| 279 | #define cpu_is_omap310() 0 | 275 | #define cpu_is_omap310() 0 |
| 280 | #define cpu_is_omap730() 0 | ||
| 281 | #define cpu_is_omap850() 0 | ||
| 282 | #define cpu_is_omap1510() 0 | 276 | #define cpu_is_omap1510() 0 |
| 283 | #define cpu_is_omap1610() 0 | 277 | #define cpu_is_omap1610() 0 |
| 284 | #define cpu_is_omap5912() 0 | 278 | #define cpu_is_omap5912() 0 |
| @@ -294,19 +288,9 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
| 294 | 288 | ||
| 295 | /* | 289 | /* |
| 296 | * Whether we have MULTI_OMAP1 or not, we still need to distinguish | 290 | * Whether we have MULTI_OMAP1 or not, we still need to distinguish |
| 297 | * between 730 vs 850, 330 vs. 1510 and 1611B/5912 vs. 1710. | 291 | * between 310 vs. 1510 and 1611B/5912 vs. 1710. |
| 298 | */ | 292 | */ |
| 299 | 293 | ||
| 300 | #if defined(CONFIG_ARCH_OMAP730) | ||
| 301 | # undef cpu_is_omap730 | ||
| 302 | # define cpu_is_omap730() is_omap730() | ||
| 303 | #endif | ||
| 304 | |||
| 305 | #if defined(CONFIG_ARCH_OMAP850) | ||
| 306 | # undef cpu_is_omap850 | ||
| 307 | # define cpu_is_omap850() is_omap850() | ||
| 308 | #endif | ||
| 309 | |||
| 310 | #if defined(CONFIG_ARCH_OMAP15XX) | 294 | #if defined(CONFIG_ARCH_OMAP15XX) |
| 311 | # undef cpu_is_omap310 | 295 | # undef cpu_is_omap310 |
| 312 | # undef cpu_is_omap1510 | 296 | # undef cpu_is_omap1510 |
diff --git a/arch/arm/plat-omap/include/plat/mux.h b/arch/arm/plat-omap/include/plat/mux.h index aeba71796ad9..323948959200 100644 --- a/arch/arm/plat-omap/include/plat/mux.h +++ b/arch/arm/plat-omap/include/plat/mux.h | |||
| @@ -99,7 +99,7 @@ | |||
| 99 | 99 | ||
| 100 | /* | 100 | /* |
| 101 | * OMAP730/850 has a slightly different config for the pin mux. | 101 | * OMAP730/850 has a slightly different config for the pin mux. |
| 102 | * - config regs are the OMAP7XX_IO_CONF_x regs (see omap730.h) regs and | 102 | * - config regs are the OMAP7XX_IO_CONF_x regs (see omap7xx.h) regs and |
| 103 | * not the FUNC_MUX_CTRL_x regs from hardware.h | 103 | * not the FUNC_MUX_CTRL_x regs from hardware.h |
| 104 | * - for pull-up/down, only has one enable bit which is is in the same register | 104 | * - for pull-up/down, only has one enable bit which is is in the same register |
| 105 | * as mux config | 105 | * as mux config |
diff --git a/arch/arm/plat-omap/include/plat/omap730.h b/arch/arm/plat-omap/include/plat/omap730.h deleted file mode 100644 index 14272bc1a6fd..000000000000 --- a/arch/arm/plat-omap/include/plat/omap730.h +++ /dev/null | |||
| @@ -1,102 +0,0 @@ | |||
| 1 | /* arch/arm/plat-omap/include/mach/omap730.h | ||
| 2 | * | ||
| 3 | * Hardware definitions for TI OMAP730 processor. | ||
| 4 | * | ||
| 5 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | * | ||
| 12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License along | ||
| 24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | ||
| 27 | |||
| 28 | #ifndef __ASM_ARCH_OMAP730_H | ||
| 29 | #define __ASM_ARCH_OMAP730_H | ||
| 30 | |||
| 31 | /* | ||
| 32 | * ---------------------------------------------------------------------------- | ||
| 33 | * Base addresses | ||
| 34 | * ---------------------------------------------------------------------------- | ||
| 35 | */ | ||
| 36 | |||
| 37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
| 38 | |||
| 39 | #define OMAP730_DSP_BASE 0xE0000000 | ||
| 40 | #define OMAP730_DSP_SIZE 0x50000 | ||
| 41 | #define OMAP730_DSP_START 0xE0000000 | ||
| 42 | |||
| 43 | #define OMAP730_DSPREG_BASE 0xE1000000 | ||
| 44 | #define OMAP730_DSPREG_SIZE SZ_128K | ||
| 45 | #define OMAP730_DSPREG_START 0xE1000000 | ||
| 46 | |||
| 47 | /* | ||
| 48 | * ---------------------------------------------------------------------------- | ||
| 49 | * OMAP730 specific configuration registers | ||
| 50 | * ---------------------------------------------------------------------------- | ||
| 51 | */ | ||
| 52 | #define OMAP730_CONFIG_BASE 0xfffe1000 | ||
| 53 | #define OMAP730_IO_CONF_0 0xfffe1070 | ||
| 54 | #define OMAP730_IO_CONF_1 0xfffe1074 | ||
| 55 | #define OMAP730_IO_CONF_2 0xfffe1078 | ||
| 56 | #define OMAP730_IO_CONF_3 0xfffe107c | ||
| 57 | #define OMAP730_IO_CONF_4 0xfffe1080 | ||
| 58 | #define OMAP730_IO_CONF_5 0xfffe1084 | ||
| 59 | #define OMAP730_IO_CONF_6 0xfffe1088 | ||
| 60 | #define OMAP730_IO_CONF_7 0xfffe108c | ||
| 61 | #define OMAP730_IO_CONF_8 0xfffe1090 | ||
| 62 | #define OMAP730_IO_CONF_9 0xfffe1094 | ||
| 63 | #define OMAP730_IO_CONF_10 0xfffe1098 | ||
| 64 | #define OMAP730_IO_CONF_11 0xfffe109c | ||
| 65 | #define OMAP730_IO_CONF_12 0xfffe10a0 | ||
| 66 | #define OMAP730_IO_CONF_13 0xfffe10a4 | ||
| 67 | |||
| 68 | #define OMAP730_MODE_1 0xfffe1010 | ||
| 69 | #define OMAP730_MODE_2 0xfffe1014 | ||
| 70 | |||
| 71 | /* CSMI specials: in terms of base + offset */ | ||
| 72 | #define OMAP730_MODE2_OFFSET 0x14 | ||
| 73 | |||
| 74 | /* | ||
| 75 | * ---------------------------------------------------------------------------- | ||
| 76 | * OMAP730 traffic controller configuration registers | ||
| 77 | * ---------------------------------------------------------------------------- | ||
| 78 | */ | ||
| 79 | #define OMAP730_FLASH_CFG_0 0xfffecc10 | ||
| 80 | #define OMAP730_FLASH_ACFG_0 0xfffecc50 | ||
| 81 | #define OMAP730_FLASH_CFG_1 0xfffecc14 | ||
| 82 | #define OMAP730_FLASH_ACFG_1 0xfffecc54 | ||
| 83 | |||
| 84 | /* | ||
| 85 | * ---------------------------------------------------------------------------- | ||
| 86 | * OMAP730 DSP control registers | ||
| 87 | * ---------------------------------------------------------------------------- | ||
| 88 | */ | ||
| 89 | #define OMAP730_ICR_BASE 0xfffbb800 | ||
| 90 | #define OMAP730_DSP_M_CTL 0xfffbb804 | ||
| 91 | #define OMAP730_DSP_MMU_BASE 0xfffed200 | ||
| 92 | |||
| 93 | /* | ||
| 94 | * ---------------------------------------------------------------------------- | ||
| 95 | * OMAP730 PCC_UPLD configuration registers | ||
| 96 | * ---------------------------------------------------------------------------- | ||
| 97 | */ | ||
| 98 | #define OMAP730_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
| 99 | #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00) | ||
| 100 | |||
| 101 | #endif /* __ASM_ARCH_OMAP730_H */ | ||
| 102 | |||
diff --git a/arch/arm/plat-omap/include/plat/omap850.h b/arch/arm/plat-omap/include/plat/omap850.h deleted file mode 100644 index c33f67981712..000000000000 --- a/arch/arm/plat-omap/include/plat/omap850.h +++ /dev/null | |||
| @@ -1,102 +0,0 @@ | |||
| 1 | /* arch/arm/plat-omap/include/mach/omap850.h | ||
| 2 | * | ||
| 3 | * Hardware definitions for TI OMAP850 processor. | ||
| 4 | * | ||
| 5 | * Derived from omap730.h by Zebediah C. McClure <zmc@lurian.net> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | * | ||
| 12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License along | ||
| 24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | ||
| 27 | |||
| 28 | #ifndef __ASM_ARCH_OMAP850_H | ||
| 29 | #define __ASM_ARCH_OMAP850_H | ||
| 30 | |||
| 31 | /* | ||
| 32 | * ---------------------------------------------------------------------------- | ||
| 33 | * Base addresses | ||
| 34 | * ---------------------------------------------------------------------------- | ||
| 35 | */ | ||
| 36 | |||
| 37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
| 38 | |||
| 39 | #define OMAP850_DSP_BASE 0xE0000000 | ||
| 40 | #define OMAP850_DSP_SIZE 0x50000 | ||
| 41 | #define OMAP850_DSP_START 0xE0000000 | ||
| 42 | |||
| 43 | #define OMAP850_DSPREG_BASE 0xE1000000 | ||
| 44 | #define OMAP850_DSPREG_SIZE SZ_128K | ||
| 45 | #define OMAP850_DSPREG_START 0xE1000000 | ||
| 46 | |||
| 47 | /* | ||
| 48 | * ---------------------------------------------------------------------------- | ||
| 49 | * OMAP850 specific configuration registers | ||
| 50 | * ---------------------------------------------------------------------------- | ||
| 51 | */ | ||
| 52 | #define OMAP850_CONFIG_BASE 0xfffe1000 | ||
| 53 | #define OMAP850_IO_CONF_0 0xfffe1070 | ||
| 54 | #define OMAP850_IO_CONF_1 0xfffe1074 | ||
| 55 | #define OMAP850_IO_CONF_2 0xfffe1078 | ||
| 56 | #define OMAP850_IO_CONF_3 0xfffe107c | ||
| 57 | #define OMAP850_IO_CONF_4 0xfffe1080 | ||
| 58 | #define OMAP850_IO_CONF_5 0xfffe1084 | ||
| 59 | #define OMAP850_IO_CONF_6 0xfffe1088 | ||
| 60 | #define OMAP850_IO_CONF_7 0xfffe108c | ||
| 61 | #define OMAP850_IO_CONF_8 0xfffe1090 | ||
| 62 | #define OMAP850_IO_CONF_9 0xfffe1094 | ||
| 63 | #define OMAP850_IO_CONF_10 0xfffe1098 | ||
| 64 | #define OMAP850_IO_CONF_11 0xfffe109c | ||
| 65 | #define OMAP850_IO_CONF_12 0xfffe10a0 | ||
| 66 | #define OMAP850_IO_CONF_13 0xfffe10a4 | ||
| 67 | |||
| 68 | #define OMAP850_MODE_1 0xfffe1010 | ||
| 69 | #define OMAP850_MODE_2 0xfffe1014 | ||
| 70 | |||
| 71 | /* CSMI specials: in terms of base + offset */ | ||
| 72 | #define OMAP850_MODE2_OFFSET 0x14 | ||
| 73 | |||
| 74 | /* | ||
| 75 | * ---------------------------------------------------------------------------- | ||
| 76 | * OMAP850 traffic controller configuration registers | ||
| 77 | * ---------------------------------------------------------------------------- | ||
| 78 | */ | ||
| 79 | #define OMAP850_FLASH_CFG_0 0xfffecc10 | ||
| 80 | #define OMAP850_FLASH_ACFG_0 0xfffecc50 | ||
| 81 | #define OMAP850_FLASH_CFG_1 0xfffecc14 | ||
| 82 | #define OMAP850_FLASH_ACFG_1 0xfffecc54 | ||
| 83 | |||
| 84 | /* | ||
| 85 | * ---------------------------------------------------------------------------- | ||
| 86 | * OMAP850 DSP control registers | ||
| 87 | * ---------------------------------------------------------------------------- | ||
| 88 | */ | ||
| 89 | #define OMAP850_ICR_BASE 0xfffbb800 | ||
| 90 | #define OMAP850_DSP_M_CTL 0xfffbb804 | ||
| 91 | #define OMAP850_DSP_MMU_BASE 0xfffed200 | ||
| 92 | |||
| 93 | /* | ||
| 94 | * ---------------------------------------------------------------------------- | ||
| 95 | * OMAP850 PCC_UPLD configuration registers | ||
| 96 | * ---------------------------------------------------------------------------- | ||
| 97 | */ | ||
| 98 | #define OMAP850_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
| 99 | #define OMAP850_PCC_UPLD_CTRL (OMAP850_PCC_UPLD_CTRL_BASE + 0x00) | ||
| 100 | |||
| 101 | #endif /* __ASM_ARCH_OMAP850_H */ | ||
| 102 | |||
diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c index ad32621aa52e..5e13c3884aa4 100644 --- a/arch/arm/plat-omap/mailbox.c +++ b/arch/arm/plat-omap/mailbox.c | |||
| @@ -282,6 +282,8 @@ static int omap_mbox_startup(struct omap_mbox *mbox) | |||
| 282 | } | 282 | } |
| 283 | mbox->rxq = mq; | 283 | mbox->rxq = mq; |
| 284 | mq->mbox = mbox; | 284 | mq->mbox = mbox; |
| 285 | |||
| 286 | omap_mbox_enable_irq(mbox, IRQ_RX); | ||
| 285 | } | 287 | } |
| 286 | mutex_unlock(&mbox_configured_lock); | 288 | mutex_unlock(&mbox_configured_lock); |
| 287 | return 0; | 289 | return 0; |
| @@ -305,6 +307,7 @@ static void omap_mbox_fini(struct omap_mbox *mbox) | |||
| 305 | mutex_lock(&mbox_configured_lock); | 307 | mutex_lock(&mbox_configured_lock); |
| 306 | 308 | ||
| 307 | if (!--mbox->use_count) { | 309 | if (!--mbox->use_count) { |
| 310 | omap_mbox_disable_irq(mbox, IRQ_RX); | ||
| 308 | free_irq(mbox->irq, mbox); | 311 | free_irq(mbox->irq, mbox); |
| 309 | tasklet_kill(&mbox->txq->tasklet); | 312 | tasklet_kill(&mbox->txq->tasklet); |
| 310 | flush_work_sync(&mbox->rxq->work); | 313 | flush_work_sync(&mbox->rxq->work); |
| @@ -338,13 +341,15 @@ struct omap_mbox *omap_mbox_get(const char *name, struct notifier_block *nb) | |||
| 338 | if (!mbox) | 341 | if (!mbox) |
| 339 | return ERR_PTR(-ENOENT); | 342 | return ERR_PTR(-ENOENT); |
| 340 | 343 | ||
| 341 | ret = omap_mbox_startup(mbox); | ||
| 342 | if (ret) | ||
| 343 | return ERR_PTR(-ENODEV); | ||
| 344 | |||
| 345 | if (nb) | 344 | if (nb) |
| 346 | blocking_notifier_chain_register(&mbox->notifier, nb); | 345 | blocking_notifier_chain_register(&mbox->notifier, nb); |
| 347 | 346 | ||
| 347 | ret = omap_mbox_startup(mbox); | ||
| 348 | if (ret) { | ||
| 349 | blocking_notifier_chain_unregister(&mbox->notifier, nb); | ||
| 350 | return ERR_PTR(-ENODEV); | ||
| 351 | } | ||
| 352 | |||
| 348 | return mbox; | 353 | return mbox; |
| 349 | } | 354 | } |
| 350 | EXPORT_SYMBOL(omap_mbox_get); | 355 | EXPORT_SYMBOL(omap_mbox_get); |
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h index 3993477103a5..555382660bc4 100644 --- a/include/linux/i2c/twl.h +++ b/include/linux/i2c/twl.h | |||
| @@ -683,7 +683,6 @@ struct twl4030_audio_data { | |||
| 683 | }; | 683 | }; |
| 684 | 684 | ||
| 685 | struct twl4030_platform_data { | 685 | struct twl4030_platform_data { |
| 686 | unsigned irq_base, irq_end; | ||
| 687 | struct twl4030_clock_init_data *clock; | 686 | struct twl4030_clock_init_data *clock; |
| 688 | struct twl4030_bci_platform_data *bci; | 687 | struct twl4030_bci_platform_data *bci; |
| 689 | struct twl4030_gpio_platform_data *gpio; | 688 | struct twl4030_gpio_platform_data *gpio; |
