Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (12097): Implement reading uncorrected blocks for stv0900

Signed-off-by: Abylay Ospan <aospan@netup.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Abylay Ospan and committed by
Mauro Carvalho Chehab
ee1ebcfe 68191ede

+39
+39
drivers/media/dvb/frontends/stv0900_core.c
··· 712 712 return c_n; 713 713 } 714 714 715 + static int stv0900_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks) 716 + { 717 + struct stv0900_state *state = fe->demodulator_priv; 718 + struct stv0900_internal *i_params = state->internal; 719 + enum fe_stv0900_demod_num demod = state->demod; 720 + u8 err_val1, err_val0; 721 + s32 err_field1, err_field0; 722 + u32 header_err_val = 0; 723 + 724 + *ucblocks = 0x0; 725 + if (stv0900_get_standard(fe, demod) == STV0900_DVBS2_STANDARD) { 726 + /* DVB-S2 delineator errors count */ 727 + 728 + /* retreiving number for errnous headers */ 729 + dmd_reg(err_field0, R0900_P1_BBFCRCKO0, 730 + R0900_P2_BBFCRCKO0); 731 + dmd_reg(err_field1, R0900_P1_BBFCRCKO1, 732 + R0900_P2_BBFCRCKO1); 733 + 734 + err_val1 = stv0900_read_reg(i_params, err_field1); 735 + err_val0 = stv0900_read_reg(i_params, err_field0); 736 + header_err_val = (err_val1<<8) | err_val0; 737 + 738 + /* retreiving number for errnous packets */ 739 + dmd_reg(err_field0, R0900_P1_UPCRCKO0, 740 + R0900_P2_UPCRCKO0); 741 + dmd_reg(err_field1, R0900_P1_UPCRCKO1, 742 + R0900_P2_UPCRCKO1); 743 + 744 + err_val1 = stv0900_read_reg(i_params, err_field1); 745 + err_val0 = stv0900_read_reg(i_params, err_field0); 746 + *ucblocks = (err_val1<<8) | err_val0; 747 + *ucblocks += header_err_val; 748 + } 749 + 750 + return 0; 751 + } 752 + 715 753 static int stv0900_read_snr(struct dvb_frontend *fe, u16 *snr) 716 754 { 717 755 *snr = stv0900_carr_get_quality(fe, ··· 1920 1882 .read_ber = stv0900_read_ber, 1921 1883 .read_signal_strength = stv0900_read_signal_strength, 1922 1884 .read_snr = stv0900_read_snr, 1885 + .read_ucblocks = stv0900_read_ucblocks, 1923 1886 }; 1924 1887 1925 1888 struct dvb_frontend *stv0900_attach(const struct stv0900_config *config,