[PATCH] [media] dvb_frontend: improve documentation on set_delivery_system()

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

 



While this patch change some things, the updated fields there are
used just on printk, so it shouldn't cause any functional changes.

Yet, this routine is a little complex, so explain a little more
how it works.

Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
---
 drivers/media/dvb/dvb-core/dvb_frontend.c |   27 ++++++++++++++++++---------
 1 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index 128f677..0e079a1 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -1440,9 +1440,13 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system)
 	if (desired_system == SYS_UNDEFINED) {
 		/*
 		 * A DVBv3 call doesn't know what's the desired system.
-		 * So, don't change the current delivery system. Instead,
-		 * find the closest DVBv3 system that matches the delivery
-		 * system.
+		 * Also, DVBv3 applications don't know that ops.info->type
+		 * could be changed, and they simply dies when it doesn't
+		 * match.
+		 * So, don't change the current delivery system, as it
+		 * may be trying to do the wrong thing, like setting an
+		 * ISDB-T frontend as DVB-T. Instead, find the closest
+		 * DVBv3 system that matches the delivery system.
 		 */
 		if (is_dvbv3_delsys(c->delivery_system)) {
 			dprintk("%s() Using delivery system to %d\n",
@@ -1452,27 +1456,29 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system)
 		type = dvbv3_type(c->delivery_system);
 		switch (type) {
 		case DVBV3_QPSK:
-			desired_system = FE_QPSK;
+			desired_system = SYS_DVBS;
 			break;
 		case DVBV3_QAM:
-			desired_system = FE_QAM;
+			desired_system = SYS_DVBC_ANNEX_A;
 			break;
 		case DVBV3_ATSC:
-			desired_system = FE_ATSC;
+			desired_system = SYS_ATSC;
 			break;
 		case DVBV3_OFDM:
-			desired_system = FE_OFDM;
+			desired_system = SYS_DVBT;
 			break;
 		default:
 			dprintk("%s(): This frontend doesn't support DVBv3 calls\n",
 				__func__);
 			return -EINVAL;
 		}
-		delsys = c->delivery_system;
 	} else {
 		/*
-		 * Check if the desired delivery system is supported
+		 * This is a DVBv5 call. So, it likely knows the supported
+		 * delivery systems.
 		 */
+
+		/* Check if the desired delivery system is supported */
 		ncaps = 0;
 		while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) {
 			if (fe->ops.delsys[ncaps] == desired_system) {
@@ -1518,6 +1524,9 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system)
 	}
 
 	/*
+	 * The DVBv3 or DVBv5 call is requesting a different system. So,
+	 * emulation is needed.
+	 *
 	 * Emulate newer delivery systems like ISDBT, DVBT and DMBTH
 	 * for older DVBv5 applications. The emulation will try to use
 	 * the auto mode for most things, and will assume that the desired
-- 
1.7.7.5

--
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