13e54a169SMatthias Schwarzott /*
23e54a169SMatthias Schwarzott     Driver for Silicon Labs SI2165 DVB-C/-T Demodulator
33e54a169SMatthias Schwarzott 
43e54a169SMatthias Schwarzott     Copyright (C) 2013-2014 Matthias Schwarzott <zzam@gentoo.org>
53e54a169SMatthias Schwarzott 
63e54a169SMatthias Schwarzott     This program is free software; you can redistribute it and/or modify
73e54a169SMatthias Schwarzott     it under the terms of the GNU General Public License as published by
83e54a169SMatthias Schwarzott     the Free Software Foundation; either version 2 of the License, or
93e54a169SMatthias Schwarzott     (at your option) any later version.
103e54a169SMatthias Schwarzott 
113e54a169SMatthias Schwarzott     This program is distributed in the hope that it will be useful,
123e54a169SMatthias Schwarzott     but WITHOUT ANY WARRANTY; without even the implied warranty of
133e54a169SMatthias Schwarzott     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
143e54a169SMatthias Schwarzott     GNU General Public License for more details.
153e54a169SMatthias Schwarzott 
163e54a169SMatthias Schwarzott     References:
173e54a169SMatthias Schwarzott     http://www.silabs.com/Support%20Documents/TechnicalDocs/Si2165-short.pdf
183e54a169SMatthias Schwarzott */
193e54a169SMatthias Schwarzott 
203e54a169SMatthias Schwarzott #ifndef _DVB_SI2165_H
213e54a169SMatthias Schwarzott #define _DVB_SI2165_H
223e54a169SMatthias Schwarzott 
233e54a169SMatthias Schwarzott #include <linux/dvb/frontend.h>
243e54a169SMatthias Schwarzott 
253e54a169SMatthias Schwarzott enum {
263e54a169SMatthias Schwarzott 	SI2165_MODE_OFF = 0x00,
273e54a169SMatthias Schwarzott 	SI2165_MODE_PLL_EXT = 0x20,
283e54a169SMatthias Schwarzott 	SI2165_MODE_PLL_XTAL = 0x21
293e54a169SMatthias Schwarzott };
303e54a169SMatthias Schwarzott 
317cd785adSMatthias Schwarzott /* I2C addresses
327cd785adSMatthias Schwarzott  * possible values: 0x64,0x65,0x66,0x67
337cd785adSMatthias Schwarzott  */
347cd785adSMatthias Schwarzott struct si2165_platform_data {
357cd785adSMatthias Schwarzott 	/*
367cd785adSMatthias Schwarzott 	 * frontend
377cd785adSMatthias Schwarzott 	 * returned by driver
387cd785adSMatthias Schwarzott 	 */
397cd785adSMatthias Schwarzott 	struct dvb_frontend **fe;
407cd785adSMatthias Schwarzott 
417cd785adSMatthias Schwarzott 	/* external clock or XTAL */
427cd785adSMatthias Schwarzott 	u8 chip_mode;
437cd785adSMatthias Schwarzott 
447cd785adSMatthias Schwarzott 	/* frequency of external clock or xtal in Hz
457cd785adSMatthias Schwarzott 	 * possible values: 4000000, 16000000, 20000000, 240000000, 27000000
467cd785adSMatthias Schwarzott 	 */
477cd785adSMatthias Schwarzott 	u32 ref_freq_Hz;
487cd785adSMatthias Schwarzott 
497cd785adSMatthias Schwarzott 	/* invert the spectrum */
507cd785adSMatthias Schwarzott 	bool inversion;
517cd785adSMatthias Schwarzott };
527cd785adSMatthias Schwarzott 
533e54a169SMatthias Schwarzott struct si2165_config {
543e54a169SMatthias Schwarzott 	/* i2c addr
553e54a169SMatthias Schwarzott 	 * possible values: 0x64,0x65,0x66,0x67 */
563e54a169SMatthias Schwarzott 	u8 i2c_addr;
573e54a169SMatthias Schwarzott 
583e54a169SMatthias Schwarzott 	/* external clock or XTAL */
593e54a169SMatthias Schwarzott 	u8 chip_mode;
603e54a169SMatthias Schwarzott 
613e54a169SMatthias Schwarzott 	/* frequency of external clock or xtal in Hz
623e54a169SMatthias Schwarzott 	 * possible values: 4000000, 16000000, 20000000, 240000000, 27000000
633e54a169SMatthias Schwarzott 	 */
643e54a169SMatthias Schwarzott 	u32 ref_freq_Hz;
653e54a169SMatthias Schwarzott 
663e54a169SMatthias Schwarzott 	/* invert the spectrum */
673e54a169SMatthias Schwarzott 	bool inversion;
683e54a169SMatthias Schwarzott };
693e54a169SMatthias Schwarzott 
7000c78a37SMauro Carvalho Chehab #if IS_REACHABLE(CONFIG_DVB_SI2165)
713e54a169SMatthias Schwarzott struct dvb_frontend *si2165_attach(
723e54a169SMatthias Schwarzott 	const struct si2165_config *config,
733e54a169SMatthias Schwarzott 	struct i2c_adapter *i2c);
743e54a169SMatthias Schwarzott #else
753e54a169SMatthias Schwarzott static inline struct dvb_frontend *si2165_attach(
763e54a169SMatthias Schwarzott 	const struct si2165_config *config,
773e54a169SMatthias Schwarzott 	struct i2c_adapter *i2c)
783e54a169SMatthias Schwarzott {
793e54a169SMatthias Schwarzott 	pr_warn("%s: driver disabled by Kconfig\n", __func__);
803e54a169SMatthias Schwarzott 	return NULL;
813e54a169SMatthias Schwarzott }
823e54a169SMatthias Schwarzott #endif /* CONFIG_DVB_SI2165 */
833e54a169SMatthias Schwarzott 
843e54a169SMatthias Schwarzott #endif /* _DVB_SI2165_H */
85