浏览代码

[media] dvb-core: fix a regression with MythTV

As reported by Lawrence[1], MythTV 0.24.1 does the wrong thing
with a DVBv5 call: it fills the delivery system with
SYS_UNDEFINED, expecting that the DVB core would work with that.

This used to work by accident, as the DVB core were missing the
check for the supported delivery systems. Yet, fixing it
is easy, so let's add a logic to handle this case, to
provide backward compatibility.

[1] http://patchwork.linuxtv.org/patch/8314/

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Mauro Carvalho Chehab 13 年之前
父节点
当前提交
f4b1952a45
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      drivers/media/dvb/dvb-core/dvb_frontend.c

+ 9 - 0
drivers/media/dvb/dvb-core/dvb_frontend.c

@@ -1413,6 +1413,15 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system)
 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 	enum dvbv3_emulation_type type;
 	enum dvbv3_emulation_type type;
 
 
+	/*
+	 * It was reported that some old DVBv5 applications were
+	 * filling delivery_system with SYS_UNDEFINED. If this happens,
+	 * assume that the application wants to use the first supported
+	 * delivery system.
+	 */
+	if (c->delivery_system == SYS_UNDEFINED)
+	        c->delivery_system = fe->ops.delsys[0];
+
 	if (desired_system == SYS_UNDEFINED) {
 	if (desired_system == SYS_UNDEFINED) {
 		/*
 		/*
 		 * A DVBv3 call doesn't know what's the desired system.
 		 * A DVBv3 call doesn't know what's the desired system.