1cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky/* 25de82faec811e1494966f196354954a6543fdc3aMichael Krufky * Support for LG Electronics LGDT3304 and LGDT3305 - VSB/QAM 3cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * 440ff540f3ec7ce2fd37510cbef495a57a4d1bd56Michael Krufky * Copyright (C) 2008, 2009, 2010 Michael Krufky <mkrufky@linuxtv.org> 5cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * 6cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * This program is free software; you can redistribute it and/or modify 7cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * it under the terms of the GNU General Public License as published by 8cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * the Free Software Foundation; either version 2 of the License, or 9cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * (at your option) any later version. 10cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * 11cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * This program is distributed in the hope that it will be useful, 12cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * GNU General Public License for more details. 15cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * 16cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * You should have received a copy of the GNU General Public License 17cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * along with this program; if not, write to the Free Software 18cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky * 20cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky */ 21cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 22cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#ifndef _LGDT3305_H_ 23cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#define _LGDT3305_H_ 24cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 25cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#include <linux/i2c.h> 26cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#include "dvb_frontend.h" 27cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 28cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 29cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkyenum lgdt3305_mpeg_mode { 30cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky LGDT3305_MPEG_PARALLEL = 0, 31cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky LGDT3305_MPEG_SERIAL = 1, 32cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky}; 33cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 34cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkyenum lgdt3305_tp_clock_edge { 35cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky LGDT3305_TPCLK_RISING_EDGE = 0, 36cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky LGDT3305_TPCLK_FALLING_EDGE = 1, 37cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky}; 38cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 39cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkyenum lgdt3305_tp_valid_polarity { 40cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky LGDT3305_TP_VALID_LOW = 0, 41cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky LGDT3305_TP_VALID_HIGH = 1, 42cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky}; 43cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 44804258c95f9b782b1916eeb4fe280b119ad5b152Jarod Wilsonenum lgdt_demod_chip_type { 45804258c95f9b782b1916eeb4fe280b119ad5b152Jarod Wilson LGDT3305 = 0, 46804258c95f9b782b1916eeb4fe280b119ad5b152Jarod Wilson LGDT3304 = 1, 47804258c95f9b782b1916eeb4fe280b119ad5b152Jarod Wilson}; 48804258c95f9b782b1916eeb4fe280b119ad5b152Jarod Wilson 49cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkystruct lgdt3305_config { 50cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky u8 i2c_addr; 51cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 52cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky /* user defined IF frequency in KHz */ 53cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky u16 qam_if_khz; 54cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky u16 vsb_if_khz; 55cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 56cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky /* AGC Power reference - defaults are used if left unset */ 57cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky u16 usref_8vsb; /* default: 0x32c4 */ 58cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky u16 usref_qam64; /* default: 0x5400 */ 59cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky u16 usref_qam256; /* default: 0x2a80 */ 60cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 61cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky /* disable i2c repeater - 0:repeater enabled 1:repeater disabled */ 621faea56087dfaf84019557f2c9ad18bd67c6012aNemeth Marton unsigned int deny_i2c_rptr:1; 63cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 64cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky /* spectral inversion - 0:disabled 1:enabled */ 651faea56087dfaf84019557f2c9ad18bd67c6012aNemeth Marton unsigned int spectral_inversion:1; 66cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 67cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky /* use RF AGC loop - 0:disabled 1:enabled */ 681faea56087dfaf84019557f2c9ad18bd67c6012aNemeth Marton unsigned int rf_agc_loop:1; 69cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 70cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky enum lgdt3305_mpeg_mode mpeg_mode; 71cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky enum lgdt3305_tp_clock_edge tpclk_edge; 72cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky enum lgdt3305_tp_valid_polarity tpvalid_polarity; 73804258c95f9b782b1916eeb4fe280b119ad5b152Jarod Wilson enum lgdt_demod_chip_type demod_chip; 74cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky}; 75cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 76cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#if defined(CONFIG_DVB_LGDT3305) || (defined(CONFIG_DVB_LGDT3305_MODULE) && \ 77cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky defined(MODULE)) 78cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkyextern 79cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkystruct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config, 80cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky struct i2c_adapter *i2c_adap); 81cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#else 82cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkystatic inline 83cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufkystruct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config, 84cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky struct i2c_adapter *i2c_adap) 85cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky{ 86cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 87cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky return NULL; 88cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky} 89cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#endif /* CONFIG_DVB_LGDT3305 */ 90cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky 91cae78ed599c348999a318ace0fcc3ff0277c8fa4Michael Krufky#endif /* _LGDT3305_H_ */ 92