mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 12:16:20 +00:00
V4L/DVB (12257): em28xx: make tuning work for Terratec Cinergy T XS USB (mt352 variant)
The Terratec Cinergy T XS USB can have either a zl10353 or an mt352. Add support for the MT352 variant. Thanks to Jelle de Jong for providing a unit to test/debug with. Cc: Jelle de Jong <jelledejong@powercraft.nl> Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
b80fd2d811
commit
4fb202a8d9
1 changed files with 41 additions and 6 deletions
|
@ -31,6 +31,8 @@
|
|||
#include "lgdt330x.h"
|
||||
#include "zl10353.h"
|
||||
#include "s5h1409.h"
|
||||
#include "mt352.h"
|
||||
#include "mt352_priv.h" /* FIXME */
|
||||
|
||||
MODULE_DESCRIPTION("driver for em28xx based DVB cards");
|
||||
MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>");
|
||||
|
@ -258,6 +260,41 @@ static struct drx397xD_config em28xx_drx397xD_with_xc3028 = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static int mt352_terratec_xs_init(struct dvb_frontend *fe)
|
||||
{
|
||||
/* Values extracted from a USB trace of the Terratec Windows driver */
|
||||
static u8 clock_config[] = { CLOCK_CTL, 0x38, 0x2c };
|
||||
static u8 reset[] = { RESET, 0x80 };
|
||||
static u8 adc_ctl_1_cfg[] = { ADC_CTL_1, 0x40 };
|
||||
static u8 agc_cfg[] = { AGC_TARGET, 0x28, 0xa0 };
|
||||
static u8 input_freq_cfg[] = { INPUT_FREQ_1, 0x31, 0xb8 };
|
||||
static u8 rs_err_cfg[] = { RS_ERR_PER_1, 0x00, 0x4d };
|
||||
static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 };
|
||||
static u8 trl_nom_cfg[] = { TRL_NOMINAL_RATE_1, 0x64, 0x00 };
|
||||
static u8 tps_given_cfg[] = { TPS_GIVEN_1, 0x40, 0x80, 0x50 };
|
||||
static u8 tuner_go[] = { TUNER_GO, 0x5d};
|
||||
|
||||
mt352_write(fe, clock_config, sizeof(clock_config));
|
||||
udelay(200);
|
||||
mt352_write(fe, reset, sizeof(reset));
|
||||
mt352_write(fe, adc_ctl_1_cfg, sizeof(adc_ctl_1_cfg));
|
||||
mt352_write(fe, agc_cfg, sizeof(agc_cfg));
|
||||
mt352_write(fe, input_freq_cfg, sizeof(input_freq_cfg));
|
||||
mt352_write(fe, rs_err_cfg, sizeof(rs_err_cfg));
|
||||
mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));
|
||||
mt352_write(fe, trl_nom_cfg, sizeof(trl_nom_cfg));
|
||||
mt352_write(fe, tps_given_cfg, sizeof(tps_given_cfg));
|
||||
mt352_write(fe, tuner_go, sizeof(tuner_go));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct mt352_config terratec_xs_mt352_cfg = {
|
||||
.demod_address = (0x1e >> 1),
|
||||
.no_tuner = 1,
|
||||
.if2 = 45600,
|
||||
.demod_init = mt352_terratec_xs_init,
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static int attach_xc3028(u8 addr, struct em28xx *dev)
|
||||
|
@ -458,13 +495,11 @@ static int dvb_init(struct em28xx *dev)
|
|||
if (dvb->frontend == NULL) {
|
||||
/* This board could have either a zl10353 or a mt352.
|
||||
If the chip id isn't for zl10353, try mt352 */
|
||||
|
||||
/* FIXME: make support for mt352 work */
|
||||
printk(KERN_ERR "version of this board with mt352 not "
|
||||
"currently supported\n");
|
||||
result = -EINVAL;
|
||||
goto out_free;
|
||||
dvb->frontend = dvb_attach(mt352_attach,
|
||||
&terratec_xs_mt352_cfg,
|
||||
&dev->i2c_adap);
|
||||
}
|
||||
|
||||
if (attach_xc3028(0x61, dev) < 0) {
|
||||
result = -EINVAL;
|
||||
goto out_free;
|
||||
|
|
Loading…
Reference in a new issue