Lines Matching +full:edp +full:- +full:panel

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Author: Andy Yan <andy.yan@rock-chips.com>
7 * Yakir Yang <ykk@rock-chips.com>
8 * Jeff Chen <jeff.chen@rock-chips.com>
53 * struct rockchip_dp_chip_data - splite the grf setting of kind of chips
107 if (!field->valid)
110 mask = GENMASK(field->msb, field->lsb);
111 val <<= field->lsb;
113 return rockchip_grf_write(grf, field->reg, mask, val);
118 reset_control_assert(dp->rst);
120 reset_control_deassert(dp->rst);
122 reset_control_assert(dp->apbrst);
124 reset_control_deassert(dp->apbrst);
134 ret = clk_prepare_enable(dp->pclk);
136 DRM_DEV_ERROR(dp->dev, "failed to enable pclk %d\n", ret);
142 DRM_DEV_ERROR(dp->dev, "failed to dp pre init %d\n", ret);
143 clk_disable_unprepare(dp->pclk);
147 ret = rockchip_grf_field_write(dp->grf, &dp->data->edp_mode, 1);
149 DRM_DEV_ERROR(dp->dev, "failed to set edp mode %d\n", ret);
159 ret = rockchip_grf_field_write(dp->grf, &dp->data->edp_mode, 0);
161 DRM_DEV_ERROR(dp->dev, "failed to set edp mode %d\n", ret);
163 clk_disable_unprepare(dp->pclk);
171 struct drm_display_info *di = &connector->display_info;
172 /* VOP couldn't output YUV video format for eDP rightly */
175 if ((di->color_formats & mask)) {
177 di->color_formats &= ~mask;
178 di->color_formats |= DRM_COLOR_FORMAT_RGB444;
179 di->bpc = 8;
216 return conn_state->crtc;
237 if (old_crtc_state && old_crtc_state->self_refresh_active)
240 ret = clk_prepare_enable(dp->grfclk);
242 DRM_DEV_ERROR(dp->dev, "failed to enable grfclk %d\n", ret);
246 ret = drm_of_encoder_active_endpoint(dp->dev->of_node, encoder, &endpoint);
256 sprintf(name, "%s vp%d", remote_port_parent->full_name, port_id);
259 remote_port_parent->full_name, endpoint.id ? "vopl" : "vopb");
263 DRM_DEV_DEBUG(dp->dev, "vop %s output to dp\n", (ret) ? "LIT" : "BIG");
266 ret = rockchip_grf_field_write(dp->grf, &dp->data->lcdc_sel, endpoint.id);
268 DRM_DEV_ERROR(dp->dev, "Could not write to GRF: %d\n", ret);
270 clk_disable_unprepare(dp->grfclk);
287 /* If we're not entering self-refresh, no need to wait for vact */
288 if (!new_crtc_state || !new_crtc_state->self_refresh_active)
293 DRM_DEV_ERROR(dp->dev, "line flag irq timed out\n");
302 struct drm_display_info *di = &conn_state->connector->display_info;
306 * format to eDP controller, and if eDP panel only support RGB8,
307 * then eDP controller should cut down the video data, not via VOP
312 s->output_mode = ROCKCHIP_OUT_MODE_AAAA;
313 s->output_type = DRM_MODE_CONNECTOR_eDP;
314 s->output_bpc = di->bpc;
329 struct device *dev = dp->dev;
330 struct device_node *np = dev->of_node;
332 dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
333 if (IS_ERR(dp->grf)) {
335 return PTR_ERR(dp->grf);
338 dp->grfclk = devm_clk_get(dev, "grf");
339 if (PTR_ERR(dp->grfclk) == -ENOENT) {
340 dp->grfclk = NULL;
341 } else if (PTR_ERR(dp->grfclk) == -EPROBE_DEFER) {
342 return -EPROBE_DEFER;
343 } else if (IS_ERR(dp->grfclk)) {
345 return PTR_ERR(dp->grfclk);
348 dp->pclk = devm_clk_get(dev, "pclk");
349 if (IS_ERR(dp->pclk)) {
351 return PTR_ERR(dp->pclk);
354 dp->rst = devm_reset_control_get(dev, "dp");
355 if (IS_ERR(dp->rst)) {
357 return PTR_ERR(dp->rst);
360 dp->apbrst = devm_reset_control_get_optional(dev, "apb");
361 if (IS_ERR(dp->apbrst)) {
363 return PTR_ERR(dp->apbrst);
371 struct drm_encoder *encoder = &dp->encoder.encoder;
372 struct drm_device *drm_dev = dp->drm_dev;
373 struct device *dev = dp->dev;
376 encoder->possible_crtcs = drm_of_find_possible_crtcs(drm_dev,
377 dev->of_node);
378 DRM_DEBUG_KMS("possible_crtcs = 0x%x\n", encoder->possible_crtcs);
399 dp->drm_dev = drm_dev;
407 rockchip_drm_encoder_set_crtc_endpoint_id(&dp->encoder,
408 dev->of_node, 0, 0);
410 dp->plat_data.encoder = &dp->encoder.encoder;
412 ret = analogix_dp_bind(dp->adp, drm_dev);
418 dp->encoder.encoder.funcs->destroy(&dp->encoder.encoder);
427 analogix_dp_unbind(dp->adp);
428 dp->encoder.encoder.funcs->destroy(&dp->encoder.encoder);
443 * If drm_of_find_panel_or_bridge() returns -ENODEV, there may be no valid panel
444 * or bridge nodes. The driver should go on for the driver-free bridge or the DP
447 ret = drm_of_find_panel_or_bridge(dp->dev->of_node, 1, 0, &plat_data->panel, NULL);
448 if (ret && ret != -ENODEV)
451 return component_add(dp->dev, &rockchip_dp_component_ops);
456 struct device *dev = &pdev->dev;
465 return -ENODEV;
469 return -ENOMEM;
475 if (dp_data[i].reg == res->start) {
476 dp->data = &dp_data[i];
483 if (!dp->data)
484 return dev_err_probe(dev, -EINVAL, "no chip-data for %s node\n",
485 dev->of_node->name);
487 dp->dev = dev;
488 dp->adp = ERR_PTR(-ENODEV);
489 dp->plat_data.dev_type = dp->data->chip_type;
490 dp->plat_data.power_on = rockchip_dp_poweron;
491 dp->plat_data.power_off = rockchip_dp_powerdown;
492 dp->plat_data.get_modes = rockchip_dp_get_modes;
500 dp->adp = analogix_dp_probe(dev, &dp->plat_data);
501 if (IS_ERR(dp->adp))
502 return PTR_ERR(dp->adp);
504 ret = devm_of_dp_aux_populate_bus(analogix_dp_get_aux(dp->adp), rockchip_dp_link_panel);
507 * If devm_of_dp_aux_populate_bus() returns -ENODEV, the done_probing() will not
511 * NOTE: The devm_of_dp_aux_populate_bus() is allowed to return -EPROBE_DEFER.
513 if (ret != -ENODEV)
514 return dev_err_probe(dp->dev, ret, "failed to populate aux bus\n");
516 return rockchip_dp_link_panel(analogix_dp_get_aux(dp->adp));
524 component_del(&pdev->dev, &rockchip_dp_component_ops);
531 if (IS_ERR(dp->adp))
534 return analogix_dp_suspend(dp->adp);
541 if (IS_ERR(dp->adp))
544 return analogix_dp_resume(dp->adp);
583 {.compatible = "rockchip,rk3288-dp", .data = &rk3288_dp },
584 {.compatible = "rockchip,rk3399-edp", .data = &rk3399_edp },
585 {.compatible = "rockchip,rk3588-edp", .data = &rk3588_edp },
594 .name = "rockchip-dp",