From 1b0421bebf9a12df29ad571fe7962427fe6dd07e Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Sat, 8 Dec 2018 10:53:19 +0800 Subject: [PATCH] drm/rockchip: rgb: support generic phy interface Change-Id: Ia74a29ee0ac0c7322cc38faddff845d8c5cedfb3 Signed-off-by: Wyon Bi --- drivers/gpu/drm/rockchip/rockchip_rgb.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c index 2da77ab57313..e7cf0a3f3d7e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "rockchip_drm_drv.h" #include "rockchip_drm_vop.h" @@ -51,6 +52,7 @@ struct rockchip_rgb { struct drm_bridge *bridge; struct drm_connector connector; struct drm_encoder encoder; + struct phy *phy; struct regmap *grf; bool data_sync; const struct rockchip_rgb_funcs *funcs; @@ -107,12 +109,23 @@ struct drm_connector_helper_funcs rockchip_rgb_connector_helper_funcs = { static void rockchip_rgb_encoder_enable(struct drm_encoder *encoder) { struct rockchip_rgb *rgb = encoder_to_rgb(encoder); + int ret; pinctrl_pm_select_default_state(rgb->dev); if (rgb->funcs && rgb->funcs->enable) rgb->funcs->enable(rgb); + if (rgb->phy) { + ret = phy_set_mode(rgb->phy, PHY_MODE_VIDEO_TTL); + if (ret) { + dev_err(rgb->dev, "failed to set phy mode: %d\n", ret); + return; + } + + phy_power_on(rgb->phy); + } + if (rgb->panel) { drm_panel_prepare(rgb->panel); drm_panel_enable(rgb->panel); @@ -128,6 +141,9 @@ static void rockchip_rgb_encoder_disable(struct drm_encoder *encoder) drm_panel_unprepare(rgb->panel); } + if (rgb->phy) + phy_power_off(rgb->phy); + if (rgb->funcs && rgb->funcs->disable) rgb->funcs->disable(rgb); @@ -299,6 +315,13 @@ static int rockchip_rgb_probe(struct platform_device *pdev) } } + rgb->phy = devm_phy_optional_get(dev, "phy"); + if (IS_ERR(rgb->phy)) { + ret = PTR_ERR(rgb->phy); + dev_err(dev, "failed to get phy: %d\n", ret); + return ret; + } + return component_add(dev, &rockchip_rgb_component_ops); }