Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *    Support for LG Electronics LGDT3304 and LGDT3305 - VSB/QAM
0004  *
0005  *    Copyright (C) 2008, 2009, 2010 Michael Krufky <mkrufky@linuxtv.org>
0006  */
0007 
0008 #ifndef _LGDT3305_H_
0009 #define _LGDT3305_H_
0010 
0011 #include <linux/i2c.h>
0012 #include <media/dvb_frontend.h>
0013 
0014 
0015 enum lgdt3305_mpeg_mode {
0016     LGDT3305_MPEG_PARALLEL = 0,
0017     LGDT3305_MPEG_SERIAL = 1,
0018 };
0019 
0020 enum lgdt3305_tp_clock_edge {
0021     LGDT3305_TPCLK_RISING_EDGE = 0,
0022     LGDT3305_TPCLK_FALLING_EDGE = 1,
0023 };
0024 
0025 enum lgdt3305_tp_clock_mode {
0026     LGDT3305_TPCLK_GATED = 0,
0027     LGDT3305_TPCLK_FIXED = 1,
0028 };
0029 
0030 enum lgdt3305_tp_valid_polarity {
0031     LGDT3305_TP_VALID_LOW = 0,
0032     LGDT3305_TP_VALID_HIGH = 1,
0033 };
0034 
0035 enum lgdt_demod_chip_type {
0036     LGDT3305 = 0,
0037     LGDT3304 = 1,
0038 };
0039 
0040 struct lgdt3305_config {
0041     u8 i2c_addr;
0042 
0043     /* user defined IF frequency in KHz */
0044     u16 qam_if_khz;
0045     u16 vsb_if_khz;
0046 
0047     /* AGC Power reference - defaults are used if left unset */
0048     u16 usref_8vsb;   /* default: 0x32c4 */
0049     u16 usref_qam64;  /* default: 0x5400 */
0050     u16 usref_qam256; /* default: 0x2a80 */
0051 
0052     /* disable i2c repeater - 0:repeater enabled 1:repeater disabled */
0053     unsigned int deny_i2c_rptr:1;
0054 
0055     /* spectral inversion - 0:disabled 1:enabled */
0056     unsigned int spectral_inversion:1;
0057 
0058     /* use RF AGC loop - 0:disabled 1:enabled */
0059     unsigned int rf_agc_loop:1;
0060 
0061     enum lgdt3305_mpeg_mode mpeg_mode;
0062     enum lgdt3305_tp_clock_edge tpclk_edge;
0063     enum lgdt3305_tp_clock_mode tpclk_mode;
0064     enum lgdt3305_tp_valid_polarity tpvalid_polarity;
0065     enum lgdt_demod_chip_type demod_chip;
0066 };
0067 
0068 #if IS_REACHABLE(CONFIG_DVB_LGDT3305)
0069 extern
0070 struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
0071                      struct i2c_adapter *i2c_adap);
0072 #else
0073 static inline
0074 struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
0075                      struct i2c_adapter *i2c_adap)
0076 {
0077     printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
0078     return NULL;
0079 }
0080 #endif /* CONFIG_DVB_LGDT3305 */
0081 
0082 #endif /* _LGDT3305_H_ */