aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArchit Taneja <architt@codeaurora.org>2015-10-14 08:54:45 -0400
committerStephen Boyd <sboyd@codeaurora.org>2015-10-16 18:08:43 -0400
commit5532cfb567fec4ebb9775481ef121edb340ec5b8 (patch)
tree8e04cec1111488cfe6faaff4b1ece88ef3abce73
parentd8aa2beed870f088d4433b7075303e58764f0587 (diff)
clk: qcom: mmcc-8960: Add DSI related clocks
Add rcg and branch clk structs for DSI1 and DSI2 blocks found in MSM8960 and APQ8064. Each DSI instance has 4 pairs of rcg and branch clocks. Populate arrays mmcc_msm8960_clks and mmcc_apq8064_clks with these clocks. Signed-off-by: Archit Taneja <architt@codeaurora.org> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--drivers/clk/qcom/mmcc-msm8960.c404
1 files changed, 404 insertions, 0 deletions
diff --git a/drivers/clk/qcom/mmcc-msm8960.c b/drivers/clk/qcom/mmcc-msm8960.c
index fa55e27dd905..397f5df6422a 100644
--- a/drivers/clk/qcom/mmcc-msm8960.c
+++ b/drivers/clk/qcom/mmcc-msm8960.c
@@ -41,6 +41,10 @@ enum {
41 P_PLL3, 41 P_PLL3,
42 P_PLL15, 42 P_PLL15,
43 P_HDMI_PLL, 43 P_HDMI_PLL,
44 P_DSI1_PLL_DSICLK,
45 P_DSI2_PLL_DSICLK,
46 P_DSI1_PLL_BYTECLK,
47 P_DSI2_PLL_BYTECLK,
44}; 48};
45 49
46#define F_MN(f, s, _m, _n) { .freq = f, .src = s, .m = _m, .n = _n } 50#define F_MN(f, s, _m, _n) { .freq = f, .src = s, .m = _m, .n = _n }
@@ -85,6 +89,30 @@ static const char * const mmcc_pxo_pll8_pll2_pll3[] = {
85 "pll3", 89 "pll3",
86}; 90};
87 91
92static const struct parent_map mmcc_pxo_dsi2_dsi1_map[] = {
93 { P_PXO, 0 },
94 { P_DSI2_PLL_DSICLK, 1 },
95 { P_DSI1_PLL_DSICLK, 3 },
96};
97
98static const char * const mmcc_pxo_dsi2_dsi1[] = {
99 "pxo",
100 "dsi2pll",
101 "dsi1pll",
102};
103
104static const struct parent_map mmcc_pxo_dsi1_dsi2_byte_map[] = {
105 { P_PXO, 0 },
106 { P_DSI1_PLL_BYTECLK, 1 },
107 { P_DSI2_PLL_BYTECLK, 2 },
108};
109
110static const char * const mmcc_pxo_dsi1_dsi2_byte[] = {
111 "pxo",
112 "dsi1pllbyte",
113 "dsi2pllbyte",
114};
115
88static struct clk_pll pll2 = { 116static struct clk_pll pll2 = {
89 .l_reg = 0x320, 117 .l_reg = 0x320,
90 .m_reg = 0x324, 118 .m_reg = 0x324,
@@ -2042,6 +2070,350 @@ static struct clk_branch dsi2_s_ahb_clk = {
2042 }, 2070 },
2043}; 2071};
2044 2072
2073static struct clk_rcg dsi1_src = {
2074 .ns_reg = 0x0054,
2075 .md_reg = 0x0050,
2076 .mn = {
2077 .mnctr_en_bit = 5,
2078 .mnctr_reset_bit = 7,
2079 .mnctr_mode_shift = 6,
2080 .n_val_shift = 24,
2081 .m_val_shift = 8,
2082 .width = 8,
2083 },
2084 .p = {
2085 .pre_div_shift = 14,
2086 .pre_div_width = 2,
2087 },
2088 .s = {
2089 .src_sel_shift = 0,
2090 .parent_map = mmcc_pxo_dsi2_dsi1_map,
2091 },
2092 .clkr = {
2093 .enable_reg = 0x004c,
2094 .enable_mask = BIT(2),
2095 .hw.init = &(struct clk_init_data){
2096 .name = "dsi1_src",
2097 .parent_names = mmcc_pxo_dsi2_dsi1,
2098 .num_parents = 3,
2099 .ops = &clk_rcg_bypass2_ops,
2100 .flags = CLK_SET_RATE_PARENT,
2101 },
2102 },
2103};
2104
2105static struct clk_branch dsi1_clk = {
2106 .halt_reg = 0x01d0,
2107 .halt_bit = 1,
2108 .clkr = {
2109 .enable_reg = 0x004c,
2110 .enable_mask = BIT(0),
2111 .hw.init = &(struct clk_init_data){
2112 .name = "dsi1_clk",
2113 .parent_names = (const char *[]){ "dsi1_src" },
2114 .num_parents = 1,
2115 .ops = &clk_branch_ops,
2116 .flags = CLK_SET_RATE_PARENT,
2117 },
2118 },
2119};
2120
2121static struct clk_rcg dsi2_src = {
2122 .ns_reg = 0x012c,
2123 .md_reg = 0x00a8,
2124 .mn = {
2125 .mnctr_en_bit = 5,
2126 .mnctr_reset_bit = 7,
2127 .mnctr_mode_shift = 6,
2128 .n_val_shift = 24,
2129 .m_val_shift = 8,
2130 .width = 8,
2131 },
2132 .p = {
2133 .pre_div_shift = 14,
2134 .pre_div_width = 2,
2135 },
2136 .s = {
2137 .src_sel_shift = 0,
2138 .parent_map = mmcc_pxo_dsi2_dsi1_map,
2139 },
2140 .clkr = {
2141 .enable_reg = 0x003c,
2142 .enable_mask = BIT(2),
2143 .hw.init = &(struct clk_init_data){
2144 .name = "dsi2_src",
2145 .parent_names = mmcc_pxo_dsi2_dsi1,
2146 .num_parents = 3,
2147 .ops = &clk_rcg_bypass2_ops,
2148 .flags = CLK_SET_RATE_PARENT,
2149 },
2150 },
2151};
2152
2153static struct clk_branch dsi2_clk = {
2154 .halt_reg = 0x01d0,
2155 .halt_bit = 2,
2156 .clkr = {
2157 .enable_reg = 0x003c,
2158 .enable_mask = BIT(0),
2159 .hw.init = &(struct clk_init_data){
2160 .name = "dsi2_clk",
2161 .parent_names = (const char *[]){ "dsi2_src" },
2162 .num_parents = 1,
2163 .ops = &clk_branch_ops,
2164 .flags = CLK_SET_RATE_PARENT,
2165 },
2166 },
2167};
2168
2169static struct clk_rcg dsi1_byte_src = {
2170 .ns_reg = 0x00b0,
2171 .p = {
2172 .pre_div_shift = 12,
2173 .pre_div_width = 4,
2174 },
2175 .s = {
2176 .src_sel_shift = 0,
2177 .parent_map = mmcc_pxo_dsi1_dsi2_byte_map,
2178 },
2179 .clkr = {
2180 .enable_reg = 0x0090,
2181 .enable_mask = BIT(2),
2182 .hw.init = &(struct clk_init_data){
2183 .name = "dsi1_byte_src",
2184 .parent_names = mmcc_pxo_dsi1_dsi2_byte,
2185 .num_parents = 3,
2186 .ops = &clk_rcg_bypass2_ops,
2187 .flags = CLK_SET_RATE_PARENT,
2188 },
2189 },
2190};
2191
2192static struct clk_branch dsi1_byte_clk = {
2193 .halt_reg = 0x01cc,
2194 .halt_bit = 21,
2195 .clkr = {
2196 .enable_reg = 0x0090,
2197 .enable_mask = BIT(0),
2198 .hw.init = &(struct clk_init_data){
2199 .name = "dsi1_byte_clk",
2200 .parent_names = (const char *[]){ "dsi1_byte_src" },
2201 .num_parents = 1,
2202 .ops = &clk_branch_ops,
2203 .flags = CLK_SET_RATE_PARENT,
2204 },
2205 },
2206};
2207
2208static struct clk_rcg dsi2_byte_src = {
2209 .ns_reg = 0x012c,
2210 .p = {
2211 .pre_div_shift = 12,
2212 .pre_div_width = 4,
2213 },
2214 .s = {
2215 .src_sel_shift = 0,
2216 .parent_map = mmcc_pxo_dsi1_dsi2_byte_map,
2217 },
2218 .clkr = {
2219 .enable_reg = 0x0130,
2220 .enable_mask = BIT(2),
2221 .hw.init = &(struct clk_init_data){
2222 .name = "dsi2_byte_src",
2223 .parent_names = mmcc_pxo_dsi1_dsi2_byte,
2224 .num_parents = 3,
2225 .ops = &clk_rcg_bypass2_ops,
2226 .flags = CLK_SET_RATE_PARENT,
2227 },
2228 },
2229};
2230
2231static struct clk_branch dsi2_byte_clk = {
2232 .halt_reg = 0x01cc,
2233 .halt_bit = 20,
2234 .clkr = {
2235 .enable_reg = 0x00b4,
2236 .enable_mask = BIT(0),
2237 .hw.init = &(struct clk_init_data){
2238 .name = "dsi2_byte_clk",
2239 .parent_names = (const char *[]){ "dsi2_byte_src" },
2240 .num_parents = 1,
2241 .ops = &clk_branch_ops,
2242 .flags = CLK_SET_RATE_PARENT,
2243 },
2244 },
2245};
2246
2247static struct clk_rcg dsi1_esc_src = {
2248 .ns_reg = 0x0011c,
2249 .p = {
2250 .pre_div_shift = 12,
2251 .pre_div_width = 4,
2252 },
2253 .s = {
2254 .src_sel_shift = 0,
2255 .parent_map = mmcc_pxo_dsi1_dsi2_byte_map,
2256 },
2257 .clkr = {
2258 .enable_reg = 0x00cc,
2259 .enable_mask = BIT(2),
2260 .hw.init = &(struct clk_init_data){
2261 .name = "dsi1_esc_src",
2262 .parent_names = mmcc_pxo_dsi1_dsi2_byte,
2263 .num_parents = 3,
2264 .ops = &clk_rcg_esc_ops,
2265 },
2266 },
2267};
2268
2269static struct clk_branch dsi1_esc_clk = {
2270 .halt_reg = 0x01e8,
2271 .halt_bit = 1,
2272 .clkr = {
2273 .enable_reg = 0x00cc,
2274 .enable_mask = BIT(0),
2275 .hw.init = &(struct clk_init_data){
2276 .name = "dsi1_esc_clk",
2277 .parent_names = (const char *[]){ "dsi1_esc_src" },
2278 .num_parents = 1,
2279 .ops = &clk_branch_ops,
2280 .flags = CLK_SET_RATE_PARENT,
2281 },
2282 },
2283};
2284
2285static struct clk_rcg dsi2_esc_src = {
2286 .ns_reg = 0x0150,
2287 .p = {
2288 .pre_div_shift = 12,
2289 .pre_div_width = 4,
2290 },
2291 .s = {
2292 .src_sel_shift = 0,
2293 .parent_map = mmcc_pxo_dsi1_dsi2_byte_map,
2294 },
2295 .clkr = {
2296 .enable_reg = 0x013c,
2297 .enable_mask = BIT(2),
2298 .hw.init = &(struct clk_init_data){
2299 .name = "dsi2_esc_src",
2300 .parent_names = mmcc_pxo_dsi1_dsi2_byte,
2301 .num_parents = 3,
2302 .ops = &clk_rcg_esc_ops,
2303 },
2304 },
2305};
2306
2307static struct clk_branch dsi2_esc_clk = {
2308 .halt_reg = 0x01e8,
2309 .halt_bit = 3,
2310 .clkr = {
2311 .enable_reg = 0x013c,
2312 .enable_mask = BIT(0),
2313 .hw.init = &(struct clk_init_data){
2314 .name = "dsi2_esc_clk",
2315 .parent_names = (const char *[]){ "dsi2_esc_src" },
2316 .num_parents = 1,
2317 .ops = &clk_branch_ops,
2318 .flags = CLK_SET_RATE_PARENT,
2319 },
2320 },
2321};
2322
2323static struct clk_rcg dsi1_pixel_src = {
2324 .ns_reg = 0x0138,
2325 .md_reg = 0x0134,
2326 .mn = {
2327 .mnctr_en_bit = 5,
2328 .mnctr_reset_bit = 7,
2329 .mnctr_mode_shift = 6,
2330 .n_val_shift = 16,
2331 .m_val_shift = 8,
2332 .width = 8,
2333 },
2334 .p = {
2335 .pre_div_shift = 12,
2336 .pre_div_width = 4,
2337 },
2338 .s = {
2339 .src_sel_shift = 0,
2340 .parent_map = mmcc_pxo_dsi2_dsi1_map,
2341 },
2342 .clkr = {
2343 .enable_reg = 0x0130,
2344 .enable_mask = BIT(2),
2345 .hw.init = &(struct clk_init_data){
2346 .name = "dsi1_pixel_src",
2347 .parent_names = mmcc_pxo_dsi2_dsi1,
2348 .num_parents = 3,
2349 .ops = &clk_rcg_pixel_ops,
2350 },
2351 },
2352};
2353
2354static struct clk_branch dsi1_pixel_clk = {
2355 .halt_reg = 0x01d0,
2356 .halt_bit = 6,
2357 .clkr = {
2358 .enable_reg = 0x0130,
2359 .enable_mask = BIT(0),
2360 .hw.init = &(struct clk_init_data){
2361 .name = "mdp_pclk1_clk",
2362 .parent_names = (const char *[]){ "dsi1_pixel_src" },
2363 .num_parents = 1,
2364 .ops = &clk_branch_ops,
2365 .flags = CLK_SET_RATE_PARENT,
2366 },
2367 },
2368};
2369
2370static struct clk_rcg dsi2_pixel_src = {
2371 .ns_reg = 0x00e4,
2372 .md_reg = 0x00b8,
2373 .mn = {
2374 .mnctr_en_bit = 5,
2375 .mnctr_reset_bit = 7,
2376 .mnctr_mode_shift = 6,
2377 .n_val_shift = 16,
2378 .m_val_shift = 8,
2379 .width = 8,
2380 },
2381 .p = {
2382 .pre_div_shift = 12,
2383 .pre_div_width = 4,
2384 },
2385 .s = {
2386 .src_sel_shift = 0,
2387 .parent_map = mmcc_pxo_dsi2_dsi1_map,
2388 },
2389 .clkr = {
2390 .enable_reg = 0x0094,
2391 .enable_mask = BIT(2),
2392 .hw.init = &(struct clk_init_data){
2393 .name = "dsi2_pixel_src",
2394 .parent_names = mmcc_pxo_dsi2_dsi1,
2395 .num_parents = 3,
2396 .ops = &clk_rcg_pixel_ops,
2397 },
2398 },
2399};
2400
2401static struct clk_branch dsi2_pixel_clk = {
2402 .halt_reg = 0x01d0,
2403 .halt_bit = 19,
2404 .clkr = {
2405 .enable_reg = 0x0094,
2406 .enable_mask = BIT(0),
2407 .hw.init = &(struct clk_init_data){
2408 .name = "mdp_pclk2_clk",
2409 .parent_names = (const char *[]){ "dsi2_pixel_src" },
2410 .num_parents = 1,
2411 .ops = &clk_branch_ops,
2412 .flags = CLK_SET_RATE_PARENT,
2413 },
2414 },
2415};
2416
2045static struct clk_branch gfx2d0_ahb_clk = { 2417static struct clk_branch gfx2d0_ahb_clk = {
2046 .hwcg_reg = 0x0038, 2418 .hwcg_reg = 0x0038,
2047 .hwcg_bit = 28, 2419 .hwcg_bit = 28,
@@ -2325,6 +2697,8 @@ static struct clk_regmap *mmcc_msm8960_clks[] = {
2325 [CSI2_SRC] = &csi2_src.clkr, 2697 [CSI2_SRC] = &csi2_src.clkr,
2326 [CSI2_CLK] = &csi2_clk.clkr, 2698 [CSI2_CLK] = &csi2_clk.clkr,
2327 [CSI2_PHY_CLK] = &csi2_phy_clk.clkr, 2699 [CSI2_PHY_CLK] = &csi2_phy_clk.clkr,
2700 [DSI_SRC] = &dsi1_src.clkr,
2701 [DSI_CLK] = &dsi1_clk.clkr,
2328 [CSI_PIX_CLK] = &csi_pix_clk.clkr, 2702 [CSI_PIX_CLK] = &csi_pix_clk.clkr,
2329 [CSI_RDI_CLK] = &csi_rdi_clk.clkr, 2703 [CSI_RDI_CLK] = &csi_rdi_clk.clkr,
2330 [MDP_VSYNC_CLK] = &mdp_vsync_clk.clkr, 2704 [MDP_VSYNC_CLK] = &mdp_vsync_clk.clkr,
@@ -2345,6 +2719,18 @@ static struct clk_regmap *mmcc_msm8960_clks[] = {
2345 [MDP_SRC] = &mdp_src.clkr, 2719 [MDP_SRC] = &mdp_src.clkr,
2346 [MDP_CLK] = &mdp_clk.clkr, 2720 [MDP_CLK] = &mdp_clk.clkr,
2347 [MDP_LUT_CLK] = &mdp_lut_clk.clkr, 2721 [MDP_LUT_CLK] = &mdp_lut_clk.clkr,
2722 [DSI2_PIXEL_SRC] = &dsi2_pixel_src.clkr,
2723 [DSI2_PIXEL_CLK] = &dsi2_pixel_clk.clkr,
2724 [DSI2_SRC] = &dsi2_src.clkr,
2725 [DSI2_CLK] = &dsi2_clk.clkr,
2726 [DSI1_BYTE_SRC] = &dsi1_byte_src.clkr,
2727 [DSI1_BYTE_CLK] = &dsi1_byte_clk.clkr,
2728 [DSI2_BYTE_SRC] = &dsi2_byte_src.clkr,
2729 [DSI2_BYTE_CLK] = &dsi2_byte_clk.clkr,
2730 [DSI1_ESC_SRC] = &dsi1_esc_src.clkr,
2731 [DSI1_ESC_CLK] = &dsi1_esc_clk.clkr,
2732 [DSI2_ESC_SRC] = &dsi2_esc_src.clkr,
2733 [DSI2_ESC_CLK] = &dsi2_esc_clk.clkr,
2348 [ROT_SRC] = &rot_src.clkr, 2734 [ROT_SRC] = &rot_src.clkr,
2349 [ROT_CLK] = &rot_clk.clkr, 2735 [ROT_CLK] = &rot_clk.clkr,
2350 [TV_ENC_CLK] = &tv_enc_clk.clkr, 2736 [TV_ENC_CLK] = &tv_enc_clk.clkr,
@@ -2359,6 +2745,8 @@ static struct clk_regmap *mmcc_msm8960_clks[] = {
2359 [VFE_CSI_CLK] = &vfe_csi_clk.clkr, 2745 [VFE_CSI_CLK] = &vfe_csi_clk.clkr,
2360 [VPE_SRC] = &vpe_src.clkr, 2746 [VPE_SRC] = &vpe_src.clkr,
2361 [VPE_CLK] = &vpe_clk.clkr, 2747 [VPE_CLK] = &vpe_clk.clkr,
2748 [DSI_PIXEL_SRC] = &dsi1_pixel_src.clkr,
2749 [DSI_PIXEL_CLK] = &dsi1_pixel_clk.clkr,
2362 [CAMCLK0_SRC] = &camclk0_src.clkr, 2750 [CAMCLK0_SRC] = &camclk0_src.clkr,
2363 [CAMCLK0_CLK] = &camclk0_clk.clkr, 2751 [CAMCLK0_CLK] = &camclk0_clk.clkr,
2364 [CAMCLK1_SRC] = &camclk1_src.clkr, 2752 [CAMCLK1_SRC] = &camclk1_src.clkr,
@@ -2490,6 +2878,8 @@ static struct clk_regmap *mmcc_apq8064_clks[] = {
2490 [CSI2_SRC] = &csi2_src.clkr, 2878 [CSI2_SRC] = &csi2_src.clkr,
2491 [CSI2_CLK] = &csi2_clk.clkr, 2879 [CSI2_CLK] = &csi2_clk.clkr,
2492 [CSI2_PHY_CLK] = &csi2_phy_clk.clkr, 2880 [CSI2_PHY_CLK] = &csi2_phy_clk.clkr,
2881 [DSI_SRC] = &dsi1_src.clkr,
2882 [DSI_CLK] = &dsi1_clk.clkr,
2493 [CSI_PIX_CLK] = &csi_pix_clk.clkr, 2883 [CSI_PIX_CLK] = &csi_pix_clk.clkr,
2494 [CSI_RDI_CLK] = &csi_rdi_clk.clkr, 2884 [CSI_RDI_CLK] = &csi_rdi_clk.clkr,
2495 [MDP_VSYNC_CLK] = &mdp_vsync_clk.clkr, 2885 [MDP_VSYNC_CLK] = &mdp_vsync_clk.clkr,
@@ -2506,6 +2896,18 @@ static struct clk_regmap *mmcc_apq8064_clks[] = {
2506 [MDP_SRC] = &mdp_src.clkr, 2896 [MDP_SRC] = &mdp_src.clkr,
2507 [MDP_CLK] = &mdp_clk.clkr, 2897 [MDP_CLK] = &mdp_clk.clkr,
2508 [MDP_LUT_CLK] = &mdp_lut_clk.clkr, 2898 [MDP_LUT_CLK] = &mdp_lut_clk.clkr,
2899 [DSI2_PIXEL_SRC] = &dsi2_pixel_src.clkr,
2900 [DSI2_PIXEL_CLK] = &dsi2_pixel_clk.clkr,
2901 [DSI2_SRC] = &dsi2_src.clkr,
2902 [DSI2_CLK] = &dsi2_clk.clkr,
2903 [DSI1_BYTE_SRC] = &dsi1_byte_src.clkr,
2904 [DSI1_BYTE_CLK] = &dsi1_byte_clk.clkr,
2905 [DSI2_BYTE_SRC] = &dsi2_byte_src.clkr,
2906 [DSI2_BYTE_CLK] = &dsi2_byte_clk.clkr,
2907 [DSI1_ESC_SRC] = &dsi1_esc_src.clkr,
2908 [DSI1_ESC_CLK] = &dsi1_esc_clk.clkr,
2909 [DSI2_ESC_SRC] = &dsi2_esc_src.clkr,
2910 [DSI2_ESC_CLK] = &dsi2_esc_clk.clkr,
2509 [ROT_SRC] = &rot_src.clkr, 2911 [ROT_SRC] = &rot_src.clkr,
2510 [ROT_CLK] = &rot_clk.clkr, 2912 [ROT_CLK] = &rot_clk.clkr,
2511 [TV_DAC_CLK] = &tv_dac_clk.clkr, 2913 [TV_DAC_CLK] = &tv_dac_clk.clkr,
@@ -2519,6 +2921,8 @@ static struct clk_regmap *mmcc_apq8064_clks[] = {
2519 [VFE_CSI_CLK] = &vfe_csi_clk.clkr, 2921 [VFE_CSI_CLK] = &vfe_csi_clk.clkr,
2520 [VPE_SRC] = &vpe_src.clkr, 2922 [VPE_SRC] = &vpe_src.clkr,
2521 [VPE_CLK] = &vpe_clk.clkr, 2923 [VPE_CLK] = &vpe_clk.clkr,
2924 [DSI_PIXEL_SRC] = &dsi1_pixel_src.clkr,
2925 [DSI_PIXEL_CLK] = &dsi1_pixel_clk.clkr,
2522 [CAMCLK0_SRC] = &camclk0_src.clkr, 2926 [CAMCLK0_SRC] = &camclk0_src.clkr,
2523 [CAMCLK0_CLK] = &camclk0_clk.clkr, 2927 [CAMCLK0_CLK] = &camclk0_clk.clkr,
2524 [CAMCLK1_SRC] = &camclk1_src.clkr, 2928 [CAMCLK1_SRC] = &camclk1_src.clkr,