mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
[PATCH] dvb: usb: digitv: support for nxt6000 demod
Add support for the NXT6000-based digitv-box. Add .get_tune_settings callback for the NXT6000 to have a min_tune_delay of 500ms. Signed-off-by: Svante Olofsson <svante@agentum.com> Signed-off-by: Patrick Boettcher <pb@linuxtv.org> Signed-off-by: Johannes Stezenbach <js@linuxtv.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
47dc3d688d
commit
115eea4e91
2 changed files with 33 additions and 16 deletions
|
@ -111,31 +111,28 @@ static int digitv_mt352_demod_init(struct dvb_frontend *fe)
|
|||
}
|
||||
|
||||
static struct mt352_config digitv_mt352_config = {
|
||||
.demod_address = 0x0, /* ignored by the digitv anyway */
|
||||
.demod_init = digitv_mt352_demod_init,
|
||||
.pll_set = dvb_usb_pll_set,
|
||||
};
|
||||
|
||||
static struct nxt6000_config digitv_nxt6000_config = {
|
||||
.demod_address = 0x0, /* ignored by the digitv anyway */
|
||||
.clock_inversion = 0x0,
|
||||
static int digitv_nxt6000_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep)
|
||||
{
|
||||
struct dvb_usb_device *d = fe->dvb->priv;
|
||||
u8 b[5];
|
||||
dvb_usb_pll_set(fe,fep,b);
|
||||
return digitv_ctrl_msg(d,USB_WRITE_TUNER,0,&b[1],4,NULL,0);
|
||||
}
|
||||
|
||||
.pll_init = NULL,
|
||||
.pll_set = NULL,
|
||||
static struct nxt6000_config digitv_nxt6000_config = {
|
||||
.clock_inversion = 1,
|
||||
.pll_set = digitv_nxt6000_pll_set,
|
||||
};
|
||||
|
||||
static int digitv_frontend_attach(struct dvb_usb_device *d)
|
||||
{
|
||||
if ((d->fe = mt352_attach(&digitv_mt352_config, &d->i2c_adap)) != NULL)
|
||||
if ((d->fe = mt352_attach(&digitv_mt352_config, &d->i2c_adap)) != NULL ||
|
||||
(d->fe = nxt6000_attach(&digitv_nxt6000_config, &d->i2c_adap)) != NULL)
|
||||
return 0;
|
||||
if ((d->fe = nxt6000_attach(&digitv_nxt6000_config, &d->i2c_adap)) != NULL) {
|
||||
|
||||
warn("nxt6000 support is not done yet, in fact you are one of the first "
|
||||
"person who wants to use this device in Linux. Please report to "
|
||||
"linux-dvb@linuxtv.org");
|
||||
|
||||
return 0;
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
@ -173,7 +170,18 @@ static struct dvb_usb_properties digitv_properties;
|
|||
static int digitv_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
return dvb_usb_device_init(intf,&digitv_properties,THIS_MODULE,NULL);
|
||||
struct dvb_usb_device *d;
|
||||
int ret;
|
||||
if ((ret = dvb_usb_device_init(intf,&digitv_properties,THIS_MODULE,&d)) == 0) {
|
||||
u8 b[4] = { 0 };
|
||||
|
||||
b[0] = 1;
|
||||
digitv_ctrl_msg(d,USB_WRITE_REMOTE_TYPE,0,b,4,NULL,0);
|
||||
|
||||
b[0] = 0;
|
||||
digitv_ctrl_msg(d,USB_WRITE_REMOTE,0,b,4,NULL,0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct usb_device_id digitv_table [] = {
|
||||
|
|
|
@ -482,6 +482,7 @@ static int nxt6000_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_par
|
|||
if ((result = nxt6000_set_inversion(state, param->inversion)) < 0)
|
||||
return result;
|
||||
|
||||
msleep(500);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -525,6 +526,12 @@ static int nxt6000_read_signal_strength(struct dvb_frontend* fe, u16* signal_str
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int nxt6000_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune)
|
||||
{
|
||||
tune->min_delay_ms = 500;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops nxt6000_ops;
|
||||
|
||||
struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config,
|
||||
|
@ -578,6 +585,8 @@ static struct dvb_frontend_ops nxt6000_ops = {
|
|||
|
||||
.init = nxt6000_init,
|
||||
|
||||
.get_tune_settings = nxt6000_fe_get_tune_settings,
|
||||
|
||||
.set_frontend = nxt6000_set_frontend,
|
||||
|
||||
.read_status = nxt6000_read_status,
|
||||
|
|
Loading…
Reference in a new issue