diff options
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.c | 13 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.h | 8 |
2 files changed, 21 insertions, 0 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 7ea79dffa970..001804744d45 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c @@ -1252,6 +1252,19 @@ static void dtv_set_default_delivery_caps(const struct dvb_frontend *fe, struct const struct dvb_frontend_info *info = &fe->ops.info; u32 ncaps = 0; + /* + * If the frontend explicitly sets a list, use it, instead of + * filling based on the info->type + */ + if (fe->ops.delsys[ncaps]) { + while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) { + p->u.buffer.data[ncaps] = fe->ops.delsys[ncaps]; + ncaps++; + } + p->u.buffer.len = ncaps; + return; + } + switch (info->type) { case FE_QPSK: p->u.buffer.data[ncaps++] = SYS_DVBS; diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.h b/drivers/media/dvb/dvb-core/dvb_frontend.h index 895f88f06f5b..95f2134a1622 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.h +++ b/drivers/media/dvb/dvb-core/dvb_frontend.h @@ -42,6 +42,12 @@ #include "dvbdev.h" +/* + * Maximum number of Delivery systems per frontend. It + * should be smaller or equal to 32 + */ +#define MAX_DELSYS 8 + struct dvb_frontend_tune_settings { int min_delay_ms; int step_size; @@ -254,6 +260,8 @@ struct dvb_frontend_ops { struct dvb_frontend_info info; + u8 delsys[MAX_DELSYS]; + void (*release)(struct dvb_frontend* fe); void (*release_sec)(struct dvb_frontend* fe); |