diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2016-01-04 12:36:42 -0500 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2016-05-06 11:47:39 -0400 |
commit | 06445994fece2ae458419fbadc1b2107336615d6 (patch) | |
tree | db5614908e08c10419292a78936d0938e4ae7d89 | |
parent | 9e629c17aa8d7a75b8c1d99ed42892cd8ba7cdc4 (diff) |
clk: mediatek: make dpi0_sel propagate rate changes
This mux is supposed to select a fitting divider after the PLL
is already set to the correct rate.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: James Liao <jamesjj.liao@mediatek.com>
Acked-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r-- | drivers/clk/mediatek/clk-mt8173.c | 6 | ||||
-rw-r--r-- | drivers/clk/mediatek/clk-mtk.h | 15 |
2 files changed, 18 insertions, 3 deletions
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c index 227e356403d9..85c0bfc626ae 100644 --- a/drivers/clk/mediatek/clk-mt8173.c +++ b/drivers/clk/mediatek/clk-mt8173.c | |||
@@ -558,7 +558,11 @@ static const struct mtk_composite top_muxes[] __initconst = { | |||
558 | MUX_GATE(CLK_TOP_ATB_SEL, "atb_sel", atb_parents, 0x0090, 16, 2, 23), | 558 | MUX_GATE(CLK_TOP_ATB_SEL, "atb_sel", atb_parents, 0x0090, 16, 2, 23), |
559 | MUX_GATE(CLK_TOP_VENC_LT_SEL, "venclt_sel", venc_lt_parents, 0x0090, 24, 4, 31), | 559 | MUX_GATE(CLK_TOP_VENC_LT_SEL, "venclt_sel", venc_lt_parents, 0x0090, 24, 4, 31), |
560 | /* CLK_CFG_6 */ | 560 | /* CLK_CFG_6 */ |
561 | MUX_GATE(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7), | 561 | /* |
562 | * The dpi0_sel clock should not propagate rate changes to its parent | ||
563 | * clock so the dpi driver can have full control over PLL and divider. | ||
564 | */ | ||
565 | MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7, 0), | ||
562 | MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15), | 566 | MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15), |
563 | MUX_GATE(CLK_TOP_CCI400_SEL, "cci400_sel", cci400_parents, 0x00a0, 16, 3, 23), | 567 | MUX_GATE(CLK_TOP_CCI400_SEL, "cci400_sel", cci400_parents, 0x00a0, 16, 3, 23), |
564 | MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31), | 568 | MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31), |
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h index 32d2e455eb3f..9f24fcfa304f 100644 --- a/drivers/clk/mediatek/clk-mtk.h +++ b/drivers/clk/mediatek/clk-mtk.h | |||
@@ -83,7 +83,11 @@ struct mtk_composite { | |||
83 | signed char num_parents; | 83 | signed char num_parents; |
84 | }; | 84 | }; |
85 | 85 | ||
86 | #define MUX_GATE(_id, _name, _parents, _reg, _shift, _width, _gate) { \ | 86 | /* |
87 | * In case the rate change propagation to parent clocks is undesirable, | ||
88 | * this macro allows to specify the clock flags manually. | ||
89 | */ | ||
90 | #define MUX_GATE_FLAGS(_id, _name, _parents, _reg, _shift, _width, _gate, _flags) { \ | ||
87 | .id = _id, \ | 91 | .id = _id, \ |
88 | .name = _name, \ | 92 | .name = _name, \ |
89 | .mux_reg = _reg, \ | 93 | .mux_reg = _reg, \ |
@@ -94,9 +98,16 @@ struct mtk_composite { | |||
94 | .divider_shift = -1, \ | 98 | .divider_shift = -1, \ |
95 | .parent_names = _parents, \ | 99 | .parent_names = _parents, \ |
96 | .num_parents = ARRAY_SIZE(_parents), \ | 100 | .num_parents = ARRAY_SIZE(_parents), \ |
97 | .flags = CLK_SET_RATE_PARENT, \ | 101 | .flags = _flags, \ |
98 | } | 102 | } |
99 | 103 | ||
104 | /* | ||
105 | * Unless necessary, all MUX_GATE clocks propagate rate changes to their | ||
106 | * parent clock by default. | ||
107 | */ | ||
108 | #define MUX_GATE(_id, _name, _parents, _reg, _shift, _width, _gate) \ | ||
109 | MUX_GATE_FLAGS(_id, _name, _parents, _reg, _shift, _width, _gate, CLK_SET_RATE_PARENT) | ||
110 | |||
100 | #define MUX(_id, _name, _parents, _reg, _shift, _width) { \ | 111 | #define MUX(_id, _name, _parents, _reg, _shift, _width) { \ |
101 | .id = _id, \ | 112 | .id = _id, \ |
102 | .name = _name, \ | 113 | .name = _name, \ |