Lines Matching refs:lvds

38  * struct rockchip_lvds_soc_data - rockchip lvds Soc private data
43 int (*probe)(struct platform_device *pdev, struct rockchip_lvds *lvds);
54 int output; /* rgb lvds or dual lvds output */
76 static inline void rk3288_writel(struct rockchip_lvds *lvds, u32 offset,
79 writel_relaxed(val, lvds->regs + offset);
80 if (lvds->output == DISPLAY_OUTPUT_LVDS)
82 writel_relaxed(val, lvds->regs + offset + RK3288_LVDS_CH1_OFFSET);
101 else if (strncmp(s, "lvds", 4) == 0)
119 struct rockchip_lvds *lvds = connector_to_lvds(connector);
120 struct drm_panel *panel = lvds->panel;
143 static int rk3288_lvds_poweron(struct rockchip_lvds *lvds)
148 ret = clk_enable(lvds->pclk);
150 DRM_DEV_ERROR(lvds->dev, "failed to enable lvds pclk %d\n", ret);
153 ret = pm_runtime_resume_and_get(lvds->dev);
155 DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret);
156 clk_disable(lvds->pclk);
162 if (lvds->output == DISPLAY_OUTPUT_RGB) {
165 rk3288_writel(lvds, RK3288_LVDS_CH0_REG0, val);
166 rk3288_writel(lvds, RK3288_LVDS_CH0_REG2,
168 rk3288_writel(lvds, RK3288_LVDS_CH0_REG4,
175 rk3288_writel(lvds, RK3288_LVDS_CH0_REG5,
185 rk3288_writel(lvds, RK3288_LVDS_CH0_REG0, val);
186 rk3288_writel(lvds, RK3288_LVDS_CH0_REG1,
193 rk3288_writel(lvds, RK3288_LVDS_CH0_REG2,
202 rk3288_writel(lvds, RK3288_LVDS_CH0_REG4, 0x00);
203 rk3288_writel(lvds, RK3288_LVDS_CH0_REG5, 0x00);
205 rk3288_writel(lvds, RK3288_LVDS_CH0_REG3,
207 rk3288_writel(lvds, RK3288_LVDS_CH0_REGD,
209 rk3288_writel(lvds, RK3288_LVDS_CH0_REG20,
212 rk3288_writel(lvds, RK3288_LVDS_CFG_REGC,
214 rk3288_writel(lvds, RK3288_LVDS_CFG_REG21,
220 static void rk3288_lvds_poweroff(struct rockchip_lvds *lvds)
225 rk3288_writel(lvds, RK3288_LVDS_CFG_REG21,
227 rk3288_writel(lvds, RK3288_LVDS_CFG_REGC,
231 ret = regmap_write(lvds->grf, RK3288_LVDS_GRF_SOC_CON7, val);
233 DRM_DEV_ERROR(lvds->dev, "Could not write to GRF: %d\n", ret);
235 pm_runtime_put(lvds->dev);
236 clk_disable(lvds->pclk);
242 struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
249 if (lvds->output == DISPLAY_OUTPUT_RGB)
250 if (lvds->pins && !IS_ERR(lvds->pins->default_state))
251 pinctrl_select_state(lvds->pins->p,
252 lvds->pins->default_state);
253 val = lvds->format | LVDS_CH0_EN;
254 if (lvds->output == DISPLAY_OUTPUT_RGB)
256 else if (lvds->output == DISPLAY_OUTPUT_DUAL_LVDS)
264 ret = regmap_write(lvds->grf, RK3288_LVDS_GRF_SOC_CON7, val);
266 DRM_DEV_ERROR(lvds->dev, "Could not write to GRF: %d\n", ret);
271 static int rk3288_lvds_set_vop_source(struct rockchip_lvds *lvds,
277 ret = drm_of_encoder_active_endpoint_id(lvds->dev->of_node, encoder);
285 ret = regmap_write(lvds->grf, RK3288_LVDS_GRF_SOC_CON6, val);
294 struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
298 drm_panel_prepare(lvds->panel);
300 ret = rk3288_lvds_poweron(lvds);
302 DRM_DEV_ERROR(lvds->dev, "failed to power on LVDS: %d\n", ret);
303 drm_panel_unprepare(lvds->panel);
309 DRM_DEV_ERROR(lvds->dev, "failed to configure LVDS: %d\n", ret);
310 drm_panel_unprepare(lvds->panel);
314 ret = rk3288_lvds_set_vop_source(lvds, encoder);
316 DRM_DEV_ERROR(lvds->dev, "failed to set VOP source: %d\n", ret);
317 drm_panel_unprepare(lvds->panel);
321 drm_panel_enable(lvds->panel);
326 struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
328 drm_panel_disable(lvds->panel);
329 rk3288_lvds_poweroff(lvds);
330 drm_panel_unprepare(lvds->panel);
333 static int px30_lvds_poweron(struct rockchip_lvds *lvds)
337 ret = pm_runtime_resume_and_get(lvds->dev);
339 DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret);
344 ret = regmap_update_bits(lvds->grf, PX30_LVDS_GRF_PD_VO_CON1,
348 pm_runtime_put(lvds->dev);
353 static void px30_lvds_poweroff(struct rockchip_lvds *lvds)
355 regmap_update_bits(lvds->grf, PX30_LVDS_GRF_PD_VO_CON1,
359 pm_runtime_put(lvds->dev);
365 struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
367 if (lvds->output != DISPLAY_OUTPUT_LVDS) {
368 DRM_DEV_ERROR(lvds->dev, "Unsupported display output %d\n",
369 lvds->output);
374 return regmap_update_bits(lvds->grf, PX30_LVDS_GRF_PD_VO_CON1,
375 PX30_LVDS_FORMAT(lvds->format),
376 PX30_LVDS_FORMAT(lvds->format));
379 static int px30_lvds_set_vop_source(struct rockchip_lvds *lvds,
384 vop = drm_of_encoder_active_endpoint_id(lvds->dev->of_node, encoder);
388 return regmap_update_bits(lvds->grf, PX30_LVDS_GRF_PD_VO_CON1,
395 struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
399 drm_panel_prepare(lvds->panel);
401 ret = px30_lvds_poweron(lvds);
403 DRM_DEV_ERROR(lvds->dev, "failed to power on LVDS: %d\n", ret);
404 drm_panel_unprepare(lvds->panel);
410 DRM_DEV_ERROR(lvds->dev, "failed to configure LVDS: %d\n", ret);
411 drm_panel_unprepare(lvds->panel);
415 ret = px30_lvds_set_vop_source(lvds, encoder);
417 DRM_DEV_ERROR(lvds->dev, "failed to set VOP source: %d\n", ret);
418 drm_panel_unprepare(lvds->panel);
422 drm_panel_enable(lvds->panel);
427 struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
429 drm_panel_disable(lvds->panel);
430 px30_lvds_poweroff(lvds);
431 drm_panel_unprepare(lvds->panel);
449 struct rockchip_lvds *lvds)
453 lvds->regs = devm_platform_ioremap_resource(pdev, 0);
454 if (IS_ERR(lvds->regs))
455 return PTR_ERR(lvds->regs);
457 lvds->pclk = devm_clk_get(lvds->dev, "pclk_lvds");
458 if (IS_ERR(lvds->pclk)) {
459 DRM_DEV_ERROR(lvds->dev, "could not get pclk_lvds\n");
460 return PTR_ERR(lvds->pclk);
463 lvds->pins = devm_kzalloc(lvds->dev, sizeof(*lvds->pins),
465 if (!lvds->pins)
468 lvds->pins->p = devm_pinctrl_get(lvds->dev);
469 if (IS_ERR(lvds->pins->p)) {
470 DRM_DEV_ERROR(lvds->dev, "no pinctrl handle\n");
471 devm_kfree(lvds->dev, lvds->pins);
472 lvds->pins = NULL;
474 lvds->pins->default_state =
475 pinctrl_lookup_state(lvds->pins->p, "lcdc");
476 if (IS_ERR(lvds->pins->default_state)) {
477 DRM_DEV_ERROR(lvds->dev, "no default pinctrl state\n");
478 devm_kfree(lvds->dev, lvds->pins);
479 lvds->pins = NULL;
483 ret = clk_prepare(lvds->pclk);
485 DRM_DEV_ERROR(lvds->dev, "failed to prepare pclk_lvds\n");
493 struct rockchip_lvds *lvds)
498 ret = regmap_update_bits(lvds->grf, PX30_LVDS_GRF_PD_VO_CON1,
505 lvds->dphy = devm_phy_get(&pdev->dev, "dphy");
506 if (IS_ERR(lvds->dphy))
507 return PTR_ERR(lvds->dphy);
509 ret = phy_init(lvds->dphy);
513 ret = phy_set_mode(lvds->dphy, PHY_MODE_LVDS);
517 return phy_power_on(lvds->dphy);
532 .compatible = "rockchip,rk3288-lvds",
536 .compatible = "rockchip,px30-lvds",
546 struct rockchip_lvds *lvds = dev_get_drvdata(dev);
556 lvds->drm_dev = drm_dev;
560 "can't found port point, please init lvds panel port!\n");
567 &lvds->panel, &lvds->bridge);
574 DRM_DEV_ERROR(dev, "lvds port does not have any children\n");
581 if (lvds->panel)
582 remote = lvds->panel->dev->of_node;
584 remote = lvds->bridge->of_node;
587 lvds->output = DISPLAY_OUTPUT_RGB;
589 lvds->output = rockchip_lvds_name_to_output(name);
591 if (lvds->output < 0) {
593 ret = lvds->output;
599 lvds->format = LVDS_VESA_18;
601 lvds->format = rockchip_lvds_name_to_format(name);
603 if (lvds->format < 0) {
605 ret = lvds->format;
609 encoder = &lvds->encoder.encoder;
620 drm_encoder_helper_add(encoder, lvds->soc_data->helper_funcs);
621 connector = &lvds->connector;
623 if (lvds->panel) {
637 ret = drm_bridge_attach(encoder, lvds->bridge, NULL,
642 connector = drm_bridge_connector_init(lvds->drm_dev, encoder);
680 struct rockchip_lvds *lvds = dev_get_drvdata(dev);
683 encoder_funcs = lvds->soc_data->helper_funcs;
684 encoder_funcs->disable(&lvds->encoder.encoder);
686 drm_connector_cleanup(&lvds->connector);
687 drm_encoder_cleanup(&lvds->encoder.encoder);
698 struct rockchip_lvds *lvds;
705 lvds = devm_kzalloc(&pdev->dev, sizeof(*lvds), GFP_KERNEL);
706 if (!lvds)
709 lvds->dev = dev;
713 lvds->soc_data = match->data;
715 lvds->grf = syscon_regmap_lookup_by_phandle(dev->of_node,
717 if (IS_ERR(lvds->grf)) {
719 return PTR_ERR(lvds->grf);
722 ret = lvds->soc_data->probe(pdev, lvds);
728 dev_set_drvdata(dev, lvds);
733 clk_unprepare(lvds->pclk);
741 struct rockchip_lvds *lvds = platform_get_drvdata(pdev);
744 clk_unprepare(lvds->pclk);
751 .name = "rockchip-lvds",