mediatek: backport upstream mediatek patches
[oweals/openwrt.git] / target / linux / mediatek / patches-4.14 / 0184-ASoC-mediatek-add-some-core-clocks-for-MT2701-AFE.patch
1 From e0e3768b73daae674c69db1f71718894274b7bfc Mon Sep 17 00:00:00 2001
2 From: Ryder Lee <ryder.lee@mediatek.com>
3 Date: Thu, 4 Jan 2018 15:44:07 +0800
4 Subject: [PATCH 184/224] ASoC: mediatek: add some core clocks for MT2701 AFE
5
6 Add three core clocks for MT2701 AFE.
7
8 Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
9 Signed-off-by: Mark Brown <broonie@kernel.org>
10 ---
11  sound/soc/mediatek/mt2701/mt2701-afe-clock-ctrl.c | 30 ++++++++++++++++++++++-
12  sound/soc/mediatek/mt2701/mt2701-afe-common.h     |  3 +++
13  2 files changed, 32 insertions(+), 1 deletion(-)
14
15 diff --git a/sound/soc/mediatek/mt2701/mt2701-afe-clock-ctrl.c b/sound/soc/mediatek/mt2701/mt2701-afe-clock-ctrl.c
16 index 56a057c78c9a..949fc3a1d025 100644
17 --- a/sound/soc/mediatek/mt2701/mt2701-afe-clock-ctrl.c
18 +++ b/sound/soc/mediatek/mt2701/mt2701-afe-clock-ctrl.c
19 @@ -18,8 +18,11 @@
20  #include "mt2701-afe-clock-ctrl.h"
21  
22  static const char *const base_clks[] = {
23 +       [MT2701_INFRA_SYS_AUDIO] = "infra_sys_audio_clk",
24         [MT2701_TOP_AUD_MCLK_SRC0] = "top_audio_mux1_sel",
25         [MT2701_TOP_AUD_MCLK_SRC1] = "top_audio_mux2_sel",
26 +       [MT2701_TOP_AUD_A1SYS] = "top_audio_a1sys_hp",
27 +       [MT2701_TOP_AUD_A2SYS] = "top_audio_a2sys_hp",
28         [MT2701_AUDSYS_AFE] = "audio_afe_pd",
29         [MT2701_AUDSYS_AFE_CONN] = "audio_afe_conn_pd",
30         [MT2701_AUDSYS_A1SYS] = "audio_a1sys_pd",
31 @@ -169,10 +172,26 @@ static int mt2701_afe_enable_audsys(struct mtk_base_afe *afe)
32         struct mt2701_afe_private *afe_priv = afe->platform_priv;
33         int ret;
34  
35 -       ret = clk_prepare_enable(afe_priv->base_ck[MT2701_AUDSYS_AFE]);
36 +       /* Enable infra clock gate */
37 +       ret = clk_prepare_enable(afe_priv->base_ck[MT2701_INFRA_SYS_AUDIO]);
38         if (ret)
39                 return ret;
40  
41 +       /* Enable top a1sys clock gate */
42 +       ret = clk_prepare_enable(afe_priv->base_ck[MT2701_TOP_AUD_A1SYS]);
43 +       if (ret)
44 +               goto err_a1sys;
45 +
46 +       /* Enable top a2sys clock gate */
47 +       ret = clk_prepare_enable(afe_priv->base_ck[MT2701_TOP_AUD_A2SYS]);
48 +       if (ret)
49 +               goto err_a2sys;
50 +
51 +       /* Internal clock gates */
52 +       ret = clk_prepare_enable(afe_priv->base_ck[MT2701_AUDSYS_AFE]);
53 +       if (ret)
54 +               goto err_afe;
55 +
56         ret = clk_prepare_enable(afe_priv->base_ck[MT2701_AUDSYS_A1SYS]);
57         if (ret)
58                 goto err_audio_a1sys;
59 @@ -193,6 +212,12 @@ static int mt2701_afe_enable_audsys(struct mtk_base_afe *afe)
60         clk_disable_unprepare(afe_priv->base_ck[MT2701_AUDSYS_A1SYS]);
61  err_audio_a1sys:
62         clk_disable_unprepare(afe_priv->base_ck[MT2701_AUDSYS_AFE]);
63 +err_afe:
64 +       clk_disable_unprepare(afe_priv->base_ck[MT2701_TOP_AUD_A2SYS]);
65 +err_a2sys:
66 +       clk_disable_unprepare(afe_priv->base_ck[MT2701_TOP_AUD_A1SYS]);
67 +err_a1sys:
68 +       clk_disable_unprepare(afe_priv->base_ck[MT2701_INFRA_SYS_AUDIO]);
69  
70         return ret;
71  }
72 @@ -205,6 +230,9 @@ static void mt2701_afe_disable_audsys(struct mtk_base_afe *afe)
73         clk_disable_unprepare(afe_priv->base_ck[MT2701_AUDSYS_A2SYS]);
74         clk_disable_unprepare(afe_priv->base_ck[MT2701_AUDSYS_A1SYS]);
75         clk_disable_unprepare(afe_priv->base_ck[MT2701_AUDSYS_AFE]);
76 +       clk_disable_unprepare(afe_priv->base_ck[MT2701_TOP_AUD_A1SYS]);
77 +       clk_disable_unprepare(afe_priv->base_ck[MT2701_TOP_AUD_A2SYS]);
78 +       clk_disable_unprepare(afe_priv->base_ck[MT2701_INFRA_SYS_AUDIO]);
79  }
80  
81  int mt2701_afe_enable_clock(struct mtk_base_afe *afe)
82 diff --git a/sound/soc/mediatek/mt2701/mt2701-afe-common.h b/sound/soc/mediatek/mt2701/mt2701-afe-common.h
83 index 9a2b301a4c21..ae8ddeacfbfe 100644
84 --- a/sound/soc/mediatek/mt2701/mt2701-afe-common.h
85 +++ b/sound/soc/mediatek/mt2701/mt2701-afe-common.h
86 @@ -61,8 +61,11 @@ enum {
87  };
88  
89  enum audio_base_clock {
90 +       MT2701_INFRA_SYS_AUDIO,
91         MT2701_TOP_AUD_MCLK_SRC0,
92         MT2701_TOP_AUD_MCLK_SRC1,
93 +       MT2701_TOP_AUD_A1SYS,
94 +       MT2701_TOP_AUD_A2SYS,
95         MT2701_AUDSYS_AFE,
96         MT2701_AUDSYS_AFE_CONN,
97         MT2701_AUDSYS_A1SYS,
98 -- 
99 2.11.0
100