1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 29a0bf528SMauro Carvalho Chehab /* 39a0bf528SMauro Carvalho Chehab * Support for AltoBeam GB20600 (a.k.a DMB-TH) demodulator 49a0bf528SMauro Carvalho Chehab * ATBM8830, ATBM8831 59a0bf528SMauro Carvalho Chehab * 69a0bf528SMauro Carvalho Chehab * Copyright (C) 2009 David T.L. Wong <davidtlwong@gmail.com> 79a0bf528SMauro Carvalho Chehab */ 89a0bf528SMauro Carvalho Chehab 99a0bf528SMauro Carvalho Chehab #ifndef __ATBM8830_H__ 109a0bf528SMauro Carvalho Chehab #define __ATBM8830_H__ 119a0bf528SMauro Carvalho Chehab 129a0bf528SMauro Carvalho Chehab #include <linux/dvb/frontend.h> 139a0bf528SMauro Carvalho Chehab #include <linux/i2c.h> 149a0bf528SMauro Carvalho Chehab 159a0bf528SMauro Carvalho Chehab #define ATBM8830_PROD_8830 0 169a0bf528SMauro Carvalho Chehab #define ATBM8830_PROD_8831 1 179a0bf528SMauro Carvalho Chehab 189a0bf528SMauro Carvalho Chehab struct atbm8830_config { 199a0bf528SMauro Carvalho Chehab 209a0bf528SMauro Carvalho Chehab /* product type */ 219a0bf528SMauro Carvalho Chehab u8 prod; 229a0bf528SMauro Carvalho Chehab 239a0bf528SMauro Carvalho Chehab /* the demodulator's i2c address */ 249a0bf528SMauro Carvalho Chehab u8 demod_address; 259a0bf528SMauro Carvalho Chehab 269a0bf528SMauro Carvalho Chehab /* parallel or serial transport stream */ 279a0bf528SMauro Carvalho Chehab u8 serial_ts; 289a0bf528SMauro Carvalho Chehab 299a0bf528SMauro Carvalho Chehab /* transport stream clock output only when receiving valid stream */ 309a0bf528SMauro Carvalho Chehab u8 ts_clk_gated; 319a0bf528SMauro Carvalho Chehab 329a0bf528SMauro Carvalho Chehab /* Decoder sample TS data at rising edge of clock */ 339a0bf528SMauro Carvalho Chehab u8 ts_sampling_edge; 349a0bf528SMauro Carvalho Chehab 359a0bf528SMauro Carvalho Chehab /* Oscillator clock frequency */ 369a0bf528SMauro Carvalho Chehab u32 osc_clk_freq; /* in kHz */ 379a0bf528SMauro Carvalho Chehab 389a0bf528SMauro Carvalho Chehab /* IF frequency */ 399a0bf528SMauro Carvalho Chehab u32 if_freq; /* in kHz */ 409a0bf528SMauro Carvalho Chehab 419a0bf528SMauro Carvalho Chehab /* Swap I/Q for zero IF */ 429a0bf528SMauro Carvalho Chehab u8 zif_swap_iq; 439a0bf528SMauro Carvalho Chehab 449a0bf528SMauro Carvalho Chehab /* Tuner AGC settings */ 459a0bf528SMauro Carvalho Chehab u8 agc_min; 469a0bf528SMauro Carvalho Chehab u8 agc_max; 479a0bf528SMauro Carvalho Chehab u8 agc_hold_loop; 489a0bf528SMauro Carvalho Chehab }; 499a0bf528SMauro Carvalho Chehab 509b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_DVB_ATBM8830) 519a0bf528SMauro Carvalho Chehab extern struct dvb_frontend *atbm8830_attach(const struct atbm8830_config *config, 529a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c); 539a0bf528SMauro Carvalho Chehab #else 549a0bf528SMauro Carvalho Chehab static inline atbm8830_attach(const struct atbm8830_config * config,struct i2c_adapter * i2c)559a0bf528SMauro Carvalho Chehabstruct dvb_frontend *atbm8830_attach(const struct atbm8830_config *config, 569a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c) { 579a0bf528SMauro Carvalho Chehab printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 589a0bf528SMauro Carvalho Chehab return NULL; 599a0bf528SMauro Carvalho Chehab } 609a0bf528SMauro Carvalho Chehab #endif /* CONFIG_DVB_ATBM8830 */ 619a0bf528SMauro Carvalho Chehab 629a0bf528SMauro Carvalho Chehab #endif /* __ATBM8830_H__ */ 63