summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2010-10-03 23:48:49 +0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-12-29 13:16:28 +0300
commit7572f9c5575c721f43b575a71fda1ecd896e0327 (patch)
treedaf8a4b2dde8a319bb4bf44ef59685a2ffcfd6ab
parent55fa288deca4b17e539ba49a9b0d0ed474afa6f8 (diff)
downloadlinux-7572f9c5575c721f43b575a71fda1ecd896e0327.tar.xz
[media] mb86a20s: add support for serial streams
By comparing the traffic between Pixelview (cx23102-based and Kworld (saa7134-based), the only difference is at register 0xd5. After some tests, It seems that it is used to change mode between serial and parallel. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb/frontends/mb86a20s.c18
-rw-r--r--drivers/media/dvb/frontends/mb86a20s.h1
-rw-r--r--drivers/media/video/cx231xx/cx231xx-dvb.c1
3 files changed, 15 insertions, 5 deletions
diff --git a/drivers/media/dvb/frontends/mb86a20s.c b/drivers/media/dvb/frontends/mb86a20s.c
index 1e6bec6aa0f9..b4de8f12df27 100644
--- a/drivers/media/dvb/frontends/mb86a20s.c
+++ b/drivers/media/dvb/frontends/mb86a20s.c
@@ -43,10 +43,6 @@ struct mb86a20s_state {
const struct mb86a20s_config *config;
struct dvb_frontend frontend;
-
-
-
-
};
struct regdata {
@@ -175,7 +171,7 @@ static struct regdata mb86a20s_init[] = {
{ 0x45, 0x04 },
{ 0x48, 0x04 },
{ 0x50, 0xd5 },
- { 0x51, 0x01 },
+ { 0x51, 0x01 }, /* Serial */
{ 0x50, 0xd6 },
{ 0x51, 0x1f },
{ 0x50, 0xd2 },
@@ -376,6 +372,7 @@ static int mb86a20s_initfe(struct dvb_frontend *fe)
{
struct mb86a20s_state *state = fe->demodulator_priv;
int rc;
+ u8 regD5 = 1;
dprintk("\n");
@@ -384,6 +381,17 @@ static int mb86a20s_initfe(struct dvb_frontend *fe)
if (rc < 0)
return rc;
+ if (!state->config->is_serial) {
+ regD5 &= ~1;
+
+ rc = mb86a20s_writereg(state, 0x50, 0xd5);
+ if (rc < 0)
+ return rc;
+ rc = mb86a20s_writereg(state, 0x51, regD5);
+ if (rc < 0)
+ return rc;
+ }
+
return 0;
}
diff --git a/drivers/media/dvb/frontends/mb86a20s.h b/drivers/media/dvb/frontends/mb86a20s.h
index e3461983a831..bf22e77888b9 100644
--- a/drivers/media/dvb/frontends/mb86a20s.h
+++ b/drivers/media/dvb/frontends/mb86a20s.h
@@ -26,6 +26,7 @@
struct mb86a20s_config {
u8 demod_address;
+ bool is_serial;
};
#if defined(CONFIG_DVB_MB86A20S) || (defined(CONFIG_DVB_MB86A20S_MODULE) \
diff --git a/drivers/media/video/cx231xx/cx231xx-dvb.c b/drivers/media/video/cx231xx/cx231xx-dvb.c
index b55e7e0bc245..fe59a1c3f064 100644
--- a/drivers/media/video/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/video/cx231xx/cx231xx-dvb.c
@@ -143,6 +143,7 @@ static struct tda18271_config hcw_tda18271_config = {
static const struct mb86a20s_config pv_mb86a20s_config = {
.demod_address = 0x10,
+ .is_serial = true,
};
static struct tda18271_config pv_tda18271_config = {