Lines Matching defs:venc
268 static inline void venc_write_reg(struct venc_device *venc, int idx, u32 val)
270 __raw_writel(val, venc->base + idx);
273 static inline u32 venc_read_reg(struct venc_device *venc, int idx)
275 u32 l = __raw_readl(venc->base + idx);
279 static void venc_write_config(struct venc_device *venc,
282 DSSDBG("write venc conf\n");
284 venc_write_reg(venc, VENC_LLEN, config->llen);
285 venc_write_reg(venc, VENC_FLENS, config->flens);
286 venc_write_reg(venc, VENC_CC_CARR_WSS_CARR, config->cc_carr_wss_carr);
287 venc_write_reg(venc, VENC_C_PHASE, config->c_phase);
288 venc_write_reg(venc, VENC_GAIN_U, config->gain_u);
289 venc_write_reg(venc, VENC_GAIN_V, config->gain_v);
290 venc_write_reg(venc, VENC_GAIN_Y, config->gain_y);
291 venc_write_reg(venc, VENC_BLACK_LEVEL, config->black_level);
292 venc_write_reg(venc, VENC_BLANK_LEVEL, config->blank_level);
293 venc_write_reg(venc, VENC_M_CONTROL, config->m_control);
294 venc_write_reg(venc, VENC_BSTAMP_WSS_DATA, config->bstamp_wss_data);
295 venc_write_reg(venc, VENC_S_CARR, config->s_carr);
296 venc_write_reg(venc, VENC_L21__WC_CTL, config->l21__wc_ctl);
297 venc_write_reg(venc, VENC_SAVID__EAVID, config->savid__eavid);
298 venc_write_reg(venc, VENC_FLEN__FAL, config->flen__fal);
299 venc_write_reg(venc, VENC_LAL__PHASE_RESET, config->lal__phase_reset);
300 venc_write_reg(venc, VENC_HS_INT_START_STOP_X,
302 venc_write_reg(venc, VENC_HS_EXT_START_STOP_X,
304 venc_write_reg(venc, VENC_VS_INT_START_X, config->vs_int_start_x);
305 venc_write_reg(venc, VENC_VS_INT_STOP_X__VS_INT_START_Y,
307 venc_write_reg(venc, VENC_VS_INT_STOP_Y__VS_EXT_START_X,
309 venc_write_reg(venc, VENC_VS_EXT_STOP_X__VS_EXT_START_Y,
311 venc_write_reg(venc, VENC_VS_EXT_STOP_Y, config->vs_ext_stop_y);
312 venc_write_reg(venc, VENC_AVID_START_STOP_X, config->avid_start_stop_x);
313 venc_write_reg(venc, VENC_AVID_START_STOP_Y, config->avid_start_stop_y);
314 venc_write_reg(venc, VENC_FID_INT_START_X__FID_INT_START_Y,
316 venc_write_reg(venc, VENC_FID_INT_OFFSET_Y__FID_EXT_START_X,
318 venc_write_reg(venc, VENC_FID_EXT_START_Y__FID_EXT_OFFSET_Y,
321 venc_write_reg(venc, VENC_DAC_B__DAC_C,
322 venc_read_reg(venc, VENC_DAC_B__DAC_C));
323 venc_write_reg(venc, VENC_VIDOUT_CTRL, config->vidout_ctrl);
324 venc_write_reg(venc, VENC_HFLTR_CTRL, config->hfltr_ctrl);
325 venc_write_reg(venc, VENC_X_COLOR, config->x_color);
326 venc_write_reg(venc, VENC_LINE21, config->line21);
327 venc_write_reg(venc, VENC_LN_SEL, config->ln_sel);
328 venc_write_reg(venc, VENC_HTRIGGER_VTRIGGER, config->htrigger_vtrigger);
329 venc_write_reg(venc, VENC_TVDETGP_INT_START_STOP_X,
331 venc_write_reg(venc, VENC_TVDETGP_INT_START_STOP_Y,
333 venc_write_reg(venc, VENC_GEN_CTRL, config->gen_ctrl);
334 venc_write_reg(venc, VENC_F_CONTROL, config->f_control);
335 venc_write_reg(venc, VENC_SYNC_CTRL, config->sync_ctrl);
338 static void venc_reset(struct venc_device *venc)
342 venc_write_reg(venc, VENC_F_CONTROL, 1<<8);
343 while (venc_read_reg(venc, VENC_F_CONTROL) & (1<<8)) {
345 DSSERR("Failed to reset venc\n");
357 static int venc_runtime_get(struct venc_device *venc)
363 r = pm_runtime_get_sync(&venc->pdev->dev);
368 static void venc_runtime_put(struct venc_device *venc)
374 r = pm_runtime_put_sync(&venc->pdev->dev);
378 static int venc_power_on(struct venc_device *venc)
383 r = venc_runtime_get(venc);
387 venc_reset(venc);
388 venc_write_config(venc, venc->config);
390 dss_set_venc_output(venc->dss, venc->type);
391 dss_set_dac_pwrdn_bgz(venc->dss, 1);
395 if (venc->type == OMAP_DSS_VENC_TYPE_COMPOSITE)
400 if (venc->invert_polarity == false)
403 venc_write_reg(venc, VENC_OUTPUT_CONTROL, l);
405 r = regulator_enable(venc->vdda_dac_reg);
409 r = dss_mgr_enable(&venc->output);
416 regulator_disable(venc->vdda_dac_reg);
418 venc_write_reg(venc, VENC_OUTPUT_CONTROL, 0);
419 dss_set_dac_pwrdn_bgz(venc->dss, 0);
421 venc_runtime_put(venc);
426 static void venc_power_off(struct venc_device *venc)
428 venc_write_reg(venc, VENC_OUTPUT_CONTROL, 0);
429 dss_set_dac_pwrdn_bgz(venc->dss, 0);
431 dss_mgr_disable(&venc->output);
433 regulator_disable(venc->vdda_dac_reg);
435 venc_runtime_put(venc);
458 struct venc_device *venc = s->private;
460 #define DUMPREG(venc, r) \
461 seq_printf(s, "%-35s %08x\n", #r, venc_read_reg(venc, r))
463 if (venc_runtime_get(venc))
466 DUMPREG(venc, VENC_F_CONTROL);
467 DUMPREG(venc, VENC_VIDOUT_CTRL);
468 DUMPREG(venc, VENC_SYNC_CTRL);
469 DUMPREG(venc, VENC_LLEN);
470 DUMPREG(venc, VENC_FLENS);
471 DUMPREG(venc, VENC_HFLTR_CTRL);
472 DUMPREG(venc, VENC_CC_CARR_WSS_CARR);
473 DUMPREG(venc, VENC_C_PHASE);
474 DUMPREG(venc, VENC_GAIN_U);
475 DUMPREG(venc, VENC_GAIN_V);
476 DUMPREG(venc, VENC_GAIN_Y);
477 DUMPREG(venc, VENC_BLACK_LEVEL);
478 DUMPREG(venc, VENC_BLANK_LEVEL);
479 DUMPREG(venc, VENC_X_COLOR);
480 DUMPREG(venc, VENC_M_CONTROL);
481 DUMPREG(venc, VENC_BSTAMP_WSS_DATA);
482 DUMPREG(venc, VENC_S_CARR);
483 DUMPREG(venc, VENC_LINE21);
484 DUMPREG(venc, VENC_LN_SEL);
485 DUMPREG(venc, VENC_L21__WC_CTL);
486 DUMPREG(venc, VENC_HTRIGGER_VTRIGGER);
487 DUMPREG(venc, VENC_SAVID__EAVID);
488 DUMPREG(venc, VENC_FLEN__FAL);
489 DUMPREG(venc, VENC_LAL__PHASE_RESET);
490 DUMPREG(venc, VENC_HS_INT_START_STOP_X);
491 DUMPREG(venc, VENC_HS_EXT_START_STOP_X);
492 DUMPREG(venc, VENC_VS_INT_START_X);
493 DUMPREG(venc, VENC_VS_INT_STOP_X__VS_INT_START_Y);
494 DUMPREG(venc, VENC_VS_INT_STOP_Y__VS_EXT_START_X);
495 DUMPREG(venc, VENC_VS_EXT_STOP_X__VS_EXT_START_Y);
496 DUMPREG(venc, VENC_VS_EXT_STOP_Y);
497 DUMPREG(venc, VENC_AVID_START_STOP_X);
498 DUMPREG(venc, VENC_AVID_START_STOP_Y);
499 DUMPREG(venc, VENC_FID_INT_START_X__FID_INT_START_Y);
500 DUMPREG(venc, VENC_FID_INT_OFFSET_Y__FID_EXT_START_X);
501 DUMPREG(venc, VENC_FID_EXT_START_Y__FID_EXT_OFFSET_Y);
502 DUMPREG(venc, VENC_TVDETGP_INT_START_STOP_X);
503 DUMPREG(venc, VENC_TVDETGP_INT_START_STOP_Y);
504 DUMPREG(venc, VENC_GEN_CTRL);
505 DUMPREG(venc, VENC_OUTPUT_CONTROL);
506 DUMPREG(venc, VENC_OUTPUT_TEST);
508 venc_runtime_put(venc);
514 static int venc_get_clocks(struct venc_device *venc)
518 if (venc->requires_tv_dac_clk) {
519 clk = devm_clk_get(&venc->pdev->dev, "tv_dac_clk");
528 venc->tv_dac_clk = clk;
540 struct venc_device *venc = drm_bridge_to_venc(bridge);
545 return drm_bridge_attach(bridge->encoder, venc->output.next_bridge,
594 struct venc_device *venc = drm_bridge_to_venc(bridge);
602 venc->config = &venc_config_pal_trm;
606 venc->config = &venc_config_ntsc_trm;
610 dispc_set_tv_pclk(venc->dss->dispc, 13500000);
615 struct venc_device *venc = drm_bridge_to_venc(bridge);
617 venc_power_on(venc);
622 struct venc_device *venc = drm_bridge_to_venc(bridge);
624 venc_power_off(venc);
661 static void venc_bridge_init(struct venc_device *venc)
663 venc->bridge.funcs = &venc_bridge_funcs;
664 venc->bridge.of_node = venc->pdev->dev.of_node;
665 venc->bridge.ops = DRM_BRIDGE_OP_MODES;
666 venc->bridge.type = DRM_MODE_CONNECTOR_SVIDEO;
667 venc->bridge.interlace_allowed = true;
669 drm_bridge_add(&venc->bridge);
672 static void venc_bridge_cleanup(struct venc_device *venc)
674 drm_bridge_remove(&venc->bridge);
684 struct venc_device *venc = dev_get_drvdata(dev);
688 venc->dss = dss;
690 r = venc_runtime_get(venc);
694 rev_id = (u8)(venc_read_reg(venc, VENC_REV_ID) & 0xff);
697 venc_runtime_put(venc);
699 venc->debugfs = dss_debugfs_create_file(dss, "venc", venc_dump_regs,
700 venc);
707 struct venc_device *venc = dev_get_drvdata(dev);
709 dss_debugfs_remove_file(venc->debugfs);
721 static int venc_init_output(struct venc_device *venc)
723 struct omap_dss_device *out = &venc->output;
726 venc_bridge_init(venc);
728 out->dev = &venc->pdev->dev;
731 out->name = "venc.0";
737 r = omapdss_device_init_output(out, &venc->bridge);
739 venc_bridge_cleanup(venc);
748 static void venc_uninit_output(struct venc_device *venc)
750 omapdss_device_unregister(&venc->output);
751 omapdss_device_cleanup_output(&venc->output);
753 venc_bridge_cleanup(venc);
756 static int venc_probe_of(struct venc_device *venc)
758 struct device_node *node = venc->pdev->dev.of_node;
767 venc->invert_polarity = of_property_read_bool(ep, "ti,invert-polarity");
771 dev_err(&venc->pdev->dev,
778 venc->type = OMAP_DSS_VENC_TYPE_COMPOSITE;
781 venc->type = OMAP_DSS_VENC_TYPE_SVIDEO;
784 dev_err(&venc->pdev->dev, "bad channel property '%d'\n",
807 struct venc_device *venc;
811 venc = kzalloc(sizeof(*venc), GFP_KERNEL);
812 if (!venc)
815 venc->pdev = pdev;
817 platform_set_drvdata(pdev, venc);
821 venc->requires_tv_dac_clk = true;
823 venc->config = &venc_config_pal_trm;
825 venc_mem = platform_get_resource(venc->pdev, IORESOURCE_MEM, 0);
826 venc->base = devm_ioremap_resource(&pdev->dev, venc_mem);
827 if (IS_ERR(venc->base)) {
828 r = PTR_ERR(venc->base);
832 venc->vdda_dac_reg = devm_regulator_get(&pdev->dev, "vdda");
833 if (IS_ERR(venc->vdda_dac_reg)) {
834 r = PTR_ERR(venc->vdda_dac_reg);
840 r = venc_get_clocks(venc);
844 r = venc_probe_of(venc);
850 r = venc_init_output(venc);
861 venc_uninit_output(venc);
865 kfree(venc);
871 struct venc_device *venc = platform_get_drvdata(pdev);
875 venc_uninit_output(venc);
879 kfree(venc);
885 struct venc_device *venc = dev_get_drvdata(dev);
887 if (venc->tv_dac_clk)
888 clk_disable_unprepare(venc->tv_dac_clk);
895 struct venc_device *venc = dev_get_drvdata(dev);
897 if (venc->tv_dac_clk)
898 clk_prepare_enable(venc->tv_dac_clk);
910 { .compatible = "ti,omap2-venc", },
911 { .compatible = "ti,omap3-venc", },
912 { .compatible = "ti,omap4-venc", },