SRU LP301405 - sms1xxx: fix invalid unc readings

Tim Gardner timg at tpi.com
Wed Nov 26 22:07:50 UTC 2008


>From 51e120ea149f7f5c15a3a15d2d4cc177aea83d87 Mon Sep 17 00:00:00 2001
From: Michael Krufky <mkrufky at linuxtv.org>
Date: Tue, 25 Nov 2008 16:44:38 -0500
Subject: [PATCH] UBUNTU: sms1xxx: fix invalid unc readings

OriginalAuthor: Michael Krufky <mkrufky at linuxtv.org>
OriginalLocation: http://linuxtv.org/hg/v4l-dvb/raw-rev/dfe767d471a1
Bug: #301405

Add function smsdvb_read_ucblocks to report uncorrectable error counts.
This is needed for the signal quality LEDs to function correctly.

Signed-off-by: Michael Krufky <mkrufky at linuxtv.org>
Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
---
 drivers/media/dvb/siano/smscoreapi.h |    2 +-
 drivers/media/dvb/siano/smsdvb.c     |   15 +++++++++++++++
 2 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/drivers/media/dvb/siano/smscoreapi.h b/drivers/media/dvb/siano/smscoreapi.h
index 2b2462a..460b174 100644
--- a/drivers/media/dvb/siano/smscoreapi.h
+++ b/drivers/media/dvb/siano/smscoreapi.h
@@ -355,7 +355,7 @@ struct smsdvb_client_t {
 	struct dvb_frontend	frontend;
 
 	fe_status_t		fe_status;
-	int			fe_ber, fe_snr, fe_signal_strength;
+	int			fe_ber, fe_snr, fe_unc, fe_signal_strength;
 
 	struct completion	tune_done, stat_done;
 
diff --git a/drivers/media/dvb/siano/smsdvb.c b/drivers/media/dvb/siano/smsdvb.c
index 54144a3..adf00b9 100644
--- a/drivers/media/dvb/siano/smsdvb.c
+++ b/drivers/media/dvb/siano/smsdvb.c
@@ -60,6 +60,7 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
 
 			client->fe_snr = p->Stat.SNR;
 			client->fe_ber = p->Stat.BER;
+			client->fe_unc = p->Stat.BERErrorCount;
 
 			if (p->Stat.InBandPwr < -95)
 				client->fe_signal_strength = 0;
@@ -72,6 +73,7 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
 			client->fe_status = 0;
 			client->fe_snr =
 			client->fe_ber =
+			client->fe_unc =
 			client->fe_signal_strength = 0;
 		}
 
@@ -217,6 +219,18 @@ static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
 	return rc;
 }
 
+static int smsdvb_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
+{
+	struct smsdvb_client_t *client =
+		container_of(fe, struct smsdvb_client_t, frontend);
+	int rc = smsdvb_send_statistics_request(client);
+
+	if (!rc)
+		*ucblocks = client->fe_unc;
+
+	return rc;
+}
+
 static int smsdvb_get_tune_settings(struct dvb_frontend *fe,
 				    struct dvb_frontend_tune_settings *tune)
 {
@@ -329,6 +343,7 @@ static struct dvb_frontend_ops smsdvb_fe_ops = {
 	.read_ber = smsdvb_read_ber,
 	.read_signal_strength = smsdvb_read_signal_strength,
 	.read_snr = smsdvb_read_snr,
+	.read_ucblocks = smsdvb_read_ucblocks,
 
 	.init = smsdvb_init,
 	.sleep = smsdvb_sleep,
-- 
1.5.6.3





More information about the kernel-team mailing list