Skip to content

Commit

Permalink
[media] dib0700: successfully connect to xc4000 over i2c for PCTV 340e
Browse files Browse the repository at this point in the history
Use the correct i2c bus to communicate with the tuner, and properly setup the
reset GPIO and i2c address.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Cc: Patrick Boettcher <pboettcher@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Devin Heitmueller authored and Mauro Carvalho Chehab committed Jul 27, 2011
1 parent 01f1626 commit 59d0c37
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions drivers/media/dvb/dvb-usb/dib0700_devices.c
Original file line number Diff line number Diff line change
Expand Up @@ -2663,10 +2663,9 @@ static int dib0700_xc4000_tuner_callback(void *priv, int component,

if (command == XC4000_TUNER_RESET) {
/* Reset the tuner */
dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 0);
msleep(10);
dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 1);
dib7000p_set_gpio(adap->fe, 8, 0, 0);
msleep(10);
dib7000p_set_gpio(adap->fe, 8, 0, 1);
} else {
err("xc4000: unknown tuner callback command: %d\n", command);
return -EINVAL;
Expand All @@ -2683,7 +2682,6 @@ static struct dib7000p_config pctv_340e_config = {
.agc = &stk7700p_7000p_mt2060_agc_config,
.bw = &stk7700p_pll_config,

/* FIXME: need to take xc4000 out of reset */
.gpio_dir = DIB7000M_GPIO_DEFAULT_DIRECTIONS,
.gpio_val = DIB7000M_GPIO_DEFAULT_VALUES,
.gpio_pwm_pos = DIB7000M_GPIO_DEFAULT_PWM_POS,
Expand Down Expand Up @@ -2738,17 +2736,26 @@ static int pctv340e_frontend_attach(struct dvb_usb_adapter *adap)


static struct xc4000_config s5h1411_xc4000_tunerconfig = {
.i2c_address = 0x64,
.i2c_address = 0x61,
.if_khz = 5380,
};

static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
{
err("xc4000: xc4000_tuner_attach");
/* FIXME: generalize & move to common area */
struct i2c_adapter *tun_i2c;

/* The xc4000 is not on the main i2c bus */
tun_i2c = dib7000p_get_i2c_master(adap->fe,
DIBX000_I2C_INTERFACE_TUNER, 1);
if (tun_i2c == NULL) {
printk("Could not reach tuner i2c bus\n");
return 0;
}

/* Setup the reset callback */
adap->fe->callback = dib0700_xc4000_tuner_callback;

return dvb_attach(xc4000_attach, adap->fe, &adap->dev->i2c_adap,
return dvb_attach(xc4000_attach, adap->fe, tun_i2c,
&s5h1411_xc4000_tunerconfig)
== NULL ? -ENODEV : 0;
}
Expand Down

0 comments on commit 59d0c37

Please sign in to comment.