diff --git a/drivers/video/drm/rockchip_phy.c b/drivers/video/drm/rockchip_phy.c index b92511e8db..2f5d275d96 100644 --- a/drivers/video/drm/rockchip_phy.c +++ b/drivers/video/drm/rockchip_phy.c @@ -73,3 +73,14 @@ long rockchip_phy_round_rate(struct rockchip_phy *phy, unsigned long rate) return 0; } + +int rockchip_phy_set_mode(struct rockchip_phy *phy, enum phy_mode mode) +{ + if (!phy) + return -ENODEV; + + if (phy->funcs && phy->funcs->set_mode) + return phy->funcs->set_mode(phy, mode); + + return 0; +} diff --git a/drivers/video/drm/rockchip_phy.h b/drivers/video/drm/rockchip_phy.h index ae0f9d49f4..479dbb059c 100644 --- a/drivers/video/drm/rockchip_phy.h +++ b/drivers/video/drm/rockchip_phy.h @@ -7,6 +7,13 @@ #ifndef _ROCKCHIP_PHY_H_ #define _ROCKCHIP_PHY_H_ +enum phy_mode { + PHY_MODE_INVALID, + PHY_MODE_VIDEO_MIPI, + PHY_MODE_VIDEO_LVDS, + PHY_MODE_VIDEO_TTL, +}; + struct rockchip_phy; struct rockchip_phy_funcs { @@ -16,6 +23,7 @@ struct rockchip_phy_funcs { unsigned long (*set_pll)(struct rockchip_phy *phy, unsigned long rate); int (*set_bus_width)(struct rockchip_phy *phy, u32 bus_width); long (*round_rate)(struct rockchip_phy *phy, unsigned long rate); + int (*set_mode)(struct rockchip_phy *phy, enum phy_mode mode); }; struct rockchip_phy { @@ -31,5 +39,6 @@ unsigned long rockchip_phy_set_pll(struct rockchip_phy *phy, unsigned long rate); int rockchip_phy_set_bus_width(struct rockchip_phy *phy, u32 bus_width); long rockchip_phy_round_rate(struct rockchip_phy *phy, unsigned long rate); +int rockchip_phy_set_mode(struct rockchip_phy *phy, enum phy_mode mode); #endif