Expose underlying implementation of bridge's enable/disable functions, so it would be possible to use them in other parts of the driver. Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> Cc: Andrzej Hajda <a.hajda@xxxxxxxxxxx> Cc: Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx> Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxx> Cc: Cory Tusar <cory.tusar@xxxxxxxx> Cc: Chris Healy <cphealy@xxxxxxxxx> Cc: Lucas Stach <l.stach@xxxxxxxxxxxxxx> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx Cc: linux-kernel@xxxxxxxxxxxxxxx --- drivers/gpu/drm/bridge/tc358767.c | 32 ++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index 8a8d605021f0..3c252ae0ee6f 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -1222,39 +1222,43 @@ static void tc_bridge_pre_enable(struct drm_bridge *bridge) drm_panel_prepare(tc->panel); } -static void tc_bridge_enable(struct drm_bridge *bridge) +static int __tc_bridge_enable(struct tc_data *tc) { - struct tc_data *tc = bridge_to_tc(bridge); int ret; ret = tc_get_display_props(tc); if (ret < 0) { dev_err(tc->dev, "failed to read display props: %d\n", ret); - return; + return ret; } ret = tc_main_link_enable(tc); if (ret < 0) { dev_err(tc->dev, "main link enable error: %d\n", ret); - return; + return ret; } ret = tc_stream_enable(tc); if (ret < 0) { dev_err(tc->dev, "main link stream start error: %d\n", ret); tc_main_link_disable(tc); - return; + return ret; } - drm_panel_enable(tc->panel); + return 0; } -static void tc_bridge_disable(struct drm_bridge *bridge) +static void tc_bridge_enable(struct drm_bridge *bridge) { struct tc_data *tc = bridge_to_tc(bridge); - int ret; - drm_panel_disable(tc->panel); + if (!__tc_bridge_enable(tc)) + drm_panel_enable(tc->panel); +} + +static int __tc_bridge_disable(struct tc_data *tc) +{ + int ret; ret = tc_stream_disable(tc); if (ret < 0) @@ -1263,6 +1267,16 @@ static void tc_bridge_disable(struct drm_bridge *bridge) ret = tc_main_link_disable(tc); if (ret < 0) dev_err(tc->dev, "main link disable error: %d\n", ret); + + return ret; +} + +static void tc_bridge_disable(struct drm_bridge *bridge) +{ + struct tc_data *tc = bridge_to_tc(bridge); + + drm_panel_disable(tc->panel); + __tc_bridge_disable(tc); } static void tc_bridge_post_disable(struct drm_bridge *bridge) -- 2.21.0 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel