msm: clock-8x60: Add support for ebi2_clk and ebi2_2x_clk
These clocks are linked in a dependency chain by software
so that enabling ebi2_clk is sufficient to cause both
clock to enable.
Signed-off-by: Matt Wagantall <mattw@codeaurora.org>
diff --git a/arch/arm/mach-msm/clock-8x60.c b/arch/arm/mach-msm/clock-8x60.c
index 07eb8c4..e85d72a 100644
--- a/arch/arm/mach-msm/clock-8x60.c
+++ b/arch/arm/mach-msm/clock-8x60.c
@@ -53,6 +53,8 @@
#define CLK_HALT_MSS_SMPSS_MISC_STATE_REG REG(0x2FDC)
#define CLK_HALT_SFPB_MISC_STATE_REG REG(0x2FD8)
#define CLK_TEST_REG REG(0x2FA0)
+#define EBI2_2X_CLK_CTL_REG REG(0x2660)
+#define EBI2_CLK_CTL_REG REG(0x2664)
#define GSBIn_HCLK_CTL_REG(n) REG(0x29C0+(0x20*((n)-1)))
#define GSBIn_QUP_APPS_MD_REG(n) REG(0x29C8+(0x20*((n)-1)))
#define GSBIn_QUP_APPS_NS_REG(n) REG(0x29CC+(0x20*((n)-1)))
@@ -1798,6 +1800,35 @@
},
};
+static struct branch_clk ebi2_2x_clk = {
+ .b = {
+ .ctl_reg = EBI2_2X_CLK_CTL_REG,
+ .en_mask = BIT(4),
+ .halt_reg = CLK_HALT_CFPB_STATEA_REG,
+ .halt_bit = 18,
+ },
+ .c = {
+ .dbg_name = "ebi2_2x_clk",
+ .ops = &clk_ops_branch,
+ CLK_INIT(ebi2_2x_clk.c),
+ },
+};
+
+static struct branch_clk ebi2_clk = {
+ .b = {
+ .ctl_reg = EBI2_CLK_CTL_REG,
+ .en_mask = BIT(4),
+ .halt_reg = CLK_HALT_CFPB_STATEA_REG,
+ .halt_bit = 19,
+ },
+ .c = {
+ .dbg_name = "ebi2_clk",
+ .ops = &clk_ops_branch,
+ CLK_INIT(ebi2_clk.c),
+ .depends = &ebi2_2x_clk.c,
+ },
+};
+
/* HW-Voteable Clocks */
static struct branch_clk adm0_clk = {
.b = {
@@ -3141,6 +3172,8 @@
{ TEST_PER_LS(0x19), &sdc4_clk.c },
{ TEST_PER_LS(0x1A), &sdc5_p_clk.c },
{ TEST_PER_LS(0x1B), &sdc5_clk.c },
+ { TEST_PER_LS(0x1D), &ebi2_2x_clk.c },
+ { TEST_PER_LS(0x1E), &ebi2_clk.c },
{ TEST_PER_LS(0x25), &dfab_clk.c },
{ TEST_PER_LS(0x25), &dfab_a_clk.c },
{ TEST_PER_LS(0x26), &pmem_clk.c },
@@ -3565,6 +3598,8 @@
CLK_LOOKUP("iface_clk", sdc3_p_clk.c, "msm_sdcc.3"),
CLK_LOOKUP("iface_clk", sdc4_p_clk.c, "msm_sdcc.4"),
CLK_LOOKUP("iface_clk", sdc5_p_clk.c, "msm_sdcc.5"),
+ CLK_LOOKUP("mem_clk", ebi2_2x_clk.c, NULL),
+ CLK_LOOKUP("mem_clk", ebi2_clk.c, NULL),
CLK_LOOKUP("core_clk", adm0_clk.c, "msm_dmov.0"),
CLK_LOOKUP("iface_clk", adm0_p_clk.c, "msm_dmov.0"),
CLK_LOOKUP("core_clk", adm1_clk.c, "msm_dmov.1"),