GNU Linux-libre 4.14.257-gnu1
[releases.git] / drivers / media / tuners / xc4000.c
1 /*
2  *  Driver for Xceive XC4000 "QAM/8VSB single chip tuner"
3  *
4  *  Copyright (c) 2007 Xceive Corporation
5  *  Copyright (c) 2007 Steven Toth <stoth@linuxtv.org>
6  *  Copyright (c) 2009 Devin Heitmueller <dheitmueller@kernellabs.com>
7  *  Copyright (c) 2009 Davide Ferri <d.ferri@zero11.it>
8  *  Copyright (c) 2010 Istvan Varga <istvan_v@mailbox.hu>
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  */
20
21 #include <linux/module.h>
22 #include <linux/moduleparam.h>
23 #include <linux/videodev2.h>
24 #include <linux/delay.h>
25 #include <linux/dvb/frontend.h>
26 #include <linux/i2c.h>
27 #include <linux/mutex.h>
28 #include <asm/unaligned.h>
29
30 #include "dvb_frontend.h"
31
32 #include "xc4000.h"
33 #include "tuner-i2c.h"
34 #include "tuner-xc2028-types.h"
35
36 static int debug;
37 module_param(debug, int, 0644);
38 MODULE_PARM_DESC(debug, "Debugging level (0 to 2, default: 0 (off)).");
39
40 static int no_poweroff;
41 module_param(no_poweroff, int, 0644);
42 MODULE_PARM_DESC(no_poweroff, "Power management (1: disabled, 2: enabled, 0 (default): use device-specific default mode).");
43
44 static int audio_std;
45 module_param(audio_std, int, 0644);
46 MODULE_PARM_DESC(audio_std, "Audio standard. XC4000 audio decoder explicitly needs to know what audio standard is needed for some video standards with audio A2 or NICAM. The valid settings are a sum of:\n"
47         " 1: use NICAM/B or A2/B instead of NICAM/A or A2/A\n"
48         " 2: use A2 instead of NICAM or BTSC\n"
49         " 4: use SECAM/K3 instead of K1\n"
50         " 8: use PAL-D/K audio for SECAM-D/K\n"
51         "16: use FM radio input 1 instead of input 2\n"
52         "32: use mono audio (the lower three bits are ignored)");
53
54 static char firmware_name[30];
55 module_param_string(firmware_name, firmware_name, sizeof(firmware_name), 0);
56 MODULE_PARM_DESC(firmware_name, "Firmware file name. Allows overriding the default firmware name.");
57
58 static DEFINE_MUTEX(xc4000_list_mutex);
59 static LIST_HEAD(hybrid_tuner_instance_list);
60
61 #define dprintk(level, fmt, arg...) if (debug >= level) \
62         printk(KERN_INFO "%s: " fmt, "xc4000", ## arg)
63
64 /* struct for storing firmware table */
65 struct firmware_description {
66         unsigned int  type;
67         v4l2_std_id   id;
68         __u16         int_freq;
69         unsigned char *ptr;
70         unsigned int  size;
71 };
72
73 struct firmware_properties {
74         unsigned int    type;
75         v4l2_std_id     id;
76         v4l2_std_id     std_req;
77         __u16           int_freq;
78         unsigned int    scode_table;
79         int             scode_nr;
80 };
81
82 struct xc4000_priv {
83         struct tuner_i2c_props i2c_props;
84         struct list_head hybrid_tuner_instance_list;
85         struct firmware_description *firm;
86         int     firm_size;
87         u32     if_khz;
88         u32     freq_hz, freq_offset;
89         u32     bandwidth;
90         u8      video_standard;
91         u8      rf_mode;
92         u8      default_pm;
93         u8      dvb_amplitude;
94         u8      set_smoothedcvbs;
95         u8      ignore_i2c_write_errors;
96         __u16   firm_version;
97         struct firmware_properties cur_fw;
98         __u16   hwmodel;
99         __u16   hwvers;
100         struct mutex    lock;
101 };
102
103 #define XC4000_AUDIO_STD_B               1
104 #define XC4000_AUDIO_STD_A2              2
105 #define XC4000_AUDIO_STD_K3              4
106 #define XC4000_AUDIO_STD_L               8
107 #define XC4000_AUDIO_STD_INPUT1         16
108 #define XC4000_AUDIO_STD_MONO           32
109
110 /*(DEBLOBBED)*/
111 /*(DEBLOBBED)*/
112
113 /* Misc Defines */
114 #define MAX_TV_STANDARD                 24
115 #define XC_MAX_I2C_WRITE_LENGTH         64
116 #define XC_POWERED_DOWN                 0x80000000U
117
118 /* Signal Types */
119 #define XC_RF_MODE_AIR                  0
120 #define XC_RF_MODE_CABLE                1
121
122 /* Product id */
123 #define XC_PRODUCT_ID_FW_NOT_LOADED     0x2000
124 #define XC_PRODUCT_ID_XC4000            0x0FA0
125 #define XC_PRODUCT_ID_XC4100            0x1004
126
127 /* Registers (Write-only) */
128 #define XREG_INIT         0x00
129 #define XREG_VIDEO_MODE   0x01
130 #define XREG_AUDIO_MODE   0x02
131 #define XREG_RF_FREQ      0x03
132 #define XREG_D_CODE       0x04
133 #define XREG_DIRECTSITTING_MODE 0x05
134 #define XREG_SEEK_MODE    0x06
135 #define XREG_POWER_DOWN   0x08
136 #define XREG_SIGNALSOURCE 0x0A
137 #define XREG_SMOOTHEDCVBS 0x0E
138 #define XREG_AMPLITUDE    0x10
139
140 /* Registers (Read-only) */
141 #define XREG_ADC_ENV      0x00
142 #define XREG_QUALITY      0x01
143 #define XREG_FRAME_LINES  0x02
144 #define XREG_HSYNC_FREQ   0x03
145 #define XREG_LOCK         0x04
146 #define XREG_FREQ_ERROR   0x05
147 #define XREG_SNR          0x06
148 #define XREG_VERSION      0x07
149 #define XREG_PRODUCT_ID   0x08
150 #define XREG_SIGNAL_LEVEL 0x0A
151 #define XREG_NOISE_LEVEL  0x0B
152
153 /*
154    Basic firmware description. This will remain with
155    the driver for documentation purposes.
156
157    This represents an I2C firmware file encoded as a
158    string of unsigned char. Format is as follows:
159
160    char[0  ]=len0_MSB  -> len = len_MSB * 256 + len_LSB
161    char[1  ]=len0_LSB  -> length of first write transaction
162    char[2  ]=data0 -> first byte to be sent
163    char[3  ]=data1
164    char[4  ]=data2
165    char[   ]=...
166    char[M  ]=dataN  -> last byte to be sent
167    char[M+1]=len1_MSB  -> len = len_MSB * 256 + len_LSB
168    char[M+2]=len1_LSB  -> length of second write transaction
169    char[M+3]=data0
170    char[M+4]=data1
171    ...
172    etc.
173
174    The [len] value should be interpreted as follows:
175
176    len= len_MSB _ len_LSB
177    len=1111_1111_1111_1111   : End of I2C_SEQUENCE
178    len=0000_0000_0000_0000   : Reset command: Do hardware reset
179    len=0NNN_NNNN_NNNN_NNNN   : Normal transaction: number of bytes = {1:32767)
180    len=1WWW_WWWW_WWWW_WWWW   : Wait command: wait for {1:32767} ms
181
182    For the RESET and WAIT commands, the two following bytes will contain
183    immediately the length of the following transaction.
184 */
185
186 struct XC_TV_STANDARD {
187         const char  *Name;
188         u16         audio_mode;
189         u16         video_mode;
190         u16         int_freq;
191 };
192
193 /* Tuner standards */
194 #define XC4000_MN_NTSC_PAL_BTSC         0
195 #define XC4000_MN_NTSC_PAL_A2           1
196 #define XC4000_MN_NTSC_PAL_EIAJ         2
197 #define XC4000_MN_NTSC_PAL_Mono         3
198 #define XC4000_BG_PAL_A2                4
199 #define XC4000_BG_PAL_NICAM             5
200 #define XC4000_BG_PAL_MONO              6
201 #define XC4000_I_PAL_NICAM              7
202 #define XC4000_I_PAL_NICAM_MONO         8
203 #define XC4000_DK_PAL_A2                9
204 #define XC4000_DK_PAL_NICAM             10
205 #define XC4000_DK_PAL_MONO              11
206 #define XC4000_DK_SECAM_A2DK1           12
207 #define XC4000_DK_SECAM_A2LDK3          13
208 #define XC4000_DK_SECAM_A2MONO          14
209 #define XC4000_DK_SECAM_NICAM           15
210 #define XC4000_L_SECAM_NICAM            16
211 #define XC4000_LC_SECAM_NICAM           17
212 #define XC4000_DTV6                     18
213 #define XC4000_DTV8                     19
214 #define XC4000_DTV7_8                   20
215 #define XC4000_DTV7                     21
216 #define XC4000_FM_Radio_INPUT2          22
217 #define XC4000_FM_Radio_INPUT1          23
218
219 static struct XC_TV_STANDARD xc4000_standard[MAX_TV_STANDARD] = {
220         {"M/N-NTSC/PAL-BTSC",   0x0000, 0x80A0, 4500},
221         {"M/N-NTSC/PAL-A2",     0x0000, 0x80A0, 4600},
222         {"M/N-NTSC/PAL-EIAJ",   0x0040, 0x80A0, 4500},
223         {"M/N-NTSC/PAL-Mono",   0x0078, 0x80A0, 4500},
224         {"B/G-PAL-A2",          0x0000, 0x8159, 5640},
225         {"B/G-PAL-NICAM",       0x0004, 0x8159, 5740},
226         {"B/G-PAL-MONO",        0x0078, 0x8159, 5500},
227         {"I-PAL-NICAM",         0x0080, 0x8049, 6240},
228         {"I-PAL-NICAM-MONO",    0x0078, 0x8049, 6000},
229         {"D/K-PAL-A2",          0x0000, 0x8049, 6380},
230         {"D/K-PAL-NICAM",       0x0080, 0x8049, 6200},
231         {"D/K-PAL-MONO",        0x0078, 0x8049, 6500},
232         {"D/K-SECAM-A2 DK1",    0x0000, 0x8049, 6340},
233         {"D/K-SECAM-A2 L/DK3",  0x0000, 0x8049, 6000},
234         {"D/K-SECAM-A2 MONO",   0x0078, 0x8049, 6500},
235         {"D/K-SECAM-NICAM",     0x0080, 0x8049, 6200},
236         {"L-SECAM-NICAM",       0x8080, 0x0009, 6200},
237         {"L'-SECAM-NICAM",      0x8080, 0x4009, 6200},
238         {"DTV6",                0x00C0, 0x8002,    0},
239         {"DTV8",                0x00C0, 0x800B,    0},
240         {"DTV7/8",              0x00C0, 0x801B,    0},
241         {"DTV7",                0x00C0, 0x8007,    0},
242         {"FM Radio-INPUT2",     0x0008, 0x9800, 10700},
243         {"FM Radio-INPUT1",     0x0008, 0x9000, 10700}
244 };
245
246 static int xc4000_readreg(struct xc4000_priv *priv, u16 reg, u16 *val);
247 static int xc4000_tuner_reset(struct dvb_frontend *fe);
248 static void xc_debug_dump(struct xc4000_priv *priv);
249
250 static int xc_send_i2c_data(struct xc4000_priv *priv, u8 *buf, int len)
251 {
252         struct i2c_msg msg = { .addr = priv->i2c_props.addr,
253                                .flags = 0, .buf = buf, .len = len };
254         if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
255                 if (priv->ignore_i2c_write_errors == 0) {
256                         printk(KERN_ERR "xc4000: I2C write failed (len=%i)\n",
257                                len);
258                         if (len == 4) {
259                                 printk(KERN_ERR "bytes %*ph\n", 4, buf);
260                         }
261                         return -EREMOTEIO;
262                 }
263         }
264         return 0;
265 }
266
267 static int xc4000_tuner_reset(struct dvb_frontend *fe)
268 {
269         struct xc4000_priv *priv = fe->tuner_priv;
270         int ret;
271
272         dprintk(1, "%s()\n", __func__);
273
274         if (fe->callback) {
275                 ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
276                                            fe->dvb->priv :
277                                            priv->i2c_props.adap->algo_data,
278                                            DVB_FRONTEND_COMPONENT_TUNER,
279                                            XC4000_TUNER_RESET, 0);
280                 if (ret) {
281                         printk(KERN_ERR "xc4000: reset failed\n");
282                         return -EREMOTEIO;
283                 }
284         } else {
285                 printk(KERN_ERR "xc4000: no tuner reset callback function, fatal\n");
286                 return -EINVAL;
287         }
288         return 0;
289 }
290
291 static int xc_write_reg(struct xc4000_priv *priv, u16 regAddr, u16 i2cData)
292 {
293         u8 buf[4];
294         int result;
295
296         buf[0] = (regAddr >> 8) & 0xFF;
297         buf[1] = regAddr & 0xFF;
298         buf[2] = (i2cData >> 8) & 0xFF;
299         buf[3] = i2cData & 0xFF;
300         result = xc_send_i2c_data(priv, buf, 4);
301
302         return result;
303 }
304
305 static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
306 {
307         struct xc4000_priv *priv = fe->tuner_priv;
308
309         int i, nbytes_to_send, result;
310         unsigned int len, pos, index;
311         u8 buf[XC_MAX_I2C_WRITE_LENGTH];
312
313         index = 0;
314         while ((i2c_sequence[index] != 0xFF) ||
315                 (i2c_sequence[index + 1] != 0xFF)) {
316                 len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
317                 if (len == 0x0000) {
318                         /* RESET command */
319                         /* NOTE: this is ignored, as the reset callback was */
320                         /* already called by check_firmware() */
321                         index += 2;
322                 } else if (len & 0x8000) {
323                         /* WAIT command */
324                         msleep(len & 0x7FFF);
325                         index += 2;
326                 } else {
327                         /* Send i2c data whilst ensuring individual transactions
328                          * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
329                          */
330                         index += 2;
331                         buf[0] = i2c_sequence[index];
332                         buf[1] = i2c_sequence[index + 1];
333                         pos = 2;
334                         while (pos < len) {
335                                 if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
336                                         nbytes_to_send =
337                                                 XC_MAX_I2C_WRITE_LENGTH;
338                                 else
339                                         nbytes_to_send = (len - pos + 2);
340                                 for (i = 2; i < nbytes_to_send; i++) {
341                                         buf[i] = i2c_sequence[index + pos +
342                                                 i - 2];
343                                 }
344                                 result = xc_send_i2c_data(priv, buf,
345                                         nbytes_to_send);
346
347                                 if (result != 0)
348                                         return result;
349
350                                 pos += nbytes_to_send - 2;
351                         }
352                         index += len;
353                 }
354         }
355         return 0;
356 }
357
358 static int xc_set_tv_standard(struct xc4000_priv *priv,
359         u16 video_mode, u16 audio_mode)
360 {
361         int ret;
362         dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, video_mode, audio_mode);
363         dprintk(1, "%s() Standard = %s\n",
364                 __func__,
365                 xc4000_standard[priv->video_standard].Name);
366
367         /* Don't complain when the request fails because of i2c stretching */
368         priv->ignore_i2c_write_errors = 1;
369
370         ret = xc_write_reg(priv, XREG_VIDEO_MODE, video_mode);
371         if (ret == 0)
372                 ret = xc_write_reg(priv, XREG_AUDIO_MODE, audio_mode);
373
374         priv->ignore_i2c_write_errors = 0;
375
376         return ret;
377 }
378
379 static int xc_set_signal_source(struct xc4000_priv *priv, u16 rf_mode)
380 {
381         dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
382                 rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
383
384         if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
385                 rf_mode = XC_RF_MODE_CABLE;
386                 printk(KERN_ERR
387                         "%s(), Invalid mode, defaulting to CABLE",
388                         __func__);
389         }
390         return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
391 }
392
393 static const struct dvb_tuner_ops xc4000_tuner_ops;
394
395 static int xc_set_rf_frequency(struct xc4000_priv *priv, u32 freq_hz)
396 {
397         u16 freq_code;
398
399         dprintk(1, "%s(%u)\n", __func__, freq_hz);
400
401         if ((freq_hz > xc4000_tuner_ops.info.frequency_max) ||
402             (freq_hz < xc4000_tuner_ops.info.frequency_min))
403                 return -EINVAL;
404
405         freq_code = (u16)(freq_hz / 15625);
406
407         /* WAS: Starting in firmware version 1.1.44, Xceive recommends using the
408            FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
409            only be used for fast scanning for channel lock) */
410         /* WAS: XREG_FINERFREQ */
411         return xc_write_reg(priv, XREG_RF_FREQ, freq_code);
412 }
413
414 static int xc_get_adc_envelope(struct xc4000_priv *priv, u16 *adc_envelope)
415 {
416         return xc4000_readreg(priv, XREG_ADC_ENV, adc_envelope);
417 }
418
419 static int xc_get_frequency_error(struct xc4000_priv *priv, u32 *freq_error_hz)
420 {
421         int result;
422         u16 regData;
423         u32 tmp;
424
425         result = xc4000_readreg(priv, XREG_FREQ_ERROR, &regData);
426         if (result != 0)
427                 return result;
428
429         tmp = (u32)regData & 0xFFFFU;
430         tmp = (tmp < 0x8000U ? tmp : 0x10000U - tmp);
431         (*freq_error_hz) = tmp * 15625;
432         return result;
433 }
434
435 static int xc_get_lock_status(struct xc4000_priv *priv, u16 *lock_status)
436 {
437         return xc4000_readreg(priv, XREG_LOCK, lock_status);
438 }
439
440 static int xc_get_version(struct xc4000_priv *priv,
441         u8 *hw_majorversion, u8 *hw_minorversion,
442         u8 *fw_majorversion, u8 *fw_minorversion)
443 {
444         u16 data;
445         int result;
446
447         result = xc4000_readreg(priv, XREG_VERSION, &data);
448         if (result != 0)
449                 return result;
450
451         (*hw_majorversion) = (data >> 12) & 0x0F;
452         (*hw_minorversion) = (data >>  8) & 0x0F;
453         (*fw_majorversion) = (data >>  4) & 0x0F;
454         (*fw_minorversion) = data & 0x0F;
455
456         return 0;
457 }
458
459 static int xc_get_hsync_freq(struct xc4000_priv *priv, u32 *hsync_freq_hz)
460 {
461         u16 regData;
462         int result;
463
464         result = xc4000_readreg(priv, XREG_HSYNC_FREQ, &regData);
465         if (result != 0)
466                 return result;
467
468         (*hsync_freq_hz) = ((regData & 0x0fff) * 763)/100;
469         return result;
470 }
471
472 static int xc_get_frame_lines(struct xc4000_priv *priv, u16 *frame_lines)
473 {
474         return xc4000_readreg(priv, XREG_FRAME_LINES, frame_lines);
475 }
476
477 static int xc_get_quality(struct xc4000_priv *priv, u16 *quality)
478 {
479         return xc4000_readreg(priv, XREG_QUALITY, quality);
480 }
481
482 static int xc_get_signal_level(struct xc4000_priv *priv, u16 *signal)
483 {
484         return xc4000_readreg(priv, XREG_SIGNAL_LEVEL, signal);
485 }
486
487 static int xc_get_noise_level(struct xc4000_priv *priv, u16 *noise)
488 {
489         return xc4000_readreg(priv, XREG_NOISE_LEVEL, noise);
490 }
491
492 static u16 xc_wait_for_lock(struct xc4000_priv *priv)
493 {
494         u16     lock_state = 0;
495         int     watchdog_count = 40;
496
497         while ((lock_state == 0) && (watchdog_count > 0)) {
498                 xc_get_lock_status(priv, &lock_state);
499                 if (lock_state != 1) {
500                         msleep(5);
501                         watchdog_count--;
502                 }
503         }
504         return lock_state;
505 }
506
507 static int xc_tune_channel(struct xc4000_priv *priv, u32 freq_hz)
508 {
509         int     found = 1;
510         int     result;
511
512         dprintk(1, "%s(%u)\n", __func__, freq_hz);
513
514         /* Don't complain when the request fails because of i2c stretching */
515         priv->ignore_i2c_write_errors = 1;
516         result = xc_set_rf_frequency(priv, freq_hz);
517         priv->ignore_i2c_write_errors = 0;
518
519         if (result != 0)
520                 return 0;
521
522         /* wait for lock only in analog TV mode */
523         if ((priv->cur_fw.type & (FM | DTV6 | DTV7 | DTV78 | DTV8)) == 0) {
524                 if (xc_wait_for_lock(priv) != 1)
525                         found = 0;
526         }
527
528         /* Wait for stats to stabilize.
529          * Frame Lines needs two frame times after initial lock
530          * before it is valid.
531          */
532         msleep(debug ? 100 : 10);
533
534         if (debug)
535                 xc_debug_dump(priv);
536
537         return found;
538 }
539
540 static int xc4000_readreg(struct xc4000_priv *priv, u16 reg, u16 *val)
541 {
542         u8 buf[2] = { reg >> 8, reg & 0xff };
543         u8 bval[2] = { 0, 0 };
544         struct i2c_msg msg[2] = {
545                 { .addr = priv->i2c_props.addr,
546                         .flags = 0, .buf = &buf[0], .len = 2 },
547                 { .addr = priv->i2c_props.addr,
548                         .flags = I2C_M_RD, .buf = &bval[0], .len = 2 },
549         };
550
551         if (i2c_transfer(priv->i2c_props.adap, msg, 2) != 2) {
552                 printk(KERN_ERR "xc4000: I2C read failed\n");
553                 return -EREMOTEIO;
554         }
555
556         *val = (bval[0] << 8) | bval[1];
557         return 0;
558 }
559
560 #define dump_firm_type(t)       dump_firm_type_and_int_freq(t, 0)
561 static void dump_firm_type_and_int_freq(unsigned int type, u16 int_freq)
562 {
563         if (type & BASE)
564                 printk(KERN_CONT "BASE ");
565         if (type & INIT1)
566                 printk(KERN_CONT "INIT1 ");
567         if (type & F8MHZ)
568                 printk(KERN_CONT "F8MHZ ");
569         if (type & MTS)
570                 printk(KERN_CONT "MTS ");
571         if (type & D2620)
572                 printk(KERN_CONT "D2620 ");
573         if (type & D2633)
574                 printk(KERN_CONT "D2633 ");
575         if (type & DTV6)
576                 printk(KERN_CONT "DTV6 ");
577         if (type & QAM)
578                 printk(KERN_CONT "QAM ");
579         if (type & DTV7)
580                 printk(KERN_CONT "DTV7 ");
581         if (type & DTV78)
582                 printk(KERN_CONT "DTV78 ");
583         if (type & DTV8)
584                 printk(KERN_CONT "DTV8 ");
585         if (type & FM)
586                 printk(KERN_CONT "FM ");
587         if (type & INPUT1)
588                 printk(KERN_CONT "INPUT1 ");
589         if (type & LCD)
590                 printk(KERN_CONT "LCD ");
591         if (type & NOGD)
592                 printk(KERN_CONT "NOGD ");
593         if (type & MONO)
594                 printk(KERN_CONT "MONO ");
595         if (type & ATSC)
596                 printk(KERN_CONT "ATSC ");
597         if (type & IF)
598                 printk(KERN_CONT "IF ");
599         if (type & LG60)
600                 printk(KERN_CONT "LG60 ");
601         if (type & ATI638)
602                 printk(KERN_CONT "ATI638 ");
603         if (type & OREN538)
604                 printk(KERN_CONT "OREN538 ");
605         if (type & OREN36)
606                 printk(KERN_CONT "OREN36 ");
607         if (type & TOYOTA388)
608                 printk(KERN_CONT "TOYOTA388 ");
609         if (type & TOYOTA794)
610                 printk(KERN_CONT "TOYOTA794 ");
611         if (type & DIBCOM52)
612                 printk(KERN_CONT "DIBCOM52 ");
613         if (type & ZARLINK456)
614                 printk(KERN_CONT "ZARLINK456 ");
615         if (type & CHINA)
616                 printk(KERN_CONT "CHINA ");
617         if (type & F6MHZ)
618                 printk(KERN_CONT "F6MHZ ");
619         if (type & INPUT2)
620                 printk(KERN_CONT "INPUT2 ");
621         if (type & SCODE)
622                 printk(KERN_CONT "SCODE ");
623         if (type & HAS_IF)
624                 printk(KERN_CONT "HAS_IF_%d ", int_freq);
625 }
626
627 static int seek_firmware(struct dvb_frontend *fe, unsigned int type,
628                          v4l2_std_id *id)
629 {
630         struct xc4000_priv *priv = fe->tuner_priv;
631         int             i, best_i = -1;
632         unsigned int    best_nr_diffs = 255U;
633
634         if (!priv->firm) {
635                 printk(KERN_ERR "Error! firmware not loaded\n");
636                 return -EINVAL;
637         }
638
639         if (((type & ~SCODE) == 0) && (*id == 0))
640                 *id = V4L2_STD_PAL;
641
642         /* Seek for generic video standard match */
643         for (i = 0; i < priv->firm_size; i++) {
644                 v4l2_std_id     id_diff_mask =
645                         (priv->firm[i].id ^ (*id)) & (*id);
646                 unsigned int    type_diff_mask =
647                         (priv->firm[i].type ^ type)
648                         & (BASE_TYPES | DTV_TYPES | LCD | NOGD | MONO | SCODE);
649                 unsigned int    nr_diffs;
650
651                 if (type_diff_mask
652                     & (BASE | INIT1 | FM | DTV6 | DTV7 | DTV78 | DTV8 | SCODE))
653                         continue;
654
655                 nr_diffs = hweight64(id_diff_mask) + hweight32(type_diff_mask);
656                 if (!nr_diffs)  /* Supports all the requested standards */
657                         goto found;
658
659                 if (nr_diffs < best_nr_diffs) {
660                         best_nr_diffs = nr_diffs;
661                         best_i = i;
662                 }
663         }
664
665         /* FIXME: Would make sense to seek for type "hint" match ? */
666         if (best_i < 0) {
667                 i = -ENOENT;
668                 goto ret;
669         }
670
671         if (best_nr_diffs > 0U) {
672                 printk(KERN_WARNING
673                        "Selecting best matching firmware (%u bits differ) for type=(%x), id %016llx:\n",
674                        best_nr_diffs, type, (unsigned long long)*id);
675                 i = best_i;
676         }
677
678 found:
679         *id = priv->firm[i].id;
680
681 ret:
682         if (debug) {
683                 printk(KERN_DEBUG "%s firmware for type=",
684                        (i < 0) ? "Can't find" : "Found");
685                 dump_firm_type(type);
686                 printk(KERN_DEBUG "(%x), id %016llx.\n", type, (unsigned long long)*id);
687         }
688         return i;
689 }
690
691 static int load_firmware(struct dvb_frontend *fe, unsigned int type,
692                          v4l2_std_id *id)
693 {
694         struct xc4000_priv *priv = fe->tuner_priv;
695         int                pos, rc;
696         unsigned char      *p;
697
698         pos = seek_firmware(fe, type, id);
699         if (pos < 0)
700                 return pos;
701
702         p = priv->firm[pos].ptr;
703
704         /* Don't complain when the request fails because of i2c stretching */
705         priv->ignore_i2c_write_errors = 1;
706
707         rc = xc_load_i2c_sequence(fe, p);
708
709         priv->ignore_i2c_write_errors = 0;
710
711         return rc;
712 }
713
714 static int xc4000_fwupload(struct dvb_frontend *fe)
715 {
716         struct xc4000_priv *priv = fe->tuner_priv;
717         const struct firmware *fw   = NULL;
718         const unsigned char   *p, *endp;
719         int                   rc = 0;
720         int                   n, n_array;
721         char                  name[33];
722         const char            *fname;
723
724         if (firmware_name[0] != '\0') {
725                 fname = firmware_name;
726
727                 dprintk(1, "Reading custom firmware %s\n", fname);
728                 rc = maybe_reject_firmware(&fw, fname,
729                                       priv->i2c_props.adap->dev.parent);
730         } else {
731                 fname = "/*(DEBLOBBED)*/";
732                 dprintk(1, "Trying to read firmware %s\n", fname);
733                 rc = maybe_reject_firmware(&fw, fname,
734                                       priv->i2c_props.adap->dev.parent);
735                 if (rc == -ENOENT) {
736                         fname = "/*(DEBLOBBED)*/";
737                         dprintk(1, "Trying to read firmware %s\n", fname);
738                         rc = maybe_reject_firmware(&fw, fname,
739                                               priv->i2c_props.adap->dev.parent);
740                 }
741         }
742
743         if (rc < 0) {
744                 if (rc == -ENOENT)
745                         printk(KERN_ERR "Error: firmware %s not found.\n", fname);
746                 else
747                         printk(KERN_ERR "Error %d while requesting firmware %s\n",
748                                rc, fname);
749
750                 return rc;
751         }
752         dprintk(1, "Loading Firmware: %s\n", fname);
753
754         p = fw->data;
755         endp = p + fw->size;
756
757         if (fw->size < sizeof(name) - 1 + 2 + 2) {
758                 printk(KERN_ERR "Error: firmware file %s has invalid size!\n",
759                        fname);
760                 goto corrupt;
761         }
762
763         memcpy(name, p, sizeof(name) - 1);
764         name[sizeof(name) - 1] = '\0';
765         p += sizeof(name) - 1;
766
767         priv->firm_version = get_unaligned_le16(p);
768         p += 2;
769
770         n_array = get_unaligned_le16(p);
771         p += 2;
772
773         dprintk(1, "Loading %d firmware images from %s, type: %s, ver %d.%d\n",
774                 n_array, fname, name,
775                 priv->firm_version >> 8, priv->firm_version & 0xff);
776
777         priv->firm = kcalloc(n_array, sizeof(*priv->firm), GFP_KERNEL);
778         if (priv->firm == NULL) {
779                 printk(KERN_ERR "Not enough memory to load firmware file.\n");
780                 rc = -ENOMEM;
781                 goto done;
782         }
783         priv->firm_size = n_array;
784
785         n = -1;
786         while (p < endp) {
787                 __u32 type, size;
788                 v4l2_std_id id;
789                 __u16 int_freq = 0;
790
791                 n++;
792                 if (n >= n_array) {
793                         printk(KERN_ERR "More firmware images in file than were expected!\n");
794                         goto corrupt;
795                 }
796
797                 /* Checks if there's enough bytes to read */
798                 if (endp - p < sizeof(type) + sizeof(id) + sizeof(size))
799                         goto header;
800
801                 type = get_unaligned_le32(p);
802                 p += sizeof(type);
803
804                 id = get_unaligned_le64(p);
805                 p += sizeof(id);
806
807                 if (type & HAS_IF) {
808                         int_freq = get_unaligned_le16(p);
809                         p += sizeof(int_freq);
810                         if (endp - p < sizeof(size))
811                                 goto header;
812                 }
813
814                 size = get_unaligned_le32(p);
815                 p += sizeof(size);
816
817                 if (!size || size > endp - p) {
818                         printk(KERN_ERR "Firmware type (%x), id %llx is corrupted (size=%d, expected %d)\n",
819                                type, (unsigned long long)id,
820                                (unsigned)(endp - p), size);
821                         goto corrupt;
822                 }
823
824                 priv->firm[n].ptr = kzalloc(size, GFP_KERNEL);
825                 if (priv->firm[n].ptr == NULL) {
826                         printk(KERN_ERR "Not enough memory to load firmware file.\n");
827                         rc = -ENOMEM;
828                         goto done;
829                 }
830
831                 if (debug) {
832                         printk(KERN_DEBUG "Reading firmware type ");
833                         dump_firm_type_and_int_freq(type, int_freq);
834                         printk(KERN_DEBUG "(%x), id %llx, size=%d.\n",
835                                type, (unsigned long long)id, size);
836                 }
837
838                 memcpy(priv->firm[n].ptr, p, size);
839                 priv->firm[n].type = type;
840                 priv->firm[n].id   = id;
841                 priv->firm[n].size = size;
842                 priv->firm[n].int_freq = int_freq;
843
844                 p += size;
845         }
846
847         if (n + 1 != priv->firm_size) {
848                 printk(KERN_ERR "Firmware file is incomplete!\n");
849                 goto corrupt;
850         }
851
852         goto done;
853
854 header:
855         printk(KERN_ERR "Firmware header is incomplete!\n");
856 corrupt:
857         rc = -EINVAL;
858         printk(KERN_ERR "Error: firmware file is corrupted!\n");
859
860 done:
861         release_firmware(fw);
862         if (rc == 0)
863                 dprintk(1, "Firmware files loaded.\n");
864
865         return rc;
866 }
867
868 static int load_scode(struct dvb_frontend *fe, unsigned int type,
869                          v4l2_std_id *id, __u16 int_freq, int scode)
870 {
871         struct xc4000_priv *priv = fe->tuner_priv;
872         int             pos, rc;
873         unsigned char   *p;
874         u8              scode_buf[13];
875         u8              indirect_mode[5];
876
877         dprintk(1, "%s called int_freq=%d\n", __func__, int_freq);
878
879         if (!int_freq) {
880                 pos = seek_firmware(fe, type, id);
881                 if (pos < 0)
882                         return pos;
883         } else {
884                 for (pos = 0; pos < priv->firm_size; pos++) {
885                         if ((priv->firm[pos].int_freq == int_freq) &&
886                             (priv->firm[pos].type & HAS_IF))
887                                 break;
888                 }
889                 if (pos == priv->firm_size)
890                         return -ENOENT;
891         }
892
893         p = priv->firm[pos].ptr;
894
895         if (priv->firm[pos].size != 12 * 16 || scode >= 16)
896                 return -EINVAL;
897         p += 12 * scode;
898
899         if (debug) {
900                 tuner_info("Loading SCODE for type=");
901                 dump_firm_type_and_int_freq(priv->firm[pos].type,
902                                             priv->firm[pos].int_freq);
903                 printk(KERN_CONT "(%x), id %016llx.\n", priv->firm[pos].type,
904                        (unsigned long long)*id);
905         }
906
907         scode_buf[0] = 0x00;
908         memcpy(&scode_buf[1], p, 12);
909
910         /* Enter direct-mode */
911         rc = xc_write_reg(priv, XREG_DIRECTSITTING_MODE, 0);
912         if (rc < 0) {
913                 printk(KERN_ERR "failed to put device into direct mode!\n");
914                 return -EIO;
915         }
916
917         rc = xc_send_i2c_data(priv, scode_buf, 13);
918         if (rc != 0) {
919                 /* Even if the send failed, make sure we set back to indirect
920                    mode */
921                 printk(KERN_ERR "Failed to set scode %d\n", rc);
922         }
923
924         /* Switch back to indirect-mode */
925         memset(indirect_mode, 0, sizeof(indirect_mode));
926         indirect_mode[4] = 0x88;
927         xc_send_i2c_data(priv, indirect_mode, sizeof(indirect_mode));
928         msleep(10);
929
930         return 0;
931 }
932
933 static int check_firmware(struct dvb_frontend *fe, unsigned int type,
934                           v4l2_std_id std, __u16 int_freq)
935 {
936         struct xc4000_priv         *priv = fe->tuner_priv;
937         struct firmware_properties new_fw;
938         int                        rc = 0, is_retry = 0;
939         u16                        hwmodel;
940         v4l2_std_id                std0;
941         u8                         hw_major = 0, hw_minor = 0, fw_major = 0, fw_minor = 0;
942
943         dprintk(1, "%s called\n", __func__);
944
945         if (!priv->firm) {
946                 rc = xc4000_fwupload(fe);
947                 if (rc < 0)
948                         return rc;
949         }
950
951 retry:
952         new_fw.type = type;
953         new_fw.id = std;
954         new_fw.std_req = std;
955         new_fw.scode_table = SCODE;
956         new_fw.scode_nr = 0;
957         new_fw.int_freq = int_freq;
958
959         dprintk(1, "checking firmware, user requested type=");
960         if (debug) {
961                 dump_firm_type(new_fw.type);
962                 printk(KERN_CONT "(%x), id %016llx, ", new_fw.type,
963                        (unsigned long long)new_fw.std_req);
964                 if (!int_freq)
965                         printk(KERN_CONT "scode_tbl ");
966                 else
967                         printk(KERN_CONT "int_freq %d, ", new_fw.int_freq);
968                 printk(KERN_CONT "scode_nr %d\n", new_fw.scode_nr);
969         }
970
971         /* No need to reload base firmware if it matches */
972         if (priv->cur_fw.type & BASE) {
973                 dprintk(1, "BASE firmware not changed.\n");
974                 goto skip_base;
975         }
976
977         /* Updating BASE - forget about all currently loaded firmware */
978         memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
979
980         /* Reset is needed before loading firmware */
981         rc = xc4000_tuner_reset(fe);
982         if (rc < 0)
983                 goto fail;
984
985         /* BASE firmwares are all std0 */
986         std0 = 0;
987         rc = load_firmware(fe, BASE, &std0);
988         if (rc < 0) {
989                 printk(KERN_ERR "Error %d while loading base firmware\n", rc);
990                 goto fail;
991         }
992
993         /* Load INIT1, if needed */
994         dprintk(1, "Load init1 firmware, if exists\n");
995
996         rc = load_firmware(fe, BASE | INIT1, &std0);
997         if (rc == -ENOENT)
998                 rc = load_firmware(fe, BASE | INIT1, &std0);
999         if (rc < 0 && rc != -ENOENT) {
1000                 tuner_err("Error %d while loading init1 firmware\n",
1001                           rc);
1002                 goto fail;
1003         }
1004
1005 skip_base:
1006         /*
1007          * No need to reload standard specific firmware if base firmware
1008          * was not reloaded and requested video standards have not changed.
1009          */
1010         if (priv->cur_fw.type == (BASE | new_fw.type) &&
1011             priv->cur_fw.std_req == std) {
1012                 dprintk(1, "Std-specific firmware already loaded.\n");
1013                 goto skip_std_specific;
1014         }
1015
1016         /* Reloading std-specific firmware forces a SCODE update */
1017         priv->cur_fw.scode_table = 0;
1018
1019         /* Load the standard firmware */
1020         rc = load_firmware(fe, new_fw.type, &new_fw.id);
1021
1022         if (rc < 0)
1023                 goto fail;
1024
1025 skip_std_specific:
1026         if (priv->cur_fw.scode_table == new_fw.scode_table &&
1027             priv->cur_fw.scode_nr == new_fw.scode_nr) {
1028                 dprintk(1, "SCODE firmware already loaded.\n");
1029                 goto check_device;
1030         }
1031
1032         /* Load SCODE firmware, if exists */
1033         rc = load_scode(fe, new_fw.type | new_fw.scode_table, &new_fw.id,
1034                         new_fw.int_freq, new_fw.scode_nr);
1035         if (rc != 0)
1036                 dprintk(1, "load scode failed %d\n", rc);
1037
1038 check_device:
1039         rc = xc4000_readreg(priv, XREG_PRODUCT_ID, &hwmodel);
1040
1041         if (xc_get_version(priv, &hw_major, &hw_minor, &fw_major,
1042                            &fw_minor) != 0) {
1043                 printk(KERN_ERR "Unable to read tuner registers.\n");
1044                 goto fail;
1045         }
1046
1047         dprintk(1, "Device is Xceive %d version %d.%d, firmware version %d.%d\n",
1048                 hwmodel, hw_major, hw_minor, fw_major, fw_minor);
1049
1050         /* Check firmware version against what we downloaded. */
1051         if (priv->firm_version != ((fw_major << 8) | fw_minor)) {
1052                 printk(KERN_WARNING
1053                        "Incorrect readback of firmware version %d.%d.\n",
1054                        fw_major, fw_minor);
1055                 goto fail;
1056         }
1057
1058         /* Check that the tuner hardware model remains consistent over time. */
1059         if (priv->hwmodel == 0 &&
1060             (hwmodel == XC_PRODUCT_ID_XC4000 ||
1061              hwmodel == XC_PRODUCT_ID_XC4100)) {
1062                 priv->hwmodel = hwmodel;
1063                 priv->hwvers = (hw_major << 8) | hw_minor;
1064         } else if (priv->hwmodel == 0 || priv->hwmodel != hwmodel ||
1065                    priv->hwvers != ((hw_major << 8) | hw_minor)) {
1066                 printk(KERN_WARNING
1067                        "Read invalid device hardware information - tuner hung?\n");
1068                 goto fail;
1069         }
1070
1071         priv->cur_fw = new_fw;
1072
1073         /*
1074          * By setting BASE in cur_fw.type only after successfully loading all
1075          * firmwares, we can:
1076          * 1. Identify that BASE firmware with type=0 has been loaded;
1077          * 2. Tell whether BASE firmware was just changed the next time through.
1078          */
1079         priv->cur_fw.type |= BASE;
1080
1081         return 0;
1082
1083 fail:
1084         memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
1085         if (!is_retry) {
1086                 msleep(50);
1087                 is_retry = 1;
1088                 dprintk(1, "Retrying firmware load\n");
1089                 goto retry;
1090         }
1091
1092         if (rc == -ENOENT)
1093                 rc = -EINVAL;
1094         return rc;
1095 }
1096
1097 static void xc_debug_dump(struct xc4000_priv *priv)
1098 {
1099         u16     adc_envelope;
1100         u32     freq_error_hz = 0;
1101         u16     lock_status;
1102         u32     hsync_freq_hz = 0;
1103         u16     frame_lines;
1104         u16     quality;
1105         u16     signal = 0;
1106         u16     noise = 0;
1107         u8      hw_majorversion = 0, hw_minorversion = 0;
1108         u8      fw_majorversion = 0, fw_minorversion = 0;
1109
1110         xc_get_adc_envelope(priv, &adc_envelope);
1111         dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
1112
1113         xc_get_frequency_error(priv, &freq_error_hz);
1114         dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
1115
1116         xc_get_lock_status(priv, &lock_status);
1117         dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
1118                 lock_status);
1119
1120         xc_get_version(priv, &hw_majorversion, &hw_minorversion,
1121                        &fw_majorversion, &fw_minorversion);
1122         dprintk(1, "*** HW: V%02x.%02x, FW: V%02x.%02x\n",
1123                 hw_majorversion, hw_minorversion,
1124                 fw_majorversion, fw_minorversion);
1125
1126         if (priv->video_standard < XC4000_DTV6) {
1127                 xc_get_hsync_freq(priv, &hsync_freq_hz);
1128                 dprintk(1, "*** Horizontal sync frequency = %d Hz\n",
1129                         hsync_freq_hz);
1130
1131                 xc_get_frame_lines(priv, &frame_lines);
1132                 dprintk(1, "*** Frame lines = %d\n", frame_lines);
1133         }
1134
1135         xc_get_quality(priv, &quality);
1136         dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality);
1137
1138         xc_get_signal_level(priv, &signal);
1139         dprintk(1, "*** Signal level = -%ddB (%d)\n", signal >> 8, signal);
1140
1141         xc_get_noise_level(priv, &noise);
1142         dprintk(1, "*** Noise level = %ddB (%d)\n", noise >> 8, noise);
1143 }
1144
1145 static int xc4000_set_params(struct dvb_frontend *fe)
1146 {
1147         struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1148         u32 delsys = c->delivery_system;
1149         u32 bw = c->bandwidth_hz;
1150         struct xc4000_priv *priv = fe->tuner_priv;
1151         unsigned int type;
1152         int     ret = -EREMOTEIO;
1153
1154         dprintk(1, "%s() frequency=%d (Hz)\n", __func__, c->frequency);
1155
1156         mutex_lock(&priv->lock);
1157
1158         switch (delsys) {
1159         case SYS_ATSC:
1160                 dprintk(1, "%s() VSB modulation\n", __func__);
1161                 priv->rf_mode = XC_RF_MODE_AIR;
1162                 priv->freq_offset = 1750000;
1163                 priv->video_standard = XC4000_DTV6;
1164                 type = DTV6;
1165                 break;
1166         case SYS_DVBC_ANNEX_B:
1167                 dprintk(1, "%s() QAM modulation\n", __func__);
1168                 priv->rf_mode = XC_RF_MODE_CABLE;
1169                 priv->freq_offset = 1750000;
1170                 priv->video_standard = XC4000_DTV6;
1171                 type = DTV6;
1172                 break;
1173         case SYS_DVBT:
1174         case SYS_DVBT2:
1175                 dprintk(1, "%s() OFDM\n", __func__);
1176                 if (bw == 0) {
1177                         if (c->frequency < 400000000) {
1178                                 priv->freq_offset = 2250000;
1179                         } else {
1180                                 priv->freq_offset = 2750000;
1181                         }
1182                         priv->video_standard = XC4000_DTV7_8;
1183                         type = DTV78;
1184                 } else if (bw <= 6000000) {
1185                         priv->video_standard = XC4000_DTV6;
1186                         priv->freq_offset = 1750000;
1187                         type = DTV6;
1188                 } else if (bw <= 7000000) {
1189                         priv->video_standard = XC4000_DTV7;
1190                         priv->freq_offset = 2250000;
1191                         type = DTV7;
1192                 } else {
1193                         priv->video_standard = XC4000_DTV8;
1194                         priv->freq_offset = 2750000;
1195                         type = DTV8;
1196                 }
1197                 priv->rf_mode = XC_RF_MODE_AIR;
1198                 break;
1199         default:
1200                 printk(KERN_ERR "xc4000 delivery system not supported!\n");
1201                 ret = -EINVAL;
1202                 goto fail;
1203         }
1204
1205         priv->freq_hz = c->frequency - priv->freq_offset;
1206
1207         dprintk(1, "%s() frequency=%d (compensated)\n",
1208                 __func__, priv->freq_hz);
1209
1210         /* Make sure the correct firmware type is loaded */
1211         if (check_firmware(fe, type, 0, priv->if_khz) != 0)
1212                 goto fail;
1213
1214         priv->bandwidth = c->bandwidth_hz;
1215
1216         ret = xc_set_signal_source(priv, priv->rf_mode);
1217         if (ret != 0) {
1218                 printk(KERN_ERR "xc4000: xc_set_signal_source(%d) failed\n",
1219                        priv->rf_mode);
1220                 goto fail;
1221         } else {
1222                 u16     video_mode, audio_mode;
1223                 video_mode = xc4000_standard[priv->video_standard].video_mode;
1224                 audio_mode = xc4000_standard[priv->video_standard].audio_mode;
1225                 if (type == DTV6 && priv->firm_version != 0x0102)
1226                         video_mode |= 0x0001;
1227                 ret = xc_set_tv_standard(priv, video_mode, audio_mode);
1228                 if (ret != 0) {
1229                         printk(KERN_ERR "xc4000: xc_set_tv_standard failed\n");
1230                         /* DJH - do not return when it fails... */
1231                         /* goto fail; */
1232                 }
1233         }
1234
1235         if (xc_write_reg(priv, XREG_D_CODE, 0) == 0)
1236                 ret = 0;
1237         if (priv->dvb_amplitude != 0) {
1238                 if (xc_write_reg(priv, XREG_AMPLITUDE,
1239                                  (priv->firm_version != 0x0102 ||
1240                                   priv->dvb_amplitude != 134 ?
1241                                   priv->dvb_amplitude : 132)) != 0)
1242                         ret = -EREMOTEIO;
1243         }
1244         if (priv->set_smoothedcvbs != 0) {
1245                 if (xc_write_reg(priv, XREG_SMOOTHEDCVBS, 1) != 0)
1246                         ret = -EREMOTEIO;
1247         }
1248         if (ret != 0) {
1249                 printk(KERN_ERR "xc4000: setting registers failed\n");
1250                 /* goto fail; */
1251         }
1252
1253         xc_tune_channel(priv, priv->freq_hz);
1254
1255         ret = 0;
1256
1257 fail:
1258         mutex_unlock(&priv->lock);
1259
1260         return ret;
1261 }
1262
1263 static int xc4000_set_analog_params(struct dvb_frontend *fe,
1264         struct analog_parameters *params)
1265 {
1266         struct xc4000_priv *priv = fe->tuner_priv;
1267         unsigned int type = 0;
1268         int     ret = -EREMOTEIO;
1269
1270         if (params->mode == V4L2_TUNER_RADIO) {
1271                 dprintk(1, "%s() frequency=%d (in units of 62.5Hz)\n",
1272                         __func__, params->frequency);
1273
1274                 mutex_lock(&priv->lock);
1275
1276                 params->std = 0;
1277                 priv->freq_hz = params->frequency * 125L / 2;
1278
1279                 if (audio_std & XC4000_AUDIO_STD_INPUT1) {
1280                         priv->video_standard = XC4000_FM_Radio_INPUT1;
1281                         type = FM | INPUT1;
1282                 } else {
1283                         priv->video_standard = XC4000_FM_Radio_INPUT2;
1284                         type = FM | INPUT2;
1285                 }
1286
1287                 goto tune_channel;
1288         }
1289
1290         dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
1291                 __func__, params->frequency);
1292
1293         mutex_lock(&priv->lock);
1294
1295         /* params->frequency is in units of 62.5khz */
1296         priv->freq_hz = params->frequency * 62500;
1297
1298         params->std &= V4L2_STD_ALL;
1299         /* if std is not defined, choose one */
1300         if (!params->std)
1301                 params->std = V4L2_STD_PAL_BG;
1302
1303         if (audio_std & XC4000_AUDIO_STD_MONO)
1304                 type = MONO;
1305
1306         if (params->std & V4L2_STD_MN) {
1307                 params->std = V4L2_STD_MN;
1308                 if (audio_std & XC4000_AUDIO_STD_MONO) {
1309                         priv->video_standard = XC4000_MN_NTSC_PAL_Mono;
1310                 } else if (audio_std & XC4000_AUDIO_STD_A2) {
1311                         params->std |= V4L2_STD_A2;
1312                         priv->video_standard = XC4000_MN_NTSC_PAL_A2;
1313                 } else {
1314                         params->std |= V4L2_STD_BTSC;
1315                         priv->video_standard = XC4000_MN_NTSC_PAL_BTSC;
1316                 }
1317                 goto tune_channel;
1318         }
1319
1320         if (params->std & V4L2_STD_PAL_BG) {
1321                 params->std = V4L2_STD_PAL_BG;
1322                 if (audio_std & XC4000_AUDIO_STD_MONO) {
1323                         priv->video_standard = XC4000_BG_PAL_MONO;
1324                 } else if (!(audio_std & XC4000_AUDIO_STD_A2)) {
1325                         if (!(audio_std & XC4000_AUDIO_STD_B)) {
1326                                 params->std |= V4L2_STD_NICAM_A;
1327                                 priv->video_standard = XC4000_BG_PAL_NICAM;
1328                         } else {
1329                                 params->std |= V4L2_STD_NICAM_B;
1330                                 priv->video_standard = XC4000_BG_PAL_NICAM;
1331                         }
1332                 } else {
1333                         if (!(audio_std & XC4000_AUDIO_STD_B)) {
1334                                 params->std |= V4L2_STD_A2_A;
1335                                 priv->video_standard = XC4000_BG_PAL_A2;
1336                         } else {
1337                                 params->std |= V4L2_STD_A2_B;
1338                                 priv->video_standard = XC4000_BG_PAL_A2;
1339                         }
1340                 }
1341                 goto tune_channel;
1342         }
1343
1344         if (params->std & V4L2_STD_PAL_I) {
1345                 /* default to NICAM audio standard */
1346                 params->std = V4L2_STD_PAL_I | V4L2_STD_NICAM;
1347                 if (audio_std & XC4000_AUDIO_STD_MONO)
1348                         priv->video_standard = XC4000_I_PAL_NICAM_MONO;
1349                 else
1350                         priv->video_standard = XC4000_I_PAL_NICAM;
1351                 goto tune_channel;
1352         }
1353
1354         if (params->std & V4L2_STD_PAL_DK) {
1355                 params->std = V4L2_STD_PAL_DK;
1356                 if (audio_std & XC4000_AUDIO_STD_MONO) {
1357                         priv->video_standard = XC4000_DK_PAL_MONO;
1358                 } else if (audio_std & XC4000_AUDIO_STD_A2) {
1359                         params->std |= V4L2_STD_A2;
1360                         priv->video_standard = XC4000_DK_PAL_A2;
1361                 } else {
1362                         params->std |= V4L2_STD_NICAM;
1363                         priv->video_standard = XC4000_DK_PAL_NICAM;
1364                 }
1365                 goto tune_channel;
1366         }
1367
1368         if (params->std & V4L2_STD_SECAM_DK) {
1369                 /* default to A2 audio standard */
1370                 params->std = V4L2_STD_SECAM_DK | V4L2_STD_A2;
1371                 if (audio_std & XC4000_AUDIO_STD_L) {
1372                         type = 0;
1373                         priv->video_standard = XC4000_DK_SECAM_NICAM;
1374                 } else if (audio_std & XC4000_AUDIO_STD_MONO) {
1375                         priv->video_standard = XC4000_DK_SECAM_A2MONO;
1376                 } else if (audio_std & XC4000_AUDIO_STD_K3) {
1377                         params->std |= V4L2_STD_SECAM_K3;
1378                         priv->video_standard = XC4000_DK_SECAM_A2LDK3;
1379                 } else {
1380                         priv->video_standard = XC4000_DK_SECAM_A2DK1;
1381                 }
1382                 goto tune_channel;
1383         }
1384
1385         if (params->std & V4L2_STD_SECAM_L) {
1386                 /* default to NICAM audio standard */
1387                 type = 0;
1388                 params->std = V4L2_STD_SECAM_L | V4L2_STD_NICAM;
1389                 priv->video_standard = XC4000_L_SECAM_NICAM;
1390                 goto tune_channel;
1391         }
1392
1393         if (params->std & V4L2_STD_SECAM_LC) {
1394                 /* default to NICAM audio standard */
1395                 type = 0;
1396                 params->std = V4L2_STD_SECAM_LC | V4L2_STD_NICAM;
1397                 priv->video_standard = XC4000_LC_SECAM_NICAM;
1398                 goto tune_channel;
1399         }
1400
1401 tune_channel:
1402         /* FIXME: it could be air. */
1403         priv->rf_mode = XC_RF_MODE_CABLE;
1404
1405         if (check_firmware(fe, type, params->std,
1406                            xc4000_standard[priv->video_standard].int_freq) != 0)
1407                 goto fail;
1408
1409         ret = xc_set_signal_source(priv, priv->rf_mode);
1410         if (ret != 0) {
1411                 printk(KERN_ERR
1412                        "xc4000: xc_set_signal_source(%d) failed\n",
1413                        priv->rf_mode);
1414                 goto fail;
1415         } else {
1416                 u16     video_mode, audio_mode;
1417                 video_mode = xc4000_standard[priv->video_standard].video_mode;
1418                 audio_mode = xc4000_standard[priv->video_standard].audio_mode;
1419                 if (priv->video_standard < XC4000_BG_PAL_A2) {
1420                         if (type & NOGD)
1421                                 video_mode &= 0xFF7F;
1422                 } else if (priv->video_standard < XC4000_I_PAL_NICAM) {
1423                         if (priv->firm_version == 0x0102)
1424                                 video_mode &= 0xFEFF;
1425                         if (audio_std & XC4000_AUDIO_STD_B)
1426                                 video_mode |= 0x0080;
1427                 }
1428                 ret = xc_set_tv_standard(priv, video_mode, audio_mode);
1429                 if (ret != 0) {
1430                         printk(KERN_ERR "xc4000: xc_set_tv_standard failed\n");
1431                         goto fail;
1432                 }
1433         }
1434
1435         if (xc_write_reg(priv, XREG_D_CODE, 0) == 0)
1436                 ret = 0;
1437         if (xc_write_reg(priv, XREG_AMPLITUDE, 1) != 0)
1438                 ret = -EREMOTEIO;
1439         if (priv->set_smoothedcvbs != 0) {
1440                 if (xc_write_reg(priv, XREG_SMOOTHEDCVBS, 1) != 0)
1441                         ret = -EREMOTEIO;
1442         }
1443         if (ret != 0) {
1444                 printk(KERN_ERR "xc4000: setting registers failed\n");
1445                 goto fail;
1446         }
1447
1448         xc_tune_channel(priv, priv->freq_hz);
1449
1450         ret = 0;
1451
1452 fail:
1453         mutex_unlock(&priv->lock);
1454
1455         return ret;
1456 }
1457
1458 static int xc4000_get_signal(struct dvb_frontend *fe, u16 *strength)
1459 {
1460         struct xc4000_priv *priv = fe->tuner_priv;
1461         u16 value = 0;
1462         int rc;
1463
1464         mutex_lock(&priv->lock);
1465         rc = xc4000_readreg(priv, XREG_SIGNAL_LEVEL, &value);
1466         mutex_unlock(&priv->lock);
1467
1468         if (rc < 0)
1469                 goto ret;
1470
1471         /* Informations from real testing of DVB-T and radio part,
1472            coeficient for one dB is 0xff.
1473          */
1474         tuner_dbg("Signal strength: -%ddB (%05d)\n", value >> 8, value);
1475
1476         /* all known digital modes */
1477         if ((priv->video_standard == XC4000_DTV6) ||
1478             (priv->video_standard == XC4000_DTV7) ||
1479             (priv->video_standard == XC4000_DTV7_8) ||
1480             (priv->video_standard == XC4000_DTV8))
1481                 goto digital;
1482
1483         /* Analog mode has NOISE LEVEL important, signal
1484            depends only on gain of antenna and amplifiers,
1485            but it doesn't tell anything about real quality
1486            of reception.
1487          */
1488         mutex_lock(&priv->lock);
1489         rc = xc4000_readreg(priv, XREG_NOISE_LEVEL, &value);
1490         mutex_unlock(&priv->lock);
1491
1492         tuner_dbg("Noise level: %ddB (%05d)\n", value >> 8, value);
1493
1494         /* highest noise level: 32dB */
1495         if (value >= 0x2000) {
1496                 value = 0;
1497         } else {
1498                 value = (~value << 3) & 0xffff;
1499         }
1500
1501         goto ret;
1502
1503         /* Digital mode has SIGNAL LEVEL important and real
1504            noise level is stored in demodulator registers.
1505          */
1506 digital:
1507         /* best signal: -50dB */
1508         if (value <= 0x3200) {
1509                 value = 0xffff;
1510         /* minimum: -114dB - should be 0x7200 but real zero is 0x713A */
1511         } else if (value >= 0x713A) {
1512                 value = 0;
1513         } else {
1514                 value = ~(value - 0x3200) << 2;
1515         }
1516
1517 ret:
1518         *strength = value;
1519
1520         return rc;
1521 }
1522
1523 static int xc4000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1524 {
1525         struct xc4000_priv *priv = fe->tuner_priv;
1526
1527         *freq = priv->freq_hz + priv->freq_offset;
1528
1529         if (debug) {
1530                 mutex_lock(&priv->lock);
1531                 if ((priv->cur_fw.type
1532                      & (BASE | FM | DTV6 | DTV7 | DTV78 | DTV8)) == BASE) {
1533                         u16     snr = 0;
1534                         if (xc4000_readreg(priv, XREG_SNR, &snr) == 0) {
1535                                 mutex_unlock(&priv->lock);
1536                                 dprintk(1, "%s() freq = %u, SNR = %d\n",
1537                                         __func__, *freq, snr);
1538                                 return 0;
1539                         }
1540                 }
1541                 mutex_unlock(&priv->lock);
1542         }
1543
1544         dprintk(1, "%s()\n", __func__);
1545
1546         return 0;
1547 }
1548
1549 static int xc4000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1550 {
1551         struct xc4000_priv *priv = fe->tuner_priv;
1552         dprintk(1, "%s()\n", __func__);
1553
1554         *bw = priv->bandwidth;
1555         return 0;
1556 }
1557
1558 static int xc4000_get_status(struct dvb_frontend *fe, u32 *status)
1559 {
1560         struct xc4000_priv *priv = fe->tuner_priv;
1561         u16     lock_status = 0;
1562
1563         mutex_lock(&priv->lock);
1564
1565         if (priv->cur_fw.type & BASE)
1566                 xc_get_lock_status(priv, &lock_status);
1567
1568         *status = (lock_status == 1 ?
1569                    TUNER_STATUS_LOCKED | TUNER_STATUS_STEREO : 0);
1570         if (priv->cur_fw.type & (DTV6 | DTV7 | DTV78 | DTV8))
1571                 *status &= (~TUNER_STATUS_STEREO);
1572
1573         mutex_unlock(&priv->lock);
1574
1575         dprintk(2, "%s() lock_status = %d\n", __func__, lock_status);
1576
1577         return 0;
1578 }
1579
1580 static int xc4000_sleep(struct dvb_frontend *fe)
1581 {
1582         struct xc4000_priv *priv = fe->tuner_priv;
1583         int     ret = 0;
1584
1585         dprintk(1, "%s()\n", __func__);
1586
1587         mutex_lock(&priv->lock);
1588
1589         /* Avoid firmware reload on slow devices */
1590         if ((no_poweroff == 2 ||
1591              (no_poweroff == 0 && priv->default_pm != 0)) &&
1592             (priv->cur_fw.type & BASE) != 0) {
1593                 /* force reset and firmware reload */
1594                 priv->cur_fw.type = XC_POWERED_DOWN;
1595
1596                 if (xc_write_reg(priv, XREG_POWER_DOWN, 0) != 0) {
1597                         printk(KERN_ERR
1598                                "xc4000: %s() unable to shutdown tuner\n",
1599                                __func__);
1600                         ret = -EREMOTEIO;
1601                 }
1602                 msleep(20);
1603         }
1604
1605         mutex_unlock(&priv->lock);
1606
1607         return ret;
1608 }
1609
1610 static int xc4000_init(struct dvb_frontend *fe)
1611 {
1612         dprintk(1, "%s()\n", __func__);
1613
1614         return 0;
1615 }
1616
1617 static void xc4000_release(struct dvb_frontend *fe)
1618 {
1619         struct xc4000_priv *priv = fe->tuner_priv;
1620
1621         dprintk(1, "%s()\n", __func__);
1622
1623         mutex_lock(&xc4000_list_mutex);
1624
1625         if (priv)
1626                 hybrid_tuner_release_state(priv);
1627
1628         mutex_unlock(&xc4000_list_mutex);
1629
1630         fe->tuner_priv = NULL;
1631 }
1632
1633 static const struct dvb_tuner_ops xc4000_tuner_ops = {
1634         .info = {
1635                 .name           = "Xceive XC4000",
1636                 .frequency_min  =    1000000,
1637                 .frequency_max  = 1023000000,
1638                 .frequency_step =      50000,
1639         },
1640
1641         .release           = xc4000_release,
1642         .init              = xc4000_init,
1643         .sleep             = xc4000_sleep,
1644
1645         .set_params        = xc4000_set_params,
1646         .set_analog_params = xc4000_set_analog_params,
1647         .get_frequency     = xc4000_get_frequency,
1648         .get_rf_strength   = xc4000_get_signal,
1649         .get_bandwidth     = xc4000_get_bandwidth,
1650         .get_status        = xc4000_get_status
1651 };
1652
1653 struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
1654                                    struct i2c_adapter *i2c,
1655                                    struct xc4000_config *cfg)
1656 {
1657         struct xc4000_priv *priv = NULL;
1658         int     instance;
1659         u16     id = 0;
1660
1661         dprintk(1, "%s(%d-%04x)\n", __func__,
1662                 i2c ? i2c_adapter_id(i2c) : -1,
1663                 cfg ? cfg->i2c_address : -1);
1664
1665         mutex_lock(&xc4000_list_mutex);
1666
1667         instance = hybrid_tuner_request_state(struct xc4000_priv, priv,
1668                                               hybrid_tuner_instance_list,
1669                                               i2c, cfg->i2c_address, "xc4000");
1670         switch (instance) {
1671         case 0:
1672                 goto fail;
1673         case 1:
1674                 /* new tuner instance */
1675                 priv->bandwidth = 6000000;
1676                 /* set default configuration */
1677                 priv->if_khz = 4560;
1678                 priv->default_pm = 0;
1679                 priv->dvb_amplitude = 134;
1680                 priv->set_smoothedcvbs = 1;
1681                 mutex_init(&priv->lock);
1682                 fe->tuner_priv = priv;
1683                 break;
1684         default:
1685                 /* existing tuner instance */
1686                 fe->tuner_priv = priv;
1687                 break;
1688         }
1689
1690         if (cfg->if_khz != 0) {
1691                 /* copy configuration if provided by the caller */
1692                 priv->if_khz = cfg->if_khz;
1693                 priv->default_pm = cfg->default_pm;
1694                 priv->dvb_amplitude = cfg->dvb_amplitude;
1695                 priv->set_smoothedcvbs = cfg->set_smoothedcvbs;
1696         }
1697
1698         /* Check if firmware has been loaded. It is possible that another
1699            instance of the driver has loaded the firmware.
1700          */
1701
1702         if (instance == 1) {
1703                 if (xc4000_readreg(priv, XREG_PRODUCT_ID, &id) != 0)
1704                         goto fail;
1705         } else {
1706                 id = ((priv->cur_fw.type & BASE) != 0 ?
1707                       priv->hwmodel : XC_PRODUCT_ID_FW_NOT_LOADED);
1708         }
1709
1710         switch (id) {
1711         case XC_PRODUCT_ID_XC4000:
1712         case XC_PRODUCT_ID_XC4100:
1713                 printk(KERN_INFO
1714                         "xc4000: Successfully identified at address 0x%02x\n",
1715                         cfg->i2c_address);
1716                 printk(KERN_INFO
1717                         "xc4000: Firmware has been loaded previously\n");
1718                 break;
1719         case XC_PRODUCT_ID_FW_NOT_LOADED:
1720                 printk(KERN_INFO
1721                         "xc4000: Successfully identified at address 0x%02x\n",
1722                         cfg->i2c_address);
1723                 printk(KERN_INFO
1724                         "xc4000: Firmware has not been loaded previously\n");
1725                 break;
1726         default:
1727                 printk(KERN_ERR
1728                         "xc4000: Device not found at addr 0x%02x (0x%x)\n",
1729                         cfg->i2c_address, id);
1730                 goto fail;
1731         }
1732
1733         mutex_unlock(&xc4000_list_mutex);
1734
1735         memcpy(&fe->ops.tuner_ops, &xc4000_tuner_ops,
1736                 sizeof(struct dvb_tuner_ops));
1737
1738         if (instance == 1) {
1739                 int     ret;
1740                 mutex_lock(&priv->lock);
1741                 ret = xc4000_fwupload(fe);
1742                 mutex_unlock(&priv->lock);
1743                 if (ret != 0)
1744                         goto fail2;
1745         }
1746
1747         return fe;
1748 fail:
1749         mutex_unlock(&xc4000_list_mutex);
1750 fail2:
1751         xc4000_release(fe);
1752         return NULL;
1753 }
1754 EXPORT_SYMBOL(xc4000_attach);
1755
1756 MODULE_AUTHOR("Steven Toth, Davide Ferri");
1757 MODULE_DESCRIPTION("Xceive xc4000 silicon tuner driver");
1758 MODULE_LICENSE("GPL");
1759 /*(DEBLOBBED)*/