All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/5] lmedm04: Increase Interupt due time to 200 msec.
@ 2015-01-02 13:56 Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 2/5] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb Malcolm Priestley
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-01-02 13:56 UTC (permalink / raw)
  To: linux-media; +Cc: Malcolm Priestley, stable

Ocassionally the device fails to report back an interrupt urb status which
results in false no lock trigger on the RS2000 demodulator.

Increase time from 60 msecs to 200 msecs.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Cc: <stable@vger.kernel.org> # v3.17+
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index 994de53..f1edb29 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -344,9 +344,10 @@ static void lme2510_int_response(struct urb *lme_urb)
 
 	usb_submit_urb(lme_urb, GFP_ATOMIC);
 
-	/* interrupt urb is due every 48 msecs while streaming
-	 *	add 12msecs for system lag */
-	st->int_urb_due = jiffies + msecs_to_jiffies(60);
+	/* Interrupt urb is due every 48 msecs while streaming the buffer
+	 * stores up to 4 periods if missed. Allow 200 msec for next interrupt.
+	 */
+	st->int_urb_due = jiffies + msecs_to_jiffies(200);
 }
 
 static int lme2510_int_read(struct dvb_usb_adapter *adap)
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/5] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb
  2015-01-02 13:56 [PATCH 1/5] lmedm04: Increase Interupt due time to 200 msec Malcolm Priestley
@ 2015-01-02 13:56 ` Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 3/5] lmedm04: create frontend callbacks for signal/snr/ber/ucblocks Malcolm Priestley
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-01-02 13:56 UTC (permalink / raw)
  To: linux-media; +Cc: Malcolm Priestley, stable

A quirk of some older firmwares that report endpoint pipe type as PIPE_BULK
but the endpoint otheriwse functions as interrupt.

Check if usb_endpoint_type is USB_ENDPOINT_XFER_BULK and set as usb_rcvbulkpipe.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Cc: <stable@vger.kernel.org>
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index f1edb29..15db9f6 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -354,6 +354,7 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)
 {
 	struct dvb_usb_device *d = adap_to_d(adap);
 	struct lme2510_state *lme_int = adap_to_priv(adap);
+	struct usb_host_endpoint *ep;
 
 	lme_int->lme_urb = usb_alloc_urb(0, GFP_ATOMIC);
 
@@ -375,6 +376,12 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)
 				adap,
 				8);
 
+	/* Quirk of pipe reporting PIPE_BULK but behaves as interrupt */
+	ep = usb_pipe_endpoint(d->udev, lme_int->lme_urb->pipe);
+
+	if (usb_endpoint_type(&ep->desc) == USB_ENDPOINT_XFER_BULK)
+		lme_int->lme_urb->pipe = usb_rcvbulkpipe(d->udev, 0xa),
+
 	lme_int->lme_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
 	usb_submit_urb(lme_int->lme_urb, GFP_ATOMIC);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/5] lmedm04: create frontend callbacks for signal/snr/ber/ucblocks
  2015-01-02 13:56 [PATCH 1/5] lmedm04: Increase Interupt due time to 200 msec Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 2/5] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb Malcolm Priestley
@ 2015-01-02 13:56 ` Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 4/5] lmedm04: Create frontend call back for read status Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs Malcolm Priestley
  3 siblings, 0 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-01-02 13:56 UTC (permalink / raw)
  To: linux-media; +Cc: Malcolm Priestley

Create call backs dm04_read_signal_strength, dm04_read_snr and
move dm04_read_ber and dm04_read_ucblocks for all frontends

Removing the I2C filtering from lme2510_msg and the old rs2000 callbacks.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 93 ++++++++++++----------------------
 1 file changed, 33 insertions(+), 60 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index 15db9f6..55d7690 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -515,21 +515,6 @@ static int lme2510_msg(struct dvb_usb_device *d,
 				rbuf[0] = 0x55;
 				rbuf[1] = st->signal_lock;
 				break;
-			case 0x43:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_level;
-				break;
-			case 0x1c:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_sn;
-				break;
-			case 0x15:
-			case 0x16:
-			case 0x17:
-			case 0x18:
-				rbuf[0] = 0x55;
-				rbuf[1] = 0x00;
-				break;
 			default:
 				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
 				st->i2c_talk_onoff = 1;
@@ -538,25 +523,10 @@ static int lme2510_msg(struct dvb_usb_device *d,
 			break;
 		case TUNER_S7395:
 			switch (wbuf[3]) {
-			case 0x10:
-				rbuf[0] = 0x55;
-				rbuf[1] = (st->signal_level & 0x80)
-						? 0 : (st->signal_level * 2);
-				break;
-			case 0x2d:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_sn;
-				break;
 			case 0x24:
 				rbuf[0] = 0x55;
 				rbuf[1] = st->signal_lock;
 				break;
-			case 0x2e:
-			case 0x26:
-			case 0x27:
-				rbuf[0] = 0x55;
-				rbuf[1] = 0x00;
-				break;
 			default:
 				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
 				st->i2c_talk_onoff = 1;
@@ -565,26 +535,10 @@ static int lme2510_msg(struct dvb_usb_device *d,
 			break;
 		case TUNER_S0194:
 			switch (wbuf[3]) {
-			case 0x18:
-				rbuf[0] = 0x55;
-				rbuf[1] = (st->signal_level & 0x80)
-						? 0 : (st->signal_level * 2);
-				break;
-			case 0x24:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_sn;
-				break;
 			case 0x1b:
 				rbuf[0] = 0x55;
 				rbuf[1] = st->signal_lock;
 				break;
-			case 0x19:
-			case 0x25:
-			case 0x1e:
-			case 0x1d:
-				rbuf[0] = 0x55;
-				rbuf[1] = 0x00;
-				break;
 			default:
 				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
 				st->i2c_talk_onoff = 1;
@@ -1006,21 +960,44 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend *fe,
 	return (ret < 0) ? -ENODEV : 0;
 }
 
-static int dm04_rs2000_read_signal_strength(struct dvb_frontend *fe,
-	u16 *strength)
+static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
 	struct lme2510_state *st = fe_to_priv(fe);
 
-	*strength = (u16)((u32)st->signal_level * 0xffff / 0xff);
+	switch (st->tuner_config) {
+	case TUNER_LG:
+		*strength = 0xff - st->signal_level;
+		*strength |= *strength << 8;
+		break;
+	/* fall through */
+	case TUNER_S7395:
+	case TUNER_S0194:
+		*strength = 0xffff - (((st->signal_level * 2) << 8) * 5 / 4);
+		break;
+	case TUNER_RS2000:
+		*strength = (u16)((u32)st->signal_level * 0xffff / 0xff);
+	}
 
 	return 0;
 }
 
-static int dm04_rs2000_read_snr(struct dvb_frontend *fe, u16 *snr)
+static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
 	struct lme2510_state *st = fe_to_priv(fe);
 
-	*snr = (u16)((u32)st->signal_sn * 0xffff / 0x7f);
+	switch (st->tuner_config) {
+	case TUNER_LG:
+		*snr = 0xff - st->signal_sn;
+		*snr |= *snr << 8;
+		break;
+	/* fall through */
+	case TUNER_S7395:
+	case TUNER_S0194:
+		*snr = (u16)((0xff - st->signal_sn - 0xa1) * 3) << 8;
+		break;
+	case TUNER_RS2000:
+		*snr = (u16)((u32)st->signal_sn * 0xffff / 0x7f);
+	}
 
 	return 0;
 }
@@ -1127,15 +1104,6 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 			st->tuner_config = TUNER_RS2000;
 			st->fe_set_voltage =
 				adap->fe[0]->ops.set_voltage;
-
-			adap->fe[0]->ops.read_signal_strength =
-				dm04_rs2000_read_signal_strength;
-			adap->fe[0]->ops.read_snr =
-				dm04_rs2000_read_snr;
-			adap->fe[0]->ops.read_ber =
-				dm04_read_ber;
-			adap->fe[0]->ops.read_ucblocks =
-				dm04_read_ucblocks;
 		}
 		break;
 	}
@@ -1154,7 +1122,12 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 		return -ENODEV;
 	}
 
+	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;
+	adap->fe[0]->ops.read_snr = dm04_read_snr;
+	adap->fe[0]->ops.read_ber = dm04_read_ber;
+	adap->fe[0]->ops.read_ucblocks = dm04_read_ucblocks;
 	adap->fe[0]->ops.set_voltage = dm04_lme2510_set_voltage;
+
 	ret = lme_name(adap);
 	return ret;
 }
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/5] lmedm04: Create frontend call back for read status.
  2015-01-02 13:56 [PATCH 1/5] lmedm04: Increase Interupt due time to 200 msec Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 2/5] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 3/5] lmedm04: create frontend callbacks for signal/snr/ber/ucblocks Malcolm Priestley
@ 2015-01-02 13:56 ` Malcolm Priestley
  2015-01-02 13:56 ` [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs Malcolm Priestley
  3 siblings, 0 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-01-02 13:56 UTC (permalink / raw)
  To: linux-media; +Cc: Malcolm Priestley

Create dm04_read_status to check lock through either interrupt values
or directly by the call back.

When the device is not streaming the frontends original call back is
used. When streaming has started it turns off I2C messaging by
setting st->i2c_talk_onoff to zero. I2C can only be turn on again
by one of the other allowed frontend calls.

All old code is removed from lme2510_msg and this function only needs
to set st->i2c_talk_onoff to 1.

The lock status is saved and when the frondend is locked is maintained
by lme2510_int_response who will now just kill the lock.

The call back for rs2000 tuner is nologer required.

All frontend types have been tested.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 205 ++++++++++-----------------------
 1 file changed, 60 insertions(+), 145 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index 55d7690..a9c7fd0 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -126,9 +126,9 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 
 struct lme2510_state {
 	unsigned long int_urb_due;
+	fe_status_t lock_status;
 	u8 id;
 	u8 tuner_config;
-	u8 signal_lock;
 	u8 signal_level;
 	u8 signal_sn;
 	u8 time_key;
@@ -143,6 +143,8 @@ struct lme2510_state {
 	void *buffer;
 	struct urb *lme_urb;
 	void *usb_buffer;
+	/* Frontend original calls */
+	int (*fe_read_status)(struct dvb_frontend *, fe_status_t *);
 	int (*fe_set_voltage)(struct dvb_frontend *, fe_sec_voltage_t);
 	u8 dvb_usb_lme2510_firmware;
 };
@@ -258,6 +260,7 @@ static void lme2510_int_response(struct urb *lme_urb)
 	static u8 *ibuf, *rbuf;
 	int i = 0, offset;
 	u32 key;
+	u8 signal_lock = 0;
 
 	switch (lme_urb->status) {
 	case 0:
@@ -298,8 +301,7 @@ static void lme2510_int_response(struct urb *lme_urb)
 		case 0xbb:
 			switch (st->tuner_config) {
 			case TUNER_LG:
-				if (ibuf[2] > 0)
-					st->signal_lock = ibuf[2];
+				signal_lock = ibuf[2] & BIT(5);
 				st->signal_level = ibuf[4];
 				st->signal_sn = ibuf[3];
 				st->time_key = ibuf[7];
@@ -308,29 +310,29 @@ static void lme2510_int_response(struct urb *lme_urb)
 			case TUNER_S0194:
 				/* Tweak for earlier firmware*/
 				if (ibuf[1] == 0x03) {
-					if (ibuf[2] > 1)
-						st->signal_lock = ibuf[2];
+					signal_lock = ibuf[2] & BIT(4);
 					st->signal_level = ibuf[3];
 					st->signal_sn = ibuf[4];
 				} else {
 					st->signal_level = ibuf[4];
 					st->signal_sn = ibuf[5];
-					st->signal_lock =
-						(st->signal_lock & 0xf7) +
-						((ibuf[2] & 0x01) << 0x03);
 				}
 				break;
 			case TUNER_RS2000:
-				if (ibuf[2] & 0x1)
-					st->signal_lock = 0xff;
-				else
-					st->signal_lock = 0x00;
+				signal_lock = ibuf[2] & 0xee;
 				st->signal_level = ibuf[5];
 				st->signal_sn = ibuf[4];
 				st->time_key = ibuf[7];
 			default:
 				break;
 			}
+
+			/* Interrupt will also throw just BIT 0 as lock */
+			signal_lock |= ibuf[2] & BIT(0);
+
+			if (!signal_lock)
+				st->lock_status &= ~FE_HAS_LOCK;
+
 			debug_data_snipet(5, "INT Remote data snipet in", ibuf);
 		break;
 		case 0xcc:
@@ -457,124 +459,13 @@ static int lme2510_return_status(struct dvb_usb_device *d)
 static int lme2510_msg(struct dvb_usb_device *d,
 		u8 *wbuf, int wlen, u8 *rbuf, int rlen)
 {
-	int ret = 0;
 	struct lme2510_state *st = d->priv;
 
-	if (st->i2c_talk_onoff == 1) {
-
-		ret = lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
-
-		switch (st->tuner_config) {
-		case TUNER_LG:
-			if (wbuf[2] == 0x1c) {
-				if (wbuf[3] == 0x0e) {
-					st->signal_lock = rbuf[1];
-					if ((st->stream_on & 1) &&
-						(st->signal_lock & 0x10)) {
-						lme2510_stream_restart(d);
-						st->i2c_talk_onoff = 0;
-					}
-					msleep(80);
-				}
-			}
-			break;
-		case TUNER_S7395:
-			if (wbuf[2] == 0xd0) {
-				if (wbuf[3] == 0x24) {
-					st->signal_lock = rbuf[1];
-					if ((st->stream_on & 1) &&
-						(st->signal_lock & 0x8)) {
-						lme2510_stream_restart(d);
-						st->i2c_talk_onoff = 0;
-					}
-				}
-			}
-			break;
-		case TUNER_S0194:
-			if (wbuf[2] == 0xd0) {
-				if (wbuf[3] == 0x1b) {
-					st->signal_lock = rbuf[1];
-					if ((st->stream_on & 1) &&
-						(st->signal_lock & 0x8)) {
-						lme2510_stream_restart(d);
-						st->i2c_talk_onoff = 0;
-					}
-				}
-			}
-			break;
-		case TUNER_RS2000:
-		default:
-			break;
-		}
-	} else {
-		/* TODO rewrite this section */
-		switch (st->tuner_config) {
-		case TUNER_LG:
-			switch (wbuf[3]) {
-			case 0x0e:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_lock;
-				break;
-			default:
-				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
-				st->i2c_talk_onoff = 1;
-				break;
-			}
-			break;
-		case TUNER_S7395:
-			switch (wbuf[3]) {
-			case 0x24:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_lock;
-				break;
-			default:
-				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
-				st->i2c_talk_onoff = 1;
-				break;
-			}
-			break;
-		case TUNER_S0194:
-			switch (wbuf[3]) {
-			case 0x1b:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_lock;
-				break;
-			default:
-				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
-				st->i2c_talk_onoff = 1;
-				break;
-			}
-			break;
-		case TUNER_RS2000:
-			switch (wbuf[3]) {
-			case 0x8c:
-				rbuf[0] = 0x55;
-				rbuf[1] = st->signal_lock;
-
-				/* If int_urb_due overdue
-				 *  set rbuf[1] to 0 to clear lock */
-				if (time_after(jiffies,	st->int_urb_due))
-					rbuf[1] = 0;
-
-				break;
-			default:
-				lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
-				st->i2c_talk_onoff = 1;
-				break;
-			}
-		default:
-			break;
-		}
-
-		deb_info(4, "I2C From Interrupt Message out(%02x) in(%02x)",
-				wbuf[3], rbuf[1]);
-
-	}
+	st->i2c_talk_onoff = 1;
 
-	return ret;
+	return lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
 }
 
-
 static int lme2510_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
 				 int num)
 {
@@ -897,26 +788,8 @@ static struct stv0299_config sharp_z0194_config = {
 	.set_symbol_rate = sharp_z0194a_set_symbol_rate,
 };
 
-static int dm04_rs2000_set_ts_param(struct dvb_frontend *fe,
-	int caller)
-{
-	struct dvb_usb_adapter *adap = fe_to_adap(fe);
-	struct dvb_usb_device *d = adap_to_d(adap);
-	struct lme2510_state *st = d->priv;
-
-	mutex_lock(&d->i2c_mutex);
-	if ((st->i2c_talk_onoff == 1) && (st->stream_on & 1)) {
-		st->i2c_talk_onoff = 0;
-		lme2510_stream_restart(d);
-	}
-	mutex_unlock(&d->i2c_mutex);
-
-	return 0;
-}
-
 static struct m88rs2000_config m88rs2000_config = {
-	.demod_addr = 0x68,
-	.set_ts_params = dm04_rs2000_set_ts_param,
+	.demod_addr = 0x68
 };
 
 static struct ts2020_config ts2020_config = {
@@ -960,6 +833,46 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend *fe,
 	return (ret < 0) ? -ENODEV : 0;
 }
 
+static int dm04_read_status(struct dvb_frontend *fe, fe_status_t *status)
+{
+	struct dvb_usb_device *d = fe_to_d(fe);
+	struct lme2510_state *st = d->priv;
+	int ret = 0;
+
+	if (st->i2c_talk_onoff) {
+		if (st->fe_read_status) {
+			ret = st->fe_read_status(fe, status);
+			if (ret < 0)
+				return ret;
+		}
+
+		st->lock_status = *status;
+
+		if (*status & FE_HAS_LOCK && st->stream_on) {
+			mutex_lock(&d->i2c_mutex);
+
+			st->i2c_talk_onoff = 0;
+			ret = lme2510_stream_restart(d);
+
+			mutex_unlock(&d->i2c_mutex);
+		}
+
+		return ret;
+	}
+
+	/* Timeout of interrupt reached on RS2000 */
+	if (st->tuner_config == TUNER_RS2000 &&
+	    time_after(jiffies, st->int_urb_due))
+		st->lock_status &= ~FE_HAS_LOCK;
+
+	*status = st->lock_status;
+
+	if (!(*status & FE_HAS_LOCK))
+		st->i2c_talk_onoff = 1;
+
+	return ret;
+}
+
 static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
 	struct lme2510_state *st = fe_to_priv(fe);
@@ -1122,6 +1035,9 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 		return -ENODEV;
 	}
 
+	st->fe_read_status = adap->fe[0]->ops.read_status;
+
+	adap->fe[0]->ops.read_status = dm04_read_status;
 	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;
 	adap->fe[0]->ops.read_snr = dm04_read_snr;
 	adap->fe[0]->ops.read_ber = dm04_read_ber;
@@ -1269,7 +1185,6 @@ static void *lme2510_exit_int(struct dvb_usb_device *d)
 
 	if (st->usb_buffer != NULL) {
 		st->i2c_talk_onoff = 1;
-		st->signal_lock = 0;
 		st->signal_level = 0;
 		st->signal_sn = 0;
 		buffer = st->usb_buffer;
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs
  2015-01-02 13:56 [PATCH 1/5] lmedm04: Increase Interupt due time to 200 msec Malcolm Priestley
                   ` (2 preceding siblings ...)
  2015-01-02 13:56 ` [PATCH 4/5] lmedm04: Create frontend call back for read status Malcolm Priestley
@ 2015-01-02 13:56 ` Malcolm Priestley
  2015-02-03 19:19   ` Mauro Carvalho Chehab
  3 siblings, 1 reply; 10+ messages in thread
From: Malcolm Priestley @ 2015-01-02 13:56 UTC (permalink / raw)
  To: linux-media; +Cc: Malcolm Priestley

This allows calling the original functions providing the streaming is off.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index a9c7fd0..5de6f7c 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -145,6 +145,10 @@ struct lme2510_state {
 	void *usb_buffer;
 	/* Frontend original calls */
 	int (*fe_read_status)(struct dvb_frontend *, fe_status_t *);
+	int (*fe_read_signal_strength)(struct dvb_frontend *, u16 *);
+	int (*fe_read_snr)(struct dvb_frontend *, u16 *);
+	int (*fe_read_ber)(struct dvb_frontend *, u32 *);
+	int (*fe_read_ucblocks)(struct dvb_frontend *, u32 *);
 	int (*fe_set_voltage)(struct dvb_frontend *, fe_sec_voltage_t);
 	u8 dvb_usb_lme2510_firmware;
 };
@@ -877,6 +881,9 @@ static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
 	struct lme2510_state *st = fe_to_priv(fe);
 
+	if (st->fe_read_signal_strength && !st->stream_on)
+		return st->fe_read_signal_strength(fe, strength);
+
 	switch (st->tuner_config) {
 	case TUNER_LG:
 		*strength = 0xff - st->signal_level;
@@ -898,6 +905,9 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
 	struct lme2510_state *st = fe_to_priv(fe);
 
+	if (st->fe_read_snr && !st->stream_on)
+		return st->fe_read_snr(fe, snr);
+
 	switch (st->tuner_config) {
 	case TUNER_LG:
 		*snr = 0xff - st->signal_sn;
@@ -917,6 +927,11 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
 
 static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
 {
+	struct lme2510_state *st = fe_to_priv(fe);
+
+	if (st->fe_read_ber && !st->stream_on)
+		return st->fe_read_ber(fe, ber);
+
 	*ber = 0;
 
 	return 0;
@@ -924,6 +939,11 @@ static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
 
 static int dm04_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
 {
+	struct lme2510_state *st = fe_to_priv(fe);
+
+	if (st->fe_read_ucblocks && !st->stream_on)
+		return st->fe_read_ucblocks(fe, ucblocks);
+
 	*ucblocks = 0;
 
 	return 0;
@@ -1036,6 +1056,10 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 	}
 
 	st->fe_read_status = adap->fe[0]->ops.read_status;
+	st->fe_read_signal_strength = adap->fe[0]->ops.read_signal_strength;
+	st->fe_read_snr = adap->fe[0]->ops.read_snr;
+	st->fe_read_ber = adap->fe[0]->ops.read_ber;
+	st->fe_read_ucblocks = adap->fe[0]->ops.read_ucblocks;
 
 	adap->fe[0]->ops.read_status = dm04_read_status;
 	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs
  2015-01-02 13:56 ` [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs Malcolm Priestley
@ 2015-02-03 19:19   ` Mauro Carvalho Chehab
  2015-02-03 19:31     ` Malcolm Priestley
  0 siblings, 1 reply; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2015-02-03 19:19 UTC (permalink / raw)
  To: Malcolm Priestley; +Cc: linux-media

Em Fri,  2 Jan 2015 13:56:31 +0000
Malcolm Priestley <tvboxspy@gmail.com> escreveu:

> This allows calling the original functions providing the streaming is off.

Malcolm,

I'm applying this patch series, as the driver has already some support for
the legacy DVBv3 stats, but please port it to use DVBv5.

Thanks,
Mauro

> 
> Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
> ---
>  drivers/media/usb/dvb-usb-v2/lmedm04.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
> index a9c7fd0..5de6f7c 100644
> --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
> +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
> @@ -145,6 +145,10 @@ struct lme2510_state {
>  	void *usb_buffer;
>  	/* Frontend original calls */
>  	int (*fe_read_status)(struct dvb_frontend *, fe_status_t *);
> +	int (*fe_read_signal_strength)(struct dvb_frontend *, u16 *);
> +	int (*fe_read_snr)(struct dvb_frontend *, u16 *);
> +	int (*fe_read_ber)(struct dvb_frontend *, u32 *);
> +	int (*fe_read_ucblocks)(struct dvb_frontend *, u32 *);
>  	int (*fe_set_voltage)(struct dvb_frontend *, fe_sec_voltage_t);
>  	u8 dvb_usb_lme2510_firmware;
>  };
> @@ -877,6 +881,9 @@ static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
>  {
>  	struct lme2510_state *st = fe_to_priv(fe);
>  
> +	if (st->fe_read_signal_strength && !st->stream_on)
> +		return st->fe_read_signal_strength(fe, strength);
> +
>  	switch (st->tuner_config) {
>  	case TUNER_LG:
>  		*strength = 0xff - st->signal_level;
> @@ -898,6 +905,9 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
>  {
>  	struct lme2510_state *st = fe_to_priv(fe);
>  
> +	if (st->fe_read_snr && !st->stream_on)
> +		return st->fe_read_snr(fe, snr);
> +
>  	switch (st->tuner_config) {
>  	case TUNER_LG:
>  		*snr = 0xff - st->signal_sn;
> @@ -917,6 +927,11 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
>  
>  static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
>  {
> +	struct lme2510_state *st = fe_to_priv(fe);
> +
> +	if (st->fe_read_ber && !st->stream_on)
> +		return st->fe_read_ber(fe, ber);
> +
>  	*ber = 0;
>  
>  	return 0;
> @@ -924,6 +939,11 @@ static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
>  
>  static int dm04_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
>  {
> +	struct lme2510_state *st = fe_to_priv(fe);
> +
> +	if (st->fe_read_ucblocks && !st->stream_on)
> +		return st->fe_read_ucblocks(fe, ucblocks);
> +
>  	*ucblocks = 0;
>  
>  	return 0;
> @@ -1036,6 +1056,10 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
>  	}
>  
>  	st->fe_read_status = adap->fe[0]->ops.read_status;
> +	st->fe_read_signal_strength = adap->fe[0]->ops.read_signal_strength;
> +	st->fe_read_snr = adap->fe[0]->ops.read_snr;
> +	st->fe_read_ber = adap->fe[0]->ops.read_ber;
> +	st->fe_read_ucblocks = adap->fe[0]->ops.read_ucblocks;
>  
>  	adap->fe[0]->ops.read_status = dm04_read_status;
>  	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs
  2015-02-03 19:19   ` Mauro Carvalho Chehab
@ 2015-02-03 19:31     ` Malcolm Priestley
  2015-02-03 19:39       ` Malcolm Priestley
  2015-02-03 19:44       ` Mauro Carvalho Chehab
  0 siblings, 2 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-02-03 19:31 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: linux-media



On 03/02/15 19:19, Mauro Carvalho Chehab wrote:
> Em Fri,  2 Jan 2015 13:56:31 +0000
> Malcolm Priestley <tvboxspy@gmail.com> escreveu:
>
>> This allows calling the original functions providing the streaming is off.
>
> Malcolm,
>
> I'm applying this patch series, as the driver has already some support for
> the legacy DVBv3 stats, but please port it to use DVBv5.
Hi Mauro,

I am not sure what you mean by this?

Are there any examples?


Regards


Malcolm


>
> Thanks,
> Mauro
>
>>
>> Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
>> ---
>>   drivers/media/usb/dvb-usb-v2/lmedm04.c | 24 ++++++++++++++++++++++++
>>   1 file changed, 24 insertions(+)
>>
>> diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
>> index a9c7fd0..5de6f7c 100644
>> --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
>> +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
>> @@ -145,6 +145,10 @@ struct lme2510_state {
>>   	void *usb_buffer;
>>   	/* Frontend original calls */
>>   	int (*fe_read_status)(struct dvb_frontend *, fe_status_t *);
>> +	int (*fe_read_signal_strength)(struct dvb_frontend *, u16 *);
>> +	int (*fe_read_snr)(struct dvb_frontend *, u16 *);
>> +	int (*fe_read_ber)(struct dvb_frontend *, u32 *);
>> +	int (*fe_read_ucblocks)(struct dvb_frontend *, u32 *);
>>   	int (*fe_set_voltage)(struct dvb_frontend *, fe_sec_voltage_t);
>>   	u8 dvb_usb_lme2510_firmware;
>>   };
>> @@ -877,6 +881,9 @@ static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
>>   {
>>   	struct lme2510_state *st = fe_to_priv(fe);
>>
>> +	if (st->fe_read_signal_strength && !st->stream_on)
>> +		return st->fe_read_signal_strength(fe, strength);
>> +
>>   	switch (st->tuner_config) {
>>   	case TUNER_LG:
>>   		*strength = 0xff - st->signal_level;
>> @@ -898,6 +905,9 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
>>   {
>>   	struct lme2510_state *st = fe_to_priv(fe);
>>
>> +	if (st->fe_read_snr && !st->stream_on)
>> +		return st->fe_read_snr(fe, snr);
>> +
>>   	switch (st->tuner_config) {
>>   	case TUNER_LG:
>>   		*snr = 0xff - st->signal_sn;
>> @@ -917,6 +927,11 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
>>
>>   static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
>>   {
>> +	struct lme2510_state *st = fe_to_priv(fe);
>> +
>> +	if (st->fe_read_ber && !st->stream_on)
>> +		return st->fe_read_ber(fe, ber);
>> +
>>   	*ber = 0;
>>
>>   	return 0;
>> @@ -924,6 +939,11 @@ static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
>>
>>   static int dm04_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
>>   {
>> +	struct lme2510_state *st = fe_to_priv(fe);
>> +
>> +	if (st->fe_read_ucblocks && !st->stream_on)
>> +		return st->fe_read_ucblocks(fe, ucblocks);
>> +
>>   	*ucblocks = 0;
>>
>>   	return 0;
>> @@ -1036,6 +1056,10 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
>>   	}
>>
>>   	st->fe_read_status = adap->fe[0]->ops.read_status;
>> +	st->fe_read_signal_strength = adap->fe[0]->ops.read_signal_strength;
>> +	st->fe_read_snr = adap->fe[0]->ops.read_snr;
>> +	st->fe_read_ber = adap->fe[0]->ops.read_ber;
>> +	st->fe_read_ucblocks = adap->fe[0]->ops.read_ucblocks;
>>
>>   	adap->fe[0]->ops.read_status = dm04_read_status;
>>   	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs
  2015-02-03 19:31     ` Malcolm Priestley
@ 2015-02-03 19:39       ` Malcolm Priestley
  2015-02-03 19:44       ` Mauro Carvalho Chehab
  1 sibling, 0 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-02-03 19:39 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: linux-media

On 03/02/15 19:31, Malcolm Priestley wrote:
>
>
> On 03/02/15 19:19, Mauro Carvalho Chehab wrote:
>> Em Fri,  2 Jan 2015 13:56:31 +0000
>> Malcolm Priestley <tvboxspy@gmail.com> escreveu:
>>
>>> This allows calling the original functions providing the streaming is
>>> off.
>>
>> Malcolm,
>>
>> I'm applying this patch series, as the driver has already some support
>> for
>> the legacy DVBv3 stats, but please port it to use DVBv5.
> Hi Mauro,
>
> I am not sure what you mean by this?
>
> Are there any examples?
Sorry, Yes I see how, will do.



>
>
> Regards
>
>
> Malcolm
>
>
>>
>> Thanks,
>> Mauro
>>
>>>
>>> Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
>>> ---
>>>   drivers/media/usb/dvb-usb-v2/lmedm04.c | 24 ++++++++++++++++++++++++
>>>   1 file changed, 24 insertions(+)
>>>
>>> diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c
>>> b/drivers/media/usb/dvb-usb-v2/lmedm04.c
>>> index a9c7fd0..5de6f7c 100644
>>> --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
>>> +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
>>> @@ -145,6 +145,10 @@ struct lme2510_state {
>>>       void *usb_buffer;
>>>       /* Frontend original calls */
>>>       int (*fe_read_status)(struct dvb_frontend *, fe_status_t *);
>>> +    int (*fe_read_signal_strength)(struct dvb_frontend *, u16 *);
>>> +    int (*fe_read_snr)(struct dvb_frontend *, u16 *);
>>> +    int (*fe_read_ber)(struct dvb_frontend *, u32 *);
>>> +    int (*fe_read_ucblocks)(struct dvb_frontend *, u32 *);
>>>       int (*fe_set_voltage)(struct dvb_frontend *, fe_sec_voltage_t);
>>>       u8 dvb_usb_lme2510_firmware;
>>>   };
>>> @@ -877,6 +881,9 @@ static int dm04_read_signal_strength(struct
>>> dvb_frontend *fe, u16 *strength)
>>>   {
>>>       struct lme2510_state *st = fe_to_priv(fe);
>>>
>>> +    if (st->fe_read_signal_strength && !st->stream_on)
>>> +        return st->fe_read_signal_strength(fe, strength);
>>> +
>>>       switch (st->tuner_config) {
>>>       case TUNER_LG:
>>>           *strength = 0xff - st->signal_level;
>>> @@ -898,6 +905,9 @@ static int dm04_read_snr(struct dvb_frontend *fe,
>>> u16 *snr)
>>>   {
>>>       struct lme2510_state *st = fe_to_priv(fe);
>>>
>>> +    if (st->fe_read_snr && !st->stream_on)
>>> +        return st->fe_read_snr(fe, snr);
>>> +
>>>       switch (st->tuner_config) {
>>>       case TUNER_LG:
>>>           *snr = 0xff - st->signal_sn;
>>> @@ -917,6 +927,11 @@ static int dm04_read_snr(struct dvb_frontend
>>> *fe, u16 *snr)
>>>
>>>   static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
>>>   {
>>> +    struct lme2510_state *st = fe_to_priv(fe);
>>> +
>>> +    if (st->fe_read_ber && !st->stream_on)
>>> +        return st->fe_read_ber(fe, ber);
>>> +
>>>       *ber = 0;
>>>
>>>       return 0;
>>> @@ -924,6 +939,11 @@ static int dm04_read_ber(struct dvb_frontend
>>> *fe, u32 *ber)
>>>
>>>   static int dm04_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
>>>   {
>>> +    struct lme2510_state *st = fe_to_priv(fe);
>>> +
>>> +    if (st->fe_read_ucblocks && !st->stream_on)
>>> +        return st->fe_read_ucblocks(fe, ucblocks);
>>> +
>>>       *ucblocks = 0;
>>>
>>>       return 0;
>>> @@ -1036,6 +1056,10 @@ static int dm04_lme2510_frontend_attach(struct
>>> dvb_usb_adapter *adap)
>>>       }
>>>
>>>       st->fe_read_status = adap->fe[0]->ops.read_status;
>>> +    st->fe_read_signal_strength =
>>> adap->fe[0]->ops.read_signal_strength;
>>> +    st->fe_read_snr = adap->fe[0]->ops.read_snr;
>>> +    st->fe_read_ber = adap->fe[0]->ops.read_ber;
>>> +    st->fe_read_ucblocks = adap->fe[0]->ops.read_ucblocks;
>>>
>>>       adap->fe[0]->ops.read_status = dm04_read_status;
>>>       adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs
  2015-02-03 19:31     ` Malcolm Priestley
  2015-02-03 19:39       ` Malcolm Priestley
@ 2015-02-03 19:44       ` Mauro Carvalho Chehab
  2015-02-03 19:53         ` Malcolm Priestley
  1 sibling, 1 reply; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2015-02-03 19:44 UTC (permalink / raw)
  To: Malcolm Priestley; +Cc: linux-media

Em Tue, 03 Feb 2015 19:31:16 +0000
Malcolm Priestley <tvboxspy@gmail.com> escreveu:

> 
> 
> On 03/02/15 19:19, Mauro Carvalho Chehab wrote:
> > Em Fri,  2 Jan 2015 13:56:31 +0000
> > Malcolm Priestley <tvboxspy@gmail.com> escreveu:
> >
> >> This allows calling the original functions providing the streaming is off.
> >
> > Malcolm,
> >
> > I'm applying this patch series, as the driver has already some support for
> > the legacy DVBv3 stats, but please port it to use DVBv5.
> Hi Mauro,
> 
> I am not sure what you mean by this?

The DVB API version 3 has some issues with stats. The main one is that
they don't provide any glue to userspace about what scale they use. 
Due to that, we've added a new API at DVB. We're gradually adding
support for that on the already existing drivers.

> Are there any examples?

Yes. You can see, for example:

$ git lg drivers/media/dvb-frontends/ |grep stats
906aaf5a195b [media] dvb:tc90522: fix stats report
1d0ceae4a19d [media] af9033: wrap DVBv3 UCB to DVBv5 UCB stats
041ad449683b [media] dib7000p: Add DVBv5 stats support
d591590e1b5b [media] drx-j: enable DVBv5 stats
6983257813dc [media] drx-j: properly handle bit counts on stats
03fdfbfd3b59 [media] drx-j: Prepare to use DVBv5 stats
704f01bbc7e4 [media] dib8000: be sure that stats are available before reading them
7a9d85d5559f [media] dib8000: Fix UCB measure with DVBv5 stats
6ef06e78c74c [media] dib8000: add DVBv5 stats
8f3741e02831 [media] drxk: Add pre/post BER and PER/UCB stats
8b8e444a2711 [media] mb86a20s: Don't reset strength with the other stats
15b1c5a068e7 [media] mb86a20s: provide CNR stats before FE_HAS_SYNC

or:

$ git lg drivers/media/dvb-frontends/ |grep DVBv5
25ef9f554713 [media] rtl2832: implement DVBv5 signal strength statistics
084330b746d9 [media] rtl2832: wrap DVBv5 BER to DVBv3
f7caf93fb8ed [media] rtl2832: wrap DVBv5 CNR to DVBv3 SNR
6b4fd01804ce [media] rtl2832: implement DVBv5 BER statistic
19d273d63552 [media] rtl2832: implement DVBv5 CNR statistic
6dcfe3cc2e33 [media] rtl2830: wrap DVBv5 CNR to DVBv3 SNR
f491391cc331 [media] rtl2830: wrap DVBv5 BER to DVBv3
d512e286512c [media] rtl2830: wrap DVBv5 signal strength to DVBv3
5bb11ca5864a [media] rtl2830: implement DVBv5 BER statistic
871f70252b6f [media] rtl2830: implement DVBv5 signal strength statistics
47b4dbfff1f3 [media] rtl2830: implement DVBv5 CNR statistic
2db4d179e16d [media] af9033: init DVBv5 statistics
e53c47445bb5 [media] af9033: wrap DVBv3 BER to DVBv5 BER
1d0ceae4a19d [media] af9033: wrap DVBv3 UCB to DVBv5 UCB stats
6bb096c92671 [media] af9033: implement DVBv5 post-Viterbi BER
204f4319289f [media] af9033: implement DVBv5 stat block counters
6b45778609db [media] af9033: wrap DVBv3 read SNR to DVBv5 CNR
3e41313aeadf [media] af9033: implement DVBv5 statistics for CNR
83f1161911c5 [media] af9033: implement DVBv5 statistics for signal strength
041ad449683b [media] dib7000p: Add DVBv5 stats support
d591590e1b5b [media] drx-j: enable DVBv5 stats
03fdfbfd3b59 [media] drx-j: Prepare to use DVBv5 stats
7a9d85d5559f [media] dib8000: Fix UCB measure with DVBv5 stats
6ef06e78c74c [media] dib8000: add DVBv5 stats



> 
> 
> Regards
> 
> 
> Malcolm
> 
> 
> >
> > Thanks,
> > Mauro
> >
> >>
> >> Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
> >> ---
> >>   drivers/media/usb/dvb-usb-v2/lmedm04.c | 24 ++++++++++++++++++++++++
> >>   1 file changed, 24 insertions(+)
> >>
> >> diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
> >> index a9c7fd0..5de6f7c 100644
> >> --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
> >> +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
> >> @@ -145,6 +145,10 @@ struct lme2510_state {
> >>   	void *usb_buffer;
> >>   	/* Frontend original calls */
> >>   	int (*fe_read_status)(struct dvb_frontend *, fe_status_t *);
> >> +	int (*fe_read_signal_strength)(struct dvb_frontend *, u16 *);
> >> +	int (*fe_read_snr)(struct dvb_frontend *, u16 *);
> >> +	int (*fe_read_ber)(struct dvb_frontend *, u32 *);
> >> +	int (*fe_read_ucblocks)(struct dvb_frontend *, u32 *);
> >>   	int (*fe_set_voltage)(struct dvb_frontend *, fe_sec_voltage_t);
> >>   	u8 dvb_usb_lme2510_firmware;
> >>   };
> >> @@ -877,6 +881,9 @@ static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
> >>   {
> >>   	struct lme2510_state *st = fe_to_priv(fe);
> >>
> >> +	if (st->fe_read_signal_strength && !st->stream_on)
> >> +		return st->fe_read_signal_strength(fe, strength);
> >> +
> >>   	switch (st->tuner_config) {
> >>   	case TUNER_LG:
> >>   		*strength = 0xff - st->signal_level;
> >> @@ -898,6 +905,9 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
> >>   {
> >>   	struct lme2510_state *st = fe_to_priv(fe);
> >>
> >> +	if (st->fe_read_snr && !st->stream_on)
> >> +		return st->fe_read_snr(fe, snr);
> >> +
> >>   	switch (st->tuner_config) {
> >>   	case TUNER_LG:
> >>   		*snr = 0xff - st->signal_sn;
> >> @@ -917,6 +927,11 @@ static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
> >>
> >>   static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
> >>   {
> >> +	struct lme2510_state *st = fe_to_priv(fe);
> >> +
> >> +	if (st->fe_read_ber && !st->stream_on)
> >> +		return st->fe_read_ber(fe, ber);
> >> +
> >>   	*ber = 0;
> >>
> >>   	return 0;
> >> @@ -924,6 +939,11 @@ static int dm04_read_ber(struct dvb_frontend *fe, u32 *ber)
> >>
> >>   static int dm04_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
> >>   {
> >> +	struct lme2510_state *st = fe_to_priv(fe);
> >> +
> >> +	if (st->fe_read_ucblocks && !st->stream_on)
> >> +		return st->fe_read_ucblocks(fe, ucblocks);
> >> +
> >>   	*ucblocks = 0;
> >>
> >>   	return 0;
> >> @@ -1036,6 +1056,10 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
> >>   	}
> >>
> >>   	st->fe_read_status = adap->fe[0]->ops.read_status;
> >> +	st->fe_read_signal_strength = adap->fe[0]->ops.read_signal_strength;
> >> +	st->fe_read_snr = adap->fe[0]->ops.read_snr;
> >> +	st->fe_read_ber = adap->fe[0]->ops.read_ber;
> >> +	st->fe_read_ucblocks = adap->fe[0]->ops.read_ucblocks;
> >>
> >>   	adap->fe[0]->ops.read_status = dm04_read_status;
> >>   	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs
  2015-02-03 19:44       ` Mauro Carvalho Chehab
@ 2015-02-03 19:53         ` Malcolm Priestley
  0 siblings, 0 replies; 10+ messages in thread
From: Malcolm Priestley @ 2015-02-03 19:53 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: linux-media



On 03/02/15 19:44, Mauro Carvalho Chehab wrote:
> Em Tue, 03 Feb 2015 19:31:16 +0000
> Malcolm Priestley <tvboxspy@gmail.com> escreveu:
>
>>
>>
>> On 03/02/15 19:19, Mauro Carvalho Chehab wrote:
>>> Em Fri,  2 Jan 2015 13:56:31 +0000
>>> Malcolm Priestley <tvboxspy@gmail.com> escreveu:
>>>
>>>> This allows calling the original functions providing the streaming is off.
>>>
>>> Malcolm,
>>>
>>> I'm applying this patch series, as the driver has already some support for
>>> the legacy DVBv3 stats, but please port it to use DVBv5.
>> Hi Mauro,
>>
>> I am not sure what you mean by this?
>
> The DVB API version 3 has some issues with stats. The main one is that
> they don't provide any glue to userspace about what scale they use.
> Due to that, we've added a new API at DVB. We're gradually adding
> support for that on the already existing drivers.
>
>> Are there any examples?
>
> Yes. You can see, for example:

Thanks

Malcolm
>
> $ git lg drivers/media/dvb-frontends/ |grep stats
> 906aaf5a195b [media] dvb:tc90522: fix stats report
> 1d0ceae4a19d [media] af9033: wrap DVBv3 UCB to DVBv5 UCB stats
> 041ad449683b [media] dib7000p: Add DVBv5 stats support
> d591590e1b5b [media] drx-j: enable DVBv5 stats
> 6983257813dc [media] drx-j: properly handle bit counts on stats
> 03fdfbfd3b59 [media] drx-j: Prepare to use DVBv5 stats
> 704f01bbc7e4 [media] dib8000: be sure that stats are available before reading them
> 7a9d85d5559f [media] dib8000: Fix UCB measure with DVBv5 stats
> 6ef06e78c74c [media] dib8000: add DVBv5 stats
> 8f3741e02831 [media] drxk: Add pre/post BER and PER/UCB stats
> 8b8e444a2711 [media] mb86a20s: Don't reset strength with the other stats
> 15b1c5a068e7 [media] mb86a20s: provide CNR stats before FE_HAS_SYNC

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-02-03 19:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-02 13:56 [PATCH 1/5] lmedm04: Increase Interupt due time to 200 msec Malcolm Priestley
2015-01-02 13:56 ` [PATCH 2/5] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb Malcolm Priestley
2015-01-02 13:56 ` [PATCH 3/5] lmedm04: create frontend callbacks for signal/snr/ber/ucblocks Malcolm Priestley
2015-01-02 13:56 ` [PATCH 4/5] lmedm04: Create frontend call back for read status Malcolm Priestley
2015-01-02 13:56 ` [PATCH 5/5] lmedm04: add read snr, signal strength and ber call backs Malcolm Priestley
2015-02-03 19:19   ` Mauro Carvalho Chehab
2015-02-03 19:31     ` Malcolm Priestley
2015-02-03 19:39       ` Malcolm Priestley
2015-02-03 19:44       ` Mauro Carvalho Chehab
2015-02-03 19:53         ` Malcolm Priestley

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.