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