Lines Matching +full:firmware +full:- +full:initialized
2 * Support for OR51211 (pcHDTV HD-2000) - VSB
24 * This driver needs external firmware. Please use the command
26 * download/extract it, and then copy it to /usr/lib/hotplug/firmware
27 * or /lib/firmware (depending on configuration of firmware hotplug).
29 #define OR51211_DEFAULT_FIRMWARE "dvb-fe-or51211.fw"
34 #include <linux/firmware.h>
61 u8 initialized:1; member
78 if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) { in i2c_writebytes()
80 return -EREMOTEIO; in i2c_writebytes()
95 if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) { in i2c_readbytes()
97 return -EREMOTEIO; in i2c_readbytes()
104 const struct firmware *fw) in or51211_load_firmware()
106 struct or51211_state* state = fe->demodulator_priv; in or51211_load_firmware()
110 dprintk("Firmware is %zu bytes\n", fw->size); in or51211_load_firmware()
116 return -1; in or51211_load_firmware()
120 return -1; in or51211_load_firmware()
123 /* Create firmware buffer */ in or51211_load_firmware()
125 tudata[i] = fw->data[i]; in or51211_load_firmware()
128 tudata[i+337] = fw->data[145+i]; in or51211_load_firmware()
130 state->config->reset(fe); in or51211_load_firmware()
132 if (i2c_writebytes(state,state->config->demod_address,tudata,585)) { in or51211_load_firmware()
134 return -1; in or51211_load_firmware()
138 if (i2c_writebytes(state,state->config->demod_address, in or51211_load_firmware()
139 &fw->data[393],8125)) { in or51211_load_firmware()
141 return -1; in or51211_load_firmware()
145 if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) { in or51211_load_firmware()
147 return -1; in or51211_load_firmware()
152 if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) { in or51211_load_firmware()
154 return -1; in or51211_load_firmware()
164 struct or51211_state* state = fe->demodulator_priv; in or51211_setmode()
167 state->config->setmode(fe, mode); in or51211_setmode()
169 if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) { in or51211_setmode()
171 return -1; in or51211_setmode()
176 if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) { in or51211_setmode()
178 return -1; in or51211_setmode()
190 * normal +/-150kHz Carrier acquisition range in or51211_setmode()
192 if (i2c_writebytes(state,state->config->demod_address,cmd_buf,3)) { in or51211_setmode()
194 return -1; in or51211_setmode()
202 if (i2c_writebytes(state,state->config->demod_address,rec_buf,3)) { in or51211_setmode()
206 if (i2c_readbytes(state,state->config->demod_address,&rec_buf[10],2)) { in or51211_setmode()
208 return -1; in or51211_setmode()
217 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in or51211_set_parameters()
218 struct or51211_state* state = fe->demodulator_priv; in or51211_set_parameters()
221 if (state->current_frequency != p->frequency) { in or51211_set_parameters()
222 if (fe->ops.tuner_ops.set_params) { in or51211_set_parameters()
223 fe->ops.tuner_ops.set_params(fe); in or51211_set_parameters()
224 if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); in or51211_set_parameters()
231 state->current_frequency = p->frequency; in or51211_set_parameters()
238 struct or51211_state* state = fe->demodulator_priv; in or51211_read_status()
244 if (i2c_writebytes(state,state->config->demod_address,snd_buf,3)) { in or51211_read_status()
246 return -1; in or51211_read_status()
249 if (i2c_readbytes(state,state->config->demod_address,rec_buf,2)) { in or51211_read_status()
251 return -1; in or51211_read_status()
267 8-VSB SNR equation from Oren datasheets
269 For 8-VSB:
272 We re-write the snr equation as:
273 SNR * 2^24 = 10*(c - 2*intlog10(MSE))
274 Where for 8-VSB, c = log10(219037.9454) * 2^24 */
288 return 10*(c - mse); in calculate_snr()
293 struct or51211_state* state = fe->demodulator_priv; in or51211_read_snr()
302 if (i2c_writebytes(state,state->config->demod_address,snd_buf,3)) { in or51211_read_snr()
304 return -1; in or51211_read_snr()
306 if (i2c_readbytes(state,state->config->demod_address,rec_buf,2)) { in or51211_read_snr()
308 return -1; in or51211_read_snr()
311 state->snr = calculate_snr(rec_buf[0], 89599047); in or51211_read_snr()
312 *snr = (state->snr) >> 16; in or51211_read_snr()
315 state->snr >> 24, (((state->snr>>8) & 0xffff) * 100) >> 16); in or51211_read_snr()
325 struct or51211_state* state = (struct or51211_state*)fe->demodulator_priv; in or51211_read_signal_strength()
329 ret = fe->ops.read_snr(fe, &snr); in or51211_read_signal_strength()
332 /* Rather than use the 8.8 value snr, use state->snr which is 8.24 */ in or51211_read_signal_strength()
333 /* scale the range 0 - 35*2^24 into 0 - 65535 */ in or51211_read_signal_strength()
334 if (state->snr >= 8960 * 0x10000) in or51211_read_signal_strength()
337 *strength = state->snr / 8960; in or51211_read_signal_strength()
344 *ber = -ENOSYS; in or51211_read_ber()
350 *ucblocks = -ENOSYS; in or51211_read_ucblocks()
361 struct or51211_state* state = fe->demodulator_priv; in or51211_init()
362 const struct or51211_config* config = state->config; in or51211_init()
363 const struct firmware* fw; in or51211_init()
368 if (!state->initialized) { in or51211_init()
369 /* Request the firmware, this will block until it uploads */ in or51211_init()
370 pr_info("Waiting for firmware upload (%s)...\n", in or51211_init()
372 ret = config->request_firmware(fe, &fw, in or51211_init()
374 pr_info("Got Hotplug firmware\n"); in or51211_init()
376 pr_warn("No firmware uploaded (timeout or file not found?)\n"); in or51211_init()
383 pr_warn("Writing firmware to device failed!\n"); in or51211_init()
386 pr_info("Firmware upload complete.\n"); in or51211_init()
395 * normal +/-150kHz Carrier acquisition range in or51211_init()
397 if (i2c_writebytes(state,state->config->demod_address, in or51211_init()
400 return -1; in or51211_init()
410 if (i2c_writebytes(state,state->config->demod_address, in or51211_init()
413 return -1; in or51211_init()
416 if (i2c_readbytes(state,state->config->demod_address, in or51211_init()
419 return -1; in or51211_init()
427 if (i2c_writebytes(state,state->config->demod_address, in or51211_init()
430 return -1; in or51211_init()
433 if (i2c_readbytes(state,state->config->demod_address, in or51211_init()
436 return -1; in or51211_init()
445 if (i2c_writebytes(state,state->config->demod_address, in or51211_init()
447 pr_warn("Load DVR Error 6 - %d\n", i); in or51211_init()
448 return -1; in or51211_init()
452 if (i2c_readbytes(state,state->config->demod_address, in or51211_init()
454 pr_warn("Load DVR Error 7 - %d\n", i); in or51211_init()
455 return -1; in or51211_init()
459 i--; in or51211_init()
473 if (i2c_writebytes(state,state->config->demod_address, in or51211_init()
476 return -1; in or51211_init()
479 if (i2c_readbytes(state,state->config->demod_address, in or51211_init()
482 return -1; in or51211_init()
484 state->initialized = 1; in or51211_init()
493 fesettings->min_delay_ms = 500; in or51211_get_tune_settings()
494 fesettings->step_size = 0; in or51211_get_tune_settings()
495 fesettings->max_drift = 0; in or51211_get_tune_settings()
501 struct or51211_state* state = fe->demodulator_priv; in or51211_release()
502 state->config->sleep(fe); in or51211_release()
519 state->config = config; in or51211_attach()
520 state->i2c = i2c; in or51211_attach()
521 state->initialized = 0; in or51211_attach()
522 state->current_frequency = 0; in or51211_attach()
525 memcpy(&state->frontend.ops, &or51211_ops, sizeof(struct dvb_frontend_ops)); in or51211_attach()
526 state->frontend.demodulator_priv = state; in or51211_attach()
527 return &state->frontend; in or51211_attach()
560 MODULE_DESCRIPTION("Oren OR51211 VSB [pcHDTV HD-2000] Demodulator Driver");