diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-01-05 14:39:05 -0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-01-05 16:44:07 -0200 |
commit | 37fa53c6a13ac9e82f9c6d334862b514e34de2a4 (patch) | |
tree | c37ca8f94e58dcb459a56595cb4b1ce450836705 /drivers/media/dvb/dvb-core | |
parent | 9474c5e63f61d052ac218b9f7c4c0b3c7c2b083a (diff) |
[media] dvb_frontend: improve documentation on set_delivery_system()
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@redhat.com>
Diffstat (limited to 'drivers/media/dvb/dvb-core')
-rw-r--r-- | 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 128f67715ad7..0e079a1a4f49 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 |