Merge branch 'work-fixes'
This commit is contained in:
commit
8e2cc1af9f
20 changed files with 105 additions and 117 deletions
|
@ -111,4 +111,8 @@ source: linux/Documentation/video4linux/CARDLIST.bttv
|
|||
If you have problems with this please do ask on the mailing list.
|
||||
|
||||
--
|
||||
Authors: Richard Walker, Jamie Honan, Michael Hunold, Manu Abraham
|
||||
Authors: Richard Walker,
|
||||
Jamie Honan,
|
||||
Michael Hunold,
|
||||
Manu Abraham,
|
||||
Michael Krufky
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
12 -> Medion 7134 [16be:0003]
|
||||
13 -> Typhoon TV+Radio 90031
|
||||
14 -> ELSA EX-VISION 300TV [1048:226b]
|
||||
15 -> ELSA EX-VISION 500TV [1048:226b]
|
||||
15 -> ELSA EX-VISION 500TV [1048:226a]
|
||||
16 -> ASUS TV-FM 7134 [1043:4842,1043:4830,1043:4840]
|
||||
17 -> AOPEN VA1000 POWER [1131:7133]
|
||||
18 -> BMK MPEX No Tuner
|
||||
|
@ -75,7 +75,7 @@
|
|||
74 -> LifeView FlyTV Platinum Mini2 [14c0:1212]
|
||||
75 -> AVerMedia AVerTVHD MCE A180 [1461:1044]
|
||||
76 -> SKNet MonsterTV Mobile [1131:4ee9]
|
||||
77 -> Pinnacle PCTV 110i (saa7133) [11bd:002e]
|
||||
77 -> Pinnacle PCTV 40i/50i/110i (saa7133) [11bd:002e]
|
||||
78 -> ASUSTeK P7131 Dual [1043:4862]
|
||||
79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B)
|
||||
80 -> ASUS Digimatrix TV [1043:0210]
|
||||
|
|
|
@ -838,7 +838,6 @@ S: Maintained
|
|||
|
||||
DVB SUBSYSTEM AND DRIVERS
|
||||
P: LinuxTV.org Project
|
||||
M: mchehab@infradead.org
|
||||
M: v4l-dvb-maintainer@linuxtv.org
|
||||
L: linux-dvb@linuxtv.org (subscription required)
|
||||
W: http://linuxtv.org/
|
||||
|
|
|
@ -526,7 +526,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)
|
|||
info("found the stv0297 at i2c address: 0x%02x",alps_tdee4_stv0297_config.demod_address);
|
||||
} else
|
||||
/* try the sky v2.3 (vp310/Samsung tbdu18132(tsa5059)) */
|
||||
if ((fc->fe = vp310_attach(&skystar23_samsung_tbdu18132_config, &fc->i2c_adap)) != NULL) {
|
||||
if ((fc->fe = vp310_mt312_attach(&skystar23_samsung_tbdu18132_config, &fc->i2c_adap)) != NULL) {
|
||||
ops = fc->fe->ops;
|
||||
|
||||
ops->diseqc_send_master_cmd = flexcop_diseqc_send_master_cmd;
|
||||
|
|
|
@ -382,7 +382,7 @@ bt878_device_control(struct bt878 *bt, unsigned int cmd, union dst_gpio_packet *
|
|||
EXPORT_SYMBOL(bt878_device_control);
|
||||
|
||||
|
||||
struct cards card_list[] __devinitdata = {
|
||||
static struct cards card_list[] __devinitdata = {
|
||||
|
||||
{ 0x01010071, BTTV_BOARD_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
|
||||
{ 0x07611461, BTTV_BOARD_AVDVBT_761, "AverMedia AverTV DVB-T 761" },
|
||||
|
|
|
@ -602,7 +602,7 @@ static int dst_type_print(u8 type)
|
|||
|
||||
*/
|
||||
|
||||
struct dst_types dst_tlist[] = {
|
||||
static struct dst_types dst_tlist[] = {
|
||||
{
|
||||
.device_id = "200103A",
|
||||
.offset = 0,
|
||||
|
|
|
@ -282,7 +282,7 @@ static struct cx22702_config cxusb_cx22702_config = {
|
|||
.pll_set = dvb_usb_pll_set_i2c,
|
||||
};
|
||||
|
||||
static struct lgdt330x_config cxusb_lgdt330x_config = {
|
||||
static struct lgdt330x_config cxusb_lgdt3303_config = {
|
||||
.demod_address = 0x0e,
|
||||
.demod_chip = LGDT3303,
|
||||
.pll_set = dvb_usb_pll_set_i2c,
|
||||
|
@ -357,14 +357,14 @@ static int cxusb_cx22702_frontend_attach(struct dvb_usb_device *d)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
static int cxusb_lgdt330x_frontend_attach(struct dvb_usb_device *d)
|
||||
static int cxusb_lgdt3303_frontend_attach(struct dvb_usb_device *d)
|
||||
{
|
||||
if (usb_set_interface(d->udev,0,7) < 0)
|
||||
err("set interface failed");
|
||||
|
||||
cxusb_ctrl_msg(d,CMD_DIGITAL, NULL, 0, NULL, 0);
|
||||
|
||||
if ((d->fe = lgdt330x_attach(&cxusb_lgdt330x_config, &d->i2c_adap)) != NULL)
|
||||
if ((d->fe = lgdt330x_attach(&cxusb_lgdt3303_config, &d->i2c_adap)) != NULL)
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
|
@ -506,7 +506,7 @@ static struct dvb_usb_properties cxusb_bluebird_lgh064f_properties = {
|
|||
|
||||
.streaming_ctrl = cxusb_streaming_ctrl,
|
||||
.power_ctrl = cxusb_power_ctrl,
|
||||
.frontend_attach = cxusb_lgdt330x_frontend_attach,
|
||||
.frontend_attach = cxusb_lgdt3303_frontend_attach,
|
||||
.tuner_attach = cxusb_lgh064f_tuner_attach,
|
||||
|
||||
.i2c_algo = &cxusb_i2c_algo,
|
||||
|
|
|
@ -29,7 +29,7 @@ config DVB_TDA8083
|
|||
A DVB-S tuner module. Say Y when you want to support this frontend.
|
||||
|
||||
config DVB_MT312
|
||||
tristate "Zarlink MT312 based"
|
||||
tristate "Zarlink VP310/MT312 based"
|
||||
depends on DVB_CORE
|
||||
help
|
||||
A DVB-S tuner module. Say Y when you want to support this frontend.
|
||||
|
|
|
@ -612,76 +612,6 @@ static void mt312_release(struct dvb_frontend* fe)
|
|||
kfree(state);
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops vp310_mt312_ops;
|
||||
|
||||
struct dvb_frontend* vp310_attach(const struct mt312_config* config,
|
||||
struct i2c_adapter* i2c)
|
||||
{
|
||||
struct mt312_state* state = NULL;
|
||||
|
||||
/* allocate memory for the internal state */
|
||||
state = kmalloc(sizeof(struct mt312_state), GFP_KERNEL);
|
||||
if (state == NULL)
|
||||
goto error;
|
||||
|
||||
/* setup the state */
|
||||
state->config = config;
|
||||
state->i2c = i2c;
|
||||
memcpy(&state->ops, &vp310_mt312_ops, sizeof(struct dvb_frontend_ops));
|
||||
strcpy(state->ops.info.name, "Zarlink VP310 DVB-S");
|
||||
|
||||
/* check if the demod is there */
|
||||
if (mt312_readreg(state, ID, &state->id) < 0)
|
||||
goto error;
|
||||
if (state->id != ID_VP310) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* create dvb_frontend */
|
||||
state->frequency = 90;
|
||||
state->frontend.ops = &state->ops;
|
||||
state->frontend.demodulator_priv = state;
|
||||
return &state->frontend;
|
||||
|
||||
error:
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct dvb_frontend* mt312_attach(const struct mt312_config* config,
|
||||
struct i2c_adapter* i2c)
|
||||
{
|
||||
struct mt312_state* state = NULL;
|
||||
|
||||
/* allocate memory for the internal state */
|
||||
state = kmalloc(sizeof(struct mt312_state), GFP_KERNEL);
|
||||
if (state == NULL)
|
||||
goto error;
|
||||
|
||||
/* setup the state */
|
||||
state->config = config;
|
||||
state->i2c = i2c;
|
||||
memcpy(&state->ops, &vp310_mt312_ops, sizeof(struct dvb_frontend_ops));
|
||||
strcpy(state->ops.info.name, "Zarlink MT312 DVB-S");
|
||||
|
||||
/* check if the demod is there */
|
||||
if (mt312_readreg(state, ID, &state->id) < 0)
|
||||
goto error;
|
||||
if (state->id != ID_MT312) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* create dvb_frontend */
|
||||
state->frequency = 60;
|
||||
state->frontend.ops = &state->ops;
|
||||
state->frontend.demodulator_priv = state;
|
||||
return &state->frontend;
|
||||
|
||||
error:
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops vp310_mt312_ops = {
|
||||
|
||||
.info = {
|
||||
|
@ -720,6 +650,49 @@ static struct dvb_frontend_ops vp310_mt312_ops = {
|
|||
.set_voltage = mt312_set_voltage,
|
||||
};
|
||||
|
||||
struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config,
|
||||
struct i2c_adapter* i2c)
|
||||
{
|
||||
struct mt312_state* state = NULL;
|
||||
|
||||
/* allocate memory for the internal state */
|
||||
state = kmalloc(sizeof(struct mt312_state), GFP_KERNEL);
|
||||
if (state == NULL)
|
||||
goto error;
|
||||
|
||||
/* setup the state */
|
||||
state->config = config;
|
||||
state->i2c = i2c;
|
||||
memcpy(&state->ops, &vp310_mt312_ops, sizeof(struct dvb_frontend_ops));
|
||||
|
||||
/* check if the demod is there */
|
||||
if (mt312_readreg(state, ID, &state->id) < 0)
|
||||
goto error;
|
||||
|
||||
switch (state->id) {
|
||||
case ID_VP310:
|
||||
strcpy(state->ops.info.name, "Zarlink VP310 DVB-S");
|
||||
state->frequency = 90;
|
||||
break;
|
||||
case ID_MT312:
|
||||
strcpy(state->ops.info.name, "Zarlink MT312 DVB-S");
|
||||
state->frequency = 60;
|
||||
break;
|
||||
default:
|
||||
printk (KERN_WARNING "Only Zarlink VP310/MT312 are supported chips.\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* create dvb_frontend */
|
||||
state->frontend.ops = &state->ops;
|
||||
state->frontend.demodulator_priv = state;
|
||||
return &state->frontend;
|
||||
|
||||
error:
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
module_param(debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
|
||||
|
||||
|
@ -727,5 +700,4 @@ MODULE_DESCRIPTION("Zarlink VP310/MT312 DVB-S Demodulator driver");
|
|||
MODULE_AUTHOR("Andreas Oberritter <obi@linuxtv.org>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
EXPORT_SYMBOL(mt312_attach);
|
||||
EXPORT_SYMBOL(vp310_attach);
|
||||
EXPORT_SYMBOL(vp310_mt312_attach);
|
||||
|
|
|
@ -38,10 +38,8 @@ struct mt312_config
|
|||
int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
|
||||
};
|
||||
|
||||
extern struct dvb_frontend* mt312_attach(const struct mt312_config* config,
|
||||
struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config,
|
||||
struct i2c_adapter* i2c);
|
||||
|
||||
extern struct dvb_frontend* vp310_attach(const struct mt312_config* config,
|
||||
struct i2c_adapter* i2c);
|
||||
|
||||
#endif // MT312_H
|
||||
|
|
|
@ -393,10 +393,6 @@ static int stv0297_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_par
|
|||
break;
|
||||
|
||||
case QAM_128:
|
||||
delay = 150;
|
||||
sweeprate = 1000;
|
||||
break;
|
||||
|
||||
case QAM_256:
|
||||
delay = 200;
|
||||
sweeprate = 500;
|
||||
|
|
|
@ -2477,7 +2477,8 @@ static int frontend_init(struct av7110 *av7110)
|
|||
* The same behaviour of missing VSYNC can be duplicated on budget
|
||||
* cards, by seting DD1_INIT trigger mode 7 in 3rd nibble.
|
||||
*/
|
||||
static int av7110_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *pci_ext)
|
||||
static int __devinit av7110_attach(struct saa7146_dev* dev,
|
||||
struct saa7146_pci_extension_data *pci_ext)
|
||||
{
|
||||
const int length = TS_WIDTH * TS_HEIGHT;
|
||||
struct pci_dev *pdev = dev->pci;
|
||||
|
@ -2827,7 +2828,7 @@ static int av7110_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_d
|
|||
goto out;
|
||||
}
|
||||
|
||||
static int av7110_detach(struct saa7146_dev* saa)
|
||||
static int __devexit av7110_detach(struct saa7146_dev* saa)
|
||||
{
|
||||
struct av7110 *av7110 = saa->ext_priv;
|
||||
dprintk(4, "%p\n", av7110);
|
||||
|
@ -2974,7 +2975,7 @@ static struct saa7146_extension av7110_extension = {
|
|||
.module = THIS_MODULE,
|
||||
.pci_tbl = &pci_tbl[0],
|
||||
.attach = av7110_attach,
|
||||
.detach = av7110_detach,
|
||||
.detach = __devexit_p(av7110_detach),
|
||||
|
||||
.irq_mask = MASK_19 | MASK_03 | MASK_10,
|
||||
.irq_func = av7110_irq,
|
||||
|
|
|
@ -208,7 +208,7 @@ static void ir_handler(struct av7110 *av7110, u32 ircom)
|
|||
}
|
||||
|
||||
|
||||
int __init av7110_ir_init(struct av7110 *av7110)
|
||||
int __devinit av7110_ir_init(struct av7110 *av7110)
|
||||
{
|
||||
static struct proc_dir_entry *e;
|
||||
|
||||
|
@ -248,7 +248,7 @@ int __init av7110_ir_init(struct av7110 *av7110)
|
|||
}
|
||||
|
||||
|
||||
void __exit av7110_ir_exit(struct av7110 *av7110)
|
||||
void __devexit av7110_ir_exit(struct av7110 *av7110)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -567,7 +567,7 @@ static struct v4l2_queryctrl cx25840_qctrl[] = {
|
|||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "Contrast",
|
||||
.minimum = 0,
|
||||
.maximum = 255,
|
||||
.maximum = 127,
|
||||
.step = 1,
|
||||
.default_value = 64,
|
||||
.flags = 0,
|
||||
|
@ -576,7 +576,7 @@ static struct v4l2_queryctrl cx25840_qctrl[] = {
|
|||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "Saturation",
|
||||
.minimum = 0,
|
||||
.maximum = 255,
|
||||
.maximum = 127,
|
||||
.step = 1,
|
||||
.default_value = 64,
|
||||
.flags = 0,
|
||||
|
|
|
@ -1027,7 +1027,7 @@ static struct v4l2_queryctrl saa7115_qctrl[] = {
|
|||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "Contrast",
|
||||
.minimum = 0,
|
||||
.maximum = 255,
|
||||
.maximum = 127,
|
||||
.step = 1,
|
||||
.default_value = 64,
|
||||
.flags = 0,
|
||||
|
@ -1036,7 +1036,7 @@ static struct v4l2_queryctrl saa7115_qctrl[] = {
|
|||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "Saturation",
|
||||
.minimum = 0,
|
||||
.maximum = 255,
|
||||
.maximum = 127,
|
||||
.step = 1,
|
||||
.default_value = 64,
|
||||
.flags = 0,
|
||||
|
|
|
@ -54,10 +54,12 @@ MODULE_PARM_DESC(debug,"enable debug messages [alsa]");
|
|||
|
||||
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
|
||||
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
|
||||
static int enable[SNDRV_CARDS] = {1, [1 ... (SNDRV_CARDS - 1)] = 0};
|
||||
static int enable[SNDRV_CARDS] = {1, [1 ... (SNDRV_CARDS - 1)] = 1};
|
||||
|
||||
module_param_array(index, int, NULL, 0444);
|
||||
module_param_array(enable, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s).");
|
||||
MODULE_PARM_DESC(enable, "Enable (or not) the SAA7134 capture interface(s).");
|
||||
|
||||
#define dprintk(fmt, arg...) if (debug) \
|
||||
printk(KERN_DEBUG "%s/alsa: " fmt, dev->name , ##arg)
|
||||
|
|
|
@ -977,7 +977,7 @@ struct saa7134_board saa7134_boards[] = {
|
|||
.radio_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER | TDA9887_PORT2_ACTIVE,
|
||||
.tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER | TDA9887_PORT2_INACTIVE,
|
||||
.inputs = {{
|
||||
.name = name_tv,
|
||||
.vmux = 3,
|
||||
|
@ -1666,7 +1666,7 @@ struct saa7134_board saa7134_boards[] = {
|
|||
.radio_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER | TDA9887_PORT2_ACTIVE,
|
||||
.tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER | TDA9887_PORT2_INACTIVE,
|
||||
.mpeg = SAA7134_MPEG_DVB,
|
||||
.inputs = {{
|
||||
.name = name_tv,
|
||||
|
@ -2187,7 +2187,7 @@ struct saa7134_board saa7134_boards[] = {
|
|||
.radio_type = UNSET,
|
||||
.tuner_addr = 0x61,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.tda9887_conf = TDA9887_PRESENT,
|
||||
.tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE,
|
||||
.mpeg = SAA7134_MPEG_DVB,
|
||||
.inputs = {{
|
||||
.name = name_tv,
|
||||
|
@ -2211,7 +2211,7 @@ struct saa7134_board saa7134_boards[] = {
|
|||
.radio_type = UNSET,
|
||||
.tuner_addr = 0x61,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.tda9887_conf = TDA9887_PRESENT,
|
||||
.tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE,
|
||||
.mpeg = SAA7134_MPEG_DVB,
|
||||
.inputs = {{
|
||||
.name = name_tv,
|
||||
|
@ -2392,7 +2392,7 @@ struct saa7134_board saa7134_boards[] = {
|
|||
}},
|
||||
},
|
||||
[SAA7134_BOARD_PINNACLE_PCTV_110i] = {
|
||||
.name = "Pinnacle PCTV 110i (saa7133)",
|
||||
.name = "Pinnacle PCTV 40i/50i/110i (saa7133)",
|
||||
.audio_clock = 0x00187de7,
|
||||
.tuner_type = TUNER_PHILIPS_TDA8290,
|
||||
.radio_type = UNSET,
|
||||
|
@ -2408,6 +2408,10 @@ struct saa7134_board saa7134_boards[] = {
|
|||
.name = name_comp1,
|
||||
.vmux = 1,
|
||||
.amux = LINE2,
|
||||
},{
|
||||
.name = name_comp2,
|
||||
.vmux = 0,
|
||||
.amux = LINE2,
|
||||
},{
|
||||
.name = name_svideo,
|
||||
.vmux = 8,
|
||||
|
@ -2745,7 +2749,7 @@ struct pci_device_id saa7134_pci_tbl[] = {
|
|||
.vendor = PCI_VENDOR_ID_PHILIPS,
|
||||
.device = PCI_DEVICE_ID_PHILIPS_SAA7130,
|
||||
.subvendor = 0x1048,
|
||||
.subdevice = 0x226b,
|
||||
.subdevice = 0x226a,
|
||||
.driver_data = SAA7134_BOARD_ELSA_500TV,
|
||||
},{
|
||||
.vendor = PCI_VENDOR_ID_PHILIPS,
|
||||
|
@ -3201,6 +3205,11 @@ int saa7134_board_init1(struct saa7134_dev *dev)
|
|||
/* power-up tuner chip */
|
||||
saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x00040000, 0x00040000);
|
||||
saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00040000, 0x00000000);
|
||||
case SAA7134_BOARD_PINNACLE_300I_DVBT_PAL:
|
||||
/* this turns the remote control chip off to work around a bug in it */
|
||||
saa_writeb(SAA7134_GPIO_GPMODE1, 0x80);
|
||||
saa_writeb(SAA7134_GPIO_GPSTATUS1, 0x80);
|
||||
break;
|
||||
case SAA7134_BOARD_MONSTERTV_MOBILE:
|
||||
/* power-up tuner chip */
|
||||
saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x00040000, 0x00040000);
|
||||
|
|
|
@ -110,6 +110,7 @@ static int mt352_pinnacle_init(struct dvb_frontend* fe)
|
|||
mt352_write(fe, fsm_ctl_cfg, sizeof(fsm_ctl_cfg));
|
||||
mt352_write(fe, scan_ctl_cfg, sizeof(scan_ctl_cfg));
|
||||
mt352_write(fe, irq_cfg, sizeof(irq_cfg));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -117,8 +118,10 @@ static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
|
|||
struct dvb_frontend_parameters* params,
|
||||
u8* pllbuf)
|
||||
{
|
||||
static int on = TDA9887_PRESENT | TDA9887_PORT2_INACTIVE;
|
||||
static int off = TDA9887_PRESENT | TDA9887_PORT2_ACTIVE;
|
||||
u8 off[] = { 0x00, 0xf1};
|
||||
u8 on[] = { 0x00, 0x71};
|
||||
struct i2c_msg msg = {.addr=0x43, .flags=0, .buf=off, .len = sizeof(off)};
|
||||
|
||||
struct saa7134_dev *dev = fe->dvb->priv;
|
||||
struct v4l2_frequency f;
|
||||
|
||||
|
@ -126,9 +129,10 @@ static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
|
|||
f.tuner = 0;
|
||||
f.type = V4L2_TUNER_DIGITAL_TV;
|
||||
f.frequency = params->frequency / 1000 * 16 / 1000;
|
||||
saa7134_i2c_call_clients(dev,TDA9887_SET_CONFIG,&on);
|
||||
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
||||
saa7134_i2c_call_clients(dev,VIDIOC_S_FREQUENCY,&f);
|
||||
saa7134_i2c_call_clients(dev,TDA9887_SET_CONFIG,&off);
|
||||
msg.buf = on;
|
||||
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
||||
|
||||
pinnacle_antenna_pwr(dev, antenna_pwr);
|
||||
|
||||
|
|
|
@ -583,6 +583,7 @@ int tda8290_probe(struct i2c_client *c)
|
|||
unsigned char soft_reset[] = { 0x00, 0x00 };
|
||||
unsigned char easy_mode_b[] = { 0x01, 0x02 };
|
||||
unsigned char easy_mode_g[] = { 0x01, 0x04 };
|
||||
unsigned char restore_9886[] = { 0x00, 0xd6, 0x30 };
|
||||
unsigned char addr_dto_lsb = 0x07;
|
||||
unsigned char data;
|
||||
|
||||
|
@ -599,6 +600,7 @@ int tda8290_probe(struct i2c_client *c)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
i2c_master_send(c, restore_9886, 3);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -713,8 +713,9 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
|
|||
struct v4l2_frequency *f = arg;
|
||||
|
||||
switch_v4l2();
|
||||
if (V4L2_TUNER_RADIO == f->type &&
|
||||
V4L2_TUNER_RADIO != t->mode) {
|
||||
if ((V4L2_TUNER_RADIO == f->type && V4L2_TUNER_RADIO != t->mode)
|
||||
|| (V4L2_TUNER_DIGITAL_TV == f->type
|
||||
&& V4L2_TUNER_DIGITAL_TV != t->mode)) {
|
||||
if (set_mode (client, t, f->type, "VIDIOC_S_FREQUENCY")
|
||||
== EINVAL)
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue