aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-omap2/board-am3517evm.c13
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c1
-rw-r--r--arch/arm/mach-omap2/board-devkit8000.c1
-rw-r--r--arch/arm/mach-omap2/board-igep0020.c1
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c1
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c1
-rw-r--r--arch/arm/mach-omap2/board-overo.c1
-rw-r--r--arch/arm/mach-omap2/mcbsp.c126
-rw-r--r--arch/arm/mach-omap2/twl-common.c27
-rw-r--r--arch/arm/mach-omap2/twl-common.h2
-rw-r--r--arch/arm/plat-omap/include/plat/mcbsp.h2
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
267static __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
267static const struct usbhs_omap_board_data usbhs_bdata __initconst = { 277static 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
742MACHINE_START(OMAP3EVM, "OMAP3 EVM") 743MACHINE_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 */
38static 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)
71static 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 */
105static 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
143static int omap3_enable_st_clock(unsigned int id, bool enable) 36static 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
228static int __init omap2_mcbsp_init(void) 115static 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
546static struct omap_tw4030_pdata omap_twl4030_audio_data;
547
548static struct platform_device audio_device = {
549 .name = "omap-twl4030",
550 .id = -1,
551 .dev = {
552 .platform_data = &omap_twl4030_audio_data,
553 },
554};
555
556void __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 */
563void __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,
59void omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, 59void 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
62void 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/**