diff options
-rw-r--r-- | drivers/media/dvb/dvb-usb/cxusb.c | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c index 1f0d3e995c8d..5151fb4172df 100644 --- a/drivers/media/dvb/dvb-usb/cxusb.c +++ b/drivers/media/dvb/dvb-usb/cxusb.c | |||
@@ -322,6 +322,36 @@ static int cxusb_mt352_demod_init(struct dvb_frontend* fe) | |||
322 | return 0; | 322 | return 0; |
323 | } | 323 | } |
324 | 324 | ||
325 | static int cxusb_lgh064f_pll_set_i2c(struct dvb_frontend *fe, | ||
326 | struct dvb_frontend_parameters *fep) | ||
327 | { | ||
328 | struct dvb_usb_device *d = fe->dvb->priv; | ||
329 | int ret = 0; | ||
330 | u8 b[5]; | ||
331 | struct i2c_msg msg = { .addr = d->pll_addr, .flags = 0, | ||
332 | .buf = &b[1], .len = 4 }; | ||
333 | |||
334 | dvb_usb_pll_set(fe,fep,b); | ||
335 | |||
336 | if (i2c_transfer (&d->i2c_adap, &msg, 1) != 1) { | ||
337 | err("tuner i2c write failed for pll_set."); | ||
338 | ret = -EREMOTEIO; | ||
339 | } | ||
340 | msleep(1); | ||
341 | |||
342 | /* Set the Auxiliary Byte. */ | ||
343 | b[3] &= ~0x20; | ||
344 | b[3] |= 0x18; | ||
345 | b[4] = 0x50; | ||
346 | if (i2c_transfer(&d->i2c_adap, &msg, 1) != 1) { | ||
347 | err("tuner i2c write failed writing auxiliary byte."); | ||
348 | ret = -EREMOTEIO; | ||
349 | } | ||
350 | msleep(1); | ||
351 | |||
352 | return ret; | ||
353 | } | ||
354 | |||
325 | static struct cx22702_config cxusb_cx22702_config = { | 355 | static struct cx22702_config cxusb_cx22702_config = { |
326 | .demod_address = 0x63, | 356 | .demod_address = 0x63, |
327 | 357 | ||
@@ -334,7 +364,7 @@ static struct cx22702_config cxusb_cx22702_config = { | |||
334 | static struct lgdt330x_config cxusb_lgdt3303_config = { | 364 | static struct lgdt330x_config cxusb_lgdt3303_config = { |
335 | .demod_address = 0x0e, | 365 | .demod_address = 0x0e, |
336 | .demod_chip = LGDT3303, | 366 | .demod_chip = LGDT3303, |
337 | .pll_set = dvb_usb_pll_set_i2c, | 367 | .pll_set = cxusb_lgh064f_pll_set_i2c, |
338 | }; | 368 | }; |
339 | 369 | ||
340 | static struct mt352_config cxusb_dee1601_config = { | 370 | static struct mt352_config cxusb_dee1601_config = { |
@@ -362,11 +392,7 @@ static int cxusb_fmd1216me_tuner_attach(struct dvb_usb_device *d) | |||
362 | 392 | ||
363 | static int cxusb_lgh064f_tuner_attach(struct dvb_usb_device *d) | 393 | static int cxusb_lgh064f_tuner_attach(struct dvb_usb_device *d) |
364 | { | 394 | { |
365 | u8 bpll[4] = { 0x00, 0x00, 0x18, 0x50 }; | ||
366 | /* bpll[2] : unset bit 3, set bits 4&5 | ||
367 | bpll[3] : 0x50 - digital, 0x20 - analog */ | ||
368 | d->pll_addr = 0x61; | 395 | d->pll_addr = 0x61; |
369 | memcpy(d->pll_init, bpll, 4); | ||
370 | d->pll_desc = &dvb_pll_tdvs_tua6034; | 396 | d->pll_desc = &dvb_pll_tdvs_tua6034; |
371 | return 0; | 397 | return 0; |
372 | } | 398 | } |