Lines Matching full:dpi
3 * linux/drivers/video/omap2/dss/dpi.c
12 #define DSS_SUBSYS_NAME "DPI"
65 * XXX we can't currently use DSI PLL for DPI with OMAP3, as the DSI PLL in dpi_get_pll()
66 * would also be used for DISPC fclk. Meaning, when the DPI output is in dpi_get_pll()
220 static bool dpi_dsi_clk_calc(struct dpi_data *dpi, unsigned long pck, in dpi_dsi_clk_calc() argument
227 ctx->pll = dpi->pll; in dpi_dsi_clk_calc()
272 static int dpi_set_dsi_clk(struct dpi_data *dpi, enum omap_channel channel, in dpi_set_dsi_clk() argument
280 ok = dpi_dsi_clk_calc(dpi, pck_req, &ctx); in dpi_set_dsi_clk()
284 r = dss_pll_set_config(dpi->pll, &ctx.dsi_cinfo); in dpi_set_dsi_clk()
291 dpi->mgr_config.clock_info = ctx.dispc_cinfo; in dpi_set_dsi_clk()
300 static int dpi_set_dispc_clk(struct dpi_data *dpi, unsigned long pck_req, in dpi_set_dispc_clk() argument
315 dpi->mgr_config.clock_info = ctx.dispc_cinfo; in dpi_set_dispc_clk()
324 static int dpi_set_mode(struct dpi_data *dpi) in dpi_set_mode() argument
326 struct omap_dss_device *out = &dpi->output; in dpi_set_mode()
328 struct omap_video_timings *t = &dpi->timings; in dpi_set_mode()
334 if (dpi->pll) in dpi_set_mode()
335 r = dpi_set_dsi_clk(dpi, mgr->id, t->pixelclock, &fck, in dpi_set_mode()
338 r = dpi_set_dispc_clk(dpi, t->pixelclock, &fck, in dpi_set_mode()
357 static void dpi_config_lcd_manager(struct dpi_data *dpi) in dpi_config_lcd_manager() argument
359 struct omap_dss_device *out = &dpi->output; in dpi_config_lcd_manager()
362 dpi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS; in dpi_config_lcd_manager()
364 dpi->mgr_config.stallmode = false; in dpi_config_lcd_manager()
365 dpi->mgr_config.fifohandcheck = false; in dpi_config_lcd_manager()
367 dpi->mgr_config.video_port_width = dpi->data_lines; in dpi_config_lcd_manager()
369 dpi->mgr_config.lcden_sig_polarity = 0; in dpi_config_lcd_manager()
371 dss_mgr_set_lcd_config(mgr, &dpi->mgr_config); in dpi_config_lcd_manager()
376 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_display_enable() local
377 struct omap_dss_device *out = &dpi->output; in dpi_display_enable()
380 mutex_lock(&dpi->lock); in dpi_display_enable()
382 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI) && !dpi->vdds_dsi_reg) { in dpi_display_enable()
395 r = regulator_enable(dpi->vdds_dsi_reg); in dpi_display_enable()
408 if (dpi->pll) { in dpi_display_enable()
409 r = dss_pll_enable(dpi->pll); in dpi_display_enable()
414 r = dpi_set_mode(dpi); in dpi_display_enable()
418 dpi_config_lcd_manager(dpi); in dpi_display_enable()
426 mutex_unlock(&dpi->lock); in dpi_display_enable()
432 if (dpi->pll) in dpi_display_enable()
433 dss_pll_disable(dpi->pll); in dpi_display_enable()
439 regulator_disable(dpi->vdds_dsi_reg); in dpi_display_enable()
443 mutex_unlock(&dpi->lock); in dpi_display_enable()
449 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_display_disable() local
450 struct omap_overlay_manager *mgr = dpi->output.manager; in dpi_display_disable()
452 mutex_lock(&dpi->lock); in dpi_display_disable()
456 if (dpi->pll) { in dpi_display_disable()
458 dss_pll_disable(dpi->pll); in dpi_display_disable()
464 regulator_disable(dpi->vdds_dsi_reg); in dpi_display_disable()
466 mutex_unlock(&dpi->lock); in dpi_display_disable()
472 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_set_timings() local
476 mutex_lock(&dpi->lock); in dpi_set_timings()
478 dpi->timings = *timings; in dpi_set_timings()
480 mutex_unlock(&dpi->lock); in dpi_set_timings()
486 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_get_timings() local
488 mutex_lock(&dpi->lock); in dpi_get_timings()
490 *timings = dpi->timings; in dpi_get_timings()
492 mutex_unlock(&dpi->lock); in dpi_get_timings()
498 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_check_timings() local
499 struct omap_overlay_manager *mgr = dpi->output.manager; in dpi_check_timings()
512 if (dpi->pll) { in dpi_check_timings()
513 ok = dpi_dsi_clk_calc(dpi, timings->pixelclock, &ctx); in dpi_check_timings()
538 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_set_data_lines() local
540 mutex_lock(&dpi->lock); in dpi_set_data_lines()
542 dpi->data_lines = data_lines; in dpi_set_data_lines()
544 mutex_unlock(&dpi->lock); in dpi_set_data_lines()
562 static int dpi_init_regulator(struct dpi_data *dpi) in dpi_init_regulator() argument
569 if (dpi->vdds_dsi_reg) in dpi_init_regulator()
572 vdds_dsi = devm_regulator_get(&dpi->pdev->dev, "vdds_dsi"); in dpi_init_regulator()
579 dpi->vdds_dsi_reg = vdds_dsi; in dpi_init_regulator()
584 static void dpi_init_pll(struct dpi_data *dpi) in dpi_init_pll() argument
588 if (dpi->pll) in dpi_init_pll()
591 pll = dpi_get_pll(dpi->output.dispc_channel); in dpi_init_pll()
597 dss_ctrl_pll_set_control_mux(pll->id, dpi->output.dispc_channel); in dpi_init_pll()
604 dpi->pll = pll; in dpi_init_pll()
608 * Return a hardcoded channel for the DPI output. This should work for
652 struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); in dpi_connect() local
656 r = dpi_init_regulator(dpi); in dpi_connect()
660 dpi_init_pll(dpi); in dpi_connect()
711 struct dpi_data *dpi = dpi_get_data_from_pdev(pdev); in dpi_init_output() local
712 struct omap_dss_device *out = &dpi->output; in dpi_init_output()
717 out->name = "dpi.0"; in dpi_init_output()
719 out->ops.dpi = &dpi_ops; in dpi_init_output()
727 struct dpi_data *dpi = dpi_get_data_from_pdev(pdev); in dpi_uninit_output() local
728 struct omap_dss_device *out = &dpi->output; in dpi_uninit_output()
736 struct dpi_data *dpi = port->data; in dpi_init_output_port() local
737 struct omap_dss_device *out = &dpi->output; in dpi_init_output_port()
747 out->name = "dpi.2"; in dpi_init_output_port()
750 out->name = "dpi.1"; in dpi_init_output_port()
754 out->name = "dpi.0"; in dpi_init_output_port()
763 out->ops.dpi = &dpi_ops; in dpi_init_output_port()
771 struct dpi_data *dpi = port->data; in dpi_uninit_output_port() local
772 struct omap_dss_device *out = &dpi->output; in dpi_uninit_output_port()
780 struct dpi_data *dpi; in dpi_bind() local
782 dpi = devm_kzalloc(&pdev->dev, sizeof(*dpi), GFP_KERNEL); in dpi_bind()
783 if (!dpi) in dpi_bind()
786 dpi->pdev = pdev; in dpi_bind()
788 platform_set_drvdata(pdev, dpi); in dpi_bind()
790 mutex_init(&dpi->lock); in dpi_bind()
840 struct dpi_data *dpi; in dpi_init_port() local
845 dpi = devm_kzalloc(&pdev->dev, sizeof(*dpi), GFP_KERNEL); in dpi_init_port()
846 if (!dpi) in dpi_init_port()
859 dpi->data_lines = datalines; in dpi_init_port()
863 dpi->pdev = pdev; in dpi_init_port()
864 port->data = dpi; in dpi_init_port()
866 mutex_init(&dpi->lock); in dpi_init_port()
870 dpi->port_initialized = true; in dpi_init_port()
882 struct dpi_data *dpi = port->data; in dpi_uninit_port() local
884 if (!dpi->port_initialized) in dpi_uninit_port()