forked from luck/tmp_suning_uos_patched
[media] dib0700: add initial code for PCTV 340e by Davide Ferri
This is initial code written by Davide Ferri for the PCTV 340e, including a new xc4000 driver. I am checking in all the code unmodified, and making no assertions about its quality (other than confirming it compiles). [mchehab@redhat.com: rebased on the top of the current tree] Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Davide Ferri <davidef1986@gmail.com> Cc: Patrick Boettcher <pboettcher@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
32127363ee
commit
8d009a0c41
|
@ -78,6 +78,7 @@ tuner=77 - TCL tuner MF02GIP-5N-E
|
|||
tuner=78 - Philips FMD1216MEX MK3 Hybrid Tuner
|
||||
tuner=79 - Philips PAL/SECAM multi (FM1216 MK5)
|
||||
tuner=80 - Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough
|
||||
tuner=81 - Xceive 4000 tuner
|
||||
tuner=81 - Partsnic (Daewoo) PTI-5NF05
|
||||
tuner=82 - Philips CU1216L
|
||||
tuner=83 - NXP TDA18271
|
||||
|
|
|
@ -23,6 +23,7 @@ config MEDIA_TUNER
|
|||
depends on VIDEO_MEDIA && I2C
|
||||
select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_XC4000 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_MT20XX if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_TDA8290 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_TEA5761 if !MEDIA_TUNER_CUSTOMISE
|
||||
|
@ -152,6 +153,15 @@ config MEDIA_TUNER_XC5000
|
|||
This device is only used inside a SiP called together with a
|
||||
demodulator for now.
|
||||
|
||||
config MEDIA_TUNER_XC4000
|
||||
tristate "Xceive XC4000 silicon tuner"
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if MEDIA_TUNER_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon tuner XC4000 from Xceive.
|
||||
This device is only used inside a SiP called together with a
|
||||
demodulator for now.
|
||||
|
||||
config MEDIA_TUNER_MXL5005S
|
||||
tristate "MaxLinear MSL5005S silicon tuner"
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
|
|
|
@ -16,6 +16,7 @@ obj-$(CONFIG_MEDIA_TUNER_TDA9887) += tda9887.o
|
|||
obj-$(CONFIG_MEDIA_TUNER_TDA827X) += tda827x.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_TDA18271) += tda18271.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_XC5000) += xc5000.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_XC4000) += xc4000.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2060) += mt2060.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2266) += mt2266.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_QT1010) += qt1010.o
|
||||
|
|
|
@ -1805,6 +1805,10 @@ struct tunertype tuners[] = {
|
|||
.name = "Xceive 5000 tuner",
|
||||
/* see xc5000.c for details */
|
||||
},
|
||||
[TUNER_XC4000] = { /* Xceive 4000 */
|
||||
.name = "Xceive 4000 tuner",
|
||||
/* see xc4000.c for details */
|
||||
},
|
||||
[TUNER_TCL_MF02GIP_5N] = { /* TCL tuner MF02GIP-5N-E */
|
||||
.name = "TCL tuner MF02GIP-5N-E",
|
||||
.params = tuner_tcl_mf02gip_5n_params,
|
||||
|
|
1083
drivers/media/common/tuners/xc4000.c
Normal file
1083
drivers/media/common/tuners/xc4000.c
Normal file
File diff suppressed because it is too large
Load Diff
61
drivers/media/common/tuners/xc4000.h
Normal file
61
drivers/media/common/tuners/xc4000.h
Normal file
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Driver for Xceive XC4000 "QAM/8VSB single chip tuner"
|
||||
*
|
||||
* Copyright (c) 2007 Steven Toth <stoth@linuxtv.org>
|
||||
*
|
||||
* 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 __XC4000_H__
|
||||
#define __XC4000_H__
|
||||
|
||||
#include <linux/firmware.h>
|
||||
|
||||
struct dvb_frontend;
|
||||
struct i2c_adapter;
|
||||
|
||||
struct xc4000_config {
|
||||
u8 i2c_address;
|
||||
u32 if_khz;
|
||||
};
|
||||
|
||||
/* xc4000 callback command */
|
||||
#define XC4000_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 xc4000 driver cares not for this value, other than ensuring
|
||||
* it's passed back to a bridge during tuner_callback().
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_MEDIA_TUNER_XC4000) || \
|
||||
(defined(CONFIG_MEDIA_TUNER_XC4000_MODULE) && defined(MODULE))
|
||||
extern struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct xc4000_config *cfg);
|
||||
#else
|
||||
static inline struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c,
|
||||
struct xc4000_config *cfg)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -17,6 +17,7 @@
|
|||
#include "mt2266.h"
|
||||
#include "tuner-xc2028.h"
|
||||
#include "xc5000.h"
|
||||
#include "xc4000.h"
|
||||
#include "s5h1411.h"
|
||||
#include "dib0070.h"
|
||||
#include "dib0090.h"
|
||||
|
@ -2655,6 +2656,41 @@ static int xc5000_tuner_attach(struct dvb_usb_adapter *adap)
|
|||
== NULL ? -ENODEV : 0;
|
||||
}
|
||||
|
||||
static int dib0700_xc4000_tuner_callback(void *priv, int component,
|
||||
int command, int arg)
|
||||
{
|
||||
struct dvb_usb_adapter *adap = priv;
|
||||
|
||||
if (command == XC4000_TUNER_RESET) {
|
||||
/* Reset the tuner */
|
||||
dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 0);
|
||||
msleep(10);
|
||||
dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 1);
|
||||
msleep(10);
|
||||
} else {
|
||||
err("xc4000: unknown tuner callback command: %d\n", command);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct xc4000_config s5h1411_xc4000_tunerconfig = {
|
||||
.i2c_address = 0x64,
|
||||
.if_khz = 5380,
|
||||
};
|
||||
|
||||
static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
|
||||
{
|
||||
err("xc4000: xc4000_tuner_attach");
|
||||
/* FIXME: generalize & move to common area */
|
||||
adap->fe->callback = dib0700_xc4000_tuner_callback;
|
||||
|
||||
return dvb_attach(xc4000_attach, adap->fe, &adap->dev->i2c_adap,
|
||||
&s5h1411_xc4000_tunerconfig)
|
||||
== NULL ? -ENODEV : 0;
|
||||
}
|
||||
|
||||
static struct lgdt3305_config hcw_lgdt3305_config = {
|
||||
.i2c_addr = 0x0e,
|
||||
.mpeg_mode = LGDT3305_MPEG_PARALLEL,
|
||||
|
@ -2802,6 +2838,7 @@ struct usb_device_id dib0700_usb_id_table[] = {
|
|||
{ USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_TFE7090PVR) },
|
||||
{ USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_AIRSTAR_TELESTICK_2) },
|
||||
/* 75 */{ USB_DEVICE(USB_VID_MEDION, USB_PID_CREATIX_CTX1921) },
|
||||
{ USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV340E) },
|
||||
{ 0 } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
|
||||
|
@ -3762,6 +3799,37 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
|||
},
|
||||
},
|
||||
|
||||
.rc.core = {
|
||||
.rc_interval = DEFAULT_RC_INTERVAL,
|
||||
.rc_codes = RC_MAP_DIB0700_RC5_TABLE,
|
||||
.module_name = "dib0700",
|
||||
.rc_query = dib0700_rc_query_old_firmware,
|
||||
.allowed_protos = RC_TYPE_RC5 |
|
||||
RC_TYPE_RC6 |
|
||||
RC_TYPE_NEC,
|
||||
.change_protocol = dib0700_change_protocol,
|
||||
},
|
||||
}, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
|
||||
.num_adapters = 1,
|
||||
.adapter = {
|
||||
{
|
||||
.frontend_attach = stk7700ph_frontend_attach,
|
||||
.tuner_attach = xc4000_tuner_attach,
|
||||
|
||||
DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
|
||||
|
||||
.size_of_priv = sizeof(struct
|
||||
dib0700_adapter_state),
|
||||
},
|
||||
},
|
||||
|
||||
.num_device_descs = 1,
|
||||
.devices = {
|
||||
{ "Pinnacle PCTV 340e HD Pro USB Stick",
|
||||
{ &dib0700_usb_id_table[76], NULL },
|
||||
{ NULL },
|
||||
},
|
||||
},
|
||||
.rc.core = {
|
||||
.rc_interval = DEFAULT_RC_INTERVAL,
|
||||
.rc_codes = RC_MAP_DIB0700_RC5_TABLE,
|
||||
|
|
|
@ -228,6 +228,7 @@
|
|||
#define USB_PID_PINNACLE_PCTV72E 0x0236
|
||||
#define USB_PID_PINNACLE_PCTV73E 0x0237
|
||||
#define USB_PID_PINNACLE_PCTV310E 0x3211
|
||||
#define USB_PID_PINNACLE_PCTV340E 0x023d
|
||||
#define USB_PID_PINNACLE_PCTV801E 0x023a
|
||||
#define USB_PID_PINNACLE_PCTV801E_SE 0x023b
|
||||
#define USB_PID_PINNACLE_PCTV73A 0x0243
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "tda9887.h"
|
||||
#include "xc5000.h"
|
||||
#include "tda18271.h"
|
||||
#include "xc4000.h"
|
||||
|
||||
#define UNSET (-1U)
|
||||
|
||||
|
@ -391,6 +392,19 @@ static void set_type(struct i2c_client *c, unsigned int type,
|
|||
tune_now = 0;
|
||||
break;
|
||||
}
|
||||
case TUNER_XC4000:
|
||||
{
|
||||
struct xc4000_config xc4000_cfg = {
|
||||
.i2c_address = t->i2c->addr,
|
||||
/* if_khz will be set when the digital dvb_attach() occurs */
|
||||
.if_khz = 0,
|
||||
};
|
||||
if (!dvb_attach(xc4000_attach,
|
||||
&t->fe, t->i2c->adapter, &xc4000_cfg))
|
||||
goto attach_failed;
|
||||
tune_now = 0;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (!dvb_attach(simple_tuner_attach, &t->fe,
|
||||
t->i2c->adapter, t->i2c->addr, t->type))
|
||||
|
|
|
@ -127,6 +127,8 @@
|
|||
#define TUNER_PHILIPS_FMD1216MEX_MK3 78
|
||||
#define TUNER_PHILIPS_FM1216MK5 79
|
||||
#define TUNER_PHILIPS_FQ1216LME_MK3 80 /* Active loopthrough, no FM */
|
||||
#define TUNER_XC4000 81 /* Xceive Silicon Tuner */
|
||||
|
||||
#define TUNER_PARTSNIC_PTI_5NF05 81
|
||||
#define TUNER_PHILIPS_CU1216L 82
|
||||
#define TUNER_NXP_TDA18271 83
|
||||
|
|
Loading…
Reference in New Issue
Block a user