Skip to content

Commit

Permalink
[media] saa7134: Fix analog mode for Kworld SBTVD
Browse files Browse the repository at this point in the history
There were some issues at tda8290 that were preventing this device
to work. Now that those fixes were fixed, we can enable analog
mode.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed Jan 19, 2011
1 parent c736a5f commit 6183040
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 76 deletions.
40 changes: 3 additions & 37 deletions drivers/media/video/saa7134/saa7134-cards.c
Original file line number Diff line number Diff line change
Expand Up @@ -5179,18 +5179,8 @@ struct saa7134_board saa7134_boards[] = {
[SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG] = {
.name = "Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid",
.audio_clock = 0x00187de7,
#if 0
/*
* FIXME: Analog mode doesn't work, if digital is enabled. The proper
* fix is to use tda8290 driver, but Kworld seems to use an
* unsupported version of tda8295.
*/
.tuner_type = TUNER_NXP_TDA18271, /* TUNER_PHILIPS_TDA8290 */
.tuner_addr = 0x60,
#else
.tuner_type = UNSET,
.tuner_type = TUNER_PHILIPS_TDA8290,
.tuner_addr = ADDR_UNSET,
#endif
.radio_type = UNSET,
.radio_addr = ADDR_UNSET,
.gpiomask = 0x8e054000,
Expand All @@ -5201,6 +5191,7 @@ struct saa7134_board saa7134_boards[] = {
.vmux = 1,
.amux = TV,
.tv = 1,
.gpio = 0x4000,
#if 0 /* FIXME */
}, {
.name = name_comp1,
Expand Down Expand Up @@ -7659,36 +7650,11 @@ int saa7134_board_init2(struct saa7134_dev *dev)
break;
}
case SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG:
{
struct i2c_msg msg = { .addr = 0x4b, .flags = 0 };
int i;
static u8 buffer[][2] = {
{0x30, 0x31},
{0xff, 0x00},
{0x41, 0x03},
{0x41, 0x1a},
{0xff, 0x02},
{0x34, 0x00},
{0x45, 0x97},
{0x45, 0xc1},
};
saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0x4000);
saa_writel(SAA7134_GPIO_GPSTATUS0 >> 2, 0x4000);

/*
* FIXME: identify what device is at addr 0x4b and what means
* this initialization
*/
for (i = 0; i < ARRAY_SIZE(buffer); i++) {
msg.buf = &buffer[i][0];
msg.len = ARRAY_SIZE(buffer[0]);
if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
printk(KERN_WARNING
"%s: Unable to enable tuner(%i).\n",
dev->name, i);
}
saa7134_set_gpio(dev, 27, 0);
break;
}
} /* switch() */

/* initialize tuner */
Expand Down
40 changes: 1 addition & 39 deletions drivers/media/video/saa7134/saa7134-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ static struct tda18271_std_map mb86a20s_tda18271_std_map = {

static struct tda18271_config kworld_tda18271_config = {
.std_map = &mb86a20s_tda18271_std_map,
.gate = TDA18271_GATE_DIGITAL,
.gate = TDA18271_GATE_ANALOG,
};

static const struct mb86a20s_config kworld_mb86a20s_config = {
Expand Down Expand Up @@ -623,37 +623,6 @@ static struct tda827x_config tda827x_cfg_2_sw42 = {

/* ------------------------------------------------------------------ */

static int __kworld_sbtvd_i2c_gate_ctrl(struct saa7134_dev *dev, int enable)
{
unsigned char initmsg[] = {0x45, 0x97};
unsigned char msg_enable[] = {0x45, 0xc1};
unsigned char msg_disable[] = {0x45, 0x81};
struct i2c_msg msg = {.addr = 0x4b, .flags = 0, .buf = initmsg, .len = 2};

if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1) {
wprintk("could not access the I2C gate\n");
return -EIO;
}
if (enable)
msg.buf = msg_enable;
else
msg.buf = msg_disable;
if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1) {
wprintk("could not access the I2C gate\n");
return -EIO;
}
msleep(20);
return 0;
}
static int kworld_sbtvd_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
{
struct saa7134_dev *dev = fe->dvb->priv;

return __kworld_sbtvd_i2c_gate_ctrl(dev, enable);
}

/* ------------------------------------------------------------------ */

static struct tda1004x_config tda827x_lifeview_config = {
.demod_address = 0x08,
.invert = 1,
Expand Down Expand Up @@ -1660,7 +1629,6 @@ static int dvb_init(struct saa7134_dev *dev)
}
break;
case SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG:
__kworld_sbtvd_i2c_gate_ctrl(dev, 0);
saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0x14000);
saa_writel(SAA7134_GPIO_GPSTATUS0 >> 2, 0x14000);
msleep(20);
Expand All @@ -1670,16 +1638,10 @@ static int dvb_init(struct saa7134_dev *dev)
fe0->dvb.frontend = dvb_attach(mb86a20s_attach,
&kworld_mb86a20s_config,
&dev->i2c_adap);
__kworld_sbtvd_i2c_gate_ctrl(dev, 1);
if (fe0->dvb.frontend != NULL) {
dvb_attach(tda18271_attach, fe0->dvb.frontend,
0x60, &dev->i2c_adap,
&kworld_tda18271_config);
/*
* Only after success, it can initialize the gate, otherwise
* an OOPS will hit, due to kfree(fe0->dvb.frontend)
*/
fe0->dvb.frontend->ops.i2c_gate_ctrl = kworld_sbtvd_i2c_gate_ctrl;
}
break;
default:
Expand Down

0 comments on commit 6183040

Please sign in to comment.