Lines Matching refs:fe
141 static void dvb_frontend_wakeup(struct dvb_frontend *fe);
142 static int dtv_get_frontend(struct dvb_frontend *fe,
144 static int dtv_property_legacy_params_sync(struct dvb_frontend *fe,
147 static bool has_get_frontend(struct dvb_frontend *fe) in has_get_frontend() argument
149 return fe->ops.get_frontend != NULL; in has_get_frontend()
201 static void dvb_frontend_add_event(struct dvb_frontend *fe, in dvb_frontend_add_event() argument
204 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_add_event()
209 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_add_event()
211 if ((status & FE_HAS_LOCK) && has_get_frontend(fe)) in dvb_frontend_add_event()
212 dtv_get_frontend(fe, &fepriv->parameters_out); in dvb_frontend_add_event()
233 static int dvb_frontend_get_event(struct dvb_frontend *fe, in dvb_frontend_get_event() argument
236 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_get_event()
239 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_get_event()
272 static void dvb_frontend_clear_events(struct dvb_frontend *fe) in dvb_frontend_clear_events() argument
274 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_clear_events()
282 static void dvb_frontend_init(struct dvb_frontend *fe) in dvb_frontend_init() argument
284 dev_dbg(fe->dvb->device, in dvb_frontend_init()
286 __func__, fe->dvb->num, fe->id, fe->ops.info.name); in dvb_frontend_init()
288 if (fe->ops.init) in dvb_frontend_init()
289 fe->ops.init(fe); in dvb_frontend_init()
290 if (fe->ops.tuner_ops.init) { in dvb_frontend_init()
291 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_init()
292 fe->ops.i2c_gate_ctrl(fe, 1); in dvb_frontend_init()
293 fe->ops.tuner_ops.init(fe); in dvb_frontend_init()
294 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_init()
295 fe->ops.i2c_gate_ctrl(fe, 0); in dvb_frontend_init()
299 void dvb_frontend_reinitialise(struct dvb_frontend *fe) in dvb_frontend_reinitialise() argument
301 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_reinitialise()
304 dvb_frontend_wakeup(fe); in dvb_frontend_reinitialise()
311 struct dvb_frontend *fe = fepriv->dvbdev->priv; in dvb_frontend_swzigzag_update_delay() local
313 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_swzigzag_update_delay()
333 static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wrapped) in dvb_frontend_swzigzag_autotune() argument
338 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_swzigzag_autotune()
339 struct dtv_frontend_properties *c = &fe->dtv_property_cache, tmp; in dvb_frontend_swzigzag_autotune()
344 autoinversion = ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) && in dvb_frontend_swzigzag_autotune()
405 dev_dbg(fe->dvb->device, "%s: drift:%i inversion:%i auto_step:%i " \ in dvb_frontend_swzigzag_autotune()
416 if (fe->ops.set_frontend) in dvb_frontend_swzigzag_autotune()
417 fe_set_err = fe->ops.set_frontend(fe); in dvb_frontend_swzigzag_autotune()
431 static void dvb_frontend_swzigzag(struct dvb_frontend *fe) in dvb_frontend_swzigzag() argument
435 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_swzigzag()
436 struct dtv_frontend_properties *c = &fe->dtv_property_cache, tmp; in dvb_frontend_swzigzag()
449 if (fe->ops.set_frontend) in dvb_frontend_swzigzag()
450 retval = fe->ops.set_frontend(fe); in dvb_frontend_swzigzag()
466 if (fe->ops.read_status) in dvb_frontend_swzigzag()
467 fe->ops.read_status(fe, &s); in dvb_frontend_swzigzag()
469 dvb_frontend_add_event(fe, s); in dvb_frontend_swzigzag()
480 if ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) && in dvb_frontend_swzigzag()
504 (fe->ops.info.caps & FE_CAN_RECOVER) && (fepriv->max_drift == 0)) { in dvb_frontend_swzigzag()
533 retval = dvb_frontend_swzigzag_autotune(fe, in dvb_frontend_swzigzag()
561 dvb_frontend_swzigzag_autotune(fe, 0); in dvb_frontend_swzigzag()
565 static int dvb_frontend_is_exiting(struct dvb_frontend *fe) in dvb_frontend_is_exiting() argument
567 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_is_exiting()
569 if (fe->exit != DVB_FE_NO_EXIT) in dvb_frontend_is_exiting()
580 static int dvb_frontend_should_wakeup(struct dvb_frontend *fe) in dvb_frontend_should_wakeup() argument
582 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_should_wakeup()
588 return dvb_frontend_is_exiting(fe); in dvb_frontend_should_wakeup()
591 static void dvb_frontend_wakeup(struct dvb_frontend *fe) in dvb_frontend_wakeup() argument
593 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_wakeup()
618 static int dvb_enable_media_tuner(struct dvb_frontend *fe) in dvb_enable_media_tuner() argument
620 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_enable_media_tuner()
621 struct dvb_adapter *adapter = fe->dvb; in dvb_enable_media_tuner()
654 dev_err(fe->dvb->device, in dvb_enable_media_tuner()
674 dev_err(fe->dvb->device, in dvb_enable_media_tuner()
681 dev_dbg(fe->dvb->device, in dvb_enable_media_tuner()
692 struct dvb_frontend *fe = data; in dvb_frontend_thread() local
693 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_thread()
703 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_thread()
713 ret = dvb_enable_media_tuner(fe); in dvb_frontend_thread()
716 dev_info(fe->dvb->device, in dvb_frontend_thread()
726 dvb_frontend_init(fe); in dvb_frontend_thread()
733 dvb_frontend_should_wakeup(fe) || kthread_should_stop() in dvb_frontend_thread()
737 if (kthread_should_stop() || dvb_frontend_is_exiting(fe)) { in dvb_frontend_thread()
741 fe->exit = DVB_FE_NORMAL_EXIT; in dvb_frontend_thread()
752 dvb_frontend_init(fe); in dvb_frontend_thread()
753 if (fe->ops.set_tone && fepriv->tone != -1) in dvb_frontend_thread()
754 fe->ops.set_tone(fe, fepriv->tone); in dvb_frontend_thread()
755 if (fe->ops.set_voltage && fepriv->voltage != -1) in dvb_frontend_thread()
756 fe->ops.set_voltage(fe, fepriv->voltage); in dvb_frontend_thread()
761 if (fe->ops.get_frontend_algo) { in dvb_frontend_thread()
762 algo = fe->ops.get_frontend_algo(fe); in dvb_frontend_thread()
765 dev_dbg(fe->dvb->device, "%s: Frontend ALGO = DVBFE_ALGO_HW\n", __func__); in dvb_frontend_thread()
768 dev_dbg(fe->dvb->device, "%s: Retune requested, FESTATE_RETUNE\n", __func__); in dvb_frontend_thread()
775 if (fe->ops.tune) in dvb_frontend_thread()
776 fe->ops.tune(fe, re_tune, fepriv->tune_mode_flags, &fepriv->delay, &s); in dvb_frontend_thread()
779 dev_dbg(fe->dvb->device, "%s: state changed, adding current state\n", __func__); in dvb_frontend_thread()
780 dvb_frontend_add_event(fe, s); in dvb_frontend_thread()
785 dev_dbg(fe->dvb->device, "%s: Frontend ALGO = DVBFE_ALGO_SW\n", __func__); in dvb_frontend_thread()
786 dvb_frontend_swzigzag(fe); in dvb_frontend_thread()
789 …dev_dbg(fe->dvb->device, "%s: Frontend ALGO = DVBFE_ALGO_CUSTOM, state=%d\n", __func__, fepriv->st… in dvb_frontend_thread()
791 dev_dbg(fe->dvb->device, "%s: Retune requested, FESTAT_RETUNE\n", __func__); in dvb_frontend_thread()
799 if (fe->ops.search) { in dvb_frontend_thread()
800 fepriv->algo_status = fe->ops.search(fe); in dvb_frontend_thread()
813 dtv_property_legacy_params_sync(fe, &fepriv->parameters_out); in dvb_frontend_thread()
814 fe->ops.read_status(fe, &s); in dvb_frontend_thread()
816 dvb_frontend_add_event(fe, s); /* update event list */ in dvb_frontend_thread()
827 dev_dbg(fe->dvb->device, "%s: UNDEFINED ALGO !\n", __func__); in dvb_frontend_thread()
831 dvb_frontend_swzigzag(fe); in dvb_frontend_thread()
842 if (fe->ops.set_voltage) in dvb_frontend_thread()
843 fe->ops.set_voltage(fe, SEC_VOLTAGE_OFF); in dvb_frontend_thread()
844 if (fe->ops.tuner_ops.sleep) { in dvb_frontend_thread()
845 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_thread()
846 fe->ops.i2c_gate_ctrl(fe, 1); in dvb_frontend_thread()
847 fe->ops.tuner_ops.sleep(fe); in dvb_frontend_thread()
848 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_thread()
849 fe->ops.i2c_gate_ctrl(fe, 0); in dvb_frontend_thread()
851 if (fe->ops.sleep) in dvb_frontend_thread()
852 fe->ops.sleep(fe); in dvb_frontend_thread()
857 fe->exit = DVB_FE_DEVICE_REMOVED; in dvb_frontend_thread()
859 fe->exit = DVB_FE_NO_EXIT; in dvb_frontend_thread()
864 dvb_frontend_wakeup(fe); in dvb_frontend_thread()
868 static void dvb_frontend_stop(struct dvb_frontend *fe) in dvb_frontend_stop() argument
870 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_stop()
872 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_stop()
874 if (fe->exit != DVB_FE_DEVICE_REMOVED) in dvb_frontend_stop()
875 fe->exit = DVB_FE_NORMAL_EXIT; in dvb_frontend_stop()
888 dev_warn(fe->dvb->device, in dvb_frontend_stop()
915 static int dvb_frontend_start(struct dvb_frontend *fe) in dvb_frontend_start() argument
918 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_start()
921 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_start()
924 if (fe->exit == DVB_FE_NO_EXIT) in dvb_frontend_start()
927 dvb_frontend_stop (fe); in dvb_frontend_start()
936 fe->exit = DVB_FE_NO_EXIT; in dvb_frontend_start()
940 fe_thread = kthread_run(dvb_frontend_thread, fe, in dvb_frontend_start()
941 "kdvb-ad-%i-fe-%i", fe->dvb->num,fe->id); in dvb_frontend_start()
944 dev_warn(fe->dvb->device, in dvb_frontend_start()
954 static void dvb_frontend_get_frequency_limits(struct dvb_frontend *fe, in dvb_frontend_get_frequency_limits() argument
957 *freq_min = max(fe->ops.info.frequency_min, fe->ops.tuner_ops.info.frequency_min); in dvb_frontend_get_frequency_limits()
959 if (fe->ops.info.frequency_max == 0) in dvb_frontend_get_frequency_limits()
960 *freq_max = fe->ops.tuner_ops.info.frequency_max; in dvb_frontend_get_frequency_limits()
961 else if (fe->ops.tuner_ops.info.frequency_max == 0) in dvb_frontend_get_frequency_limits()
962 *freq_max = fe->ops.info.frequency_max; in dvb_frontend_get_frequency_limits()
964 *freq_max = min(fe->ops.info.frequency_max, fe->ops.tuner_ops.info.frequency_max); in dvb_frontend_get_frequency_limits()
967 …dev_warn(fe->dvb->device, "DVB: adapter %i frontend %u frequency limits undefined - fix the driver… in dvb_frontend_get_frequency_limits()
968 fe->dvb->num, fe->id); in dvb_frontend_get_frequency_limits()
971 static int dvb_frontend_check_parameters(struct dvb_frontend *fe) in dvb_frontend_check_parameters() argument
973 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_check_parameters()
978 dvb_frontend_get_frequency_limits(fe, &freq_min, &freq_max); in dvb_frontend_check_parameters()
981 dev_warn(fe->dvb->device, "DVB: adapter %i frontend %i frequency %u out of range (%u..%u)\n", in dvb_frontend_check_parameters()
982 fe->dvb->num, fe->id, c->frequency, in dvb_frontend_check_parameters()
994 if ((fe->ops.info.symbol_rate_min && in dvb_frontend_check_parameters()
995 c->symbol_rate < fe->ops.info.symbol_rate_min) || in dvb_frontend_check_parameters()
996 (fe->ops.info.symbol_rate_max && in dvb_frontend_check_parameters()
997 c->symbol_rate > fe->ops.info.symbol_rate_max)) { in dvb_frontend_check_parameters()
998 dev_warn(fe->dvb->device, "DVB: adapter %i frontend %i symbol rate %u out of range (%u..%u)\n", in dvb_frontend_check_parameters()
999 fe->dvb->num, fe->id, c->symbol_rate, in dvb_frontend_check_parameters()
1000 fe->ops.info.symbol_rate_min, in dvb_frontend_check_parameters()
1001 fe->ops.info.symbol_rate_max); in dvb_frontend_check_parameters()
1011 static int dvb_frontend_clear_cache(struct dvb_frontend *fe) in dvb_frontend_clear_cache() argument
1013 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_clear_cache()
1023 dev_dbg(fe->dvb->device, "%s: Clearing cache for delivery system %d\n", in dvb_frontend_clear_cache()
1168 static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp) in dtv_property_dump() argument
1173 dev_warn(fe->dvb->device, "%s: tvp.cmd = 0x%08x undefined\n", in dtv_property_dump()
1178 dev_dbg(fe->dvb->device, "%s: tvp.cmd = 0x%08x (%s)\n", __func__, in dtv_property_dump()
1182 dev_dbg(fe->dvb->device, "%s: tvp.u.buffer.len = 0x%02x\n", in dtv_property_dump()
1186 dev_dbg(fe->dvb->device, in dtv_property_dump()
1190 dev_dbg(fe->dvb->device, "%s: tvp.u.data = 0x%08x\n", __func__, in dtv_property_dump()
1199 static int dtv_property_cache_sync(struct dvb_frontend *fe, in dtv_property_cache_sync() argument
1208 dev_dbg(fe->dvb->device, "%s: Preparing QPSK req\n", __func__); in dtv_property_cache_sync()
1213 dev_dbg(fe->dvb->device, "%s: Preparing QAM req\n", __func__); in dtv_property_cache_sync()
1219 dev_dbg(fe->dvb->device, "%s: Preparing OFDM req\n", __func__); in dtv_property_cache_sync()
1252 dev_dbg(fe->dvb->device, "%s: Preparing ATSC req\n", __func__); in dtv_property_cache_sync()
1262 dev_err(fe->dvb->device, in dtv_property_cache_sync()
1274 static int dtv_property_legacy_params_sync(struct dvb_frontend *fe, in dtv_property_legacy_params_sync() argument
1277 const struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dtv_property_legacy_params_sync()
1284 dev_err(fe->dvb->device, in dtv_property_legacy_params_sync()
1289 dev_dbg(fe->dvb->device, "%s: Preparing QPSK req\n", __func__); in dtv_property_legacy_params_sync()
1294 dev_dbg(fe->dvb->device, "%s: Preparing QAM req\n", __func__); in dtv_property_legacy_params_sync()
1300 dev_dbg(fe->dvb->device, "%s: Preparing OFDM req\n", __func__); in dtv_property_legacy_params_sync()
1332 dev_dbg(fe->dvb->device, "%s: Preparing VSB req\n", __func__); in dtv_property_legacy_params_sync()
1349 static int dtv_get_frontend(struct dvb_frontend *fe, in dtv_get_frontend() argument
1354 if (fe->ops.get_frontend) { in dtv_get_frontend()
1355 r = fe->ops.get_frontend(fe); in dtv_get_frontend()
1359 dtv_property_legacy_params_sync(fe, p_out); in dtv_get_frontend()
1372 static int dtv_property_process_get(struct dvb_frontend *fe, in dtv_property_process_get() argument
1382 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dtv_property_process_get()
1383 tvp->u.buffer.data[ncaps] = fe->ops.delsys[ncaps]; in dtv_property_process_get()
1507 tvp->u.data = fe->dtv_property_cache.atscmh_fic_ver; in dtv_property_process_get()
1510 tvp->u.data = fe->dtv_property_cache.atscmh_parade_id; in dtv_property_process_get()
1513 tvp->u.data = fe->dtv_property_cache.atscmh_nog; in dtv_property_process_get()
1516 tvp->u.data = fe->dtv_property_cache.atscmh_tnog; in dtv_property_process_get()
1519 tvp->u.data = fe->dtv_property_cache.atscmh_sgn; in dtv_property_process_get()
1522 tvp->u.data = fe->dtv_property_cache.atscmh_prc; in dtv_property_process_get()
1525 tvp->u.data = fe->dtv_property_cache.atscmh_rs_frame_mode; in dtv_property_process_get()
1528 tvp->u.data = fe->dtv_property_cache.atscmh_rs_frame_ensemble; in dtv_property_process_get()
1531 tvp->u.data = fe->dtv_property_cache.atscmh_rs_code_mode_pri; in dtv_property_process_get()
1534 tvp->u.data = fe->dtv_property_cache.atscmh_rs_code_mode_sec; in dtv_property_process_get()
1537 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_block_mode; in dtv_property_process_get()
1540 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_a; in dtv_property_process_get()
1543 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_b; in dtv_property_process_get()
1546 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_c; in dtv_property_process_get()
1549 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_d; in dtv_property_process_get()
1582 dev_dbg(fe->dvb->device, in dtv_property_process_get()
1589 if (fe->ops.get_property) { in dtv_property_process_get()
1590 r = fe->ops.get_property(fe, tvp); in dtv_property_process_get()
1595 dtv_property_dump(fe, tvp); in dtv_property_process_get()
1600 static int dtv_set_frontend(struct dvb_frontend *fe);
1622 static int emulate_delivery_system(struct dvb_frontend *fe, u32 delsys) in emulate_delivery_system() argument
1625 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in emulate_delivery_system()
1633 dev_dbg(fe->dvb->device, in emulate_delivery_system()
1653 dev_dbg(fe->dvb->device, "%s: change delivery system on cache to %d\n", in emulate_delivery_system()
1676 static int dvbv5_set_delivery_system(struct dvb_frontend *fe, in dvbv5_set_delivery_system() argument
1681 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvbv5_set_delivery_system()
1691 desired_system = fe->ops.delsys[0]; in dvbv5_set_delivery_system()
1699 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dvbv5_set_delivery_system()
1700 if (fe->ops.delsys[ncaps] == desired_system) { in dvbv5_set_delivery_system()
1702 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1718 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1731 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dvbv5_set_delivery_system()
1732 if (dvbv3_type(fe->ops.delsys[ncaps]) == type) in dvbv5_set_delivery_system()
1733 delsys = fe->ops.delsys[ncaps]; in dvbv5_set_delivery_system()
1739 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1745 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1749 return emulate_delivery_system(fe, desired_system); in dvbv5_set_delivery_system()
1780 static int dvbv3_set_delivery_system(struct dvb_frontend *fe) in dvbv3_set_delivery_system() argument
1784 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvbv3_set_delivery_system()
1788 c->delivery_system = fe->ops.delsys[0]; in dvbv3_set_delivery_system()
1795 dev_dbg(fe->dvb->device, in dvbv3_set_delivery_system()
1806 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dvbv3_set_delivery_system()
1807 if (dvbv3_type(fe->ops.delsys[ncaps]) != DVBV3_UNKNOWN) { in dvbv3_set_delivery_system()
1808 delsys = fe->ops.delsys[ncaps]; in dvbv3_set_delivery_system()
1814 dev_dbg(fe->dvb->device, in dvbv3_set_delivery_system()
1819 return emulate_delivery_system(fe, delsys); in dvbv3_set_delivery_system()
1822 static int dtv_property_process_set(struct dvb_frontend *fe, in dtv_property_process_set() argument
1827 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dtv_property_process_set()
1830 if (fe->ops.set_property) { in dtv_property_process_set()
1831 r = fe->ops.set_property(fe, tvp); in dtv_property_process_set()
1842 dvb_frontend_clear_cache(fe); in dtv_property_process_set()
1850 dev_dbg(fe->dvb->device, "%s: Finalised property cache\n", in dtv_property_process_set()
1853 r = dtv_set_frontend(fe); in dtv_property_process_set()
1880 r = dvbv5_set_delivery_system(fe, tvp->u.data); in dtv_property_process_set()
1975 fe->dtv_property_cache.atscmh_parade_id = tvp->u.data; in dtv_property_process_set()
1978 fe->dtv_property_cache.atscmh_rs_frame_ensemble = tvp->u.data; in dtv_property_process_set()
1983 if (fe->ops.set_lna) in dtv_property_process_set()
1984 r = fe->ops.set_lna(fe); in dtv_property_process_set()
2000 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_ioctl() local
2001 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_ioctl()
2002 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_ioctl()
2005 dev_dbg(fe->dvb->device, "%s: (%d)\n", __func__, _IOC_NR(cmd)); in dvb_frontend_ioctl()
2009 if (fe->exit != DVB_FE_NO_EXIT) { in dvb_frontend_ioctl()
2036 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_ioctl_properties() local
2037 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_ioctl_properties()
2038 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_ioctl_properties()
2045 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_ioctl_properties()
2048 dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num); in dvb_frontend_ioctl_properties()
2049 dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props); in dvb_frontend_ioctl_properties()
2069 err = dtv_property_process_set(fe, tvp + i, file); in dvb_frontend_ioctl_properties()
2076 dev_dbg(fe->dvb->device, "%s: Property cache is full, tuning\n", __func__); in dvb_frontend_ioctl_properties()
2079 dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num); in dvb_frontend_ioctl_properties()
2080 dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props); in dvb_frontend_ioctl_properties()
2105 err = dtv_get_frontend(fe, NULL); in dvb_frontend_ioctl_properties()
2110 err = dtv_property_process_get(fe, c, tvp + i, file); in dvb_frontend_ioctl_properties()
2130 static int dtv_set_frontend(struct dvb_frontend *fe) in dtv_set_frontend() argument
2132 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dtv_set_frontend()
2133 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dtv_set_frontend()
2137 if (dvb_frontend_check_parameters(fe) < 0) in dtv_set_frontend()
2145 dtv_property_legacy_params_sync(fe, &fepriv->parameters_out); in dtv_set_frontend()
2214 if (fe->ops.get_tune_settings && (fe->ops.get_tune_settings(fe, &fetunesettings) == 0)) { in dtv_set_frontend()
2236 fepriv->step_size = fe->ops.info.frequency_stepsize * 2; in dtv_set_frontend()
2237 fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1; in dtv_set_frontend()
2258 dvb_frontend_clear_events(fe); in dtv_set_frontend()
2259 dvb_frontend_add_event(fe, 0); in dtv_set_frontend()
2260 dvb_frontend_wakeup(fe); in dtv_set_frontend()
2271 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_ioctl_legacy() local
2272 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_ioctl_legacy()
2273 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_ioctl_legacy()
2280 memcpy(info, &fe->ops.info, sizeof(struct dvb_frontend_info)); in dvb_frontend_ioctl_legacy()
2281 dvb_frontend_get_frequency_limits(fe, &info->frequency_min, &info->frequency_max); in dvb_frontend_ioctl_legacy()
2308 dev_err(fe->dvb->device, in dvb_frontend_ioctl_legacy()
2311 fe->ops.info.type = FE_OFDM; in dvb_frontend_ioctl_legacy()
2313 dev_dbg(fe->dvb->device, "%s: current delivery system on cache: %d, V3 type: %d\n", in dvb_frontend_ioctl_legacy()
2314 __func__, c->delivery_system, fe->ops.info.type); in dvb_frontend_ioctl_legacy()
2335 if (fe->ops.read_status) in dvb_frontend_ioctl_legacy()
2336 err = fe->ops.read_status(fe, status); in dvb_frontend_ioctl_legacy()
2341 if (fe->ops.read_ber) { in dvb_frontend_ioctl_legacy()
2343 err = fe->ops.read_ber(fe, (__u32 *) parg); in dvb_frontend_ioctl_legacy()
2350 if (fe->ops.read_signal_strength) { in dvb_frontend_ioctl_legacy()
2352 err = fe->ops.read_signal_strength(fe, (__u16 *) parg); in dvb_frontend_ioctl_legacy()
2359 if (fe->ops.read_snr) { in dvb_frontend_ioctl_legacy()
2361 err = fe->ops.read_snr(fe, (__u16 *) parg); in dvb_frontend_ioctl_legacy()
2368 if (fe->ops.read_ucblocks) { in dvb_frontend_ioctl_legacy()
2370 err = fe->ops.read_ucblocks(fe, (__u32 *) parg); in dvb_frontend_ioctl_legacy()
2377 if (fe->ops.diseqc_reset_overload) { in dvb_frontend_ioctl_legacy()
2378 err = fe->ops.diseqc_reset_overload(fe); in dvb_frontend_ioctl_legacy()
2385 if (fe->ops.diseqc_send_master_cmd) { in dvb_frontend_ioctl_legacy()
2392 err = fe->ops.diseqc_send_master_cmd(fe, cmd); in dvb_frontend_ioctl_legacy()
2399 if (fe->ops.diseqc_send_burst) { in dvb_frontend_ioctl_legacy()
2400 err = fe->ops.diseqc_send_burst(fe, in dvb_frontend_ioctl_legacy()
2408 if (fe->ops.set_tone) { in dvb_frontend_ioctl_legacy()
2409 err = fe->ops.set_tone(fe, in dvb_frontend_ioctl_legacy()
2418 if (fe->ops.set_voltage) { in dvb_frontend_ioctl_legacy()
2419 err = fe->ops.set_voltage(fe, in dvb_frontend_ioctl_legacy()
2428 if (fe->ops.dishnetwork_send_legacy_command) { in dvb_frontend_ioctl_legacy()
2429 err = fe->ops.dishnetwork_send_legacy_command(fe, in dvb_frontend_ioctl_legacy()
2433 } else if (fe->ops.set_voltage) { in dvb_frontend_ioctl_legacy()
2463 fe->ops.set_voltage(fe, SEC_VOLTAGE_18); in dvb_frontend_ioctl_legacy()
2471 fe->ops.set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18); in dvb_frontend_ioctl_legacy()
2480 __func__, fe->dvb->num); in dvb_frontend_ioctl_legacy()
2492 if (fe->ops.diseqc_recv_slave_reply) in dvb_frontend_ioctl_legacy()
2493 err = fe->ops.diseqc_recv_slave_reply(fe, (struct dvb_diseqc_slave_reply*) parg); in dvb_frontend_ioctl_legacy()
2497 if (fe->ops.enable_high_lnb_voltage) in dvb_frontend_ioctl_legacy()
2498 err = fe->ops.enable_high_lnb_voltage(fe, (long) parg); in dvb_frontend_ioctl_legacy()
2502 err = dvbv3_set_delivery_system(fe); in dvb_frontend_ioctl_legacy()
2506 err = dtv_property_cache_sync(fe, c, parg); in dvb_frontend_ioctl_legacy()
2509 err = dtv_set_frontend(fe); in dvb_frontend_ioctl_legacy()
2512 err = dvb_frontend_get_event (fe, parg, file->f_flags); in dvb_frontend_ioctl_legacy()
2516 err = dtv_get_frontend(fe, parg); in dvb_frontend_ioctl_legacy()
2532 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_poll() local
2533 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_poll()
2535 dev_dbg_ratelimited(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_poll()
2548 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_open() local
2549 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_open()
2550 struct dvb_adapter *adapter = fe->dvb; in dvb_frontend_open()
2553 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_open()
2554 if (fe->exit == DVB_FE_DEVICE_REMOVED) in dvb_frontend_open()
2596 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) { in dvb_frontend_open()
2597 if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0) in dvb_frontend_open()
2618 ret = dvb_frontend_start (fe); in dvb_frontend_open()
2633 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) in dvb_frontend_open()
2634 fe->ops.ts_bus_ctrl(fe, 0); in dvb_frontend_open()
2644 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_release() local
2645 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_release()
2648 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_release()
2659 if (fe->exit != DVB_FE_NO_EXIT) in dvb_frontend_release()
2661 if (fe->ops.ts_bus_ctrl) in dvb_frontend_release()
2662 fe->ops.ts_bus_ctrl(fe, 0); in dvb_frontend_release()
2677 int dvb_frontend_suspend(struct dvb_frontend *fe) in dvb_frontend_suspend() argument
2681 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num, in dvb_frontend_suspend()
2682 fe->id); in dvb_frontend_suspend()
2684 if (fe->ops.tuner_ops.suspend) in dvb_frontend_suspend()
2685 ret = fe->ops.tuner_ops.suspend(fe); in dvb_frontend_suspend()
2686 else if (fe->ops.tuner_ops.sleep) in dvb_frontend_suspend()
2687 ret = fe->ops.tuner_ops.sleep(fe); in dvb_frontend_suspend()
2689 if (fe->ops.sleep) in dvb_frontend_suspend()
2690 ret = fe->ops.sleep(fe); in dvb_frontend_suspend()
2696 int dvb_frontend_resume(struct dvb_frontend *fe) in dvb_frontend_resume() argument
2698 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_resume()
2701 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num, in dvb_frontend_resume()
2702 fe->id); in dvb_frontend_resume()
2704 fe->exit = DVB_FE_DEVICE_RESUME; in dvb_frontend_resume()
2705 if (fe->ops.init) in dvb_frontend_resume()
2706 ret = fe->ops.init(fe); in dvb_frontend_resume()
2708 if (fe->ops.tuner_ops.resume) in dvb_frontend_resume()
2709 ret = fe->ops.tuner_ops.resume(fe); in dvb_frontend_resume()
2710 else if (fe->ops.tuner_ops.init) in dvb_frontend_resume()
2711 ret = fe->ops.tuner_ops.init(fe); in dvb_frontend_resume()
2713 fe->exit = DVB_FE_NO_EXIT; in dvb_frontend_resume()
2715 dvb_frontend_wakeup(fe); in dvb_frontend_resume()
2722 struct dvb_frontend* fe) in dvb_register_frontend() argument
2731 .name = fe->ops.info.name, in dvb_register_frontend()
2741 fe->frontend_priv = kzalloc(sizeof(struct dvb_frontend_private), GFP_KERNEL); in dvb_register_frontend()
2742 if (fe->frontend_priv == NULL) { in dvb_register_frontend()
2746 fepriv = fe->frontend_priv; in dvb_register_frontend()
2752 fe->dvb = dvb; in dvb_register_frontend()
2755 dev_info(fe->dvb->device, in dvb_register_frontend()
2757 fe->dvb->num, fe->id, fe->ops.info.name); in dvb_register_frontend()
2759 dvb_register_device (fe->dvb, &fepriv->dvbdev, &dvbdev_template, in dvb_register_frontend()
2760 fe, DVB_DEVICE_FRONTEND); in dvb_register_frontend()
2767 fe->dtv_property_cache.delivery_system = fe->ops.delsys[0]; in dvb_register_frontend()
2768 dvb_frontend_clear_cache(fe); in dvb_register_frontend()
2775 int dvb_unregister_frontend(struct dvb_frontend* fe) in dvb_unregister_frontend() argument
2777 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_unregister_frontend()
2778 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_unregister_frontend()
2781 dvb_frontend_stop (fe); in dvb_unregister_frontend()
2799 void dvb_frontend_detach(struct dvb_frontend* fe) in dvb_frontend_detach() argument
2803 if (fe->ops.release_sec) { in dvb_frontend_detach()
2804 fe->ops.release_sec(fe); in dvb_frontend_detach()
2805 dvb_detach(fe->ops.release_sec); in dvb_frontend_detach()
2807 if (fe->ops.tuner_ops.release) { in dvb_frontend_detach()
2808 fe->ops.tuner_ops.release(fe); in dvb_frontend_detach()
2809 dvb_detach(fe->ops.tuner_ops.release); in dvb_frontend_detach()
2811 if (fe->ops.analog_ops.release) { in dvb_frontend_detach()
2812 fe->ops.analog_ops.release(fe); in dvb_frontend_detach()
2813 dvb_detach(fe->ops.analog_ops.release); in dvb_frontend_detach()
2815 ptr = (void*)fe->ops.release; in dvb_frontend_detach()
2817 fe->ops.release(fe); in dvb_frontend_detach()
2822 void dvb_frontend_detach(struct dvb_frontend* fe) in dvb_frontend_detach() argument
2824 if (fe->ops.release_sec) in dvb_frontend_detach()
2825 fe->ops.release_sec(fe); in dvb_frontend_detach()
2826 if (fe->ops.tuner_ops.release) in dvb_frontend_detach()
2827 fe->ops.tuner_ops.release(fe); in dvb_frontend_detach()
2828 if (fe->ops.analog_ops.release) in dvb_frontend_detach()
2829 fe->ops.analog_ops.release(fe); in dvb_frontend_detach()
2830 if (fe->ops.release) in dvb_frontend_detach()
2831 fe->ops.release(fe); in dvb_frontend_detach()