Commit | Line | Data |
---|---|---|
395d00d1 | 1 | /* |
7978b8a1 | 2 | * Montage Technology M88DS3103/M88RS6000 demodulator driver |
395d00d1 AP |
3 | * |
4 | * Copyright (C) 2013 Antti Palosaari <crope@iki.fi> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
395d00d1 AP |
15 | */ |
16 | ||
17 | #ifndef M88DS3103_H | |
18 | #define M88DS3103_H | |
19 | ||
20 | #include <linux/dvb/frontend.h> | |
21 | ||
f01919e8 AP |
22 | /* |
23 | * I2C address | |
24 | * 0x68, | |
25 | */ | |
26 | ||
27 | /** | |
28 | * struct m88ds3103_platform_data - Platform data for the m88ds3103 driver | |
29 | * @clk: Clock frequency. | |
30 | * @i2c_wr_max: Max bytes I2C adapter can write at once. | |
31 | * @ts_mode: TS mode. | |
32 | * @ts_clk: TS clock (KHz). | |
33 | * @ts_clk_pol: TS clk polarity. 1-active at falling edge; 0-active at rising | |
34 | * edge. | |
35 | * @spec_inv: Input spectrum inversion. | |
36 | * @agc: AGC configuration. | |
37 | * @agc_inv: AGC polarity. | |
38 | * @clk_out: Clock output. | |
39 | * @envelope_mode: DiSEqC envelope mode. | |
40 | * @lnb_hv_pol: LNB H/V pin polarity. 0: pin high set to VOLTAGE_18, pin low to | |
41 | * set VOLTAGE_13. 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18. | |
42 | * @lnb_en_pol: LNB enable pin polarity. 0: pin high to disable, pin low to | |
43 | * enable. 1: pin high to enable, pin low to disable. | |
44 | * @get_dvb_frontend: Get DVB frontend. | |
45 | * @get_i2c_adapter: Get I2C adapter. | |
46 | */ | |
47 | ||
48 | struct m88ds3103_platform_data { | |
49 | u32 clk; | |
50 | u16 i2c_wr_max; | |
51 | #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ | |
52 | #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ | |
53 | #define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ | |
54 | #define M88DS3103_TS_CI 3 /* TS CI Mode */ | |
55 | u8 ts_mode:2; | |
56 | u32 ts_clk; | |
57 | u8 ts_clk_pol:1; | |
58 | u8 spec_inv:1; | |
59 | u8 agc; | |
60 | u8 agc_inv:1; | |
61 | #define M88DS3103_CLOCK_OUT_DISABLED 0 | |
62 | #define M88DS3103_CLOCK_OUT_ENABLED 1 | |
63 | #define M88DS3103_CLOCK_OUT_ENABLED_DIV2 2 | |
64 | u8 clk_out:2; | |
65 | u8 envelope_mode:1; | |
66 | u8 lnb_hv_pol:1; | |
67 | u8 lnb_en_pol:1; | |
68 | ||
69 | struct dvb_frontend* (*get_dvb_frontend)(struct i2c_client *); | |
70 | struct i2c_adapter* (*get_i2c_adapter)(struct i2c_client *); | |
71 | ||
72 | /* private: For legacy media attach wrapper. Do not set value. */ | |
73 | u8 attach_in_use:1; | |
74 | }; | |
75 | ||
76 | /* | |
77 | * Do not add new m88ds3103_attach() users! Use I2C bindings instead. | |
78 | */ | |
395d00d1 AP |
79 | struct m88ds3103_config { |
80 | /* | |
81 | * I2C address | |
58b7450d | 82 | * Default: none, must set |
395d00d1 AP |
83 | * 0x68, ... |
84 | */ | |
85 | u8 i2c_addr; | |
86 | ||
87 | /* | |
88 | * clock | |
58b7450d | 89 | * Default: none, must set |
395d00d1 AP |
90 | * 27000000 |
91 | */ | |
92 | u32 clock; | |
93 | ||
94 | /* | |
95 | * max bytes I2C provider is asked to write at once | |
58b7450d | 96 | * Default: none, must set |
395d00d1 AP |
97 | * 33, 65, ... |
98 | */ | |
99 | u16 i2c_wr_max; | |
100 | ||
101 | /* | |
102 | * TS output mode | |
58b7450d | 103 | * Default: M88DS3103_TS_SERIAL |
395d00d1 AP |
104 | */ |
105 | #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ | |
106 | #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ | |
79d09330 | 107 | #define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ |
108 | #define M88DS3103_TS_CI 3 /* TS CI Mode */ | |
395d00d1 AP |
109 | u8 ts_mode; |
110 | ||
79d09330 | 111 | /* |
112 | * TS clk in KHz | |
113 | * Default: 0. | |
114 | */ | |
115 | u32 ts_clk; | |
116 | ||
117 | /* | |
118 | * TS clk polarity. | |
119 | * Default: 0. 1-active at falling edge; 0-active at rising edge. | |
120 | */ | |
121 | u8 ts_clk_pol:1; | |
122 | ||
395d00d1 AP |
123 | /* |
124 | * spectrum inversion | |
58b7450d | 125 | * Default: 0 |
395d00d1 AP |
126 | */ |
127 | u8 spec_inv:1; | |
128 | ||
129 | /* | |
130 | * AGC polarity | |
58b7450d | 131 | * Default: 0 |
395d00d1 AP |
132 | */ |
133 | u8 agc_inv:1; | |
134 | ||
135 | /* | |
136 | * clock output | |
58b7450d | 137 | * Default: M88DS3103_CLOCK_OUT_DISABLED |
395d00d1 AP |
138 | */ |
139 | #define M88DS3103_CLOCK_OUT_DISABLED 0 | |
140 | #define M88DS3103_CLOCK_OUT_ENABLED 1 | |
141 | #define M88DS3103_CLOCK_OUT_ENABLED_DIV2 2 | |
142 | u8 clock_out; | |
143 | ||
144 | /* | |
145 | * DiSEqC envelope mode | |
58b7450d | 146 | * Default: 0 |
395d00d1 AP |
147 | */ |
148 | u8 envelope_mode:1; | |
149 | ||
58b7450d AP |
150 | /* |
151 | * AGC configuration | |
152 | * Default: none, must set | |
153 | */ | |
395d00d1 | 154 | u8 agc; |
79d09330 | 155 | |
156 | /* | |
157 | * LNB H/V pin polarity | |
158 | * Default: 0. | |
159 | * 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18. | |
160 | * 0: pin high set to VOLTAGE_18, pin low to set VOLTAGE_13. | |
161 | */ | |
162 | u8 lnb_hv_pol:1; | |
163 | ||
164 | /* | |
165 | * LNB enable pin polarity | |
166 | * Default: 0. | |
167 | * 1: pin high to enable, pin low to disable. | |
168 | * 0: pin high to disable, pin low to enable. | |
169 | */ | |
170 | u8 lnb_en_pol:1; | |
395d00d1 AP |
171 | }; |
172 | ||
395d00d1 AP |
173 | #if defined(CONFIG_DVB_M88DS3103) || \ |
174 | (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE)) | |
175 | extern struct dvb_frontend *m88ds3103_attach( | |
176 | const struct m88ds3103_config *config, | |
177 | struct i2c_adapter *i2c, | |
178 | struct i2c_adapter **tuner_i2c); | |
0f91c9d6 | 179 | extern int m88ds3103_get_agc_pwm(struct dvb_frontend *fe, u8 *_agc_pwm); |
395d00d1 AP |
180 | #else |
181 | static inline struct dvb_frontend *m88ds3103_attach( | |
182 | const struct m88ds3103_config *config, | |
183 | struct i2c_adapter *i2c, | |
184 | struct i2c_adapter **tuner_i2c) | |
185 | { | |
186 | pr_warn("%s: driver disabled by Kconfig\n", __func__); | |
187 | return NULL; | |
188 | } | |
0f91c9d6 | 189 | #define m88ds3103_get_agc_pwm NULL |
395d00d1 AP |
190 | #endif |
191 | ||
192 | #endif |