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

V4L/DVB (8146): lgdt330x: add additional FEC control configuration option

Allow the following configuration, by passing clock_polarity_flip = 2:

Enable FEC automatic reset. Disable spectrum inversion.
Enable viterbi resynchronization. Set polarity indicator high.
Enable error flag insertion.

Thanks to Daniel Gimpelevich, for discovering that this configuration
is used on the AVerMedia AVerTVHD Volar.

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
CC: Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by

Michael Krufky and committed by
Mauro Carvalho Chehab
c0f4c0ad ecfceef7

+19 -5
+19 -5
drivers/media/dvb/frontends/lgdt330x.c
··· 226 226 0x4c, 0x14 227 227 }; 228 228 229 - static u8 flip_lgdt3303_init_data[] = { 229 + static u8 flip_1_lgdt3303_init_data[] = { 230 230 0x4c, 0x14, 231 231 0x87, 0xf3 232 + }; 233 + 234 + static u8 flip_2_lgdt3303_init_data[] = { 235 + 0x4c, 0x14, 236 + 0x87, 0xda 232 237 }; 233 238 234 239 struct lgdt330x_state* state = fe->demodulator_priv; ··· 248 243 break; 249 244 case LGDT3303: 250 245 chip_name = "LGDT3303"; 251 - if (state->config->clock_polarity_flip) { 252 - err = i2c_write_demod_bytes(state, flip_lgdt3303_init_data, 253 - sizeof(flip_lgdt3303_init_data)); 254 - } else { 246 + switch (state->config->clock_polarity_flip) { 247 + case 2: 248 + err = i2c_write_demod_bytes(state, 249 + flip_2_lgdt3303_init_data, 250 + sizeof(flip_2_lgdt3303_init_data)); 251 + break; 252 + case 1: 253 + err = i2c_write_demod_bytes(state, 254 + flip_1_lgdt3303_init_data, 255 + sizeof(flip_1_lgdt3303_init_data)); 256 + break; 257 + case 0: 258 + default: 255 259 err = i2c_write_demod_bytes(state, lgdt3303_init_data, 256 260 sizeof(lgdt3303_init_data)); 257 261 }