Lines Matching +full:tx +full:- +full:freq
1 // SPDX-License-Identifier: GPL-2.0-only
3 * vivid-radio-common.c - common radio rx/tx support functions.
13 #include "vivid-core.h"
14 #include "vivid-ctrls.h"
15 #include "vivid-radio-common.h"
16 #include "vivid-rds-gen.h"
56 * is set up with the values from the RDS TX controls, otherwise it
61 struct vivid_rds_gen *rds = &dev->rds_gen; in vivid_radio_rds_init()
62 bool alt = dev->radio_rx_rds_use_alternates; in vivid_radio_rds_init()
65 if (dev->radio_rds_loop && !dev->radio_tx_rds_controls) in vivid_radio_rds_init()
68 if (dev->radio_rds_loop) { in vivid_radio_rds_init()
69 v4l2_ctrl_lock(dev->radio_tx_rds_pi); in vivid_radio_rds_init()
70 rds->picode = dev->radio_tx_rds_pi->cur.val; in vivid_radio_rds_init()
71 rds->pty = dev->radio_tx_rds_pty->cur.val; in vivid_radio_rds_init()
72 rds->mono_stereo = dev->radio_tx_rds_mono_stereo->cur.val; in vivid_radio_rds_init()
73 rds->art_head = dev->radio_tx_rds_art_head->cur.val; in vivid_radio_rds_init()
74 rds->compressed = dev->radio_tx_rds_compressed->cur.val; in vivid_radio_rds_init()
75 rds->dyn_pty = dev->radio_tx_rds_dyn_pty->cur.val; in vivid_radio_rds_init()
76 rds->ta = dev->radio_tx_rds_ta->cur.val; in vivid_radio_rds_init()
77 rds->tp = dev->radio_tx_rds_tp->cur.val; in vivid_radio_rds_init()
78 rds->ms = dev->radio_tx_rds_ms->cur.val; in vivid_radio_rds_init()
79 strscpy(rds->psname, in vivid_radio_rds_init()
80 dev->radio_tx_rds_psname->p_cur.p_char, in vivid_radio_rds_init()
81 sizeof(rds->psname)); in vivid_radio_rds_init()
82 strscpy(rds->radiotext, in vivid_radio_rds_init()
83 dev->radio_tx_rds_radiotext->p_cur.p_char + alt * 64, in vivid_radio_rds_init()
84 sizeof(rds->radiotext)); in vivid_radio_rds_init()
85 v4l2_ctrl_unlock(dev->radio_tx_rds_pi); in vivid_radio_rds_init()
87 vivid_rds_gen_fill(rds, dev->radio_rx_freq, alt); in vivid_radio_rds_init()
89 if (dev->radio_rx_rds_controls) { in vivid_radio_rds_init()
90 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, rds->pty); in vivid_radio_rds_init()
91 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, rds->ta); in vivid_radio_rds_init()
92 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, rds->tp); in vivid_radio_rds_init()
93 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, rds->ms); in vivid_radio_rds_init()
94 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, rds->psname); in vivid_radio_rds_init()
95 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, rds->radiotext); in vivid_radio_rds_init()
96 if (!dev->radio_rds_loop) in vivid_radio_rds_init()
97 dev->radio_rx_rds_use_alternates = !dev->radio_rx_rds_use_alternates; in vivid_radio_rds_init()
116 if (dev->radio_rx_freq <= AM_FREQ_RANGE_HIGH) { in vivid_radio_calc_sig_qual()
120 sig_qual = (dev->radio_rx_freq + delta) % mod - delta; in vivid_radio_calc_sig_qual()
121 if (dev->has_radio_tx) in vivid_radio_calc_sig_qual()
122 sig_qual_tx = dev->radio_rx_freq - dev->radio_tx_freq; in vivid_radio_calc_sig_qual()
129 if (!dev->radio_rds_loop && !dev->radio_tx_rds_controls) in vivid_radio_calc_sig_qual()
130 memset(dev->rds_gen.data, 0, in vivid_radio_calc_sig_qual()
131 sizeof(dev->rds_gen.data)); in vivid_radio_calc_sig_qual()
132 dev->radio_rds_loop = dev->radio_rx_freq >= FM_FREQ_RANGE_LOW; in vivid_radio_calc_sig_qual()
134 dev->radio_rds_loop = false; in vivid_radio_calc_sig_qual()
136 if (dev->radio_rx_freq <= AM_FREQ_RANGE_HIGH) in vivid_radio_calc_sig_qual()
138 dev->radio_rx_sig_qual = sig_qual; in vivid_radio_calc_sig_qual()
143 if (vf->tuner != 0) in vivid_radio_g_frequency()
144 return -EINVAL; in vivid_radio_g_frequency()
145 vf->frequency = *pfreq; in vivid_radio_g_frequency()
152 unsigned freq; in vivid_radio_s_frequency() local
155 if (vf->tuner != 0) in vivid_radio_s_frequency()
156 return -EINVAL; in vivid_radio_s_frequency()
158 if (vf->frequency >= (FM_FREQ_RANGE_LOW + SW_FREQ_RANGE_HIGH) / 2) in vivid_radio_s_frequency()
160 else if (vf->frequency <= (AM_FREQ_RANGE_HIGH + SW_FREQ_RANGE_LOW) / 2) in vivid_radio_s_frequency()
165 freq = clamp_t(u32, vf->frequency, vivid_radio_bands[band].rangelow, in vivid_radio_s_frequency()
167 *pfreq = freq; in vivid_radio_s_frequency()
171 * (since that depends on both frequencies) and re-init the rds in vivid_radio_s_frequency()