* [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration
@ 2016-04-14 21:30 Alexander Kurz
2016-04-14 21:30 ` [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider Alexander Kurz
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Alexander Kurz @ 2016-04-14 21:30 UTC (permalink / raw)
To: linux-arm-kernel
Cc: devicetree, Alexander Kurz, Michael Turquette, Stephen Boyd,
Sascha Hauer, Shawn Guo, linux-clk, Philippe Reynes
A new element got inserted into enum mx35_clks with commit 3713e3f5e927
("clk: imx35: define two clocks for rtc"). This insertion shifted most
nummerical clock assignments to a new nummerical value which in turn
rendered most hardcoded nummeric values in imx35.dtsi incorrect.
Restore the existing order by moving the newly introduced clock to the
end of the enum. Update the dts documentation accordingly.
Signed-off-by: Alexander Kurz <akurz@blala.de>
---
Documentation/devicetree/bindings/clock/imx35-clock.txt | 1 +
drivers/clk/imx/clk-imx35.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/clock/imx35-clock.txt b/Documentation/devicetree/bindings/clock/imx35-clock.txt
index a703564..f497832 100644
--- a/Documentation/devicetree/bindings/clock/imx35-clock.txt
+++ b/Documentation/devicetree/bindings/clock/imx35-clock.txt
@@ -94,6 +94,7 @@ clocks and IDs.
csi_sel 79
iim_gate 80
gpu2d_gate 81
+ ckli_gate 82
Examples:
diff --git a/drivers/clk/imx/clk-imx35.c b/drivers/clk/imx/clk-imx35.c
index a71d24c..b0978d3 100644
--- a/drivers/clk/imx/clk-imx35.c
+++ b/drivers/clk/imx/clk-imx35.c
@@ -66,7 +66,7 @@ static const char *std_sel[] = {"ppll", "arm"};
static const char *ipg_per_sel[] = {"ahb_per_div", "arm_per_div"};
enum mx35_clks {
- ckih, ckil, mpll, ppll, mpll_075, arm, hsp, hsp_div, hsp_sel, ahb, ipg,
+ ckih, mpll, ppll, mpll_075, arm, hsp, hsp_div, hsp_sel, ahb, ipg,
arm_per_div, ahb_per_div, ipg_per, uart_sel, uart_div, esdhc_sel,
esdhc1_div, esdhc2_div, esdhc3_div, spdif_sel, spdif_div_pre,
spdif_div_post, ssi_sel, ssi1_div_pre, ssi1_div_post, ssi2_div_pre,
@@ -79,7 +79,7 @@ enum mx35_clks {
rtc_gate, rtic_gate, scc_gate, sdma_gate, spba_gate, spdif_gate,
ssi1_gate, ssi2_gate, uart1_gate, uart2_gate, uart3_gate, usbotg_gate,
wdog_gate, max_gate, admux_gate, csi_gate, csi_div, csi_sel, iim_gate,
- gpu2d_gate, clk_max
+ gpu2d_gate, ckil, clk_max
};
static struct clk *clk[clk_max];
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider
2016-04-14 21:30 [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Alexander Kurz
@ 2016-04-14 21:30 ` Alexander Kurz
2016-04-18 4:47 ` Shawn Guo
2016-04-18 17:19 ` Rob Herring
2016-04-18 4:39 ` [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Shawn Guo
2016-04-18 17:16 ` Rob Herring
2 siblings, 2 replies; 6+ messages in thread
From: Alexander Kurz @ 2016-04-14 21:30 UTC (permalink / raw)
To: linux-arm-kernel
Cc: devicetree, Alexander Kurz, Michael Turquette, Stephen Boyd,
Sascha Hauer, Shawn Guo, linux-clk, Philippe Reynes
Use clock defines in order to make devicetrees more human readable
Signed-off-by: Alexander Kurz <akurz@blala.de>
---
.../devicetree/bindings/clock/imx35-clock.txt | 93 +----
drivers/clk/imx/clk-imx35.c | 429 ++++++++++++---------
include/dt-bindings/clock/imx35-clock.h | 98 +++++
3 files changed, 349 insertions(+), 271 deletions(-)
create mode 100644 include/dt-bindings/clock/imx35-clock.h
diff --git a/Documentation/devicetree/bindings/clock/imx35-clock.txt b/Documentation/devicetree/bindings/clock/imx35-clock.txt
index f497832..2e88d25 100644
--- a/Documentation/devicetree/bindings/clock/imx35-clock.txt
+++ b/Documentation/devicetree/bindings/clock/imx35-clock.txt
@@ -7,94 +7,8 @@ Required properties:
- #clock-cells: Should be <1>
The clock consumer should specify the desired clock by having the clock
-ID in its "clocks" phandle cell. The following is a full list of i.MX35
-clocks and IDs.
-
- Clock ID
- ---------------------------
- ckih 0
- mpll 1
- ppll 2
- mpll_075 3
- arm 4
- hsp 5
- hsp_div 6
- hsp_sel 7
- ahb 8
- ipg 9
- arm_per_div 10
- ahb_per_div 11
- ipg_per 12
- uart_sel 13
- uart_div 14
- esdhc_sel 15
- esdhc1_div 16
- esdhc2_div 17
- esdhc3_div 18
- spdif_sel 19
- spdif_div_pre 20
- spdif_div_post 21
- ssi_sel 22
- ssi1_div_pre 23
- ssi1_div_post 24
- ssi2_div_pre 25
- ssi2_div_post 26
- usb_sel 27
- usb_div 28
- nfc_div 29
- asrc_gate 30
- pata_gate 31
- audmux_gate 32
- can1_gate 33
- can2_gate 34
- cspi1_gate 35
- cspi2_gate 36
- ect_gate 37
- edio_gate 38
- emi_gate 39
- epit1_gate 40
- epit2_gate 41
- esai_gate 42
- esdhc1_gate 43
- esdhc2_gate 44
- esdhc3_gate 45
- fec_gate 46
- gpio1_gate 47
- gpio2_gate 48
- gpio3_gate 49
- gpt_gate 50
- i2c1_gate 51
- i2c2_gate 52
- i2c3_gate 53
- iomuxc_gate 54
- ipu_gate 55
- kpp_gate 56
- mlb_gate 57
- mshc_gate 58
- owire_gate 59
- pwm_gate 60
- rngc_gate 61
- rtc_gate 62
- rtic_gate 63
- scc_gate 64
- sdma_gate 65
- spba_gate 66
- spdif_gate 67
- ssi1_gate 68
- ssi2_gate 69
- uart1_gate 70
- uart2_gate 71
- uart3_gate 72
- usbotg_gate 73
- wdog_gate 74
- max_gate 75
- admux_gate 76
- csi_gate 77
- csi_div 78
- csi_sel 79
- iim_gate 80
- gpu2d_gate 81
- ckli_gate 82
+ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx35-clock.h
+for the full list of i.MXi35 clock IDs.
Examples:
@@ -109,6 +23,7 @@ esdhc1: esdhc@53fb4000 {
compatible = "fsl,imx35-esdhc";
reg = <0x53fb4000 0x4000>;
interrupts = <7>;
- clocks = <&clks 9>, <&clks 8>, <&clks 43>;
+ clocks = <&clks IMX35_CLK_IPG>, <&clks IMX35_CLK_AHB>,
+ <&clks IMX35_CLK_ESDHC1_GATE>;
clock-names = "ipg", "ahb", "per";
};
diff --git a/drivers/clk/imx/clk-imx35.c b/drivers/clk/imx/clk-imx35.c
index b0978d3..656bab7 100644
--- a/drivers/clk/imx/clk-imx35.c
+++ b/drivers/clk/imx/clk-imx35.c
@@ -13,6 +13,7 @@
#include <linux/clkdev.h>
#include <linux/of.h>
#include <linux/err.h>
+#include <dt-bindings/clock/imx35-clock.h>
#include <soc/imx/revision.h>
#include <soc/imx/timer.h>
#include <asm/irq.h>
@@ -65,30 +66,13 @@ static struct clk_onecell_data clk_data;
static const char *std_sel[] = {"ppll", "arm"};
static const char *ipg_per_sel[] = {"ahb_per_div", "arm_per_div"};
-enum mx35_clks {
- ckih, mpll, ppll, mpll_075, arm, hsp, hsp_div, hsp_sel, ahb, ipg,
- arm_per_div, ahb_per_div, ipg_per, uart_sel, uart_div, esdhc_sel,
- esdhc1_div, esdhc2_div, esdhc3_div, spdif_sel, spdif_div_pre,
- spdif_div_post, ssi_sel, ssi1_div_pre, ssi1_div_post, ssi2_div_pre,
- ssi2_div_post, usb_sel, usb_div, nfc_div, asrc_gate, pata_gate,
- audmux_gate, can1_gate, can2_gate, cspi1_gate, cspi2_gate, ect_gate,
- edio_gate, emi_gate, epit1_gate, epit2_gate, esai_gate, esdhc1_gate,
- esdhc2_gate, esdhc3_gate, fec_gate, gpio1_gate, gpio2_gate, gpio3_gate,
- gpt_gate, i2c1_gate, i2c2_gate, i2c3_gate, iomuxc_gate, ipu_gate,
- kpp_gate, mlb_gate, mshc_gate, owire_gate, pwm_gate, rngc_gate,
- rtc_gate, rtic_gate, scc_gate, sdma_gate, spba_gate, spdif_gate,
- ssi1_gate, ssi2_gate, uart1_gate, uart2_gate, uart3_gate, usbotg_gate,
- wdog_gate, max_gate, admux_gate, csi_gate, csi_div, csi_sel, iim_gate,
- gpu2d_gate, ckil, clk_max
-};
-
-static struct clk *clk[clk_max];
+static struct clk *clk[IMX35_CLK_MAX];
static struct clk ** const uart_clks[] __initconst = {
- &clk[ipg],
- &clk[uart1_gate],
- &clk[uart2_gate],
- &clk[uart3_gate],
+ &clk[IMX35_CLK_IPG],
+ &clk[IMX35_CLK_UART1_GATE],
+ &clk[IMX35_CLK_UART2_GATE],
+ &clk[IMX35_CLK_UART3_GATE],
NULL
};
@@ -114,19 +98,23 @@ static void __init _mx35_clocks_init(void)
aad = &clk_consumer[0];
}
- clk[ckih] = imx_clk_fixed("ckih", 24000000);
- clk[ckil] = imx_clk_fixed("ckih", 32768);
- clk[mpll] = imx_clk_pllv1(IMX_PLLV1_IMX35, "mpll", "ckih", base + MX35_CCM_MPCTL);
- clk[ppll] = imx_clk_pllv1(IMX_PLLV1_IMX35, "ppll", "ckih", base + MX35_CCM_PPCTL);
+ clk[IMX35_CLK_CKIH] = imx_clk_fixed("ckih", 24000000);
+ clk[IMX35_CLK_CKIL] = imx_clk_fixed("ckih", 32768);
+ clk[IMX35_CLK_MPLL] = imx_clk_pllv1(IMX_PLLV1_IMX35, "mpll", "ckih",
+ base + MX35_CCM_MPCTL);
+ clk[IMX35_CLK_PPLL] = imx_clk_pllv1(IMX_PLLV1_IMX35, "ppll", "ckih",
+ base + MX35_CCM_PPCTL);
- clk[mpll] = imx_clk_fixed_factor("mpll_075", "mpll", 3, 4);
+ clk[IMX35_CLK_MPLL] = imx_clk_fixed_factor("mpll_075", "mpll", 3, 4);
if (aad->sel)
- clk[arm] = imx_clk_fixed_factor("arm", "mpll_075", 1, aad->arm);
+ clk[IMX35_CLK_ARM] = imx_clk_fixed_factor("arm", "mpll_075",
+ 1, aad->arm);
else
- clk[arm] = imx_clk_fixed_factor("arm", "mpll", 1, aad->arm);
+ clk[IMX35_CLK_ARM] = imx_clk_fixed_factor("arm", "mpll",
+ 1, aad->arm);
- if (clk_get_rate(clk[arm]) > 400000000)
+ if (clk_get_rate(clk[IMX35_CLK_ARM]) > 400000000)
hsp_div = hsp_div_532;
else
hsp_div = hsp_div_400;
@@ -137,105 +125,179 @@ static void __init _mx35_clocks_init(void)
hsp_sel = 0;
}
- clk[hsp] = imx_clk_fixed_factor("hsp", "arm", 1, hsp_div[hsp_sel]);
-
- clk[ahb] = imx_clk_fixed_factor("ahb", "arm", 1, aad->ahb);
- clk[ipg] = imx_clk_fixed_factor("ipg", "ahb", 1, 2);
-
- clk[arm_per_div] = imx_clk_divider("arm_per_div", "arm", base + MX35_CCM_PDR4, 16, 6);
- clk[ahb_per_div] = imx_clk_divider("ahb_per_div", "ahb", base + MXC_CCM_PDR0, 12, 3);
- clk[ipg_per] = imx_clk_mux("ipg_per", base + MXC_CCM_PDR0, 26, 1, ipg_per_sel, ARRAY_SIZE(ipg_per_sel));
-
- clk[uart_sel] = imx_clk_mux("uart_sel", base + MX35_CCM_PDR3, 14, 1, std_sel, ARRAY_SIZE(std_sel));
- clk[uart_div] = imx_clk_divider("uart_div", "uart_sel", base + MX35_CCM_PDR4, 10, 6);
-
- clk[esdhc_sel] = imx_clk_mux("esdhc_sel", base + MX35_CCM_PDR4, 9, 1, std_sel, ARRAY_SIZE(std_sel));
- clk[esdhc1_div] = imx_clk_divider("esdhc1_div", "esdhc_sel", base + MX35_CCM_PDR3, 0, 6);
- clk[esdhc2_div] = imx_clk_divider("esdhc2_div", "esdhc_sel", base + MX35_CCM_PDR3, 8, 6);
- clk[esdhc3_div] = imx_clk_divider("esdhc3_div", "esdhc_sel", base + MX35_CCM_PDR3, 16, 6);
-
- clk[spdif_sel] = imx_clk_mux("spdif_sel", base + MX35_CCM_PDR3, 22, 1, std_sel, ARRAY_SIZE(std_sel));
- clk[spdif_div_pre] = imx_clk_divider("spdif_div_pre", "spdif_sel", base + MX35_CCM_PDR3, 29, 3); /* divide by 1 not allowed */
- clk[spdif_div_post] = imx_clk_divider("spdif_div_post", "spdif_div_pre", base + MX35_CCM_PDR3, 23, 6);
-
- clk[ssi_sel] = imx_clk_mux("ssi_sel", base + MX35_CCM_PDR2, 6, 1, std_sel, ARRAY_SIZE(std_sel));
- clk[ssi1_div_pre] = imx_clk_divider("ssi1_div_pre", "ssi_sel", base + MX35_CCM_PDR2, 24, 3);
- clk[ssi1_div_post] = imx_clk_divider("ssi1_div_post", "ssi1_div_pre", base + MX35_CCM_PDR2, 0, 6);
- clk[ssi2_div_pre] = imx_clk_divider("ssi2_div_pre", "ssi_sel", base + MX35_CCM_PDR2, 27, 3);
- clk[ssi2_div_post] = imx_clk_divider("ssi2_div_post", "ssi2_div_pre", base + MX35_CCM_PDR2, 8, 6);
-
- clk[usb_sel] = imx_clk_mux("usb_sel", base + MX35_CCM_PDR4, 9, 1, std_sel, ARRAY_SIZE(std_sel));
- clk[usb_div] = imx_clk_divider("usb_div", "usb_sel", base + MX35_CCM_PDR4, 22, 6);
-
- clk[nfc_div] = imx_clk_divider("nfc_div", "ahb", base + MX35_CCM_PDR4, 28, 4);
-
- clk[csi_sel] = imx_clk_mux("csi_sel", base + MX35_CCM_PDR2, 7, 1, std_sel, ARRAY_SIZE(std_sel));
- clk[csi_div] = imx_clk_divider("csi_div", "csi_sel", base + MX35_CCM_PDR2, 16, 6);
-
- clk[asrc_gate] = imx_clk_gate2("asrc_gate", "ipg", base + MX35_CCM_CGR0, 0);
- clk[pata_gate] = imx_clk_gate2("pata_gate", "ipg", base + MX35_CCM_CGR0, 2);
- clk[audmux_gate] = imx_clk_gate2("audmux_gate", "ipg", base + MX35_CCM_CGR0, 4);
- clk[can1_gate] = imx_clk_gate2("can1_gate", "ipg", base + MX35_CCM_CGR0, 6);
- clk[can2_gate] = imx_clk_gate2("can2_gate", "ipg", base + MX35_CCM_CGR0, 8);
- clk[cspi1_gate] = imx_clk_gate2("cspi1_gate", "ipg", base + MX35_CCM_CGR0, 10);
- clk[cspi2_gate] = imx_clk_gate2("cspi2_gate", "ipg", base + MX35_CCM_CGR0, 12);
- clk[ect_gate] = imx_clk_gate2("ect_gate", "ipg", base + MX35_CCM_CGR0, 14);
- clk[edio_gate] = imx_clk_gate2("edio_gate", "ipg", base + MX35_CCM_CGR0, 16);
- clk[emi_gate] = imx_clk_gate2("emi_gate", "ipg", base + MX35_CCM_CGR0, 18);
- clk[epit1_gate] = imx_clk_gate2("epit1_gate", "ipg", base + MX35_CCM_CGR0, 20);
- clk[epit2_gate] = imx_clk_gate2("epit2_gate", "ipg", base + MX35_CCM_CGR0, 22);
- clk[esai_gate] = imx_clk_gate2("esai_gate", "ipg", base + MX35_CCM_CGR0, 24);
- clk[esdhc1_gate] = imx_clk_gate2("esdhc1_gate", "esdhc1_div", base + MX35_CCM_CGR0, 26);
- clk[esdhc2_gate] = imx_clk_gate2("esdhc2_gate", "esdhc2_div", base + MX35_CCM_CGR0, 28);
- clk[esdhc3_gate] = imx_clk_gate2("esdhc3_gate", "esdhc3_div", base + MX35_CCM_CGR0, 30);
-
- clk[fec_gate] = imx_clk_gate2("fec_gate", "ipg", base + MX35_CCM_CGR1, 0);
- clk[gpio1_gate] = imx_clk_gate2("gpio1_gate", "ipg", base + MX35_CCM_CGR1, 2);
- clk[gpio2_gate] = imx_clk_gate2("gpio2_gate", "ipg", base + MX35_CCM_CGR1, 4);
- clk[gpio3_gate] = imx_clk_gate2("gpio3_gate", "ipg", base + MX35_CCM_CGR1, 6);
- clk[gpt_gate] = imx_clk_gate2("gpt_gate", "ipg", base + MX35_CCM_CGR1, 8);
- clk[i2c1_gate] = imx_clk_gate2("i2c1_gate", "ipg_per", base + MX35_CCM_CGR1, 10);
- clk[i2c2_gate] = imx_clk_gate2("i2c2_gate", "ipg_per", base + MX35_CCM_CGR1, 12);
- clk[i2c3_gate] = imx_clk_gate2("i2c3_gate", "ipg_per", base + MX35_CCM_CGR1, 14);
- clk[iomuxc_gate] = imx_clk_gate2("iomuxc_gate", "ipg", base + MX35_CCM_CGR1, 16);
- clk[ipu_gate] = imx_clk_gate2("ipu_gate", "hsp", base + MX35_CCM_CGR1, 18);
- clk[kpp_gate] = imx_clk_gate2("kpp_gate", "ipg", base + MX35_CCM_CGR1, 20);
- clk[mlb_gate] = imx_clk_gate2("mlb_gate", "ahb", base + MX35_CCM_CGR1, 22);
- clk[mshc_gate] = imx_clk_gate2("mshc_gate", "dummy", base + MX35_CCM_CGR1, 24);
- clk[owire_gate] = imx_clk_gate2("owire_gate", "ipg_per", base + MX35_CCM_CGR1, 26);
- clk[pwm_gate] = imx_clk_gate2("pwm_gate", "ipg_per", base + MX35_CCM_CGR1, 28);
- clk[rngc_gate] = imx_clk_gate2("rngc_gate", "ipg", base + MX35_CCM_CGR1, 30);
-
- clk[rtc_gate] = imx_clk_gate2("rtc_gate", "ipg", base + MX35_CCM_CGR2, 0);
- clk[rtic_gate] = imx_clk_gate2("rtic_gate", "ahb", base + MX35_CCM_CGR2, 2);
- clk[scc_gate] = imx_clk_gate2("scc_gate", "ipg", base + MX35_CCM_CGR2, 4);
- clk[sdma_gate] = imx_clk_gate2("sdma_gate", "ahb", base + MX35_CCM_CGR2, 6);
- clk[spba_gate] = imx_clk_gate2("spba_gate", "ipg", base + MX35_CCM_CGR2, 8);
- clk[spdif_gate] = imx_clk_gate2("spdif_gate", "spdif_div_post", base + MX35_CCM_CGR2, 10);
- clk[ssi1_gate] = imx_clk_gate2("ssi1_gate", "ssi1_div_post", base + MX35_CCM_CGR2, 12);
- clk[ssi2_gate] = imx_clk_gate2("ssi2_gate", "ssi2_div_post", base + MX35_CCM_CGR2, 14);
- clk[uart1_gate] = imx_clk_gate2("uart1_gate", "uart_div", base + MX35_CCM_CGR2, 16);
- clk[uart2_gate] = imx_clk_gate2("uart2_gate", "uart_div", base + MX35_CCM_CGR2, 18);
- clk[uart3_gate] = imx_clk_gate2("uart3_gate", "uart_div", base + MX35_CCM_CGR2, 20);
- clk[usbotg_gate] = imx_clk_gate2("usbotg_gate", "ahb", base + MX35_CCM_CGR2, 22);
- clk[wdog_gate] = imx_clk_gate2("wdog_gate", "ipg", base + MX35_CCM_CGR2, 24);
- clk[max_gate] = imx_clk_gate2("max_gate", "dummy", base + MX35_CCM_CGR2, 26);
- clk[admux_gate] = imx_clk_gate2("admux_gate", "ipg", base + MX35_CCM_CGR2, 30);
-
- clk[csi_gate] = imx_clk_gate2("csi_gate", "csi_div", base + MX35_CCM_CGR3, 0);
- clk[iim_gate] = imx_clk_gate2("iim_gate", "ipg", base + MX35_CCM_CGR3, 2);
- clk[gpu2d_gate] = imx_clk_gate2("gpu2d_gate", "ahb", base + MX35_CCM_CGR3, 4);
+ clk[IMX35_CLK_HSP] = imx_clk_fixed_factor("hsp", "arm",
+ 1, hsp_div[hsp_sel]);
+
+ clk[IMX35_CLK_AHB] = imx_clk_fixed_factor("ahb", "arm", 1, aad->ahb);
+ clk[IMX35_CLK_IPG] = imx_clk_fixed_factor("ipg", "ahb", 1, 2);
+
+ clk[IMX35_CLK_ARM_PER_DIV] = imx_clk_divider("arm_per_div", "arm",
+ base + MX35_CCM_PDR4, 16, 6);
+ clk[IMX35_CLK_AHB_PER_DIV] = imx_clk_divider("ahb_per_div", "ahb",
+ base + MXC_CCM_PDR0, 12, 3);
+ clk[IMX35_CLK_IPG_PER] = imx_clk_mux("ipg_per", base + MXC_CCM_PDR0,
+ 26, 1, ipg_per_sel, ARRAY_SIZE(ipg_per_sel));
+
+ clk[IMX35_CLK_UART_SEL] = imx_clk_mux("uart_sel", base + MX35_CCM_PDR3,
+ 14, 1, std_sel, ARRAY_SIZE(std_sel));
+ clk[IMX35_CLK_UART_DIV] = imx_clk_divider("uart_div", "uart_sel",
+ base + MX35_CCM_PDR4, 10, 6);
+
+ clk[IMX35_CLK_ESDHC_SEL] = imx_clk_mux("esdhc_sel",
+ base + MX35_CCM_PDR4, 9, 1, std_sel, ARRAY_SIZE(std_sel));
+ clk[IMX35_CLK_ESDHC1_DIV] = imx_clk_divider("esdhc1_div", "esdhc_sel",
+ base + MX35_CCM_PDR3, 0, 6);
+ clk[IMX35_CLK_ESDHC2_DIV] = imx_clk_divider("esdhc2_div", "esdhc_sel",
+ base + MX35_CCM_PDR3, 8, 6);
+ clk[IMX35_CLK_ESDHC3_DIV] = imx_clk_divider("esdhc3_div", "esdhc_sel",
+ base + MX35_CCM_PDR3, 16, 6);
+
+ clk[IMX35_CLK_SPDIF_SEL] = imx_clk_mux("spdif_sel",
+ base + MX35_CCM_PDR3, 22, 1, std_sel, ARRAY_SIZE(std_sel));
+ clk[IMX35_CLK_SPDIF_DIV_PRE] = imx_clk_divider("spdif_div_pre",
+ "spdif_sel", base + MX35_CCM_PDR3, 29, 3);
+ /* divide by 1 not allowed */
+ clk[IMX35_CLK_SPDIF_DIV_POST] = imx_clk_divider("spdif_div_post",
+ "spdif_div_pre", base + MX35_CCM_PDR3, 23, 6);
+
+ clk[IMX35_CLK_SSI_SEL] = imx_clk_mux("ssi_sel", base + MX35_CCM_PDR2,
+ 6, 1, std_sel, ARRAY_SIZE(std_sel));
+ clk[IMX35_CLK_SSI1_DIV_PRE] = imx_clk_divider("ssi1_div_pre",
+ "ssi_sel", base + MX35_CCM_PDR2, 24, 3);
+ clk[IMX35_CLK_SSI1_DIV_POST] = imx_clk_divider("ssi1_div_post",
+ "ssi1_div_pre", base + MX35_CCM_PDR2, 0, 6);
+ clk[IMX35_CLK_SSI2_DIV_PRE] = imx_clk_divider("ssi2_div_pre",
+ "ssi_sel", base + MX35_CCM_PDR2, 27, 3);
+ clk[IMX35_CLK_SSI2_DIV_POST] = imx_clk_divider("ssi2_div_post",
+ "ssi2_div_pre", base + MX35_CCM_PDR2, 8, 6);
+
+ clk[IMX35_CLK_USB_SEL] = imx_clk_mux("usb_sel", base + MX35_CCM_PDR4,
+ 9, 1, std_sel, ARRAY_SIZE(std_sel));
+ clk[IMX35_CLK_USB_DIV] = imx_clk_divider("usb_div", "usb_sel",
+ base + MX35_CCM_PDR4, 22, 6);
+
+ clk[IMX35_CLK_NFC_DIV] = imx_clk_divider("nfc_div", "ahb",
+ base + MX35_CCM_PDR4, 28, 4);
+
+ clk[IMX35_CLK_CSI_SEL] = imx_clk_mux("csi_sel", base + MX35_CCM_PDR2,
+ 7, 1, std_sel, ARRAY_SIZE(std_sel));
+ clk[IMX35_CLK_CSI_DIV] = imx_clk_divider("csi_div", "csi_sel",
+ base + MX35_CCM_PDR2, 16, 6);
+
+ clk[IMX35_CLK_ASRC_GATE] = imx_clk_gate2("asrc_gate", "ipg",
+ base + MX35_CCM_CGR0, 0);
+ clk[IMX35_CLK_PATA_GATE] = imx_clk_gate2("pata_gate", "ipg",
+ base + MX35_CCM_CGR0, 2);
+ clk[IMX35_CLK_AUDMUX_GATE] = imx_clk_gate2("audmux_gate", "ipg",
+ base + MX35_CCM_CGR0, 4);
+ clk[IMX35_CLK_CAN1_GATE] = imx_clk_gate2("can1_gate", "ipg",
+ base + MX35_CCM_CGR0, 6);
+ clk[IMX35_CLK_CAN2_GATE] = imx_clk_gate2("can2_gate", "ipg",
+ base + MX35_CCM_CGR0, 8);
+ clk[IMX35_CLK_CSPI1_GATE] = imx_clk_gate2("cspi1_gate", "ipg",
+ base + MX35_CCM_CGR0, 10);
+ clk[IMX35_CLK_CSPI2_GATE] = imx_clk_gate2("cspi2_gate", "ipg",
+ base + MX35_CCM_CGR0, 12);
+ clk[IMX35_CLK_ECT_GATE] = imx_clk_gate2("ect_gate", "ipg",
+ base + MX35_CCM_CGR0, 14);
+ clk[IMX35_CLK_EDIO_GATE] = imx_clk_gate2("edio_gate", "ipg",
+ base + MX35_CCM_CGR0, 16);
+ clk[IMX35_CLK_EMI_GATE] = imx_clk_gate2("emi_gate", "ipg",
+ base + MX35_CCM_CGR0, 18);
+ clk[IMX35_CLK_EPIT1_GATE] = imx_clk_gate2("epit1_gate", "ipg",
+ base + MX35_CCM_CGR0, 20);
+ clk[IMX35_CLK_EPIT2_GATE] = imx_clk_gate2("epit2_gate", "ipg",
+ base + MX35_CCM_CGR0, 22);
+ clk[IMX35_CLK_ESAI_GATE] = imx_clk_gate2("esai_gate", "ipg",
+ base + MX35_CCM_CGR0, 24);
+ clk[IMX35_CLK_ESDHC1_GATE] = imx_clk_gate2("esdhc1_gate", "esdhc1_div",
+ base + MX35_CCM_CGR0, 26);
+ clk[IMX35_CLK_ESDHC2_GATE] = imx_clk_gate2("esdhc2_gate", "esdhc2_div",
+ base + MX35_CCM_CGR0, 28);
+ clk[IMX35_CLK_ESDHC3_GATE] = imx_clk_gate2("esdhc3_gate", "esdhc3_div",
+ base + MX35_CCM_CGR0, 30);
+
+ clk[IMX35_CLK_FEC_GATE] = imx_clk_gate2("fec_gate", "ipg",
+ base + MX35_CCM_CGR1, 0);
+ clk[IMX35_CLK_GPIO1_GATE] = imx_clk_gate2("gpio1_gate", "ipg",
+ base + MX35_CCM_CGR1, 2);
+ clk[IMX35_CLK_GPIO2_GATE] = imx_clk_gate2("gpio2_gate", "ipg",
+ base + MX35_CCM_CGR1, 4);
+ clk[IMX35_CLK_GPIO3_GATE] = imx_clk_gate2("gpio3_gate", "ipg",
+ base + MX35_CCM_CGR1, 6);
+ clk[IMX35_CLK_GPT_GATE] = imx_clk_gate2("gpt_gate", "ipg",
+ base + MX35_CCM_CGR1, 8);
+ clk[IMX35_CLK_I2C1_GATE] = imx_clk_gate2("i2c1_gate", "ipg_per",
+ base + MX35_CCM_CGR1, 10);
+ clk[IMX35_CLK_I2C2_GATE] = imx_clk_gate2("i2c2_gate", "ipg_per",
+ base + MX35_CCM_CGR1, 12);
+ clk[IMX35_CLK_I2C3_GATE] = imx_clk_gate2("i2c3_gate", "ipg_per",
+ base + MX35_CCM_CGR1, 14);
+ clk[IMX35_CLK_IOMUXC_GATE] = imx_clk_gate2("iomuxc_gate", "ipg",
+ base + MX35_CCM_CGR1, 16);
+ clk[IMX35_CLK_IPU_GATE] = imx_clk_gate2("ipu_gate", "hsp",
+ base + MX35_CCM_CGR1, 18);
+ clk[IMX35_CLK_KPP_GATE] = imx_clk_gate2("kpp_gate", "ipg",
+ base + MX35_CCM_CGR1, 20);
+ clk[IMX35_CLK_MLB_GATE] = imx_clk_gate2("mlb_gate", "ahb",
+ base + MX35_CCM_CGR1, 22);
+ clk[IMX35_CLK_MSHC_GATE] = imx_clk_gate2("mshc_gate", "dummy",
+ base + MX35_CCM_CGR1, 24);
+ clk[IMX35_CLK_OWIRE_GATE] = imx_clk_gate2("owire_gate", "ipg_per",
+ base + MX35_CCM_CGR1, 26);
+ clk[IMX35_CLK_PWM_GATE] = imx_clk_gate2("pwm_gate", "ipg_per",
+ base + MX35_CCM_CGR1, 28);
+ clk[IMX35_CLK_RNGC_GATE] = imx_clk_gate2("rngc_gate", "ipg",
+ base + MX35_CCM_CGR1, 30);
+
+ clk[IMX35_CLK_RTC_GATE] = imx_clk_gate2("rtc_gate", "ipg",
+ base + MX35_CCM_CGR2, 0);
+ clk[IMX35_CLK_RTIC_GATE] = imx_clk_gate2("rtic_gate", "ahb",
+ base + MX35_CCM_CGR2, 2);
+ clk[IMX35_CLK_SCC_GATE] = imx_clk_gate2("scc_gate", "ipg",
+ base + MX35_CCM_CGR2, 4);
+ clk[IMX35_CLK_SDMA_GATE] = imx_clk_gate2("sdma_gate", "ahb",
+ base + MX35_CCM_CGR2, 6);
+ clk[IMX35_CLK_SPBA_GATE] = imx_clk_gate2("spba_gate", "ipg",
+ base + MX35_CCM_CGR2, 8);
+ clk[IMX35_CLK_SPDIF_GATE] = imx_clk_gate2("spdif_gate",
+ "spdif_div_post", base + MX35_CCM_CGR2, 10);
+ clk[IMX35_CLK_SSI1_GATE] = imx_clk_gate2("ssi1_gate", "ssi1_div_post",
+ base + MX35_CCM_CGR2, 12);
+ clk[IMX35_CLK_SSI2_GATE] = imx_clk_gate2("ssi2_gate", "ssi2_div_post",
+ base + MX35_CCM_CGR2, 14);
+ clk[IMX35_CLK_UART1_GATE] = imx_clk_gate2("uart1_gate", "uart_div",
+ base + MX35_CCM_CGR2, 16);
+ clk[IMX35_CLK_UART2_GATE] = imx_clk_gate2("uart2_gate", "uart_div",
+ base + MX35_CCM_CGR2, 18);
+ clk[IMX35_CLK_UART3_GATE] = imx_clk_gate2("uart3_gate", "uart_div",
+ base + MX35_CCM_CGR2, 20);
+ clk[IMX35_CLK_USBOTG_GATE] = imx_clk_gate2("usbotg_gate", "ahb",
+ base + MX35_CCM_CGR2, 22);
+ clk[IMX35_CLK_WDOG_GATE] = imx_clk_gate2("wdog_gate", "ipg",
+ base + MX35_CCM_CGR2, 24);
+ clk[IMX35_CLK_MAX_GATE] = imx_clk_gate2("max_gate", "dummy",
+ base + MX35_CCM_CGR2, 26);
+ clk[IMX35_CLK_ADMUX_GATE] = imx_clk_gate2("admux_gate", "ipg",
+ base + MX35_CCM_CGR2, 30);
+
+ clk[IMX35_CLK_CSI_GATE] = imx_clk_gate2("csi_gate", "csi_div",
+ base + MX35_CCM_CGR3, 0);
+ clk[IMX35_CLK_IIM_GATE] = imx_clk_gate2("iim_gate", "ipg",
+ base + MX35_CCM_CGR3, 2);
+ clk[IMX35_CLK_GPU2D_GATE] = imx_clk_gate2("gpu2d_gate", "ahb",
+ base + MX35_CCM_CGR3, 4);
imx_check_clocks(clk, ARRAY_SIZE(clk));
- clk_prepare_enable(clk[spba_gate]);
- clk_prepare_enable(clk[gpio1_gate]);
- clk_prepare_enable(clk[gpio2_gate]);
- clk_prepare_enable(clk[gpio3_gate]);
- clk_prepare_enable(clk[iim_gate]);
- clk_prepare_enable(clk[emi_gate]);
- clk_prepare_enable(clk[max_gate]);
- clk_prepare_enable(clk[iomuxc_gate]);
+ clk_prepare_enable(clk[IMX35_CLK_SPBA_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_GPIO1_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_GPIO2_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_GPIO3_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_IIM_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_EMI_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_MAX_GATE]);
+ clk_prepare_enable(clk[IMX35_CLK_IOMUXC_GATE]);
/*
* SCC is needed to boot via mmc after a watchdog reset. The clock code
@@ -243,7 +305,7 @@ static void __init _mx35_clocks_init(void)
* handled here and not needed for mmc) and IIM (which is enabled
* unconditionally above).
*/
- clk_prepare_enable(clk[scc_gate]);
+ clk_prepare_enable(clk[IMX35_CLK_SCC_GATE]);
imx_register_uart_clocks(uart_clks);
@@ -254,64 +316,67 @@ int __init mx35_clocks_init(void)
{
_mx35_clocks_init();
- clk_register_clkdev(clk[pata_gate], NULL, "pata_imx");
- clk_register_clkdev(clk[can1_gate], NULL, "flexcan.0");
- clk_register_clkdev(clk[can2_gate], NULL, "flexcan.1");
- clk_register_clkdev(clk[cspi1_gate], "per", "imx35-cspi.0");
- clk_register_clkdev(clk[cspi1_gate], "ipg", "imx35-cspi.0");
- clk_register_clkdev(clk[cspi2_gate], "per", "imx35-cspi.1");
- clk_register_clkdev(clk[cspi2_gate], "ipg", "imx35-cspi.1");
- clk_register_clkdev(clk[epit1_gate], NULL, "imx-epit.0");
- clk_register_clkdev(clk[epit2_gate], NULL, "imx-epit.1");
- clk_register_clkdev(clk[esdhc1_gate], "per", "sdhci-esdhc-imx35.0");
- clk_register_clkdev(clk[ipg], "ipg", "sdhci-esdhc-imx35.0");
- clk_register_clkdev(clk[ahb], "ahb", "sdhci-esdhc-imx35.0");
- clk_register_clkdev(clk[esdhc2_gate], "per", "sdhci-esdhc-imx35.1");
- clk_register_clkdev(clk[ipg], "ipg", "sdhci-esdhc-imx35.1");
- clk_register_clkdev(clk[ahb], "ahb", "sdhci-esdhc-imx35.1");
- clk_register_clkdev(clk[esdhc3_gate], "per", "sdhci-esdhc-imx35.2");
- clk_register_clkdev(clk[ipg], "ipg", "sdhci-esdhc-imx35.2");
- clk_register_clkdev(clk[ahb], "ahb", "sdhci-esdhc-imx35.2");
+ clk_register_clkdev(clk[IMX35_CLK_PATA_GATE], NULL, "pata_imx");
+ clk_register_clkdev(clk[IMX35_CLK_CAN1_GATE], NULL, "flexcan.0");
+ clk_register_clkdev(clk[IMX35_CLK_CAN2_GATE], NULL, "flexcan.1");
+ clk_register_clkdev(clk[IMX35_CLK_CSPI1_GATE], "per", "imx35-cspi.0");
+ clk_register_clkdev(clk[IMX35_CLK_CSPI1_GATE], "ipg", "imx35-cspi.0");
+ clk_register_clkdev(clk[IMX35_CLK_CSPI2_GATE], "per", "imx35-cspi.1");
+ clk_register_clkdev(clk[IMX35_CLK_CSPI2_GATE], "ipg", "imx35-cspi.1");
+ clk_register_clkdev(clk[IMX35_CLK_EPIT1_GATE], NULL, "imx-epit.0");
+ clk_register_clkdev(clk[IMX35_CLK_EPIT2_GATE], NULL, "imx-epit.1");
+ clk_register_clkdev(clk[IMX35_CLK_ESDHC1_GATE], "per",
+ "sdhci-esdhc-imx35.0");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "sdhci-esdhc-imx35.0");
+ clk_register_clkdev(clk[IMX35_CLK_AHB], "ahb", "sdhci-esdhc-imx35.0");
+ clk_register_clkdev(clk[IMX35_CLK_ESDHC2_GATE], "per",
+ "sdhci-esdhc-imx35.1");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "sdhci-esdhc-imx35.1");
+ clk_register_clkdev(clk[IMX35_CLK_AHB], "ahb", "sdhci-esdhc-imx35.1");
+ clk_register_clkdev(clk[IMX35_CLK_ESDHC3_GATE], "per",
+ "sdhci-esdhc-imx35.2");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "sdhci-esdhc-imx35.2");
+ clk_register_clkdev(clk[IMX35_CLK_AHB], "ahb", "sdhci-esdhc-imx35.2");
/* i.mx35 has the i.mx27 type fec */
- clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0");
- clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0");
- clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0");
- clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0");
- clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1");
- clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2");
- clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core");
- clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb");
- clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad");
- clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1");
- clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma");
- clk_register_clkdev(clk[ssi1_gate], NULL, "imx-ssi.0");
- clk_register_clkdev(clk[ssi2_gate], NULL, "imx-ssi.1");
+ clk_register_clkdev(clk[IMX35_CLK_FEC_GATE], NULL, "imx27-fec.0");
+ clk_register_clkdev(clk[IMX35_CLK_GPT_GATE], "per", "imx-gpt.0");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx-gpt.0");
+ clk_register_clkdev(clk[IMX35_CLK_I2C1_GATE], NULL, "imx21-i2c.0");
+ clk_register_clkdev(clk[IMX35_CLK_I2C2_GATE], NULL, "imx21-i2c.1");
+ clk_register_clkdev(clk[IMX35_CLK_I2C3_GATE], NULL, "imx21-i2c.2");
+ clk_register_clkdev(clk[IMX35_CLK_IPU_GATE], NULL, "ipu-core");
+ clk_register_clkdev(clk[IMX35_CLK_IPU_GATE], NULL, "mx3_sdc_fb");
+ clk_register_clkdev(clk[IMX35_CLK_KPP_GATE], NULL, "imx-keypad");
+ clk_register_clkdev(clk[IMX35_CLK_OWIRE_GATE], NULL, "mxc_w1");
+ clk_register_clkdev(clk[IMX35_CLK_SDMA_GATE], NULL, "imx35-sdma");
+ clk_register_clkdev(clk[IMX35_CLK_SSI1_GATE], NULL, "imx-ssi.0");
+ clk_register_clkdev(clk[IMX35_CLK_SSI2_GATE], NULL, "imx-ssi.1");
/* i.mx35 has the i.mx21 type uart */
- clk_register_clkdev(clk[uart1_gate], "per", "imx21-uart.0");
- clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.0");
- clk_register_clkdev(clk[uart2_gate], "per", "imx21-uart.1");
- clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.1");
- clk_register_clkdev(clk[uart3_gate], "per", "imx21-uart.2");
- clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.2");
+ clk_register_clkdev(clk[IMX35_CLK_UART1_GATE], "per", "imx21-uart.0");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx21-uart.0");
+ clk_register_clkdev(clk[IMX35_CLK_UART2_GATE], "per", "imx21-uart.1");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx21-uart.1");
+ clk_register_clkdev(clk[IMX35_CLK_UART3_GATE], "per", "imx21-uart.2");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx21-uart.2");
/* i.mx35 has the i.mx21 type rtc */
- clk_register_clkdev(clk[ckil], "ref", "imx21-rtc");
- clk_register_clkdev(clk[rtc_gate], "ipg", "imx21-rtc");
- clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0");
- clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.0");
- clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.0");
- clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.1");
- clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.1");
- clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.1");
- clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2");
- clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2");
- clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.2");
- clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27");
- clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx27");
- clk_register_clkdev(clk[usbotg_gate], "ahb", "imx-udc-mx27");
- clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");
- clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0");
- clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0");
- clk_register_clkdev(clk[admux_gate], "audmux", NULL);
+ clk_register_clkdev(clk[IMX35_CLK_CKIL], "ref", "imx21-rtc");
+ clk_register_clkdev(clk[IMX35_CLK_RTC_GATE], "ipg", "imx21-rtc");
+ clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "mxc-ehci.0");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "mxc-ehci.0");
+ clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "mxc-ehci.0");
+ clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "mxc-ehci.1");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "mxc-ehci.1");
+ clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "mxc-ehci.1");
+ clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "mxc-ehci.2");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "mxc-ehci.2");
+ clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "mxc-ehci.2");
+ clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "imx-udc-mx27");
+ clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx-udc-mx27");
+ clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "imx-udc-mx27");
+ clk_register_clkdev(clk[IMX35_CLK_WDOG_GATE], NULL, "imx2-wdt.0");
+ clk_register_clkdev(clk[IMX35_CLK_NFC_DIV], NULL, "imx25-nand.0");
+ clk_register_clkdev(clk[IMX35_CLK_CSI_GATE], NULL, "mx3-camera.0");
+ clk_register_clkdev(clk[IMX35_CLK_ADMUX_GATE], "audmux", NULL);
mxc_timer_init(MX35_GPT1_BASE_ADDR, MX35_INT_GPT, GPT_TYPE_IMX31);
diff --git a/include/dt-bindings/clock/imx35-clock.h b/include/dt-bindings/clock/imx35-clock.h
new file mode 100644
index 0000000..6d748ae
--- /dev/null
+++ b/include/dt-bindings/clock/imx35-clock.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2016 Alexander Kurz <akurz@blala.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __DT_BINDINGS_CLOCK_IMX35_H
+#define __DT_BINDINGS_CLOCK_IMX35_H
+
+#define IMX35_CLK_CKIH 0
+#define IMX35_CLK_MPLL 1
+#define IMX35_CLK_PPLL 2
+#define IMX35_CLK_MPLL_075 3
+#define IMX35_CLK_ARM 4
+#define IMX35_CLK_HSP 5
+#define IMX35_CLK_HSP_DIV 6
+#define IMX35_CLK_HSP_SEL 7
+#define IMX35_CLK_AHB 8
+#define IMX35_CLK_IPG 9
+#define IMX35_CLK_ARM_PER_DIV 10
+#define IMX35_CLK_AHB_PER_DIV 11
+#define IMX35_CLK_IPG_PER 12
+#define IMX35_CLK_UART_SEL 13
+#define IMX35_CLK_UART_DIV 14
+#define IMX35_CLK_ESDHC_SEL 15
+#define IMX35_CLK_ESDHC1_DIV 16
+#define IMX35_CLK_ESDHC2_DIV 17
+#define IMX35_CLK_ESDHC3_DIV 18
+#define IMX35_CLK_SPDIF_SEL 19
+#define IMX35_CLK_SPDIF_DIV_PRE 20
+#define IMX35_CLK_SPDIF_DIV_POST 21
+#define IMX35_CLK_SSI_SEL 22
+#define IMX35_CLK_SSI1_DIV_PRE 23
+#define IMX35_CLK_SSI1_DIV_POST 24
+#define IMX35_CLK_SSI2_DIV_PRE 25
+#define IMX35_CLK_SSI2_DIV_POST 26
+#define IMX35_CLK_USB_SEL 27
+#define IMX35_CLK_USB_DIV 28
+#define IMX35_CLK_NFC_DIV 29
+#define IMX35_CLK_ASRC_GATE 30
+#define IMX35_CLK_PATA_GATE 31
+#define IMX35_CLK_AUDMUX_GATE 32
+#define IMX35_CLK_CAN1_GATE 33
+#define IMX35_CLK_CAN2_GATE 34
+#define IMX35_CLK_CSPI1_GATE 35
+#define IMX35_CLK_CSPI2_GATE 36
+#define IMX35_CLK_ECT_GATE 37
+#define IMX35_CLK_EDIO_GATE 38
+#define IMX35_CLK_EMI_GATE 39
+#define IMX35_CLK_EPIT1_GATE 40
+#define IMX35_CLK_EPIT2_GATE 41
+#define IMX35_CLK_ESAI_GATE 42
+#define IMX35_CLK_ESDHC1_GATE 43
+#define IMX35_CLK_ESDHC2_GATE 44
+#define IMX35_CLK_ESDHC3_GATE 45
+#define IMX35_CLK_FEC_GATE 46
+#define IMX35_CLK_GPIO1_GATE 47
+#define IMX35_CLK_GPIO2_GATE 48
+#define IMX35_CLK_GPIO3_GATE 49
+#define IMX35_CLK_GPT_GATE 50
+#define IMX35_CLK_I2C1_GATE 51
+#define IMX35_CLK_I2C2_GATE 52
+#define IMX35_CLK_I2C3_GATE 53
+#define IMX35_CLK_IOMUXC_GATE 54
+#define IMX35_CLK_IPU_GATE 55
+#define IMX35_CLK_KPP_GATE 56
+#define IMX35_CLK_MLB_GATE 57
+#define IMX35_CLK_MSHC_GATE 58
+#define IMX35_CLK_OWIRE_GATE 59
+#define IMX35_CLK_PWM_GATE 60
+#define IMX35_CLK_RNGC_GATE 61
+#define IMX35_CLK_RTC_GATE 62
+#define IMX35_CLK_RTIC_GATE 63
+#define IMX35_CLK_SCC_GATE 64
+#define IMX35_CLK_SDMA_GATE 65
+#define IMX35_CLK_SPBA_GATE 66
+#define IMX35_CLK_SPDIF_GATE 67
+#define IMX35_CLK_SSI1_GATE 68
+#define IMX35_CLK_SSI2_GATE 69
+#define IMX35_CLK_UART1_GATE 70
+#define IMX35_CLK_UART2_GATE 71
+#define IMX35_CLK_UART3_GATE 72
+#define IMX35_CLK_USBOTG_GATE 73
+#define IMX35_CLK_WDOG_GATE 74
+#define IMX35_CLK_MAX_GATE 75
+#define IMX35_CLK_ADMUX_GATE 76
+#define IMX35_CLK_CSI_GATE 77
+#define IMX35_CLK_CSI_DIV 78
+#define IMX35_CLK_CSI_SEL 79
+#define IMX35_CLK_IIM_GATE 80
+#define IMX35_CLK_GPU2D_GATE 81
+#define IMX35_CLK_CKIL 82
+#define IMX35_CLK_MAX 83
+
+#endif
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration
2016-04-14 21:30 [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Alexander Kurz
2016-04-14 21:30 ` [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider Alexander Kurz
@ 2016-04-18 4:39 ` Shawn Guo
2016-04-18 17:16 ` Rob Herring
2 siblings, 0 replies; 6+ messages in thread
From: Shawn Guo @ 2016-04-18 4:39 UTC (permalink / raw)
To: Alexander Kurz
Cc: linux-arm-kernel, devicetree, linux-clk, Sascha Hauer,
Michael Turquette, Stephen Boyd, Philippe Reynes
On Thu, Apr 14, 2016 at 11:30:49PM +0200, Alexander Kurz wrote:
> A new element got inserted into enum mx35_clks with commit 3713e3f5e927
> ("clk: imx35: define two clocks for rtc"). This insertion shifted most
> nummerical clock assignments to a new nummerical value which in turn
> rendered most hardcoded nummeric values in imx35.dtsi incorrect.
>
> Restore the existing order by moving the newly introduced clock to the
> end of the enum. Update the dts documentation accordingly.
>
> Signed-off-by: Alexander Kurz <akurz@blala.de>
Applied as a fix and Cc-ed stable, thanks.
Shawn
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider
2016-04-14 21:30 ` [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider Alexander Kurz
@ 2016-04-18 4:47 ` Shawn Guo
2016-04-18 17:19 ` Rob Herring
1 sibling, 0 replies; 6+ messages in thread
From: Shawn Guo @ 2016-04-18 4:47 UTC (permalink / raw)
To: Alexander Kurz
Cc: linux-arm-kernel, devicetree, linux-clk, Sascha Hauer,
Michael Turquette, Stephen Boyd, Philippe Reynes
On Thu, Apr 14, 2016 at 11:30:50PM +0200, Alexander Kurz wrote:
> Use clock defines in order to make devicetrees more human readable
>
> Signed-off-by: Alexander Kurz <akurz@blala.de>
Yes, this is the way we write new clock driver and dts files. But for
the ones that already use integer, I do not see too much point for such
conversion.
Shawn
> ---
> .../devicetree/bindings/clock/imx35-clock.txt | 93 +----
> drivers/clk/imx/clk-imx35.c | 429 ++++++++++++---------
> include/dt-bindings/clock/imx35-clock.h | 98 +++++
> 3 files changed, 349 insertions(+), 271 deletions(-)
> create mode 100644 include/dt-bindings/clock/imx35-clock.h
>
> diff --git a/Documentation/devicetree/bindings/clock/imx35-clock.txt b/Documentation/devicetree/bindings/clock/imx35-clock.txt
> index f497832..2e88d25 100644
> --- a/Documentation/devicetree/bindings/clock/imx35-clock.txt
> +++ b/Documentation/devicetree/bindings/clock/imx35-clock.txt
> @@ -7,94 +7,8 @@ Required properties:
> - #clock-cells: Should be <1>
>
> The clock consumer should specify the desired clock by having the clock
> -ID in its "clocks" phandle cell. The following is a full list of i.MX35
> -clocks and IDs.
> -
> - Clock ID
> - ---------------------------
> - ckih 0
> - mpll 1
> - ppll 2
> - mpll_075 3
> - arm 4
> - hsp 5
> - hsp_div 6
> - hsp_sel 7
> - ahb 8
> - ipg 9
> - arm_per_div 10
> - ahb_per_div 11
> - ipg_per 12
> - uart_sel 13
> - uart_div 14
> - esdhc_sel 15
> - esdhc1_div 16
> - esdhc2_div 17
> - esdhc3_div 18
> - spdif_sel 19
> - spdif_div_pre 20
> - spdif_div_post 21
> - ssi_sel 22
> - ssi1_div_pre 23
> - ssi1_div_post 24
> - ssi2_div_pre 25
> - ssi2_div_post 26
> - usb_sel 27
> - usb_div 28
> - nfc_div 29
> - asrc_gate 30
> - pata_gate 31
> - audmux_gate 32
> - can1_gate 33
> - can2_gate 34
> - cspi1_gate 35
> - cspi2_gate 36
> - ect_gate 37
> - edio_gate 38
> - emi_gate 39
> - epit1_gate 40
> - epit2_gate 41
> - esai_gate 42
> - esdhc1_gate 43
> - esdhc2_gate 44
> - esdhc3_gate 45
> - fec_gate 46
> - gpio1_gate 47
> - gpio2_gate 48
> - gpio3_gate 49
> - gpt_gate 50
> - i2c1_gate 51
> - i2c2_gate 52
> - i2c3_gate 53
> - iomuxc_gate 54
> - ipu_gate 55
> - kpp_gate 56
> - mlb_gate 57
> - mshc_gate 58
> - owire_gate 59
> - pwm_gate 60
> - rngc_gate 61
> - rtc_gate 62
> - rtic_gate 63
> - scc_gate 64
> - sdma_gate 65
> - spba_gate 66
> - spdif_gate 67
> - ssi1_gate 68
> - ssi2_gate 69
> - uart1_gate 70
> - uart2_gate 71
> - uart3_gate 72
> - usbotg_gate 73
> - wdog_gate 74
> - max_gate 75
> - admux_gate 76
> - csi_gate 77
> - csi_div 78
> - csi_sel 79
> - iim_gate 80
> - gpu2d_gate 81
> - ckli_gate 82
> +ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx35-clock.h
> +for the full list of i.MXi35 clock IDs.
>
> Examples:
>
> @@ -109,6 +23,7 @@ esdhc1: esdhc@53fb4000 {
> compatible = "fsl,imx35-esdhc";
> reg = <0x53fb4000 0x4000>;
> interrupts = <7>;
> - clocks = <&clks 9>, <&clks 8>, <&clks 43>;
> + clocks = <&clks IMX35_CLK_IPG>, <&clks IMX35_CLK_AHB>,
> + <&clks IMX35_CLK_ESDHC1_GATE>;
> clock-names = "ipg", "ahb", "per";
> };
> diff --git a/drivers/clk/imx/clk-imx35.c b/drivers/clk/imx/clk-imx35.c
> index b0978d3..656bab7 100644
> --- a/drivers/clk/imx/clk-imx35.c
> +++ b/drivers/clk/imx/clk-imx35.c
> @@ -13,6 +13,7 @@
> #include <linux/clkdev.h>
> #include <linux/of.h>
> #include <linux/err.h>
> +#include <dt-bindings/clock/imx35-clock.h>
> #include <soc/imx/revision.h>
> #include <soc/imx/timer.h>
> #include <asm/irq.h>
> @@ -65,30 +66,13 @@ static struct clk_onecell_data clk_data;
> static const char *std_sel[] = {"ppll", "arm"};
> static const char *ipg_per_sel[] = {"ahb_per_div", "arm_per_div"};
>
> -enum mx35_clks {
> - ckih, mpll, ppll, mpll_075, arm, hsp, hsp_div, hsp_sel, ahb, ipg,
> - arm_per_div, ahb_per_div, ipg_per, uart_sel, uart_div, esdhc_sel,
> - esdhc1_div, esdhc2_div, esdhc3_div, spdif_sel, spdif_div_pre,
> - spdif_div_post, ssi_sel, ssi1_div_pre, ssi1_div_post, ssi2_div_pre,
> - ssi2_div_post, usb_sel, usb_div, nfc_div, asrc_gate, pata_gate,
> - audmux_gate, can1_gate, can2_gate, cspi1_gate, cspi2_gate, ect_gate,
> - edio_gate, emi_gate, epit1_gate, epit2_gate, esai_gate, esdhc1_gate,
> - esdhc2_gate, esdhc3_gate, fec_gate, gpio1_gate, gpio2_gate, gpio3_gate,
> - gpt_gate, i2c1_gate, i2c2_gate, i2c3_gate, iomuxc_gate, ipu_gate,
> - kpp_gate, mlb_gate, mshc_gate, owire_gate, pwm_gate, rngc_gate,
> - rtc_gate, rtic_gate, scc_gate, sdma_gate, spba_gate, spdif_gate,
> - ssi1_gate, ssi2_gate, uart1_gate, uart2_gate, uart3_gate, usbotg_gate,
> - wdog_gate, max_gate, admux_gate, csi_gate, csi_div, csi_sel, iim_gate,
> - gpu2d_gate, ckil, clk_max
> -};
> -
> -static struct clk *clk[clk_max];
> +static struct clk *clk[IMX35_CLK_MAX];
>
> static struct clk ** const uart_clks[] __initconst = {
> - &clk[ipg],
> - &clk[uart1_gate],
> - &clk[uart2_gate],
> - &clk[uart3_gate],
> + &clk[IMX35_CLK_IPG],
> + &clk[IMX35_CLK_UART1_GATE],
> + &clk[IMX35_CLK_UART2_GATE],
> + &clk[IMX35_CLK_UART3_GATE],
> NULL
> };
>
> @@ -114,19 +98,23 @@ static void __init _mx35_clocks_init(void)
> aad = &clk_consumer[0];
> }
>
> - clk[ckih] = imx_clk_fixed("ckih", 24000000);
> - clk[ckil] = imx_clk_fixed("ckih", 32768);
> - clk[mpll] = imx_clk_pllv1(IMX_PLLV1_IMX35, "mpll", "ckih", base + MX35_CCM_MPCTL);
> - clk[ppll] = imx_clk_pllv1(IMX_PLLV1_IMX35, "ppll", "ckih", base + MX35_CCM_PPCTL);
> + clk[IMX35_CLK_CKIH] = imx_clk_fixed("ckih", 24000000);
> + clk[IMX35_CLK_CKIL] = imx_clk_fixed("ckih", 32768);
> + clk[IMX35_CLK_MPLL] = imx_clk_pllv1(IMX_PLLV1_IMX35, "mpll", "ckih",
> + base + MX35_CCM_MPCTL);
> + clk[IMX35_CLK_PPLL] = imx_clk_pllv1(IMX_PLLV1_IMX35, "ppll", "ckih",
> + base + MX35_CCM_PPCTL);
>
> - clk[mpll] = imx_clk_fixed_factor("mpll_075", "mpll", 3, 4);
> + clk[IMX35_CLK_MPLL] = imx_clk_fixed_factor("mpll_075", "mpll", 3, 4);
>
> if (aad->sel)
> - clk[arm] = imx_clk_fixed_factor("arm", "mpll_075", 1, aad->arm);
> + clk[IMX35_CLK_ARM] = imx_clk_fixed_factor("arm", "mpll_075",
> + 1, aad->arm);
> else
> - clk[arm] = imx_clk_fixed_factor("arm", "mpll", 1, aad->arm);
> + clk[IMX35_CLK_ARM] = imx_clk_fixed_factor("arm", "mpll",
> + 1, aad->arm);
>
> - if (clk_get_rate(clk[arm]) > 400000000)
> + if (clk_get_rate(clk[IMX35_CLK_ARM]) > 400000000)
> hsp_div = hsp_div_532;
> else
> hsp_div = hsp_div_400;
> @@ -137,105 +125,179 @@ static void __init _mx35_clocks_init(void)
> hsp_sel = 0;
> }
>
> - clk[hsp] = imx_clk_fixed_factor("hsp", "arm", 1, hsp_div[hsp_sel]);
> -
> - clk[ahb] = imx_clk_fixed_factor("ahb", "arm", 1, aad->ahb);
> - clk[ipg] = imx_clk_fixed_factor("ipg", "ahb", 1, 2);
> -
> - clk[arm_per_div] = imx_clk_divider("arm_per_div", "arm", base + MX35_CCM_PDR4, 16, 6);
> - clk[ahb_per_div] = imx_clk_divider("ahb_per_div", "ahb", base + MXC_CCM_PDR0, 12, 3);
> - clk[ipg_per] = imx_clk_mux("ipg_per", base + MXC_CCM_PDR0, 26, 1, ipg_per_sel, ARRAY_SIZE(ipg_per_sel));
> -
> - clk[uart_sel] = imx_clk_mux("uart_sel", base + MX35_CCM_PDR3, 14, 1, std_sel, ARRAY_SIZE(std_sel));
> - clk[uart_div] = imx_clk_divider("uart_div", "uart_sel", base + MX35_CCM_PDR4, 10, 6);
> -
> - clk[esdhc_sel] = imx_clk_mux("esdhc_sel", base + MX35_CCM_PDR4, 9, 1, std_sel, ARRAY_SIZE(std_sel));
> - clk[esdhc1_div] = imx_clk_divider("esdhc1_div", "esdhc_sel", base + MX35_CCM_PDR3, 0, 6);
> - clk[esdhc2_div] = imx_clk_divider("esdhc2_div", "esdhc_sel", base + MX35_CCM_PDR3, 8, 6);
> - clk[esdhc3_div] = imx_clk_divider("esdhc3_div", "esdhc_sel", base + MX35_CCM_PDR3, 16, 6);
> -
> - clk[spdif_sel] = imx_clk_mux("spdif_sel", base + MX35_CCM_PDR3, 22, 1, std_sel, ARRAY_SIZE(std_sel));
> - clk[spdif_div_pre] = imx_clk_divider("spdif_div_pre", "spdif_sel", base + MX35_CCM_PDR3, 29, 3); /* divide by 1 not allowed */
> - clk[spdif_div_post] = imx_clk_divider("spdif_div_post", "spdif_div_pre", base + MX35_CCM_PDR3, 23, 6);
> -
> - clk[ssi_sel] = imx_clk_mux("ssi_sel", base + MX35_CCM_PDR2, 6, 1, std_sel, ARRAY_SIZE(std_sel));
> - clk[ssi1_div_pre] = imx_clk_divider("ssi1_div_pre", "ssi_sel", base + MX35_CCM_PDR2, 24, 3);
> - clk[ssi1_div_post] = imx_clk_divider("ssi1_div_post", "ssi1_div_pre", base + MX35_CCM_PDR2, 0, 6);
> - clk[ssi2_div_pre] = imx_clk_divider("ssi2_div_pre", "ssi_sel", base + MX35_CCM_PDR2, 27, 3);
> - clk[ssi2_div_post] = imx_clk_divider("ssi2_div_post", "ssi2_div_pre", base + MX35_CCM_PDR2, 8, 6);
> -
> - clk[usb_sel] = imx_clk_mux("usb_sel", base + MX35_CCM_PDR4, 9, 1, std_sel, ARRAY_SIZE(std_sel));
> - clk[usb_div] = imx_clk_divider("usb_div", "usb_sel", base + MX35_CCM_PDR4, 22, 6);
> -
> - clk[nfc_div] = imx_clk_divider("nfc_div", "ahb", base + MX35_CCM_PDR4, 28, 4);
> -
> - clk[csi_sel] = imx_clk_mux("csi_sel", base + MX35_CCM_PDR2, 7, 1, std_sel, ARRAY_SIZE(std_sel));
> - clk[csi_div] = imx_clk_divider("csi_div", "csi_sel", base + MX35_CCM_PDR2, 16, 6);
> -
> - clk[asrc_gate] = imx_clk_gate2("asrc_gate", "ipg", base + MX35_CCM_CGR0, 0);
> - clk[pata_gate] = imx_clk_gate2("pata_gate", "ipg", base + MX35_CCM_CGR0, 2);
> - clk[audmux_gate] = imx_clk_gate2("audmux_gate", "ipg", base + MX35_CCM_CGR0, 4);
> - clk[can1_gate] = imx_clk_gate2("can1_gate", "ipg", base + MX35_CCM_CGR0, 6);
> - clk[can2_gate] = imx_clk_gate2("can2_gate", "ipg", base + MX35_CCM_CGR0, 8);
> - clk[cspi1_gate] = imx_clk_gate2("cspi1_gate", "ipg", base + MX35_CCM_CGR0, 10);
> - clk[cspi2_gate] = imx_clk_gate2("cspi2_gate", "ipg", base + MX35_CCM_CGR0, 12);
> - clk[ect_gate] = imx_clk_gate2("ect_gate", "ipg", base + MX35_CCM_CGR0, 14);
> - clk[edio_gate] = imx_clk_gate2("edio_gate", "ipg", base + MX35_CCM_CGR0, 16);
> - clk[emi_gate] = imx_clk_gate2("emi_gate", "ipg", base + MX35_CCM_CGR0, 18);
> - clk[epit1_gate] = imx_clk_gate2("epit1_gate", "ipg", base + MX35_CCM_CGR0, 20);
> - clk[epit2_gate] = imx_clk_gate2("epit2_gate", "ipg", base + MX35_CCM_CGR0, 22);
> - clk[esai_gate] = imx_clk_gate2("esai_gate", "ipg", base + MX35_CCM_CGR0, 24);
> - clk[esdhc1_gate] = imx_clk_gate2("esdhc1_gate", "esdhc1_div", base + MX35_CCM_CGR0, 26);
> - clk[esdhc2_gate] = imx_clk_gate2("esdhc2_gate", "esdhc2_div", base + MX35_CCM_CGR0, 28);
> - clk[esdhc3_gate] = imx_clk_gate2("esdhc3_gate", "esdhc3_div", base + MX35_CCM_CGR0, 30);
> -
> - clk[fec_gate] = imx_clk_gate2("fec_gate", "ipg", base + MX35_CCM_CGR1, 0);
> - clk[gpio1_gate] = imx_clk_gate2("gpio1_gate", "ipg", base + MX35_CCM_CGR1, 2);
> - clk[gpio2_gate] = imx_clk_gate2("gpio2_gate", "ipg", base + MX35_CCM_CGR1, 4);
> - clk[gpio3_gate] = imx_clk_gate2("gpio3_gate", "ipg", base + MX35_CCM_CGR1, 6);
> - clk[gpt_gate] = imx_clk_gate2("gpt_gate", "ipg", base + MX35_CCM_CGR1, 8);
> - clk[i2c1_gate] = imx_clk_gate2("i2c1_gate", "ipg_per", base + MX35_CCM_CGR1, 10);
> - clk[i2c2_gate] = imx_clk_gate2("i2c2_gate", "ipg_per", base + MX35_CCM_CGR1, 12);
> - clk[i2c3_gate] = imx_clk_gate2("i2c3_gate", "ipg_per", base + MX35_CCM_CGR1, 14);
> - clk[iomuxc_gate] = imx_clk_gate2("iomuxc_gate", "ipg", base + MX35_CCM_CGR1, 16);
> - clk[ipu_gate] = imx_clk_gate2("ipu_gate", "hsp", base + MX35_CCM_CGR1, 18);
> - clk[kpp_gate] = imx_clk_gate2("kpp_gate", "ipg", base + MX35_CCM_CGR1, 20);
> - clk[mlb_gate] = imx_clk_gate2("mlb_gate", "ahb", base + MX35_CCM_CGR1, 22);
> - clk[mshc_gate] = imx_clk_gate2("mshc_gate", "dummy", base + MX35_CCM_CGR1, 24);
> - clk[owire_gate] = imx_clk_gate2("owire_gate", "ipg_per", base + MX35_CCM_CGR1, 26);
> - clk[pwm_gate] = imx_clk_gate2("pwm_gate", "ipg_per", base + MX35_CCM_CGR1, 28);
> - clk[rngc_gate] = imx_clk_gate2("rngc_gate", "ipg", base + MX35_CCM_CGR1, 30);
> -
> - clk[rtc_gate] = imx_clk_gate2("rtc_gate", "ipg", base + MX35_CCM_CGR2, 0);
> - clk[rtic_gate] = imx_clk_gate2("rtic_gate", "ahb", base + MX35_CCM_CGR2, 2);
> - clk[scc_gate] = imx_clk_gate2("scc_gate", "ipg", base + MX35_CCM_CGR2, 4);
> - clk[sdma_gate] = imx_clk_gate2("sdma_gate", "ahb", base + MX35_CCM_CGR2, 6);
> - clk[spba_gate] = imx_clk_gate2("spba_gate", "ipg", base + MX35_CCM_CGR2, 8);
> - clk[spdif_gate] = imx_clk_gate2("spdif_gate", "spdif_div_post", base + MX35_CCM_CGR2, 10);
> - clk[ssi1_gate] = imx_clk_gate2("ssi1_gate", "ssi1_div_post", base + MX35_CCM_CGR2, 12);
> - clk[ssi2_gate] = imx_clk_gate2("ssi2_gate", "ssi2_div_post", base + MX35_CCM_CGR2, 14);
> - clk[uart1_gate] = imx_clk_gate2("uart1_gate", "uart_div", base + MX35_CCM_CGR2, 16);
> - clk[uart2_gate] = imx_clk_gate2("uart2_gate", "uart_div", base + MX35_CCM_CGR2, 18);
> - clk[uart3_gate] = imx_clk_gate2("uart3_gate", "uart_div", base + MX35_CCM_CGR2, 20);
> - clk[usbotg_gate] = imx_clk_gate2("usbotg_gate", "ahb", base + MX35_CCM_CGR2, 22);
> - clk[wdog_gate] = imx_clk_gate2("wdog_gate", "ipg", base + MX35_CCM_CGR2, 24);
> - clk[max_gate] = imx_clk_gate2("max_gate", "dummy", base + MX35_CCM_CGR2, 26);
> - clk[admux_gate] = imx_clk_gate2("admux_gate", "ipg", base + MX35_CCM_CGR2, 30);
> -
> - clk[csi_gate] = imx_clk_gate2("csi_gate", "csi_div", base + MX35_CCM_CGR3, 0);
> - clk[iim_gate] = imx_clk_gate2("iim_gate", "ipg", base + MX35_CCM_CGR3, 2);
> - clk[gpu2d_gate] = imx_clk_gate2("gpu2d_gate", "ahb", base + MX35_CCM_CGR3, 4);
> + clk[IMX35_CLK_HSP] = imx_clk_fixed_factor("hsp", "arm",
> + 1, hsp_div[hsp_sel]);
> +
> + clk[IMX35_CLK_AHB] = imx_clk_fixed_factor("ahb", "arm", 1, aad->ahb);
> + clk[IMX35_CLK_IPG] = imx_clk_fixed_factor("ipg", "ahb", 1, 2);
> +
> + clk[IMX35_CLK_ARM_PER_DIV] = imx_clk_divider("arm_per_div", "arm",
> + base + MX35_CCM_PDR4, 16, 6);
> + clk[IMX35_CLK_AHB_PER_DIV] = imx_clk_divider("ahb_per_div", "ahb",
> + base + MXC_CCM_PDR0, 12, 3);
> + clk[IMX35_CLK_IPG_PER] = imx_clk_mux("ipg_per", base + MXC_CCM_PDR0,
> + 26, 1, ipg_per_sel, ARRAY_SIZE(ipg_per_sel));
> +
> + clk[IMX35_CLK_UART_SEL] = imx_clk_mux("uart_sel", base + MX35_CCM_PDR3,
> + 14, 1, std_sel, ARRAY_SIZE(std_sel));
> + clk[IMX35_CLK_UART_DIV] = imx_clk_divider("uart_div", "uart_sel",
> + base + MX35_CCM_PDR4, 10, 6);
> +
> + clk[IMX35_CLK_ESDHC_SEL] = imx_clk_mux("esdhc_sel",
> + base + MX35_CCM_PDR4, 9, 1, std_sel, ARRAY_SIZE(std_sel));
> + clk[IMX35_CLK_ESDHC1_DIV] = imx_clk_divider("esdhc1_div", "esdhc_sel",
> + base + MX35_CCM_PDR3, 0, 6);
> + clk[IMX35_CLK_ESDHC2_DIV] = imx_clk_divider("esdhc2_div", "esdhc_sel",
> + base + MX35_CCM_PDR3, 8, 6);
> + clk[IMX35_CLK_ESDHC3_DIV] = imx_clk_divider("esdhc3_div", "esdhc_sel",
> + base + MX35_CCM_PDR3, 16, 6);
> +
> + clk[IMX35_CLK_SPDIF_SEL] = imx_clk_mux("spdif_sel",
> + base + MX35_CCM_PDR3, 22, 1, std_sel, ARRAY_SIZE(std_sel));
> + clk[IMX35_CLK_SPDIF_DIV_PRE] = imx_clk_divider("spdif_div_pre",
> + "spdif_sel", base + MX35_CCM_PDR3, 29, 3);
> + /* divide by 1 not allowed */
> + clk[IMX35_CLK_SPDIF_DIV_POST] = imx_clk_divider("spdif_div_post",
> + "spdif_div_pre", base + MX35_CCM_PDR3, 23, 6);
> +
> + clk[IMX35_CLK_SSI_SEL] = imx_clk_mux("ssi_sel", base + MX35_CCM_PDR2,
> + 6, 1, std_sel, ARRAY_SIZE(std_sel));
> + clk[IMX35_CLK_SSI1_DIV_PRE] = imx_clk_divider("ssi1_div_pre",
> + "ssi_sel", base + MX35_CCM_PDR2, 24, 3);
> + clk[IMX35_CLK_SSI1_DIV_POST] = imx_clk_divider("ssi1_div_post",
> + "ssi1_div_pre", base + MX35_CCM_PDR2, 0, 6);
> + clk[IMX35_CLK_SSI2_DIV_PRE] = imx_clk_divider("ssi2_div_pre",
> + "ssi_sel", base + MX35_CCM_PDR2, 27, 3);
> + clk[IMX35_CLK_SSI2_DIV_POST] = imx_clk_divider("ssi2_div_post",
> + "ssi2_div_pre", base + MX35_CCM_PDR2, 8, 6);
> +
> + clk[IMX35_CLK_USB_SEL] = imx_clk_mux("usb_sel", base + MX35_CCM_PDR4,
> + 9, 1, std_sel, ARRAY_SIZE(std_sel));
> + clk[IMX35_CLK_USB_DIV] = imx_clk_divider("usb_div", "usb_sel",
> + base + MX35_CCM_PDR4, 22, 6);
> +
> + clk[IMX35_CLK_NFC_DIV] = imx_clk_divider("nfc_div", "ahb",
> + base + MX35_CCM_PDR4, 28, 4);
> +
> + clk[IMX35_CLK_CSI_SEL] = imx_clk_mux("csi_sel", base + MX35_CCM_PDR2,
> + 7, 1, std_sel, ARRAY_SIZE(std_sel));
> + clk[IMX35_CLK_CSI_DIV] = imx_clk_divider("csi_div", "csi_sel",
> + base + MX35_CCM_PDR2, 16, 6);
> +
> + clk[IMX35_CLK_ASRC_GATE] = imx_clk_gate2("asrc_gate", "ipg",
> + base + MX35_CCM_CGR0, 0);
> + clk[IMX35_CLK_PATA_GATE] = imx_clk_gate2("pata_gate", "ipg",
> + base + MX35_CCM_CGR0, 2);
> + clk[IMX35_CLK_AUDMUX_GATE] = imx_clk_gate2("audmux_gate", "ipg",
> + base + MX35_CCM_CGR0, 4);
> + clk[IMX35_CLK_CAN1_GATE] = imx_clk_gate2("can1_gate", "ipg",
> + base + MX35_CCM_CGR0, 6);
> + clk[IMX35_CLK_CAN2_GATE] = imx_clk_gate2("can2_gate", "ipg",
> + base + MX35_CCM_CGR0, 8);
> + clk[IMX35_CLK_CSPI1_GATE] = imx_clk_gate2("cspi1_gate", "ipg",
> + base + MX35_CCM_CGR0, 10);
> + clk[IMX35_CLK_CSPI2_GATE] = imx_clk_gate2("cspi2_gate", "ipg",
> + base + MX35_CCM_CGR0, 12);
> + clk[IMX35_CLK_ECT_GATE] = imx_clk_gate2("ect_gate", "ipg",
> + base + MX35_CCM_CGR0, 14);
> + clk[IMX35_CLK_EDIO_GATE] = imx_clk_gate2("edio_gate", "ipg",
> + base + MX35_CCM_CGR0, 16);
> + clk[IMX35_CLK_EMI_GATE] = imx_clk_gate2("emi_gate", "ipg",
> + base + MX35_CCM_CGR0, 18);
> + clk[IMX35_CLK_EPIT1_GATE] = imx_clk_gate2("epit1_gate", "ipg",
> + base + MX35_CCM_CGR0, 20);
> + clk[IMX35_CLK_EPIT2_GATE] = imx_clk_gate2("epit2_gate", "ipg",
> + base + MX35_CCM_CGR0, 22);
> + clk[IMX35_CLK_ESAI_GATE] = imx_clk_gate2("esai_gate", "ipg",
> + base + MX35_CCM_CGR0, 24);
> + clk[IMX35_CLK_ESDHC1_GATE] = imx_clk_gate2("esdhc1_gate", "esdhc1_div",
> + base + MX35_CCM_CGR0, 26);
> + clk[IMX35_CLK_ESDHC2_GATE] = imx_clk_gate2("esdhc2_gate", "esdhc2_div",
> + base + MX35_CCM_CGR0, 28);
> + clk[IMX35_CLK_ESDHC3_GATE] = imx_clk_gate2("esdhc3_gate", "esdhc3_div",
> + base + MX35_CCM_CGR0, 30);
> +
> + clk[IMX35_CLK_FEC_GATE] = imx_clk_gate2("fec_gate", "ipg",
> + base + MX35_CCM_CGR1, 0);
> + clk[IMX35_CLK_GPIO1_GATE] = imx_clk_gate2("gpio1_gate", "ipg",
> + base + MX35_CCM_CGR1, 2);
> + clk[IMX35_CLK_GPIO2_GATE] = imx_clk_gate2("gpio2_gate", "ipg",
> + base + MX35_CCM_CGR1, 4);
> + clk[IMX35_CLK_GPIO3_GATE] = imx_clk_gate2("gpio3_gate", "ipg",
> + base + MX35_CCM_CGR1, 6);
> + clk[IMX35_CLK_GPT_GATE] = imx_clk_gate2("gpt_gate", "ipg",
> + base + MX35_CCM_CGR1, 8);
> + clk[IMX35_CLK_I2C1_GATE] = imx_clk_gate2("i2c1_gate", "ipg_per",
> + base + MX35_CCM_CGR1, 10);
> + clk[IMX35_CLK_I2C2_GATE] = imx_clk_gate2("i2c2_gate", "ipg_per",
> + base + MX35_CCM_CGR1, 12);
> + clk[IMX35_CLK_I2C3_GATE] = imx_clk_gate2("i2c3_gate", "ipg_per",
> + base + MX35_CCM_CGR1, 14);
> + clk[IMX35_CLK_IOMUXC_GATE] = imx_clk_gate2("iomuxc_gate", "ipg",
> + base + MX35_CCM_CGR1, 16);
> + clk[IMX35_CLK_IPU_GATE] = imx_clk_gate2("ipu_gate", "hsp",
> + base + MX35_CCM_CGR1, 18);
> + clk[IMX35_CLK_KPP_GATE] = imx_clk_gate2("kpp_gate", "ipg",
> + base + MX35_CCM_CGR1, 20);
> + clk[IMX35_CLK_MLB_GATE] = imx_clk_gate2("mlb_gate", "ahb",
> + base + MX35_CCM_CGR1, 22);
> + clk[IMX35_CLK_MSHC_GATE] = imx_clk_gate2("mshc_gate", "dummy",
> + base + MX35_CCM_CGR1, 24);
> + clk[IMX35_CLK_OWIRE_GATE] = imx_clk_gate2("owire_gate", "ipg_per",
> + base + MX35_CCM_CGR1, 26);
> + clk[IMX35_CLK_PWM_GATE] = imx_clk_gate2("pwm_gate", "ipg_per",
> + base + MX35_CCM_CGR1, 28);
> + clk[IMX35_CLK_RNGC_GATE] = imx_clk_gate2("rngc_gate", "ipg",
> + base + MX35_CCM_CGR1, 30);
> +
> + clk[IMX35_CLK_RTC_GATE] = imx_clk_gate2("rtc_gate", "ipg",
> + base + MX35_CCM_CGR2, 0);
> + clk[IMX35_CLK_RTIC_GATE] = imx_clk_gate2("rtic_gate", "ahb",
> + base + MX35_CCM_CGR2, 2);
> + clk[IMX35_CLK_SCC_GATE] = imx_clk_gate2("scc_gate", "ipg",
> + base + MX35_CCM_CGR2, 4);
> + clk[IMX35_CLK_SDMA_GATE] = imx_clk_gate2("sdma_gate", "ahb",
> + base + MX35_CCM_CGR2, 6);
> + clk[IMX35_CLK_SPBA_GATE] = imx_clk_gate2("spba_gate", "ipg",
> + base + MX35_CCM_CGR2, 8);
> + clk[IMX35_CLK_SPDIF_GATE] = imx_clk_gate2("spdif_gate",
> + "spdif_div_post", base + MX35_CCM_CGR2, 10);
> + clk[IMX35_CLK_SSI1_GATE] = imx_clk_gate2("ssi1_gate", "ssi1_div_post",
> + base + MX35_CCM_CGR2, 12);
> + clk[IMX35_CLK_SSI2_GATE] = imx_clk_gate2("ssi2_gate", "ssi2_div_post",
> + base + MX35_CCM_CGR2, 14);
> + clk[IMX35_CLK_UART1_GATE] = imx_clk_gate2("uart1_gate", "uart_div",
> + base + MX35_CCM_CGR2, 16);
> + clk[IMX35_CLK_UART2_GATE] = imx_clk_gate2("uart2_gate", "uart_div",
> + base + MX35_CCM_CGR2, 18);
> + clk[IMX35_CLK_UART3_GATE] = imx_clk_gate2("uart3_gate", "uart_div",
> + base + MX35_CCM_CGR2, 20);
> + clk[IMX35_CLK_USBOTG_GATE] = imx_clk_gate2("usbotg_gate", "ahb",
> + base + MX35_CCM_CGR2, 22);
> + clk[IMX35_CLK_WDOG_GATE] = imx_clk_gate2("wdog_gate", "ipg",
> + base + MX35_CCM_CGR2, 24);
> + clk[IMX35_CLK_MAX_GATE] = imx_clk_gate2("max_gate", "dummy",
> + base + MX35_CCM_CGR2, 26);
> + clk[IMX35_CLK_ADMUX_GATE] = imx_clk_gate2("admux_gate", "ipg",
> + base + MX35_CCM_CGR2, 30);
> +
> + clk[IMX35_CLK_CSI_GATE] = imx_clk_gate2("csi_gate", "csi_div",
> + base + MX35_CCM_CGR3, 0);
> + clk[IMX35_CLK_IIM_GATE] = imx_clk_gate2("iim_gate", "ipg",
> + base + MX35_CCM_CGR3, 2);
> + clk[IMX35_CLK_GPU2D_GATE] = imx_clk_gate2("gpu2d_gate", "ahb",
> + base + MX35_CCM_CGR3, 4);
>
> imx_check_clocks(clk, ARRAY_SIZE(clk));
>
> - clk_prepare_enable(clk[spba_gate]);
> - clk_prepare_enable(clk[gpio1_gate]);
> - clk_prepare_enable(clk[gpio2_gate]);
> - clk_prepare_enable(clk[gpio3_gate]);
> - clk_prepare_enable(clk[iim_gate]);
> - clk_prepare_enable(clk[emi_gate]);
> - clk_prepare_enable(clk[max_gate]);
> - clk_prepare_enable(clk[iomuxc_gate]);
> + clk_prepare_enable(clk[IMX35_CLK_SPBA_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_GPIO1_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_GPIO2_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_GPIO3_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_IIM_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_EMI_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_MAX_GATE]);
> + clk_prepare_enable(clk[IMX35_CLK_IOMUXC_GATE]);
>
> /*
> * SCC is needed to boot via mmc after a watchdog reset. The clock code
> @@ -243,7 +305,7 @@ static void __init _mx35_clocks_init(void)
> * handled here and not needed for mmc) and IIM (which is enabled
> * unconditionally above).
> */
> - clk_prepare_enable(clk[scc_gate]);
> + clk_prepare_enable(clk[IMX35_CLK_SCC_GATE]);
>
> imx_register_uart_clocks(uart_clks);
>
> @@ -254,64 +316,67 @@ int __init mx35_clocks_init(void)
> {
> _mx35_clocks_init();
>
> - clk_register_clkdev(clk[pata_gate], NULL, "pata_imx");
> - clk_register_clkdev(clk[can1_gate], NULL, "flexcan.0");
> - clk_register_clkdev(clk[can2_gate], NULL, "flexcan.1");
> - clk_register_clkdev(clk[cspi1_gate], "per", "imx35-cspi.0");
> - clk_register_clkdev(clk[cspi1_gate], "ipg", "imx35-cspi.0");
> - clk_register_clkdev(clk[cspi2_gate], "per", "imx35-cspi.1");
> - clk_register_clkdev(clk[cspi2_gate], "ipg", "imx35-cspi.1");
> - clk_register_clkdev(clk[epit1_gate], NULL, "imx-epit.0");
> - clk_register_clkdev(clk[epit2_gate], NULL, "imx-epit.1");
> - clk_register_clkdev(clk[esdhc1_gate], "per", "sdhci-esdhc-imx35.0");
> - clk_register_clkdev(clk[ipg], "ipg", "sdhci-esdhc-imx35.0");
> - clk_register_clkdev(clk[ahb], "ahb", "sdhci-esdhc-imx35.0");
> - clk_register_clkdev(clk[esdhc2_gate], "per", "sdhci-esdhc-imx35.1");
> - clk_register_clkdev(clk[ipg], "ipg", "sdhci-esdhc-imx35.1");
> - clk_register_clkdev(clk[ahb], "ahb", "sdhci-esdhc-imx35.1");
> - clk_register_clkdev(clk[esdhc3_gate], "per", "sdhci-esdhc-imx35.2");
> - clk_register_clkdev(clk[ipg], "ipg", "sdhci-esdhc-imx35.2");
> - clk_register_clkdev(clk[ahb], "ahb", "sdhci-esdhc-imx35.2");
> + clk_register_clkdev(clk[IMX35_CLK_PATA_GATE], NULL, "pata_imx");
> + clk_register_clkdev(clk[IMX35_CLK_CAN1_GATE], NULL, "flexcan.0");
> + clk_register_clkdev(clk[IMX35_CLK_CAN2_GATE], NULL, "flexcan.1");
> + clk_register_clkdev(clk[IMX35_CLK_CSPI1_GATE], "per", "imx35-cspi.0");
> + clk_register_clkdev(clk[IMX35_CLK_CSPI1_GATE], "ipg", "imx35-cspi.0");
> + clk_register_clkdev(clk[IMX35_CLK_CSPI2_GATE], "per", "imx35-cspi.1");
> + clk_register_clkdev(clk[IMX35_CLK_CSPI2_GATE], "ipg", "imx35-cspi.1");
> + clk_register_clkdev(clk[IMX35_CLK_EPIT1_GATE], NULL, "imx-epit.0");
> + clk_register_clkdev(clk[IMX35_CLK_EPIT2_GATE], NULL, "imx-epit.1");
> + clk_register_clkdev(clk[IMX35_CLK_ESDHC1_GATE], "per",
> + "sdhci-esdhc-imx35.0");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "sdhci-esdhc-imx35.0");
> + clk_register_clkdev(clk[IMX35_CLK_AHB], "ahb", "sdhci-esdhc-imx35.0");
> + clk_register_clkdev(clk[IMX35_CLK_ESDHC2_GATE], "per",
> + "sdhci-esdhc-imx35.1");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "sdhci-esdhc-imx35.1");
> + clk_register_clkdev(clk[IMX35_CLK_AHB], "ahb", "sdhci-esdhc-imx35.1");
> + clk_register_clkdev(clk[IMX35_CLK_ESDHC3_GATE], "per",
> + "sdhci-esdhc-imx35.2");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "sdhci-esdhc-imx35.2");
> + clk_register_clkdev(clk[IMX35_CLK_AHB], "ahb", "sdhci-esdhc-imx35.2");
> /* i.mx35 has the i.mx27 type fec */
> - clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0");
> - clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0");
> - clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0");
> - clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0");
> - clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1");
> - clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2");
> - clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core");
> - clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb");
> - clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad");
> - clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1");
> - clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma");
> - clk_register_clkdev(clk[ssi1_gate], NULL, "imx-ssi.0");
> - clk_register_clkdev(clk[ssi2_gate], NULL, "imx-ssi.1");
> + clk_register_clkdev(clk[IMX35_CLK_FEC_GATE], NULL, "imx27-fec.0");
> + clk_register_clkdev(clk[IMX35_CLK_GPT_GATE], "per", "imx-gpt.0");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx-gpt.0");
> + clk_register_clkdev(clk[IMX35_CLK_I2C1_GATE], NULL, "imx21-i2c.0");
> + clk_register_clkdev(clk[IMX35_CLK_I2C2_GATE], NULL, "imx21-i2c.1");
> + clk_register_clkdev(clk[IMX35_CLK_I2C3_GATE], NULL, "imx21-i2c.2");
> + clk_register_clkdev(clk[IMX35_CLK_IPU_GATE], NULL, "ipu-core");
> + clk_register_clkdev(clk[IMX35_CLK_IPU_GATE], NULL, "mx3_sdc_fb");
> + clk_register_clkdev(clk[IMX35_CLK_KPP_GATE], NULL, "imx-keypad");
> + clk_register_clkdev(clk[IMX35_CLK_OWIRE_GATE], NULL, "mxc_w1");
> + clk_register_clkdev(clk[IMX35_CLK_SDMA_GATE], NULL, "imx35-sdma");
> + clk_register_clkdev(clk[IMX35_CLK_SSI1_GATE], NULL, "imx-ssi.0");
> + clk_register_clkdev(clk[IMX35_CLK_SSI2_GATE], NULL, "imx-ssi.1");
> /* i.mx35 has the i.mx21 type uart */
> - clk_register_clkdev(clk[uart1_gate], "per", "imx21-uart.0");
> - clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.0");
> - clk_register_clkdev(clk[uart2_gate], "per", "imx21-uart.1");
> - clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.1");
> - clk_register_clkdev(clk[uart3_gate], "per", "imx21-uart.2");
> - clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.2");
> + clk_register_clkdev(clk[IMX35_CLK_UART1_GATE], "per", "imx21-uart.0");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx21-uart.0");
> + clk_register_clkdev(clk[IMX35_CLK_UART2_GATE], "per", "imx21-uart.1");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx21-uart.1");
> + clk_register_clkdev(clk[IMX35_CLK_UART3_GATE], "per", "imx21-uart.2");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx21-uart.2");
> /* i.mx35 has the i.mx21 type rtc */
> - clk_register_clkdev(clk[ckil], "ref", "imx21-rtc");
> - clk_register_clkdev(clk[rtc_gate], "ipg", "imx21-rtc");
> - clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0");
> - clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.0");
> - clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.0");
> - clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.1");
> - clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.1");
> - clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.1");
> - clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2");
> - clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2");
> - clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.2");
> - clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27");
> - clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx27");
> - clk_register_clkdev(clk[usbotg_gate], "ahb", "imx-udc-mx27");
> - clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");
> - clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0");
> - clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0");
> - clk_register_clkdev(clk[admux_gate], "audmux", NULL);
> + clk_register_clkdev(clk[IMX35_CLK_CKIL], "ref", "imx21-rtc");
> + clk_register_clkdev(clk[IMX35_CLK_RTC_GATE], "ipg", "imx21-rtc");
> + clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "mxc-ehci.0");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "mxc-ehci.0");
> + clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "mxc-ehci.0");
> + clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "mxc-ehci.1");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "mxc-ehci.1");
> + clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "mxc-ehci.1");
> + clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "mxc-ehci.2");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "mxc-ehci.2");
> + clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "mxc-ehci.2");
> + clk_register_clkdev(clk[IMX35_CLK_USB_DIV], "per", "imx-udc-mx27");
> + clk_register_clkdev(clk[IMX35_CLK_IPG], "ipg", "imx-udc-mx27");
> + clk_register_clkdev(clk[IMX35_CLK_USBOTG_GATE], "ahb", "imx-udc-mx27");
> + clk_register_clkdev(clk[IMX35_CLK_WDOG_GATE], NULL, "imx2-wdt.0");
> + clk_register_clkdev(clk[IMX35_CLK_NFC_DIV], NULL, "imx25-nand.0");
> + clk_register_clkdev(clk[IMX35_CLK_CSI_GATE], NULL, "mx3-camera.0");
> + clk_register_clkdev(clk[IMX35_CLK_ADMUX_GATE], "audmux", NULL);
>
> mxc_timer_init(MX35_GPT1_BASE_ADDR, MX35_INT_GPT, GPT_TYPE_IMX31);
>
> diff --git a/include/dt-bindings/clock/imx35-clock.h b/include/dt-bindings/clock/imx35-clock.h
> new file mode 100644
> index 0000000..6d748ae
> --- /dev/null
> +++ b/include/dt-bindings/clock/imx35-clock.h
> @@ -0,0 +1,98 @@
> +/*
> + * Copyright (C) 2016 Alexander Kurz <akurz@blala.de>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +
> +#ifndef __DT_BINDINGS_CLOCK_IMX35_H
> +#define __DT_BINDINGS_CLOCK_IMX35_H
> +
> +#define IMX35_CLK_CKIH 0
> +#define IMX35_CLK_MPLL 1
> +#define IMX35_CLK_PPLL 2
> +#define IMX35_CLK_MPLL_075 3
> +#define IMX35_CLK_ARM 4
> +#define IMX35_CLK_HSP 5
> +#define IMX35_CLK_HSP_DIV 6
> +#define IMX35_CLK_HSP_SEL 7
> +#define IMX35_CLK_AHB 8
> +#define IMX35_CLK_IPG 9
> +#define IMX35_CLK_ARM_PER_DIV 10
> +#define IMX35_CLK_AHB_PER_DIV 11
> +#define IMX35_CLK_IPG_PER 12
> +#define IMX35_CLK_UART_SEL 13
> +#define IMX35_CLK_UART_DIV 14
> +#define IMX35_CLK_ESDHC_SEL 15
> +#define IMX35_CLK_ESDHC1_DIV 16
> +#define IMX35_CLK_ESDHC2_DIV 17
> +#define IMX35_CLK_ESDHC3_DIV 18
> +#define IMX35_CLK_SPDIF_SEL 19
> +#define IMX35_CLK_SPDIF_DIV_PRE 20
> +#define IMX35_CLK_SPDIF_DIV_POST 21
> +#define IMX35_CLK_SSI_SEL 22
> +#define IMX35_CLK_SSI1_DIV_PRE 23
> +#define IMX35_CLK_SSI1_DIV_POST 24
> +#define IMX35_CLK_SSI2_DIV_PRE 25
> +#define IMX35_CLK_SSI2_DIV_POST 26
> +#define IMX35_CLK_USB_SEL 27
> +#define IMX35_CLK_USB_DIV 28
> +#define IMX35_CLK_NFC_DIV 29
> +#define IMX35_CLK_ASRC_GATE 30
> +#define IMX35_CLK_PATA_GATE 31
> +#define IMX35_CLK_AUDMUX_GATE 32
> +#define IMX35_CLK_CAN1_GATE 33
> +#define IMX35_CLK_CAN2_GATE 34
> +#define IMX35_CLK_CSPI1_GATE 35
> +#define IMX35_CLK_CSPI2_GATE 36
> +#define IMX35_CLK_ECT_GATE 37
> +#define IMX35_CLK_EDIO_GATE 38
> +#define IMX35_CLK_EMI_GATE 39
> +#define IMX35_CLK_EPIT1_GATE 40
> +#define IMX35_CLK_EPIT2_GATE 41
> +#define IMX35_CLK_ESAI_GATE 42
> +#define IMX35_CLK_ESDHC1_GATE 43
> +#define IMX35_CLK_ESDHC2_GATE 44
> +#define IMX35_CLK_ESDHC3_GATE 45
> +#define IMX35_CLK_FEC_GATE 46
> +#define IMX35_CLK_GPIO1_GATE 47
> +#define IMX35_CLK_GPIO2_GATE 48
> +#define IMX35_CLK_GPIO3_GATE 49
> +#define IMX35_CLK_GPT_GATE 50
> +#define IMX35_CLK_I2C1_GATE 51
> +#define IMX35_CLK_I2C2_GATE 52
> +#define IMX35_CLK_I2C3_GATE 53
> +#define IMX35_CLK_IOMUXC_GATE 54
> +#define IMX35_CLK_IPU_GATE 55
> +#define IMX35_CLK_KPP_GATE 56
> +#define IMX35_CLK_MLB_GATE 57
> +#define IMX35_CLK_MSHC_GATE 58
> +#define IMX35_CLK_OWIRE_GATE 59
> +#define IMX35_CLK_PWM_GATE 60
> +#define IMX35_CLK_RNGC_GATE 61
> +#define IMX35_CLK_RTC_GATE 62
> +#define IMX35_CLK_RTIC_GATE 63
> +#define IMX35_CLK_SCC_GATE 64
> +#define IMX35_CLK_SDMA_GATE 65
> +#define IMX35_CLK_SPBA_GATE 66
> +#define IMX35_CLK_SPDIF_GATE 67
> +#define IMX35_CLK_SSI1_GATE 68
> +#define IMX35_CLK_SSI2_GATE 69
> +#define IMX35_CLK_UART1_GATE 70
> +#define IMX35_CLK_UART2_GATE 71
> +#define IMX35_CLK_UART3_GATE 72
> +#define IMX35_CLK_USBOTG_GATE 73
> +#define IMX35_CLK_WDOG_GATE 74
> +#define IMX35_CLK_MAX_GATE 75
> +#define IMX35_CLK_ADMUX_GATE 76
> +#define IMX35_CLK_CSI_GATE 77
> +#define IMX35_CLK_CSI_DIV 78
> +#define IMX35_CLK_CSI_SEL 79
> +#define IMX35_CLK_IIM_GATE 80
> +#define IMX35_CLK_GPU2D_GATE 81
> +#define IMX35_CLK_CKIL 82
> +#define IMX35_CLK_MAX 83
> +
> +#endif
> --
> 2.1.4
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration
2016-04-14 21:30 [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Alexander Kurz
2016-04-14 21:30 ` [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider Alexander Kurz
2016-04-18 4:39 ` [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Shawn Guo
@ 2016-04-18 17:16 ` Rob Herring
2 siblings, 0 replies; 6+ messages in thread
From: Rob Herring @ 2016-04-18 17:16 UTC (permalink / raw)
To: Alexander Kurz
Cc: linux-arm-kernel, devicetree, Michael Turquette, Stephen Boyd,
Sascha Hauer, Shawn Guo, linux-clk, Philippe Reynes
On Thu, Apr 14, 2016 at 11:30:49PM +0200, Alexander Kurz wrote:
> A new element got inserted into enum mx35_clks with commit 3713e3f5e927
> ("clk: imx35: define two clocks for rtc"). This insertion shifted most
> nummerical clock assignments to a new nummerical value which in turn
> rendered most hardcoded nummeric values in imx35.dtsi incorrect.
>
> Restore the existing order by moving the newly introduced clock to the
> end of the enum. Update the dts documentation accordingly.
>
> Signed-off-by: Alexander Kurz <akurz@blala.de>
> ---
> Documentation/devicetree/bindings/clock/imx35-clock.txt | 1 +
> drivers/clk/imx/clk-imx35.c | 4 ++--
> 2 files changed, 3 insertions(+), 2 deletions(-)
Acked-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider
2016-04-14 21:30 ` [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider Alexander Kurz
2016-04-18 4:47 ` Shawn Guo
@ 2016-04-18 17:19 ` Rob Herring
1 sibling, 0 replies; 6+ messages in thread
From: Rob Herring @ 2016-04-18 17:19 UTC (permalink / raw)
To: Alexander Kurz
Cc: linux-arm-kernel, devicetree, Michael Turquette, Stephen Boyd,
Sascha Hauer, Shawn Guo, linux-clk, Philippe Reynes
On Thu, Apr 14, 2016 at 11:30:50PM +0200, Alexander Kurz wrote:
> Use clock defines in order to make devicetrees more human readable
>
> Signed-off-by: Alexander Kurz <akurz@blala.de>
> ---
> .../devicetree/bindings/clock/imx35-clock.txt | 93 +----
Acked-by: Rob Herring <robh@kernel.org>
> drivers/clk/imx/clk-imx35.c | 429 ++++++++++++---------
> include/dt-bindings/clock/imx35-clock.h | 98 +++++
> 3 files changed, 349 insertions(+), 271 deletions(-)
> create mode 100644 include/dt-bindings/clock/imx35-clock.h
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-04-18 17:19 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-14 21:30 [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Alexander Kurz
2016-04-14 21:30 ` [PATCH 2/2] ARM: i.MX35 clk: Introduce DT include for clock provider Alexander Kurz
2016-04-18 4:47 ` Shawn Guo
2016-04-18 17:19 ` Rob Herring
2016-04-18 4:39 ` [PATCH 1/2] ARM: dts: imx35: restore existing used clock enumeration Shawn Guo
2016-04-18 17:16 ` Rob Herring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).