Lines Matching +full:firmware +full:- +full:initialised
23 * This driver needs external firmware. Please use the command
25 * download/extract it, and then copy it to /usr/lib/hotplug/firmware
26 * or /lib/firmware (depending on configuration of firmware hotplug).
28 #define SP8870_DEFAULT_FIRMWARE "dvb-fe-sp8870.fw"
33 #include <linux/firmware.h>
51 u8 initialised:1; member
60 /* firmware size for sp8870 */
63 /* starting point for firmware in file 'Sc_main.mc' */
69 struct i2c_msg msg = { .addr = state->config->demod_address, .flags = 0, .buf = buf, .len = 4 }; in sp8870_writereg()
72 if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) { in sp8870_writereg()
74 return -EREMOTEIO; in sp8870_writereg()
85 …struct i2c_msg msg [] = { { .addr = state->config->demod_address, .flags = 0, .buf = b0, .len = 2 … in sp8870_readreg()
86 { .addr = state->config->demod_address, .flags = I2C_M_RD, .buf = b1, .len = 2 } }; in sp8870_readreg()
88 ret = i2c_transfer (state->i2c, msg, 2); in sp8870_readreg()
92 return -1; in sp8870_readreg()
98 static int sp8870_firmware_upload (struct sp8870_state* state, const struct firmware *fw) in sp8870_firmware_upload()
101 const char *fw_buf = fw->data; in sp8870_firmware_upload()
109 if (fw->size < SP8870_FIRMWARE_SIZE + SP8870_FIRMWARE_OFFSET) in sp8870_firmware_upload()
110 return -EINVAL; in sp8870_firmware_upload()
121 // do firmware upload in sp8870_firmware_upload()
124 …P8870_FIRMWARE_SIZE + SP8870_FIRMWARE_OFFSET - 252) ? 252 : SP8870_FIRMWARE_SIZE + SP8870_FIRMWARE… in sp8870_firmware_upload()
129 msg.addr = state->config->demod_address; in sp8870_firmware_upload()
133 if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) { in sp8870_firmware_upload()
134 printk("%s: firmware upload failed!\n", __func__); in sp8870_firmware_upload()
177 switch (p->modulation) { in configure_reg0xc05()
190 return -EINVAL; in configure_reg0xc05()
193 switch (p->hierarchy) { in configure_reg0xc05()
209 return -EINVAL; in configure_reg0xc05()
212 switch (p->code_rate_HP) { in configure_reg0xc05()
231 return -EINVAL; in configure_reg0xc05()
250 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in sp8870_set_frontend_parameters()
251 struct sp8870_state* state = fe->demodulator_priv; in sp8870_set_frontend_parameters()
262 if (fe->ops.tuner_ops.set_params) { in sp8870_set_frontend_parameters()
263 fe->ops.tuner_ops.set_params(fe); in sp8870_set_frontend_parameters()
264 if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); in sp8870_set_frontend_parameters()
280 if (p->bandwidth_hz == 6000000) in sp8870_set_frontend_parameters()
282 else if (p->bandwidth_hz == 7000000) in sp8870_set_frontend_parameters()
288 if (p->transmission_mode == TRANSMISSION_MODE_2K) in sp8870_set_frontend_parameters()
306 struct sp8870_state* state = fe->demodulator_priv; in sp8870_init()
307 const struct firmware *fw = NULL; in sp8870_init()
310 if (state->initialised) return 0; in sp8870_init()
311 state->initialised = 1; in sp8870_init()
316 /* request the firmware, this will block until someone uploads it */ in sp8870_init()
317 printk("sp8870: waiting for firmware upload (%s)...\n", SP8870_DEFAULT_FIRMWARE); in sp8870_init()
318 if (state->config->request_firmware(fe, &fw, SP8870_DEFAULT_FIRMWARE)) { in sp8870_init()
319 printk("sp8870: no firmware upload (timeout or file not found?)\n"); in sp8870_init()
320 return -EIO; in sp8870_init()
324 printk("sp8870: writing firmware to device failed\n"); in sp8870_init()
326 return -EIO; in sp8870_init()
329 printk("sp8870: firmware upload complete\n"); in sp8870_init()
356 struct sp8870_state* state = fe->demodulator_priv; in sp8870_read_status()
364 return -EIO; in sp8870_read_status()
368 return -EIO; in sp8870_read_status()
382 struct sp8870_state* state = fe->demodulator_priv; in sp8870_read_ber()
390 return -EIO; in sp8870_read_ber()
396 return -EIO; in sp8870_read_ber()
409 struct sp8870_state* state = fe->demodulator_priv; in sp8870_read_signal_strength()
417 return -EIO; in sp8870_read_signal_strength()
423 return -EIO; in sp8870_read_signal_strength()
428 *signal = 0xFFFF - tmp; in sp8870_read_signal_strength()
435 struct sp8870_state* state = fe->demodulator_priv; in sp8870_read_uncorrected_blocks()
442 return -EIO; in sp8870_read_uncorrected_blocks()
464 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in sp8870_set_frontend()
465 struct sp8870_state* state = fe->demodulator_priv; in sp8870_set_frontend()
468 The firmware of the sp8870 sometimes locks up after setting frontend parameters. in sp8870_set_frontend()
479 dprintk("%s: frequency = %i\n", __func__, p->frequency); in sp8870_set_frontend()
502 printk("%s: firmware crash!!!!!!\n", __func__); in sp8870_set_frontend()
503 return -EIO; in sp8870_set_frontend()
509 printk("%s: firmware lockup!!!\n", __func__); in sp8870_set_frontend()
510 printk("%s: recovered after %i trial(s))\n", __func__, trials - 1); in sp8870_set_frontend()
523 struct sp8870_state* state = fe->demodulator_priv; in sp8870_sleep()
531 fesettings->min_delay_ms = 350; in sp8870_get_tune_settings()
532 fesettings->step_size = 0; in sp8870_get_tune_settings()
533 fesettings->max_drift = 0; in sp8870_get_tune_settings()
539 struct sp8870_state* state = fe->demodulator_priv; in sp8870_i2c_gate_ctrl()
550 struct sp8870_state* state = fe->demodulator_priv; in sp8870_release()
566 state->config = config; in sp8870_attach()
567 state->i2c = i2c; in sp8870_attach()
568 state->initialised = 0; in sp8870_attach()
574 memcpy(&state->frontend.ops, &sp8870_ops, sizeof(struct dvb_frontend_ops)); in sp8870_attach()
575 state->frontend.demodulator_priv = state; in sp8870_attach()
576 return &state->frontend; in sp8870_attach()
586 .name = "Spase SP8870 DVB-T",
616 MODULE_DESCRIPTION("Spase SP8870 DVB-T Demodulator driver");