• Home
  • Raw
  • Download

Lines Matching +full:p +full:- +full:state

1 // SPDX-License-Identifier: GPL-2.0
3 * ddbridge-sx8.c: Digital Devices MAX SX8 driver
20 #include "ddbridge-io.h"
21 #include "ddbridge-mci.h"
57 struct sx8 *state = fe->demodulator_priv; in release() local
58 struct mci_base *mci_base = state->mci.base; in release()
60 mci_base->count--; in release()
61 if (mci_base->count == 0) { in release()
62 list_del(&mci_base->mci_list); in release()
65 kfree(state); in release()
71 struct sx8 *state = fe->demodulator_priv; in get_info() local
76 cmd.demod = state->mci.demod; in get_info()
77 stat = ddb_mci_cmd(&state->mci, &cmd, &state->signal_info); in get_info()
83 struct sx8 *state = fe->demodulator_priv; in get_snr() local
84 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in get_snr() local
86 p->cnr.len = 1; in get_snr()
87 p->cnr.stat[0].scale = FE_SCALE_DECIBEL; in get_snr()
88 p->cnr.stat[0].svalue = in get_snr()
89 (s64)state->signal_info.dvbs2_signal_info.signal_to_noise in get_snr()
96 struct sx8 *state = fe->demodulator_priv; in get_strength() local
97 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in get_strength() local
100 str = 100000 - in get_strength()
101 (state->signal_info.dvbs2_signal_info.channel_power in get_strength()
103 p->strength.len = 1; in get_strength()
104 p->strength.stat[0].scale = FE_SCALE_DECIBEL; in get_strength()
105 p->strength.stat[0].svalue = str; in get_strength()
112 struct sx8 *state = fe->demodulator_priv; in read_status() local
117 cmd.demod = state->mci.demod; in read_status()
118 stat = ddb_mci_cmd(&state->mci, &cmd, &res); in read_status()
135 struct sx8 *state = fe->demodulator_priv; in mci_set_tuner() local
136 struct mci_base *mci_base = state->mci.base; in mci_set_tuner()
141 cmd.tuner = state->mci.tuner; in mci_set_tuner()
143 cmd.sx8_input_enable.flags = sx8_base->gain_mode[state->mci.tuner]; in mci_set_tuner()
144 return ddb_mci_cmd(&state->mci, &cmd, NULL); in mci_set_tuner()
149 struct sx8 *state = fe->demodulator_priv; in stop() local
150 struct mci_base *mci_base = state->mci.base; in stop()
153 u32 input = state->mci.tuner; in stop()
156 if (state->mci.demod != SX8_DEMOD_NONE) { in stop()
158 cmd.demod = state->mci.demod; in stop()
159 ddb_mci_cmd(&state->mci, &cmd, NULL); in stop()
160 if (sx8_base->iq_mode) { in stop()
162 cmd.demod = state->mci.demod; in stop()
164 ddb_mci_cmd(&state->mci, &cmd, NULL); in stop()
165 ddb_mci_config(&state->mci, SX8_TSCONFIG_MODE_NORMAL); in stop()
168 mutex_lock(&mci_base->tuner_lock); in stop()
169 sx8_base->tuner_use_count[input]--; in stop()
170 if (!sx8_base->tuner_use_count[input]) in stop()
172 if (state->mci.demod < SX8_DEMOD_NUM) { in stop()
173 sx8_base->demod_in_use[state->mci.demod] = 0; in stop()
174 state->mci.demod = SX8_DEMOD_NONE; in stop()
176 sx8_base->used_ldpc_bitrate[state->mci.nr] = 0; in stop()
177 sx8_base->iq_mode = 0; in stop()
178 mutex_unlock(&mci_base->tuner_lock); in stop()
179 state->started = 0; in stop()
185 struct sx8 *state = fe->demodulator_priv; in start() local
186 struct mci_base *mci_base = state->mci.base; in start()
188 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in start() local
192 u32 input = state->mci.tuner; in start()
194 int i = -1, stat = 0; in start()
196 if (p->symbol_rate >= (MCLK / 2)) in start()
199 return -EINVAL; in start()
211 mutex_lock(&mci_base->tuner_lock); in start()
212 if (sx8_base->iq_mode) { in start()
213 stat = -EBUSY; in start()
217 if (sx8_base->direct_mode) { in start()
218 if (p->symbol_rate >= MCLK / 2) { in start()
219 if (state->mci.nr < 4) in start()
220 i = state->mci.nr; in start()
222 i = state->mci.nr; in start()
226 used_ldpc_bitrate += sx8_base->used_ldpc_bitrate[i]; in start()
227 if (sx8_base->demod_in_use[i]) in start()
233 stat = -EBUSY; in start()
236 free_ldpc_bitrate = MAX_LDPC_BITRATE - used_ldpc_bitrate; in start()
240 while (p->symbol_rate * bits_per_symbol > free_ldpc_bitrate) in start()
241 bits_per_symbol--; in start()
243 stat = -EBUSY; in start()
247 modmask &= ((1 << (bits_per_symbol - 1)) - 1); in start()
249 stat = -EBUSY; in start()
253 i = (p->symbol_rate > (MCLK / 2)) ? 3 : 7; in start()
254 while (i >= 0 && sx8_base->demod_in_use[i]) in start()
255 i--; in start()
259 stat = -EBUSY; in start()
262 sx8_base->demod_in_use[i] = 1; in start()
263 sx8_base->used_ldpc_bitrate[state->mci.nr] = p->symbol_rate in start()
265 state->mci.demod = i; in start()
267 if (!sx8_base->tuner_use_count[input]) in start()
269 sx8_base->tuner_use_count[input]++; in start()
270 sx8_base->iq_mode = (ts_config > 1); in start()
272 mutex_unlock(&mci_base->tuner_lock); in start()
277 if (sx8_base->iq_mode) { in start()
279 cmd.demod = state->mci.demod; in start()
281 ddb_mci_cmd(&state->mci, &cmd, NULL); in start()
282 ddb_mci_config(&state->mci, ts_config); in start()
284 if (p->stream_id != NO_STREAM_ID_FILTER && p->stream_id != 0x80000000) in start()
286 dev_dbg(mci_base->dev, "MCI-%d: tuner=%d demod=%d\n", in start()
287 state->mci.nr, state->mci.tuner, state->mci.demod); in start()
292 cmd.dvbs2_search.frequency = p->frequency * 1000; in start()
293 cmd.dvbs2_search.symbol_rate = p->symbol_rate; in start()
295 p->scrambling_sequence_index | 0x80000000; in start()
297 (p->stream_id != NO_STREAM_ID_FILTER) ? p->stream_id : 0; in start()
298 cmd.tuner = state->mci.tuner; in start()
299 cmd.demod = state->mci.demod; in start()
300 cmd.output = state->mci.nr; in start()
301 if (p->stream_id == 0x80000000) in start()
303 stat = ddb_mci_cmd(&state->mci, &cmd, NULL); in start()
312 struct sx8 *state = fe->demodulator_priv; in start_iq() local
313 struct mci_base *mci_base = state->mci.base; in start_iq()
315 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in start_iq() local
318 u32 input = state->mci.tuner; in start_iq()
321 mutex_lock(&mci_base->tuner_lock); in start_iq()
322 if (sx8_base->iq_mode) { in start_iq()
323 stat = -EBUSY; in start_iq()
327 if (sx8_base->demod_in_use[i]) in start_iq()
330 stat = -EBUSY; in start_iq()
333 state->mci.demod = 0; in start_iq()
334 if (!sx8_base->tuner_use_count[input]) in start_iq()
336 sx8_base->tuner_use_count[input]++; in start_iq()
337 sx8_base->iq_mode = (ts_config > 1); in start_iq()
339 mutex_unlock(&mci_base->tuner_lock); in start_iq()
347 cmd.sx8_start_iq.frequency = p->frequency * 1000; in start_iq()
348 cmd.sx8_start_iq.symbol_rate = p->symbol_rate; in start_iq()
349 cmd.tuner = state->mci.tuner; in start_iq()
350 cmd.demod = state->mci.demod; in start_iq()
351 stat = ddb_mci_cmd(&state->mci, &cmd, NULL); in start_iq()
354 ddb_mci_config(&state->mci, ts_config); in start_iq()
361 struct sx8 *state = fe->demodulator_priv; in set_parameters() local
362 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in set_parameters() local
365 if (state->started) in set_parameters()
368 isi = p->stream_id; in set_parameters()
377 switch (p->modulation) { in set_parameters()
404 state->started = 1; in set_parameters()
405 state->first_time_lock = 1; in set_parameters()
406 state->signal_info.status = SX8_DEMOD_WAIT_SIGNAL; in set_parameters()
440 struct sx8 *state = fe->demodulator_priv; in set_input() local
441 struct mci_base *mci_base = state->mci.base; in set_input()
444 return -EINVAL; in set_input()
446 state->mci.tuner = input; in set_input()
447 dev_dbg(mci_base->dev, "MCI-%d: input=%d\n", state->mci.nr, input); in set_input()
454 .name = "Digital Devices MaxSX8 MCI DVB-S/S2/S2X",
473 struct sx8 *state = (struct sx8 *)mci; in init() local
475 state->mci.demod = SX8_DEMOD_NONE; in init()