162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci MaxLinear MXL5005S VSB/QAM/DVBT tuner driver 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci Copyright (C) 2008 MaxLinear 662306a36Sopenharmony_ci Copyright (C) 2008 Steven Toth <stoth@linuxtv.org> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci*/ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef __MXL5005S_H 1262306a36Sopenharmony_ci#define __MXL5005S_H 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/i2c.h> 1562306a36Sopenharmony_ci#include <media/dvb_frontend.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct mxl5005s_config { 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci /* 7 bit i2c address */ 2062306a36Sopenharmony_ci u8 i2c_address; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define IF_FREQ_4570000HZ 4570000 2362306a36Sopenharmony_ci#define IF_FREQ_4571429HZ 4571429 2462306a36Sopenharmony_ci#define IF_FREQ_5380000HZ 5380000 2562306a36Sopenharmony_ci#define IF_FREQ_36000000HZ 36000000 2662306a36Sopenharmony_ci#define IF_FREQ_36125000HZ 36125000 2762306a36Sopenharmony_ci#define IF_FREQ_36166667HZ 36166667 2862306a36Sopenharmony_ci#define IF_FREQ_44000000HZ 44000000 2962306a36Sopenharmony_ci u32 if_freq; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define CRYSTAL_FREQ_4000000HZ 4000000 3262306a36Sopenharmony_ci#define CRYSTAL_FREQ_16000000HZ 16000000 3362306a36Sopenharmony_ci#define CRYSTAL_FREQ_25000000HZ 25000000 3462306a36Sopenharmony_ci#define CRYSTAL_FREQ_28800000HZ 28800000 3562306a36Sopenharmony_ci u32 xtal_freq; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define MXL_DUAL_AGC 0 3862306a36Sopenharmony_ci#define MXL_SINGLE_AGC 1 3962306a36Sopenharmony_ci u8 agc_mode; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#define MXL_TF_DEFAULT 0 4262306a36Sopenharmony_ci#define MXL_TF_OFF 1 4362306a36Sopenharmony_ci#define MXL_TF_C 2 4462306a36Sopenharmony_ci#define MXL_TF_C_H 3 4562306a36Sopenharmony_ci#define MXL_TF_D 4 4662306a36Sopenharmony_ci#define MXL_TF_D_L 5 4762306a36Sopenharmony_ci#define MXL_TF_E 6 4862306a36Sopenharmony_ci#define MXL_TF_F 7 4962306a36Sopenharmony_ci#define MXL_TF_E_2 8 5062306a36Sopenharmony_ci#define MXL_TF_E_NA 9 5162306a36Sopenharmony_ci#define MXL_TF_G 10 5262306a36Sopenharmony_ci u8 tracking_filter; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#define MXL_RSSI_DISABLE 0 5562306a36Sopenharmony_ci#define MXL_RSSI_ENABLE 1 5662306a36Sopenharmony_ci u8 rssi_enable; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define MXL_CAP_SEL_DISABLE 0 5962306a36Sopenharmony_ci#define MXL_CAP_SEL_ENABLE 1 6062306a36Sopenharmony_ci u8 cap_select; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define MXL_DIV_OUT_1 0 6362306a36Sopenharmony_ci#define MXL_DIV_OUT_4 1 6462306a36Sopenharmony_ci u8 div_out; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#define MXL_CLOCK_OUT_DISABLE 0 6762306a36Sopenharmony_ci#define MXL_CLOCK_OUT_ENABLE 1 6862306a36Sopenharmony_ci u8 clock_out; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define MXL5005S_IF_OUTPUT_LOAD_200_OHM 200 7162306a36Sopenharmony_ci#define MXL5005S_IF_OUTPUT_LOAD_300_OHM 300 7262306a36Sopenharmony_ci u32 output_load; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#define MXL5005S_TOP_5P5 55 7562306a36Sopenharmony_ci#define MXL5005S_TOP_7P2 72 7662306a36Sopenharmony_ci#define MXL5005S_TOP_9P2 92 7762306a36Sopenharmony_ci#define MXL5005S_TOP_11P0 110 7862306a36Sopenharmony_ci#define MXL5005S_TOP_12P9 129 7962306a36Sopenharmony_ci#define MXL5005S_TOP_14P7 147 8062306a36Sopenharmony_ci#define MXL5005S_TOP_16P8 168 8162306a36Sopenharmony_ci#define MXL5005S_TOP_19P4 194 8262306a36Sopenharmony_ci#define MXL5005S_TOP_21P2 212 8362306a36Sopenharmony_ci#define MXL5005S_TOP_23P2 232 8462306a36Sopenharmony_ci#define MXL5005S_TOP_25P2 252 8562306a36Sopenharmony_ci#define MXL5005S_TOP_27P1 271 8662306a36Sopenharmony_ci#define MXL5005S_TOP_29P2 292 8762306a36Sopenharmony_ci#define MXL5005S_TOP_31P7 317 8862306a36Sopenharmony_ci#define MXL5005S_TOP_34P9 349 8962306a36Sopenharmony_ci u32 top; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#define MXL_ANALOG_MODE 0 9262306a36Sopenharmony_ci#define MXL_DIGITAL_MODE 1 9362306a36Sopenharmony_ci u8 mod_mode; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#define MXL_ZERO_IF 0 9662306a36Sopenharmony_ci#define MXL_LOW_IF 1 9762306a36Sopenharmony_ci u8 if_mode; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci /* Some boards need to override the built-in logic for determining 10062306a36Sopenharmony_ci the gain when in QAM mode (the HVR-1600 is one such case) */ 10162306a36Sopenharmony_ci u8 qam_gain; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci /* Stuff I don't know what to do with */ 10462306a36Sopenharmony_ci u8 AgcMasterByte; 10562306a36Sopenharmony_ci}; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MXL5005S) 10862306a36Sopenharmony_ciextern struct dvb_frontend *mxl5005s_attach(struct dvb_frontend *fe, 10962306a36Sopenharmony_ci struct i2c_adapter *i2c, 11062306a36Sopenharmony_ci struct mxl5005s_config *config); 11162306a36Sopenharmony_ci#else 11262306a36Sopenharmony_cistatic inline struct dvb_frontend *mxl5005s_attach(struct dvb_frontend *fe, 11362306a36Sopenharmony_ci struct i2c_adapter *i2c, 11462306a36Sopenharmony_ci struct mxl5005s_config *config) 11562306a36Sopenharmony_ci{ 11662306a36Sopenharmony_ci printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 11762306a36Sopenharmony_ci return NULL; 11862306a36Sopenharmony_ci} 11962306a36Sopenharmony_ci#endif /* CONFIG_DVB_TUNER_MXL5005S */ 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci#endif /* __MXL5005S_H */ 12262306a36Sopenharmony_ci 123