struct gb_sdio_command_request request = {0};
        struct gb_sdio_command_response response;
        struct mmc_data *data = host->mrq->data;
+       unsigned int timeout_ms;
        u8 cmd_flags;
        u8 cmd_type;
        int i;
                request.data_blksz = cpu_to_le16(data->blksz);
        }
 
-       ret = gb_operation_sync(host->connection, GB_SDIO_TYPE_COMMAND,
-                               &request, sizeof(request), &response,
-                               sizeof(response));
+       timeout_ms = cmd->busy_timeout ? cmd->busy_timeout :
+               GB_OPERATION_TIMEOUT_DEFAULT;
+
+       ret = gb_operation_sync_timeout(host->connection, GB_SDIO_TYPE_COMMAND,
+                                       &request, sizeof(request), &response,
+                                       sizeof(response), timeout_ms);
        if (ret < 0)
                goto out;