{
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        DECLARE_COMPLETION_ONSTACK(completion);
-       int r;
+       int r, i;
+       unsigned mask;
 
        DSSDBGF();
 
        if (r)
                return r;
 
+       mask = 0;
+
+       for (i = 0; i < dsi->num_lanes_supported; ++i) {
+               if (dsi->lanes[i].function == DSI_LANE_UNUSED)
+                       continue;
+               mask |= 1 << i;
+       }
        /* Assert TxRequestEsc for data lanes and TxUlpsClk for clk lane */
        /* LANEx_ULPS_SIG2 */
-       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, (1 << 0) | (1 << 1) | (1 << 2),
-               7, 5);
+       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, mask, 9, 5);
 
        /* flush posted write and wait for SCP interface to finish the write */
        dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG2);
                        DSI_CIO_IRQ_ULPSACTIVENOT_ALL0);
 
        /* Reset LANEx_ULPS_SIG2 */
-       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, (0 << 0) | (0 << 1) | (0 << 2),
-               7, 5);
+       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, 0, 9, 5);
 
        /* flush posted write and wait for SCP interface to finish the write */
        dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG2);