Linux 6.12-rc1
[linux-2.6-block.git] / drivers / media / tuners / tda18271.h
CommitLineData
74ba9207 1/* SPDX-License-Identifier: GPL-2.0-or-later */
5bea1cd3
MK
2/*
3 tda18271.h - header for the Philips / NXP TDA18271 silicon tuner
4
59067f7e 5 Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org>
5bea1cd3 6
5bea1cd3
MK
7*/
8
9#ifndef __TDA18271_H__
10#define __TDA18271_H__
11
12#include <linux/i2c.h>
fada1935 13#include <media/dvb_frontend.h>
5bea1cd3 14
f21e0d7f 15struct tda18271_std_map_item {
2ba65d51 16 u16 if_freq;
7f7203df
MK
17
18 /* EP3[4:3] */
19 unsigned int agc_mode:2;
20 /* EP3[2:0] */
21 unsigned int std:3;
22 /* EP4[7] */
c293d0a7 23 unsigned int fm_rfn:1;
14c74b23
MK
24 /* EP4[4:2] */
25 unsigned int if_lvl:3;
c0dc0c11
MK
26 /* EB22[6:0] */
27 unsigned int rfagc_top:7;
f21e0d7f
MK
28};
29
30struct tda18271_std_map {
c353f42f 31 struct tda18271_std_map_item fm_radio;
f21e0d7f
MK
32 struct tda18271_std_map_item atv_b;
33 struct tda18271_std_map_item atv_dk;
34 struct tda18271_std_map_item atv_gh;
35 struct tda18271_std_map_item atv_i;
36 struct tda18271_std_map_item atv_l;
37 struct tda18271_std_map_item atv_lc;
38 struct tda18271_std_map_item atv_mn;
39 struct tda18271_std_map_item atsc_6;
40 struct tda18271_std_map_item dvbt_6;
41 struct tda18271_std_map_item dvbt_7;
42 struct tda18271_std_map_item dvbt_8;
43 struct tda18271_std_map_item qam_6;
ce0e93a5 44 struct tda18271_std_map_item qam_7;
f21e0d7f
MK
45 struct tda18271_std_map_item qam_8;
46};
47
868f5ccd
MK
48enum tda18271_role {
49 TDA18271_MASTER = 0,
50 TDA18271_SLAVE,
51};
52
e435f95c
MK
53enum tda18271_i2c_gate {
54 TDA18271_GATE_AUTO = 0,
55 TDA18271_GATE_ANALOG,
56 TDA18271_GATE_DIGITAL,
57};
58
4240b460 59enum tda18271_output_options {
dda1bb4e 60 /* slave tuner output & loop through & xtal oscillator always on */
4240b460 61 TDA18271_OUTPUT_LT_XT_ON = 0,
81259f21 62
dda1bb4e 63 /* slave tuner output loop through off */
4240b460 64 TDA18271_OUTPUT_LT_OFF = 1,
81259f21 65
4240b460
MK
66 /* xtal oscillator off */
67 TDA18271_OUTPUT_XT_OFF = 2,
81259f21
MK
68};
69
1724c8fa
MK
70enum tda18271_small_i2c {
71 TDA18271_39_BYTE_CHUNK_INIT = 0,
e350d44f
MCC
72 TDA18271_16_BYTE_CHUNK_INIT = 16,
73 TDA18271_08_BYTE_CHUNK_INIT = 8,
74 TDA18271_03_BYTE_CHUNK_INIT = 3,
1724c8fa
MK
75};
76
f21e0d7f 77struct tda18271_config {
0e1fab90 78 /* override default if freq / std settings (optional) */
f21e0d7f 79 struct tda18271_std_map *std_map;
0e1fab90 80
868f5ccd
MK
81 /* master / slave tuner: master uses main pll, slave uses cal pll */
82 enum tda18271_role role;
83
0e1fab90 84 /* use i2c gate provided by analog or digital demod */
f21e0d7f 85 enum tda18271_i2c_gate gate;
5555309c 86
4240b460
MK
87 /* output options that can be disabled */
88 enum tda18271_output_options output_opt;
81259f21 89
25985edc 90 /* some i2c providers can't write all 39 registers at once */
1724c8fa
MK
91 enum tda18271_small_i2c small_i2c;
92
81016b49
MK
93 /* force rf tracking filter calibration on startup */
94 unsigned int rf_cal_on_startup:1;
95
6b82e0cf
MK
96 /* prevent any register access during attach(),
97 * delaying both IR & RF calibration until init()
98 * module option 'cal' overrides this delay */
99 unsigned int delay_cal:1;
100
adcc4b3e
MK
101 /* interface to saa713x / tda829x */
102 unsigned int config;
103};
104
105#define TDA18271_CALLBACK_CMD_AGC_ENABLE 0
106
107enum tda18271_mode {
108 TDA18271_ANALOG = 0,
109 TDA18271_DIGITAL,
f21e0d7f
MK
110};
111
9b174527 112#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271)
5bea1cd3 113extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
e435f95c 114 struct i2c_adapter *i2c,
f21e0d7f 115 struct tda18271_config *cfg);
5bea1cd3
MK
116#else
117static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe,
118 u8 addr,
e435f95c 119 struct i2c_adapter *i2c,
f21e0d7f 120 struct tda18271_config *cfg)
5bea1cd3 121{
271ddbf7 122 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
5bea1cd3
MK
123 return NULL;
124}
125#endif
126
127#endif /* __TDA18271_H__ */