diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-omap2/board-am3517evm.c | 13 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-cm-t35.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-devkit8000.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-igep0020.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-omap3evm.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-overo.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/mcbsp.c | 126 | ||||
-rw-r--r-- | arch/arm/mach-omap2/twl-common.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-omap2/twl-common.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/mcbsp.h | 2 |
11 files changed, 55 insertions, 121 deletions
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 18f601096ce1..592812af84da 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c | |||
@@ -264,6 +264,16 @@ static __init void am3517_evm_musb_init(void) | |||
264 | usb_musb_init(&musb_board_data); | 264 | usb_musb_init(&musb_board_data); |
265 | } | 265 | } |
266 | 266 | ||
267 | static __init void am3517_evm_mcbsp1_init(void) | ||
268 | { | ||
269 | u32 devconf0; | ||
270 | |||
271 | /* McBSP1 CLKR/FSR signal to be connected to CLKX/FSX pin */ | ||
272 | devconf0 = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); | ||
273 | devconf0 |= OMAP2_MCBSP1_CLKR_MASK | OMAP2_MCBSP1_FSR_MASK; | ||
274 | omap_ctrl_writel(devconf0, OMAP2_CONTROL_DEVCONF0); | ||
275 | } | ||
276 | |||
267 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { | 277 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { |
268 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 278 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
269 | #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ | 279 | #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ |
@@ -373,6 +383,9 @@ static void __init am3517_evm_init(void) | |||
373 | /* MUSB */ | 383 | /* MUSB */ |
374 | am3517_evm_musb_init(); | 384 | am3517_evm_musb_init(); |
375 | 385 | ||
386 | /* McBSP1 */ | ||
387 | am3517_evm_mcbsp1_init(); | ||
388 | |||
376 | /* MMC init function */ | 389 | /* MMC init function */ |
377 | omap_hsmmc_init(mmc); | 390 | omap_hsmmc_init(mmc); |
378 | } | 391 | } |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 97d719047af3..188cc4eb0a79 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
@@ -731,6 +731,7 @@ static void __init cm_t3x_common_init(void) | |||
731 | cm_t35_init_ethernet(); | 731 | cm_t35_init_ethernet(); |
732 | cm_t35_init_led(); | 732 | cm_t35_init_led(); |
733 | cm_t35_init_display(); | 733 | cm_t35_init_display(); |
734 | omap_twl4030_audio_init("cm-t3x"); | ||
734 | 735 | ||
735 | usb_musb_init(NULL); | 736 | usb_musb_init(NULL); |
736 | cm_t35_init_usbh(); | 737 | cm_t35_init_usbh(); |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 6567c1cd5572..4cd804f615a5 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -630,6 +630,7 @@ static void __init devkit8000_init(void) | |||
630 | usbhs_init(&usbhs_bdata); | 630 | usbhs_init(&usbhs_bdata); |
631 | omap_nand_flash_init(NAND_BUSWIDTH_16, devkit8000_nand_partitions, | 631 | omap_nand_flash_init(NAND_BUSWIDTH_16, devkit8000_nand_partitions, |
632 | ARRAY_SIZE(devkit8000_nand_partitions)); | 632 | ARRAY_SIZE(devkit8000_nand_partitions)); |
633 | omap_twl4030_audio_init("omap3beagle"); | ||
633 | 634 | ||
634 | /* Ensure SDRC pins are mux'd for self-refresh */ | 635 | /* Ensure SDRC pins are mux'd for self-refresh */ |
635 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); | 636 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index 28214483aaba..3613d1493c84 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
@@ -628,6 +628,7 @@ static void __init igep_init(void) | |||
628 | 628 | ||
629 | igep_flash_init(); | 629 | igep_flash_init(); |
630 | igep_leds_init(); | 630 | igep_leds_init(); |
631 | omap_twl4030_audio_init("igep2"); | ||
631 | 632 | ||
632 | /* | 633 | /* |
633 | * WLAN-BT combo module from MuRata which has a Marvell WLAN | 634 | * WLAN-BT combo module from MuRata which has a Marvell WLAN |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 6202fc76e490..3ccfa5b23a24 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -519,6 +519,7 @@ static void __init omap3_beagle_init(void) | |||
519 | usbhs_init(&usbhs_bdata); | 519 | usbhs_init(&usbhs_bdata); |
520 | omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions, | 520 | omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions, |
521 | ARRAY_SIZE(omap3beagle_nand_partitions)); | 521 | ARRAY_SIZE(omap3beagle_nand_partitions)); |
522 | omap_twl4030_audio_init("omap3beagle"); | ||
522 | 523 | ||
523 | /* Ensure msecure is mux'd to be able to set the RTC. */ | 524 | /* Ensure msecure is mux'd to be able to set the RTC. */ |
524 | omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH); | 525 | omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH); |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 0d362e9f9cb9..164570053f71 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
@@ -737,6 +737,7 @@ static void __init omap3_evm_init(void) | |||
737 | omap3evm_init_smsc911x(); | 737 | omap3evm_init_smsc911x(); |
738 | omap3_evm_display_init(); | 738 | omap3_evm_display_init(); |
739 | omap3_evm_wl12xx_init(); | 739 | omap3_evm_wl12xx_init(); |
740 | omap_twl4030_audio_init("omap3evm"); | ||
740 | } | 741 | } |
741 | 742 | ||
742 | MACHINE_START(OMAP3EVM, "OMAP3 EVM") | 743 | MACHINE_START(OMAP3EVM, "OMAP3 EVM") |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 779734d8ba37..fe674d0c6c04 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
@@ -509,6 +509,7 @@ static void __init overo_init(void) | |||
509 | overo_display_init(); | 509 | overo_display_init(); |
510 | overo_init_led(); | 510 | overo_init_led(); |
511 | overo_init_keys(); | 511 | overo_init_keys(); |
512 | omap_twl4030_audio_init("overo"); | ||
512 | 513 | ||
513 | /* Ensure SDRC pins are mux'd for self-refresh */ | 514 | /* Ensure SDRC pins are mux'd for self-refresh */ |
514 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); | 515 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); |
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index 577cb77db26c..d57a3578bf03 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/clk.h> | 15 | #include <linux/clk.h> |
16 | #include <linux/err.h> | 16 | #include <linux/err.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | #include <linux/of.h> | ||
18 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
19 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
20 | 21 | ||
@@ -25,8 +26,6 @@ | |||
25 | #include <plat/omap_device.h> | 26 | #include <plat/omap_device.h> |
26 | #include <linux/pm_runtime.h> | 27 | #include <linux/pm_runtime.h> |
27 | 28 | ||
28 | #include "control.h" | ||
29 | |||
30 | /* | 29 | /* |
31 | * FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle. | 30 | * FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle. |
32 | * Sidetone needs non-gated ICLK and sidetone autoidle is broken. | 31 | * Sidetone needs non-gated ICLK and sidetone autoidle is broken. |
@@ -34,112 +33,6 @@ | |||
34 | #include "cm2xxx_3xxx.h" | 33 | #include "cm2xxx_3xxx.h" |
35 | #include "cm-regbits-34xx.h" | 34 | #include "cm-regbits-34xx.h" |
36 | 35 | ||
37 | /* McBSP1 internal signal muxing function for OMAP2/3 */ | ||
38 | static int omap2_mcbsp1_mux_rx_clk(struct device *dev, const char *signal, | ||
39 | const char *src) | ||
40 | { | ||
41 | u32 v; | ||
42 | |||
43 | v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); | ||
44 | |||
45 | if (!strcmp(signal, "clkr")) { | ||
46 | if (!strcmp(src, "clkr")) | ||
47 | v &= ~OMAP2_MCBSP1_CLKR_MASK; | ||
48 | else if (!strcmp(src, "clkx")) | ||
49 | v |= OMAP2_MCBSP1_CLKR_MASK; | ||
50 | else | ||
51 | return -EINVAL; | ||
52 | } else if (!strcmp(signal, "fsr")) { | ||
53 | if (!strcmp(src, "fsr")) | ||
54 | v &= ~OMAP2_MCBSP1_FSR_MASK; | ||
55 | else if (!strcmp(src, "fsx")) | ||
56 | v |= OMAP2_MCBSP1_FSR_MASK; | ||
57 | else | ||
58 | return -EINVAL; | ||
59 | } else { | ||
60 | return -EINVAL; | ||
61 | } | ||
62 | |||
63 | omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); | ||
64 | |||
65 | return 0; | ||
66 | } | ||
67 | |||
68 | /* McBSP4 internal signal muxing function for OMAP4 */ | ||
69 | #define OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_FSX (1 << 31) | ||
70 | #define OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_CLKX (1 << 30) | ||
71 | static int omap4_mcbsp4_mux_rx_clk(struct device *dev, const char *signal, | ||
72 | const char *src) | ||
73 | { | ||
74 | u32 v; | ||
75 | |||
76 | /* | ||
77 | * In CONTROL_MCBSPLP register only bit 30 (CLKR mux), and bit 31 (FSR | ||
78 | * mux) is used */ | ||
79 | v = omap4_ctrl_pad_readl(OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MCBSPLP); | ||
80 | |||
81 | if (!strcmp(signal, "clkr")) { | ||
82 | if (!strcmp(src, "clkr")) | ||
83 | v &= ~OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_CLKX; | ||
84 | else if (!strcmp(src, "clkx")) | ||
85 | v |= OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_CLKX; | ||
86 | else | ||
87 | return -EINVAL; | ||
88 | } else if (!strcmp(signal, "fsr")) { | ||
89 | if (!strcmp(src, "fsr")) | ||
90 | v &= ~OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_FSX; | ||
91 | else if (!strcmp(src, "fsx")) | ||
92 | v |= OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_FSX; | ||
93 | else | ||
94 | return -EINVAL; | ||
95 | } else { | ||
96 | return -EINVAL; | ||
97 | } | ||
98 | |||
99 | omap4_ctrl_pad_writel(v, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MCBSPLP); | ||
100 | |||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | /* McBSP CLKS source switching function */ | ||
105 | static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk, | ||
106 | const char *src) | ||
107 | { | ||
108 | struct clk *fck_src; | ||
109 | char *fck_src_name; | ||
110 | int r; | ||
111 | |||
112 | if (!strcmp(src, "clks_ext")) | ||
113 | fck_src_name = "pad_fck"; | ||
114 | else if (!strcmp(src, "clks_fclk")) | ||
115 | fck_src_name = "prcm_fck"; | ||
116 | else | ||
117 | return -EINVAL; | ||
118 | |||
119 | fck_src = clk_get(dev, fck_src_name); | ||
120 | if (IS_ERR_OR_NULL(fck_src)) { | ||
121 | pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks", | ||
122 | fck_src_name); | ||
123 | return -EINVAL; | ||
124 | } | ||
125 | |||
126 | pm_runtime_put_sync(dev); | ||
127 | |||
128 | r = clk_set_parent(clk, fck_src); | ||
129 | if (IS_ERR_VALUE(r)) { | ||
130 | pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n", | ||
131 | "clks", fck_src_name); | ||
132 | clk_put(fck_src); | ||
133 | return -EINVAL; | ||
134 | } | ||
135 | |||
136 | pm_runtime_get_sync(dev); | ||
137 | |||
138 | clk_put(fck_src); | ||
139 | |||
140 | return 0; | ||
141 | } | ||
142 | |||
143 | static int omap3_enable_st_clock(unsigned int id, bool enable) | 36 | static int omap3_enable_st_clock(unsigned int id, bool enable) |
144 | { | 37 | { |
145 | unsigned int w; | 38 | unsigned int w; |
@@ -181,17 +74,11 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused) | |||
181 | pdata->reg_size = 4; | 74 | pdata->reg_size = 4; |
182 | pdata->has_ccr = true; | 75 | pdata->has_ccr = true; |
183 | } | 76 | } |
184 | pdata->set_clk_src = omap2_mcbsp_set_clk_src; | ||
185 | |||
186 | /* On OMAP2/3 the McBSP1 port has 6 pin configuration */ | ||
187 | if (id == 1 && oh->class->rev < MCBSP_CONFIG_TYPE4) | ||
188 | pdata->mux_signal = omap2_mcbsp1_mux_rx_clk; | ||
189 | 77 | ||
190 | /* On OMAP4 the McBSP4 port has 6 pin configuration */ | 78 | if (oh->class->rev == MCBSP_CONFIG_TYPE2) { |
191 | if (id == 4 && oh->class->rev == MCBSP_CONFIG_TYPE4) | 79 | /* The FIFO has 128 locations */ |
192 | pdata->mux_signal = omap4_mcbsp4_mux_rx_clk; | 80 | pdata->buffer_size = 0x80; |
193 | 81 | } else if (oh->class->rev == MCBSP_CONFIG_TYPE3) { | |
194 | if (oh->class->rev == MCBSP_CONFIG_TYPE3) { | ||
195 | if (id == 2) | 82 | if (id == 2) |
196 | /* The FIFO has 1024 + 256 locations */ | 83 | /* The FIFO has 1024 + 256 locations */ |
197 | pdata->buffer_size = 0x500; | 84 | pdata->buffer_size = 0x500; |
@@ -227,7 +114,8 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused) | |||
227 | 114 | ||
228 | static int __init omap2_mcbsp_init(void) | 115 | static int __init omap2_mcbsp_init(void) |
229 | { | 116 | { |
230 | omap_hwmod_for_each_by_class("mcbsp", omap_init_mcbsp, NULL); | 117 | if (!of_have_populated_dt()) |
118 | omap_hwmod_for_each_by_class("mcbsp", omap_init_mcbsp, NULL); | ||
231 | 119 | ||
232 | return 0; | 120 | return 0; |
233 | } | 121 | } |
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index db5ff6642375..bd81bf40e711 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c | |||
@@ -538,3 +538,30 @@ void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, | |||
538 | pmic_data->v2v1 = &omap4_v2v1_idata; | 538 | pmic_data->v2v1 = &omap4_v2v1_idata; |
539 | } | 539 | } |
540 | #endif /* CONFIG_ARCH_OMAP4 */ | 540 | #endif /* CONFIG_ARCH_OMAP4 */ |
541 | |||
542 | #if defined(CONFIG_SND_OMAP_SOC_OMAP_TWL4030) || \ | ||
543 | defined(CONFIG_SND_OMAP_SOC_OMAP_TWL4030_MODULE) | ||
544 | #include <linux/platform_data/omap-twl4030.h> | ||
545 | |||
546 | static struct omap_tw4030_pdata omap_twl4030_audio_data; | ||
547 | |||
548 | static struct platform_device audio_device = { | ||
549 | .name = "omap-twl4030", | ||
550 | .id = -1, | ||
551 | .dev = { | ||
552 | .platform_data = &omap_twl4030_audio_data, | ||
553 | }, | ||
554 | }; | ||
555 | |||
556 | void __init omap_twl4030_audio_init(char *card_name) | ||
557 | { | ||
558 | omap_twl4030_audio_data.card_name = card_name; | ||
559 | platform_device_register(&audio_device); | ||
560 | } | ||
561 | |||
562 | #else /* SOC_OMAP_TWL4030 */ | ||
563 | void __init omap_twl4030_audio_init(char *card_name) | ||
564 | { | ||
565 | return; | ||
566 | } | ||
567 | #endif /* SOC_OMAP_TWL4030 */ | ||
diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h index 8fe71cfd002c..cb25b43317a7 100644 --- a/arch/arm/mach-omap2/twl-common.h +++ b/arch/arm/mach-omap2/twl-common.h | |||
@@ -59,4 +59,6 @@ void omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, | |||
59 | void omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, | 59 | void omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, |
60 | u32 pdata_flags, u32 regulators_flags); | 60 | u32 pdata_flags, u32 regulators_flags); |
61 | 61 | ||
62 | void omap_twl4030_audio_init(char *card_name); | ||
63 | |||
62 | #endif /* __OMAP_PMIC_COMMON__ */ | 64 | #endif /* __OMAP_PMIC_COMMON__ */ |
diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h index 18814127809a..c78d90b28b19 100644 --- a/arch/arm/plat-omap/include/plat/mcbsp.h +++ b/arch/arm/plat-omap/include/plat/mcbsp.h | |||
@@ -47,8 +47,6 @@ struct omap_mcbsp_platform_data { | |||
47 | bool has_wakeup; /* Wakeup capability */ | 47 | bool has_wakeup; /* Wakeup capability */ |
48 | bool has_ccr; /* Transceiver has configuration control registers */ | 48 | bool has_ccr; /* Transceiver has configuration control registers */ |
49 | int (*enable_st_clock)(unsigned int, bool); | 49 | int (*enable_st_clock)(unsigned int, bool); |
50 | int (*set_clk_src)(struct device *dev, struct clk *clk, const char *src); | ||
51 | int (*mux_signal)(struct device *dev, const char *signal, const char *src); | ||
52 | }; | 50 | }; |
53 | 51 | ||
54 | /** | 52 | /** |