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

V4L/DVB (11284): Fix i2c code of flexcop-driver for rare revisions

This patch adds a workaround in the i2c-code of the flexcop-driver to
fix support for SkyStar2 rev 2.7. There are not many devices out
there, that's why this bug was not revealed earlier.

Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Patrick Boettcher and committed by
Mauro Carvalho Chehab
1662070a aef82207

+13 -1
+12
drivers/media/dvb/b2c2/flexcop-i2c.c
··· 47 47 int len = r100.tw_sm_c_100.total_bytes, /* remember total_bytes is buflen-1 */ 48 48 ret; 49 49 50 + /* work-around to have CableStar2 and SkyStar2 rev 2.7 work 51 + * correctly: 52 + * 53 + * the ITD1000 is behind an i2c-gate which closes automatically 54 + * after an i2c-transaction the STV0297 needs 2 consecutive reads 55 + * one with no_base_addr = 0 and one with 1 56 + * 57 + * those two work-arounds are conflictin: we check for the card 58 + * type, it is set when probing the ITD1000 */ 59 + if (i2c->fc->dev_type == FC_SKY_REV27) 60 + r100.tw_sm_c_100.no_base_addr_ack_error = i2c->no_base_addr; 61 + 50 62 ret = flexcop_i2c_operation(i2c->fc, &r100); 51 63 if (ret != 0) { 52 64 deb_i2c("Retrying operation\n");
+1 -1
drivers/media/dvb/frontends/itd1000_priv.h
··· 31 31 /* ugly workaround for flexcop's incapable i2c-controller 32 32 * FIXME, if possible 33 33 */ 34 - u8 shadow[255]; 34 + u8 shadow[256]; 35 35 }; 36 36 37 37 enum itd1000_register {