--- x/drivers/media/tuners/xc2028.c +++ y/drivers/media/tuners/xc2028.c @@ -1326,6 +1326,17 @@ static void xc2028_dvb_release(struct dv struct xc2028_data *priv = fe->tuner_priv; tuner_dbg("%s called\n", __func__); + for (;;) { + bool wait; + + mutex_lock(&priv->lock); + wait = priv->state == XC2028_WAITING_FIRMWARE; + mutex_unlock(&priv->lock); + if (wait) + msleep(50); + else + break; + } mutex_lock(&xc2028_list_mutex);