Lines Matching defs:ldb
36 #define DRIVER_NAME "imx-ldb"
64 struct imx_ldb *ldb;
66 /* Defines what is connected to the ldb, only one at a time */
111 struct imx_ldb *ldb = imx_ldb_ch->ldb;
112 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
119 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24;
121 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24;
125 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24 |
128 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24 |
166 static void imx_ldb_set_clock(struct imx_ldb *ldb, int mux, int chno,
171 dev_dbg(ldb->dev, "%s: now: %ld want: %ld\n", __func__,
172 clk_get_rate(ldb->clk_pll[chno]), serial_clk);
173 clk_set_rate(ldb->clk_pll[chno], serial_clk);
175 dev_dbg(ldb->dev, "%s after: %ld\n", __func__,
176 clk_get_rate(ldb->clk_pll[chno]));
178 dev_dbg(ldb->dev, "%s: now: %ld want: %ld\n", __func__,
179 clk_get_rate(ldb->clk[chno]),
181 clk_set_rate(ldb->clk[chno], di_clk);
183 dev_dbg(ldb->dev, "%s after: %ld\n", __func__,
184 clk_get_rate(ldb->clk[chno]));
187 ret = clk_set_parent(ldb->clk_sel[mux], ldb->clk[chno]);
189 dev_err(ldb->dev,
197 struct imx_ldb *ldb = imx_ldb_ch->ldb;
198 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
201 if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
202 dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
209 clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]);
210 clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]);
212 clk_prepare_enable(ldb->clk[0]);
213 clk_prepare_enable(ldb->clk[1]);
215 clk_set_parent(ldb->clk_sel[mux], ldb->clk[imx_ldb_ch->chno]);
218 if (imx_ldb_ch == &ldb->channel[0] || dual) {
219 ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;
220 if (mux == 0 || ldb->lvds_mux)
221 ldb->ldb_ctrl |= LDB_CH0_MODE_EN_TO_DI0;
223 ldb->ldb_ctrl |= LDB_CH0_MODE_EN_TO_DI1;
225 if (imx_ldb_ch == &ldb->channel[1] || dual) {
226 ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK;
227 if (mux == 1 || ldb->lvds_mux)
228 ldb->ldb_ctrl |= LDB_CH1_MODE_EN_TO_DI1;
230 ldb->ldb_ctrl |= LDB_CH1_MODE_EN_TO_DI0;
233 if (ldb->lvds_mux) {
236 if (imx_ldb_ch == &ldb->channel[0])
237 lvds_mux = &ldb->lvds_mux[0];
238 else if (imx_ldb_ch == &ldb->channel[1])
239 lvds_mux = &ldb->lvds_mux[1];
241 regmap_update_bits(ldb->regmap, lvds_mux->reg, lvds_mux->mask,
245 regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl);
257 struct imx_ldb *ldb = imx_ldb_ch->ldb;
258 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
264 if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
265 dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
270 dev_warn(ldb->dev,
274 dev_warn(ldb->dev,
279 dev_warn(ldb->dev,
285 imx_ldb_set_clock(ldb, mux, 0, serial_clk, di_clk);
286 imx_ldb_set_clock(ldb, mux, 1, serial_clk, di_clk);
289 imx_ldb_set_clock(ldb, mux, imx_ldb_ch->chno, serial_clk,
294 if (imx_ldb_ch == &ldb->channel[0] || dual) {
296 ldb->ldb_ctrl |= LDB_DI0_VS_POL_ACT_LOW;
298 ldb->ldb_ctrl &= ~LDB_DI0_VS_POL_ACT_LOW;
300 if (imx_ldb_ch == &ldb->channel[1] || dual) {
302 ldb->ldb_ctrl |= LDB_DI1_VS_POL_ACT_LOW;
304 ldb->ldb_ctrl &= ~LDB_DI1_VS_POL_ACT_LOW;
320 struct imx_ldb *ldb = imx_ldb_ch->ldb;
321 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
326 if (imx_ldb_ch == &ldb->channel[0] || dual)
327 ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;
328 if (imx_ldb_ch == &ldb->channel[1] || dual)
329 ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK;
331 regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl);
334 clk_disable_unprepare(ldb->clk[0]);
335 clk_disable_unprepare(ldb->clk[1]);
338 if (ldb->lvds_mux) {
341 if (imx_ldb_ch == &ldb->channel[0])
342 lvds_mux = &ldb->lvds_mux[0];
343 else if (imx_ldb_ch == &ldb->channel[1])
344 lvds_mux = &ldb->lvds_mux[1];
346 regmap_read(ldb->regmap, lvds_mux->reg, &mux);
350 mux = (imx_ldb_ch == &ldb->channel[0]) ? 0 : 1;
354 ret = clk_set_parent(ldb->clk_sel[mux], ldb->clk_parent[mux]);
356 dev_err(ldb->dev,
418 static int imx_ldb_get_clk(struct imx_ldb *ldb, int chno)
423 ldb->clk[chno] = devm_clk_get(ldb->dev, clkname);
424 if (IS_ERR(ldb->clk[chno]))
425 return PTR_ERR(ldb->clk[chno]);
428 ldb->clk_pll[chno] = devm_clk_get(ldb->dev, clkname);
430 return PTR_ERR_OR_ZERO(ldb->clk_pll[chno]);
436 struct imx_ldb *ldb = imx_ldb_ch->ldb;
455 ret = imx_ldb_get_clk(ldb, imx_ldb_ch->chno);
459 if (ldb->ldb_ctrl & LDB_SPLIT_MODE_EN) {
460 ret = imx_ldb_get_clk(ldb, 1);
475 * historical reasons, the ldb driver can also work without
538 * For a device declaring compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb",
541 * entries (in this case fsl,imx53-ldb) need to be ordered last.
544 { .compatible = "fsl,imx6q-ldb", .data = imx6q_lvds_mux, },
545 { .compatible = "fsl,imx53-ldb", .data = NULL, },
601 if (!channel->ldb)
691 channel->ldb = imx_ldb;