mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: [media] cinergyT2-fe: Fix bandwdith settings [media] V4L: atmel-isi: add clk_prepare()/clk_unprepare() functions [media] cxd2820r: sleep on DVB-T/T2 delivery system switch [media] anysee: fix CI init [media] cxd2820r: remove unused parameter from cxd2820r_attach [media] cxd2820r: fix dvb_frontend_ops
This commit is contained in:
commit
74ea15d909
6 changed files with 45 additions and 16 deletions
|
@ -887,8 +887,7 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
|
||||||
|
|
||||||
/* attach demod */
|
/* attach demod */
|
||||||
adap->fe_adap[state->fe_id].fe = dvb_attach(cxd2820r_attach,
|
adap->fe_adap[state->fe_id].fe = dvb_attach(cxd2820r_attach,
|
||||||
&anysee_cxd2820r_config, &adap->dev->i2c_adap,
|
&anysee_cxd2820r_config, &adap->dev->i2c_adap);
|
||||||
NULL);
|
|
||||||
|
|
||||||
state->has_ci = true;
|
state->has_ci = true;
|
||||||
|
|
||||||
|
@ -1189,6 +1188,14 @@ static int anysee_ci_init(struct dvb_usb_device *d)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 2)|(0 << 1)|(0 << 0), 0x07);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 2)|(1 << 1)|(1 << 0), 0x07);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1);
|
ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -276,14 +276,15 @@ static int cinergyt2_fe_set_frontend(struct dvb_frontend *fe)
|
||||||
param.flags = 0;
|
param.flags = 0;
|
||||||
|
|
||||||
switch (fep->bandwidth_hz) {
|
switch (fep->bandwidth_hz) {
|
||||||
|
default:
|
||||||
case 8000000:
|
case 8000000:
|
||||||
param.bandwidth = 0;
|
param.bandwidth = 8;
|
||||||
break;
|
break;
|
||||||
case 7000000:
|
case 7000000:
|
||||||
param.bandwidth = 1;
|
param.bandwidth = 7;
|
||||||
break;
|
break;
|
||||||
case 6000000:
|
case 6000000:
|
||||||
param.bandwidth = 2;
|
param.bandwidth = 6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,14 +77,12 @@ struct cxd2820r_config {
|
||||||
(defined(CONFIG_DVB_CXD2820R_MODULE) && defined(MODULE))
|
(defined(CONFIG_DVB_CXD2820R_MODULE) && defined(MODULE))
|
||||||
extern struct dvb_frontend *cxd2820r_attach(
|
extern struct dvb_frontend *cxd2820r_attach(
|
||||||
const struct cxd2820r_config *config,
|
const struct cxd2820r_config *config,
|
||||||
struct i2c_adapter *i2c,
|
struct i2c_adapter *i2c
|
||||||
struct dvb_frontend *fe
|
|
||||||
);
|
);
|
||||||
#else
|
#else
|
||||||
static inline struct dvb_frontend *cxd2820r_attach(
|
static inline struct dvb_frontend *cxd2820r_attach(
|
||||||
const struct cxd2820r_config *config,
|
const struct cxd2820r_config *config,
|
||||||
struct i2c_adapter *i2c,
|
struct i2c_adapter *i2c
|
||||||
struct dvb_frontend *fe
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||||
|
|
|
@ -482,11 +482,20 @@ static enum dvbfe_search cxd2820r_search(struct dvb_frontend *fe)
|
||||||
|
|
||||||
/* switch between DVB-T and DVB-T2 when tune fails */
|
/* switch between DVB-T and DVB-T2 when tune fails */
|
||||||
if (priv->last_tune_failed) {
|
if (priv->last_tune_failed) {
|
||||||
if (priv->delivery_system == SYS_DVBT)
|
if (priv->delivery_system == SYS_DVBT) {
|
||||||
|
ret = cxd2820r_sleep_t(fe);
|
||||||
|
if (ret)
|
||||||
|
goto error;
|
||||||
|
|
||||||
c->delivery_system = SYS_DVBT2;
|
c->delivery_system = SYS_DVBT2;
|
||||||
else if (priv->delivery_system == SYS_DVBT2)
|
} else if (priv->delivery_system == SYS_DVBT2) {
|
||||||
|
ret = cxd2820r_sleep_t2(fe);
|
||||||
|
if (ret)
|
||||||
|
goto error;
|
||||||
|
|
||||||
c->delivery_system = SYS_DVBT;
|
c->delivery_system = SYS_DVBT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* set frontend */
|
/* set frontend */
|
||||||
ret = cxd2820r_set_frontend(fe);
|
ret = cxd2820r_set_frontend(fe);
|
||||||
|
@ -562,7 +571,7 @@ static const struct dvb_frontend_ops cxd2820r_ops = {
|
||||||
.delsys = { SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A },
|
.delsys = { SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A },
|
||||||
/* default: DVB-T/T2 */
|
/* default: DVB-T/T2 */
|
||||||
.info = {
|
.info = {
|
||||||
.name = "Sony CXD2820R (DVB-T/T2)",
|
.name = "Sony CXD2820R",
|
||||||
|
|
||||||
.caps = FE_CAN_FEC_1_2 |
|
.caps = FE_CAN_FEC_1_2 |
|
||||||
FE_CAN_FEC_2_3 |
|
FE_CAN_FEC_2_3 |
|
||||||
|
@ -572,7 +581,9 @@ static const struct dvb_frontend_ops cxd2820r_ops = {
|
||||||
FE_CAN_FEC_AUTO |
|
FE_CAN_FEC_AUTO |
|
||||||
FE_CAN_QPSK |
|
FE_CAN_QPSK |
|
||||||
FE_CAN_QAM_16 |
|
FE_CAN_QAM_16 |
|
||||||
|
FE_CAN_QAM_32 |
|
||||||
FE_CAN_QAM_64 |
|
FE_CAN_QAM_64 |
|
||||||
|
FE_CAN_QAM_128 |
|
||||||
FE_CAN_QAM_256 |
|
FE_CAN_QAM_256 |
|
||||||
FE_CAN_QAM_AUTO |
|
FE_CAN_QAM_AUTO |
|
||||||
FE_CAN_TRANSMISSION_MODE_AUTO |
|
FE_CAN_TRANSMISSION_MODE_AUTO |
|
||||||
|
@ -602,8 +613,7 @@ static const struct dvb_frontend_ops cxd2820r_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dvb_frontend *cxd2820r_attach(const struct cxd2820r_config *cfg,
|
struct dvb_frontend *cxd2820r_attach(const struct cxd2820r_config *cfg,
|
||||||
struct i2c_adapter *i2c,
|
struct i2c_adapter *i2c)
|
||||||
struct dvb_frontend *fe)
|
|
||||||
{
|
{
|
||||||
struct cxd2820r_priv *priv = NULL;
|
struct cxd2820r_priv *priv = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -922,7 +922,9 @@ static int __devexit atmel_isi_remove(struct platform_device *pdev)
|
||||||
isi->fb_descriptors_phys);
|
isi->fb_descriptors_phys);
|
||||||
|
|
||||||
iounmap(isi->regs);
|
iounmap(isi->regs);
|
||||||
|
clk_unprepare(isi->mck);
|
||||||
clk_put(isi->mck);
|
clk_put(isi->mck);
|
||||||
|
clk_unprepare(isi->pclk);
|
||||||
clk_put(isi->pclk);
|
clk_put(isi->pclk);
|
||||||
kfree(isi);
|
kfree(isi);
|
||||||
|
|
||||||
|
@ -955,6 +957,10 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
|
||||||
if (IS_ERR(pclk))
|
if (IS_ERR(pclk))
|
||||||
return PTR_ERR(pclk);
|
return PTR_ERR(pclk);
|
||||||
|
|
||||||
|
ret = clk_prepare(pclk);
|
||||||
|
if (ret)
|
||||||
|
goto err_clk_prepare_pclk;
|
||||||
|
|
||||||
isi = kzalloc(sizeof(struct atmel_isi), GFP_KERNEL);
|
isi = kzalloc(sizeof(struct atmel_isi), GFP_KERNEL);
|
||||||
if (!isi) {
|
if (!isi) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
@ -978,6 +984,10 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
|
||||||
goto err_clk_get;
|
goto err_clk_get;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = clk_prepare(isi->mck);
|
||||||
|
if (ret)
|
||||||
|
goto err_clk_prepare_mck;
|
||||||
|
|
||||||
/* Set ISI_MCK's frequency, it should be faster than pixel clock */
|
/* Set ISI_MCK's frequency, it should be faster than pixel clock */
|
||||||
ret = clk_set_rate(isi->mck, pdata->mck_hz);
|
ret = clk_set_rate(isi->mck, pdata->mck_hz);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -1059,10 +1069,14 @@ err_alloc_ctx:
|
||||||
isi->fb_descriptors_phys);
|
isi->fb_descriptors_phys);
|
||||||
err_alloc_descriptors:
|
err_alloc_descriptors:
|
||||||
err_set_mck_rate:
|
err_set_mck_rate:
|
||||||
|
clk_unprepare(isi->mck);
|
||||||
|
err_clk_prepare_mck:
|
||||||
clk_put(isi->mck);
|
clk_put(isi->mck);
|
||||||
err_clk_get:
|
err_clk_get:
|
||||||
kfree(isi);
|
kfree(isi);
|
||||||
err_alloc_isi:
|
err_alloc_isi:
|
||||||
|
clk_unprepare(pclk);
|
||||||
|
err_clk_prepare_pclk:
|
||||||
clk_put(pclk);
|
clk_put(pclk);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -853,8 +853,7 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||||
case EM28174_BOARD_PCTV_290E:
|
case EM28174_BOARD_PCTV_290E:
|
||||||
dvb->fe[0] = dvb_attach(cxd2820r_attach,
|
dvb->fe[0] = dvb_attach(cxd2820r_attach,
|
||||||
&em28xx_cxd2820r_config,
|
&em28xx_cxd2820r_config,
|
||||||
&dev->i2c_adap,
|
&dev->i2c_adap);
|
||||||
NULL);
|
|
||||||
if (dvb->fe[0]) {
|
if (dvb->fe[0]) {
|
||||||
/* FE 0 attach tuner */
|
/* FE 0 attach tuner */
|
||||||
if (!dvb_attach(tda18271_attach,
|
if (!dvb_attach(tda18271_attach,
|
||||||
|
|
Loading…
Reference in a new issue