Lines Matching refs:dvo

101 	struct sti_dvo *dvo;  member
108 int dvo_awg_generate_code(struct sti_dvo *dvo, u8 *ram_size, u32 *ram_code) in dvo_awg_generate_code() argument
110 struct drm_display_mode *mode = &dvo->mode; in dvo_awg_generate_code()
111 struct dvo_config *config = dvo->config; in dvo_awg_generate_code()
144 static void dvo_awg_configure(struct sti_dvo *dvo, u32 *awg_ram_code, int nb) in dvo_awg_configure() argument
152 dvo->regs + DVO_DIGSYNC_INSTR_I + i * 4); in dvo_awg_configure()
154 writel(0, dvo->regs + DVO_DIGSYNC_INSTR_I + i * 4); in dvo_awg_configure()
156 writel(DVO_AWG_CTRL_EN, dvo->regs + DVO_AWG_DIGSYNC_CTRL); in dvo_awg_configure()
161 struct sti_dvo *dvo = bridge->driver_private; in sti_dvo_disable() local
163 if (!dvo->enabled) in sti_dvo_disable()
168 if (dvo->config->awg_fwgen_fct) in sti_dvo_disable()
169 writel(0x00000000, dvo->regs + DVO_AWG_DIGSYNC_CTRL); in sti_dvo_disable()
171 writel(0x00000000, dvo->regs + DVO_DOF_CFG); in sti_dvo_disable()
173 if (dvo->panel) in sti_dvo_disable()
174 dvo->panel->funcs->disable(dvo->panel); in sti_dvo_disable()
177 clk_disable_unprepare(dvo->clk_pix); in sti_dvo_disable()
178 clk_disable_unprepare(dvo->clk); in sti_dvo_disable()
180 dvo->enabled = false; in sti_dvo_disable()
185 struct sti_dvo *dvo = bridge->driver_private; in sti_dvo_pre_enable() local
186 struct dvo_config *config = dvo->config; in sti_dvo_pre_enable()
191 if (dvo->enabled) in sti_dvo_pre_enable()
195 writel(0x00000000, dvo->regs + DVO_DOF_CFG); in sti_dvo_pre_enable()
196 writel(0x00000000, dvo->regs + DVO_AWG_DIGSYNC_CTRL); in sti_dvo_pre_enable()
202 if (!dvo_awg_generate_code(dvo, &nb_instr, awg_ram_code)) in sti_dvo_pre_enable()
203 dvo_awg_configure(dvo, awg_ram_code, nb_instr); in sti_dvo_pre_enable()
209 if (clk_prepare_enable(dvo->clk_pix)) in sti_dvo_pre_enable()
211 if (clk_prepare_enable(dvo->clk)) in sti_dvo_pre_enable()
214 if (dvo->panel) in sti_dvo_pre_enable()
215 dvo->panel->funcs->enable(dvo->panel); in sti_dvo_pre_enable()
218 writel(config->lowbyte, dvo->regs + DVO_LUT_PROG_LOW); in sti_dvo_pre_enable()
219 writel(config->midbyte, dvo->regs + DVO_LUT_PROG_MID); in sti_dvo_pre_enable()
220 writel(config->highbyte, dvo->regs + DVO_LUT_PROG_HIGH); in sti_dvo_pre_enable()
224 writel(val, dvo->regs + DVO_DOF_CFG); in sti_dvo_pre_enable()
226 dvo->enabled = true; in sti_dvo_pre_enable()
233 struct sti_dvo *dvo = bridge->driver_private; in sti_dvo_set_mode() local
234 struct sti_mixer *mixer = to_sti_mixer(dvo->encoder->crtc); in sti_dvo_set_mode()
241 memcpy(&dvo->mode, mode, sizeof(struct drm_display_mode)); in sti_dvo_set_mode()
246 clkp = dvo->clk_main_parent; in sti_dvo_set_mode()
248 clkp = dvo->clk_aux_parent; in sti_dvo_set_mode()
251 clk_set_parent(dvo->clk_pix, clkp); in sti_dvo_set_mode()
252 clk_set_parent(dvo->clk, clkp); in sti_dvo_set_mode()
256 ret = clk_set_rate(dvo->clk_pix, rate); in sti_dvo_set_mode()
262 ret = clk_set_rate(dvo->clk, rate); in sti_dvo_set_mode()
269 dvo->config = &rgb_24bit_de_cfg; in sti_dvo_set_mode()
289 struct sti_dvo *dvo = dvo_connector->dvo; in sti_dvo_connector_get_modes() local
291 if (dvo->panel) in sti_dvo_connector_get_modes()
292 return dvo->panel->funcs->get_modes(dvo->panel); in sti_dvo_connector_get_modes()
308 struct sti_dvo *dvo = dvo_connector->dvo; in sti_dvo_connector_mode_valid() local
310 result = clk_round_rate(dvo->clk_pix, target); in sti_dvo_connector_mode_valid()
343 struct sti_dvo *dvo = dvo_connector->dvo; in sti_dvo_connector_detect() local
347 if (!dvo->panel) in sti_dvo_connector_detect()
348 dvo->panel = of_drm_find_panel(dvo->panel_node); in sti_dvo_connector_detect()
350 if (dvo->panel) in sti_dvo_connector_detect()
351 if (!drm_panel_attach(dvo->panel, connector)) in sti_dvo_connector_detect()
391 struct sti_dvo *dvo = dev_get_drvdata(dev); in sti_dvo_bind() local
400 dvo->drm_dev = drm_dev; in sti_dvo_bind()
410 connector->dvo = dvo; in sti_dvo_bind()
416 bridge->driver_private = dvo; in sti_dvo_bind()
418 bridge->of_node = dvo->dev.of_node; in sti_dvo_bind()
431 dvo->bridge = bridge; in sti_dvo_bind()
434 dvo->encoder = encoder; in sti_dvo_bind()
468 struct sti_dvo *dvo = dev_get_drvdata(dev); in sti_dvo_unbind() local
470 drm_bridge_remove(dvo->bridge); in sti_dvo_unbind()
481 struct sti_dvo *dvo; in sti_dvo_probe() local
487 dvo = devm_kzalloc(dev, sizeof(*dvo), GFP_KERNEL); in sti_dvo_probe()
488 if (!dvo) { in sti_dvo_probe()
493 dvo->dev = pdev->dev; in sti_dvo_probe()
500 dvo->regs = devm_ioremap_nocache(dev, res->start, in sti_dvo_probe()
502 if (IS_ERR(dvo->regs)) in sti_dvo_probe()
503 return PTR_ERR(dvo->regs); in sti_dvo_probe()
505 dvo->clk_pix = devm_clk_get(dev, "dvo_pix"); in sti_dvo_probe()
506 if (IS_ERR(dvo->clk_pix)) { in sti_dvo_probe()
508 return PTR_ERR(dvo->clk_pix); in sti_dvo_probe()
511 dvo->clk = devm_clk_get(dev, "dvo"); in sti_dvo_probe()
512 if (IS_ERR(dvo->clk)) { in sti_dvo_probe()
514 return PTR_ERR(dvo->clk); in sti_dvo_probe()
517 dvo->clk_main_parent = devm_clk_get(dev, "main_parent"); in sti_dvo_probe()
518 if (IS_ERR(dvo->clk_main_parent)) { in sti_dvo_probe()
520 dvo->clk_main_parent = NULL; in sti_dvo_probe()
523 dvo->clk_aux_parent = devm_clk_get(dev, "aux_parent"); in sti_dvo_probe()
524 if (IS_ERR(dvo->clk_aux_parent)) { in sti_dvo_probe()
526 dvo->clk_aux_parent = NULL; in sti_dvo_probe()
529 dvo->panel_node = of_parse_phandle(np, "sti,panel", 0); in sti_dvo_probe()
530 if (!dvo->panel_node) in sti_dvo_probe()
533 platform_set_drvdata(pdev, dvo); in sti_dvo_probe()