V4L/DVB (11598): stv090x: fix missing wakeup in init
[linux-2.6] / drivers / media / dvb / frontends / tda1004x.c
1   /*
2      Driver for Philips tda1004xh OFDM Demodulator
3
4      (c) 2003, 2004 Andrew de Quincey & Robert Schlabbach
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
15      GNU General Public License for more details.
16
17      You should have received a copy of the GNU General Public License
18      along with this program; if not, write to the Free Software
19      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21    */
22 /*
23  * This driver needs external firmware. Please use the commands
24  * "<kerneldir>/Documentation/dvb/get_dvb_firmware tda10045",
25  * "<kerneldir>/Documentation/dvb/get_dvb_firmware tda10046" to
26  * download/extract them, and then copy them to /usr/lib/hotplug/firmware
27  * or /lib/firmware (depending on configuration of firmware hotplug).
28  */
29 #define TDA10045_DEFAULT_FIRMWARE "dvb-fe-tda10045.fw"
30 #define TDA10046_DEFAULT_FIRMWARE "dvb-fe-tda10046.fw"
31
32 #include <linux/init.h>
33 #include <linux/module.h>
34 #include <linux/device.h>
35 #include <linux/jiffies.h>
36 #include <linux/string.h>
37 #include <linux/slab.h>
38
39 #include "dvb_frontend.h"
40 #include "tda1004x.h"
41
42 static int debug;
43 #define dprintk(args...) \
44         do { \
45                 if (debug) printk(KERN_DEBUG "tda1004x: " args); \
46         } while (0)
47
48 #define TDA1004X_CHIPID          0x00
49 #define TDA1004X_AUTO            0x01
50 #define TDA1004X_IN_CONF1        0x02
51 #define TDA1004X_IN_CONF2        0x03
52 #define TDA1004X_OUT_CONF1       0x04
53 #define TDA1004X_OUT_CONF2       0x05
54 #define TDA1004X_STATUS_CD       0x06
55 #define TDA1004X_CONFC4          0x07
56 #define TDA1004X_DSSPARE2        0x0C
57 #define TDA10045H_CODE_IN        0x0D
58 #define TDA10045H_FWPAGE         0x0E
59 #define TDA1004X_SCAN_CPT        0x10
60 #define TDA1004X_DSP_CMD         0x11
61 #define TDA1004X_DSP_ARG         0x12
62 #define TDA1004X_DSP_DATA1       0x13
63 #define TDA1004X_DSP_DATA2       0x14
64 #define TDA1004X_CONFADC1        0x15
65 #define TDA1004X_CONFC1          0x16
66 #define TDA10045H_S_AGC          0x1a
67 #define TDA10046H_AGC_TUN_LEVEL  0x1a
68 #define TDA1004X_SNR             0x1c
69 #define TDA1004X_CONF_TS1        0x1e
70 #define TDA1004X_CONF_TS2        0x1f
71 #define TDA1004X_CBER_RESET      0x20
72 #define TDA1004X_CBER_MSB        0x21
73 #define TDA1004X_CBER_LSB        0x22
74 #define TDA1004X_CVBER_LUT       0x23
75 #define TDA1004X_VBER_MSB        0x24
76 #define TDA1004X_VBER_MID        0x25
77 #define TDA1004X_VBER_LSB        0x26
78 #define TDA1004X_UNCOR           0x27
79
80 #define TDA10045H_CONFPLL_P      0x2D
81 #define TDA10045H_CONFPLL_M_MSB  0x2E
82 #define TDA10045H_CONFPLL_M_LSB  0x2F
83 #define TDA10045H_CONFPLL_N      0x30
84
85 #define TDA10046H_CONFPLL1       0x2D
86 #define TDA10046H_CONFPLL2       0x2F
87 #define TDA10046H_CONFPLL3       0x30
88 #define TDA10046H_TIME_WREF1     0x31
89 #define TDA10046H_TIME_WREF2     0x32
90 #define TDA10046H_TIME_WREF3     0x33
91 #define TDA10046H_TIME_WREF4     0x34
92 #define TDA10046H_TIME_WREF5     0x35
93
94 #define TDA10045H_UNSURW_MSB     0x31
95 #define TDA10045H_UNSURW_LSB     0x32
96 #define TDA10045H_WREF_MSB       0x33
97 #define TDA10045H_WREF_MID       0x34
98 #define TDA10045H_WREF_LSB       0x35
99 #define TDA10045H_MUXOUT         0x36
100 #define TDA1004X_CONFADC2        0x37
101
102 #define TDA10045H_IOFFSET        0x38
103
104 #define TDA10046H_CONF_TRISTATE1 0x3B
105 #define TDA10046H_CONF_TRISTATE2 0x3C
106 #define TDA10046H_CONF_POLARITY  0x3D
107 #define TDA10046H_FREQ_OFFSET    0x3E
108 #define TDA10046H_GPIO_OUT_SEL   0x41
109 #define TDA10046H_GPIO_SELECT    0x42
110 #define TDA10046H_AGC_CONF       0x43
111 #define TDA10046H_AGC_THR        0x44
112 #define TDA10046H_AGC_RENORM     0x45
113 #define TDA10046H_AGC_GAINS      0x46
114 #define TDA10046H_AGC_TUN_MIN    0x47
115 #define TDA10046H_AGC_TUN_MAX    0x48
116 #define TDA10046H_AGC_IF_MIN     0x49
117 #define TDA10046H_AGC_IF_MAX     0x4A
118
119 #define TDA10046H_FREQ_PHY2_MSB  0x4D
120 #define TDA10046H_FREQ_PHY2_LSB  0x4E
121
122 #define TDA10046H_CVBER_CTRL     0x4F
123 #define TDA10046H_AGC_IF_LEVEL   0x52
124 #define TDA10046H_CODE_CPT       0x57
125 #define TDA10046H_CODE_IN        0x58
126
127
128 static int tda1004x_write_byteI(struct tda1004x_state *state, int reg, int data)
129 {
130         int ret;
131         u8 buf[] = { reg, data };
132         struct i2c_msg msg = { .flags = 0, .buf = buf, .len = 2 };
133
134         dprintk("%s: reg=0x%x, data=0x%x\n", __func__, reg, data);
135
136         msg.addr = state->config->demod_address;
137         ret = i2c_transfer(state->i2c, &msg, 1);
138
139         if (ret != 1)
140                 dprintk("%s: error reg=0x%x, data=0x%x, ret=%i\n",
141                         __func__, reg, data, ret);
142
143         dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __func__,
144                 reg, data, ret);
145         return (ret != 1) ? -1 : 0;
146 }
147
148 static int tda1004x_read_byte(struct tda1004x_state *state, int reg)
149 {
150         int ret;
151         u8 b0[] = { reg };
152         u8 b1[] = { 0 };
153         struct i2c_msg msg[] = {{ .flags = 0, .buf = b0, .len = 1 },
154                                 { .flags = I2C_M_RD, .buf = b1, .len = 1 }};
155
156         dprintk("%s: reg=0x%x\n", __func__, reg);
157
158         msg[0].addr = state->config->demod_address;
159         msg[1].addr = state->config->demod_address;
160         ret = i2c_transfer(state->i2c, msg, 2);
161
162         if (ret != 2) {
163                 dprintk("%s: error reg=0x%x, ret=%i\n", __func__, reg,
164                         ret);
165                 return -EINVAL;
166         }
167
168         dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __func__,
169                 reg, b1[0], ret);
170         return b1[0];
171 }
172
173 static int tda1004x_write_mask(struct tda1004x_state *state, int reg, int mask, int data)
174 {
175         int val;
176         dprintk("%s: reg=0x%x, mask=0x%x, data=0x%x\n", __func__, reg,
177                 mask, data);
178
179         // read a byte and check
180         val = tda1004x_read_byte(state, reg);
181         if (val < 0)
182                 return val;
183
184         // mask if off
185         val = val & ~mask;
186         val |= data & 0xff;
187
188         // write it out again
189         return tda1004x_write_byteI(state, reg, val);
190 }
191
192 static int tda1004x_write_buf(struct tda1004x_state *state, int reg, unsigned char *buf, int len)
193 {
194         int i;
195         int result;
196
197         dprintk("%s: reg=0x%x, len=0x%x\n", __func__, reg, len);
198
199         result = 0;
200         for (i = 0; i < len; i++) {
201                 result = tda1004x_write_byteI(state, reg + i, buf[i]);
202                 if (result != 0)
203                         break;
204         }
205
206         return result;
207 }
208
209 static int tda1004x_enable_tuner_i2c(struct tda1004x_state *state)
210 {
211         int result;
212         dprintk("%s\n", __func__);
213
214         result = tda1004x_write_mask(state, TDA1004X_CONFC4, 2, 2);
215         msleep(20);
216         return result;
217 }
218
219 static int tda1004x_disable_tuner_i2c(struct tda1004x_state *state)
220 {
221         dprintk("%s\n", __func__);
222
223         return tda1004x_write_mask(state, TDA1004X_CONFC4, 2, 0);
224 }
225
226 static int tda10045h_set_bandwidth(struct tda1004x_state *state,
227                                    fe_bandwidth_t bandwidth)
228 {
229         static u8 bandwidth_6mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x60, 0x1e, 0xa7, 0x45, 0x4f };
230         static u8 bandwidth_7mhz[] = { 0x02, 0x00, 0x37, 0x00, 0x4a, 0x2f, 0x6d, 0x76, 0xdb };
231         static u8 bandwidth_8mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x48, 0x17, 0x89, 0xc7, 0x14 };
232
233         switch (bandwidth) {
234         case BANDWIDTH_6_MHZ:
235                 tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_6mhz, sizeof(bandwidth_6mhz));
236                 break;
237
238         case BANDWIDTH_7_MHZ:
239                 tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_7mhz, sizeof(bandwidth_7mhz));
240                 break;
241
242         case BANDWIDTH_8_MHZ:
243                 tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_8mhz, sizeof(bandwidth_8mhz));
244                 break;
245
246         default:
247                 return -EINVAL;
248         }
249
250         tda1004x_write_byteI(state, TDA10045H_IOFFSET, 0);
251
252         return 0;
253 }
254
255 static int tda10046h_set_bandwidth(struct tda1004x_state *state,
256                                    fe_bandwidth_t bandwidth)
257 {
258         static u8 bandwidth_6mhz_53M[] = { 0x7b, 0x2e, 0x11, 0xf0, 0xd2 };
259         static u8 bandwidth_7mhz_53M[] = { 0x6a, 0x02, 0x6a, 0x43, 0x9f };
260         static u8 bandwidth_8mhz_53M[] = { 0x5c, 0x32, 0xc2, 0x96, 0x6d };
261
262         static u8 bandwidth_6mhz_48M[] = { 0x70, 0x02, 0x49, 0x24, 0x92 };
263         static u8 bandwidth_7mhz_48M[] = { 0x60, 0x02, 0xaa, 0xaa, 0xab };
264         static u8 bandwidth_8mhz_48M[] = { 0x54, 0x03, 0x0c, 0x30, 0xc3 };
265         int tda10046_clk53m;
266
267         if ((state->config->if_freq == TDA10046_FREQ_045) ||
268             (state->config->if_freq == TDA10046_FREQ_052))
269                 tda10046_clk53m = 0;
270         else
271                 tda10046_clk53m = 1;
272         switch (bandwidth) {
273         case BANDWIDTH_6_MHZ:
274                 if (tda10046_clk53m)
275                         tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_6mhz_53M,
276                                                   sizeof(bandwidth_6mhz_53M));
277                 else
278                         tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_6mhz_48M,
279                                                   sizeof(bandwidth_6mhz_48M));
280                 if (state->config->if_freq == TDA10046_FREQ_045) {
281                         tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0a);
282                         tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0xab);
283                 }
284                 break;
285
286         case BANDWIDTH_7_MHZ:
287                 if (tda10046_clk53m)
288                         tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_7mhz_53M,
289                                                   sizeof(bandwidth_7mhz_53M));
290                 else
291                         tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_7mhz_48M,
292                                                   sizeof(bandwidth_7mhz_48M));
293                 if (state->config->if_freq == TDA10046_FREQ_045) {
294                         tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
295                         tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x00);
296                 }
297                 break;
298
299         case BANDWIDTH_8_MHZ:
300                 if (tda10046_clk53m)
301                         tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_8mhz_53M,
302                                                   sizeof(bandwidth_8mhz_53M));
303                 else
304                         tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_8mhz_48M,
305                                                   sizeof(bandwidth_8mhz_48M));
306                 if (state->config->if_freq == TDA10046_FREQ_045) {
307                         tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0d);
308                         tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x55);
309                 }
310                 break;
311
312         default:
313                 return -EINVAL;
314         }
315
316         return 0;
317 }
318
319 static int tda1004x_do_upload(struct tda1004x_state *state,
320                               const unsigned char *mem, unsigned int len,
321                               u8 dspCodeCounterReg, u8 dspCodeInReg)
322 {
323         u8 buf[65];
324         struct i2c_msg fw_msg = { .flags = 0, .buf = buf, .len = 0 };
325         int tx_size;
326         int pos = 0;
327
328         /* clear code counter */
329         tda1004x_write_byteI(state, dspCodeCounterReg, 0);
330         fw_msg.addr = state->config->demod_address;
331
332         buf[0] = dspCodeInReg;
333         while (pos != len) {
334                 // work out how much to send this time
335                 tx_size = len - pos;
336                 if (tx_size > 0x10)
337                         tx_size = 0x10;
338
339                 // send the chunk
340                 memcpy(buf + 1, mem + pos, tx_size);
341                 fw_msg.len = tx_size + 1;
342                 if (i2c_transfer(state->i2c, &fw_msg, 1) != 1) {
343                         printk(KERN_ERR "tda1004x: Error during firmware upload\n");
344                         return -EIO;
345                 }
346                 pos += tx_size;
347
348                 dprintk("%s: fw_pos=0x%x\n", __func__, pos);
349         }
350         // give the DSP a chance to settle 03/10/05 Hac
351         msleep(100);
352
353         return 0;
354 }
355
356 static int tda1004x_check_upload_ok(struct tda1004x_state *state)
357 {
358         u8 data1, data2;
359         unsigned long timeout;
360
361         if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
362                 timeout = jiffies + 2 * HZ;
363                 while(!(tda1004x_read_byte(state, TDA1004X_STATUS_CD) & 0x20)) {
364                         if (time_after(jiffies, timeout)) {
365                                 printk(KERN_ERR "tda1004x: timeout waiting for DSP ready\n");
366                                 break;
367                         }
368                         msleep(1);
369                 }
370         } else
371                 msleep(100);
372
373         // check upload was OK
374         tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0); // we want to read from the DSP
375         tda1004x_write_byteI(state, TDA1004X_DSP_CMD, 0x67);
376
377         data1 = tda1004x_read_byte(state, TDA1004X_DSP_DATA1);
378         data2 = tda1004x_read_byte(state, TDA1004X_DSP_DATA2);
379         if (data1 != 0x67 || data2 < 0x20 || data2 > 0x2e) {
380                 printk(KERN_INFO "tda1004x: found firmware revision %x -- invalid\n", data2);
381                 return -EIO;
382         }
383         printk(KERN_INFO "tda1004x: found firmware revision %x -- ok\n", data2);
384         return 0;
385 }
386
387 static int tda10045_fwupload(struct dvb_frontend* fe)
388 {
389         struct tda1004x_state* state = fe->demodulator_priv;
390         int ret;
391         const struct firmware *fw;
392
393         /* don't re-upload unless necessary */
394         if (tda1004x_check_upload_ok(state) == 0)
395                 return 0;
396
397         /* request the firmware, this will block until someone uploads it */
398         printk(KERN_INFO "tda1004x: waiting for firmware upload (%s)...\n", TDA10045_DEFAULT_FIRMWARE);
399         ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
400         if (ret) {
401                 printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
402                 return ret;
403         }
404
405         /* reset chip */
406         tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0);
407         tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8);
408         tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 0);
409         msleep(10);
410
411         /* set parameters */
412         tda10045h_set_bandwidth(state, BANDWIDTH_8_MHZ);
413
414         ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10045H_FWPAGE, TDA10045H_CODE_IN);
415         release_firmware(fw);
416         if (ret)
417                 return ret;
418         printk(KERN_INFO "tda1004x: firmware upload complete\n");
419
420         /* wait for DSP to initialise */
421         /* DSPREADY doesn't seem to work on the TDA10045H */
422         msleep(100);
423
424         return tda1004x_check_upload_ok(state);
425 }
426
427 static void tda10046_init_plls(struct dvb_frontend* fe)
428 {
429         struct tda1004x_state* state = fe->demodulator_priv;
430         int tda10046_clk53m;
431
432         if ((state->config->if_freq == TDA10046_FREQ_045) ||
433             (state->config->if_freq == TDA10046_FREQ_052))
434                 tda10046_clk53m = 0;
435         else
436                 tda10046_clk53m = 1;
437
438         tda1004x_write_byteI(state, TDA10046H_CONFPLL1, 0xf0);
439         if(tda10046_clk53m) {
440                 printk(KERN_INFO "tda1004x: setting up plls for 53MHz sampling clock\n");
441                 tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x08); // PLL M = 8
442         } else {
443                 printk(KERN_INFO "tda1004x: setting up plls for 48MHz sampling clock\n");
444                 tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x03); // PLL M = 3
445         }
446         if (state->config->xtal_freq == TDA10046_XTAL_4M ) {
447                 dprintk("%s: setting up PLLs for a 4 MHz Xtal\n", __func__);
448                 tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 0); // PLL P = N = 0
449         } else {
450                 dprintk("%s: setting up PLLs for a 16 MHz Xtal\n", __func__);
451                 tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 3); // PLL P = 0, N = 3
452         }
453         if(tda10046_clk53m)
454                 tda1004x_write_byteI(state, TDA10046H_FREQ_OFFSET, 0x67);
455         else
456                 tda1004x_write_byteI(state, TDA10046H_FREQ_OFFSET, 0x72);
457         /* Note clock frequency is handled implicitly */
458         switch (state->config->if_freq) {
459         case TDA10046_FREQ_045:
460                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
461                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x00);
462                 break;
463         case TDA10046_FREQ_052:
464                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0d);
465                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0xc7);
466                 break;
467         case TDA10046_FREQ_3617:
468                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0xd7);
469                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x59);
470                 break;
471         case TDA10046_FREQ_3613:
472                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0xd7);
473                 tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x3f);
474                 break;
475         }
476         tda10046h_set_bandwidth(state, BANDWIDTH_8_MHZ); // default bandwidth 8 MHz
477         /* let the PLLs settle */
478         msleep(120);
479 }
480
481 static int tda10046_fwupload(struct dvb_frontend* fe)
482 {
483         struct tda1004x_state* state = fe->demodulator_priv;
484         int ret, confc4;
485         const struct firmware *fw;
486
487         /* reset + wake up chip */
488         if (state->config->xtal_freq == TDA10046_XTAL_4M) {
489                 confc4 = 0;
490         } else {
491                 dprintk("%s: 16MHz Xtal, reducing I2C speed\n", __func__);
492                 confc4 = 0x80;
493         }
494         tda1004x_write_byteI(state, TDA1004X_CONFC4, confc4);
495
496         tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 1, 0);
497         /* set GPIO 1 and 3 */
498         if (state->config->gpio_config != TDA10046_GPTRI) {
499                 tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE2, 0x33);
500                 tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f, state->config->gpio_config &0x0f);
501         }
502         /* let the clocks recover from sleep */
503         msleep(10);
504
505         /* The PLLs need to be reprogrammed after sleep */
506         tda10046_init_plls(fe);
507         tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0);
508
509         /* don't re-upload unless necessary */
510         if (tda1004x_check_upload_ok(state) == 0)
511                 return 0;
512
513         /*
514            For i2c normal work, we need to slow down the bus speed.
515            However, the slow down breaks the eeprom firmware load.
516            So, use normal speed for eeprom booting and then restore the
517            i2c speed after that. Tested with MSI TV @nyware A/D board,
518            that comes with firmware version 29 inside their eeprom.
519
520            It should also be noticed that no other I2C transfer should
521            be in course while booting from eeprom, otherwise, tda10046
522            goes into an instable state. So, proper locking are needed
523            at the i2c bus master.
524          */
525         printk(KERN_INFO "tda1004x: trying to boot from eeprom\n");
526         tda1004x_write_byteI(state, TDA1004X_CONFC4, 4);
527         msleep(300);
528         tda1004x_write_byteI(state, TDA1004X_CONFC4, confc4);
529
530         /* Checks if eeprom firmware went without troubles */
531         if (tda1004x_check_upload_ok(state) == 0)
532                 return 0;
533
534         /* eeprom firmware didn't work. Load one manually. */
535
536         if (state->config->request_firmware != NULL) {
537                 /* request the firmware, this will block until someone uploads it */
538                 printk(KERN_INFO "tda1004x: waiting for firmware upload...\n");
539                 ret = state->config->request_firmware(fe, &fw, TDA10046_DEFAULT_FIRMWARE);
540                 if (ret) {
541                         /* remain compatible to old bug: try to load with tda10045 image name */
542                         ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
543                         if (ret) {
544                                 printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
545                                 return ret;
546                         } else {
547                                 printk(KERN_INFO "tda1004x: please rename the firmware file to %s\n",
548                                                   TDA10046_DEFAULT_FIRMWARE);
549                         }
550                 }
551         } else {
552                 printk(KERN_ERR "tda1004x: no request function defined, can't upload from file\n");
553                 return -EIO;
554         }
555         tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8); // going to boot from HOST
556         ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10046H_CODE_CPT, TDA10046H_CODE_IN);
557         release_firmware(fw);
558         return tda1004x_check_upload_ok(state);
559 }
560
561 static int tda1004x_encode_fec(int fec)
562 {
563         // convert known FEC values
564         switch (fec) {
565         case FEC_1_2:
566                 return 0;
567         case FEC_2_3:
568                 return 1;
569         case FEC_3_4:
570                 return 2;
571         case FEC_5_6:
572                 return 3;
573         case FEC_7_8:
574                 return 4;
575         }
576
577         // unsupported
578         return -EINVAL;
579 }
580
581 static int tda1004x_decode_fec(int tdafec)
582 {
583         // convert known FEC values
584         switch (tdafec) {
585         case 0:
586                 return FEC_1_2;
587         case 1:
588                 return FEC_2_3;
589         case 2:
590                 return FEC_3_4;
591         case 3:
592                 return FEC_5_6;
593         case 4:
594                 return FEC_7_8;
595         }
596
597         // unsupported
598         return -1;
599 }
600
601 static int tda1004x_write(struct dvb_frontend* fe, u8 *buf, int len)
602 {
603         struct tda1004x_state* state = fe->demodulator_priv;
604
605         if (len != 2)
606                 return -EINVAL;
607
608         return tda1004x_write_byteI(state, buf[0], buf[1]);
609 }
610
611 static int tda10045_init(struct dvb_frontend* fe)
612 {
613         struct tda1004x_state* state = fe->demodulator_priv;
614
615         dprintk("%s\n", __func__);
616
617         if (tda10045_fwupload(fe)) {
618                 printk("tda1004x: firmware upload failed\n");
619                 return -EIO;
620         }
621
622         tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0); // wake up the ADC
623
624         // tda setup
625         tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP watchdog timer
626         tda1004x_write_mask(state, TDA1004X_AUTO, 8, 0); // select HP stream
627         tda1004x_write_mask(state, TDA1004X_CONFC1, 0x40, 0); // set polarity of VAGC signal
628         tda1004x_write_mask(state, TDA1004X_CONFC1, 0x80, 0x80); // enable pulse killer
629         tda1004x_write_mask(state, TDA1004X_AUTO, 0x10, 0x10); // enable auto offset
630         tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0xC0, 0x0); // no frequency offset
631         tda1004x_write_byteI(state, TDA1004X_CONF_TS1, 0); // setup MPEG2 TS interface
632         tda1004x_write_byteI(state, TDA1004X_CONF_TS2, 0); // setup MPEG2 TS interface
633         tda1004x_write_mask(state, TDA1004X_VBER_MSB, 0xe0, 0xa0); // 10^6 VBER measurement bits
634         tda1004x_write_mask(state, TDA1004X_CONFC1, 0x10, 0); // VAGC polarity
635         tda1004x_write_byteI(state, TDA1004X_CONFADC1, 0x2e);
636
637         tda1004x_write_mask(state, 0x1f, 0x01, state->config->invert_oclk);
638
639         return 0;
640 }
641
642 static int tda10046_init(struct dvb_frontend* fe)
643 {
644         struct tda1004x_state* state = fe->demodulator_priv;
645         dprintk("%s\n", __func__);
646
647         if (tda10046_fwupload(fe)) {
648                 printk("tda1004x: firmware upload failed\n");
649                         return -EIO;
650         }
651
652         // tda setup
653         tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP watchdog timer
654         tda1004x_write_byteI(state, TDA1004X_AUTO, 0x87);    // 100 ppm crystal, select HP stream
655         tda1004x_write_byteI(state, TDA1004X_CONFC1, 0x88);      // enable pulse killer
656
657         switch (state->config->agc_config) {
658         case TDA10046_AGC_DEFAULT:
659                 tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x00); // AGC setup
660                 tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
661                 break;
662         case TDA10046_AGC_IFO_AUTO_NEG:
663                 tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC setup
664                 tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
665                 break;
666         case TDA10046_AGC_IFO_AUTO_POS:
667                 tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC setup
668                 tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x00);  // set AGC polarities
669                 break;
670         case TDA10046_AGC_TDA827X:
671                 tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x02);   // AGC setup
672                 tda1004x_write_byteI(state, TDA10046H_AGC_THR, 0x70);    // AGC Threshold
673                 tda1004x_write_byteI(state, TDA10046H_AGC_RENORM, 0x08); // Gain Renormalize
674                 tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
675                 break;
676         }
677         if (state->config->ts_mode == 0) {
678                 tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 0xc0, 0x40);
679                 tda1004x_write_mask(state, 0x3a, 0x80, state->config->invert_oclk << 7);
680         } else {
681                 tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 0xc0, 0x80);
682                 tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x10,
683                                                         state->config->invert_oclk << 4);
684         }
685         tda1004x_write_byteI(state, TDA1004X_CONFADC2, 0x38);
686         tda1004x_write_mask (state, TDA10046H_CONF_TRISTATE1, 0x3e, 0x38); // Turn IF AGC output on
687         tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MIN, 0);    // }
688         tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MAX, 0xff); // } AGC min/max values
689         tda1004x_write_byteI(state, TDA10046H_AGC_IF_MIN, 0);     // }
690         tda1004x_write_byteI(state, TDA10046H_AGC_IF_MAX, 0xff);  // }
691         tda1004x_write_byteI(state, TDA10046H_AGC_GAINS, 0x12); // IF gain 2, TUN gain 1
692         tda1004x_write_byteI(state, TDA10046H_CVBER_CTRL, 0x1a); // 10^6 VBER measurement bits
693         tda1004x_write_byteI(state, TDA1004X_CONF_TS1, 7); // MPEG2 interface config
694         tda1004x_write_byteI(state, TDA1004X_CONF_TS2, 0xc0); // MPEG2 interface config
695         // tda1004x_write_mask(state, 0x50, 0x80, 0x80);         // handle out of guard echoes
696
697         return 0;
698 }
699
700 static int tda1004x_set_fe(struct dvb_frontend* fe,
701                            struct dvb_frontend_parameters *fe_params)
702 {
703         struct tda1004x_state* state = fe->demodulator_priv;
704         int tmp;
705         int inversion;
706
707         dprintk("%s\n", __func__);
708
709         if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
710                 // setup auto offset
711                 tda1004x_write_mask(state, TDA1004X_AUTO, 0x10, 0x10);
712                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x80, 0);
713                 tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0xC0, 0);
714
715                 // disable agc_conf[2]
716                 tda1004x_write_mask(state, TDA10046H_AGC_CONF, 4, 0);
717         }
718
719         // set frequency
720         if (fe->ops.tuner_ops.set_params) {
721                 fe->ops.tuner_ops.set_params(fe, fe_params);
722                 if (fe->ops.i2c_gate_ctrl)
723                         fe->ops.i2c_gate_ctrl(fe, 0);
724         }
725
726         // Hardcoded to use auto as much as possible on the TDA10045 as it
727         // is very unreliable if AUTO mode is _not_ used.
728         if (state->demod_type == TDA1004X_DEMOD_TDA10045) {
729                 fe_params->u.ofdm.code_rate_HP = FEC_AUTO;
730                 fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_AUTO;
731                 fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO;
732         }
733
734         // Set standard params.. or put them to auto
735         if ((fe_params->u.ofdm.code_rate_HP == FEC_AUTO) ||
736                 (fe_params->u.ofdm.code_rate_LP == FEC_AUTO) ||
737                 (fe_params->u.ofdm.constellation == QAM_AUTO) ||
738                 (fe_params->u.ofdm.hierarchy_information == HIERARCHY_AUTO)) {
739                 tda1004x_write_mask(state, TDA1004X_AUTO, 1, 1);        // enable auto
740                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x03, 0); // turn off constellation bits
741                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 0); // turn off hierarchy bits
742                 tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0x3f, 0); // turn off FEC bits
743         } else {
744                 tda1004x_write_mask(state, TDA1004X_AUTO, 1, 0);        // disable auto
745
746                 // set HP FEC
747                 tmp = tda1004x_encode_fec(fe_params->u.ofdm.code_rate_HP);
748                 if (tmp < 0)
749                         return tmp;
750                 tda1004x_write_mask(state, TDA1004X_IN_CONF2, 7, tmp);
751
752                 // set LP FEC
753                 tmp = tda1004x_encode_fec(fe_params->u.ofdm.code_rate_LP);
754                 if (tmp < 0)
755                         return tmp;
756                 tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0x38, tmp << 3);
757
758                 // set constellation
759                 switch (fe_params->u.ofdm.constellation) {
760                 case QPSK:
761                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 0);
762                         break;
763
764                 case QAM_16:
765                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 1);
766                         break;
767
768                 case QAM_64:
769                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 2);
770                         break;
771
772                 default:
773                         return -EINVAL;
774                 }
775
776                 // set hierarchy
777                 switch (fe_params->u.ofdm.hierarchy_information) {
778                 case HIERARCHY_NONE:
779                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 0 << 5);
780                         break;
781
782                 case HIERARCHY_1:
783                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 1 << 5);
784                         break;
785
786                 case HIERARCHY_2:
787                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 2 << 5);
788                         break;
789
790                 case HIERARCHY_4:
791                         tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 3 << 5);
792                         break;
793
794                 default:
795                         return -EINVAL;
796                 }
797         }
798
799         // set bandwidth
800         switch (state->demod_type) {
801         case TDA1004X_DEMOD_TDA10045:
802                 tda10045h_set_bandwidth(state, fe_params->u.ofdm.bandwidth);
803                 break;
804
805         case TDA1004X_DEMOD_TDA10046:
806                 tda10046h_set_bandwidth(state, fe_params->u.ofdm.bandwidth);
807                 break;
808         }
809
810         // set inversion
811         inversion = fe_params->inversion;
812         if (state->config->invert)
813                 inversion = inversion ? INVERSION_OFF : INVERSION_ON;
814         switch (inversion) {
815         case INVERSION_OFF:
816                 tda1004x_write_mask(state, TDA1004X_CONFC1, 0x20, 0);
817                 break;
818
819         case INVERSION_ON:
820                 tda1004x_write_mask(state, TDA1004X_CONFC1, 0x20, 0x20);
821                 break;
822
823         default:
824                 return -EINVAL;
825         }
826
827         // set guard interval
828         switch (fe_params->u.ofdm.guard_interval) {
829         case GUARD_INTERVAL_1_32:
830                 tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
831                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
832                 break;
833
834         case GUARD_INTERVAL_1_16:
835                 tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
836                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 1 << 2);
837                 break;
838
839         case GUARD_INTERVAL_1_8:
840                 tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
841                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 2 << 2);
842                 break;
843
844         case GUARD_INTERVAL_1_4:
845                 tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
846                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 3 << 2);
847                 break;
848
849         case GUARD_INTERVAL_AUTO:
850                 tda1004x_write_mask(state, TDA1004X_AUTO, 2, 2);
851                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
852                 break;
853
854         default:
855                 return -EINVAL;
856         }
857
858         // set transmission mode
859         switch (fe_params->u.ofdm.transmission_mode) {
860         case TRANSMISSION_MODE_2K:
861                 tda1004x_write_mask(state, TDA1004X_AUTO, 4, 0);
862                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 0 << 4);
863                 break;
864
865         case TRANSMISSION_MODE_8K:
866                 tda1004x_write_mask(state, TDA1004X_AUTO, 4, 0);
867                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 1 << 4);
868                 break;
869
870         case TRANSMISSION_MODE_AUTO:
871                 tda1004x_write_mask(state, TDA1004X_AUTO, 4, 4);
872                 tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 0);
873                 break;
874
875         default:
876                 return -EINVAL;
877         }
878
879         // start the lock
880         switch (state->demod_type) {
881         case TDA1004X_DEMOD_TDA10045:
882                 tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8);
883                 tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 0);
884                 break;
885
886         case TDA1004X_DEMOD_TDA10046:
887                 tda1004x_write_mask(state, TDA1004X_AUTO, 0x40, 0x40);
888                 msleep(1);
889                 tda1004x_write_mask(state, TDA10046H_AGC_CONF, 4, 1);
890                 break;
891         }
892
893         msleep(10);
894
895         return 0;
896 }
897
898 static int tda1004x_get_fe(struct dvb_frontend* fe, struct dvb_frontend_parameters *fe_params)
899 {
900         struct tda1004x_state* state = fe->demodulator_priv;
901
902         dprintk("%s\n", __func__);
903
904         // inversion status
905         fe_params->inversion = INVERSION_OFF;
906         if (tda1004x_read_byte(state, TDA1004X_CONFC1) & 0x20)
907                 fe_params->inversion = INVERSION_ON;
908         if (state->config->invert)
909                 fe_params->inversion = fe_params->inversion ? INVERSION_OFF : INVERSION_ON;
910
911         // bandwidth
912         switch (state->demod_type) {
913         case TDA1004X_DEMOD_TDA10045:
914                 switch (tda1004x_read_byte(state, TDA10045H_WREF_LSB)) {
915                 case 0x14:
916                         fe_params->u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
917                         break;
918                 case 0xdb:
919                         fe_params->u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
920                         break;
921                 case 0x4f:
922                         fe_params->u.ofdm.bandwidth = BANDWIDTH_6_MHZ;
923                         break;
924                 }
925                 break;
926         case TDA1004X_DEMOD_TDA10046:
927                 switch (tda1004x_read_byte(state, TDA10046H_TIME_WREF1)) {
928                 case 0x5c:
929                 case 0x54:
930                         fe_params->u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
931                         break;
932                 case 0x6a:
933                 case 0x60:
934                         fe_params->u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
935                         break;
936                 case 0x7b:
937                 case 0x70:
938                         fe_params->u.ofdm.bandwidth = BANDWIDTH_6_MHZ;
939                         break;
940                 }
941                 break;
942         }
943
944         // FEC
945         fe_params->u.ofdm.code_rate_HP =
946             tda1004x_decode_fec(tda1004x_read_byte(state, TDA1004X_OUT_CONF2) & 7);
947         fe_params->u.ofdm.code_rate_LP =
948             tda1004x_decode_fec((tda1004x_read_byte(state, TDA1004X_OUT_CONF2) >> 3) & 7);
949
950         // constellation
951         switch (tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 3) {
952         case 0:
953                 fe_params->u.ofdm.constellation = QPSK;
954                 break;
955         case 1:
956                 fe_params->u.ofdm.constellation = QAM_16;
957                 break;
958         case 2:
959                 fe_params->u.ofdm.constellation = QAM_64;
960                 break;
961         }
962
963         // transmission mode
964         fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_2K;
965         if (tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x10)
966                 fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_8K;
967
968         // guard interval
969         switch ((tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x0c) >> 2) {
970         case 0:
971                 fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_32;
972                 break;
973         case 1:
974                 fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_16;
975                 break;
976         case 2:
977                 fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_8;
978                 break;
979         case 3:
980                 fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_4;
981                 break;
982         }
983
984         // hierarchy
985         switch ((tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x60) >> 5) {
986         case 0:
987                 fe_params->u.ofdm.hierarchy_information = HIERARCHY_NONE;
988                 break;
989         case 1:
990                 fe_params->u.ofdm.hierarchy_information = HIERARCHY_1;
991                 break;
992         case 2:
993                 fe_params->u.ofdm.hierarchy_information = HIERARCHY_2;
994                 break;
995         case 3:
996                 fe_params->u.ofdm.hierarchy_information = HIERARCHY_4;
997                 break;
998         }
999
1000         return 0;
1001 }
1002
1003 static int tda1004x_read_status(struct dvb_frontend* fe, fe_status_t * fe_status)
1004 {
1005         struct tda1004x_state* state = fe->demodulator_priv;
1006         int status;
1007         int cber;
1008         int vber;
1009
1010         dprintk("%s\n", __func__);
1011
1012         // read status
1013         status = tda1004x_read_byte(state, TDA1004X_STATUS_CD);
1014         if (status == -1)
1015                 return -EIO;
1016
1017         // decode
1018         *fe_status = 0;
1019         if (status & 4)
1020                 *fe_status |= FE_HAS_SIGNAL;
1021         if (status & 2)
1022                 *fe_status |= FE_HAS_CARRIER;
1023         if (status & 8)
1024                 *fe_status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
1025
1026         // if we don't already have VITERBI (i.e. not LOCKED), see if the viterbi
1027         // is getting anything valid
1028         if (!(*fe_status & FE_HAS_VITERBI)) {
1029                 // read the CBER
1030                 cber = tda1004x_read_byte(state, TDA1004X_CBER_LSB);
1031                 if (cber == -1)
1032                         return -EIO;
1033                 status = tda1004x_read_byte(state, TDA1004X_CBER_MSB);
1034                 if (status == -1)
1035                         return -EIO;
1036                 cber |= (status << 8);
1037                 // The address 0x20 should be read to cope with a TDA10046 bug
1038                 tda1004x_read_byte(state, TDA1004X_CBER_RESET);
1039
1040                 if (cber != 65535)
1041                         *fe_status |= FE_HAS_VITERBI;
1042         }
1043
1044         // if we DO have some valid VITERBI output, but don't already have SYNC
1045         // bytes (i.e. not LOCKED), see if the RS decoder is getting anything valid.
1046         if ((*fe_status & FE_HAS_VITERBI) && (!(*fe_status & FE_HAS_SYNC))) {
1047                 // read the VBER
1048                 vber = tda1004x_read_byte(state, TDA1004X_VBER_LSB);
1049                 if (vber == -1)
1050                         return -EIO;
1051                 status = tda1004x_read_byte(state, TDA1004X_VBER_MID);
1052                 if (status == -1)
1053                         return -EIO;
1054                 vber |= (status << 8);
1055                 status = tda1004x_read_byte(state, TDA1004X_VBER_MSB);
1056                 if (status == -1)
1057                         return -EIO;
1058                 vber |= (status & 0x0f) << 16;
1059                 // The CVBER_LUT should be read to cope with TDA10046 hardware bug
1060                 tda1004x_read_byte(state, TDA1004X_CVBER_LUT);
1061
1062                 // if RS has passed some valid TS packets, then we must be
1063                 // getting some SYNC bytes
1064                 if (vber < 16632)
1065                         *fe_status |= FE_HAS_SYNC;
1066         }
1067
1068         // success
1069         dprintk("%s: fe_status=0x%x\n", __func__, *fe_status);
1070         return 0;
1071 }
1072
1073 static int tda1004x_read_signal_strength(struct dvb_frontend* fe, u16 * signal)
1074 {
1075         struct tda1004x_state* state = fe->demodulator_priv;
1076         int tmp;
1077         int reg = 0;
1078
1079         dprintk("%s\n", __func__);
1080
1081         // determine the register to use
1082         switch (state->demod_type) {
1083         case TDA1004X_DEMOD_TDA10045:
1084                 reg = TDA10045H_S_AGC;
1085                 break;
1086
1087         case TDA1004X_DEMOD_TDA10046:
1088                 reg = TDA10046H_AGC_IF_LEVEL;
1089                 break;
1090         }
1091
1092         // read it
1093         tmp = tda1004x_read_byte(state, reg);
1094         if (tmp < 0)
1095                 return -EIO;
1096
1097         *signal = (tmp << 8) | tmp;
1098         dprintk("%s: signal=0x%x\n", __func__, *signal);
1099         return 0;
1100 }
1101
1102 static int tda1004x_read_snr(struct dvb_frontend* fe, u16 * snr)
1103 {
1104         struct tda1004x_state* state = fe->demodulator_priv;
1105         int tmp;
1106
1107         dprintk("%s\n", __func__);
1108
1109         // read it
1110         tmp = tda1004x_read_byte(state, TDA1004X_SNR);
1111         if (tmp < 0)
1112                 return -EIO;
1113         tmp = 255 - tmp;
1114
1115         *snr = ((tmp << 8) | tmp);
1116         dprintk("%s: snr=0x%x\n", __func__, *snr);
1117         return 0;
1118 }
1119
1120 static int tda1004x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
1121 {
1122         struct tda1004x_state* state = fe->demodulator_priv;
1123         int tmp;
1124         int tmp2;
1125         int counter;
1126
1127         dprintk("%s\n", __func__);
1128
1129         // read the UCBLOCKS and reset
1130         counter = 0;
1131         tmp = tda1004x_read_byte(state, TDA1004X_UNCOR);
1132         if (tmp < 0)
1133                 return -EIO;
1134         tmp &= 0x7f;
1135         while (counter++ < 5) {
1136                 tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1137                 tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1138                 tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1139
1140                 tmp2 = tda1004x_read_byte(state, TDA1004X_UNCOR);
1141                 if (tmp2 < 0)
1142                         return -EIO;
1143                 tmp2 &= 0x7f;
1144                 if ((tmp2 < tmp) || (tmp2 == 0))
1145                         break;
1146         }
1147
1148         if (tmp != 0x7f)
1149                 *ucblocks = tmp;
1150         else
1151                 *ucblocks = 0xffffffff;
1152
1153         dprintk("%s: ucblocks=0x%x\n", __func__, *ucblocks);
1154         return 0;
1155 }
1156
1157 static int tda1004x_read_ber(struct dvb_frontend* fe, u32* ber)
1158 {
1159         struct tda1004x_state* state = fe->demodulator_priv;
1160         int tmp;
1161
1162         dprintk("%s\n", __func__);
1163
1164         // read it in
1165         tmp = tda1004x_read_byte(state, TDA1004X_CBER_LSB);
1166         if (tmp < 0)
1167                 return -EIO;
1168         *ber = tmp << 1;
1169         tmp = tda1004x_read_byte(state, TDA1004X_CBER_MSB);
1170         if (tmp < 0)
1171                 return -EIO;
1172         *ber |= (tmp << 9);
1173         // The address 0x20 should be read to cope with a TDA10046 bug
1174         tda1004x_read_byte(state, TDA1004X_CBER_RESET);
1175
1176         dprintk("%s: ber=0x%x\n", __func__, *ber);
1177         return 0;
1178 }
1179
1180 static int tda1004x_sleep(struct dvb_frontend* fe)
1181 {
1182         struct tda1004x_state* state = fe->demodulator_priv;
1183         int gpio_conf;
1184
1185         switch (state->demod_type) {
1186         case TDA1004X_DEMOD_TDA10045:
1187                 tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0x10);
1188                 break;
1189
1190         case TDA1004X_DEMOD_TDA10046:
1191                 /* set outputs to tristate */
1192                 tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE1, 0xff);
1193                 /* invert GPIO 1 and 3 if desired*/
1194                 gpio_conf = state->config->gpio_config;
1195                 if (gpio_conf >= TDA10046_GP00_I)
1196                         tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f,
1197                                                         (gpio_conf & 0x0f) ^ 0x0a);
1198
1199                 tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0xc0);
1200                 tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1);
1201                 break;
1202         }
1203
1204         return 0;
1205 }
1206
1207 static int tda1004x_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
1208 {
1209         struct tda1004x_state* state = fe->demodulator_priv;
1210
1211         if (enable) {
1212                 return tda1004x_enable_tuner_i2c(state);
1213         } else {
1214                 return tda1004x_disable_tuner_i2c(state);
1215         }
1216 }
1217
1218 static int tda1004x_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings)
1219 {
1220         fesettings->min_delay_ms = 800;
1221         /* Drift compensation makes no sense for DVB-T */
1222         fesettings->step_size = 0;
1223         fesettings->max_drift = 0;
1224         return 0;
1225 }
1226
1227 static void tda1004x_release(struct dvb_frontend* fe)
1228 {
1229         struct tda1004x_state *state = fe->demodulator_priv;
1230         kfree(state);
1231 }
1232
1233 static struct dvb_frontend_ops tda10045_ops = {
1234         .info = {
1235                 .name = "Philips TDA10045H DVB-T",
1236                 .type = FE_OFDM,
1237                 .frequency_min = 51000000,
1238                 .frequency_max = 858000000,
1239                 .frequency_stepsize = 166667,
1240                 .caps =
1241                     FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1242                     FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1243                     FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
1244                     FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
1245         },
1246
1247         .release = tda1004x_release,
1248
1249         .init = tda10045_init,
1250         .sleep = tda1004x_sleep,
1251         .write = tda1004x_write,
1252         .i2c_gate_ctrl = tda1004x_i2c_gate_ctrl,
1253
1254         .set_frontend = tda1004x_set_fe,
1255         .get_frontend = tda1004x_get_fe,
1256         .get_tune_settings = tda1004x_get_tune_settings,
1257
1258         .read_status = tda1004x_read_status,
1259         .read_ber = tda1004x_read_ber,
1260         .read_signal_strength = tda1004x_read_signal_strength,
1261         .read_snr = tda1004x_read_snr,
1262         .read_ucblocks = tda1004x_read_ucblocks,
1263 };
1264
1265 struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
1266                                      struct i2c_adapter* i2c)
1267 {
1268         struct tda1004x_state *state;
1269         int id;
1270
1271         /* allocate memory for the internal state */
1272         state = kmalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
1273         if (!state) {
1274                 printk(KERN_ERR "Can't alocate memory for tda10045 state\n");
1275                 return NULL;
1276         }
1277
1278         /* setup the state */
1279         state->config = config;
1280         state->i2c = i2c;
1281         state->demod_type = TDA1004X_DEMOD_TDA10045;
1282
1283         /* check if the demod is there */
1284         id = tda1004x_read_byte(state, TDA1004X_CHIPID);
1285         if (id < 0) {
1286                 printk(KERN_ERR "tda10045: chip is not answering. Giving up.\n");
1287                 kfree(state);
1288                 return NULL;
1289         }
1290
1291         if (id != 0x25) {
1292                 printk(KERN_ERR "Invalid tda1004x ID = 0x%02x. Can't proceed\n", id);
1293                 kfree(state);
1294                 return NULL;
1295         }
1296
1297         /* create dvb_frontend */
1298         memcpy(&state->frontend.ops, &tda10045_ops, sizeof(struct dvb_frontend_ops));
1299         state->frontend.demodulator_priv = state;
1300         return &state->frontend;
1301 }
1302
1303 static struct dvb_frontend_ops tda10046_ops = {
1304         .info = {
1305                 .name = "Philips TDA10046H DVB-T",
1306                 .type = FE_OFDM,
1307                 .frequency_min = 51000000,
1308                 .frequency_max = 858000000,
1309                 .frequency_stepsize = 166667,
1310                 .caps =
1311                     FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1312                     FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1313                     FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
1314                     FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
1315         },
1316
1317         .release = tda1004x_release,
1318
1319         .init = tda10046_init,
1320         .sleep = tda1004x_sleep,
1321         .write = tda1004x_write,
1322         .i2c_gate_ctrl = tda1004x_i2c_gate_ctrl,
1323
1324         .set_frontend = tda1004x_set_fe,
1325         .get_frontend = tda1004x_get_fe,
1326         .get_tune_settings = tda1004x_get_tune_settings,
1327
1328         .read_status = tda1004x_read_status,
1329         .read_ber = tda1004x_read_ber,
1330         .read_signal_strength = tda1004x_read_signal_strength,
1331         .read_snr = tda1004x_read_snr,
1332         .read_ucblocks = tda1004x_read_ucblocks,
1333 };
1334
1335 struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config,
1336                                      struct i2c_adapter* i2c)
1337 {
1338         struct tda1004x_state *state;
1339         int id;
1340
1341         /* allocate memory for the internal state */
1342         state = kmalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
1343         if (!state) {
1344                 printk(KERN_ERR "Can't alocate memory for tda10046 state\n");
1345                 return NULL;
1346         }
1347
1348         /* setup the state */
1349         state->config = config;
1350         state->i2c = i2c;
1351         state->demod_type = TDA1004X_DEMOD_TDA10046;
1352
1353         /* check if the demod is there */
1354         id = tda1004x_read_byte(state, TDA1004X_CHIPID);
1355         if (id < 0) {
1356                 printk(KERN_ERR "tda10046: chip is not answering. Giving up.\n");
1357                 kfree(state);
1358                 return NULL;
1359         }
1360         if (id != 0x46) {
1361                 printk(KERN_ERR "Invalid tda1004x ID = 0x%02x. Can't proceed\n", id);
1362                 kfree(state);
1363                 return NULL;
1364         }
1365
1366         /* create dvb_frontend */
1367         memcpy(&state->frontend.ops, &tda10046_ops, sizeof(struct dvb_frontend_ops));
1368         state->frontend.demodulator_priv = state;
1369         return &state->frontend;
1370 }
1371
1372 module_param(debug, int, 0644);
1373 MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
1374
1375 MODULE_DESCRIPTION("Philips TDA10045H & TDA10046H DVB-T Demodulator");
1376 MODULE_AUTHOR("Andrew de Quincey & Robert Schlabbach");
1377 MODULE_LICENSE("GPL");
1378
1379 EXPORT_SYMBOL(tda10045_attach);
1380 EXPORT_SYMBOL(tda10046_attach);