Lines Matching refs:ldb

33 #define DRIVER_NAME "imx-ldb"
53 struct imx_ldb *ldb;
57 /* Defines what is connected to the ldb, only one at a time */
102 struct imx_ldb *ldb = imx_ldb_ch->ldb;
103 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
110 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24;
112 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24;
116 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24 |
119 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24 |
158 static void imx_ldb_set_clock(struct imx_ldb *ldb, int mux, int chno,
163 dev_dbg(ldb->dev, "%s: now: %ld want: %ld\n", __func__,
164 clk_get_rate(ldb->clk_pll[chno]), serial_clk);
165 clk_set_rate(ldb->clk_pll[chno], serial_clk);
167 dev_dbg(ldb->dev, "%s after: %ld\n", __func__,
168 clk_get_rate(ldb->clk_pll[chno]));
170 dev_dbg(ldb->dev, "%s: now: %ld want: %ld\n", __func__,
171 clk_get_rate(ldb->clk[chno]),
173 clk_set_rate(ldb->clk[chno], di_clk);
175 dev_dbg(ldb->dev, "%s after: %ld\n", __func__,
176 clk_get_rate(ldb->clk[chno]));
179 ret = clk_set_parent(ldb->clk_sel[mux], ldb->clk[chno]);
181 dev_err(ldb->dev,
189 struct imx_ldb *ldb = imx_ldb_ch->ldb;
190 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
193 if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
194 dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
201 clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]);
202 clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]);
204 clk_prepare_enable(ldb->clk[0]);
205 clk_prepare_enable(ldb->clk[1]);
207 clk_set_parent(ldb->clk_sel[mux], ldb->clk[imx_ldb_ch->chno]);
210 if (imx_ldb_ch == &ldb->channel[0] || dual) {
211 ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;
212 if (mux == 0 || ldb->lvds_mux)
213 ldb->ldb_ctrl |= LDB_CH0_MODE_EN_TO_DI0;
215 ldb->ldb_ctrl |= LDB_CH0_MODE_EN_TO_DI1;
217 if (imx_ldb_ch == &ldb->channel[1] || dual) {
218 ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK;
219 if (mux == 1 || ldb->lvds_mux)
220 ldb->ldb_ctrl |= LDB_CH1_MODE_EN_TO_DI1;
222 ldb->ldb_ctrl |= LDB_CH1_MODE_EN_TO_DI0;
225 if (ldb->lvds_mux) {
228 if (imx_ldb_ch == &ldb->channel[0])
229 lvds_mux = &ldb->lvds_mux[0];
230 else if (imx_ldb_ch == &ldb->channel[1])
231 lvds_mux = &ldb->lvds_mux[1];
233 regmap_update_bits(ldb->regmap, lvds_mux->reg, lvds_mux->mask,
237 regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl);
249 struct imx_ldb *ldb = imx_ldb_ch->ldb;
250 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
256 if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
257 dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
262 dev_warn(ldb->dev,
266 dev_warn(ldb->dev,
272 imx_ldb_set_clock(ldb, mux, 0, serial_clk, di_clk);
273 imx_ldb_set_clock(ldb, mux, 1, serial_clk, di_clk);
276 imx_ldb_set_clock(ldb, mux, imx_ldb_ch->chno, serial_clk,
281 if (imx_ldb_ch == &ldb->channel[0] || dual) {
283 ldb->ldb_ctrl |= LDB_DI0_VS_POL_ACT_LOW;
285 ldb->ldb_ctrl &= ~LDB_DI0_VS_POL_ACT_LOW;
287 if (imx_ldb_ch == &ldb->channel[1] || dual) {
289 ldb->ldb_ctrl |= LDB_DI1_VS_POL_ACT_LOW;
291 ldb->ldb_ctrl &= ~LDB_DI1_VS_POL_ACT_LOW;
307 struct imx_ldb *ldb = imx_ldb_ch->ldb;
308 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
313 if (imx_ldb_ch == &ldb->channel[0] || dual)
314 ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;
315 if (imx_ldb_ch == &ldb->channel[1] || dual)
316 ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK;
318 regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl);
321 clk_disable_unprepare(ldb->clk[0]);
322 clk_disable_unprepare(ldb->clk[1]);
325 if (ldb->lvds_mux) {
328 if (imx_ldb_ch == &ldb->channel[0])
329 lvds_mux = &ldb->lvds_mux[0];
330 else if (imx_ldb_ch == &ldb->channel[1])
331 lvds_mux = &ldb->lvds_mux[1];
333 regmap_read(ldb->regmap, lvds_mux->reg, &mux);
337 mux = (imx_ldb_ch == &ldb->channel[0]) ? 0 : 1;
341 ret = clk_set_parent(ldb->clk_sel[mux], ldb->clk_parent[mux]);
343 dev_err(ldb->dev,
405 static int imx_ldb_get_clk(struct imx_ldb *ldb, int chno)
410 ldb->clk[chno] = devm_clk_get(ldb->dev, clkname);
411 if (IS_ERR(ldb->clk[chno]))
412 return PTR_ERR(ldb->clk[chno]);
415 ldb->clk_pll[chno] = devm_clk_get(ldb->dev, clkname);
417 return PTR_ERR_OR_ZERO(ldb->clk_pll[chno]);
423 struct imx_ldb *ldb = imx_ldb_ch->ldb;
431 ret = imx_ldb_get_clk(ldb, imx_ldb_ch->chno);
435 if (ldb->ldb_ctrl & LDB_SPLIT_MODE_EN) {
436 ret = imx_ldb_get_clk(ldb, 1);
455 * historical reasons, the ldb driver can also work without
518 * For a device declaring compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb",
521 * entries (in this case fsl,imx53-ldb) need to be ordered last.
524 { .compatible = "fsl,imx6q-ldb", .data = imx6q_lvds_mux, },
525 { .compatible = "fsl,imx53-ldb", .data = NULL, },
646 channel->ldb = imx_ldb;