2 * tvp5150 - Texas Instruments TVP5150A(M) video decoder driver
4 * Copyright (c) 2005 Mauro Carvalho Chehab (mchehab@brturbo.com.br)
5 * This code is placed under the terms of the GNU General Public License
8 #include <linux/videodev.h>
10 #include <linux/videodev.h>
11 #include <linux/delay.h>
12 #include <linux/video_decoder.h>
14 #include "tvp5150_reg.h"
16 MODULE_DESCRIPTION("Texas Instruments TVP5150A video decoder driver"); /* standard i2c insmod options */
17 MODULE_AUTHOR("Mauro Carvalho Chehab");
18 MODULE_LICENSE("GPL");
20 static unsigned short normal_i2c
[] = {
29 module_param(debug
, int, 0);
30 MODULE_PARM_DESC(debug
, "Debug level (0-1)");
32 #define dprintk(num, format, args...) \
35 printk(format , ##args); \
39 struct i2c_client
*client
;
50 static inline int tvp5150_read(struct i2c_client
*c
, unsigned char addr
)
52 unsigned char buffer
[1];
56 if (1 != (rc
= i2c_master_send(c
, buffer
, 1)))
57 dprintk(0, "i2c i/o error: rc == %d (should be 1)\n", rc
);
61 if (1 != (rc
= i2c_master_recv(c
, buffer
, 1)))
62 dprintk(0, "i2c i/o error: rc == %d (should be 1)\n", rc
);
67 static inline void tvp5150_write(struct i2c_client
*c
, unsigned char addr
,
70 unsigned char buffer
[2];
72 /* struct tvp5150 *core = i2c_get_clientdata(c); */
76 dprintk(1,"tvp5150: writing 0x%02x 0x%02x\n",buffer
[0],buffer
[1]);
77 if (2 != (rc
= i2c_master_send(c
, buffer
, 2)))
78 dprintk(0, "i2c i/o error: rc == %d (should be 2)\n", rc
);
81 static void dump_reg(struct i2c_client
*c
)
83 printk("tvp5150: Video input source selection #1 = 0x%02x\n",
84 tvp5150_read(c
, TVP5150_VD_IN_SRC_SEL_1
));
85 printk("tvp5150: Analog channel controls = 0x%02x\n",
86 tvp5150_read(c
, TVP5150_ANAL_CHL_CTL
));
87 printk("tvp5150: Operation mode controls = 0x%02x\n",
88 tvp5150_read(c
, TVP5150_OP_MODE_CTL
));
89 printk("tvp5150: Miscellaneous controls = 0x%02x\n",
90 tvp5150_read(c
, TVP5150_MISC_CTL
));
91 printk("tvp5150: Autoswitch mask: TVP5150A / TVP5150AM = 0x%02x\n",
92 tvp5150_read(c
, TVP5150_AUTOSW_MSK
));
93 printk("tvp5150: Color killer threshold control = 0x%02x\n",
94 tvp5150_read(c
, TVP5150_COLOR_KIL_THSH_CTL
));
95 printk("tvp5150: Luminance processing control #1 = 0x%02x\n",
96 tvp5150_read(c
, TVP5150_LUMA_PROC_CTL_1
));
97 printk("tvp5150: Luminance processing control #2 = 0x%02x\n",
98 tvp5150_read(c
, TVP5150_LUMA_PROC_CTL_2
));
99 printk("tvp5150: Brightness control = 0x%02x\n",
100 tvp5150_read(c
, TVP5150_BRIGHT_CTL
));
101 printk("tvp5150: Color saturation control = 0x%02x\n",
102 tvp5150_read(c
, TVP5150_SATURATION_CTL
));
103 printk("tvp5150: Hue control = 0x%02x\n",
104 tvp5150_read(c
, TVP5150_HUE_CTL
));
105 printk("tvp5150: Contrast control = 0x%02x\n",
106 tvp5150_read(c
, TVP5150_CONTRAST_CTL
));
107 printk("tvp5150: Outputs and data rates select = 0x%02x\n",
108 tvp5150_read(c
, TVP5150_DATA_RATE_SEL
));
109 printk("tvp5150: Luminance processing control #3 = 0x%02x\n",
110 tvp5150_read(c
, TVP5150_LUMA_PROC_CTL_3
));
111 printk("tvp5150: Configuration shared pins = 0x%02x\n",
112 tvp5150_read(c
, TVP5150_CONF_SHARED_PIN
));
113 printk("tvp5150: Active video cropping start MSB = 0x%02x\n",
114 tvp5150_read(c
, TVP5150_ACT_VD_CROP_ST_MSB
));
115 printk("tvp5150: Active video cropping start LSB = 0x%02x\n",
116 tvp5150_read(c
, TVP5150_ACT_VD_CROP_ST_LSB
));
117 printk("tvp5150: Active video cropping stop MSB = 0x%02x\n",
118 tvp5150_read(c
, TVP5150_ACT_VD_CROP_STP_MSB
));
119 printk("tvp5150: Active video cropping stop LSB = 0x%02x\n",
120 tvp5150_read(c
, TVP5150_ACT_VD_CROP_STP_LSB
));
121 printk("tvp5150: Genlock/RTC = 0x%02x\n",
122 tvp5150_read(c
, TVP5150_GENLOCK
));
123 printk("tvp5150: Horizontal sync start = 0x%02x\n",
124 tvp5150_read(c
, TVP5150_HORIZ_SYNC_START
));
125 printk("tvp5150: Vertical blanking start = 0x%02x\n",
126 tvp5150_read(c
, TVP5150_VERT_BLANKING_START
));
127 printk("tvp5150: Vertical blanking stop = 0x%02x\n",
128 tvp5150_read(c
, TVP5150_VERT_BLANKING_STOP
));
129 printk("tvp5150: Chrominance processing control #1 = 0x%02x\n",
130 tvp5150_read(c
, TVP5150_CHROMA_PROC_CTL_1
));
131 printk("tvp5150: Chrominance processing control #2 = 0x%02x\n",
132 tvp5150_read(c
, TVP5150_CHROMA_PROC_CTL_2
));
133 printk("tvp5150: Interrupt reset register B = 0x%02x\n",
134 tvp5150_read(c
, TVP5150_INT_RESET_REG_B
));
135 printk("tvp5150: Interrupt enable register B = 0x%02x\n",
136 tvp5150_read(c
, TVP5150_INT_ENABLE_REG_B
));
137 printk("tvp5150: Interrupt configuration register B = 0x%02x\n",
138 tvp5150_read(c
, TVP5150_INTT_CONFIG_REG_B
));
139 printk("tvp5150: Video standard = 0x%02x\n",
140 tvp5150_read(c
, TVP5150_VIDEO_STD
));
141 printk("tvp5150: Cb gain factor = 0x%02x\n",
142 tvp5150_read(c
, TVP5150_CB_GAIN_FACT
));
143 printk("tvp5150: Cr gain factor = 0x%02x\n",
144 tvp5150_read(c
, TVP5150_CR_GAIN_FACTOR
));
145 printk("tvp5150: Macrovision on counter = 0x%02x\n",
146 tvp5150_read(c
, TVP5150_MACROVISION_ON_CTR
));
147 printk("tvp5150: Macrovision off counter = 0x%02x\n",
148 tvp5150_read(c
, TVP5150_MACROVISION_OFF_CTR
));
149 printk("tvp5150: revision select (TVP5150AM1 only) = 0x%02x\n",
150 tvp5150_read(c
, TVP5150_REV_SELECT
));
151 printk("tvp5150: MSB of device ID = 0x%02x\n",
152 tvp5150_read(c
, TVP5150_MSB_DEV_ID
));
153 printk("tvp5150: LSB of device ID = 0x%02x\n",
154 tvp5150_read(c
, TVP5150_LSB_DEV_ID
));
155 printk("tvp5150: ROM major version = 0x%02x\n",
156 tvp5150_read(c
, TVP5150_ROM_MAJOR_VER
));
157 printk("tvp5150: ROM minor version = 0x%02x\n",
158 tvp5150_read(c
, TVP5150_ROM_MINOR_VER
));
159 printk("tvp5150: Vertical line count MSB = 0x%02x\n",
160 tvp5150_read(c
, TVP5150_VERT_LN_COUNT_MSB
));
161 printk("tvp5150: Vertical line count LSB = 0x%02x\n",
162 tvp5150_read(c
, TVP5150_VERT_LN_COUNT_LSB
));
163 printk("tvp5150: Interrupt status register B = 0x%02x\n",
164 tvp5150_read(c
, TVP5150_INT_STATUS_REG_B
));
165 printk("tvp5150: Interrupt active register B = 0x%02x\n",
166 tvp5150_read(c
, TVP5150_INT_ACTIVE_REG_B
));
167 printk("tvp5150: Status register #1 = 0x%02x\n",
168 tvp5150_read(c
, TVP5150_STATUS_REG_1
));
169 printk("tvp5150: Status register #2 = 0x%02x\n",
170 tvp5150_read(c
, TVP5150_STATUS_REG_2
));
171 printk("tvp5150: Status register #3 = 0x%02x\n",
172 tvp5150_read(c
, TVP5150_STATUS_REG_3
));
173 printk("tvp5150: Status register #4 = 0x%02x\n",
174 tvp5150_read(c
, TVP5150_STATUS_REG_4
));
175 printk("tvp5150: Status register #5 = 0x%02x\n",
176 tvp5150_read(c
, TVP5150_STATUS_REG_5
));
177 printk("tvp5150: Closed caption data registers = 0x%02x\n",
178 tvp5150_read(c
, TVP5150_CC_DATA_REG1
));
179 printk("tvp5150: Closed caption data registers = 0x%02x\n",
180 tvp5150_read(c
, TVP5150_CC_DATA_REG2
));
181 printk("tvp5150: Closed caption data registers = 0x%02x\n",
182 tvp5150_read(c
, TVP5150_CC_DATA_REG3
));
183 printk("tvp5150: Closed caption data registers = 0x%02x\n",
184 tvp5150_read(c
, TVP5150_CC_DATA_REG4
));
185 printk("tvp5150: WSS data registers = 0x%02x\n",
186 tvp5150_read(c
, TVP5150_WSS_DATA_REG1
));
187 printk("tvp5150: WSS data registers = 0x%02x\n",
188 tvp5150_read(c
, TVP5150_WSS_DATA_REG2
));
189 printk("tvp5150: WSS data registers = 0x%02x\n",
190 tvp5150_read(c
, TVP5150_WSS_DATA_REG3
));
191 printk("tvp5150: WSS data registers = 0x%02x\n",
192 tvp5150_read(c
, TVP5150_WSS_DATA_REG4
));
193 printk("tvp5150: WSS data registers = 0x%02x\n",
194 tvp5150_read(c
, TVP5150_WSS_DATA_REG5
));
195 printk("tvp5150: WSS data registers = 0x%02x\n",
196 tvp5150_read(c
, TVP5150_WSS_DATA_REG6
));
197 printk("tvp5150: VPS data registers = 0x%02x\n",
198 tvp5150_read(c
, TVP5150_VPS_DATA_REG1
));
199 printk("tvp5150: VPS data registers = 0x%02x\n",
200 tvp5150_read(c
, TVP5150_VPS_DATA_REG2
));
201 printk("tvp5150: VPS data registers = 0x%02x\n",
202 tvp5150_read(c
, TVP5150_VPS_DATA_REG3
));
203 printk("tvp5150: VPS data registers = 0x%02x\n",
204 tvp5150_read(c
, TVP5150_VPS_DATA_REG4
));
205 printk("tvp5150: VPS data registers = 0x%02x\n",
206 tvp5150_read(c
, TVP5150_VPS_DATA_REG5
));
207 printk("tvp5150: VPS data registers = 0x%02x\n",
208 tvp5150_read(c
, TVP5150_VPS_DATA_REG6
));
209 printk("tvp5150: VPS data registers = 0x%02x\n",
210 tvp5150_read(c
, TVP5150_VPS_DATA_REG7
));
211 printk("tvp5150: VPS data registers = 0x%02x\n",
212 tvp5150_read(c
, TVP5150_VPS_DATA_REG8
));
213 printk("tvp5150: VPS data registers = 0x%02x\n",
214 tvp5150_read(c
, TVP5150_VPS_DATA_REG9
));
215 printk("tvp5150: VPS data registers = 0x%02x\n",
216 tvp5150_read(c
, TVP5150_VPS_DATA_REG10
));
217 printk("tvp5150: VPS data registers = 0x%02x\n",
218 tvp5150_read(c
, TVP5150_VPS_DATA_REG11
));
219 printk("tvp5150: VPS data registers = 0x%02x\n",
220 tvp5150_read(c
, TVP5150_VPS_DATA_REG12
));
221 printk("tvp5150: VPS data registers = 0x%02x\n",
222 tvp5150_read(c
, TVP5150_VPS_DATA_REG13
));
223 printk("tvp5150: VITC data registers = 0x%02x\n",
224 tvp5150_read(c
, TVP5150_VITC_DATA_REG1
));
225 printk("tvp5150: VITC data registers = 0x%02x\n",
226 tvp5150_read(c
, TVP5150_VITC_DATA_REG2
));
227 printk("tvp5150: VITC data registers = 0x%02x\n",
228 tvp5150_read(c
, TVP5150_VITC_DATA_REG3
));
229 printk("tvp5150: VITC data registers = 0x%02x\n",
230 tvp5150_read(c
, TVP5150_VITC_DATA_REG4
));
231 printk("tvp5150: VITC data registers = 0x%02x\n",
232 tvp5150_read(c
, TVP5150_VITC_DATA_REG5
));
233 printk("tvp5150: VITC data registers = 0x%02x\n",
234 tvp5150_read(c
, TVP5150_VITC_DATA_REG6
));
235 printk("tvp5150: VITC data registers = 0x%02x\n",
236 tvp5150_read(c
, TVP5150_VITC_DATA_REG7
));
237 printk("tvp5150: VITC data registers = 0x%02x\n",
238 tvp5150_read(c
, TVP5150_VITC_DATA_REG8
));
239 printk("tvp5150: VITC data registers = 0x%02x\n",
240 tvp5150_read(c
, TVP5150_VITC_DATA_REG9
));
241 printk("tvp5150: VBI FIFO read data = 0x%02x\n",
242 tvp5150_read(c
, TVP5150_VBI_FIFO_READ_DATA
));
243 printk("tvp5150: Teletext filter 1 = 0x%02x\n",
244 tvp5150_read(c
, TVP5150_TELETEXT_FIL_1_1
));
245 printk("tvp5150: Teletext filter 1 = 0x%02x\n",
246 tvp5150_read(c
, TVP5150_TELETEXT_FIL_1_2
));
247 printk("tvp5150: Teletext filter 1 = 0x%02x\n",
248 tvp5150_read(c
, TVP5150_TELETEXT_FIL_1_3
));
249 printk("tvp5150: Teletext filter 1 = 0x%02x\n",
250 tvp5150_read(c
, TVP5150_TELETEXT_FIL_1_4
));
251 printk("tvp5150: Teletext filter 1 = 0x%02x\n",
252 tvp5150_read(c
, TVP5150_TELETEXT_FIL_1_5
));
253 printk("tvp5150: Teletext filter 2 = 0x%02x\n",
254 tvp5150_read(c
, TVP5150_TELETEXT_FIL_2_1
));
255 printk("tvp5150: Teletext filter 2 = 0x%02x\n",
256 tvp5150_read(c
, TVP5150_TELETEXT_FIL_2_2
));
257 printk("tvp5150: Teletext filter 2 = 0x%02x\n",
258 tvp5150_read(c
, TVP5150_TELETEXT_FIL_2_3
));
259 printk("tvp5150: Teletext filter 2 = 0x%02x\n",
260 tvp5150_read(c
, TVP5150_TELETEXT_FIL_2_4
));
261 printk("tvp5150: Teletext filter 2 = 0x%02x\n",
262 tvp5150_read(c
, TVP5150_TELETEXT_FIL_2_5
));
263 printk("tvp5150: Teletext filter enable = 0x%02x\n",
264 tvp5150_read(c
, TVP5150_TELETEXT_FIL_ENA
));
265 printk("tvp5150: Interrupt status register A = 0x%02x\n",
266 tvp5150_read(c
, TVP5150_INT_STATUS_REG_A
));
267 printk("tvp5150: Interrupt enable register A = 0x%02x\n",
268 tvp5150_read(c
, TVP5150_INT_ENABLE_REG_A
));
269 printk("tvp5150: Interrupt configuration = 0x%02x\n",
270 tvp5150_read(c
, TVP5150_INT_CONF
));
271 printk("tvp5150: VDP configuration RAM data = 0x%02x\n",
272 tvp5150_read(c
, TVP5150_VDP_CONF_RAM_DATA
));
273 printk("tvp5150: Configuration RAM address low byte = 0x%02x\n",
274 tvp5150_read(c
, TVP5150_CONF_RAM_ADDR_LOW
));
275 printk("tvp5150: Configuration RAM address high byte = 0x%02x\n",
276 tvp5150_read(c
, TVP5150_CONF_RAM_ADDR_HIGH
));
277 printk("tvp5150: VDP status register = 0x%02x\n",
278 tvp5150_read(c
, TVP5150_VDP_STATUS_REG
));
279 printk("tvp5150: FIFO word count = 0x%02x\n",
280 tvp5150_read(c
, TVP5150_FIFO_WORD_COUNT
));
281 printk("tvp5150: FIFO interrupt threshold = 0x%02x\n",
282 tvp5150_read(c
, TVP5150_FIFO_INT_THRESHOLD
));
283 printk("tvp5150: FIFO reset = 0x%02x\n",
284 tvp5150_read(c
, TVP5150_FIFO_RESET
));
285 printk("tvp5150: Line number interrupt = 0x%02x\n",
286 tvp5150_read(c
, TVP5150_LINE_NUMBER_INT
));
287 printk("tvp5150: Pixel alignment register low byte = 0x%02x\n",
288 tvp5150_read(c
, TVP5150_PIX_ALIGN_REG_LOW
));
289 printk("tvp5150: Pixel alignment register high byte = 0x%02x\n",
290 tvp5150_read(c
, TVP5150_PIX_ALIGN_REG_HIGH
));
291 printk("tvp5150: FIFO output control = 0x%02x\n",
292 tvp5150_read(c
, TVP5150_FIFO_OUT_CTRL
));
293 printk("tvp5150: Full field enable 1 = 0x%02x\n",
294 tvp5150_read(c
, TVP5150_FULL_FIELD_ENA_1
));
295 printk("tvp5150: Full field enable 2 = 0x%02x\n",
296 tvp5150_read(c
, TVP5150_FULL_FIELD_ENA_2
));
297 printk("tvp5150: Line mode registers = 0x%02x\n",
298 tvp5150_read(c
, TVP5150_LINE_MODE_REG_1
));
299 printk("tvp5150: Line mode registers = 0x%02x\n",
300 tvp5150_read(c
, TVP5150_LINE_MODE_REG_2
));
301 printk("tvp5150: Line mode registers = 0x%02x\n",
302 tvp5150_read(c
, TVP5150_LINE_MODE_REG_3
));
303 printk("tvp5150: Line mode registers = 0x%02x\n",
304 tvp5150_read(c
, TVP5150_LINE_MODE_REG_4
));
305 printk("tvp5150: Line mode registers = 0x%02x\n",
306 tvp5150_read(c
, TVP5150_LINE_MODE_REG_5
));
307 printk("tvp5150: Line mode registers = 0x%02x\n",
308 tvp5150_read(c
, TVP5150_LINE_MODE_REG_6
));
309 printk("tvp5150: Line mode registers = 0x%02x\n",
310 tvp5150_read(c
, TVP5150_LINE_MODE_REG_7
));
311 printk("tvp5150: Line mode registers = 0x%02x\n",
312 tvp5150_read(c
, TVP5150_LINE_MODE_REG_8
));
313 printk("tvp5150: Line mode registers = 0x%02x\n",
314 tvp5150_read(c
, TVP5150_LINE_MODE_REG_9
));
315 printk("tvp5150: Line mode registers = 0x%02x\n",
316 tvp5150_read(c
, TVP5150_LINE_MODE_REG_10
));
317 printk("tvp5150: Line mode registers = 0x%02x\n",
318 tvp5150_read(c
, TVP5150_LINE_MODE_REG_11
));
319 printk("tvp5150: Line mode registers = 0x%02x\n",
320 tvp5150_read(c
, TVP5150_LINE_MODE_REG_12
));
321 printk("tvp5150: Line mode registers = 0x%02x\n",
322 tvp5150_read(c
, TVP5150_LINE_MODE_REG_13
));
323 printk("tvp5150: Line mode registers = 0x%02x\n",
324 tvp5150_read(c
, TVP5150_LINE_MODE_REG_14
));
325 printk("tvp5150: Line mode registers = 0x%02x\n",
326 tvp5150_read(c
, TVP5150_LINE_MODE_REG_15
));
327 printk("tvp5150: Line mode registers = 0x%02x\n",
328 tvp5150_read(c
, TVP5150_LINE_MODE_REG_16
));
329 printk("tvp5150: Line mode registers = 0x%02x\n",
330 tvp5150_read(c
, TVP5150_LINE_MODE_REG_17
));
331 printk("tvp5150: Line mode registers = 0x%02x\n",
332 tvp5150_read(c
, TVP5150_LINE_MODE_REG_18
));
333 printk("tvp5150: Line mode registers = 0x%02x\n",
334 tvp5150_read(c
, TVP5150_LINE_MODE_REG_19
));
335 printk("tvp5150: Line mode registers = 0x%02x\n",
336 tvp5150_read(c
, TVP5150_LINE_MODE_REG_20
));
337 printk("tvp5150: Line mode registers = 0x%02x\n",
338 tvp5150_read(c
, TVP5150_LINE_MODE_REG_21
));
339 printk("tvp5150: Line mode registers = 0x%02x\n",
340 tvp5150_read(c
, TVP5150_LINE_MODE_REG_22
));
341 printk("tvp5150: Line mode registers = 0x%02x\n",
342 tvp5150_read(c
, TVP5150_LINE_MODE_REG_23
));
343 printk("tvp5150: Line mode registers = 0x%02x\n",
344 tvp5150_read(c
, TVP5150_LINE_MODE_REG_24
));
345 printk("tvp5150: Line mode registers = 0x%02x\n",
346 tvp5150_read(c
, TVP5150_LINE_MODE_REG_25
));
347 printk("tvp5150: Line mode registers = 0x%02x\n",
348 tvp5150_read(c
, TVP5150_LINE_MODE_REG_27
));
349 printk("tvp5150: Line mode registers = 0x%02x\n",
350 tvp5150_read(c
, TVP5150_LINE_MODE_REG_28
));
351 printk("tvp5150: Line mode registers = 0x%02x\n",
352 tvp5150_read(c
, TVP5150_LINE_MODE_REG_29
));
353 printk("tvp5150: Line mode registers = 0x%02x\n",
354 tvp5150_read(c
, TVP5150_LINE_MODE_REG_30
));
355 printk("tvp5150: Line mode registers = 0x%02x\n",
356 tvp5150_read(c
, TVP5150_LINE_MODE_REG_31
));
357 printk("tvp5150: Line mode registers = 0x%02x\n",
358 tvp5150_read(c
, TVP5150_LINE_MODE_REG_32
));
359 printk("tvp5150: Line mode registers = 0x%02x\n",
360 tvp5150_read(c
, TVP5150_LINE_MODE_REG_33
));
361 printk("tvp5150: Line mode registers = 0x%02x\n",
362 tvp5150_read(c
, TVP5150_LINE_MODE_REG_34
));
363 printk("tvp5150: Line mode registers = 0x%02x\n",
364 tvp5150_read(c
, TVP5150_LINE_MODE_REG_35
));
365 printk("tvp5150: Line mode registers = 0x%02x\n",
366 tvp5150_read(c
, TVP5150_LINE_MODE_REG_36
));
367 printk("tvp5150: Line mode registers = 0x%02x\n",
368 tvp5150_read(c
, TVP5150_LINE_MODE_REG_37
));
369 printk("tvp5150: Line mode registers = 0x%02x\n",
370 tvp5150_read(c
, TVP5150_LINE_MODE_REG_38
));
371 printk("tvp5150: Line mode registers = 0x%02x\n",
372 tvp5150_read(c
, TVP5150_LINE_MODE_REG_39
));
373 printk("tvp5150: Line mode registers = 0x%02x\n",
374 tvp5150_read(c
, TVP5150_LINE_MODE_REG_40
));
375 printk("tvp5150: Line mode registers = 0x%02x\n",
376 tvp5150_read(c
, TVP5150_LINE_MODE_REG_41
));
377 printk("tvp5150: Line mode registers = 0x%02x\n",
378 tvp5150_read(c
, TVP5150_LINE_MODE_REG_42
));
379 printk("tvp5150: Line mode registers = 0x%02x\n",
380 tvp5150_read(c
, TVP5150_LINE_MODE_REG_43
));
381 printk("tvp5150: Line mode registers = 0x%02x\n",
382 tvp5150_read(c
, TVP5150_LINE_MODE_REG_44
));
383 printk("tvp5150: Full field mode register = 0x%02x\n",
384 tvp5150_read(c
, TVP5150_FULL_FIELD_MODE_REG
));
387 /****************************************************************************
389 ****************************************************************************/
391 TVP5150_ANALOG_CH0
= 0,
393 TVP5150_ANALOG_CH1
= 2,
394 TVP5150_BLACK_SCREEN
= 8
397 static inline void tvp5150_selmux(struct i2c_client
*c
,
398 enum tvp5150_input input
)
400 struct tvp5150
*decoder
= i2c_get_clientdata(c
);
403 /* FIXME: It is dependent of basic driver */
407 tvp_input
=TVP5150_ANALOG_CH0
;
410 tvp_input
=TVP5150_ANALOG_CH1
;
413 tvp_input
=TVP5150_SVIDEO
;
416 tvp_input
=TVP5150_BLACK_SCREEN
;
419 if (!decoder
->enable
)
420 tvp_input
|=TVP5150_BLACK_SCREEN
;
422 tvp5150_write(c
, TVP5150_VD_IN_SRC_SEL_1
, tvp_input
);
425 static inline void tvp5150_reset(struct i2c_client
*c
)
427 struct tvp5150
*decoder
= i2c_get_clientdata(c
);
429 tvp5150_write(c
, TVP5150_CONF_SHARED_PIN
, 2);
431 /* Automatic offset and AGC enabled */
432 tvp5150_write(c
, TVP5150_ANAL_CHL_CTL
, 0x15);
434 /* Normal Operation */
435 // tvp5150_write(c, TVP5150_OP_MODE_CTL, 0x00);
437 /* Activate YCrCb output 0x9 or 0xd ? */
438 tvp5150_write(c
, TVP5150_MISC_CTL
, 0x6f);
440 /* Activates video std autodetection for all standards */
441 tvp5150_write(c
, TVP5150_AUTOSW_MSK
, 0x0);
443 /* Default format: 0x47, 4:2:2: 0x40 */
444 tvp5150_write(c
, TVP5150_DATA_RATE_SEL
, 0x47);
446 tvp5150_selmux(c
, decoder
->input
);
448 tvp5150_write(c
, TVP5150_CHROMA_PROC_CTL_1
, 0x0c);
449 tvp5150_write(c
, TVP5150_CHROMA_PROC_CTL_2
, 0x54);
451 tvp5150_write(c
, 0x27, 0x20); /* ?????????? */
453 tvp5150_write(c
, TVP5150_VIDEO_STD
, 0x0); /* Auto switch */
455 tvp5150_write(c
, TVP5150_BRIGHT_CTL
, decoder
->bright
>> 8);
456 tvp5150_write(c
, TVP5150_CONTRAST_CTL
, decoder
->contrast
>> 8);
457 tvp5150_write(c
, TVP5150_SATURATION_CTL
, decoder
->contrast
>> 8);
458 tvp5150_write(c
, TVP5150_HUE_CTL
, (decoder
->hue
- 32768) >> 8);
461 /****************************************************************************
463 ****************************************************************************/
464 static int tvp5150_command(struct i2c_client
*client
,
465 unsigned int cmd
, void *arg
)
467 struct tvp5150
*decoder
= i2c_get_clientdata(client
);
473 tvp5150_reset(client
);
480 case DECODER_GET_CAPABILITIES
:
482 struct video_decoder_capability
*cap
= arg
;
484 cap
->flags
= VIDEO_DECODER_PAL
|
486 VIDEO_DECODER_SECAM
|
487 VIDEO_DECODER_AUTO
| VIDEO_DECODER_CCIR
;
492 case DECODER_GET_STATUS
:
497 case DECODER_SET_GPIO
:
500 case DECODER_SET_VBI_BYPASS
:
503 case DECODER_SET_NORM
:
509 case VIDEO_MODE_NTSC
:
515 case VIDEO_MODE_SECAM
:
518 case VIDEO_MODE_AUTO
:
525 decoder
->norm
= *iarg
;
528 case DECODER_SET_INPUT
:
531 if (*iarg
< 0 || *iarg
> 3) {
535 decoder
->input
=*iarg
;
536 tvp5150_selmux(client
, decoder
->input
);
540 case DECODER_SET_OUTPUT
:
544 /* not much choice of outputs */
550 case DECODER_ENABLE_OUTPUT
:
554 decoder
->enable
= (*iarg
!= 0);
556 tvp5150_selmux(client
, decoder
->input
);
560 case DECODER_SET_PICTURE
:
562 struct video_picture
*pic
= arg
;
563 if (decoder
->bright
!= pic
->brightness
) {
564 /* We want 0 to 255 we get 0-65535 */
565 decoder
->bright
= pic
->brightness
;
566 tvp5150_write(client
, TVP5150_BRIGHT_CTL
, decoder
->bright
>> 8);
568 if (decoder
->contrast
!= pic
->contrast
) {
569 /* We want 0 to 255 we get 0-65535 */
570 decoder
->contrast
= pic
->contrast
;
571 tvp5150_write(client
, TVP5150_CONTRAST_CTL
, decoder
->contrast
>> 8);
573 if (decoder
->sat
!= pic
->colour
) {
574 /* We want 0 to 255 we get 0-65535 */
575 decoder
->sat
= pic
->colour
;
576 tvp5150_write(client
, TVP5150_SATURATION_CTL
, decoder
->contrast
>> 8);
578 if (decoder
->hue
!= pic
->hue
) {
579 /* We want -128 to 127 we get 0-65535 */
580 decoder
->hue
= pic
->hue
;
581 tvp5150_write(client
, TVP5150_HUE_CTL
, (decoder
->hue
- 32768) >> 8);
592 /****************************************************************************
594 ****************************************************************************/
595 static struct i2c_driver driver
;
597 static struct i2c_client client_template
=
600 .flags
= I2C_CLIENT_ALLOW_USE
,
604 static int tvp5150_detect_client (struct i2c_adapter
*adapter
,
605 int address
, int kind
)
607 struct i2c_client
*client
;
608 struct tvp5150
*core
;
613 "tvp5150.c: detecting tvp5150 client on address 0x%x\n",
616 client_template
.adapter
= adapter
;
617 client_template
.addr
= address
;
619 /* Check if the adapter supports the needed features */
620 if (!i2c_check_functionality
622 I2C_FUNC_SMBUS_READ_BYTE
| I2C_FUNC_SMBUS_WRITE_BYTE_DATA
))
625 client
= kmalloc(sizeof(struct i2c_client
), GFP_KERNEL
);
628 memcpy(client
,&client_template
,sizeof(struct i2c_client
));
630 core
= kmalloc(sizeof(struct tvp5150
), GFP_KERNEL
);
635 memset(core
, 0, sizeof(struct tvp5150
));
636 i2c_set_clientdata(client
, core
);
638 rv
= i2c_attach_client(client
);
640 core
->norm
= VIDEO_MODE_AUTO
;
643 core
->bright
= 32768;
644 core
->contrast
= 32768;
660 tvp5150_attach_adapter (struct i2c_adapter
*adapter
)
664 "tvp5150.c: starting probe for adapter %s (0x%x)\n",
665 adapter
->name
, adapter
->id
);
666 return i2c_probe(adapter
, &addr_data
, &tvp5150_detect_client
);
670 tvp5150_detach_client (struct i2c_client
*client
)
672 struct tvp5150
*decoder
= i2c_get_clientdata(client
);
675 err
= i2c_detach_client(client
);
686 /* ----------------------------------------------------------------------- */
688 static struct i2c_driver driver
= {
689 .owner
= THIS_MODULE
,
693 .id
= I2C_DRIVERID_SAA7110
,
694 .flags
= I2C_DF_NOTIFY
,
696 .attach_adapter
= tvp5150_attach_adapter
,
697 .detach_client
= tvp5150_detach_client
,
699 .command
= tvp5150_command
,
705 return i2c_add_driver(&driver
);
711 i2c_del_driver(&driver
);
714 module_init(tvp5150_init
);
715 module_exit(tvp5150_exit
);