summaryrefslogtreecommitdiff
path: root/linux/drivers/media/dvb/dvb-core
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2008-10-13 12:09:52 -0200
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-10-13 12:09:52 -0200
commitc04e90e2d38493e6c092095cc2441365dd3973af (patch)
tree10f7dd48868de244e34380fc45ecac99601d9027 /linux/drivers/media/dvb/dvb-core
parent2cea09a7e6ff7e5202803e6a6c2279ed254d7dff (diff)
parenta0184c08027dba2f30a12bcd1ca1ca1da7fc7963 (diff)
downloadmediapointer-dvb-s2-c04e90e2d38493e6c092095cc2441365dd3973af.tar.gz
mediapointer-dvb-s2-c04e90e2d38493e6c092095cc2441365dd3973af.tar.bz2
merge: http://linuxtv.org/hg/~stoth/s2
From: Mauro Carvalho Chehab <mchehab@redhat.com> Priority: normal Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'linux/drivers/media/dvb/dvb-core')
-rw-r--r--linux/drivers/media/dvb/dvb-core/dvb_frontend.c98
1 files changed, 93 insertions, 5 deletions
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
index 6f0dc252f..43b31ec2c 100644
--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -841,6 +841,11 @@ struct dtv_cmds_h dtv_cmds[] = {
.cmd = DTV_DELIVERY_SYSTEM,
.set = 1,
},
+ [DTV_HIERARCHY] = {
+ .name = "DTV_HIERARCHY",
+ .cmd = DTV_HIERARCHY,
+ .set = 1,
+ },
#if 0
[DTV_ISDB_SEGMENT_IDX] = {
.name = "DTV_ISDB_SEGMENT_IDX",
@@ -853,6 +858,26 @@ struct dtv_cmds_h dtv_cmds[] = {
.set = 1,
},
#endif
+ [DTV_CODE_RATE_HP] = {
+ .name = "DTV_CODE_RATE_HP",
+ .cmd = DTV_CODE_RATE_HP,
+ .set = 1,
+ },
+ [DTV_CODE_RATE_LP] = {
+ .name = "DTV_CODE_RATE_LP",
+ .cmd = DTV_CODE_RATE_LP,
+ .set = 1,
+ },
+ [DTV_GUARD_INTERVAL] = {
+ .name = "DTV_GUARD_INTERVAL",
+ .cmd = DTV_GUARD_INTERVAL,
+ .set = 1,
+ },
+ [DTV_TRANSMISSION_MODE] = {
+ .name = "DTV_TRANSMISSION_MODE",
+ .cmd = DTV_TRANSMISSION_MODE,
+ .set = 1,
+ },
/* Get */
[DTV_DISEQC_SLAVE_REPLY] = {
.name = "DTV_DISEQC_SLAVE_REPLY",
@@ -912,12 +937,43 @@ struct dtv_cmds_h dtv_cmds[] = {
.cmd = DTV_API_VERSION,
.set = 0,
},
+ [DTV_CODE_RATE_HP] = {
+ .name = "DTV_CODE_RATE_HP",
+ .cmd = DTV_CODE_RATE_HP,
+ .set = 0,
+ },
+ [DTV_CODE_RATE_LP] = {
+ .name = "DTV_CODE_RATE_LP",
+ .cmd = DTV_CODE_RATE_LP,
+ .set = 0,
+ },
+ [DTV_GUARD_INTERVAL] = {
+ .name = "DTV_GUARD_INTERVAL",
+ .cmd = DTV_GUARD_INTERVAL,
+ .set = 0,
+ },
+ [DTV_TRANSMISSION_MODE] = {
+ .name = "DTV_TRANSMISSION_MODE",
+ .cmd = DTV_TRANSMISSION_MODE,
+ .set = 0,
+ },
+ [DTV_HIERARCHY] = {
+ .name = "DTV_HIERARCHY",
+ .cmd = DTV_HIERARCHY,
+ .set = 0,
+ },
};
void dtv_property_dump(struct dtv_property *tvp)
{
int i;
+ if (tvp->cmd <= 0 || tvp->cmd > DTV_MAX_COMMAND) {
+ printk("%s: tvp.cmd = 0x%08x (undefined/unknown/invalid)\n",
+ __func__, tvp->cmd);
+ return;
+ }
+
printk("%s() tvp.cmd = 0x%08x (%s)\n"
,__FUNCTION__
,tvp->cmd
@@ -963,6 +1019,8 @@ void dtv_property_cache_sync(struct dvb_frontend *fe, struct dvb_frontend_parame
switch (fe->ops.info.type) {
case FE_QPSK:
+ c->modulation = QPSK; /* implied for DVB-S in legacy API */
+ c->rolloff = ROLLOFF_35;/* implied for DVB-S */
c->symbol_rate = p->u.qpsk.symbol_rate;
c->fec_inner = p->u.qpsk.fec_inner;
c->delivery_system = SYS_DVBS;
@@ -1073,9 +1131,9 @@ void dtv_property_adv_params_sync(struct dvb_frontend *fe)
p->inversion = c->inversion;
switch(c->modulation) {
- case _8PSK:
- case _16APSK:
- case NBC_QPSK:
+ case PSK_8:
+ case APSK_16:
+ case QPSK:
p->u.qpsk.symbol_rate = c->symbol_rate;
p->u.qpsk.fec_inner = c->fec_inner;
break;
@@ -1219,6 +1277,21 @@ int dtv_property_process_get(struct dvb_frontend *fe, struct dtv_property *tvp,
case DTV_API_VERSION:
tvp->u.data = (DVB_API_VERSION << 8) | DVB_API_VERSION_MINOR;
break;
+ case DTV_CODE_RATE_HP:
+ tvp->u.data = fe->dtv_property_cache.code_rate_HP;
+ break;
+ case DTV_CODE_RATE_LP:
+ tvp->u.data = fe->dtv_property_cache.code_rate_LP;
+ break;
+ case DTV_GUARD_INTERVAL:
+ tvp->u.data = fe->dtv_property_cache.guard_interval;
+ break;
+ case DTV_TRANSMISSION_MODE:
+ tvp->u.data = fe->dtv_property_cache.transmission_mode;
+ break;
+ case DTV_HIERARCHY:
+ tvp->u.data = fe->dtv_property_cache.hierarchy;
+ break;
default:
r = -1;
}
@@ -1309,6 +1382,21 @@ int dtv_property_process_set(struct dvb_frontend *fe, struct dtv_property *tvp,
r = dvb_frontend_ioctl_legacy(inode, file, FE_SET_TONE,
(void *)fe->dtv_property_cache.sectone);
break;
+ case DTV_CODE_RATE_HP:
+ fe->dtv_property_cache.code_rate_HP = tvp->u.data;
+ break;
+ case DTV_CODE_RATE_LP:
+ fe->dtv_property_cache.code_rate_LP = tvp->u.data;
+ break;
+ case DTV_GUARD_INTERVAL:
+ fe->dtv_property_cache.guard_interval = tvp->u.data;
+ break;
+ case DTV_TRANSMISSION_MODE:
+ fe->dtv_property_cache.transmission_mode = tvp->u.data;
+ break;
+ case DTV_HIERARCHY:
+ fe->dtv_property_cache.hierarchy = tvp->u.data;
+ break;
default:
r = -1;
}
@@ -1371,7 +1459,7 @@ static int dvb_frontend_ioctl_properties(struct inode *inode, struct file *file,
/* Put an arbitrary limit on the number of messages that can
* be sent at once */
- if (tvps->num > DTV_IOCTL_MAX_MSGS)
+ if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS))
return -EINVAL;
tvp = (struct dtv_property *) kmalloc(tvps->num *
@@ -1406,7 +1494,7 @@ static int dvb_frontend_ioctl_properties(struct inode *inode, struct file *file,
/* Put an arbitrary limit on the number of messages that can
* be sent at once */
- if (tvps->num > DTV_IOCTL_MAX_MSGS)
+ if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS))
return -EINVAL;
tvp = (struct dtv_property *) kmalloc(tvps->num *