Lines Matching refs:tve
128 __acquires(&tve->lock) in tve_lock()
130 struct imx_tve *tve = __tve; in tve_lock() local
132 spin_lock(&tve->lock); in tve_lock()
136 __releases(&tve->lock) in tve_unlock()
138 struct imx_tve *tve = __tve; in tve_unlock() local
140 spin_unlock(&tve->lock); in tve_unlock()
143 static void tve_enable(struct imx_tve *tve) in tve_enable() argument
147 if (!tve->enabled) { in tve_enable()
148 tve->enabled = true; in tve_enable()
149 clk_prepare_enable(tve->clk); in tve_enable()
150 ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, in tve_enable()
156 regmap_write(tve->regmap, TVE_STAT_REG, 0xffffffff); in tve_enable()
159 if (tve->mode == TVE_MODE_VGA) in tve_enable()
160 regmap_write(tve->regmap, TVE_INT_CONT_REG, 0); in tve_enable()
162 regmap_write(tve->regmap, TVE_INT_CONT_REG, in tve_enable()
168 static void tve_disable(struct imx_tve *tve) in tve_disable() argument
172 if (tve->enabled) { in tve_disable()
173 tve->enabled = false; in tve_disable()
174 ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, in tve_disable()
176 clk_disable_unprepare(tve->clk); in tve_disable()
180 static int tve_setup_tvout(struct imx_tve *tve) in tve_setup_tvout() argument
185 static int tve_setup_vga(struct imx_tve *tve) in tve_setup_vga() argument
192 ret = regmap_update_bits(tve->regmap, TVE_TVDAC0_CONT_REG, in tve_setup_vga()
197 ret = regmap_update_bits(tve->regmap, TVE_TVDAC1_CONT_REG, in tve_setup_vga()
202 ret = regmap_update_bits(tve->regmap, TVE_TVDAC2_CONT_REG, in tve_setup_vga()
214 ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, mask, val); in tve_setup_vga()
219 return regmap_update_bits(tve->regmap, TVE_TST_MODE_REG, in tve_setup_vga()
231 struct imx_tve *tve = con_to_tve(connector); in imx_tve_connector_get_modes() local
235 if (!tve->ddc) in imx_tve_connector_get_modes()
238 edid = drm_get_edid(connector, tve->ddc); in imx_tve_connector_get_modes()
251 struct imx_tve *tve = con_to_tve(connector); in imx_tve_connector_mode_valid() local
255 rate = clk_round_rate(tve->clk, 2000UL * mode->clock) / 2000; in imx_tve_connector_mode_valid()
260 rate = clk_round_rate(tve->clk, 1000UL * mode->clock) / 1000; in imx_tve_connector_mode_valid()
264 dev_warn(tve->dev, "ignoring mode %dx%d\n", in imx_tve_connector_mode_valid()
273 struct imx_tve *tve = con_to_tve(connector); in imx_tve_connector_best_encoder() local
275 return &tve->encoder; in imx_tve_connector_best_encoder()
280 struct imx_tve *tve = enc_to_tve(encoder); in imx_tve_encoder_dpms() local
283 ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, in imx_tve_encoder_dpms()
286 dev_err(tve->dev, "failed to disable TVOUT: %d\n", ret); in imx_tve_encoder_dpms()
298 struct imx_tve *tve = enc_to_tve(encoder); in imx_tve_encoder_prepare() local
300 tve_disable(tve); in imx_tve_encoder_prepare()
302 switch (tve->mode) { in imx_tve_encoder_prepare()
305 tve->hsync_pin, tve->vsync_pin); in imx_tve_encoder_prepare()
317 struct imx_tve *tve = enc_to_tve(encoder); in imx_tve_encoder_mode_set() local
329 clk_set_rate(tve->clk, rate); in imx_tve_encoder_mode_set()
330 rounded_rate = clk_get_rate(tve->clk); in imx_tve_encoder_mode_set()
333 clk_set_rate(tve->di_clk, rounded_rate / div); in imx_tve_encoder_mode_set()
335 ret = clk_set_parent(tve->di_sel_clk, tve->di_clk); in imx_tve_encoder_mode_set()
337 dev_err(tve->dev, "failed to set di_sel parent to tve_di: %d\n", in imx_tve_encoder_mode_set()
341 if (tve->mode == TVE_MODE_VGA) in imx_tve_encoder_mode_set()
342 ret = tve_setup_vga(tve); in imx_tve_encoder_mode_set()
344 ret = tve_setup_tvout(tve); in imx_tve_encoder_mode_set()
346 dev_err(tve->dev, "failed to set configuration: %d\n", ret); in imx_tve_encoder_mode_set()
351 struct imx_tve *tve = enc_to_tve(encoder); in imx_tve_encoder_commit() local
353 tve_enable(tve); in imx_tve_encoder_commit()
358 struct imx_tve *tve = enc_to_tve(encoder); in imx_tve_encoder_disable() local
360 tve_disable(tve); in imx_tve_encoder_disable()
391 struct imx_tve *tve = data; in imx_tve_irq_handler() local
394 regmap_read(tve->regmap, TVE_STAT_REG, &val); in imx_tve_irq_handler()
397 regmap_write(tve->regmap, TVE_STAT_REG, 0xffffffff); in imx_tve_irq_handler()
405 struct imx_tve *tve = container_of(hw, struct imx_tve, clk_hw_di); in clk_tve_di_recalc_rate() local
409 ret = regmap_read(tve->regmap, TVE_COM_CONF_REG, &val); in clk_tve_di_recalc_rate()
442 struct imx_tve *tve = container_of(hw, struct imx_tve, clk_hw_di); in clk_tve_di_set_rate() local
455 ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, in clk_tve_di_set_rate()
459 dev_err(tve->dev, "failed to set divider: %d\n", ret); in clk_tve_di_set_rate()
472 static int tve_clk_init(struct imx_tve *tve, void __iomem *base) in tve_clk_init() argument
482 tve_di_parent[0] = __clk_get_name(tve->clk); in tve_clk_init()
485 tve->clk_hw_di.init = &init; in tve_clk_init()
486 tve->di_clk = clk_register(tve->dev, &tve->clk_hw_di); in tve_clk_init()
487 if (IS_ERR(tve->di_clk)) { in tve_clk_init()
488 dev_err(tve->dev, "failed to register TVE output clock: %ld\n", in tve_clk_init()
489 PTR_ERR(tve->di_clk)); in tve_clk_init()
490 return PTR_ERR(tve->di_clk); in tve_clk_init()
496 static int imx_tve_register(struct drm_device *drm, struct imx_tve *tve) in imx_tve_register() argument
501 encoder_type = tve->mode == TVE_MODE_VGA ? in imx_tve_register()
504 ret = imx_drm_encoder_parse_of(drm, &tve->encoder, in imx_tve_register()
505 tve->dev->of_node); in imx_tve_register()
509 drm_encoder_helper_add(&tve->encoder, &imx_tve_encoder_helper_funcs); in imx_tve_register()
510 drm_encoder_init(drm, &tve->encoder, &imx_tve_encoder_funcs, in imx_tve_register()
513 drm_connector_helper_add(&tve->connector, in imx_tve_register()
515 drm_connector_init(drm, &tve->connector, &imx_tve_connector_funcs, in imx_tve_register()
518 drm_mode_connector_attach_encoder(&tve->connector, &tve->encoder); in imx_tve_register()
568 struct imx_tve *tve; in imx_tve_bind() local
575 tve = devm_kzalloc(dev, sizeof(*tve), GFP_KERNEL); in imx_tve_bind()
576 if (!tve) in imx_tve_bind()
579 tve->dev = dev; in imx_tve_bind()
580 spin_lock_init(&tve->lock); in imx_tve_bind()
584 tve->ddc = of_find_i2c_adapter_by_node(ddc_node); in imx_tve_bind()
588 tve->mode = of_get_tve_mode(np); in imx_tve_bind()
589 if (tve->mode != TVE_MODE_VGA) { in imx_tve_bind()
594 if (tve->mode == TVE_MODE_VGA) { in imx_tve_bind()
596 &tve->hsync_pin); in imx_tve_bind()
604 &tve->vsync_pin); in imx_tve_bind()
617 tve_regmap_config.lock_arg = tve; in imx_tve_bind()
618 tve->regmap = devm_regmap_init_mmio_clk(dev, "tve", base, in imx_tve_bind()
620 if (IS_ERR(tve->regmap)) { in imx_tve_bind()
622 PTR_ERR(tve->regmap)); in imx_tve_bind()
623 return PTR_ERR(tve->regmap); in imx_tve_bind()
634 "imx-tve", tve); in imx_tve_bind()
640 tve->dac_reg = devm_regulator_get(dev, "dac"); in imx_tve_bind()
641 if (!IS_ERR(tve->dac_reg)) { in imx_tve_bind()
642 regulator_set_voltage(tve->dac_reg, 2750000, 2750000); in imx_tve_bind()
643 ret = regulator_enable(tve->dac_reg); in imx_tve_bind()
648 tve->clk = devm_clk_get(dev, "tve"); in imx_tve_bind()
649 if (IS_ERR(tve->clk)) { in imx_tve_bind()
651 PTR_ERR(tve->clk)); in imx_tve_bind()
652 return PTR_ERR(tve->clk); in imx_tve_bind()
656 tve->di_sel_clk = devm_clk_get(dev, "di_sel"); in imx_tve_bind()
657 if (IS_ERR(tve->di_sel_clk)) { in imx_tve_bind()
659 PTR_ERR(tve->di_sel_clk)); in imx_tve_bind()
660 return PTR_ERR(tve->di_sel_clk); in imx_tve_bind()
663 ret = tve_clk_init(tve, base); in imx_tve_bind()
667 ret = regmap_read(tve->regmap, TVE_COM_CONF_REG, &val); in imx_tve_bind()
679 ret = regmap_write(tve->regmap, TVE_CD_CONT_REG, 0); in imx_tve_bind()
683 ret = imx_tve_register(drm, tve); in imx_tve_bind()
687 dev_set_drvdata(dev, tve); in imx_tve_bind()
695 struct imx_tve *tve = dev_get_drvdata(dev); in imx_tve_unbind() local
697 tve->connector.funcs->destroy(&tve->connector); in imx_tve_unbind()
698 tve->encoder.funcs->destroy(&tve->encoder); in imx_tve_unbind()
700 if (!IS_ERR(tve->dac_reg)) in imx_tve_unbind()
701 regulator_disable(tve->dac_reg); in imx_tve_unbind()