]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/staging/tm6000/tm6000-stds.c
V4L/DVB: tm6000+audio
[mv-sheeva.git] / drivers / staging / tm6000 / tm6000-stds.c
1 /*
2    tm6000-stds.c - driver for TM5600/TM6000/TM6010 USB video capture devices
3
4    Copyright (C) 2007 Mauro Carvalho Chehab <mchehab@redhat.com>
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 version 2
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19
20 #include <linux/module.h>
21 #include <linux/kernel.h>
22 #include "tm6000.h"
23 #include "tm6000-regs.h"
24
25 struct tm6000_reg_settings {
26         unsigned char req;
27         unsigned char reg;
28         unsigned char value;
29 };
30
31 struct tm6000_std_tv_settings {
32         v4l2_std_id id;
33         struct tm6000_reg_settings sif[12];
34         struct tm6000_reg_settings nosif[12];
35         struct tm6000_reg_settings common[25];
36 };
37
38 struct tm6000_std_settings {
39         v4l2_std_id id;
40         struct tm6000_reg_settings common[37];
41 };
42
43 static struct tm6000_std_tv_settings tv_stds[] = {
44         {
45                 .id = V4L2_STD_PAL_M,
46                 .sif = {
47                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
48                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
49                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
50                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08},
51                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
52                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
53                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
54                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
55                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62},
56                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe},
57                         {TM6010_REQ07_RFE_POWER_DOWN, 0xcb},
58                         {0, 0, 0},
59                 },
60                 .nosif = {
61                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
62                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
63                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
64                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
65                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
66                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
67                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
68                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
69                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60},
70                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
71                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
72                         {0, 0, 0},
73                 },
74                 .common = {
75                         {TM6010_REQ07_R3F_RESET, 0x01},
76                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x04},
77                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
78                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
79                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x00},
80                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
81                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
82                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x83},
83                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x0a},
84                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe0},
85                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
86                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
87                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
88                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
89                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
90                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x20},
91                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61},
92                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
93                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
94                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
95                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
96
97                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
98                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
99                         {TM6010_REQ08_R05_A_STANDARD_MOD, 0x21}, /* FIXME */
100                         {TM6010_REQ07_R3F_RESET, 0x00},
101                         {0, 0, 0},
102                 },
103         }, {
104                 .id = V4L2_STD_PAL_Nc,
105                 .sif = {
106                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
107                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
108                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
109                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08},
110                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
111                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
112                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
113                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
114                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62},
115                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe},
116                         {TM6010_REQ07_RFE_POWER_DOWN, 0xcb},
117                         {0, 0, 0},
118                 },
119                 .nosif = {
120                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
121                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
122                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
123                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
124                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
125                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
126                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
127                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
128                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60},
129                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
130                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
131                         {0, 0, 0},
132                 },
133                 .common = {
134                         {TM6010_REQ07_R3F_RESET, 0x01},
135                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x36},
136                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
137                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
138                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02},
139                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
140                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
141                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x91},
142                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x1f},
143                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x0c},
144                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
145                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
146                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
147                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
148                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
149                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c},
150                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
151                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
152                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
153                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
154                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
155
156                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
157                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
158                         {TM6010_REQ08_R05_A_STANDARD_MOD, 0x21}, /* FIXME */
159                         {TM6010_REQ07_R3F_RESET, 0x00},
160                         {0, 0, 0},
161                 },
162         }, {
163                 .id = V4L2_STD_PAL,
164                 .sif = {
165                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
166                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
167                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
168                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08},
169                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
170                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
171                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
172                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
173                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62},
174                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe},
175                         {TM6010_REQ07_RFE_POWER_DOWN, 0xcb},
176                         {0, 0, 0}
177                 },
178                 .nosif = {
179                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
180                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
181                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
182                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
183                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
184                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
185                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
186                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
187                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60},
188                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
189                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
190                         {0, 0, 0},
191                 },
192                 .common = {
193                         {TM6010_REQ07_R3F_RESET, 0x01},
194                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x32},
195                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
196                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
197                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02},
198                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
199                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x25},
200                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0xd5},
201                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x63},
202                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x50},
203                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
204                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
205                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
206                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
207                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
208                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c},
209                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
210                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
211                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
212                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
213                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
214
215                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
216                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
217                         {TM6010_REQ08_R05_A_STANDARD_MOD, 0x76}, /* FIXME */
218                         {TM6010_REQ07_R3F_RESET, 0x00},
219                         {0, 0, 0},
220                 },
221         }, {
222                 .id = V4L2_STD_SECAM,
223                 .sif = {
224                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
225                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
226                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
227                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08},
228                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
229                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
230                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
231                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
232                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62},
233                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe},
234                         {TM6010_REQ07_RFE_POWER_DOWN, 0xcb},
235                         {0, 0, 0},
236                 },
237                 .nosif = {
238                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
239                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
240                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
241                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
242                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
243                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
244                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
245                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
246                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60},
247                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
248                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
249                         {0, 0, 0},
250                 },
251                 .common = {
252                         {TM6010_REQ07_R3F_RESET, 0x01},
253                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x38},
254                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
255                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
256                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02},
257                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
258                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24},
259                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92},
260                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8},
261                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed},
262                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
263                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
264                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
265                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
266                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
267                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c},
268                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
269                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c},
270                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18},
271                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42},
272                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF},
273
274                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
275                         {TM6010_REQ08_R05_A_STANDARD_MOD, 0x79},
276                         {TM6010_REQ07_R3F_RESET, 0x00},
277                         {0, 0, 0},
278                 },
279         }, {
280                 .id = V4L2_STD_NTSC,
281                 .sif = {
282                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
283                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
284                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
285                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08},
286                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
287                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
288                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
289                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
290                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62},
291                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe},
292                         {TM6010_REQ07_RFE_POWER_DOWN, 0xcb},
293                         {0, 0, 0},
294                 },
295                 .nosif = {
296                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
297                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
298                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
299                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
300                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
301                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
302                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
303                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
304                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60},
305                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
306                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
307                         {0, 0, 0},
308                 },
309                 .common = {
310                         {TM6010_REQ07_R3F_RESET, 0x01},
311                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x00},
312                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0f},
313                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
314                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x00},
315                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
316                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
317                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x8b},
318                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xa2},
319                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe9},
320                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
321                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
322                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
323                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
324                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
325                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x22},
326                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61},
327                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x1c},
328                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
329                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42},
330                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
331
332                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdd},
333                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
334                         {TM6010_REQ08_R05_A_STANDARD_MOD, 0x22}, /* FIXME */
335                         {TM6010_REQ07_R3F_RESET, 0x00},
336                         {0, 0, 0},
337                 },
338         },
339 };
340
341 static struct tm6000_std_settings composite_stds[] = {
342         {
343                 .id = V4L2_STD_PAL_M,
344                 .common = {
345                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
346                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
347                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
348                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
349                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
350                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
351                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
352                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
353                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
354                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
355                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
356
357                         {TM6010_REQ07_R3F_RESET, 0x01},
358                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x04},
359                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
360                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
361                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x00},
362                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
363                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
364                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x83},
365                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x0a},
366                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe0},
367                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
368                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
369                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
370                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
371                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
372                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x20},
373                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61},
374                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
375                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
376                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
377                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
378
379                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
380                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
381                         {TM6010_REQ07_R3F_RESET, 0x00},
382                         {0, 0, 0},
383                 },
384          }, {
385                 .id = V4L2_STD_PAL_Nc,
386                 .common = {
387                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
388                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
389                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
390                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
391                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
392                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
393                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
394                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
395                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
396                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
397                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
398
399                         {TM6010_REQ07_R3F_RESET, 0x01},
400                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x36},
401                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
402                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
403                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02},
404                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
405                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
406                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x91},
407                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x1f},
408                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x0c},
409                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
410                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
411                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
412                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
413                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
414                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c},
415                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
416                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
417                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
418                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
419                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
420
421                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
422                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
423                         {TM6010_REQ07_R3F_RESET, 0x00},
424                         {0, 0, 0},
425                 },
426         }, {
427                 .id = V4L2_STD_PAL,
428                 .common = {
429                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
430                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
431                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
432                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
433                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
434                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
435                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
436                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
437                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
438                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
439                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
440
441                         {TM6010_REQ07_R3F_RESET, 0x01},
442                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x32},
443                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
444                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
445                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02},
446                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
447                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x25},
448                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0xd5},
449                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x63},
450                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x50},
451                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
452                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
453                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
454                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
455                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
456                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c},
457                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
458                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
459                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
460                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
461                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
462
463                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
464                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
465                         {TM6010_REQ07_R3F_RESET, 0x00},
466                         {0, 0, 0},
467                 },
468          }, {
469                 .id = V4L2_STD_SECAM,
470                 .common = {
471                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
472                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
473                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
474                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
475                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
476                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
477                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
478                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
479                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
480                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
481                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
482
483                         {TM6010_REQ07_R3F_RESET, 0x01},
484                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x38},
485                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
486                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
487                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02},
488                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
489                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24},
490                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92},
491                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8},
492                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed},
493                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
494                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
495                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
496                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
497                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
498                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c},
499                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
500                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c},
501                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18},
502                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42},
503                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF},
504
505                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
506                         {TM6010_REQ07_R3F_RESET, 0x00},
507                         {0, 0, 0},
508                 },
509         }, {
510                 .id = V4L2_STD_NTSC,
511                 .common = {
512                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
513                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
514                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3},
515                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f},
516                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1},
517                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0},
518                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
519                         {TM6010_REQ08_RED_GAIN_SEL, 0xe8},
520                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
521                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
522                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8b},
523
524                         {TM6010_REQ07_R3F_RESET, 0x01},
525                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x00},
526                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0f},
527                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
528                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x00},
529                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
530                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
531                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x8b},
532                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xa2},
533                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe9},
534                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
535                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
536                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
537                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
538                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
539                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x22},
540                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61},
541                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x1c},
542                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
543                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42},
544                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
545
546                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdd},
547                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
548                         {TM6010_REQ07_R3F_RESET, 0x00},
549                         {0, 0, 0},
550                 },
551         },
552 };
553
554 static struct tm6000_std_settings svideo_stds[] = {
555         {
556                 .id = V4L2_STD_PAL_M,
557                 .common = {
558                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
559                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
560                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8},
561                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00},
562                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2},
563                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0},
564                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
565                         {TM6010_REQ08_RED_GAIN_SEL, 0xe0},
566                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
567                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
568                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8a},
569
570                         {TM6010_REQ07_R3F_RESET, 0x01},
571                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x05},
572                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
573                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
574                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x04},
575                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
576                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
577                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x83},
578                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x0a},
579                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe0},
580                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
581                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
582                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
583                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
584                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
585                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x22},
586                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61},
587                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
588                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
589                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
590                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
591
592                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
593                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
594                         {TM6010_REQ07_R3F_RESET, 0x00},
595                         {0, 0, 0},
596                 },
597         }, {
598                 .id = V4L2_STD_PAL_Nc,
599                 .common = {
600                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
601                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
602                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8},
603                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00},
604                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2},
605                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0},
606                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
607                         {TM6010_REQ08_RED_GAIN_SEL, 0xe0},
608                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
609                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
610                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8a},
611
612                         {TM6010_REQ07_R3F_RESET, 0x01},
613                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x37},
614                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
615                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
616                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x04},
617                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
618                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
619                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x91},
620                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x1f},
621                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x0c},
622                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
623                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
624                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
625                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
626                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
627                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x22},
628                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
629                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
630                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
631                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
632                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
633
634                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
635                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
636                         {TM6010_REQ07_R3F_RESET, 0x00},
637                         {0, 0, 0},
638                 },
639         }, {
640                 .id = V4L2_STD_PAL,
641                 .common = {
642                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
643                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
644                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8},
645                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00},
646                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2},
647                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0},
648                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
649                         {TM6010_REQ08_RED_GAIN_SEL, 0xe0},
650                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
651                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
652                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8a},
653
654                         {TM6010_REQ07_R3F_RESET, 0x01},
655                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x33},
656                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
657                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
658                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x04},
659                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x30},
660                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x25},
661                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0xd5},
662                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x63},
663                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x50},
664                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
665                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
666                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
667                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
668                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
669                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2a},
670                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
671                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c},
672                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
673                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52},
674                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
675
676                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
677                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
678                         {TM6010_REQ07_R3F_RESET, 0x00},
679                         {0, 0, 0},
680                 },
681          }, {
682                 .id = V4L2_STD_SECAM,
683                 .common = {
684                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
685                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
686                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8},
687                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00},
688                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2},
689                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0},
690                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
691                         {TM6010_REQ08_RED_GAIN_SEL, 0xe0},
692                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
693                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
694                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8a},
695
696                         {TM6010_REQ07_R3F_RESET, 0x01},
697                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x39},
698                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e},
699                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
700                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x03},
701                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31},
702                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24},
703                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92},
704                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8},
705                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed},
706                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
707                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
708                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
709                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
710                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c},
711                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2a},
712                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1},
713                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c},
714                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18},
715                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42},
716                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF},
717
718                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
719                         {TM6010_REQ07_R3F_RESET, 0x00},
720                         {0, 0, 0},
721                 },
722         }, {
723                 .id = V4L2_STD_NTSC,
724                 .common = {
725                         {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
726                         {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
727                         {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8},
728                         {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00},
729                         {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2},
730                         {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0},
731                         {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2},
732                         {TM6010_REQ08_RED_GAIN_SEL, 0xe0},
733                         {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68},
734                         {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc},
735                         {TM6010_REQ07_RFE_POWER_DOWN, 0x8a},
736
737                         {TM6010_REQ07_R3F_RESET, 0x01},
738                         {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x01},
739                         {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0f},
740                         {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f},
741                         {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x03},
742                         {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x30},
743                         {TM6010_REQ07_R17_HLOOP_MAXSTATE, 0x8b},
744                         {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e},
745                         {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x8b},
746                         {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xa2},
747                         {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe9},
748                         {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c},
749                         {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc},
750                         {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc},
751                         {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd},
752                         {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88},
753                         {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x22},
754                         {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61},
755                         {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x1c},
756                         {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c},
757                         {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42},
758                         {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F},
759
760                         {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdd},
761                         {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
762                         {TM6010_REQ07_R3F_RESET, 0x00},
763                         {0, 0, 0},
764                 },
765         },
766 };
767
768 void tm6000_get_std_res(struct tm6000_core *dev)
769 {
770         /* Currently, those are the only supported resoltions */
771         if (dev->norm & V4L2_STD_525_60)
772                 dev->height = 480;
773         else
774                 dev->height = 576;
775
776         dev->width = 720;
777 }
778
779 static int tm6000_load_std(struct tm6000_core *dev,
780                            struct tm6000_reg_settings *set, int max_size)
781 {
782         int i, rc;
783
784         /* Load board's initialization table */
785         for (i = 0; max_size; i++) {
786                 if (!set[i].req)
787                         return 0;
788
789                 if ((dev->dev_type != TM6010) &&
790                     (set[i].req == REQ_08_SET_GET_AVREG_BIT))
791                                 continue;
792
793                 rc = tm6000_set_reg(dev, set[i].req, set[i].reg, set[i].value);
794                 if (rc < 0) {
795                         printk(KERN_ERR "Error %i while setting "
796                                "req %d, reg %d to value %d\n",
797                                rc, set[i].req, set[i].reg, set[i].value);
798                         return rc;
799                 }
800         }
801
802         return 0;
803 }
804
805 static int tm6000_set_tv(struct tm6000_core *dev, int pos)
806 {
807         int rc;
808
809         /* FIXME: This code is for tm6010 - not tested yet - doesn't work with
810            tm5600
811          */
812
813         /* FIXME: This is tuner-dependent */
814         int nosif = 0;
815
816         if (nosif) {
817                 rc = tm6000_load_std(dev, tv_stds[pos].nosif,
818                                      sizeof(tv_stds[pos].nosif));
819         } else {
820                 rc = tm6000_load_std(dev, tv_stds[pos].sif,
821                                      sizeof(tv_stds[pos].sif));
822         }
823         if (rc < 0)
824                 return rc;
825         rc = tm6000_load_std(dev, tv_stds[pos].common,
826                              sizeof(tv_stds[pos].common));
827
828         return rc;
829 }
830
831 int tm6000_set_standard(struct tm6000_core *dev, v4l2_std_id * norm)
832 {
833         int i, rc = 0;
834
835         dev->norm = *norm;
836         tm6000_get_std_res(dev);
837
838         switch (dev->input) {
839         case TM6000_INPUT_TV:
840                 for (i = 0; i < ARRAY_SIZE(tv_stds); i++) {
841                         if (*norm & tv_stds[i].id) {
842                                 rc = tm6000_set_tv(dev, i);
843                                 goto ret;
844                         }
845                 }
846                 return -EINVAL;
847         case TM6000_INPUT_SVIDEO:
848                 for (i = 0; i < ARRAY_SIZE(svideo_stds); i++) {
849                         if (*norm & svideo_stds[i].id) {
850                                 rc = tm6000_load_std(dev, svideo_stds[i].common,
851                                                      sizeof(svideo_stds[i].
852                                                             common));
853                                 goto ret;
854                         }
855                 }
856                 return -EINVAL;
857         case TM6000_INPUT_COMPOSITE:
858                 for (i = 0; i < ARRAY_SIZE(composite_stds); i++) {
859                         if (*norm & composite_stds[i].id) {
860                                 rc = tm6000_load_std(dev,
861                                                      composite_stds[i].common,
862                                                      sizeof(composite_stds[i].
863                                                             common));
864                                 goto ret;
865                         }
866                 }
867                 return -EINVAL;
868         }
869
870 ret:
871         if (rc < 0)
872                 return rc;
873
874         msleep(40);
875
876
877         return 0;
878 }