Re: [PATCH 2/2 FOR 3.4] af9015: fix i2c failures for dual-tuner devices - part 2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14.03.2012 23:14, Malcolm Priestley wrote:
On Wed, 2012-03-14 at 16:27 +0200, Antti Palosaari wrote:
Some changes for previous patch I liked to do.
Just move tuner init and sleep to own functions from the demod
init and sleep functions.  Functionality remains still almost the same.

Signed-off-by: Antti Palosaari<crope@xxxxxx>
---
  drivers/media/dvb/dvb-usb/af9015.c |   74 ++++++++++++++++++++++-------------
  drivers/media/dvb/dvb-usb/af9015.h |    4 +-
  2 files changed, 48 insertions(+), 30 deletions(-)

diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c
index 9307b4ca..7e70ea5 100644
--- a/drivers/media/dvb/dvb-usb/af9015.c
+++ b/drivers/media/dvb/dvb-usb/af9015.c
@@ -1141,18 +1141,7 @@ static int af9015_af9013_init(struct dvb_frontend *fe)
  		return -EAGAIN;

  	ret = priv->init[adap->id](fe);
-	if (ret)
-		goto err_unlock;
-
-	if (priv->tuner_ops_init[adap->id]) {
-		if (fe->ops.i2c_gate_ctrl)
-			fe->ops.i2c_gate_ctrl(fe, 1);
-		ret = priv->tuner_ops_init[adap->id](fe);
-		if (fe->ops.i2c_gate_ctrl)
-			fe->ops.i2c_gate_ctrl(fe, 0);
-	}

-err_unlock:
  	mutex_unlock(&adap->dev->usb_mutex);

  	return ret;
@@ -1168,24 +1157,48 @@ static int af9015_af9013_sleep(struct dvb_frontend *fe)
  	if (mutex_lock_interruptible(&adap->dev->usb_mutex))
  		return -EAGAIN;

-	if (priv->tuner_ops_sleep[adap->id]) {
-		if (fe->ops.i2c_gate_ctrl)
-			fe->ops.i2c_gate_ctrl(fe, 1);
-		ret = priv->tuner_ops_sleep[adap->id](fe);
-		if (fe->ops.i2c_gate_ctrl)
-			fe->ops.i2c_gate_ctrl(fe, 0);
-		if (ret)
-			goto err_unlock;
-	}
-
  	ret = priv->sleep[adap->id](fe);

-err_unlock:
  	mutex_unlock(&adap->dev->usb_mutex);

  	return ret;
  }

+/* override tuner callbacks for resource locking */
+static int af9015_tuner_init(struct dvb_frontend *fe)
+{
+	int ret;
+	struct dvb_usb_adapter *adap = fe->dvb->priv;
+	struct af9015_state *priv = adap->dev->priv;
+
+	if (mutex_lock_interruptible(&adap->dev->usb_mutex))
+		return -EAGAIN;
Hi Antti

I think using mutex_lock_interruptible errors into dvb-usb causes false
errors and errors caused by missed registers.

I prefer to use mutex_lock only return genuine device errors.

IIRC documentation says mutex_lock_interruptible() must be used instead of mutex_lock() when possible. I don't see any reason why I it should be changed.

regards
Antti

--
http://palosaari.fi/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux