^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * mxl111sf-tuner.h - driver for the MaxLinear MXL111SF CMOS tuner
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifndef __MXL111SF_TUNER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define __MXL111SF_TUNER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <media/dvb_frontend.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include "mxl111sf.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) enum mxl_if_freq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) MXL_IF_LO = 0x00, /* other IF < 9MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) MXL_IF_4_0 = 0x01, /* 4.0 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) MXL_IF_4_5 = 0x02, /* 4.5 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) MXL_IF_4_57 = 0x03, /* 4.57 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) MXL_IF_5_0 = 0x04, /* 5.0 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) MXL_IF_5_38 = 0x05, /* 5.38 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) MXL_IF_6_0 = 0x06, /* 6.0 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) MXL_IF_6_28 = 0x07, /* 6.28 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) MXL_IF_7_2 = 0x08, /* 7.2 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) MXL_IF_35_25 = 0x09, /* 35.25 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) MXL_IF_36 = 0x0a, /* 36 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) MXL_IF_36_15 = 0x0b, /* 36.15 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) MXL_IF_44 = 0x0c, /* 44 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) MXL_IF_HI = 0x0f, /* other IF > 35 MHz and < 45 MHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct mxl111sf_tuner_config {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) enum mxl_if_freq if_freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) unsigned int invert_spectrum:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) int (*read_reg)(struct mxl111sf_state *state, u8 addr, u8 *data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) int (*write_reg)(struct mxl111sf_state *state, u8 addr, u8 data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) int (*program_regs)(struct mxl111sf_state *state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct mxl111sf_reg_ctrl_info *ctrl_reg_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) int (*top_master_ctrl)(struct mxl111sf_state *state, int onoff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) int (*ant_hunt)(struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) /* ------------------------------------------------------------------------ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #if IS_ENABLED(CONFIG_DVB_USB_MXL111SF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) extern
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct mxl111sf_state *mxl_state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) const struct mxl111sf_tuner_config *cfg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) static inline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) struct mxl111sf_state *mxl_state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) const struct mxl111sf_tuner_config *cfg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #endif /* __MXL111SF_TUNER_H__ */