V4L/DVB (5363): Dvb: Remove lgh06xf driver
The code of the dvb-pll driver and the lgh06xf driver is nearly identical. The main difference is that the lgh06xf driver would set the AGC TOP value on every tune call. The dvb-pll driver now has the ability to set the AGC TOP when the front-end device is opened, which is a better way to go about it. By using this ability of dvb-pll, the lgh06xf driver is made unnecessary. There is one other difference. dvb-pll will probe for the presence of an I2C pll chip by doing a one byte read, the lgh06xf driver did not do this. In some devices the PLL is not reachable over I2C at the timer the tuner is attached. Some more initialization, such as firmware loading, must take place first. None of the devices using a LG-H06xF should have this problem. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Acked-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
26aed92289
commit
6bdcc6e6db
|
@ -9,7 +9,6 @@ config DVB_B2C2_FLEXCOP
|
|||
select DVB_STV0297 if !DVB_FE_CUSTOMISE
|
||||
select DVB_BCM3510 if !DVB_FE_CUSTOMISE
|
||||
select DVB_LGDT330X if !DVB_FE_CUSTOMISE
|
||||
select DVB_TUNER_LGH06XF if !DVB_FE_CUSTOMISE
|
||||
help
|
||||
Support for the digital TV receiver chip made by B2C2 Inc. included in
|
||||
Technisats PCI cards and USB boxes.
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "stv0297.h"
|
||||
#include "mt312.h"
|
||||
#include "lgdt330x.h"
|
||||
#include "lgh06xf.h"
|
||||
#include "dvb-pll.h"
|
||||
|
||||
/* lnb control */
|
||||
|
@ -507,7 +506,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)
|
|||
/* try the air atsc 3nd generation (lgdt3303) */
|
||||
if ((fc->fe = dvb_attach(lgdt330x_attach, &air2pc_atsc_hd5000_config, &fc->i2c_adap)) != NULL) {
|
||||
fc->dev_type = FC_AIR_ATSC3;
|
||||
dvb_attach(lgh06xf_attach, fc->fe, &fc->i2c_adap);
|
||||
dvb_attach(dvb_pll_attach, fc->fe, 0x61, &fc->i2c_adap, &dvb_pll_lg_tdvs_h06xf);
|
||||
info("found the lgdt3303 at i2c address: 0x%02x",air2pc_atsc_hd5000_config.demod_address);
|
||||
} else
|
||||
/* try the air atsc 1nd generation (bcm3510)/panasonic ct10s */
|
||||
|
|
|
@ -7,7 +7,7 @@ config DVB_BT8XX
|
|||
select DVB_CX24110 if !DVB_FE_CUSTOMISE
|
||||
select DVB_OR51211 if !DVB_FE_CUSTOMISE
|
||||
select DVB_LGDT330X if !DVB_FE_CUSTOMISE
|
||||
select DVB_TUNER_LGH06XF if !DVB_FE_CUSTOMISE
|
||||
select DVB_PLL
|
||||
select DVB_ZL10353 if !DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
|
|
|
@ -610,7 +610,8 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
|
|||
lgdt330x_reset(card);
|
||||
card->fe = dvb_attach(lgdt330x_attach, &tdvs_tua6034_config, card->i2c_adapter);
|
||||
if (card->fe != NULL) {
|
||||
dvb_attach(lgh06xf_attach, card->fe, card->i2c_adapter);
|
||||
dvb_attach(dvb_pll_attach, card->fe, 0x61,
|
||||
card->i2c_adapter, &dvb_pll_lg_tdvs_h06xf);
|
||||
dprintk ("dvb_bt8xx: lgdt330x detected\n");
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
#include "cx24110.h"
|
||||
#include "or51211.h"
|
||||
#include "lgdt330x.h"
|
||||
#include "lgh06xf.h"
|
||||
#include "zl10353.h"
|
||||
#include "dvb-pll.h"
|
||||
|
||||
struct dvb_bt8xx_card {
|
||||
struct mutex lock;
|
||||
|
|
|
@ -101,7 +101,6 @@ config DVB_USB_CXUSB
|
|||
select DVB_PLL
|
||||
select DVB_CX22702 if !DVB_FE_CUSTOMISE
|
||||
select DVB_LGDT330X if !DVB_FE_CUSTOMISE
|
||||
select DVB_TUNER_LGH06XF if !DVB_FE_CUSTOMISE
|
||||
select DVB_MT352 if !DVB_FE_CUSTOMISE
|
||||
select DVB_ZL10353 if !DVB_FE_CUSTOMISE
|
||||
help
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include "cx22702.h"
|
||||
#include "lgdt330x.h"
|
||||
#include "lgh06xf.h"
|
||||
#include "mt352.h"
|
||||
#include "mt352_priv.h"
|
||||
#include "zl10353.h"
|
||||
|
@ -388,7 +387,8 @@ static int cxusb_dtt7579_tuner_attach(struct dvb_usb_adapter *adap)
|
|||
|
||||
static int cxusb_lgh064f_tuner_attach(struct dvb_usb_adapter *adap)
|
||||
{
|
||||
dvb_attach(lgh06xf_attach, adap->fe, &adap->dev->i2c_adap);
|
||||
dvb_attach(dvb_pll_attach, adap->fe, 0x61, &adap->dev->i2c_adap,
|
||||
&dvb_pll_lg_tdvs_h06xf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -315,14 +315,6 @@ config DVB_TUNER_MT2060
|
|||
help
|
||||
A driver for the silicon IF tuner MT2060 from Microtune.
|
||||
|
||||
config DVB_TUNER_LGH06XF
|
||||
tristate "LG TDVS-H06xF ATSC tuner"
|
||||
depends on DVB_CORE && I2C
|
||||
select DVB_PLL
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the LG TDVS-H06xF ATSC tuner family.
|
||||
|
||||
comment "Miscellaneous devices"
|
||||
depends on DVB_CORE
|
||||
|
||||
|
|
|
@ -41,4 +41,3 @@ obj-$(CONFIG_DVB_TDA827X) += tda827x.o
|
|||
obj-$(CONFIG_DVB_TUNER_MT2060) += mt2060.o
|
||||
obj-$(CONFIG_DVB_TUNER_QT1010) += qt1010.o
|
||||
obj-$(CONFIG_DVB_TUA6100) += tua6100.o
|
||||
obj-$(CONFIG_DVB_TUNER_LGH06XF) += lgh06xf.o
|
||||
|
|
|
@ -245,6 +245,7 @@ struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf = {
|
|||
.name = "LG TDVS-H06xF",
|
||||
.min = 54000000,
|
||||
.max = 863000000,
|
||||
.initdata = tua603x_agc103,
|
||||
.count = 3,
|
||||
.entries = {
|
||||
{ 165000000, 44000000, 62500, 0xce, 0x01 },
|
||||
|
|
|
@ -1,134 +0,0 @@
|
|||
/*
|
||||
* lgh06xf.c - ATSC Tuner support for LG TDVS-H06xF
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "dvb-pll.h"
|
||||
#include "lgh06xf.h"
|
||||
|
||||
#define LG_H06XF_PLL_I2C_ADDR 0x61
|
||||
|
||||
struct lgh06xf_priv {
|
||||
struct i2c_adapter *i2c;
|
||||
u32 frequency;
|
||||
};
|
||||
|
||||
static int lgh06xf_release(struct dvb_frontend *fe)
|
||||
{
|
||||
kfree(fe->tuner_priv);
|
||||
fe->tuner_priv = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lgh06xf_set_params(struct dvb_frontend* fe,
|
||||
struct dvb_frontend_parameters* params)
|
||||
{
|
||||
struct lgh06xf_priv *priv = fe->tuner_priv;
|
||||
u8 buf[4];
|
||||
struct i2c_msg msg = { .addr = LG_H06XF_PLL_I2C_ADDR, .flags = 0,
|
||||
.buf = buf, .len = sizeof(buf) };
|
||||
u32 frequency;
|
||||
int result;
|
||||
|
||||
if ((result = dvb_pll_configure(&dvb_pll_lg_tdvs_h06xf, buf,
|
||||
params->frequency, 0)) < 0)
|
||||
return result;
|
||||
else
|
||||
frequency = result;
|
||||
|
||||
if (fe->ops.i2c_gate_ctrl)
|
||||
fe->ops.i2c_gate_ctrl(fe, 1);
|
||||
if ((result = i2c_transfer(priv->i2c, &msg, 1)) != 1) {
|
||||
printk(KERN_WARNING "lgh06xf: %s error "
|
||||
"(addr %02x <- %02x, result = %i)\n",
|
||||
__FUNCTION__, buf[0], buf[1], result);
|
||||
if (result < 0)
|
||||
return result;
|
||||
else
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
|
||||
/* Set the Auxiliary Byte. */
|
||||
buf[0] = buf[2];
|
||||
buf[0] &= ~0x20;
|
||||
buf[0] |= 0x18;
|
||||
buf[1] = 0x50;
|
||||
msg.len = 2;
|
||||
if (fe->ops.i2c_gate_ctrl)
|
||||
fe->ops.i2c_gate_ctrl(fe, 1);
|
||||
if ((result = i2c_transfer(priv->i2c, &msg, 1)) != 1) {
|
||||
printk(KERN_WARNING "lgh06xf: %s error "
|
||||
"(addr %02x <- %02x, result = %i)\n",
|
||||
__FUNCTION__, buf[0], buf[1], result);
|
||||
if (result < 0)
|
||||
return result;
|
||||
else
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
|
||||
priv->frequency = frequency;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lgh06xf_get_frequency(struct dvb_frontend *fe, u32 *frequency)
|
||||
{
|
||||
struct lgh06xf_priv *priv = fe->tuner_priv;
|
||||
*frequency = priv->frequency;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dvb_tuner_ops lgh06xf_tuner_ops = {
|
||||
.release = lgh06xf_release,
|
||||
.set_params = lgh06xf_set_params,
|
||||
.get_frequency = lgh06xf_get_frequency,
|
||||
};
|
||||
|
||||
struct dvb_frontend* lgh06xf_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c)
|
||||
{
|
||||
struct lgh06xf_priv *priv = NULL;
|
||||
|
||||
priv = kzalloc(sizeof(struct lgh06xf_priv), GFP_KERNEL);
|
||||
if (priv == NULL)
|
||||
return NULL;
|
||||
|
||||
priv->i2c = i2c;
|
||||
|
||||
memcpy(&fe->ops.tuner_ops, &lgh06xf_tuner_ops,
|
||||
sizeof(struct dvb_tuner_ops));
|
||||
|
||||
strlcpy(fe->ops.tuner_ops.info.name, dvb_pll_lg_tdvs_h06xf.name,
|
||||
sizeof(fe->ops.tuner_ops.info.name));
|
||||
|
||||
fe->ops.tuner_ops.info.frequency_min = dvb_pll_lg_tdvs_h06xf.min;
|
||||
fe->ops.tuner_ops.info.frequency_max = dvb_pll_lg_tdvs_h06xf.max;
|
||||
|
||||
fe->tuner_priv = priv;
|
||||
return fe;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(lgh06xf_attach);
|
||||
|
||||
MODULE_DESCRIPTION("LG TDVS-H06xF ATSC Tuner support");
|
||||
MODULE_AUTHOR("Michael Krufky");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
|
@ -1,35 +0,0 @@
|
|||
/*
|
||||
* lgh06xf.h - ATSC Tuner support for LG TDVS-H06xF
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _LGH06XF_H_
|
||||
#define _LGH06XF_H_
|
||||
#include "dvb_frontend.h"
|
||||
|
||||
#if defined(CONFIG_DVB_TUNER_LGH06XF) || (defined(CONFIG_DVB_TUNER_LGH06XF_MODULE) && defined(MODULE))
|
||||
extern struct dvb_frontend* lgh06xf_attach(struct dvb_frontend* fe,
|
||||
struct i2c_adapter *i2c);
|
||||
#else
|
||||
static inline struct dvb_frontend* lgh06xf_attach(struct dvb_frontend* fe,
|
||||
struct i2c_adapter *i2c)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
#endif /* CONFIG_DVB_TUNER_LGH06XF */
|
||||
|
||||
#endif /* _LGH06XF_H_ */
|
|
@ -53,7 +53,6 @@ config VIDEO_CX88_DVB
|
|||
select DVB_OR51132 if !DVB_FE_CUSTOMISE
|
||||
select DVB_CX22702 if !DVB_FE_CUSTOMISE
|
||||
select DVB_LGDT330X if !DVB_FE_CUSTOMISE
|
||||
select DVB_TUNER_LGH06XF if !DVB_FE_CUSTOMISE
|
||||
select DVB_NXT200X if !DVB_FE_CUSTOMISE
|
||||
select DVB_CX24123 if !DVB_FE_CUSTOMISE
|
||||
select DVB_ISL6421 if !DVB_FE_CUSTOMISE
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
#include "cx22702.h"
|
||||
#include "or51132.h"
|
||||
#include "lgdt330x.h"
|
||||
#include "lgh06xf.h"
|
||||
#include "nxt200x.h"
|
||||
#include "cx24123.h"
|
||||
#include "isl6421.h"
|
||||
|
@ -631,8 +630,9 @@ static int dvb_register(struct cx8802_dev *dev)
|
|||
&fusionhdtv_5_gold,
|
||||
&dev->core->i2c_adap);
|
||||
if (dev->dvb.frontend != NULL) {
|
||||
dvb_attach(lgh06xf_attach, dev->dvb.frontend,
|
||||
&dev->core->i2c_adap);
|
||||
dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,
|
||||
&dev->core->i2c_adap,
|
||||
&dvb_pll_lg_tdvs_h06xf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -650,8 +650,9 @@ static int dvb_register(struct cx8802_dev *dev)
|
|||
&pchdtv_hd5500,
|
||||
&dev->core->i2c_adap);
|
||||
if (dev->dvb.frontend != NULL) {
|
||||
dvb_attach(lgh06xf_attach, dev->dvb.frontend,
|
||||
&dev->core->i2c_adap);
|
||||
dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,
|
||||
&dev->core->i2c_adap,
|
||||
&dvb_pll_lg_tdvs_h06xf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue