@@ -190,7 +190,7 @@ void sun4i_tcon_set_status(struct sun4i_tcon *tcon,
const struct drm_encoder *encoder,
bool enabled)
{
- bool is_lvds = false;
+ bool is_lvds = false, is_dsi = false;
int channel;
switch (encoder->encoder_type) {
@@ -198,6 +198,8 @@ void sun4i_tcon_set_status(struct sun4i_tcon *tcon,
is_lvds = true;
fallthrough;
case DRM_MODE_ENCODER_DSI:
+ is_dsi = true;
+ fallthrough;
case DRM_MODE_ENCODER_NONE:
channel = 0;
break;
@@ -221,6 +223,12 @@ void sun4i_tcon_set_status(struct sun4i_tcon *tcon,
sun4i_tcon_lvds_set_status(tcon, encoder, true);
sun4i_tcon_channel_set_status(tcon, channel, enabled);
+
+ if (is_dsi) {
+ /* turn DSI phy on or off */
+ (enabled) ? sun6i_dsi_phy_power_on(encoder)
+ : sun6i_dsi_phy_power_off(encoder);
+ }
}
void sun4i_tcon_enable_vblank(struct sun4i_tcon *tcon, bool enable)
Poweron/off the DSI PHY when the crtc is enabled/disabled. This allows the modeset helpers to manage the DSI sink while preserving the old drm_panel_<prepare,enable> and drm_panel_<disable,unprepare> sequences. Signed-off-by: Brandon Cheo Fusi <fusibrandon13@gmail.com> --- drivers/gpu/drm/sun4i/sun4i_tcon.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)