Lines Matching full:dp
3 * Rockchip SoC DP (Display Port) interface driver.
122 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_audio_hw_params() local
124 rockchip_grf_field_write(dp->grf, &dp->data->spdif_sel, in rockchip_dp_audio_hw_params()
126 rockchip_grf_field_write(dp->grf, &dp->data->i2s_sel, in rockchip_dp_audio_hw_params()
129 return analogix_dp_audio_hw_params(dp->adp, daifmt, params); in rockchip_dp_audio_hw_params()
134 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_audio_shutdown() local
136 analogix_dp_audio_shutdown(dp->adp); in rockchip_dp_audio_shutdown()
138 rockchip_grf_field_write(dp->grf, &dp->data->spdif_sel, 0); in rockchip_dp_audio_shutdown()
139 rockchip_grf_field_write(dp->grf, &dp->data->i2s_sel, 0); in rockchip_dp_audio_shutdown()
144 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_audio_startup() local
146 return analogix_dp_audio_startup(dp->adp); in rockchip_dp_audio_startup()
152 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_audio_get_eld() local
154 return analogix_dp_audio_get_eld(dp->adp, buf, len); in rockchip_dp_audio_get_eld()
166 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_match_by_id() local
169 return dp->id == *id; in rockchip_dp_match_by_id()
184 static int rockchip_dp_pre_init(struct rockchip_dp_device *dp) in rockchip_dp_pre_init() argument
186 reset_control_assert(dp->rst); in rockchip_dp_pre_init()
188 reset_control_deassert(dp->rst); in rockchip_dp_pre_init()
190 reset_control_assert(dp->apb_reset); in rockchip_dp_pre_init()
192 reset_control_deassert(dp->apb_reset); in rockchip_dp_pre_init()
199 struct rockchip_dp_device *dp = to_dp(plat_data); in rockchip_dp_poweron_start() local
202 ret = rockchip_dp_pre_init(dp); in rockchip_dp_poweron_start()
204 DRM_DEV_ERROR(dp->dev, "failed to dp pre init %d\n", ret); in rockchip_dp_poweron_start()
208 return rockchip_grf_field_write(dp->grf, &dp->data->edp_mode, 1); in rockchip_dp_poweron_start()
213 struct rockchip_dp_device *dp = to_dp(plat_data); in rockchip_dp_powerdown() local
215 return rockchip_grf_field_write(dp->grf, &dp->data->edp_mode, 0); in rockchip_dp_powerdown()
237 struct rockchip_dp_device *dp = to_dp(encoder); in rockchip_dp_loader_protect() local
238 struct analogix_dp_plat_data *plat_data = &dp->plat_data; in rockchip_dp_loader_protect()
243 secondary = rockchip_dp_find_by_id(dp->dev->driver, !dp->id); in rockchip_dp_loader_protect()
256 ret = analogix_dp_loader_protect(dp->adp); in rockchip_dp_loader_protect()
271 if (of_device_is_compatible(bridge->of_node, "dp-connector")) in rockchip_dp_skip_connector()
284 struct rockchip_dp_device *dp = to_dp(plat_data); in rockchip_dp_bridge_attach() local
285 struct rockchip_drm_sub_dev *sdev = &dp->sub_dev; in rockchip_dp_bridge_attach()
299 sdev->of_node = dp->dev->of_node; in rockchip_dp_bridge_attach()
310 struct rockchip_dp_device *dp = to_dp(plat_data); in rockchip_dp_bridge_detach() local
311 struct rockchip_drm_sub_dev *sdev = &dp->sub_dev; in rockchip_dp_bridge_detach()
354 struct rockchip_dp_device *dp = to_dp(encoder); in rockchip_dp_drm_encoder_enable() local
368 ret = drm_of_encoder_active_endpoint_id(dp->dev->of_node, encoder); in rockchip_dp_drm_encoder_enable()
372 DRM_DEV_DEBUG(dp->dev, "vop %s output to dp\n", (ret) ? "LIT" : "BIG"); in rockchip_dp_drm_encoder_enable()
374 ret = rockchip_grf_field_write(dp->grf, &dp->data->lcdc_sel, ret); in rockchip_dp_drm_encoder_enable()
376 DRM_DEV_ERROR(dp->dev, "Could not write to GRF: %d\n", ret); in rockchip_dp_drm_encoder_enable()
382 struct rockchip_dp_device *dp = to_dp(encoder); in rockchip_dp_drm_encoder_disable() local
389 if (dp->plat_data.split_mode) in rockchip_dp_drm_encoder_disable()
392 s->output_if &= ~(dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0); in rockchip_dp_drm_encoder_disable()
405 DRM_DEV_ERROR(dp->dev, "line flag irq timed out\n"); in rockchip_dp_drm_encoder_disable()
413 struct rockchip_dp_device *dp = to_dp(encoder); in rockchip_dp_drm_encoder_atomic_check() local
433 if (dp->plat_data.split_mode) { in rockchip_dp_drm_encoder_atomic_check()
435 s->output_flags |= dp->id ? ROCKCHIP_OUTPUT_DATA_SWAP : 0; in rockchip_dp_drm_encoder_atomic_check()
438 s->output_if |= dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0; in rockchip_dp_drm_encoder_atomic_check()
441 if (dp->plat_data.dual_connector_split) { in rockchip_dp_drm_encoder_atomic_check()
444 if (dp->plat_data.left_display) in rockchip_dp_drm_encoder_atomic_check()
445 s->output_if_left_panel |= dp->id ? in rockchip_dp_drm_encoder_atomic_check()
458 if (dp->max_refresh_rate && dp->min_refresh_rate) { in rockchip_dp_drm_encoder_atomic_check()
459 s->max_refresh_rate = dp->max_refresh_rate; in rockchip_dp_drm_encoder_atomic_check()
460 s->min_refresh_rate = dp->min_refresh_rate; in rockchip_dp_drm_encoder_atomic_check()
494 static int rockchip_dp_of_probe(struct rockchip_dp_device *dp) in rockchip_dp_of_probe() argument
496 struct device *dev = dp->dev; in rockchip_dp_of_probe()
500 dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); in rockchip_dp_of_probe()
501 if (IS_ERR(dp->grf)) { in rockchip_dp_of_probe()
503 return PTR_ERR(dp->grf); in rockchip_dp_of_probe()
507 dp->rst = devm_reset_control_get(dev, "dp"); in rockchip_dp_of_probe()
508 if (IS_ERR(dp->rst)) { in rockchip_dp_of_probe()
509 DRM_DEV_ERROR(dev, "failed to get dp reset control\n"); in rockchip_dp_of_probe()
510 return PTR_ERR(dp->rst); in rockchip_dp_of_probe()
513 dp->apb_reset = devm_reset_control_get_optional(dev, "apb"); in rockchip_dp_of_probe()
514 if (IS_ERR(dp->apb_reset)) { in rockchip_dp_of_probe()
516 return PTR_ERR(dp->apb_reset); in rockchip_dp_of_probe()
522 static int rockchip_dp_drm_create_encoder(struct rockchip_dp_device *dp) in rockchip_dp_drm_create_encoder() argument
524 struct drm_encoder *encoder = &dp->encoder; in rockchip_dp_drm_create_encoder()
525 struct drm_device *drm_dev = dp->drm_dev; in rockchip_dp_drm_create_encoder()
526 struct device *dev = dp->dev; in rockchip_dp_drm_create_encoder()
548 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_bind() local
552 dp->drm_dev = drm_dev; in rockchip_dp_bind()
554 if (!dp->plat_data.left) { in rockchip_dp_bind()
555 ret = rockchip_dp_drm_create_encoder(dp); in rockchip_dp_bind()
561 dp->plat_data.encoder = &dp->encoder; in rockchip_dp_bind()
564 if (dp->data->audio) { in rockchip_dp_bind()
572 dp->audio_pdev = in rockchip_dp_bind()
577 if (IS_ERR(dp->audio_pdev)) { in rockchip_dp_bind()
578 ret = PTR_ERR(dp->audio_pdev); in rockchip_dp_bind()
583 ret = analogix_dp_bind(dp->adp, drm_dev); in rockchip_dp_bind()
590 if (dp->audio_pdev) in rockchip_dp_bind()
591 platform_device_unregister(dp->audio_pdev); in rockchip_dp_bind()
593 dp->encoder.funcs->destroy(&dp->encoder); in rockchip_dp_bind()
600 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_unbind() local
602 if (dp->audio_pdev) in rockchip_dp_unbind()
603 platform_device_unregister(dp->audio_pdev); in rockchip_dp_unbind()
604 analogix_dp_unbind(dp->adp); in rockchip_dp_unbind()
605 dp->encoder.funcs->destroy(&dp->encoder); in rockchip_dp_unbind()
619 struct rockchip_dp_device *dp; in rockchip_dp_probe() local
630 dp = devm_kzalloc(dev, sizeof(*dp), GFP_KERNEL); in rockchip_dp_probe()
631 if (!dp) in rockchip_dp_probe()
647 dp->dev = dev; in rockchip_dp_probe()
648 dp->id = id; in rockchip_dp_probe()
649 dp->adp = ERR_PTR(-ENODEV); in rockchip_dp_probe()
650 dp->data = &dp_data[id]; in rockchip_dp_probe()
651 dp->plat_data.ssc = dp->data->ssc; in rockchip_dp_probe()
652 dp->plat_data.panel = panel; in rockchip_dp_probe()
653 dp->plat_data.dev_type = dp->data->chip_type; in rockchip_dp_probe()
654 dp->plat_data.power_on_start = rockchip_dp_poweron_start; in rockchip_dp_probe()
655 dp->plat_data.power_off = rockchip_dp_powerdown; in rockchip_dp_probe()
656 dp->plat_data.get_modes = rockchip_dp_get_modes; in rockchip_dp_probe()
657 dp->plat_data.attach = rockchip_dp_bridge_attach; in rockchip_dp_probe()
658 dp->plat_data.detach = rockchip_dp_bridge_detach; in rockchip_dp_probe()
659 dp->plat_data.convert_to_split_mode = drm_mode_convert_to_split_mode; in rockchip_dp_probe()
660 dp->plat_data.convert_to_origin_mode = drm_mode_convert_to_origin_mode; in rockchip_dp_probe()
661 dp->plat_data.skip_connector = rockchip_dp_skip_connector(bridge); in rockchip_dp_probe()
662 dp->plat_data.bridge = bridge; in rockchip_dp_probe()
664 ret = rockchip_dp_of_probe(dp); in rockchip_dp_probe()
668 platform_set_drvdata(pdev, dp); in rockchip_dp_probe()
670 dp->adp = analogix_dp_probe(dev, &dp->plat_data); in rockchip_dp_probe()
671 if (IS_ERR(dp->adp)) in rockchip_dp_probe()
672 return PTR_ERR(dp->adp); in rockchip_dp_probe()
674 if (dp->data->split_mode && device_property_read_bool(dev, "split-mode")) { in rockchip_dp_probe()
676 rockchip_dp_find_by_id(dev->driver, !dp->id); in rockchip_dp_probe()
682 dp->plat_data.right = secondary->adp; in rockchip_dp_probe()
683 dp->plat_data.split_mode = true; in rockchip_dp_probe()
684 secondary->plat_data.left = dp->adp; in rockchip_dp_probe()
688 device_property_read_u32(dev, "min-refresh-rate", &dp->min_refresh_rate); in rockchip_dp_probe()
689 device_property_read_u32(dev, "max-refresh-rate", &dp->max_refresh_rate); in rockchip_dp_probe()
691 if (dp->data->split_mode && device_property_read_bool(dev, "dual-connector-split")) { in rockchip_dp_probe()
692 dp->plat_data.dual_connector_split = true; in rockchip_dp_probe()
694 dp->plat_data.left_display = true; in rockchip_dp_probe()
704 analogix_dp_remove(dp->adp); in rockchip_dp_probe()
710 struct rockchip_dp_device *dp = platform_get_drvdata(pdev); in rockchip_dp_remove() local
713 analogix_dp_remove(dp->adp); in rockchip_dp_remove()
720 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_suspend() local
722 if (IS_ERR(dp->adp)) in rockchip_dp_suspend()
725 return analogix_dp_suspend(dp->adp); in rockchip_dp_suspend()
730 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_resume() local
732 if (IS_ERR(dp->adp)) in rockchip_dp_resume()
735 return analogix_dp_resume(dp->adp); in rockchip_dp_resume()
740 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_runtime_suspend() local
742 if (IS_ERR(dp->adp)) in rockchip_dp_runtime_suspend()
745 return analogix_dp_runtime_suspend(dp->adp); in rockchip_dp_runtime_suspend()
750 struct rockchip_dp_device *dp = dev_get_drvdata(dev); in rockchip_dp_runtime_resume() local
752 if (IS_ERR(dp->adp)) in rockchip_dp_runtime_resume()
755 return analogix_dp_runtime_resume(dp->adp); in rockchip_dp_runtime_resume()
814 {.compatible = "rockchip,rk3288-dp", .data = &rk3288_dp },
826 .name = "rockchip-dp",