case DTV_STAT_TOTAL_BLOCK_COUNT:
tvp->u.st = c->block_count;
break;
- r = 0;
- //printk("dvb-core get sub sys\r\n");
+#ifdef CONFIG_AMLOGIC_DVB_COMPAT
+ case DTV_DELIVERY_SUB_SYSTEM:
+ case DTV_TS_INPUT:
++ printk("dvb-core get sub sys\r\n");
+ break;
+#endif
default:
dev_dbg(fe->dvb->device,
"%s: FE property %d doesn't exist\n",
{
bool status;
- (delsys == SYS_DTMB);
+#ifdef CONFIG_AMLOGIC_MODIFY /* added by Amlogic 20180720 */
+ status = (delsys == SYS_DVBT) || (delsys == SYS_DVBC_ANNEX_A) ||
+ (delsys == SYS_DVBS) || (delsys == SYS_ATSC) ||
++ (delsys == SYS_DTMB) || (delsys == SYS_DVBS2) ||
++ (delsys == SYS_DVBT2);
+#else
status = (delsys == SYS_DVBT) || (delsys == SYS_DVBC_ANNEX_A) ||
(delsys == SYS_DVBS) || (delsys == SYS_ATSC);
+#endif
return status;
}
r = dtv_set_frontend(fe);
break;
case DTV_FREQUENCY:
- c->frequency = tvp->u.data;
+ c->frequency = data;
break;
case DTV_MODULATION:
- c->modulation = tvp->u.data;
+ c->modulation = data;
break;
case DTV_BANDWIDTH_HZ:
- c->bandwidth_hz = tvp->u.data;
+ c->bandwidth_hz = data;
break;
case DTV_INVERSION:
- c->inversion = tvp->u.data;
+ c->inversion = data;
break;
case DTV_SYMBOL_RATE:
- c->symbol_rate = tvp->u.data;
+ c->symbol_rate = data;
break;
case DTV_INNER_FEC:
- c->fec_inner = tvp->u.data;
+ c->fec_inner = data;
break;
case DTV_PILOT:
- c->pilot = tvp->u.data;
+ c->pilot = data;
break;
case DTV_ROLLOFF:
- c->rolloff = tvp->u.data;
+ c->rolloff = data;
break;
case DTV_DELIVERY_SYSTEM:
- r = dvbv5_set_delivery_system(fe, tvp->u.data);
+ r = dvbv5_set_delivery_system(fe, data);
break;
+#ifdef CONFIG_AMLOGIC_DVB_COMPAT
+ case DTV_DELIVERY_SUB_SYSTEM:
+ r = 0;
+ break;
+#endif
case DTV_VOLTAGE:
- c->voltage = tvp->u.data;
- r = dvb_frontend_ioctl_legacy(file, FE_SET_VOLTAGE,
+ c->voltage = data;
+ r = dvb_frontend_handle_ioctl(file, FE_SET_VOLTAGE,
(void *)c->voltage);
break;
case DTV_TONE:
*/
if (fepriv->state != FESTATE_IDLE) {
err = dtv_get_frontend(fe, &getp, NULL);
- if (err < 0)
- goto out;
+ if (err < 0) {
+ kfree(tvp);
+ return err;
+ }
}
for (i = 0; i < tvps->num; i++) {
- err = dtv_property_process_get(fe, &getp, tvp + i, file);
- if (err < 0)
- goto out;
- (tvp + i)->result = err;
+ err = dtv_property_process_get(
+ fe, &getp, (struct dtv_property *)(tvp + i), file);
+ if (err < 0) {
+ kfree(tvp);
+ return err;
+ }
}
- if (convert) {
- for (i = 0; i < tvps->num; i++)
- dtv_property_64to32(tvp_32 + i,
- (struct dtv_property *)(tvp+i));
-
- if (copy_to_user((void __user *)tvps->props, tvp_32,
- tvps->num * sizeof(struct dtv_property_32))) {
- err = -EFAULT;
- goto out;
- }
- } else {
- if (copy_to_user((void __user *)tvps->props, tvp,
- tvps->num * sizeof(struct dtv_property))) {
- err = -EFAULT;
- goto out;
- }
- if (copy_to_user((void __user *)compat_ptr(tvps->props), tvp,
++ if(copy_to_user((void __user *)compat_ptr(tvps->props), tvp,
+ tvps->num * sizeof(struct compat_dtv_property))) {
+ kfree(tvp);
+ return -EFAULT;
}
- } else
- err = -EOPNOTSUPP;
+ kfree(tvp);
+ }
- out:
- kfree(tvp_32);
- kfree(tvp);
return err;
}
return ret;
}
- #ifdef CONFIG_AMLOGIC_DVB_COMPAT
- static long dvb_frontend_compat_ioctl(struct file *filp,
- unsigned int cmd, unsigned long args)
- {
- long ret;
-
- #ifdef CONFIG_COMPAT
- args = (unsigned long)compat_ptr(args);
- #endif
-
- ret = dvb_generic_ioctl(filp, cmd, args);
-
- return ret;
- }
- #endif
+
static const struct file_operations dvb_frontend_fops = {
.owner = THIS_MODULE,
- .unlocked_ioctl = dvb_generic_ioctl,
+ .unlocked_ioctl = dvb_frontend_ioctl,
+ #ifdef CONFIG_COMPAT
+ .compat_ioctl = dvb_frontend_compat_ioctl,
+ #endif
.poll = dvb_frontend_poll,
.open = dvb_frontend_open,
.release = dvb_frontend_release,