Lines Matching refs:state
105 static int si2165_write(struct si2165_state *state, const u16 reg, in si2165_write() argument
113 dev_warn(&state->i2c->dev, in si2165_write()
122 msg.addr = state->config.i2c_addr; in si2165_write()
130 ret = i2c_transfer(state->i2c, &msg, 1); in si2165_write()
133 dev_err(&state->i2c->dev, "%s: ret == %d\n", __func__, ret); in si2165_write()
143 static int si2165_read(struct si2165_state *state, in si2165_read() argument
149 { .addr = state->config.i2c_addr, in si2165_read()
151 { .addr = state->config.i2c_addr, in si2165_read()
155 ret = i2c_transfer(state->i2c, msg, 2); in si2165_read()
158 dev_err(&state->i2c->dev, "%s: error (addr %02x reg %04x error (ret == %i)\n", in si2165_read()
159 __func__, state->config.i2c_addr, reg, ret); in si2165_read()
172 static int si2165_readreg8(struct si2165_state *state, in si2165_readreg8() argument
177 ret = si2165_read(state, reg, val, 1); in si2165_readreg8()
182 static int si2165_readreg16(struct si2165_state *state, in si2165_readreg16() argument
187 int ret = si2165_read(state, reg, buf, 2); in si2165_readreg16()
193 static int si2165_writereg8(struct si2165_state *state, const u16 reg, u8 val) in si2165_writereg8() argument
195 return si2165_write(state, reg, &val, 1); in si2165_writereg8()
198 static int si2165_writereg16(struct si2165_state *state, const u16 reg, u16 val) in si2165_writereg16() argument
202 return si2165_write(state, reg, buf, 2); in si2165_writereg16()
205 static int si2165_writereg24(struct si2165_state *state, const u16 reg, u32 val) in si2165_writereg24() argument
209 return si2165_write(state, reg, buf, 3); in si2165_writereg24()
212 static int si2165_writereg32(struct si2165_state *state, const u16 reg, u32 val) in si2165_writereg32() argument
220 return si2165_write(state, reg, buf, 4); in si2165_writereg32()
223 static int si2165_writereg_mask8(struct si2165_state *state, const u16 reg, in si2165_writereg_mask8() argument
230 ret = si2165_readreg8(state, reg, &tmp); in si2165_writereg_mask8()
239 ret = si2165_writereg8(state, reg, val); in si2165_writereg_mask8()
251 static int si2165_init_pll(struct si2165_state *state) in si2165_init_pll() argument
253 u32 ref_freq_Hz = state->config.ref_freq_Hz; in si2165_init_pll()
288 state->fvco_hz = ref_freq_Hz / divr in si2165_init_pll()
290 state->adc_clk = state->fvco_hz / (divm * 4u); in si2165_init_pll()
291 state->sys_clk = state->fvco_hz / (divl * 2u); in si2165_init_pll()
298 return si2165_write(state, 0x00a0, buf, 4); in si2165_init_pll()
301 static int si2165_adjust_pll_divl(struct si2165_state *state, u8 divl) in si2165_adjust_pll_divl() argument
303 state->sys_clk = state->fvco_hz / (divl * 2u); in si2165_adjust_pll_divl()
304 return si2165_writereg8(state, 0x00a0, divl); /* pll_divl */ in si2165_adjust_pll_divl()
307 static u32 si2165_get_fe_clk(struct si2165_state *state) in si2165_get_fe_clk() argument
310 return state->adc_clk; in si2165_get_fe_clk()
313 static int si2165_wait_init_done(struct si2165_state *state) in si2165_wait_init_done() argument
320 si2165_readreg8(state, 0x0054, &val); in si2165_wait_init_done()
325 dev_err(&state->i2c->dev, "%s: init_done was not set\n", in si2165_wait_init_done()
330 static int si2165_upload_firmware_block(struct si2165_state *state, in si2165_upload_firmware_block() argument
352 dev_warn(&state->i2c->dev, in si2165_upload_firmware_block()
359 dev_warn(&state->i2c->dev, in si2165_upload_firmware_block()
367 ret = si2165_write(state, 0x0364, buf_ctrl, 4); in si2165_upload_firmware_block()
370 ret = si2165_write(state, 0x0368, data+offset+4, 4); in si2165_upload_firmware_block()
377 ret = si2165_write(state, 0x36c, data+offset, 4); in si2165_upload_firmware_block()
400 static int si2165_upload_firmware(struct si2165_state *state) in si2165_upload_firmware() argument
416 switch (state->chip_revcode) { in si2165_upload_firmware()
421 dev_info(&state->i2c->dev, "%s: no firmware file for revision=%d\n", in si2165_upload_firmware()
422 KBUILD_MODNAME, state->chip_revcode); in si2165_upload_firmware()
427 ret = request_firmware(&fw, fw_file, state->i2c->dev.parent); in si2165_upload_firmware()
429 dev_warn(&state->i2c->dev, "%s: firmware file '%s' not found\n", in si2165_upload_firmware()
437 dev_info(&state->i2c->dev, "%s: downloading firmware from file '%s' size=%d\n", in si2165_upload_firmware()
441 dev_warn(&state->i2c->dev, "%s: firmware size is not multiple of 4\n", in si2165_upload_firmware()
449 dev_warn(&state->i2c->dev, "%s: firmware header is missing\n", in si2165_upload_firmware()
456 dev_warn(&state->i2c->dev, "%s: firmware file version is wrong\n", in si2165_upload_firmware()
468 ret = si2165_writereg8(state, 0x0341, 0x00); in si2165_upload_firmware()
472 ret = si2165_writereg8(state, 0x00c0, 0x00); in si2165_upload_firmware()
476 ret = si2165_readreg8(state, 0x0341, val); in si2165_upload_firmware()
481 ret = si2165_readreg8(state, 0x035c, val); in si2165_upload_firmware()
484 ret = si2165_readreg8(state, 0x035c, val); in si2165_upload_firmware()
487 ret = si2165_writereg8(state, 0x035c, 0x02); in si2165_upload_firmware()
494 …dev_info(&state->i2c->dev, "%s: si2165_upload_firmware extracted patch_version=0x%02x, block_count… in si2165_upload_firmware()
497 ret = si2165_upload_firmware_block(state, data, len, &offset, 1); in si2165_upload_firmware()
501 ret = si2165_writereg8(state, 0x0344, patch_version); in si2165_upload_firmware()
506 ret = si2165_writereg8(state, 0x0379, 0x01); in si2165_upload_firmware()
510 ret = si2165_upload_firmware_block(state, data, len, in si2165_upload_firmware()
513 dev_err(&state->i2c->dev, in si2165_upload_firmware()
520 ret = si2165_readreg16(state, 0x037a, &val16); in si2165_upload_firmware()
525 dev_err(&state->i2c->dev, in si2165_upload_firmware()
532 ret = si2165_upload_firmware_block(state, data, len, &offset, 5); in si2165_upload_firmware()
537 dev_err(&state->i2c->dev, in si2165_upload_firmware()
545 ret = si2165_writereg_mask8(state, 0x0341, 0x02, 0x02); in si2165_upload_firmware()
550 ret = si2165_writereg_mask8(state, 0x035c, 0x01, 0x01); in si2165_upload_firmware()
554 dev_info(&state->i2c->dev, "%s: fw load finished\n", KBUILD_MODNAME); in si2165_upload_firmware()
557 state->firmware_loaded = true; in si2165_upload_firmware()
570 struct si2165_state *state = fe->demodulator_priv; in si2165_init() local
577 ret = si2165_writereg8(state, 0x0000, state->config.chip_mode); in si2165_init()
581 ret = si2165_writereg8(state, 0x0104, 0x01); in si2165_init()
584 ret = si2165_readreg8(state, 0x0000, &val); /* verify chip_mode */ in si2165_init()
587 if (val != state->config.chip_mode) { in si2165_init()
588 dev_err(&state->i2c->dev, "%s: could not set chip_mode\n", in si2165_init()
594 ret = si2165_writereg8(state, 0x018b, 0x00); in si2165_init()
597 ret = si2165_writereg8(state, 0x0190, 0x01); in si2165_init()
600 ret = si2165_writereg8(state, 0x0170, 0x00); in si2165_init()
603 ret = si2165_writereg8(state, 0x0171, 0x07); in si2165_init()
607 ret = si2165_writereg8(state, 0x0646, 0x00); in si2165_init()
610 ret = si2165_writereg8(state, 0x0641, 0x00); in si2165_init()
614 ret = si2165_init_pll(state); in si2165_init()
619 ret = si2165_writereg8(state, 0x0050, 0x01); in si2165_init()
623 ret = si2165_writereg8(state, 0x0096, 0x01); in si2165_init()
626 ret = si2165_wait_init_done(state); in si2165_init()
631 ret = si2165_writereg8(state, 0x0050, 0x00); in si2165_init()
636 ret = si2165_writereg16(state, 0x0470 , 0x7530); in si2165_init()
640 ret = si2165_readreg8(state, 0x0344, &patch_version); in si2165_init()
644 ret = si2165_writereg8(state, 0x00cb, 0x00); in si2165_init()
649 ret = si2165_writereg32(state, 0x0348, 0xf4000000); in si2165_init()
653 ret = si2165_readreg8(state, 0x0341, &val); in si2165_init()
658 ret = si2165_upload_firmware(state); in si2165_init()
664 ret = si2165_writereg8(state, 0x012a, 0x46); in si2165_init()
667 ret = si2165_writereg8(state, 0x012c, 0x00); in si2165_init()
670 ret = si2165_writereg8(state, 0x012e, 0x0a); in si2165_init()
673 ret = si2165_writereg8(state, 0x012f, 0xff); in si2165_init()
676 ret = si2165_writereg8(state, 0x0123, 0x70); in si2165_init()
688 struct si2165_state *state = fe->demodulator_priv; in si2165_sleep() local
691 ret = si2165_writereg8(state, 0x0104, 0x00); in si2165_sleep()
695 ret = si2165_writereg8(state, 0x0000, SI2165_MODE_OFF); in si2165_sleep()
705 struct si2165_state *state = fe->demodulator_priv; in si2165_read_status() local
707 if (!state->has_dvbt) in si2165_read_status()
711 ret = si2165_readreg8(state, 0x4e0, &fec_lock); in si2165_read_status()
726 static int si2165_set_oversamp(struct si2165_state *state, u32 dvb_rate) in si2165_set_oversamp() argument
731 oversamp = si2165_get_fe_clk(state); in si2165_set_oversamp()
737 return si2165_writereg32(state, 0x00e4, reg_value); in si2165_set_oversamp()
740 static int si2165_set_if_freq_shift(struct si2165_state *state, u32 IF) in si2165_set_if_freq_shift() argument
744 u32 fe_clk = si2165_get_fe_clk(state); in si2165_set_if_freq_shift()
752 if (state->config.inversion) in si2165_set_if_freq_shift()
758 return si2165_writereg32(state, 0x00e8, reg_value); in si2165_set_if_freq_shift()
765 struct si2165_state *state = fe->demodulator_priv; in si2165_set_parameters() local
774 dev_err(&state->i2c->dev, in si2165_set_parameters()
780 if (!state->has_dvbt) in si2165_set_parameters()
792 ret = si2165_writereg8(state, 0x00ec, 0x01); in si2165_set_parameters()
795 ret = si2165_adjust_pll_divl(state, 12); in si2165_set_parameters()
800 ret = si2165_set_if_freq_shift(state, IF); in si2165_set_parameters()
803 ret = si2165_writereg8(state, 0x08f8, 0x00); in si2165_set_parameters()
807 ret = si2165_writereg8(state, 0x04e4, 0x20); in si2165_set_parameters()
810 ret = si2165_writereg16(state, 0x04ef, 0x00fe); in si2165_set_parameters()
813 ret = si2165_writereg24(state, 0x04f4, 0x555555); in si2165_set_parameters()
816 ret = si2165_writereg8(state, 0x04e5, 0x01); in si2165_set_parameters()
820 ret = si2165_writereg16(state, 0x0308, bw10k); in si2165_set_parameters()
823 ret = si2165_set_oversamp(state, dvb_rate); in si2165_set_parameters()
827 ret = si2165_writereg8(state, 0x031c, 0x01); in si2165_set_parameters()
830 ret = si2165_writereg8(state, 0x00cb, 0x00); in si2165_set_parameters()
834 ret = si2165_writereg8(state, 0x016e, 0x41); in si2165_set_parameters()
837 ret = si2165_writereg8(state, 0x016c, 0x0e); in si2165_set_parameters()
840 ret = si2165_writereg8(state, 0x016d, 0x10); in si2165_set_parameters()
844 ret = si2165_writereg8(state, 0x015b, 0x03); in si2165_set_parameters()
847 ret = si2165_writereg8(state, 0x0150, 0x78); in si2165_set_parameters()
851 ret = si2165_writereg8(state, 0x01a0, 0x78); in si2165_set_parameters()
854 ret = si2165_writereg8(state, 0x01c8, 0x68); in si2165_set_parameters()
858 ret = si2165_writereg16(state, 0x030c, 0x0064); in si2165_set_parameters()
862 ret = si2165_readreg8(state, 0x0387, val); in si2165_set_parameters()
865 ret = si2165_writereg8(state, 0x0387, 0x00); in si2165_set_parameters()
869 ret = si2165_writereg32(state, 0x0348, 0xf4000000); in si2165_set_parameters()
878 ret = si2165_set_if_freq_shift(state, IF); in si2165_set_parameters()
883 ret = si2165_readreg8(state, 0x0341, val); in si2165_set_parameters()
886 ret = si2165_writereg8(state, 0x0341, 0x00); in si2165_set_parameters()
890 ret = si2165_writereg8(state, 0x00c0, 0x00); in si2165_set_parameters()
894 ret = si2165_writereg32(state, 0x0384, 0x00000000); in si2165_set_parameters()
898 ret = si2165_writereg8(state, 0x02e0, 0x01); in si2165_set_parameters()
902 ret = si2165_readreg8(state, 0x0341, val); in si2165_set_parameters()
911 struct si2165_state *state = fe->demodulator_priv; in si2165_release() local
914 kfree(state); in si2165_release()
955 struct si2165_state *state = NULL; in si2165_attach() local
966 state = kzalloc(sizeof(struct si2165_state), GFP_KERNEL); in si2165_attach()
967 if (state == NULL) in si2165_attach()
971 state->i2c = i2c; in si2165_attach()
972 state->config = *config; in si2165_attach()
974 if (state->config.ref_freq_Hz < 4000000 in si2165_attach()
975 || state->config.ref_freq_Hz > 27000000) { in si2165_attach()
976 dev_err(&state->i2c->dev, "%s: ref_freq of %d Hz not supported by this driver\n", in si2165_attach()
977 KBUILD_MODNAME, state->config.ref_freq_Hz); in si2165_attach()
982 memcpy(&state->frontend.ops, &si2165_ops, in si2165_attach()
984 state->frontend.demodulator_priv = state; in si2165_attach()
987 io_ret = si2165_writereg8(state, 0x0000, state->config.chip_mode); in si2165_attach()
991 io_ret = si2165_readreg8(state, 0x0000, &val); in si2165_attach()
994 if (val != state->config.chip_mode) in si2165_attach()
997 io_ret = si2165_readreg8(state, 0x0023, &state->chip_revcode); in si2165_attach()
1001 io_ret = si2165_readreg8(state, 0x0118, &state->chip_type); in si2165_attach()
1006 io_ret = si2165_writereg8(state, 0x0000, SI2165_MODE_OFF); in si2165_attach()
1010 if (state->chip_revcode < 26) in si2165_attach()
1011 rev_char = 'A' + state->chip_revcode; in si2165_attach()
1015 switch (state->chip_type) { in si2165_attach()
1018 state->has_dvbt = true; in si2165_attach()
1022 state->has_dvbt = true; in si2165_attach()
1023 state->has_dvbc = true; in si2165_attach()
1026 dev_err(&state->i2c->dev, "%s: Unsupported Silicon Labs chip (type %d, rev %d)\n", in si2165_attach()
1027 KBUILD_MODNAME, state->chip_type, state->chip_revcode); in si2165_attach()
1031 dev_info(&state->i2c->dev, in si2165_attach()
1033 KBUILD_MODNAME, chip_name, rev_char, state->chip_type, in si2165_attach()
1034 state->chip_revcode); in si2165_attach()
1036 strlcat(state->frontend.ops.info.name, chip_name, in si2165_attach()
1037 sizeof(state->frontend.ops.info.name)); in si2165_attach()
1040 if (state->has_dvbt) { in si2165_attach()
1041 state->frontend.ops.delsys[n++] = SYS_DVBT; in si2165_attach()
1042 strlcat(state->frontend.ops.info.name, " DVB-T", in si2165_attach()
1043 sizeof(state->frontend.ops.info.name)); in si2165_attach()
1045 if (state->has_dvbc) in si2165_attach()
1046 dev_warn(&state->i2c->dev, "%s: DVB-C is not yet supported.\n", in si2165_attach()
1049 return &state->frontend; in si2165_attach()
1052 kfree(state); in si2165_attach()