diff -urNp v4l-dvb.org/linux/drivers/media/dvb/dvb-core/dvb_frontend.c v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.c --- v4l-dvb.org/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2007-02-24 11:57:13.000000000 +0100 +++ v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2007-05-21 19:16:42.000000000 +0200 @@ -460,8 +460,8 @@ int newapi_to_olddrv(struct dvbfe_params case DVBFE_DELSYS_DVBS2: case DVBFE_DELSYS_DSS: case DVBFE_DELSYS_DVBH: - printk("%s: SORRY ! Backward compatibility unavailable for these delivery systems !!\n", __func__); - break; +/* printk("%s: SORRY ! Backward compatibility unavailable for these delivery systems !!\n", __func__); +*/ break; default: dprintk("%s: Unsupported delivery system\n", __func__); return -EINVAL; @@ -1559,10 +1559,20 @@ static int dvb_frontend_ioctl(struct ino struct dvb_frontend_tune_settings fetunesettings; fe->legacy = 1; + + memset(&fepriv->fe_info, 0, sizeof (struct dvbfe_info)); + fepriv->fe_info.delivery = DVBFE_DELSYS_DVBS; + fe->ops.get_info(fe, &fepriv->fe_info); + memcpy(&fepriv->parameters, parg, sizeof (struct dvb_frontend_parameters)); memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings)); memcpy(&fetunesettings.parameters, parg, sizeof (struct dvb_frontend_parameters)); + olddrv_to_newapi(fe,&fepriv->fe_params, &fepriv->parameters, FE_QPSK); + + /* Request the search algorithm to search */ + fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN; + /* force auto frequency inversion if requested */ if (dvb_force_auto_inversion) { fepriv->parameters.inversion = INVERSION_AUTO; @@ -1710,8 +1720,8 @@ static int dvb_frontend_ioctl(struct ino fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000; fepriv->state = FESTATE_RETUNE; - printk("%s: FESTATE_RETUNE: fepriv->state=%d\n", __func__, fepriv->state); - dvb_frontend_wakeup(fe); +/* printk("%s: FESTATE_RETUNE: fepriv->state=%d\n", __func__, fepriv->state); +*/ dvb_frontend_wakeup(fe); dvb_frontend_add_event(fe, 0); fepriv->status = 0; err = 0; @@ -1737,8 +1747,8 @@ static int dvb_frontend_ioctl(struct ino } break; case DVBFE_GET_INFO: - printk("%s: DVBFE_GET_INFO\n", __func__); - fe->legacy = 0; +/* printk("%s: DVBFE_GET_INFO\n", __func__); +*/ fe->legacy = 0; if (fe->ops.get_info) { memcpy(&fepriv->fe_info, (struct dvbfe_info *) parg, sizeof (struct dvbfe_info)); err = fe->ops.get_info(fe, &fepriv->fe_info); @@ -1893,13 +1903,15 @@ void dvb_frontend_detach(struct dvb_fron { void *ptr; - if (fe->ops.release_sec) { + ptr = (void*)fe->ops.release_sec; + if (ptr) { fe->ops.release_sec(fe); - symbol_put_addr(fe->ops.release_sec); + symbol_put_addr(ptr); } - if (fe->ops.tuner_ops.release) { + ptr = (void*)fe->ops.tuner_ops.release; + if (ptr) { fe->ops.tuner_ops.release(fe); - symbol_put_addr(fe->ops.tuner_ops.release); + symbol_put_addr(ptr); } ptr = (void*)fe->ops.release; if (ptr) {