summaryrefslogtreecommitdiff
path: root/linux/drivers/media
diff options
context:
space:
mode:
authorPatrick Boettcher <pb@linuxtv.org>2009-02-28 14:19:30 +0100
committerPatrick Boettcher <pb@linuxtv.org>2009-02-28 14:19:30 +0100
commit6c7ed65e3ea76c36aec18b3c7d7fc97af216bf05 (patch)
tree611afce82b12d708256c5deb7289183fc96548c4 /linux/drivers/media
parent4d68602c04515adbfc2054fac35937ce762b2093 (diff)
downloadmediapointer-dvb-s2-6c7ed65e3ea76c36aec18b3c7d7fc97af216bf05.tar.gz
mediapointer-dvb-s2-6c7ed65e3ea76c36aec18b3c7d7fc97af216bf05.tar.bz2
Fix i2c code of flexcop-driver for rare revisions
From: Patrick Boettcher <pb@linuxtv.org> 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. Priority: high Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Diffstat (limited to 'linux/drivers/media')
-rw-r--r--linux/drivers/media/dvb/b2c2/flexcop-i2c.c12
-rw-r--r--linux/drivers/media/dvb/frontends/itd1000_priv.h2
2 files changed, 13 insertions, 1 deletions
diff --git a/linux/drivers/media/dvb/b2c2/flexcop-i2c.c b/linux/drivers/media/dvb/b2c2/flexcop-i2c.c
index 01d27613f..1c07eeafc 100644
--- a/linux/drivers/media/dvb/b2c2/flexcop-i2c.c
+++ b/linux/drivers/media/dvb/b2c2/flexcop-i2c.c
@@ -47,6 +47,18 @@ static int flexcop_i2c_read4(struct flexcop_i2c_adapter *i2c,
int len = r100.tw_sm_c_100.total_bytes, /* remember total_bytes is buflen-1 */
ret;
+ /* work-around to have CableStar2 and SkyStar2 rev 2.7 work
+ * correctly:
+ *
+ * the ITD1000 is behind an i2c-gate which closes automatically
+ * after an i2c-transaction the STV0297 needs 2 consecutive reads
+ * one with no_base_addr = 0 and one with 1
+ *
+ * those two work-arounds are conflictin: we check for the card
+ * type, it is set when probing the ITD1000 */
+ if (i2c->fc->dev_type == FC_SKY_REV27)
+ r100.tw_sm_c_100.no_base_addr_ack_error = i2c->no_base_addr;
+
ret = flexcop_i2c_operation(i2c->fc, &r100);
if (ret != 0) {
deb_i2c("Retrying operation\n");
diff --git a/linux/drivers/media/dvb/frontends/itd1000_priv.h b/linux/drivers/media/dvb/frontends/itd1000_priv.h
index 8cdc54e57..08ca85122 100644
--- a/linux/drivers/media/dvb/frontends/itd1000_priv.h
+++ b/linux/drivers/media/dvb/frontends/itd1000_priv.h
@@ -31,7 +31,7 @@ struct itd1000_state {
/* ugly workaround for flexcop's incapable i2c-controller
* FIXME, if possible
*/
- u8 shadow[255];
+ u8 shadow[256];
};
enum itd1000_register {