diff options
author | Shengjiu Wang <b02247@freescale.com> | 2014-04-27 22:59:28 -0400 |
---|---|---|
committer | Shengjiu Wang <b02247@freescale.com> | 2014-04-29 00:42:53 -0400 |
commit | 0673acf93a40e5b26b667b627dc62b81b377cc70 (patch) | |
tree | 7b78018b0dfaccad18f39c65761e1f3c8834f871 | |
parent | c626c77caa8d381254b24556ac78a96ab2936937 (diff) |
ENGR00310878-1 Asoc: fsl: refine clock tree for ESAI
There are three clock for ESAI, esai_extal, esai_ipg, esai_mem.
Make the clock for ESAI more clear.
Signed-off-by: Shengjiu Wang <b02247@freescale.com>
-rw-r--r-- | Documentation/devicetree/bindings/clock/imx6q-clock.txt | 4 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6qdl.dtsi | 4 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6sx-19x19-arm2.dts | 4 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6sx.dtsi | 8 | ||||
-rw-r--r-- | arch/arm/mach-imx/clk-imx6q.c | 13 | ||||
-rw-r--r-- | arch/arm/mach-imx/clk-imx6sx.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 8 | ||||
-rw-r--r-- | include/dt-bindings/clock/imx6sx-clock.h | 6 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_esai.c | 9 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_esai.h | 1 |
10 files changed, 44 insertions, 20 deletions
diff --git a/Documentation/devicetree/bindings/clock/imx6q-clock.txt b/Documentation/devicetree/bindings/clock/imx6q-clock.txt index 4f493bf9e961..622e5ac90d28 100644 --- a/Documentation/devicetree/bindings/clock/imx6q-clock.txt +++ b/Documentation/devicetree/bindings/clock/imx6q-clock.txt | |||
@@ -128,7 +128,7 @@ clocks and IDs. | |||
128 | ecspi4 115 | 128 | ecspi4 115 |
129 | ecspi5 116 | 129 | ecspi5 116 |
130 | enet 117 | 130 | enet 117 |
131 | esai 118 | 131 | esai_extal 118 |
132 | gpt_ipg 119 | 132 | gpt_ipg 119 |
133 | gpt_ipg_per 120 | 133 | gpt_ipg_per 120 |
134 | gpu2d_core 121 | 134 | gpu2d_core 121 |
@@ -238,6 +238,8 @@ clocks and IDs. | |||
238 | spdif1 225 | 238 | spdif1 225 |
239 | asrc_ipg 226 | 239 | asrc_ipg 226 |
240 | asrc_mem 227 | 240 | asrc_mem 227 |
241 | esai_ipg 228 | ||
242 | esai_mem 229 | ||
241 | 243 | ||
242 | Examples: | 244 | Examples: |
243 | 245 | ||
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi index 32c2e67cca63..9cdd0d3710b8 100644 --- a/arch/arm/boot/dts/imx6qdl.dtsi +++ b/arch/arm/boot/dts/imx6qdl.dtsi | |||
@@ -249,8 +249,8 @@ | |||
249 | compatible = "fsl,imx6q-esai"; | 249 | compatible = "fsl,imx6q-esai"; |
250 | reg = <0x02024000 0x4000>; | 250 | reg = <0x02024000 0x4000>; |
251 | interrupts = <0 51 0x04>; | 251 | interrupts = <0 51 0x04>; |
252 | clocks = <&clks 118>, <&clks 156>; | 252 | clocks = <&clks 228>, <&clks 229>, <&clks 118>, <&clks 228>, <&clks 156>; |
253 | clock-names = "core", "dma"; | 253 | clock-names = "core", "mem", "extal", "fsys", "dma"; |
254 | fsl,esai-dma-events = <24 23>; | 254 | fsl,esai-dma-events = <24 23>; |
255 | fsl,flags = <1>; | 255 | fsl,flags = <1>; |
256 | status = "disabled"; | 256 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/imx6sx-19x19-arm2.dts b/arch/arm/boot/dts/imx6sx-19x19-arm2.dts index e7abb2a78ab7..901b469ee508 100644 --- a/arch/arm/boot/dts/imx6sx-19x19-arm2.dts +++ b/arch/arm/boot/dts/imx6sx-19x19-arm2.dts | |||
@@ -300,8 +300,8 @@ | |||
300 | cs42888: cs42888@048 { | 300 | cs42888: cs42888@048 { |
301 | compatible = "cirrus,cs42888"; | 301 | compatible = "cirrus,cs42888"; |
302 | reg = <0x048>; | 302 | reg = <0x048>; |
303 | clocks = <&clks IMX6SX_CLK_ESAI>; | 303 | clocks = <&clks IMX6SX_CLK_ESAI_EXTAL>; |
304 | clock-names = "esai"; | 304 | clock-names = "esai_extal"; |
305 | VA-supply = <®_3p3v>; | 305 | VA-supply = <®_3p3v>; |
306 | VD-supply = <®_3p3v>; | 306 | VD-supply = <®_3p3v>; |
307 | VLS-supply = <®_3p3v>; | 307 | VLS-supply = <®_3p3v>; |
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi index 46a65cc9d258..9d04725f07d4 100644 --- a/arch/arm/boot/dts/imx6sx.dtsi +++ b/arch/arm/boot/dts/imx6sx.dtsi | |||
@@ -247,8 +247,12 @@ | |||
247 | compatible = "fsl,imx6q-esai"; | 247 | compatible = "fsl,imx6q-esai"; |
248 | reg = <0x02024000 0x4000>; | 248 | reg = <0x02024000 0x4000>; |
249 | interrupts = <0 51 0x04>; | 249 | interrupts = <0 51 0x04>; |
250 | clocks = <&clks IMX6SX_CLK_ESAI>, <&clks IMX6SX_CLK_SPBA>; | 250 | clocks = <&clks IMX6SX_CLK_ESAI_IPG>, |
251 | clock-names = "core", "dma"; | 251 | <&clks IMX6SX_CLK_ESAI_MEM>, |
252 | <&clks IMX6SX_CLK_ESAI_EXTAL>, | ||
253 | <&clks IMX6SX_CLK_ESAI_IPG>, | ||
254 | <&clks IMX6SX_CLK_SPBA>; | ||
255 | clock-names = "core", "mem", "extal", "fsys", "dma"; | ||
252 | fsl,esai-dma-events = <24 23>; | 256 | fsl,esai-dma-events = <24 23>; |
253 | fsl,flags = <1>; | 257 | fsl,flags = <1>; |
254 | status = "disabled"; | 258 | status = "disabled"; |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 77d425c4a3a5..6aaaee22805c 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -67,7 +67,7 @@ static const char *cko2_sels[] = { | |||
67 | "ipu2", "vdo_axi", "osc", "gpu2d_core", | 67 | "ipu2", "vdo_axi", "osc", "gpu2d_core", |
68 | "gpu3d_core", "usdhc2", "ssi1", "ssi2", | 68 | "gpu3d_core", "usdhc2", "ssi1", "ssi2", |
69 | "ssi3", "gpu3d_shader", "vpu_axi", "can_root", | 69 | "ssi3", "gpu3d_shader", "vpu_axi", "can_root", |
70 | "ldb_di0", "ldb_di1", "esai", "eim_slow", | 70 | "ldb_di0", "ldb_di1", "esai_extal", "eim_slow", |
71 | "uart_serial", "spdif", "spdif1", "hsi_tx", | 71 | "uart_serial", "spdif", "spdif1", "hsi_tx", |
72 | }; | 72 | }; |
73 | static const char *cko_sels[] = { "cko1", "cko2", }; | 73 | static const char *cko_sels[] = { "cko1", "cko2", }; |
@@ -77,6 +77,7 @@ static const char *pll_av_sels[] = { "osc", "lvds1_in", "lvds2_in", "dummy", }; | |||
77 | static void __iomem *anatop_base; | 77 | static void __iomem *anatop_base; |
78 | static void __iomem *ccm_base; | 78 | static void __iomem *ccm_base; |
79 | 79 | ||
80 | static u32 share_count_esai; | ||
80 | 81 | ||
81 | enum mx6q_clks { | 82 | enum mx6q_clks { |
82 | dummy, ckil, ckih, osc, pll2_pfd0_352m, pll2_pfd1_594m, pll2_pfd2_396m, | 83 | dummy, ckil, ckih, osc, pll2_pfd0_352m, pll2_pfd1_594m, pll2_pfd2_396m, |
@@ -100,7 +101,7 @@ enum mx6q_clks { | |||
100 | emi_podf, emi_slow_podf, vpu_axi_podf, cko1_podf, axi, mmdc_ch0_axi_podf, | 101 | emi_podf, emi_slow_podf, vpu_axi_podf, cko1_podf, axi, mmdc_ch0_axi_podf, |
101 | mmdc_ch1_axi_podf, arm, ahb, apbh_dma, asrc_gate, can1_ipg, can1_serial, | 102 | mmdc_ch1_axi_podf, arm, ahb, apbh_dma, asrc_gate, can1_ipg, can1_serial, |
102 | can2_ipg, can2_serial, ecspi1, ecspi2, ecspi3, ecspi4, ecspi5, enet, | 103 | can2_ipg, can2_serial, ecspi1, ecspi2, ecspi3, ecspi4, ecspi5, enet, |
103 | esai, gpt_ipg, gpt_ipg_per, gpu2d_core, gpu3d_core, hdmi_iahb, | 104 | esai_extal, gpt_ipg, gpt_ipg_per, gpu2d_core, gpu3d_core, hdmi_iahb, |
104 | hdmi_isfr, i2c1, i2c2, i2c3, iim, enfc, ipu1, ipu1_di0, ipu1_di1, ipu2, | 105 | hdmi_isfr, i2c1, i2c2, i2c3, iim, enfc, ipu1, ipu1_di0, ipu1_di1, ipu2, |
105 | ipu2_di0, ldb_di0, ldb_di1, ipu2_di1, hsi_tx, mlb, mmdc_ch0_axi, | 106 | ipu2_di0, ldb_di0, ldb_di1, ipu2_di1, hsi_tx, mlb, mmdc_ch0_axi, |
106 | mmdc_ch1_axi, ocram, openvg_axi, pcie_axi, pwm1, pwm2, pwm3, pwm4, per1_bch, | 107 | mmdc_ch1_axi, ocram, openvg_axi, pcie_axi, pwm1, pwm2, pwm3, pwm4, per1_bch, |
@@ -115,7 +116,7 @@ enum mx6q_clks { | |||
115 | ldb_di0_div_7, ldb_di1_div_7, ldb_di0_div_sel, ldb_di1_div_sel, | 116 | ldb_di0_div_7, ldb_di1_div_7, ldb_di0_div_sel, ldb_di1_div_sel, |
116 | pll4_audio_div, lvds1_sel, lvds1_in, lvds1_out, caam_mem, caam_aclk, | 117 | pll4_audio_div, lvds1_sel, lvds1_in, lvds1_out, caam_mem, caam_aclk, |
117 | caam_ipg, epit1, epit2, tzasc2, pll4_sel, lvds2_sel, lvds2_in, lvds2_out, | 118 | caam_ipg, epit1, epit2, tzasc2, pll4_sel, lvds2_sel, lvds2_in, lvds2_out, |
118 | anaclk1, anaclk2, spdif1, asrc_ipg, asrc_mem, clk_max | 119 | anaclk1, anaclk2, spdif1, asrc_ipg, asrc_mem, esai_ipg, esai_mem, clk_max |
119 | }; | 120 | }; |
120 | 121 | ||
121 | static struct clk *clk[clk_max]; | 122 | static struct clk *clk[clk_max]; |
@@ -484,7 +485,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | |||
484 | clk[enet] = imx_clk_gate2("enet", "ipg", base + 0x6c, 10); | 485 | clk[enet] = imx_clk_gate2("enet", "ipg", base + 0x6c, 10); |
485 | clk[epit1] = imx_clk_gate2("epit1", "ipg", base + 0x6c, 12); | 486 | clk[epit1] = imx_clk_gate2("epit1", "ipg", base + 0x6c, 12); |
486 | clk[epit2] = imx_clk_gate2("epit2", "ipg", base + 0x6c, 14); | 487 | clk[epit2] = imx_clk_gate2("epit2", "ipg", base + 0x6c, 14); |
487 | clk[esai] = imx_clk_gate2("esai", "esai_podf", base + 0x6c, 16); | 488 | clk[esai_extal] = imx_clk_gate2_shared("esai_extal", "esai_podf", base + 0x6c, 16, &share_count_esai); |
489 | clk[esai_ipg] = imx_clk_gate2_shared("esai_ipg", "ipg", base + 0x6c, 16, &share_count_esai); | ||
490 | clk[esai_mem] = imx_clk_gate2_shared("esai_mem", "ahb", base + 0x6c, 16, &share_count_esai); | ||
488 | clk[gpt_ipg] = imx_clk_gate2("gpt_ipg", "ipg", base + 0x6c, 20); | 491 | clk[gpt_ipg] = imx_clk_gate2("gpt_ipg", "ipg", base + 0x6c, 20); |
489 | clk[gpt_ipg_per] = imx_clk_gate2("gpt_ipg_per", "ipg_per", base + 0x6c, 22); | 492 | clk[gpt_ipg_per] = imx_clk_gate2("gpt_ipg_per", "ipg_per", base + 0x6c, 22); |
490 | if (cpu_is_imx6dl()) | 493 | if (cpu_is_imx6dl()) |
@@ -623,7 +626,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | |||
623 | clk_register_clkdev(clk[pll4_audio_div], "pll4_audio_div", NULL); | 626 | clk_register_clkdev(clk[pll4_audio_div], "pll4_audio_div", NULL); |
624 | clk_register_clkdev(clk[pll4_sel], "pll4_sel", NULL); | 627 | clk_register_clkdev(clk[pll4_sel], "pll4_sel", NULL); |
625 | clk_register_clkdev(clk[lvds2_in], "lvds2_in", NULL); | 628 | clk_register_clkdev(clk[lvds2_in], "lvds2_in", NULL); |
626 | clk_register_clkdev(clk[esai], "esai", NULL); | 629 | clk_register_clkdev(clk[esai_extal], "esai_extal", NULL); |
627 | 630 | ||
628 | /* | 631 | /* |
629 | * The gpmi needs 100MHz frequency in the EDO/Sync mode, | 632 | * The gpmi needs 100MHz frequency in the EDO/Sync mode, |
diff --git a/arch/arm/mach-imx/clk-imx6sx.c b/arch/arm/mach-imx/clk-imx6sx.c index 6c8a7506abf3..ff43bb706280 100644 --- a/arch/arm/mach-imx/clk-imx6sx.c +++ b/arch/arm/mach-imx/clk-imx6sx.c | |||
@@ -72,7 +72,7 @@ static const char *cko2_sels[] = { | |||
72 | "ecspi_root", "dummy", "usdhc3", "pcie", "arm", "csi_core", | 72 | "ecspi_root", "dummy", "usdhc3", "pcie", "arm", "csi_core", |
73 | "lcdif_axi", "dummy", "osc", "dummy", "gpu2d_ovg_core", | 73 | "lcdif_axi", "dummy", "osc", "dummy", "gpu2d_ovg_core", |
74 | "usdhc2", "ssi1", "ssi2", "ssi3", "gpu2d_core", "dummy", | 74 | "usdhc2", "ssi1", "ssi2", "ssi3", "gpu2d_core", "dummy", |
75 | "dummy", "dummy", "dummy", "esai", "eim_slow", "uart_serial", | 75 | "dummy", "dummy", "dummy", "esai_extal", "eim_slow", "uart_serial", |
76 | "spdif", "asrc", "dummy", | 76 | "spdif", "asrc", "dummy", |
77 | }; | 77 | }; |
78 | static const char *cko_sels[] = { "cko1", "cko2", }; | 78 | static const char *cko_sels[] = { "cko1", "cko2", }; |
@@ -121,6 +121,7 @@ static struct clk_div_table video_div_table[] = { | |||
121 | 121 | ||
122 | static u32 share_count_asrc; | 122 | static u32 share_count_asrc; |
123 | static u32 share_count_audio; | 123 | static u32 share_count_audio; |
124 | static u32 share_count_esai; | ||
124 | 125 | ||
125 | static void __init imx6sx_clocks_init(struct device_node *ccm_node) | 126 | static void __init imx6sx_clocks_init(struct device_node *ccm_node) |
126 | { | 127 | { |
@@ -347,7 +348,9 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node) | |||
347 | clks[IMX6SX_CLK_ECSPI5] = imx_clk_gate2("ecspi5", "ecspi_podf", base + 0x6c, 8); | 348 | clks[IMX6SX_CLK_ECSPI5] = imx_clk_gate2("ecspi5", "ecspi_podf", base + 0x6c, 8); |
348 | clks[IMX6SX_CLK_EPIT1] = imx_clk_gate2("epit1", "perclk", base + 0x6c, 12); | 349 | clks[IMX6SX_CLK_EPIT1] = imx_clk_gate2("epit1", "perclk", base + 0x6c, 12); |
349 | clks[IMX6SX_CLK_EPIT2] = imx_clk_gate2("epit2", "perclk", base + 0x6c, 14); | 350 | clks[IMX6SX_CLK_EPIT2] = imx_clk_gate2("epit2", "perclk", base + 0x6c, 14); |
350 | clks[IMX6SX_CLK_ESAI] = imx_clk_gate2("esai", "esai_podf", base + 0x6c, 16); | 351 | clks[IMX6SX_CLK_ESAI_EXTAL] = imx_clk_gate2_shared("esai_extal", "esai_podf", base + 0x6c, 16, &share_count_esai); |
352 | clks[IMX6SX_CLK_ESAI_IPG] = imx_clk_gate2_shared("esai_ipg", "ahb", base + 0x6c, 16, &share_count_esai); | ||
353 | clks[IMX6SX_CLK_ESAI_MEM] = imx_clk_gate2_shared("esai_mem", "ahb", base + 0x6c, 16, &share_count_esai); | ||
351 | clks[IMX6SX_CLK_WAKEUP] = imx_clk_gate2("wakeup", "ipg", base + 0x6c, 18); | 354 | clks[IMX6SX_CLK_WAKEUP] = imx_clk_gate2("wakeup", "ipg", base + 0x6c, 18); |
352 | clks[IMX6SX_CLK_GPT_BUS] = imx_clk_gate2("gpt_bus", "perclk", base + 0x6c, 20); | 355 | clks[IMX6SX_CLK_GPT_BUS] = imx_clk_gate2("gpt_bus", "perclk", base + 0x6c, 20); |
353 | clks[IMX6SX_CLK_GPT_SERIAL] = imx_clk_gate2("gpt_serial", "perclk", base + 0x6c, 22); | 356 | clks[IMX6SX_CLK_GPT_SERIAL] = imx_clk_gate2("gpt_serial", "perclk", base + 0x6c, 22); |
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index aafec45babab..7ff96e7565aa 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -421,14 +421,14 @@ put_node: | |||
421 | 421 | ||
422 | static void __init imx6q_audio_lvds2_init(void) | 422 | static void __init imx6q_audio_lvds2_init(void) |
423 | { | 423 | { |
424 | struct clk *pll4_sel, *lvds2_in, *pll4_audio_div, *esai; | 424 | struct clk *pll4_sel, *lvds2_in, *pll4_audio_div, *esai_extal; |
425 | 425 | ||
426 | pll4_audio_div = clk_get_sys(NULL, "pll4_audio_div"); | 426 | pll4_audio_div = clk_get_sys(NULL, "pll4_audio_div"); |
427 | pll4_sel = clk_get_sys(NULL, "pll4_sel"); | 427 | pll4_sel = clk_get_sys(NULL, "pll4_sel"); |
428 | lvds2_in = clk_get_sys(NULL, "lvds2_in"); | 428 | lvds2_in = clk_get_sys(NULL, "lvds2_in"); |
429 | esai = clk_get_sys(NULL, "esai"); | 429 | esai_extal = clk_get_sys(NULL, "esai_extal"); |
430 | if (IS_ERR(pll4_audio_div) || IS_ERR(pll4_sel) || | 430 | if (IS_ERR(pll4_audio_div) || IS_ERR(pll4_sel) || |
431 | IS_ERR(lvds2_in) || IS_ERR(esai)) | 431 | IS_ERR(lvds2_in) || IS_ERR(esai_extal)) |
432 | return; | 432 | return; |
433 | 433 | ||
434 | if (clk_get_rate(lvds2_in) != ESAI_AUDIO_MCLK) | 434 | if (clk_get_rate(lvds2_in) != ESAI_AUDIO_MCLK) |
@@ -436,7 +436,7 @@ static void __init imx6q_audio_lvds2_init(void) | |||
436 | 436 | ||
437 | clk_set_parent(pll4_sel, lvds2_in); | 437 | clk_set_parent(pll4_sel, lvds2_in); |
438 | clk_set_rate(pll4_audio_div, 786432000); | 438 | clk_set_rate(pll4_audio_div, 786432000); |
439 | clk_set_rate(esai, ESAI_AUDIO_MCLK); | 439 | clk_set_rate(esai_extal, ESAI_AUDIO_MCLK); |
440 | } | 440 | } |
441 | 441 | ||
442 | static struct platform_device imx6q_cpufreq_pdev = { | 442 | static struct platform_device imx6q_cpufreq_pdev = { |
diff --git a/include/dt-bindings/clock/imx6sx-clock.h b/include/dt-bindings/clock/imx6sx-clock.h index 0cc658b7e436..421d8bb76f2f 100644 --- a/include/dt-bindings/clock/imx6sx-clock.h +++ b/include/dt-bindings/clock/imx6sx-clock.h | |||
@@ -162,7 +162,7 @@ | |||
162 | #define IMX6SX_CLK_ECSPI5 149 | 162 | #define IMX6SX_CLK_ECSPI5 149 |
163 | #define IMX6SX_CLK_EPIT1 150 | 163 | #define IMX6SX_CLK_EPIT1 150 |
164 | #define IMX6SX_CLK_EPIT2 151 | 164 | #define IMX6SX_CLK_EPIT2 151 |
165 | #define IMX6SX_CLK_ESAI 152 | 165 | #define IMX6SX_CLK_ESAI_EXTAL 152 |
166 | #define IMX6SX_CLK_WAKEUP 153 | 166 | #define IMX6SX_CLK_WAKEUP 153 |
167 | #define IMX6SX_CLK_GPT_BUS 154 | 167 | #define IMX6SX_CLK_GPT_BUS 154 |
168 | #define IMX6SX_CLK_GPT_SERIAL 155 | 168 | #define IMX6SX_CLK_GPT_SERIAL 155 |
@@ -249,6 +249,8 @@ | |||
249 | #define IMX6SX_CLK_ASRC_MEM 236 | 249 | #define IMX6SX_CLK_ASRC_MEM 236 |
250 | #define IMX6SX_CLK_SAI1_IPG 237 | 250 | #define IMX6SX_CLK_SAI1_IPG 237 |
251 | #define IMX6SX_CLK_SAI2_IPG 238 | 251 | #define IMX6SX_CLK_SAI2_IPG 238 |
252 | #define IMX6SX_CLK_CLK_END 239 | 252 | #define IMX6SX_CLK_ESAI_IPG 239 |
253 | #define IMX6SX_CLK_ESAI_MEM 240 | ||
254 | #define IMX6SX_CLK_CLK_END 241 | ||
253 | 255 | ||
254 | #endif /* __DT_BINDINGS_CLOCK_IMX6SX_H */ | 256 | #endif /* __DT_BINDINGS_CLOCK_IMX6SX_H */ |
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c index 762ac316fa32..0f9282cc5acf 100644 --- a/sound/soc/fsl/fsl_esai.c +++ b/sound/soc/fsl/fsl_esai.c | |||
@@ -314,6 +314,7 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream, | |||
314 | 314 | ||
315 | clk_enable(esai->clk); | 315 | clk_enable(esai->clk); |
316 | clk_prepare_enable(esai->dmaclk); | 316 | clk_prepare_enable(esai->dmaclk); |
317 | clk_prepare_enable(esai->extalclk); | ||
317 | 318 | ||
318 | esai->substream[substream->stream] = substream; | 319 | esai->substream[substream->stream] = substream; |
319 | 320 | ||
@@ -474,6 +475,7 @@ static void fsl_esai_shutdown(struct snd_pcm_substream *substream, | |||
474 | 475 | ||
475 | esai->substream[substream->stream] = NULL; | 476 | esai->substream[substream->stream] = NULL; |
476 | 477 | ||
478 | clk_disable_unprepare(esai->extalclk); | ||
477 | clk_disable_unprepare(esai->dmaclk); | 479 | clk_disable_unprepare(esai->dmaclk); |
478 | clk_disable(esai->clk); | 480 | clk_disable(esai->clk); |
479 | } | 481 | } |
@@ -774,6 +776,13 @@ static int fsl_esai_probe(struct platform_device *pdev) | |||
774 | goto failed_get_resource; | 776 | goto failed_get_resource; |
775 | } | 777 | } |
776 | 778 | ||
779 | esai->extalclk = devm_clk_get(&pdev->dev, "extal"); | ||
780 | if (IS_ERR(esai->extalclk)) { | ||
781 | ret = PTR_ERR(esai->extalclk); | ||
782 | dev_err(&pdev->dev, "Cannot get extal clock: %d\n", ret); | ||
783 | goto failed_get_resource; | ||
784 | } | ||
785 | |||
777 | ret = of_address_to_resource(np, 0, &res); | 786 | ret = of_address_to_resource(np, 0, &res); |
778 | if (ret) { | 787 | if (ret) { |
779 | dev_err(&pdev->dev, "could not determine device resources\n"); | 788 | dev_err(&pdev->dev, "could not determine device resources\n"); |
diff --git a/sound/soc/fsl/fsl_esai.h b/sound/soc/fsl/fsl_esai.h index daf080641277..b2551c530782 100644 --- a/sound/soc/fsl/fsl_esai.h +++ b/sound/soc/fsl/fsl_esai.h | |||
@@ -320,6 +320,7 @@ | |||
320 | struct fsl_esai { | 320 | struct fsl_esai { |
321 | struct clk *clk; | 321 | struct clk *clk; |
322 | struct clk *dmaclk; | 322 | struct clk *dmaclk; |
323 | struct clk *extalclk; | ||
323 | void __iomem *base; | 324 | void __iomem *base; |
324 | int irq; | 325 | int irq; |
325 | unsigned int flags; | 326 | unsigned int flags; |