Lines Matching refs:ldb

62 	struct imx_ldb *ldb;  member
97 struct imx_ldb *ldb = imx_ldb_ch->ldb; in imx_ldb_ch_set_bus_format() local
98 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; in imx_ldb_ch_set_bus_format()
105 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24; in imx_ldb_ch_set_bus_format()
107 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24; in imx_ldb_ch_set_bus_format()
111 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24 | in imx_ldb_ch_set_bus_format()
114 ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24 | in imx_ldb_ch_set_bus_format()
120 static void imx_ldb_set_clock(struct imx_ldb *ldb, int mux, int chno, in imx_ldb_set_clock() argument
125 dev_dbg(ldb->dev, "%s: now: %ld want: %ld\n", __func__, in imx_ldb_set_clock()
126 clk_get_rate(ldb->clk_pll[chno]), serial_clk); in imx_ldb_set_clock()
127 clk_set_rate(ldb->clk_pll[chno], serial_clk); in imx_ldb_set_clock()
129 dev_dbg(ldb->dev, "%s after: %ld\n", __func__, in imx_ldb_set_clock()
130 clk_get_rate(ldb->clk_pll[chno])); in imx_ldb_set_clock()
132 dev_dbg(ldb->dev, "%s: now: %ld want: %ld\n", __func__, in imx_ldb_set_clock()
133 clk_get_rate(ldb->clk[chno]), in imx_ldb_set_clock()
135 clk_set_rate(ldb->clk[chno], di_clk); in imx_ldb_set_clock()
137 dev_dbg(ldb->dev, "%s after: %ld\n", __func__, in imx_ldb_set_clock()
138 clk_get_rate(ldb->clk[chno])); in imx_ldb_set_clock()
141 ret = clk_set_parent(ldb->clk_sel[mux], ldb->clk[chno]); in imx_ldb_set_clock()
143 dev_err(ldb->dev, in imx_ldb_set_clock()
151 struct imx_ldb *ldb = imx_ldb_ch->ldb; in imx_ldb_encoder_enable() local
152 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; in imx_ldb_encoder_enable()
155 if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) { in imx_ldb_encoder_enable()
156 dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux); in imx_ldb_encoder_enable()
161 clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]); in imx_ldb_encoder_enable()
162 clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]); in imx_ldb_encoder_enable()
164 clk_prepare_enable(ldb->clk[0]); in imx_ldb_encoder_enable()
165 clk_prepare_enable(ldb->clk[1]); in imx_ldb_encoder_enable()
167 clk_set_parent(ldb->clk_sel[mux], ldb->clk[imx_ldb_ch->chno]); in imx_ldb_encoder_enable()
170 if (imx_ldb_ch == &ldb->channel[0] || dual) { in imx_ldb_encoder_enable()
171 ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK; in imx_ldb_encoder_enable()
172 if (mux == 0 || ldb->lvds_mux) in imx_ldb_encoder_enable()
173 ldb->ldb_ctrl |= LDB_CH0_MODE_EN_TO_DI0; in imx_ldb_encoder_enable()
175 ldb->ldb_ctrl |= LDB_CH0_MODE_EN_TO_DI1; in imx_ldb_encoder_enable()
177 if (imx_ldb_ch == &ldb->channel[1] || dual) { in imx_ldb_encoder_enable()
178 ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK; in imx_ldb_encoder_enable()
179 if (mux == 1 || ldb->lvds_mux) in imx_ldb_encoder_enable()
180 ldb->ldb_ctrl |= LDB_CH1_MODE_EN_TO_DI1; in imx_ldb_encoder_enable()
182 ldb->ldb_ctrl |= LDB_CH1_MODE_EN_TO_DI0; in imx_ldb_encoder_enable()
185 if (ldb->lvds_mux) { in imx_ldb_encoder_enable()
188 if (imx_ldb_ch == &ldb->channel[0]) in imx_ldb_encoder_enable()
189 lvds_mux = &ldb->lvds_mux[0]; in imx_ldb_encoder_enable()
190 else if (imx_ldb_ch == &ldb->channel[1]) in imx_ldb_encoder_enable()
191 lvds_mux = &ldb->lvds_mux[1]; in imx_ldb_encoder_enable()
193 regmap_update_bits(ldb->regmap, lvds_mux->reg, lvds_mux->mask, in imx_ldb_encoder_enable()
197 regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl); in imx_ldb_encoder_enable()
207 struct imx_ldb *ldb = imx_ldb_ch->ldb; in imx_ldb_encoder_atomic_mode_set() local
208 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; in imx_ldb_encoder_atomic_mode_set()
214 if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) { in imx_ldb_encoder_atomic_mode_set()
215 dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux); in imx_ldb_encoder_atomic_mode_set()
220 dev_warn(ldb->dev, in imx_ldb_encoder_atomic_mode_set()
224 dev_warn(ldb->dev, in imx_ldb_encoder_atomic_mode_set()
229 dev_warn(ldb->dev, in imx_ldb_encoder_atomic_mode_set()
235 imx_ldb_set_clock(ldb, mux, 0, serial_clk, di_clk); in imx_ldb_encoder_atomic_mode_set()
236 imx_ldb_set_clock(ldb, mux, 1, serial_clk, di_clk); in imx_ldb_encoder_atomic_mode_set()
239 imx_ldb_set_clock(ldb, mux, imx_ldb_ch->chno, serial_clk, in imx_ldb_encoder_atomic_mode_set()
244 if (imx_ldb_ch == &ldb->channel[0] || dual) { in imx_ldb_encoder_atomic_mode_set()
246 ldb->ldb_ctrl |= LDB_DI0_VS_POL_ACT_LOW; in imx_ldb_encoder_atomic_mode_set()
248 ldb->ldb_ctrl &= ~LDB_DI0_VS_POL_ACT_LOW; in imx_ldb_encoder_atomic_mode_set()
250 if (imx_ldb_ch == &ldb->channel[1] || dual) { in imx_ldb_encoder_atomic_mode_set()
252 ldb->ldb_ctrl |= LDB_DI1_VS_POL_ACT_LOW; in imx_ldb_encoder_atomic_mode_set()
254 ldb->ldb_ctrl &= ~LDB_DI1_VS_POL_ACT_LOW; in imx_ldb_encoder_atomic_mode_set()
270 struct imx_ldb *ldb = imx_ldb_ch->ldb; in imx_ldb_encoder_disable() local
271 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; in imx_ldb_encoder_disable()
274 if (imx_ldb_ch == &ldb->channel[0] || dual) in imx_ldb_encoder_disable()
275 ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK; in imx_ldb_encoder_disable()
276 if (imx_ldb_ch == &ldb->channel[1] || dual) in imx_ldb_encoder_disable()
277 ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK; in imx_ldb_encoder_disable()
279 regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl); in imx_ldb_encoder_disable()
282 clk_disable_unprepare(ldb->clk[0]); in imx_ldb_encoder_disable()
283 clk_disable_unprepare(ldb->clk[1]); in imx_ldb_encoder_disable()
286 if (ldb->lvds_mux) { in imx_ldb_encoder_disable()
289 if (imx_ldb_ch == &ldb->channel[0]) in imx_ldb_encoder_disable()
290 lvds_mux = &ldb->lvds_mux[0]; in imx_ldb_encoder_disable()
291 else if (imx_ldb_ch == &ldb->channel[1]) in imx_ldb_encoder_disable()
292 lvds_mux = &ldb->lvds_mux[1]; in imx_ldb_encoder_disable()
294 regmap_read(ldb->regmap, lvds_mux->reg, &mux); in imx_ldb_encoder_disable()
298 mux = (imx_ldb_ch == &ldb->channel[0]) ? 0 : 1; in imx_ldb_encoder_disable()
302 ret = clk_set_parent(ldb->clk_sel[mux], ldb->clk_parent[mux]); in imx_ldb_encoder_disable()
304 dev_err(ldb->dev, in imx_ldb_encoder_disable()
353 static int imx_ldb_get_clk(struct imx_ldb *ldb, int chno) in imx_ldb_get_clk() argument
358 ldb->clk[chno] = devm_clk_get(ldb->dev, clkname); in imx_ldb_get_clk()
359 if (IS_ERR(ldb->clk[chno])) in imx_ldb_get_clk()
360 return PTR_ERR(ldb->clk[chno]); in imx_ldb_get_clk()
363 ldb->clk_pll[chno] = devm_clk_get(ldb->dev, clkname); in imx_ldb_get_clk()
365 return PTR_ERR_OR_ZERO(ldb->clk_pll[chno]); in imx_ldb_get_clk()
371 struct imx_ldb *ldb = imx_ldb_ch->ldb; in imx_ldb_register() local
389 ret = imx_ldb_get_clk(ldb, imx_ldb_ch->chno); in imx_ldb_register()
393 if (ldb->ldb_ctrl & LDB_SPLIT_MODE_EN) { in imx_ldb_register()
394 ret = imx_ldb_get_clk(ldb, 1); in imx_ldb_register()
485 if (!channel->ldb) in imx_ldb_bind()
572 channel->ldb = imx_ldb; in imx_ldb_probe()