mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 18:41:23 +00:00
dbbac11e1d
This - in conjunction with the previous changes - makes it possible to use the STV0367 DVB-C/T demodulator driver with Digital Devices hardware having this demodulator soldered on them (namely CineCTv6 bridges and some earlier DuoFlex CT addon modules). The changes do the following: - add a third *_attach function which will make use of a third frontend_ops struct which announces both -C and -T support (the same as with DD's own driver stv0367dd). This is necessary to support both delivery systems on one FE without having to do large conversions to VB2 or the need to select either -C or -T mode via modparams and the like. Additionally, the frontend_ops point to new "glue" functions which will then call into the existing functionality depending on the active delivery system/demod state (all used functionality works almost OOTB). - Demod initialisation has been ported from stv0367dd. DD's driver always does a full init of both OFDM and QAM cores, with some additional things. The active delivery system is remembered and upon switch, the Demod will be reconfigured to work in OFDM or QAM mode (that's what the ddb_setup_XX functions are used for). Note that in QAM mode, the DD demods work with an IC speed of 58Mhz. It's not very good to perform full reinits upon Demod mode changes since in very rare occasions this can lead to the I2C interface or the whole Demod to crash, requiring a powercycle, thus the flag to perform full reinit is set to disabled. - A little enum is added for named identifiers of the current Demod state. Initialisation code/register writes originate from stv0367dd. Permission to reuse was formally granted by Ralph Metzler <rjkm@metzlerbros.de>. Signed-off-by: Daniel Scheller <d.scheller@gmx.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
75 lines
2.0 KiB
C
75 lines
2.0 KiB
C
/*
|
|
* stv0367.h
|
|
*
|
|
* Driver for ST STV0367 DVB-T & DVB-C demodulator IC.
|
|
*
|
|
* Copyright (C) ST Microelectronics.
|
|
* Copyright (C) 2010,2011 NetUP Inc.
|
|
* Copyright (C) 2010,2011 Igor M. Liplianin <liplianin@netup.ru>
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef STV0367_H
|
|
#define STV0367_H
|
|
|
|
#include <linux/dvb/frontend.h>
|
|
#include "dvb_frontend.h"
|
|
|
|
#define STV0367_ICSPEED_53125 53125000
|
|
#define STV0367_ICSPEED_58000 58000000
|
|
|
|
struct stv0367_config {
|
|
u8 demod_address;
|
|
u32 xtal;
|
|
u32 if_khz;/*4500*/
|
|
int if_iq_mode;
|
|
int ts_mode;
|
|
int clk_pol;
|
|
};
|
|
|
|
#if IS_REACHABLE(CONFIG_DVB_STV0367)
|
|
extern struct
|
|
dvb_frontend *stv0367ter_attach(const struct stv0367_config *config,
|
|
struct i2c_adapter *i2c);
|
|
extern struct
|
|
dvb_frontend *stv0367cab_attach(const struct stv0367_config *config,
|
|
struct i2c_adapter *i2c);
|
|
extern struct
|
|
dvb_frontend *stv0367ddb_attach(const struct stv0367_config *config,
|
|
struct i2c_adapter *i2c);
|
|
#else
|
|
static inline struct
|
|
dvb_frontend *stv0367ter_attach(const struct stv0367_config *config,
|
|
struct i2c_adapter *i2c)
|
|
{
|
|
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
|
return NULL;
|
|
}
|
|
static inline struct
|
|
dvb_frontend *stv0367cab_attach(const struct stv0367_config *config,
|
|
struct i2c_adapter *i2c)
|
|
{
|
|
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
|
return NULL;
|
|
}
|
|
static inline struct
|
|
dvb_frontend *stv0367ddb_attach(const struct stv0367_config *config,
|
|
struct i2c_adapter *i2c)
|
|
{
|
|
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
|
return NULL;
|
|
}
|
|
#endif
|
|
|
|
#endif
|