You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (70 commits) V4L/DVB (7900): pvrusb: Fix Kconfig if DVB=m V4L_core=y V4L/DVB (7899): Fixes a few remaining Kbuild issues at common/tuners V4L/DVB (7898): Fix VIDEO_MEDIA Kconfig logic V4L/DVB (7895): tveeprom: update Hauppauge analog audio and video decoders V4L/DVB (7893): xc5000: bug-fix: allow multiple devices in a single system V4L/DVB (7891): cx18/ivtv: fix open() kernel oops V4L/DVB (7890): cx18: removed bogus and confusing conditional V4L/DVB (7889): cx18: improve HVR-1600 detection. V4L/DVB (7888): cx18: minor card definition updates. V4L/DVB (7887): cx18: fix Compro H900 analog support. V4L/DVB (7881): saa7134: fixed a compile warning in saa7134-core.c V4L/DVB (7880): saa7134: remove explicit GPIO initialization V4L/DVB(7879): Adding cx18 Support for mxl5005s V4L/DVB(7878): mxl55005s: Makefile and Kconfig additions V4L/DVB(7877): mxl5005s: Ensure debug is off V4L/DVB(7876): mxl5005s: Remove incorrect copyright holders V4L/DVB(7875): mxl5005s: Remove redundant functions V4L/DVB(7874): mxl5005s: Fix function statics V4L/DVB(7873): mxl5005s: Fix header includes. V4L/DVB(7872): mxl5005s: checkpatch.pl compliance ...
This commit is contained in:
@@ -89,8 +89,7 @@ config DVB_CORE
|
||||
|
||||
config VIDEO_MEDIA
|
||||
tristate
|
||||
default DVB_CORE || VIDEO_DEV
|
||||
depends on DVB_CORE || VIDEO_DEV
|
||||
default (DVB_CORE && (VIDEO_DEV = n)) || (VIDEO_DEV && (DVB_CORE = n)) || (DVB_CORE && VIDEO_DEV)
|
||||
|
||||
comment "Multimedia drivers"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
config MEDIA_ATTACH
|
||||
bool "Load and attach frontend and tuner driver modules as needed"
|
||||
depends on DVB_CORE
|
||||
depends on VIDEO_MEDIA
|
||||
depends on MODULES
|
||||
help
|
||||
Remove the static dependency of DVB card drivers on all
|
||||
@@ -19,10 +19,10 @@ config MEDIA_ATTACH
|
||||
|
||||
config MEDIA_TUNER
|
||||
tristate
|
||||
default DVB_CORE || VIDEO_DEV
|
||||
depends on DVB_CORE || VIDEO_DEV
|
||||
select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMIZE
|
||||
select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMIZE
|
||||
default VIDEO_MEDIA && I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG
|
||||
select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG
|
||||
select MEDIA_TUNER_MT20XX if !MEDIA_TUNER_CUSTOMIZE
|
||||
select MEDIA_TUNER_TDA8290 if !MEDIA_TUNER_CUSTOMIZE
|
||||
select MEDIA_TUNER_TEA5761 if !MEDIA_TUNER_CUSTOMIZE
|
||||
@@ -46,7 +46,7 @@ if MEDIA_TUNER_CUSTOMIZE
|
||||
|
||||
config MEDIA_TUNER_SIMPLE
|
||||
tristate "Simple tuner support"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
select MEDIA_TUNER_TDA9887
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
help
|
||||
@@ -54,7 +54,7 @@ config MEDIA_TUNER_SIMPLE
|
||||
|
||||
config MEDIA_TUNER_TDA8290
|
||||
tristate "TDA 8290/8295 + 8275(a)/18271 tuner combo"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
select MEDIA_TUNER_TDA827X
|
||||
select MEDIA_TUNER_TDA18271
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
@@ -63,21 +63,21 @@ config MEDIA_TUNER_TDA8290
|
||||
|
||||
config MEDIA_TUNER_TDA827X
|
||||
tristate "Philips TDA827X silicon tuner"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A DVB-T silicon tuner module. Say Y when you want to support this tuner.
|
||||
|
||||
config MEDIA_TUNER_TDA18271
|
||||
tristate "NXP TDA18271 silicon tuner"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A silicon tuner module. Say Y when you want to support this tuner.
|
||||
|
||||
config MEDIA_TUNER_TDA9887
|
||||
tristate "TDA 9885/6/7 analog IF demodulator"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
help
|
||||
Say Y here to include support for Philips TDA9885/6/7
|
||||
@@ -85,67 +85,79 @@ config MEDIA_TUNER_TDA9887
|
||||
|
||||
config MEDIA_TUNER_TEA5761
|
||||
tristate "TEA 5761 radio tuner (EXPERIMENTAL)"
|
||||
depends on I2C && EXPERIMENTAL
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
depends on EXPERIMENTAL
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
help
|
||||
Say Y here to include support for the Philips TEA5761 radio tuner.
|
||||
|
||||
config MEDIA_TUNER_TEA5767
|
||||
tristate "TEA 5767 radio tuner"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
help
|
||||
Say Y here to include support for the Philips TEA5767 radio tuner.
|
||||
|
||||
config MEDIA_TUNER_MT20XX
|
||||
tristate "Microtune 2032 / 2050 tuners"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
help
|
||||
Say Y here to include support for the MT2032 / MT2050 tuner.
|
||||
|
||||
config MEDIA_TUNER_MT2060
|
||||
tristate "Microtune MT2060 silicon IF tuner"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon IF tuner MT2060 from Microtune.
|
||||
|
||||
config MEDIA_TUNER_MT2266
|
||||
tristate "Microtune MT2266 silicon tuner"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon baseband tuner MT2266 from Microtune.
|
||||
|
||||
config MEDIA_TUNER_MT2131
|
||||
tristate "Microtune MT2131 silicon tuner"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon baseband tuner MT2131 from Microtune.
|
||||
|
||||
config MEDIA_TUNER_QT1010
|
||||
tristate "Quantek QT1010 silicon tuner"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon tuner QT1010 from Quantek.
|
||||
|
||||
config MEDIA_TUNER_XC2028
|
||||
tristate "XCeive xc2028/xc3028 tuners"
|
||||
depends on I2C && FW_LOADER
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
depends on HOTPLUG
|
||||
select FW_LOADER
|
||||
default m if MEDIA_TUNER_CUSTOMIZE
|
||||
help
|
||||
Say Y here to include support for the xc2028/xc3028 tuners.
|
||||
|
||||
config MEDIA_TUNER_XC5000
|
||||
tristate "Xceive XC5000 silicon tuner"
|
||||
depends on I2C
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
depends on HOTPLUG
|
||||
select FW_LOADER
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon tuner XC5000 from Xceive.
|
||||
This device is only used inside a SiP called togther with a
|
||||
demodulator for now.
|
||||
|
||||
config MEDIA_TUNER_MXL5005S
|
||||
tristate "MaxLinear MSL5005S silicon tuner"
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon tuner MXL5005S from MaxLinear.
|
||||
|
||||
endif # MEDIA_TUNER_CUSTOMIZE
|
||||
|
||||
@@ -20,6 +20,7 @@ obj-$(CONFIG_MEDIA_TUNER_MT2060) += mt2060.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2266) += mt2266.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_QT1010) += qt1010.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2131) += mt2131.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MXL5005S) += mxl5005s.o
|
||||
|
||||
EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
|
||||
EXTRA_CFLAGS += -Idrivers/media/dvb/frontends
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
MaxLinear MXL5005S VSB/QAM/DVBT tuner driver
|
||||
|
||||
Copyright (C) 2008 MaxLinear
|
||||
Copyright (C) 2008 Steven Toth <stoth@hauppauge.com>
|
||||
|
||||
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 __MXL5005S_H
|
||||
#define __MXL5005S_H
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include "dvb_frontend.h"
|
||||
|
||||
struct mxl5005s_config {
|
||||
|
||||
/* 7 bit i2c address */
|
||||
u8 i2c_address;
|
||||
|
||||
#define IF_FREQ_4570000HZ 4570000
|
||||
#define IF_FREQ_4571429HZ 4571429
|
||||
#define IF_FREQ_5380000HZ 5380000
|
||||
#define IF_FREQ_36000000HZ 36000000
|
||||
#define IF_FREQ_36125000HZ 36125000
|
||||
#define IF_FREQ_36166667HZ 36166667
|
||||
#define IF_FREQ_44000000HZ 44000000
|
||||
u32 if_freq;
|
||||
|
||||
#define CRYSTAL_FREQ_4000000HZ 4000000
|
||||
#define CRYSTAL_FREQ_16000000HZ 16000000
|
||||
#define CRYSTAL_FREQ_25000000HZ 25000000
|
||||
#define CRYSTAL_FREQ_28800000HZ 28800000
|
||||
u32 xtal_freq;
|
||||
|
||||
#define MXL_DUAL_AGC 0
|
||||
#define MXL_SINGLE_AGC 1
|
||||
u8 agc_mode;
|
||||
|
||||
#define MXL_TF_DEFAULT 0
|
||||
#define MXL_TF_OFF 1
|
||||
#define MXL_TF_C 2
|
||||
#define MXL_TF_C_H 3
|
||||
#define MXL_TF_D 4
|
||||
#define MXL_TF_D_L 5
|
||||
#define MXL_TF_E 6
|
||||
#define MXL_TF_F 7
|
||||
#define MXL_TF_E_2 8
|
||||
#define MXL_TF_E_NA 9
|
||||
#define MXL_TF_G 10
|
||||
u8 tracking_filter;
|
||||
|
||||
#define MXL_RSSI_DISABLE 0
|
||||
#define MXL_RSSI_ENABLE 1
|
||||
u8 rssi_enable;
|
||||
|
||||
#define MXL_CAP_SEL_DISABLE 0
|
||||
#define MXL_CAP_SEL_ENABLE 1
|
||||
u8 cap_select;
|
||||
|
||||
#define MXL_DIV_OUT_1 0
|
||||
#define MXL_DIV_OUT_4 1
|
||||
u8 div_out;
|
||||
|
||||
#define MXL_CLOCK_OUT_DISABLE 0
|
||||
#define MXL_CLOCK_OUT_ENABLE 1
|
||||
u8 clock_out;
|
||||
|
||||
#define MXL5005S_IF_OUTPUT_LOAD_200_OHM 200
|
||||
#define MXL5005S_IF_OUTPUT_LOAD_300_OHM 300
|
||||
u32 output_load;
|
||||
|
||||
#define MXL5005S_TOP_5P5 55
|
||||
#define MXL5005S_TOP_7P2 72
|
||||
#define MXL5005S_TOP_9P2 92
|
||||
#define MXL5005S_TOP_11P0 110
|
||||
#define MXL5005S_TOP_12P9 129
|
||||
#define MXL5005S_TOP_14P7 147
|
||||
#define MXL5005S_TOP_16P8 168
|
||||
#define MXL5005S_TOP_19P4 194
|
||||
#define MXL5005S_TOP_21P2 212
|
||||
#define MXL5005S_TOP_23P2 232
|
||||
#define MXL5005S_TOP_25P2 252
|
||||
#define MXL5005S_TOP_27P1 271
|
||||
#define MXL5005S_TOP_29P2 292
|
||||
#define MXL5005S_TOP_31P7 317
|
||||
#define MXL5005S_TOP_34P9 349
|
||||
u32 top;
|
||||
|
||||
#define MXL_ANALOG_MODE 0
|
||||
#define MXL_DIGITAL_MODE 1
|
||||
u8 mod_mode;
|
||||
|
||||
#define MXL_ZERO_IF 0
|
||||
#define MXL_LOW_IF 1
|
||||
u8 if_mode;
|
||||
|
||||
/* Stuff I don't know what to do with */
|
||||
u8 AgcMasterByte;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_MEDIA_TUNER_MXL5005S) || \
|
||||
(defined(CONFIG_MEDIA_TUNER_MXL5005S_MODULE) && defined(MODULE))
|
||||
extern struct dvb_frontend *mxl5005s_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct mxl5005s_config *config);
|
||||
#else
|
||||
static inline struct dvb_frontend *mxl5005s_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct mxl5005s_config *config)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
#endif /* CONFIG_DVB_TUNER_MXL5005S */
|
||||
|
||||
#endif /* __MXL5005S_H */
|
||||
|
||||
@@ -227,9 +227,8 @@ int tda18271_charge_pump_source(struct dvb_frontend *fe,
|
||||
|
||||
regs[r_cp] &= ~0x20;
|
||||
regs[r_cp] |= ((force & 1) << 5);
|
||||
tda18271_write_regs(fe, r_cp, 1);
|
||||
|
||||
return 0;
|
||||
return tda18271_write_regs(fe, r_cp, 1);
|
||||
}
|
||||
|
||||
int tda18271_init_regs(struct dvb_frontend *fe)
|
||||
@@ -487,16 +486,15 @@ int tda18271_set_standby_mode(struct dvb_frontend *fe,
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
|
||||
tda_dbg("sm = %d, sm_lt = %d, sm_xt = %d\n", sm, sm_lt, sm_xt);
|
||||
if (tda18271_debug & DBG_ADV)
|
||||
tda_dbg("sm = %d, sm_lt = %d, sm_xt = %d\n", sm, sm_lt, sm_xt);
|
||||
|
||||
regs[R_EP3] &= ~0xe0; /* clear sm, sm_lt, sm_xt */
|
||||
regs[R_EP3] |= sm ? (1 << 7) : 0 |
|
||||
sm_lt ? (1 << 6) : 0 |
|
||||
sm_xt ? (1 << 5) : 0;
|
||||
|
||||
tda18271_write_regs(fe, R_EP3, 1);
|
||||
|
||||
return 0;
|
||||
return tda18271_write_regs(fe, R_EP3, 1);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
@@ -510,7 +508,7 @@ int tda18271_calc_main_pll(struct dvb_frontend *fe, u32 freq)
|
||||
u32 div;
|
||||
|
||||
int ret = tda18271_lookup_pll_map(fe, MAIN_PLL, &freq, &pd, &d);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_MPD] = (0x77 & pd);
|
||||
@@ -542,7 +540,7 @@ int tda18271_calc_cal_pll(struct dvb_frontend *fe, u32 freq)
|
||||
u32 div;
|
||||
|
||||
int ret = tda18271_lookup_pll_map(fe, CAL_PLL, &freq, &pd, &d);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_CPD] = pd;
|
||||
@@ -566,7 +564,7 @@ int tda18271_calc_bp_filter(struct dvb_frontend *fe, u32 *freq)
|
||||
u8 val;
|
||||
|
||||
int ret = tda18271_lookup_map(fe, BP_FILTER, freq, &val);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EP1] &= ~0x07; /* clear bp filter bits */
|
||||
@@ -583,7 +581,7 @@ int tda18271_calc_km(struct dvb_frontend *fe, u32 *freq)
|
||||
u8 val;
|
||||
|
||||
int ret = tda18271_lookup_map(fe, RF_CAL_KMCO, freq, &val);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EB13] &= ~0x7c; /* clear k & m bits */
|
||||
@@ -600,7 +598,7 @@ int tda18271_calc_rf_band(struct dvb_frontend *fe, u32 *freq)
|
||||
u8 val;
|
||||
|
||||
int ret = tda18271_lookup_map(fe, RF_BAND, freq, &val);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EP2] &= ~0xe0; /* clear rf band bits */
|
||||
@@ -617,7 +615,7 @@ int tda18271_calc_gain_taper(struct dvb_frontend *fe, u32 *freq)
|
||||
u8 val;
|
||||
|
||||
int ret = tda18271_lookup_map(fe, GAIN_TAPER, freq, &val);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EP2] &= ~0x1f; /* clear gain taper bits */
|
||||
@@ -634,7 +632,7 @@ int tda18271_calc_ir_measure(struct dvb_frontend *fe, u32 *freq)
|
||||
u8 val;
|
||||
|
||||
int ret = tda18271_lookup_map(fe, IR_MEASURE, freq, &val);
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EP5] &= ~0x07;
|
||||
|
||||
@@ -51,6 +51,7 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int ret;
|
||||
u32 N;
|
||||
|
||||
/* update TV broadcast parameters */
|
||||
@@ -85,7 +86,9 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
/* update rf top / if top */
|
||||
regs[R_EB22] = 0x00;
|
||||
regs[R_EB22] |= map->rfagc_top;
|
||||
tda18271_write_regs(fe, R_EB22, 1);
|
||||
ret = tda18271_write_regs(fe, R_EB22, 1);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
@@ -121,7 +124,9 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
/* agc1 has priority on agc2 */
|
||||
regs[R_EB1] &= ~0x01;
|
||||
|
||||
tda18271_write_regs(fe, R_EB1, 1);
|
||||
ret = tda18271_write_regs(fe, R_EB1, 1);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
@@ -141,7 +146,9 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
break;
|
||||
}
|
||||
|
||||
tda18271_write_regs(fe, R_TM, 7);
|
||||
ret = tda18271_write_regs(fe, R_TM, 7);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* force charge pump source */
|
||||
charge_pump_source(fe, 1);
|
||||
@@ -158,9 +165,9 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
|
||||
regs[R_EP3] &= ~0x04;
|
||||
else
|
||||
regs[R_EP3] |= 0x04;
|
||||
tda18271_write_regs(fe, R_EP3, 1);
|
||||
|
||||
return 0;
|
||||
ret = tda18271_write_regs(fe, R_EP3, 1);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_read_thermometer(struct dvb_frontend *fe)
|
||||
@@ -213,11 +220,13 @@ static int tda18271c2_rf_tracking_filters_correction(struct dvb_frontend *fe,
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
struct tda18271_rf_tracking_filter_cal *map = priv->rf_cal_state;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int tm_current, rfcal_comp, approx, i;
|
||||
int tm_current, rfcal_comp, approx, i, ret;
|
||||
u8 dc_over_dt, rf_tab;
|
||||
|
||||
/* power up */
|
||||
tda18271_set_standby_mode(fe, 0, 0, 0);
|
||||
ret = tda18271_set_standby_mode(fe, 0, 0, 0);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* read die current temperature */
|
||||
tm_current = tda18271_read_thermometer(fe);
|
||||
@@ -228,8 +237,8 @@ static int tda18271c2_rf_tracking_filters_correction(struct dvb_frontend *fe,
|
||||
rf_tab = regs[R_EB14];
|
||||
|
||||
i = tda18271_lookup_rf_band(fe, &freq, NULL);
|
||||
if (i < 0)
|
||||
return -EINVAL;
|
||||
if (tda_fail(i))
|
||||
return i;
|
||||
|
||||
if ((0 == map[i].rf3) || (freq / 1000 < map[i].rf2)) {
|
||||
approx = map[i].rf_a1 *
|
||||
@@ -250,35 +259,42 @@ static int tda18271c2_rf_tracking_filters_correction(struct dvb_frontend *fe,
|
||||
rfcal_comp = dc_over_dt * (tm_current - priv->tm_rfcal);
|
||||
|
||||
regs[R_EB14] = approx + rfcal_comp;
|
||||
tda18271_write_regs(fe, R_EB14, 1);
|
||||
|
||||
return 0;
|
||||
ret = tda18271_write_regs(fe, R_EB14, 1);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_por(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int ret;
|
||||
|
||||
/* power up detector 1 */
|
||||
regs[R_EB12] &= ~0x20;
|
||||
tda18271_write_regs(fe, R_EB12, 1);
|
||||
ret = tda18271_write_regs(fe, R_EB12, 1);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EB18] &= ~0x80; /* turn agc1 loop on */
|
||||
regs[R_EB18] &= ~0x03; /* set agc1_gain to 6 dB */
|
||||
tda18271_write_regs(fe, R_EB18, 1);
|
||||
ret = tda18271_write_regs(fe, R_EB18, 1);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EB21] |= 0x03; /* set agc2_gain to -6 dB */
|
||||
|
||||
/* POR mode */
|
||||
tda18271_set_standby_mode(fe, 1, 0, 0);
|
||||
ret = tda18271_set_standby_mode(fe, 1, 0, 0);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* disable 1.5 MHz low pass filter */
|
||||
regs[R_EB23] &= ~0x04; /* forcelp_fc2_en = 0 */
|
||||
regs[R_EB23] &= ~0x02; /* XXX: lp_fc[2] = 0 */
|
||||
tda18271_write_regs(fe, R_EB21, 3);
|
||||
|
||||
return 0;
|
||||
ret = tda18271_write_regs(fe, R_EB21, 3);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_calibrate_rf(struct dvb_frontend *fe, u32 freq)
|
||||
@@ -389,7 +405,7 @@ static int tda18271_powerscan(struct dvb_frontend *fe,
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int sgn, bcal, count, wait;
|
||||
int sgn, bcal, count, wait, ret;
|
||||
u8 cid_target;
|
||||
u16 count_limit;
|
||||
u32 freq;
|
||||
@@ -421,7 +437,9 @@ static int tda18271_powerscan(struct dvb_frontend *fe,
|
||||
tda18271_write_regs(fe, R_EP2, 1);
|
||||
|
||||
/* read power detection info, stored in EB10 */
|
||||
tda18271_read_extended(fe);
|
||||
ret = tda18271_read_extended(fe);
|
||||
if (tda_fail(ret))
|
||||
return ret;
|
||||
|
||||
/* algorithm initialization */
|
||||
sgn = 1;
|
||||
@@ -447,7 +465,9 @@ static int tda18271_powerscan(struct dvb_frontend *fe,
|
||||
tda18271_write_regs(fe, R_EP2, 1);
|
||||
|
||||
/* read power detection info, stored in EB10 */
|
||||
tda18271_read_extended(fe);
|
||||
ret = tda18271_read_extended(fe);
|
||||
if (tda_fail(ret))
|
||||
return ret;
|
||||
|
||||
count += 200;
|
||||
|
||||
@@ -478,6 +498,7 @@ static int tda18271_powerscan_init(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int ret;
|
||||
|
||||
/* set standard to digital */
|
||||
regs[R_EP3] &= ~0x1f; /* clear std bits */
|
||||
@@ -489,10 +510,14 @@ static int tda18271_powerscan_init(struct dvb_frontend *fe)
|
||||
/* update IF output level & IF notch frequency */
|
||||
regs[R_EP4] &= ~0x1c; /* clear if level bits */
|
||||
|
||||
tda18271_write_regs(fe, R_EP3, 2);
|
||||
ret = tda18271_write_regs(fe, R_EP3, 2);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EB18] &= ~0x03; /* set agc1_gain to 6 dB */
|
||||
tda18271_write_regs(fe, R_EB18, 1);
|
||||
ret = tda18271_write_regs(fe, R_EB18, 1);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
regs[R_EB21] &= ~0x03; /* set agc2_gain to -15 dB */
|
||||
|
||||
@@ -500,9 +525,9 @@ static int tda18271_powerscan_init(struct dvb_frontend *fe)
|
||||
regs[R_EB23] |= 0x04; /* forcelp_fc2_en = 1 */
|
||||
regs[R_EB23] |= 0x02; /* lp_fc[2] = 1 */
|
||||
|
||||
tda18271_write_regs(fe, R_EB21, 3);
|
||||
|
||||
return 0;
|
||||
ret = tda18271_write_regs(fe, R_EB21, 3);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq)
|
||||
@@ -521,7 +546,7 @@ static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq)
|
||||
|
||||
i = tda18271_lookup_rf_band(fe, &freq, NULL);
|
||||
|
||||
if (i < 0)
|
||||
if (tda_fail(i))
|
||||
return i;
|
||||
|
||||
rf_default[RF1] = 1000 * map[i].rf1_def;
|
||||
@@ -535,6 +560,8 @@ static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq)
|
||||
|
||||
/* look for optimized calibration frequency */
|
||||
bcal = tda18271_powerscan(fe, &rf_default[rf], &rf_freq[rf]);
|
||||
if (tda_fail(bcal))
|
||||
return bcal;
|
||||
|
||||
tda18271_calc_rf_cal(fe, &rf_freq[rf]);
|
||||
prog_tab[rf] = regs[R_EB14];
|
||||
@@ -575,22 +602,29 @@ static int tda18271_calc_rf_filter_curve(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
tda_info("tda18271: performing RF tracking filter calibration\n");
|
||||
|
||||
/* wait for die temperature stabilization */
|
||||
msleep(200);
|
||||
|
||||
tda18271_powerscan_init(fe);
|
||||
ret = tda18271_powerscan_init(fe);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* rf band calibration */
|
||||
for (i = 0; priv->rf_cal_state[i].rfmax != 0; i++)
|
||||
for (i = 0; priv->rf_cal_state[i].rfmax != 0; i++) {
|
||||
ret =
|
||||
tda18271_rf_tracking_filters_init(fe, 1000 *
|
||||
priv->rf_cal_state[i].rfmax);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
priv->tm_rfcal = tda18271_read_thermometer(fe);
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@@ -599,6 +633,7 @@ static int tda18271c2_rf_cal_init(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int ret;
|
||||
|
||||
/* test RF_CAL_OK to see if we need init */
|
||||
if ((regs[R_EP1] & 0x10) == 0)
|
||||
@@ -607,15 +642,22 @@ static int tda18271c2_rf_cal_init(struct dvb_frontend *fe)
|
||||
if (priv->cal_initialized)
|
||||
return 0;
|
||||
|
||||
tda18271_calc_rf_filter_curve(fe);
|
||||
ret = tda18271_calc_rf_filter_curve(fe);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
tda18271_por(fe);
|
||||
ret = tda18271_por(fe);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
tda_info("tda18271: RF tracking filter calibration complete\n");
|
||||
|
||||
priv->cal_initialized = true;
|
||||
|
||||
return 0;
|
||||
goto end;
|
||||
fail:
|
||||
tda_info("tda18271: RF tracking filter calibration failed!\n");
|
||||
end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271c1_rf_tracking_filter_calibration(struct dvb_frontend *fe,
|
||||
@@ -623,6 +665,7 @@ static int tda18271c1_rf_tracking_filter_calibration(struct dvb_frontend *fe,
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int ret;
|
||||
u32 N = 0;
|
||||
|
||||
/* calculate bp filter */
|
||||
@@ -671,7 +714,10 @@ static int tda18271c1_rf_tracking_filter_calibration(struct dvb_frontend *fe,
|
||||
|
||||
tda18271_calc_main_pll(fe, N);
|
||||
|
||||
tda18271_write_regs(fe, R_EP3, 11);
|
||||
ret = tda18271_write_regs(fe, R_EP3, 11);
|
||||
if (tda_fail(ret))
|
||||
return ret;
|
||||
|
||||
msleep(5); /* RF tracking filter calibration initialization */
|
||||
|
||||
/* search for K,M,CO for RF calibration */
|
||||
@@ -719,45 +765,56 @@ static int tda18271_ir_cal_init(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
unsigned char *regs = priv->tda18271_regs;
|
||||
int ret;
|
||||
|
||||
tda18271_read_regs(fe);
|
||||
ret = tda18271_read_regs(fe);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* test IR_CAL_OK to see if we need init */
|
||||
if ((regs[R_EP1] & 0x08) == 0)
|
||||
tda18271_init_regs(fe);
|
||||
|
||||
return 0;
|
||||
ret = tda18271_init_regs(fe);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_init(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
/* power up */
|
||||
tda18271_set_standby_mode(fe, 0, 0, 0);
|
||||
ret = tda18271_set_standby_mode(fe, 0, 0, 0);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
/* initialization */
|
||||
tda18271_ir_cal_init(fe);
|
||||
ret = tda18271_ir_cal_init(fe);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
if (priv->id == TDA18271HDC2)
|
||||
tda18271c2_rf_cal_init(fe);
|
||||
|
||||
fail:
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_tune(struct dvb_frontend *fe,
|
||||
struct tda18271_std_map_item *map, u32 freq, u32 bw)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
int ret;
|
||||
|
||||
tda_dbg("freq = %d, ifc = %d, bw = %d, agc_mode = %d, std = %d\n",
|
||||
freq, map->if_freq, bw, map->agc_mode, map->std);
|
||||
|
||||
tda18271_init(fe);
|
||||
ret = tda18271_init(fe);
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
@@ -769,11 +826,11 @@ static int tda18271_tune(struct dvb_frontend *fe,
|
||||
tda18271c2_rf_tracking_filters_correction(fe, freq);
|
||||
break;
|
||||
}
|
||||
tda18271_channel_configuration(fe, map, freq, bw);
|
||||
ret = tda18271_channel_configuration(fe, map, freq, bw);
|
||||
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@@ -837,7 +894,7 @@ static int tda18271_set_params(struct dvb_frontend *fe,
|
||||
|
||||
ret = tda18271_tune(fe, map, freq, bw);
|
||||
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
priv->frequency = freq;
|
||||
@@ -893,7 +950,7 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,
|
||||
|
||||
ret = tda18271_tune(fe, map, freq, 0);
|
||||
|
||||
if (ret < 0)
|
||||
if (tda_fail(ret))
|
||||
goto fail;
|
||||
|
||||
priv->frequency = freq;
|
||||
@@ -905,16 +962,17 @@ fail:
|
||||
static int tda18271_sleep(struct dvb_frontend *fe)
|
||||
{
|
||||
struct tda18271_priv *priv = fe->tuner_priv;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
/* standby mode w/ slave tuner output
|
||||
* & loop thru & xtal oscillator on */
|
||||
tda18271_set_standby_mode(fe, 1, 0, 0);
|
||||
ret = tda18271_set_standby_mode(fe, 1, 0, 0);
|
||||
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tda18271_release(struct dvb_frontend *fe)
|
||||
@@ -1095,10 +1153,10 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
|
||||
if (cfg)
|
||||
priv->small_i2c = cfg->small_i2c;
|
||||
|
||||
if (tda18271_get_id(fe) < 0)
|
||||
if (tda_fail(tda18271_get_id(fe)))
|
||||
goto fail;
|
||||
|
||||
if (tda18271_assign_map_layout(fe) < 0)
|
||||
if (tda_fail(tda18271_assign_map_layout(fe)))
|
||||
goto fail;
|
||||
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
@@ -153,6 +153,15 @@ extern int tda18271_debug;
|
||||
#define tda_reg(fmt, arg...) dprintk(KERN_DEBUG, DBG_REG, fmt, ##arg)
|
||||
#define tda_cal(fmt, arg...) dprintk(KERN_DEBUG, DBG_CAL, fmt, ##arg)
|
||||
|
||||
#define tda_fail(ret) \
|
||||
({ \
|
||||
int __ret; \
|
||||
__ret = (ret < 0); \
|
||||
if (__ret) \
|
||||
tda_printk(KERN_ERR, "error %d on line %d\n", ret, __LINE__);\
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
enum tda18271_map_type {
|
||||
|
||||
@@ -373,14 +373,14 @@ int tea5767_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr)
|
||||
|
||||
if ((rc = tuner_i2c_xfer_recv(&i2c, buffer, 7))< 5) {
|
||||
printk(KERN_WARNING "It is not a TEA5767. Received %i bytes.\n", rc);
|
||||
return EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* If all bytes are the same then it's a TV tuner and not a tea5767 */
|
||||
if (buffer[0] == buffer[1] && buffer[0] == buffer[2] &&
|
||||
buffer[0] == buffer[3] && buffer[0] == buffer[4]) {
|
||||
printk(KERN_WARNING "All bytes are equal. It is not a TEA5767\n");
|
||||
return EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Status bytes:
|
||||
@@ -390,7 +390,7 @@ int tea5767_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr)
|
||||
*/
|
||||
if (((buffer[3] & 0x0f) != 0x00) || (buffer[4] != 0x00)) {
|
||||
printk(KERN_WARNING "Chip ID is not zero. It is not a TEA5767\n");
|
||||
return EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ static void xc5000_TunerReset(struct dvb_frontend *fe)
|
||||
dprintk(1, "%s()\n", __func__);
|
||||
|
||||
if (priv->cfg->tuner_callback) {
|
||||
ret = priv->cfg->tuner_callback(priv->cfg->priv,
|
||||
ret = priv->cfg->tuner_callback(priv->devptr,
|
||||
XC5000_TUNER_RESET, 0);
|
||||
if (ret)
|
||||
printk(KERN_ERR "xc5000: reset failed\n");
|
||||
@@ -900,9 +900,9 @@ static const struct dvb_tuner_ops xc5000_tuner_ops = {
|
||||
.get_status = xc5000_get_status
|
||||
};
|
||||
|
||||
struct dvb_frontend * xc5000_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct xc5000_config *cfg)
|
||||
struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct xc5000_config *cfg, void *devptr)
|
||||
{
|
||||
struct xc5000_priv *priv = NULL;
|
||||
u16 id = 0;
|
||||
@@ -916,6 +916,7 @@ struct dvb_frontend * xc5000_attach(struct dvb_frontend *fe,
|
||||
priv->cfg = cfg;
|
||||
priv->bandwidth = BANDWIDTH_6_MHZ;
|
||||
priv->i2c = i2c;
|
||||
priv->devptr = devptr;
|
||||
|
||||
/* Check if firmware has been loaded. It is possible that another
|
||||
instance of the driver has loaded the firmware.
|
||||
|
||||
@@ -31,29 +31,31 @@ struct xc5000_config {
|
||||
u8 i2c_address;
|
||||
u32 if_khz;
|
||||
|
||||
/* For each bridge framework, when it attaches either analog or digital,
|
||||
* it has to store a reference back to its _core equivalent structure,
|
||||
* so that it can service the hardware by steering gpio's etc.
|
||||
* Each bridge implementation is different so cast priv accordingly.
|
||||
* The xc5000 driver cares not for this value, other than ensuring
|
||||
* it's passed back to a bridge during tuner_callback().
|
||||
*/
|
||||
void *priv;
|
||||
int (*tuner_callback) (void *priv, int command, int arg);
|
||||
};
|
||||
|
||||
/* xc5000 callback command */
|
||||
#define XC5000_TUNER_RESET 0
|
||||
|
||||
/* For each bridge framework, when it attaches either analog or digital,
|
||||
* it has to store a reference back to its _core equivalent structure,
|
||||
* so that it can service the hardware by steering gpio's etc.
|
||||
* Each bridge implementation is different so cast devptr accordingly.
|
||||
* The xc5000 driver cares not for this value, other than ensuring
|
||||
* it's passed back to a bridge during tuner_callback().
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_MEDIA_TUNER_XC5000) || \
|
||||
(defined(CONFIG_MEDIA_TUNER_XC5000_MODULE) && defined(MODULE))
|
||||
extern struct dvb_frontend* xc5000_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct xc5000_config *cfg);
|
||||
struct xc5000_config *cfg,
|
||||
void *devptr);
|
||||
#else
|
||||
static inline struct dvb_frontend* xc5000_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct xc5000_config *cfg)
|
||||
struct xc5000_config *cfg,
|
||||
void *devptr)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
|
||||
@@ -31,6 +31,8 @@ struct xc5000_priv {
|
||||
u8 video_standard;
|
||||
u8 rf_mode;
|
||||
u8 fwloaded;
|
||||
|
||||
void *devptr;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -634,7 +634,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)
|
||||
}
|
||||
|
||||
/* try the sky v2.3 (vp310/Samsung tbdu18132(tsa5059)) */
|
||||
fc->fe = dvb_attach(vp310_mt312_attach,
|
||||
fc->fe = dvb_attach(mt312_attach,
|
||||
&skystar23_samsung_tbdu18132_config, i2c);
|
||||
if (fc->fe != NULL) {
|
||||
ops = &fc->fe->ops;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
config DVB_BT8XX
|
||||
tristate "BT8xx based PCI cards"
|
||||
depends on DVB_CORE && PCI && I2C && VIDEO_BT848
|
||||
depends on HOTPLUG # due to FW_LOADER
|
||||
select DVB_MT352 if !DVB_FE_CUSTOMISE
|
||||
select DVB_SP887X if !DVB_FE_CUSTOMISE
|
||||
select DVB_NXT6000 if !DVB_FE_CUSTOMISE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
config DVB_CINERGYT2
|
||||
tristate "Terratec CinergyT2/qanu USB2 DVB-T receiver"
|
||||
depends on DVB_CORE && USB
|
||||
depends on DVB_CORE && USB && INPUT
|
||||
help
|
||||
Support for "TerraTec CinergyT2" USB2.0 Highspeed DVB Receivers
|
||||
|
||||
|
||||
@@ -910,15 +910,21 @@ static void dvb_ca_en50221_thread_update_delay(struct dvb_ca_private *ca)
|
||||
int curdelay = 100000000;
|
||||
int slot;
|
||||
|
||||
/* Beware of too high polling frequency, because one polling
|
||||
* call might take several hundred milliseconds until timeout!
|
||||
*/
|
||||
for (slot = 0; slot < ca->slot_count; slot++) {
|
||||
switch (ca->slot_info[slot].slot_state) {
|
||||
default:
|
||||
case DVB_CA_SLOTSTATE_NONE:
|
||||
delay = HZ * 60; /* 60s */
|
||||
if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE))
|
||||
delay = HZ * 5; /* 5s */
|
||||
break;
|
||||
case DVB_CA_SLOTSTATE_INVALID:
|
||||
delay = HZ * 60;
|
||||
if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE)) {
|
||||
delay = HZ / 10;
|
||||
}
|
||||
delay = HZ * 60; /* 60s */
|
||||
if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE))
|
||||
delay = HZ / 10; /* 100ms */
|
||||
break;
|
||||
|
||||
case DVB_CA_SLOTSTATE_UNINITIALISED:
|
||||
@@ -926,19 +932,17 @@ static void dvb_ca_en50221_thread_update_delay(struct dvb_ca_private *ca)
|
||||
case DVB_CA_SLOTSTATE_VALIDATE:
|
||||
case DVB_CA_SLOTSTATE_WAITFR:
|
||||
case DVB_CA_SLOTSTATE_LINKINIT:
|
||||
delay = HZ / 10;
|
||||
delay = HZ / 10; /* 100ms */
|
||||
break;
|
||||
|
||||
case DVB_CA_SLOTSTATE_RUNNING:
|
||||
delay = HZ * 60;
|
||||
if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE)) {
|
||||
delay = HZ / 10;
|
||||
}
|
||||
delay = HZ * 60; /* 60s */
|
||||
if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE))
|
||||
delay = HZ / 10; /* 100ms */
|
||||
if (ca->open) {
|
||||
if ((!ca->slot_info[slot].da_irq_supported) ||
|
||||
(!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_DA))) {
|
||||
delay = HZ / 10;
|
||||
}
|
||||
(!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_DA)))
|
||||
delay = HZ / 10; /* 100ms */
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
config DVB_USB
|
||||
tristate "Support for various USB DVB devices"
|
||||
depends on DVB_CORE && USB && I2C
|
||||
depends on HOTPLUG # due to FW_LOADER
|
||||
select FW_LOADER
|
||||
help
|
||||
By enabling this you will be able to choose the various supported
|
||||
|
||||
@@ -30,7 +30,7 @@ config DVB_CX24123
|
||||
A DVB-S tuner module. Say Y when you want to support this frontend.
|
||||
|
||||
config DVB_MT312
|
||||
tristate "Zarlink VP310/MT312 based"
|
||||
tristate "Zarlink VP310/MT312/ZL10313 based"
|
||||
depends on DVB_CORE && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
@@ -97,7 +97,7 @@ comment "DVB-T (terrestrial) frontends"
|
||||
|
||||
config DVB_SP8870
|
||||
tristate "Spase sp8870 based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -110,7 +110,7 @@ config DVB_SP8870
|
||||
|
||||
config DVB_SP887X
|
||||
tristate "Spase sp887x based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -144,7 +144,7 @@ config DVB_L64781
|
||||
|
||||
config DVB_TDA1004X
|
||||
tristate "Philips TDA10045H/TDA10046H based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -211,7 +211,7 @@ config DVB_DIB7000P
|
||||
|
||||
config DVB_TDA10048
|
||||
tristate "Philips TDA10048HN based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -253,7 +253,7 @@ comment "ATSC (North American/Korean Terrestrial/Cable DTV) frontends"
|
||||
|
||||
config DVB_NXT200X
|
||||
tristate "NxtWave Communications NXT2002/NXT2004 based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -268,7 +268,7 @@ config DVB_NXT200X
|
||||
|
||||
config DVB_OR51211
|
||||
tristate "Oren OR51211 based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -281,7 +281,7 @@ config DVB_OR51211
|
||||
|
||||
config DVB_OR51132
|
||||
tristate "Oren OR51132 based"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
@@ -297,7 +297,7 @@ config DVB_OR51132
|
||||
|
||||
config DVB_BCM3510
|
||||
tristate "Broadcom BCM3510"
|
||||
depends on DVB_CORE && I2C
|
||||
depends on DVB_CORE && I2C && HOTPLUG
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
select FW_LOADER
|
||||
help
|
||||
|
||||
@@ -195,7 +195,7 @@ static void itd1000_set_vco(struct itd1000_state *state, u32 freq_khz)
|
||||
}
|
||||
}
|
||||
|
||||
struct {
|
||||
static const struct {
|
||||
u32 freq;
|
||||
u8 values[10]; /* RFTR, RFST1 - RFST9 */
|
||||
} itd1000_fre_values[] = {
|
||||
|
||||
@@ -737,7 +737,7 @@ static void mt312_release(struct dvb_frontend *fe)
|
||||
}
|
||||
|
||||
#define MT312_SYS_CLK 90000000UL /* 90 MHz */
|
||||
static struct dvb_frontend_ops vp310_mt312_ops = {
|
||||
static struct dvb_frontend_ops mt312_ops = {
|
||||
|
||||
.info = {
|
||||
.name = "Zarlink ???? DVB-S",
|
||||
@@ -776,7 +776,7 @@ 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 dvb_frontend *mt312_attach(const struct mt312_config *config,
|
||||
struct i2c_adapter *i2c)
|
||||
{
|
||||
struct mt312_state *state = NULL;
|
||||
@@ -795,7 +795,7 @@ struct dvb_frontend *vp310_mt312_attach(const struct mt312_config *config,
|
||||
goto error;
|
||||
|
||||
/* create dvb_frontend */
|
||||
memcpy(&state->frontend.ops, &vp310_mt312_ops,
|
||||
memcpy(&state->frontend.ops, &mt312_ops,
|
||||
sizeof(struct dvb_frontend_ops));
|
||||
state->frontend.demodulator_priv = state;
|
||||
|
||||
@@ -827,12 +827,13 @@ error:
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(vp310_mt312_attach);
|
||||
EXPORT_SYMBOL(mt312_attach);
|
||||
|
||||
module_param(debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
|
||||
|
||||
MODULE_DESCRIPTION("Zarlink VP310/MT312/ZL10313 DVB-S Demodulator driver");
|
||||
MODULE_AUTHOR("Andreas Oberritter <obi@linuxtv.org>");
|
||||
MODULE_AUTHOR("Matthias Schwarzott <zzam@gentoo.org>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user