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, fe_status_t status) in dvb_frontend_add_event() argument
203 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_add_event()
208 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_add_event()
210 if ((status & FE_HAS_LOCK) && has_get_frontend(fe)) in dvb_frontend_add_event()
211 dtv_get_frontend(fe, &fepriv->parameters_out); in dvb_frontend_add_event()
232 static int dvb_frontend_get_event(struct dvb_frontend *fe, in dvb_frontend_get_event() argument
235 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_get_event()
238 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_get_event()
271 static void dvb_frontend_clear_events(struct dvb_frontend *fe) in dvb_frontend_clear_events() argument
273 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_clear_events()
281 static void dvb_frontend_init(struct dvb_frontend *fe) in dvb_frontend_init() argument
283 dev_dbg(fe->dvb->device, in dvb_frontend_init()
285 __func__, fe->dvb->num, fe->id, fe->ops.info.name); in dvb_frontend_init()
287 if (fe->ops.init) in dvb_frontend_init()
288 fe->ops.init(fe); in dvb_frontend_init()
289 if (fe->ops.tuner_ops.init) { in dvb_frontend_init()
290 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_init()
291 fe->ops.i2c_gate_ctrl(fe, 1); in dvb_frontend_init()
292 fe->ops.tuner_ops.init(fe); in dvb_frontend_init()
293 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_init()
294 fe->ops.i2c_gate_ctrl(fe, 0); in dvb_frontend_init()
298 void dvb_frontend_reinitialise(struct dvb_frontend *fe) in dvb_frontend_reinitialise() argument
300 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_reinitialise()
303 dvb_frontend_wakeup(fe); in dvb_frontend_reinitialise()
310 struct dvb_frontend *fe = fepriv->dvbdev->priv; in dvb_frontend_swzigzag_update_delay() local
312 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_swzigzag_update_delay()
332 static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wrapped) in dvb_frontend_swzigzag_autotune() argument
337 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_swzigzag_autotune()
338 struct dtv_frontend_properties *c = &fe->dtv_property_cache, tmp; in dvb_frontend_swzigzag_autotune()
343 autoinversion = ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) && in dvb_frontend_swzigzag_autotune()
404 dev_dbg(fe->dvb->device, "%s: drift:%i inversion:%i auto_step:%i " \ in dvb_frontend_swzigzag_autotune()
415 if (fe->ops.set_frontend) in dvb_frontend_swzigzag_autotune()
416 fe_set_err = fe->ops.set_frontend(fe); in dvb_frontend_swzigzag_autotune()
430 static void dvb_frontend_swzigzag(struct dvb_frontend *fe) in dvb_frontend_swzigzag() argument
434 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_swzigzag()
435 struct dtv_frontend_properties *c = &fe->dtv_property_cache, tmp; in dvb_frontend_swzigzag()
448 if (fe->ops.set_frontend) in dvb_frontend_swzigzag()
449 retval = fe->ops.set_frontend(fe); in dvb_frontend_swzigzag()
465 if (fe->ops.read_status) in dvb_frontend_swzigzag()
466 fe->ops.read_status(fe, &s); in dvb_frontend_swzigzag()
468 dvb_frontend_add_event(fe, s); in dvb_frontend_swzigzag()
479 if ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) && in dvb_frontend_swzigzag()
503 (fe->ops.info.caps & FE_CAN_RECOVER) && (fepriv->max_drift == 0)) { in dvb_frontend_swzigzag()
532 retval = dvb_frontend_swzigzag_autotune(fe, in dvb_frontend_swzigzag()
560 dvb_frontend_swzigzag_autotune(fe, 0); in dvb_frontend_swzigzag()
564 static int dvb_frontend_is_exiting(struct dvb_frontend *fe) in dvb_frontend_is_exiting() argument
566 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_is_exiting()
568 if (fe->exit != DVB_FE_NO_EXIT) in dvb_frontend_is_exiting()
579 static int dvb_frontend_should_wakeup(struct dvb_frontend *fe) in dvb_frontend_should_wakeup() argument
581 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_should_wakeup()
587 return dvb_frontend_is_exiting(fe); in dvb_frontend_should_wakeup()
590 static void dvb_frontend_wakeup(struct dvb_frontend *fe) in dvb_frontend_wakeup() argument
592 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_wakeup()
617 static int dvb_enable_media_tuner(struct dvb_frontend *fe) in dvb_enable_media_tuner() argument
619 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_enable_media_tuner()
620 struct dvb_adapter *adapter = fe->dvb; in dvb_enable_media_tuner()
653 dev_err(fe->dvb->device, in dvb_enable_media_tuner()
673 dev_err(fe->dvb->device, in dvb_enable_media_tuner()
680 dev_dbg(fe->dvb->device, in dvb_enable_media_tuner()
691 struct dvb_frontend *fe = data; in dvb_frontend_thread() local
692 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_thread()
702 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_thread()
712 ret = dvb_enable_media_tuner(fe); in dvb_frontend_thread()
715 dev_info(fe->dvb->device, in dvb_frontend_thread()
725 dvb_frontend_init(fe); in dvb_frontend_thread()
732 dvb_frontend_should_wakeup(fe) || kthread_should_stop() in dvb_frontend_thread()
736 if (kthread_should_stop() || dvb_frontend_is_exiting(fe)) { in dvb_frontend_thread()
740 fe->exit = DVB_FE_NORMAL_EXIT; in dvb_frontend_thread()
751 dvb_frontend_init(fe); in dvb_frontend_thread()
752 if (fe->ops.set_tone && fepriv->tone != -1) in dvb_frontend_thread()
753 fe->ops.set_tone(fe, fepriv->tone); in dvb_frontend_thread()
754 if (fe->ops.set_voltage && fepriv->voltage != -1) in dvb_frontend_thread()
755 fe->ops.set_voltage(fe, fepriv->voltage); in dvb_frontend_thread()
760 if (fe->ops.get_frontend_algo) { in dvb_frontend_thread()
761 algo = fe->ops.get_frontend_algo(fe); in dvb_frontend_thread()
764 dev_dbg(fe->dvb->device, "%s: Frontend ALGO = DVBFE_ALGO_HW\n", __func__); in dvb_frontend_thread()
767 dev_dbg(fe->dvb->device, "%s: Retune requested, FESTATE_RETUNE\n", __func__); in dvb_frontend_thread()
774 if (fe->ops.tune) in dvb_frontend_thread()
775 fe->ops.tune(fe, re_tune, fepriv->tune_mode_flags, &fepriv->delay, &s); in dvb_frontend_thread()
778 dev_dbg(fe->dvb->device, "%s: state changed, adding current state\n", __func__); in dvb_frontend_thread()
779 dvb_frontend_add_event(fe, s); in dvb_frontend_thread()
784 dev_dbg(fe->dvb->device, "%s: Frontend ALGO = DVBFE_ALGO_SW\n", __func__); in dvb_frontend_thread()
785 dvb_frontend_swzigzag(fe); in dvb_frontend_thread()
788 …dev_dbg(fe->dvb->device, "%s: Frontend ALGO = DVBFE_ALGO_CUSTOM, state=%d\n", __func__, fepriv->st… in dvb_frontend_thread()
790 dev_dbg(fe->dvb->device, "%s: Retune requested, FESTAT_RETUNE\n", __func__); in dvb_frontend_thread()
798 if (fe->ops.search) { in dvb_frontend_thread()
799 fepriv->algo_status = fe->ops.search(fe); in dvb_frontend_thread()
812 dtv_property_legacy_params_sync(fe, &fepriv->parameters_out); in dvb_frontend_thread()
813 fe->ops.read_status(fe, &s); in dvb_frontend_thread()
815 dvb_frontend_add_event(fe, s); /* update event list */ in dvb_frontend_thread()
826 dev_dbg(fe->dvb->device, "%s: UNDEFINED ALGO !\n", __func__); in dvb_frontend_thread()
830 dvb_frontend_swzigzag(fe); in dvb_frontend_thread()
841 if (fe->ops.set_voltage) in dvb_frontend_thread()
842 fe->ops.set_voltage(fe, SEC_VOLTAGE_OFF); in dvb_frontend_thread()
843 if (fe->ops.tuner_ops.sleep) { in dvb_frontend_thread()
844 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_thread()
845 fe->ops.i2c_gate_ctrl(fe, 1); in dvb_frontend_thread()
846 fe->ops.tuner_ops.sleep(fe); in dvb_frontend_thread()
847 if (fe->ops.i2c_gate_ctrl) in dvb_frontend_thread()
848 fe->ops.i2c_gate_ctrl(fe, 0); in dvb_frontend_thread()
850 if (fe->ops.sleep) in dvb_frontend_thread()
851 fe->ops.sleep(fe); in dvb_frontend_thread()
856 fe->exit = DVB_FE_DEVICE_REMOVED; in dvb_frontend_thread()
858 fe->exit = DVB_FE_NO_EXIT; in dvb_frontend_thread()
863 dvb_frontend_wakeup(fe); in dvb_frontend_thread()
867 static void dvb_frontend_stop(struct dvb_frontend *fe) in dvb_frontend_stop() argument
869 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_stop()
871 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_stop()
873 if (fe->exit != DVB_FE_DEVICE_REMOVED) in dvb_frontend_stop()
874 fe->exit = DVB_FE_NORMAL_EXIT; in dvb_frontend_stop()
887 dev_warn(fe->dvb->device, in dvb_frontend_stop()
935 static int dvb_frontend_start(struct dvb_frontend *fe) in dvb_frontend_start() argument
938 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_start()
941 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_start()
944 if (fe->exit == DVB_FE_NO_EXIT) in dvb_frontend_start()
947 dvb_frontend_stop (fe); in dvb_frontend_start()
956 fe->exit = DVB_FE_NO_EXIT; in dvb_frontend_start()
960 fe_thread = kthread_run(dvb_frontend_thread, fe, in dvb_frontend_start()
961 "kdvb-ad-%i-fe-%i", fe->dvb->num,fe->id); in dvb_frontend_start()
964 dev_warn(fe->dvb->device, in dvb_frontend_start()
974 static void dvb_frontend_get_frequency_limits(struct dvb_frontend *fe, in dvb_frontend_get_frequency_limits() argument
977 *freq_min = max(fe->ops.info.frequency_min, fe->ops.tuner_ops.info.frequency_min); in dvb_frontend_get_frequency_limits()
979 if (fe->ops.info.frequency_max == 0) in dvb_frontend_get_frequency_limits()
980 *freq_max = fe->ops.tuner_ops.info.frequency_max; in dvb_frontend_get_frequency_limits()
981 else if (fe->ops.tuner_ops.info.frequency_max == 0) in dvb_frontend_get_frequency_limits()
982 *freq_max = fe->ops.info.frequency_max; in dvb_frontend_get_frequency_limits()
984 *freq_max = min(fe->ops.info.frequency_max, fe->ops.tuner_ops.info.frequency_max); in dvb_frontend_get_frequency_limits()
987 …dev_warn(fe->dvb->device, "DVB: adapter %i frontend %u frequency limits undefined - fix the driver… in dvb_frontend_get_frequency_limits()
988 fe->dvb->num, fe->id); in dvb_frontend_get_frequency_limits()
991 static int dvb_frontend_check_parameters(struct dvb_frontend *fe) in dvb_frontend_check_parameters() argument
993 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_check_parameters()
998 dvb_frontend_get_frequency_limits(fe, &freq_min, &freq_max); in dvb_frontend_check_parameters()
1001 dev_warn(fe->dvb->device, "DVB: adapter %i frontend %i frequency %u out of range (%u..%u)\n", in dvb_frontend_check_parameters()
1002 fe->dvb->num, fe->id, c->frequency, in dvb_frontend_check_parameters()
1014 if ((fe->ops.info.symbol_rate_min && in dvb_frontend_check_parameters()
1015 c->symbol_rate < fe->ops.info.symbol_rate_min) || in dvb_frontend_check_parameters()
1016 (fe->ops.info.symbol_rate_max && in dvb_frontend_check_parameters()
1017 c->symbol_rate > fe->ops.info.symbol_rate_max)) { in dvb_frontend_check_parameters()
1018 dev_warn(fe->dvb->device, "DVB: adapter %i frontend %i symbol rate %u out of range (%u..%u)\n", in dvb_frontend_check_parameters()
1019 fe->dvb->num, fe->id, c->symbol_rate, in dvb_frontend_check_parameters()
1020 fe->ops.info.symbol_rate_min, in dvb_frontend_check_parameters()
1021 fe->ops.info.symbol_rate_max); in dvb_frontend_check_parameters()
1031 static int dvb_frontend_clear_cache(struct dvb_frontend *fe) in dvb_frontend_clear_cache() argument
1033 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_clear_cache()
1043 dev_dbg(fe->dvb->device, "%s: Clearing cache for delivery system %d\n", in dvb_frontend_clear_cache()
1188 static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp) in dtv_property_dump() argument
1193 dev_warn(fe->dvb->device, "%s: tvp.cmd = 0x%08x undefined\n", in dtv_property_dump()
1198 dev_dbg(fe->dvb->device, "%s: tvp.cmd = 0x%08x (%s)\n", __func__, in dtv_property_dump()
1202 dev_dbg(fe->dvb->device, "%s: tvp.u.buffer.len = 0x%02x\n", in dtv_property_dump()
1206 dev_dbg(fe->dvb->device, in dtv_property_dump()
1210 dev_dbg(fe->dvb->device, "%s: tvp.u.data = 0x%08x\n", __func__, in dtv_property_dump()
1219 static int dtv_property_cache_sync(struct dvb_frontend *fe, in dtv_property_cache_sync() argument
1228 dev_dbg(fe->dvb->device, "%s: Preparing QPSK req\n", __func__); in dtv_property_cache_sync()
1233 dev_dbg(fe->dvb->device, "%s: Preparing QAM req\n", __func__); in dtv_property_cache_sync()
1239 dev_dbg(fe->dvb->device, "%s: Preparing OFDM req\n", __func__); in dtv_property_cache_sync()
1272 dev_dbg(fe->dvb->device, "%s: Preparing ATSC req\n", __func__); in dtv_property_cache_sync()
1282 dev_err(fe->dvb->device, in dtv_property_cache_sync()
1294 static int dtv_property_legacy_params_sync(struct dvb_frontend *fe, in dtv_property_legacy_params_sync() argument
1297 const struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dtv_property_legacy_params_sync()
1304 dev_err(fe->dvb->device, in dtv_property_legacy_params_sync()
1309 dev_dbg(fe->dvb->device, "%s: Preparing QPSK req\n", __func__); in dtv_property_legacy_params_sync()
1314 dev_dbg(fe->dvb->device, "%s: Preparing QAM req\n", __func__); in dtv_property_legacy_params_sync()
1320 dev_dbg(fe->dvb->device, "%s: Preparing OFDM req\n", __func__); in dtv_property_legacy_params_sync()
1352 dev_dbg(fe->dvb->device, "%s: Preparing VSB req\n", __func__); in dtv_property_legacy_params_sync()
1369 static int dtv_get_frontend(struct dvb_frontend *fe, in dtv_get_frontend() argument
1374 if (fe->ops.get_frontend) { in dtv_get_frontend()
1375 r = fe->ops.get_frontend(fe); in dtv_get_frontend()
1379 dtv_property_legacy_params_sync(fe, p_out); in dtv_get_frontend()
1392 static int dtv_property_process_get(struct dvb_frontend *fe, in dtv_property_process_get() argument
1402 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dtv_property_process_get()
1403 tvp->u.buffer.data[ncaps] = fe->ops.delsys[ncaps]; in dtv_property_process_get()
1527 tvp->u.data = fe->dtv_property_cache.atscmh_fic_ver; in dtv_property_process_get()
1530 tvp->u.data = fe->dtv_property_cache.atscmh_parade_id; in dtv_property_process_get()
1533 tvp->u.data = fe->dtv_property_cache.atscmh_nog; in dtv_property_process_get()
1536 tvp->u.data = fe->dtv_property_cache.atscmh_tnog; in dtv_property_process_get()
1539 tvp->u.data = fe->dtv_property_cache.atscmh_sgn; in dtv_property_process_get()
1542 tvp->u.data = fe->dtv_property_cache.atscmh_prc; in dtv_property_process_get()
1545 tvp->u.data = fe->dtv_property_cache.atscmh_rs_frame_mode; in dtv_property_process_get()
1548 tvp->u.data = fe->dtv_property_cache.atscmh_rs_frame_ensemble; in dtv_property_process_get()
1551 tvp->u.data = fe->dtv_property_cache.atscmh_rs_code_mode_pri; in dtv_property_process_get()
1554 tvp->u.data = fe->dtv_property_cache.atscmh_rs_code_mode_sec; in dtv_property_process_get()
1557 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_block_mode; in dtv_property_process_get()
1560 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_a; in dtv_property_process_get()
1563 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_b; in dtv_property_process_get()
1566 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_c; in dtv_property_process_get()
1569 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_d; in dtv_property_process_get()
1602 dev_dbg(fe->dvb->device, in dtv_property_process_get()
1609 if (fe->ops.get_property) { in dtv_property_process_get()
1610 r = fe->ops.get_property(fe, tvp); in dtv_property_process_get()
1615 dtv_property_dump(fe, tvp); in dtv_property_process_get()
1620 static int dtv_set_frontend(struct dvb_frontend *fe);
1642 static int emulate_delivery_system(struct dvb_frontend *fe, u32 delsys) in emulate_delivery_system() argument
1645 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in emulate_delivery_system()
1653 dev_dbg(fe->dvb->device, in emulate_delivery_system()
1673 dev_dbg(fe->dvb->device, "%s: change delivery system on cache to %d\n", in emulate_delivery_system()
1696 static int dvbv5_set_delivery_system(struct dvb_frontend *fe, in dvbv5_set_delivery_system() argument
1701 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvbv5_set_delivery_system()
1711 desired_system = fe->ops.delsys[0]; in dvbv5_set_delivery_system()
1719 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dvbv5_set_delivery_system()
1720 if (fe->ops.delsys[ncaps] == desired_system) { in dvbv5_set_delivery_system()
1722 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1738 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1751 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dvbv5_set_delivery_system()
1752 if (dvbv3_type(fe->ops.delsys[ncaps]) == type) in dvbv5_set_delivery_system()
1753 delsys = fe->ops.delsys[ncaps]; in dvbv5_set_delivery_system()
1759 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1765 dev_dbg(fe->dvb->device, in dvbv5_set_delivery_system()
1769 return emulate_delivery_system(fe, desired_system); in dvbv5_set_delivery_system()
1800 static int dvbv3_set_delivery_system(struct dvb_frontend *fe) in dvbv3_set_delivery_system() argument
1804 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvbv3_set_delivery_system()
1808 c->delivery_system = fe->ops.delsys[0]; in dvbv3_set_delivery_system()
1815 dev_dbg(fe->dvb->device, in dvbv3_set_delivery_system()
1826 while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) { in dvbv3_set_delivery_system()
1827 if (dvbv3_type(fe->ops.delsys[ncaps]) != DVBV3_UNKNOWN) { in dvbv3_set_delivery_system()
1828 delsys = fe->ops.delsys[ncaps]; in dvbv3_set_delivery_system()
1834 dev_dbg(fe->dvb->device, in dvbv3_set_delivery_system()
1839 return emulate_delivery_system(fe, delsys); in dvbv3_set_delivery_system()
1842 static int dtv_property_process_set(struct dvb_frontend *fe, in dtv_property_process_set() argument
1847 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dtv_property_process_set()
1850 if (fe->ops.set_property) { in dtv_property_process_set()
1851 r = fe->ops.set_property(fe, tvp); in dtv_property_process_set()
1862 dvb_frontend_clear_cache(fe); in dtv_property_process_set()
1870 dev_dbg(fe->dvb->device, "%s: Finalised property cache\n", in dtv_property_process_set()
1873 r = dtv_set_frontend(fe); in dtv_property_process_set()
1900 r = dvbv5_set_delivery_system(fe, tvp->u.data); in dtv_property_process_set()
1995 fe->dtv_property_cache.atscmh_parade_id = tvp->u.data; in dtv_property_process_set()
1998 fe->dtv_property_cache.atscmh_rs_frame_ensemble = tvp->u.data; in dtv_property_process_set()
2003 if (fe->ops.set_lna) in dtv_property_process_set()
2004 r = fe->ops.set_lna(fe); in dtv_property_process_set()
2020 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_ioctl() local
2021 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_ioctl()
2022 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_ioctl()
2025 dev_dbg(fe->dvb->device, "%s: (%d)\n", __func__, _IOC_NR(cmd)); in dvb_frontend_ioctl()
2029 if (fe->exit != DVB_FE_NO_EXIT) { in dvb_frontend_ioctl()
2056 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_ioctl_properties() local
2057 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_ioctl_properties()
2058 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_ioctl_properties()
2065 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_ioctl_properties()
2068 dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num); in dvb_frontend_ioctl_properties()
2069 dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props); in dvb_frontend_ioctl_properties()
2089 err = dtv_property_process_set(fe, tvp + i, file); in dvb_frontend_ioctl_properties()
2096 dev_dbg(fe->dvb->device, "%s: Property cache is full, tuning\n", __func__); in dvb_frontend_ioctl_properties()
2099 dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num); in dvb_frontend_ioctl_properties()
2100 dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props); in dvb_frontend_ioctl_properties()
2125 err = dtv_get_frontend(fe, NULL); in dvb_frontend_ioctl_properties()
2130 err = dtv_property_process_get(fe, c, tvp + i, file); in dvb_frontend_ioctl_properties()
2150 static int dtv_set_frontend(struct dvb_frontend *fe) in dtv_set_frontend() argument
2152 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dtv_set_frontend()
2153 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dtv_set_frontend()
2157 if (dvb_frontend_check_parameters(fe) < 0) in dtv_set_frontend()
2165 dtv_property_legacy_params_sync(fe, &fepriv->parameters_out); in dtv_set_frontend()
2234 if (fe->ops.get_tune_settings && (fe->ops.get_tune_settings(fe, &fetunesettings) == 0)) { in dtv_set_frontend()
2256 fepriv->step_size = fe->ops.info.frequency_stepsize * 2; in dtv_set_frontend()
2257 fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1; in dtv_set_frontend()
2278 dvb_frontend_clear_events(fe); in dtv_set_frontend()
2279 dvb_frontend_add_event(fe, 0); in dtv_set_frontend()
2280 dvb_frontend_wakeup(fe); in dtv_set_frontend()
2291 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_ioctl_legacy() local
2292 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_ioctl_legacy()
2293 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in dvb_frontend_ioctl_legacy()
2300 memcpy(info, &fe->ops.info, sizeof(struct dvb_frontend_info)); in dvb_frontend_ioctl_legacy()
2301 dvb_frontend_get_frequency_limits(fe, &info->frequency_min, &info->frequency_max); in dvb_frontend_ioctl_legacy()
2328 dev_err(fe->dvb->device, in dvb_frontend_ioctl_legacy()
2331 fe->ops.info.type = FE_OFDM; in dvb_frontend_ioctl_legacy()
2333 dev_dbg(fe->dvb->device, "%s: current delivery system on cache: %d, V3 type: %d\n", in dvb_frontend_ioctl_legacy()
2334 __func__, c->delivery_system, fe->ops.info.type); in dvb_frontend_ioctl_legacy()
2355 if (fe->ops.read_status) in dvb_frontend_ioctl_legacy()
2356 err = fe->ops.read_status(fe, status); in dvb_frontend_ioctl_legacy()
2361 if (fe->ops.read_ber) { in dvb_frontend_ioctl_legacy()
2363 err = fe->ops.read_ber(fe, (__u32 *) parg); in dvb_frontend_ioctl_legacy()
2370 if (fe->ops.read_signal_strength) { in dvb_frontend_ioctl_legacy()
2372 err = fe->ops.read_signal_strength(fe, (__u16 *) parg); in dvb_frontend_ioctl_legacy()
2379 if (fe->ops.read_snr) { in dvb_frontend_ioctl_legacy()
2381 err = fe->ops.read_snr(fe, (__u16 *) parg); in dvb_frontend_ioctl_legacy()
2388 if (fe->ops.read_ucblocks) { in dvb_frontend_ioctl_legacy()
2390 err = fe->ops.read_ucblocks(fe, (__u32 *) parg); in dvb_frontend_ioctl_legacy()
2397 if (fe->ops.diseqc_reset_overload) { in dvb_frontend_ioctl_legacy()
2398 err = fe->ops.diseqc_reset_overload(fe); in dvb_frontend_ioctl_legacy()
2405 if (fe->ops.diseqc_send_master_cmd) { in dvb_frontend_ioctl_legacy()
2406 err = fe->ops.diseqc_send_master_cmd(fe, (struct dvb_diseqc_master_cmd*) parg); in dvb_frontend_ioctl_legacy()
2413 if (fe->ops.diseqc_send_burst) { in dvb_frontend_ioctl_legacy()
2414 err = fe->ops.diseqc_send_burst(fe, (fe_sec_mini_cmd_t) parg); in dvb_frontend_ioctl_legacy()
2421 if (fe->ops.set_tone) { in dvb_frontend_ioctl_legacy()
2422 err = fe->ops.set_tone(fe, (fe_sec_tone_mode_t) parg); in dvb_frontend_ioctl_legacy()
2430 if (fe->ops.set_voltage) { in dvb_frontend_ioctl_legacy()
2431 err = fe->ops.set_voltage(fe, (fe_sec_voltage_t) parg); in dvb_frontend_ioctl_legacy()
2439 if (fe->ops.dishnetwork_send_legacy_command) { in dvb_frontend_ioctl_legacy()
2440 err = fe->ops.dishnetwork_send_legacy_command(fe, (unsigned long) parg); in dvb_frontend_ioctl_legacy()
2443 } else if (fe->ops.set_voltage) { in dvb_frontend_ioctl_legacy()
2473 fe->ops.set_voltage(fe, SEC_VOLTAGE_18); in dvb_frontend_ioctl_legacy()
2481 fe->ops.set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18); in dvb_frontend_ioctl_legacy()
2490 __func__, fe->dvb->num); in dvb_frontend_ioctl_legacy()
2501 if (fe->ops.diseqc_recv_slave_reply) in dvb_frontend_ioctl_legacy()
2502 err = fe->ops.diseqc_recv_slave_reply(fe, (struct dvb_diseqc_slave_reply*) parg); in dvb_frontend_ioctl_legacy()
2506 if (fe->ops.enable_high_lnb_voltage) in dvb_frontend_ioctl_legacy()
2507 err = fe->ops.enable_high_lnb_voltage(fe, (long) parg); in dvb_frontend_ioctl_legacy()
2511 err = dvbv3_set_delivery_system(fe); in dvb_frontend_ioctl_legacy()
2515 err = dtv_property_cache_sync(fe, c, parg); in dvb_frontend_ioctl_legacy()
2518 err = dtv_set_frontend(fe); in dvb_frontend_ioctl_legacy()
2521 err = dvb_frontend_get_event (fe, parg, file->f_flags); in dvb_frontend_ioctl_legacy()
2525 err = dtv_get_frontend(fe, parg); in dvb_frontend_ioctl_legacy()
2541 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_poll() local
2542 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_poll()
2544 dev_dbg_ratelimited(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_poll()
2557 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_open() local
2558 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_open()
2559 struct dvb_adapter *adapter = fe->dvb; in dvb_frontend_open()
2562 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_open()
2563 if (fe->exit == DVB_FE_DEVICE_REMOVED) in dvb_frontend_open()
2605 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) { in dvb_frontend_open()
2606 if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0) in dvb_frontend_open()
2627 ret = dvb_frontend_start (fe); in dvb_frontend_open()
2642 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) in dvb_frontend_open()
2643 fe->ops.ts_bus_ctrl(fe, 0); in dvb_frontend_open()
2653 struct dvb_frontend *fe = dvbdev->priv; in dvb_frontend_release() local
2654 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_release()
2657 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_frontend_release()
2668 if (fe->exit != DVB_FE_NO_EXIT) in dvb_frontend_release()
2670 if (fe->ops.ts_bus_ctrl) in dvb_frontend_release()
2671 fe->ops.ts_bus_ctrl(fe, 0); in dvb_frontend_release()
2686 int dvb_frontend_suspend(struct dvb_frontend *fe) in dvb_frontend_suspend() argument
2690 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num, in dvb_frontend_suspend()
2691 fe->id); in dvb_frontend_suspend()
2693 if (fe->ops.tuner_ops.suspend) in dvb_frontend_suspend()
2694 ret = fe->ops.tuner_ops.suspend(fe); in dvb_frontend_suspend()
2695 else if (fe->ops.tuner_ops.sleep) in dvb_frontend_suspend()
2696 ret = fe->ops.tuner_ops.sleep(fe); in dvb_frontend_suspend()
2698 if (fe->ops.sleep) in dvb_frontend_suspend()
2699 ret = fe->ops.sleep(fe); in dvb_frontend_suspend()
2705 int dvb_frontend_resume(struct dvb_frontend *fe) in dvb_frontend_resume() argument
2707 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_frontend_resume()
2710 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num, in dvb_frontend_resume()
2711 fe->id); in dvb_frontend_resume()
2713 fe->exit = DVB_FE_DEVICE_RESUME; in dvb_frontend_resume()
2714 if (fe->ops.init) in dvb_frontend_resume()
2715 ret = fe->ops.init(fe); in dvb_frontend_resume()
2717 if (fe->ops.tuner_ops.resume) in dvb_frontend_resume()
2718 ret = fe->ops.tuner_ops.resume(fe); in dvb_frontend_resume()
2719 else if (fe->ops.tuner_ops.init) in dvb_frontend_resume()
2720 ret = fe->ops.tuner_ops.init(fe); in dvb_frontend_resume()
2722 fe->exit = DVB_FE_NO_EXIT; in dvb_frontend_resume()
2724 dvb_frontend_wakeup(fe); in dvb_frontend_resume()
2731 struct dvb_frontend* fe) in dvb_register_frontend() argument
2740 .name = fe->ops.info.name, in dvb_register_frontend()
2750 fe->frontend_priv = kzalloc(sizeof(struct dvb_frontend_private), GFP_KERNEL); in dvb_register_frontend()
2751 if (fe->frontend_priv == NULL) { in dvb_register_frontend()
2755 fepriv = fe->frontend_priv; in dvb_register_frontend()
2761 fe->dvb = dvb; in dvb_register_frontend()
2764 dev_info(fe->dvb->device, in dvb_register_frontend()
2766 fe->dvb->num, fe->id, fe->ops.info.name); in dvb_register_frontend()
2768 dvb_register_device (fe->dvb, &fepriv->dvbdev, &dvbdev_template, in dvb_register_frontend()
2769 fe, DVB_DEVICE_FRONTEND); in dvb_register_frontend()
2776 fe->dtv_property_cache.delivery_system = fe->ops.delsys[0]; in dvb_register_frontend()
2777 dvb_frontend_clear_cache(fe); in dvb_register_frontend()
2784 int dvb_unregister_frontend(struct dvb_frontend* fe) in dvb_unregister_frontend() argument
2786 struct dvb_frontend_private *fepriv = fe->frontend_priv; in dvb_unregister_frontend()
2787 dev_dbg(fe->dvb->device, "%s:\n", __func__); in dvb_unregister_frontend()
2790 dvb_frontend_stop (fe); in dvb_unregister_frontend()
2808 void dvb_frontend_detach(struct dvb_frontend* fe) in dvb_frontend_detach() argument
2812 if (fe->ops.release_sec) { in dvb_frontend_detach()
2813 fe->ops.release_sec(fe); in dvb_frontend_detach()
2814 dvb_detach(fe->ops.release_sec); in dvb_frontend_detach()
2816 if (fe->ops.tuner_ops.release) { in dvb_frontend_detach()
2817 fe->ops.tuner_ops.release(fe); in dvb_frontend_detach()
2818 dvb_detach(fe->ops.tuner_ops.release); in dvb_frontend_detach()
2820 if (fe->ops.analog_ops.release) { in dvb_frontend_detach()
2821 fe->ops.analog_ops.release(fe); in dvb_frontend_detach()
2822 dvb_detach(fe->ops.analog_ops.release); in dvb_frontend_detach()
2824 ptr = (void*)fe->ops.release; in dvb_frontend_detach()
2826 fe->ops.release(fe); in dvb_frontend_detach()
2831 void dvb_frontend_detach(struct dvb_frontend* fe) in dvb_frontend_detach() argument
2833 if (fe->ops.release_sec) in dvb_frontend_detach()
2834 fe->ops.release_sec(fe); in dvb_frontend_detach()
2835 if (fe->ops.tuner_ops.release) in dvb_frontend_detach()
2836 fe->ops.tuner_ops.release(fe); in dvb_frontend_detach()
2837 if (fe->ops.analog_ops.release) in dvb_frontend_detach()
2838 fe->ops.analog_ops.release(fe); in dvb_frontend_detach()
2839 if (fe->ops.release) in dvb_frontend_detach()
2840 fe->ops.release(fe); in dvb_frontend_detach()