struct stv *state = fe->demodulator_priv;
        u8 i2crpt = state->i2crpt & ~0x86;
 
-       if (enable)
-               mutex_lock(&state->base->i2c_lock);
+       /*
+        * mutex_lock note: Concurrent I2C gate bus accesses must be
+        * prevented (STV0910 = dual demod on a single IC with a single I2C
+        * gate/bus, and two tuners attached), similar to most (if not all)
+        * other I2C host interfaces/busses.
+        *
+        * enable=1 (open I2C gate) will grab the lock
+        * enable=0 (close I2C gate) releases the lock
+        */
 
-       if (enable)
+       if (enable) {
+               mutex_lock(&state->base->i2c_lock);
                i2crpt |= 0x80;
-       else
+       } else {
                i2crpt |= 0x02;
+       }
 
        if (write_reg(state, state->nr ? RSTV0910_P2_I2CRPT :
-                     RSTV0910_P1_I2CRPT, i2crpt) < 0)
+                     RSTV0910_P1_I2CRPT, i2crpt) < 0) {
+               /* don't hold the I2C bus lock on failure */
+               mutex_unlock(&state->base->i2c_lock);
+               dev_err(&state->base->i2c->dev,
+                       "%s() write_reg failure (enable=%d)\n",
+                       __func__, enable);
                return -EIO;
+       }
 
        state->i2crpt = i2crpt;