if (--dpi->refcount != 0)
                return;
 
-       if (dpi->pinctrl && dpi->pins_gpio)
-               pinctrl_select_state(dpi->pinctrl, dpi->pins_gpio);
-
        mtk_dpi_disable(dpi);
        clk_disable_unprepare(dpi->pixel_clk);
        clk_disable_unprepare(dpi->engine_clk);
                goto err_pixel;
        }
 
-       if (dpi->pinctrl && dpi->pins_dpi)
-               pinctrl_select_state(dpi->pinctrl, dpi->pins_dpi);
-
        return 0;
 
 err_pixel:
        struct mtk_dpi *dpi = bridge_to_dpi(bridge);
 
        mtk_dpi_power_off(dpi);
+
+       if (dpi->pinctrl && dpi->pins_gpio)
+               pinctrl_select_state(dpi->pinctrl, dpi->pins_gpio);
 }
 
 static void mtk_dpi_bridge_enable(struct drm_bridge *bridge)
 {
        struct mtk_dpi *dpi = bridge_to_dpi(bridge);
 
+       if (dpi->pinctrl && dpi->pins_dpi)
+               pinctrl_select_state(dpi->pinctrl, dpi->pins_dpi);
+
        mtk_dpi_power_on(dpi);
        mtk_dpi_set_display_mode(dpi, &dpi->mode);
        mtk_dpi_enable(dpi);