#define MDFLD_LIMT_DPLL_19 0
#define MDFLD_LIMT_DPLL_25 1
-#define MDFLD_LIMT_DPLL_83 2
-#define MDFLD_LIMT_DPLL_100 3
-#define MDFLD_LIMT_DSIPLL_19 4
-#define MDFLD_LIMT_DSIPLL_25 5
-#define MDFLD_LIMT_DSIPLL_83 6
-#define MDFLD_LIMT_DSIPLL_100 7
+#define MDFLD_LIMT_DPLL_38 2
+#define MDFLD_LIMT_DPLL_83 3
+#define MDFLD_LIMT_DPLL_100 4
+#define MDFLD_LIMT_DSIPLL_19 5
+#define MDFLD_LIMT_DSIPLL_25 6
+#define MDFLD_LIMT_DSIPLL_38 7
+#define MDFLD_LIMT_DSIPLL_83 8
+#define MDFLD_LIMT_DSIPLL_100 9
#define MDFLD_DOT_MIN 19750
#define MDFLD_DOT_MAX 120000
#define MDFLD_DPLL_M_MAX_25 130
#define MDFLD_DPLL_P1_MIN_25 2
#define MDFLD_DPLL_P1_MAX_25 10
+#define MDFLD_DPLL_M_MIN_38 113
+#define MDFLD_DPLL_M_MAX_38 155
+#define MDFLD_DPLL_P1_MIN_38 2
+#define MDFLD_DPLL_P1_MAX_38 10
#define MDFLD_DPLL_M_MIN_83 64
#define MDFLD_DPLL_M_MAX_83 64
#define MDFLD_DPLL_P1_MIN_83 2
#define MDFLD_DSIPLL_M_MAX_25 140
#define MDFLD_DSIPLL_P1_MIN_25 3
#define MDFLD_DSIPLL_P1_MAX_25 9
+#define MDFLD_DSIPLL_M_MIN_38 66
+#define MDFLD_DSIPLL_M_MAX_38 87
+#define MDFLD_DSIPLL_P1_MIN_38 3
+#define MDFLD_DSIPLL_P1_MAX_38 8
#define MDFLD_DSIPLL_M_MIN_83 33
#define MDFLD_DSIPLL_M_MAX_83 92
#define MDFLD_DSIPLL_P1_MIN_83 2
.m = {.min = MDFLD_DPLL_M_MIN_25, .max = MDFLD_DPLL_M_MAX_25},
.p1 = {.min = MDFLD_DPLL_P1_MIN_25, .max = MDFLD_DPLL_P1_MAX_25},
},
+ { /* MDFLD_LIMT_DPLL_38 */
+ .dot = {.min = MDFLD_DOT_MIN, .max = MDFLD_DOT_MAX},
+ .m = {.min = MDFLD_DPLL_M_MIN_38, .max = MDFLD_DPLL_M_MAX_38},
+ .p1 = {.min = MDFLD_DPLL_P1_MIN_38, .max = MDFLD_DPLL_P1_MAX_38},
+ },
{ /* MDFLD_LIMT_DPLL_83 */
.dot = {.min = MDFLD_DOT_MIN, .max = MDFLD_DOT_MAX},
.m = {.min = MDFLD_DPLL_M_MIN_83, .max = MDFLD_DPLL_M_MAX_83},
.m = {.min = MDFLD_DSIPLL_M_MIN_25, .max = MDFLD_DSIPLL_M_MAX_25},
.p1 = {.min = MDFLD_DSIPLL_P1_MIN_25, .max = MDFLD_DSIPLL_P1_MAX_25},
},
+ { /* MDFLD_LIMT_DSIPLL_38 */
+ .dot = {.min = MDFLD_DOT_MIN, .max = MDFLD_DOT_MAX},
+ .m = {.min = MDFLD_DSIPLL_M_MIN_38, .max = MDFLD_DSIPLL_M_MAX_38},
+ .p1 = {.min = MDFLD_DSIPLL_P1_MIN_38, .max = MDFLD_DSIPLL_P1_MAX_38},
+ },
{ /* MDFLD_LIMT_DSIPLL_83 */
.dot = {.min = MDFLD_DOT_MIN, .max = MDFLD_DOT_MAX},
.m = {.min = MDFLD_DSIPLL_M_MIN_83, .max = MDFLD_DSIPLL_M_MAX_83},
limit = &mdfld_limits[MDFLD_LIMT_DSIPLL_19];
else if (dev_priv->ksel == KSEL_BYPASS_25)
limit = &mdfld_limits[MDFLD_LIMT_DSIPLL_25];
+ else if (dev_priv->ksel == KSEL_CRYSTAL_38)
+ limit = &mdfld_limits[MDFLD_LIMT_DSIPLL_38];
else if ((dev_priv->ksel == KSEL_BYPASS_83_100) && (dev_priv->core_freq == 166))
limit = &mdfld_limits[MDFLD_LIMT_DSIPLL_83];
else if ((dev_priv->ksel == KSEL_BYPASS_83_100) &&
limit = &mdfld_limits[MDFLD_LIMT_DPLL_19];
else if (dev_priv->ksel == KSEL_BYPASS_25)
limit = &mdfld_limits[MDFLD_LIMT_DPLL_25];
+ else if (dev_priv->ksel == KSEL_CRYSTAL_38)
+ limit = &mdfld_limits[MDFLD_LIMT_DPLL_38];
else if ((dev_priv->ksel == KSEL_BYPASS_83_100) && (dev_priv->core_freq == 166))
limit = &mdfld_limits[MDFLD_LIMT_DPLL_83];
else if ((dev_priv->ksel == KSEL_BYPASS_83_100) &&
} else if (dev_priv->ksel == KSEL_BYPASS_25) {
refclk = 25000;
clk_n = 1, clk_p2 = 8;
+ } else if (dev_priv->ksel == KSEL_CRYSTAL_38) {
+ refclk = 38400;
+ clk_n = 1, clk_p2 = 8;
} else if ((dev_priv->ksel == KSEL_BYPASS_83_100) && (dev_priv->core_freq == 166)) {
refclk = 83000;
clk_n = 4, clk_p2 = 8;
ctx->dpll = dpll;
ctx->fp = fp;
+ PSB_DEBUG_ENTRY("dsi dpll = 0x%x fp = 0x%x\n", dpll, fp);
return 0;
}
} else if (is_hdmi) {
clk_n = 1, clk_p2 = 10;
}
+ } else if (dev_priv->ksel == KSEL_CRYSTAL_38) {
+ refclk = 38400;
+
+ if (is_mipi || is_mipi2) {
+ clk_n = 1, clk_p2 = 8;
+ } else if (is_hdmi) {
+ clk_n = 2, clk_p2 = 10;
+ }
} else if ((dev_priv->ksel == KSEL_BYPASS_83_100) && (dev_priv->core_freq == 166)) {
refclk = 83000;
#if 0 /* 1080p30 & 720p */
dpll = 0x00050000;
fp = 0x000001be;
+ /* In case clocking issues try value below for CTP.
+ Please keep this one for reference. */
+ fp = 0x000101be;
#endif
#if 0 /* 480p */
dpll = 0x02010000;