18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci Auvitek AU8522 QAM/8VSB demodulator driver 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci Copyright (C) 2008 Steven Toth <stoth@linuxtv.org> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci*/ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef __AU8522_H__ 118c2ecf20Sopenharmony_ci#define __AU8522_H__ 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/dvb/frontend.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cienum au8522_if_freq { 168c2ecf20Sopenharmony_ci AU8522_IF_6MHZ = 0, 178c2ecf20Sopenharmony_ci AU8522_IF_4MHZ, 188c2ecf20Sopenharmony_ci AU8522_IF_3_25MHZ, 198c2ecf20Sopenharmony_ci}; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistruct au8522_led_config { 228c2ecf20Sopenharmony_ci u16 vsb8_strong; 238c2ecf20Sopenharmony_ci u16 qam64_strong; 248c2ecf20Sopenharmony_ci u16 qam256_strong; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci u16 gpio_output; 278c2ecf20Sopenharmony_ci /* unset hi bits, set low bits */ 288c2ecf20Sopenharmony_ci u16 gpio_output_enable; 298c2ecf20Sopenharmony_ci u16 gpio_output_disable; 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci u16 gpio_leds; 328c2ecf20Sopenharmony_ci u8 *led_states; 338c2ecf20Sopenharmony_ci unsigned int num_led_states; 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistruct au8522_config { 378c2ecf20Sopenharmony_ci /* the demodulator's i2c address */ 388c2ecf20Sopenharmony_ci u8 demod_address; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci /* Return lock status based on tuner lock, or demod lock */ 418c2ecf20Sopenharmony_ci#define AU8522_TUNERLOCKING 0 428c2ecf20Sopenharmony_ci#define AU8522_DEMODLOCKING 1 438c2ecf20Sopenharmony_ci u8 status_mode; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci struct au8522_led_config *led_cfg; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci enum au8522_if_freq vsb_if; 488c2ecf20Sopenharmony_ci enum au8522_if_freq qam_if; 498c2ecf20Sopenharmony_ci}; 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#if IS_REACHABLE(CONFIG_DVB_AU8522_DTV) 528c2ecf20Sopenharmony_ciextern struct dvb_frontend *au8522_attach(const struct au8522_config *config, 538c2ecf20Sopenharmony_ci struct i2c_adapter *i2c); 548c2ecf20Sopenharmony_ci#else 558c2ecf20Sopenharmony_cistatic inline 568c2ecf20Sopenharmony_cistruct dvb_frontend *au8522_attach(const struct au8522_config *config, 578c2ecf20Sopenharmony_ci struct i2c_adapter *i2c) 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 608c2ecf20Sopenharmony_ci return NULL; 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_ci#endif /* CONFIG_DVB_AU8522 */ 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci/* Other modes may need to be added later */ 658c2ecf20Sopenharmony_cienum au8522_video_input { 668c2ecf20Sopenharmony_ci AU8522_COMPOSITE_CH1 = 1, 678c2ecf20Sopenharmony_ci AU8522_COMPOSITE_CH2, 688c2ecf20Sopenharmony_ci AU8522_COMPOSITE_CH3, 698c2ecf20Sopenharmony_ci AU8522_COMPOSITE_CH4, 708c2ecf20Sopenharmony_ci AU8522_COMPOSITE_CH4_SIF, 718c2ecf20Sopenharmony_ci AU8522_SVIDEO_CH13, 728c2ecf20Sopenharmony_ci AU8522_SVIDEO_CH24, 738c2ecf20Sopenharmony_ci}; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_cienum au8522_audio_input { 768c2ecf20Sopenharmony_ci AU8522_AUDIO_NONE, 778c2ecf20Sopenharmony_ci AU8522_AUDIO_SIF, 788c2ecf20Sopenharmony_ci}; 798c2ecf20Sopenharmony_ci#endif /* __AU8522_H__ */ 80