[media] xc5000: reset device if encountering PLL lock failure
[deliverable/linux.git] / drivers / media / common / tuners / xc5000.c
CommitLineData
aacb9d31
ST
1/*
2 * Driver for Xceive XC5000 "QAM/8VSB single chip tuner"
3 *
4 * Copyright (c) 2007 Xceive Corporation
6d897616 5 * Copyright (c) 2007 Steven Toth <stoth@linuxtv.org>
e80858e8 6 * Copyright (c) 2009 Devin Heitmueller <dheitmueller@kernellabs.com>
aacb9d31
ST
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 *
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24#include <linux/module.h>
25#include <linux/moduleparam.h>
4917019d 26#include <linux/videodev2.h>
aacb9d31
ST
27#include <linux/delay.h>
28#include <linux/dvb/frontend.h>
29#include <linux/i2c.h>
30
31#include "dvb_frontend.h"
32
33#include "xc5000.h"
89fd2854 34#include "tuner-i2c.h"
aacb9d31
ST
35
36static int debug;
37module_param(debug, int, 0644);
38MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
39
b6bd5eb8
DH
40static int no_poweroff;
41module_param(no_poweroff, int, 0644);
42MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
43 "\t\t1 keep device energized and with tuner ready all the times.\n"
44 "\t\tFaster, but consumes more power and keeps the device hotter");
45
89fd2854
MK
46static DEFINE_MUTEX(xc5000_list_mutex);
47static LIST_HEAD(hybrid_tuner_instance_list);
48
8f3cd530 49#define dprintk(level, fmt, arg...) if (debug >= level) \
aacb9d31
ST
50 printk(KERN_INFO "%s: " fmt, "xc5000", ## arg)
51
ffb41234 52struct xc5000_priv {
89fd2854
MK
53 struct tuner_i2c_props i2c_props;
54 struct list_head hybrid_tuner_instance_list;
ffb41234 55
2a6003c2 56 u32 if_khz;
409328a4 57 u16 xtal_khz;
ffb41234
MK
58 u32 freq_hz;
59 u32 bandwidth;
60 u8 video_standard;
61 u8 rf_mode;
496e9057 62 u8 radio_input;
76efb0ba 63
6fab81df 64 int chip_id;
de49bc6e 65 u16 pll_register_no;
ffb41234
MK
66};
67
aacb9d31 68/* Misc Defines */
724dcbfa 69#define MAX_TV_STANDARD 24
aacb9d31
ST
70#define XC_MAX_I2C_WRITE_LENGTH 64
71
72/* Signal Types */
73#define XC_RF_MODE_AIR 0
74#define XC_RF_MODE_CABLE 1
75
76/* Result codes */
77#define XC_RESULT_SUCCESS 0
78#define XC_RESULT_RESET_FAILURE 1
79#define XC_RESULT_I2C_WRITE_FAILURE 2
80#define XC_RESULT_I2C_READ_FAILURE 3
81#define XC_RESULT_OUT_OF_RANGE 5
82
27c685a4
ST
83/* Product id */
84#define XC_PRODUCT_ID_FW_NOT_LOADED 0x2000
85#define XC_PRODUCT_ID_FW_LOADED 0x1388
86
aacb9d31
ST
87/* Registers */
88#define XREG_INIT 0x00
89#define XREG_VIDEO_MODE 0x01
90#define XREG_AUDIO_MODE 0x02
91#define XREG_RF_FREQ 0x03
92#define XREG_D_CODE 0x04
93#define XREG_IF_OUT 0x05
94#define XREG_SEEK_MODE 0x07
7f05b530 95#define XREG_POWER_DOWN 0x0A /* Obsolete */
724dcbfa
DB
96/* Set the output amplitude - SIF for analog, DTVP/DTVN for digital */
97#define XREG_OUTPUT_AMP 0x0B
aacb9d31
ST
98#define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */
99#define XREG_SMOOTHEDCVBS 0x0E
100#define XREG_XTALFREQ 0x0F
81c4dfe7 101#define XREG_FINERFREQ 0x10
aacb9d31
ST
102#define XREG_DDIMODE 0x11
103
104#define XREG_ADC_ENV 0x00
105#define XREG_QUALITY 0x01
106#define XREG_FRAME_LINES 0x02
107#define XREG_HSYNC_FREQ 0x03
108#define XREG_LOCK 0x04
109#define XREG_FREQ_ERROR 0x05
110#define XREG_SNR 0x06
111#define XREG_VERSION 0x07
112#define XREG_PRODUCT_ID 0x08
113#define XREG_BUSY 0x09
bae7b7d7 114#define XREG_BUILD 0x0D
7c287f18 115#define XREG_TOTALGAIN 0x0F
aacb9d31
ST
116
117/*
118 Basic firmware description. This will remain with
119 the driver for documentation purposes.
120
121 This represents an I2C firmware file encoded as a
122 string of unsigned char. Format is as follows:
123
124 char[0 ]=len0_MSB -> len = len_MSB * 256 + len_LSB
125 char[1 ]=len0_LSB -> length of first write transaction
126 char[2 ]=data0 -> first byte to be sent
127 char[3 ]=data1
128 char[4 ]=data2
129 char[ ]=...
130 char[M ]=dataN -> last byte to be sent
131 char[M+1]=len1_MSB -> len = len_MSB * 256 + len_LSB
132 char[M+2]=len1_LSB -> length of second write transaction
133 char[M+3]=data0
134 char[M+4]=data1
135 ...
136 etc.
137
138 The [len] value should be interpreted as follows:
139
140 len= len_MSB _ len_LSB
141 len=1111_1111_1111_1111 : End of I2C_SEQUENCE
142 len=0000_0000_0000_0000 : Reset command: Do hardware reset
143 len=0NNN_NNNN_NNNN_NNNN : Normal transaction: number of bytes = {1:32767)
144 len=1WWW_WWWW_WWWW_WWWW : Wait command: wait for {1:32767} ms
145
146 For the RESET and WAIT commands, the two following bytes will contain
147 immediately the length of the following transaction.
148
149*/
8f3cd530 150struct XC_TV_STANDARD {
aacb9d31 151 char *Name;
e12671cf
ST
152 u16 AudioMode;
153 u16 VideoMode;
8f3cd530 154};
aacb9d31
ST
155
156/* Tuner standards */
27c685a4
ST
157#define MN_NTSC_PAL_BTSC 0
158#define MN_NTSC_PAL_A2 1
159#define MN_NTSC_PAL_EIAJ 2
160#define MN_NTSC_PAL_Mono 3
161#define BG_PAL_A2 4
162#define BG_PAL_NICAM 5
163#define BG_PAL_MONO 6
164#define I_PAL_NICAM 7
165#define I_PAL_NICAM_MONO 8
166#define DK_PAL_A2 9
167#define DK_PAL_NICAM 10
168#define DK_PAL_MONO 11
169#define DK_SECAM_A2DK1 12
170#define DK_SECAM_A2LDK3 13
171#define DK_SECAM_A2MONO 14
172#define L_SECAM_NICAM 15
173#define LC_SECAM_NICAM 16
174#define DTV6 17
175#define DTV8 18
176#define DTV7_8 19
177#define DTV7 20
178#define FM_Radio_INPUT2 21
179#define FM_Radio_INPUT1 22
724dcbfa 180#define FM_Radio_INPUT1_MONO 23
aacb9d31 181
8f3cd530 182static struct XC_TV_STANDARD XC5000_Standard[MAX_TV_STANDARD] = {
aacb9d31
ST
183 {"M/N-NTSC/PAL-BTSC", 0x0400, 0x8020},
184 {"M/N-NTSC/PAL-A2", 0x0600, 0x8020},
185 {"M/N-NTSC/PAL-EIAJ", 0x0440, 0x8020},
186 {"M/N-NTSC/PAL-Mono", 0x0478, 0x8020},
187 {"B/G-PAL-A2", 0x0A00, 0x8049},
188 {"B/G-PAL-NICAM", 0x0C04, 0x8049},
189 {"B/G-PAL-MONO", 0x0878, 0x8059},
190 {"I-PAL-NICAM", 0x1080, 0x8009},
191 {"I-PAL-NICAM-MONO", 0x0E78, 0x8009},
192 {"D/K-PAL-A2", 0x1600, 0x8009},
193 {"D/K-PAL-NICAM", 0x0E80, 0x8009},
194 {"D/K-PAL-MONO", 0x1478, 0x8009},
195 {"D/K-SECAM-A2 DK1", 0x1200, 0x8009},
8f3cd530 196 {"D/K-SECAM-A2 L/DK3", 0x0E00, 0x8009},
aacb9d31
ST
197 {"D/K-SECAM-A2 MONO", 0x1478, 0x8009},
198 {"L-SECAM-NICAM", 0x8E82, 0x0009},
199 {"L'-SECAM-NICAM", 0x8E82, 0x4009},
200 {"DTV6", 0x00C0, 0x8002},
201 {"DTV8", 0x00C0, 0x800B},
202 {"DTV7/8", 0x00C0, 0x801B},
203 {"DTV7", 0x00C0, 0x8007},
204 {"FM Radio-INPUT2", 0x9802, 0x9002},
724dcbfa
DB
205 {"FM Radio-INPUT1", 0x0208, 0x9002},
206 {"FM Radio-INPUT1_MONO", 0x0278, 0x9002}
aacb9d31
ST
207};
208
ddea427f
MK
209
210struct xc5000_fw_cfg {
211 char *name;
212 u16 size;
de49bc6e 213 u16 pll_reg;
ddea427f
MK
214};
215
3422f2a6 216#define XC5000A_FIRMWARE "dvb-fe-xc5000-1.6.114.fw"
a3db60bc 217static const struct xc5000_fw_cfg xc5000a_1_6_114 = {
3422f2a6 218 .name = XC5000A_FIRMWARE,
76efb0ba 219 .size = 12401,
de49bc6e 220 .pll_reg = 0x806c,
76efb0ba
MK
221};
222
3422f2a6 223#define XC5000C_FIRMWARE "dvb-fe-xc5000c-41.024.5.fw"
7d3d0d8d 224static const struct xc5000_fw_cfg xc5000c_41_024_5 = {
3422f2a6 225 .name = XC5000C_FIRMWARE,
7d3d0d8d 226 .size = 16497,
de49bc6e 227 .pll_reg = 0x13,
d8398805
MK
228};
229
a3db60bc 230static inline const struct xc5000_fw_cfg *xc5000_assign_firmware(int chip_id)
ddea427f 231{
6fab81df 232 switch (chip_id) {
ddea427f 233 default:
6fab81df 234 case XC5000A:
ddea427f 235 return &xc5000a_1_6_114;
6fab81df 236 case XC5000C:
7d3d0d8d 237 return &xc5000c_41_024_5;
ddea427f
MK
238 }
239}
240
de49bc6e 241static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force);
91bd625e 242static int xc5000_is_firmware_loaded(struct dvb_frontend *fe);
bdd33563 243static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val);
91bd625e 244static int xc5000_TunerReset(struct dvb_frontend *fe);
aacb9d31 245
e12671cf 246static int xc_send_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
aacb9d31 247{
d7800d4e
DH
248 struct i2c_msg msg = { .addr = priv->i2c_props.addr,
249 .flags = 0, .buf = buf, .len = len };
250
251 if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
252 printk(KERN_ERR "xc5000: I2C write failed (len=%i)\n", len);
253 return XC_RESULT_I2C_WRITE_FAILURE;
254 }
255 return XC_RESULT_SUCCESS;
aacb9d31
ST
256}
257
1cdffda7 258#if 0
bdd33563
DH
259/* This routine is never used because the only time we read data from the
260 i2c bus is when we read registers, and we want that to be an atomic i2c
261 transaction in case we are on a multi-master bus */
e12671cf 262static int xc_read_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
aacb9d31 263{
bdd33563
DH
264 struct i2c_msg msg = { .addr = priv->i2c_props.addr,
265 .flags = I2C_M_RD, .buf = buf, .len = len };
266
267 if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
268 printk(KERN_ERR "xc5000 I2C read failed (len=%i)\n", len);
269 return -EREMOTEIO;
270 }
271 return 0;
aacb9d31 272}
1cdffda7 273#endif
aacb9d31 274
4743319f
DB
275static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val)
276{
277 u8 buf[2] = { reg >> 8, reg & 0xff };
278 u8 bval[2] = { 0, 0 };
279 struct i2c_msg msg[2] = {
280 { .addr = priv->i2c_props.addr,
281 .flags = 0, .buf = &buf[0], .len = 2 },
282 { .addr = priv->i2c_props.addr,
283 .flags = I2C_M_RD, .buf = &bval[0], .len = 2 },
284 };
285
286 if (i2c_transfer(priv->i2c_props.adap, msg, 2) != 2) {
287 printk(KERN_WARNING "xc5000: I2C read failed\n");
288 return -EREMOTEIO;
289 }
290
291 *val = (bval[0] << 8) | bval[1];
292 return XC_RESULT_SUCCESS;
293}
294
e12671cf 295static void xc_wait(int wait_ms)
aacb9d31 296{
e12671cf 297 msleep(wait_ms);
aacb9d31
ST
298}
299
91bd625e 300static int xc5000_TunerReset(struct dvb_frontend *fe)
aacb9d31
ST
301{
302 struct xc5000_priv *priv = fe->tuner_priv;
303 int ret;
304
271ddbf7 305 dprintk(1, "%s()\n", __func__);
aacb9d31 306
d7cba043
MK
307 if (fe->callback) {
308 ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
30650961
MK
309 fe->dvb->priv :
310 priv->i2c_props.adap->algo_data,
d7cba043 311 DVB_FRONTEND_COMPONENT_TUNER,
30650961 312 XC5000_TUNER_RESET, 0);
91bd625e 313 if (ret) {
aacb9d31 314 printk(KERN_ERR "xc5000: reset failed\n");
91bd625e
DH
315 return XC_RESULT_RESET_FAILURE;
316 }
317 } else {
27c685a4 318 printk(KERN_ERR "xc5000: no tuner reset callback function, fatal\n");
91bd625e
DH
319 return XC_RESULT_RESET_FAILURE;
320 }
321 return XC_RESULT_SUCCESS;
aacb9d31
ST
322}
323
e12671cf 324static int xc_write_reg(struct xc5000_priv *priv, u16 regAddr, u16 i2cData)
aacb9d31 325{
e12671cf 326 u8 buf[4];
a37791c5 327 int WatchDogTimer = 100;
aacb9d31
ST
328 int result;
329
330 buf[0] = (regAddr >> 8) & 0xFF;
331 buf[1] = regAddr & 0xFF;
332 buf[2] = (i2cData >> 8) & 0xFF;
333 buf[3] = i2cData & 0xFF;
334 result = xc_send_i2c_data(priv, buf, 4);
e12671cf 335 if (result == XC_RESULT_SUCCESS) {
aacb9d31
ST
336 /* wait for busy flag to clear */
337 while ((WatchDogTimer > 0) && (result == XC_RESULT_SUCCESS)) {
1cdffda7 338 result = xc5000_readreg(priv, XREG_BUSY, (u16 *)buf);
aacb9d31 339 if (result == XC_RESULT_SUCCESS) {
4743319f
DB
340 if ((buf[0] == 0) && (buf[1] == 0)) {
341 /* busy flag cleared */
aacb9d31 342 break;
4743319f
DB
343 } else {
344 xc_wait(5); /* wait 5 ms */
345 WatchDogTimer--;
aacb9d31
ST
346 }
347 }
348 }
349 }
0a3dabb1 350 if (WatchDogTimer <= 0)
aacb9d31
ST
351 result = XC_RESULT_I2C_WRITE_FAILURE;
352
353 return result;
354}
355
c63e87e9 356static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
aacb9d31
ST
357{
358 struct xc5000_priv *priv = fe->tuner_priv;
359
360 int i, nbytes_to_send, result;
361 unsigned int len, pos, index;
e12671cf 362 u8 buf[XC_MAX_I2C_WRITE_LENGTH];
aacb9d31 363
8f3cd530
ST
364 index = 0;
365 while ((i2c_sequence[index] != 0xFF) ||
366 (i2c_sequence[index + 1] != 0xFF)) {
367 len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
e12671cf 368 if (len == 0x0000) {
aacb9d31 369 /* RESET command */
91bd625e 370 result = xc5000_TunerReset(fe);
aacb9d31 371 index += 2;
e12671cf 372 if (result != XC_RESULT_SUCCESS)
aacb9d31
ST
373 return result;
374 } else if (len & 0x8000) {
375 /* WAIT command */
376 xc_wait(len & 0x7FFF);
377 index += 2;
378 } else {
379 /* Send i2c data whilst ensuring individual transactions
380 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
381 */
382 index += 2;
383 buf[0] = i2c_sequence[index];
384 buf[1] = i2c_sequence[index + 1];
385 pos = 2;
386 while (pos < len) {
8f3cd530
ST
387 if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
388 nbytes_to_send =
389 XC_MAX_I2C_WRITE_LENGTH;
390 else
aacb9d31 391 nbytes_to_send = (len - pos + 2);
8f3cd530
ST
392 for (i = 2; i < nbytes_to_send; i++) {
393 buf[i] = i2c_sequence[index + pos +
394 i - 2];
aacb9d31 395 }
8f3cd530
ST
396 result = xc_send_i2c_data(priv, buf,
397 nbytes_to_send);
aacb9d31 398
e12671cf 399 if (result != XC_RESULT_SUCCESS)
aacb9d31
ST
400 return result;
401
402 pos += nbytes_to_send - 2;
403 }
404 index += len;
405 }
406 }
407 return XC_RESULT_SUCCESS;
408}
409
e12671cf 410static int xc_initialize(struct xc5000_priv *priv)
aacb9d31 411{
271ddbf7 412 dprintk(1, "%s()\n", __func__);
aacb9d31
ST
413 return xc_write_reg(priv, XREG_INIT, 0);
414}
415
e12671cf
ST
416static int xc_SetTVStandard(struct xc5000_priv *priv,
417 u16 VideoMode, u16 AudioMode)
aacb9d31
ST
418{
419 int ret;
271ddbf7 420 dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, VideoMode, AudioMode);
aacb9d31 421 dprintk(1, "%s() Standard = %s\n",
271ddbf7 422 __func__,
aacb9d31
ST
423 XC5000_Standard[priv->video_standard].Name);
424
425 ret = xc_write_reg(priv, XREG_VIDEO_MODE, VideoMode);
426 if (ret == XC_RESULT_SUCCESS)
427 ret = xc_write_reg(priv, XREG_AUDIO_MODE, AudioMode);
428
429 return ret;
430}
431
e12671cf 432static int xc_SetSignalSource(struct xc5000_priv *priv, u16 rf_mode)
aacb9d31 433{
271ddbf7 434 dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
aacb9d31
ST
435 rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
436
8f3cd530 437 if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
aacb9d31
ST
438 rf_mode = XC_RF_MODE_CABLE;
439 printk(KERN_ERR
440 "%s(), Invalid mode, defaulting to CABLE",
271ddbf7 441 __func__);
aacb9d31
ST
442 }
443 return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
444}
445
e12671cf 446static const struct dvb_tuner_ops xc5000_tuner_ops;
aacb9d31 447
e12671cf
ST
448static int xc_set_RF_frequency(struct xc5000_priv *priv, u32 freq_hz)
449{
450 u16 freq_code;
aacb9d31 451
271ddbf7 452 dprintk(1, "%s(%u)\n", __func__, freq_hz);
aacb9d31 453
e12671cf
ST
454 if ((freq_hz > xc5000_tuner_ops.info.frequency_max) ||
455 (freq_hz < xc5000_tuner_ops.info.frequency_min))
aacb9d31
ST
456 return XC_RESULT_OUT_OF_RANGE;
457
e12671cf
ST
458 freq_code = (u16)(freq_hz / 15625);
459
81c4dfe7
DH
460 /* Starting in firmware version 1.1.44, Xceive recommends using the
461 FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
462 only be used for fast scanning for channel lock) */
463 return xc_write_reg(priv, XREG_FINERFREQ, freq_code);
aacb9d31
ST
464}
465
aacb9d31 466
e12671cf
ST
467static int xc_set_IF_frequency(struct xc5000_priv *priv, u32 freq_khz)
468{
469 u32 freq_code = (freq_khz * 1024)/1000;
470 dprintk(1, "%s(freq_khz = %d) freq_code = 0x%x\n",
271ddbf7 471 __func__, freq_khz, freq_code);
aacb9d31 472
e12671cf 473 return xc_write_reg(priv, XREG_IF_OUT, freq_code);
aacb9d31
ST
474}
475
aacb9d31 476
e12671cf 477static int xc_get_ADC_Envelope(struct xc5000_priv *priv, u16 *adc_envelope)
aacb9d31 478{
bdd33563 479 return xc5000_readreg(priv, XREG_ADC_ENV, adc_envelope);
aacb9d31
ST
480}
481
e12671cf 482static int xc_get_frequency_error(struct xc5000_priv *priv, u32 *freq_error_hz)
aacb9d31
ST
483{
484 int result;
e12671cf 485 u16 regData;
aacb9d31
ST
486 u32 tmp;
487
bdd33563 488 result = xc5000_readreg(priv, XREG_FREQ_ERROR, &regData);
7988fc21 489 if (result != XC_RESULT_SUCCESS)
aacb9d31
ST
490 return result;
491
492 tmp = (u32)regData;
e12671cf 493 (*freq_error_hz) = (tmp * 15625) / 1000;
aacb9d31
ST
494 return result;
495}
496
e12671cf 497static int xc_get_lock_status(struct xc5000_priv *priv, u16 *lock_status)
aacb9d31 498{
bdd33563 499 return xc5000_readreg(priv, XREG_LOCK, lock_status);
aacb9d31
ST
500}
501
e12671cf
ST
502static int xc_get_version(struct xc5000_priv *priv,
503 u8 *hw_majorversion, u8 *hw_minorversion,
504 u8 *fw_majorversion, u8 *fw_minorversion)
aacb9d31 505{
e12671cf 506 u16 data;
aacb9d31
ST
507 int result;
508
bdd33563 509 result = xc5000_readreg(priv, XREG_VERSION, &data);
7988fc21 510 if (result != XC_RESULT_SUCCESS)
aacb9d31
ST
511 return result;
512
e12671cf
ST
513 (*hw_majorversion) = (data >> 12) & 0x0F;
514 (*hw_minorversion) = (data >> 8) & 0x0F;
515 (*fw_majorversion) = (data >> 4) & 0x0F;
516 (*fw_minorversion) = data & 0x0F;
aacb9d31
ST
517
518 return 0;
519}
520
bae7b7d7
DH
521static int xc_get_buildversion(struct xc5000_priv *priv, u16 *buildrev)
522{
523 return xc5000_readreg(priv, XREG_BUILD, buildrev);
524}
525
e12671cf 526static int xc_get_hsync_freq(struct xc5000_priv *priv, u32 *hsync_freq_hz)
aacb9d31 527{
e12671cf 528 u16 regData;
aacb9d31
ST
529 int result;
530
bdd33563 531 result = xc5000_readreg(priv, XREG_HSYNC_FREQ, &regData);
7988fc21 532 if (result != XC_RESULT_SUCCESS)
aacb9d31
ST
533 return result;
534
535 (*hsync_freq_hz) = ((regData & 0x0fff) * 763)/100;
536 return result;
537}
538
e12671cf 539static int xc_get_frame_lines(struct xc5000_priv *priv, u16 *frame_lines)
aacb9d31 540{
bdd33563 541 return xc5000_readreg(priv, XREG_FRAME_LINES, frame_lines);
aacb9d31
ST
542}
543
e12671cf 544static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
aacb9d31 545{
bdd33563 546 return xc5000_readreg(priv, XREG_QUALITY, quality);
aacb9d31
ST
547}
548
7c287f18
DH
549static int xc_get_analogsnr(struct xc5000_priv *priv, u16 *snr)
550{
551 return xc5000_readreg(priv, XREG_SNR, snr);
552}
553
554static int xc_get_totalgain(struct xc5000_priv *priv, u16 *totalgain)
555{
556 return xc5000_readreg(priv, XREG_TOTALGAIN, totalgain);
557}
558
e12671cf 559static u16 WaitForLock(struct xc5000_priv *priv)
aacb9d31 560{
e12671cf 561 u16 lockState = 0;
aacb9d31 562 int watchDogCount = 40;
e12671cf
ST
563
564 while ((lockState == 0) && (watchDogCount > 0)) {
aacb9d31 565 xc_get_lock_status(priv, &lockState);
e12671cf 566 if (lockState != 1) {
aacb9d31
ST
567 xc_wait(5);
568 watchDogCount--;
569 }
570 }
571 return lockState;
572}
573
a78baacf
DH
574#define XC_TUNE_ANALOG 0
575#define XC_TUNE_DIGITAL 1
576static int xc_tune_channel(struct xc5000_priv *priv, u32 freq_hz, int mode)
aacb9d31
ST
577{
578 int found = 0;
579
271ddbf7 580 dprintk(1, "%s(%u)\n", __func__, freq_hz);
aacb9d31 581
e12671cf 582 if (xc_set_RF_frequency(priv, freq_hz) != XC_RESULT_SUCCESS)
aacb9d31
ST
583 return 0;
584
a78baacf
DH
585 if (mode == XC_TUNE_ANALOG) {
586 if (WaitForLock(priv) == 1)
587 found = 1;
588 }
aacb9d31
ST
589
590 return found;
591}
592
7d3d0d8d
MK
593static int xc_set_xtal(struct dvb_frontend *fe)
594{
595 struct xc5000_priv *priv = fe->tuner_priv;
596 int ret = XC_RESULT_SUCCESS;
597
598 switch (priv->chip_id) {
599 default:
600 case XC5000A:
601 /* 32.000 MHz xtal is default */
602 break;
603 case XC5000C:
604 switch (priv->xtal_khz) {
605 default:
606 case 32000:
607 /* 32.000 MHz xtal is default */
608 break;
609 case 31875:
610 /* 31.875 MHz xtal configuration */
611 ret = xc_write_reg(priv, 0x000f, 0x8081);
612 break;
613 }
614 break;
615 }
616 return ret;
617}
aacb9d31 618
8f3cd530 619static int xc5000_fwupload(struct dvb_frontend *fe)
aacb9d31
ST
620{
621 struct xc5000_priv *priv = fe->tuner_priv;
622 const struct firmware *fw;
623 int ret;
a3db60bc
MK
624 const struct xc5000_fw_cfg *desired_fw =
625 xc5000_assign_firmware(priv->chip_id);
de49bc6e 626 priv->pll_register_no = desired_fw->pll_reg;
aacb9d31 627
e12671cf
ST
628 /* request the firmware, this will block and timeout */
629 printk(KERN_INFO "xc5000: waiting for firmware upload (%s)...\n",
6fab81df 630 desired_fw->name);
e12671cf 631
6fab81df 632 ret = request_firmware(&fw, desired_fw->name,
e9785250 633 priv->i2c_props.adap->dev.parent);
aacb9d31
ST
634 if (ret) {
635 printk(KERN_ERR "xc5000: Upload failed. (file not found?)\n");
636 ret = XC_RESULT_RESET_FAILURE;
5ea60531 637 goto out;
aacb9d31 638 } else {
34a0db92 639 printk(KERN_DEBUG "xc5000: firmware read %Zu bytes.\n",
3f51451b 640 fw->size);
aacb9d31
ST
641 ret = XC_RESULT_SUCCESS;
642 }
643
6fab81df 644 if (fw->size != desired_fw->size) {
aacb9d31
ST
645 printk(KERN_ERR "xc5000: firmware incorrect size\n");
646 ret = XC_RESULT_RESET_FAILURE;
647 } else {
34a0db92 648 printk(KERN_INFO "xc5000: firmware uploading...\n");
8f3cd530 649 ret = xc_load_i2c_sequence(fe, fw->data);
7d3d0d8d
MK
650 if (XC_RESULT_SUCCESS == ret)
651 ret = xc_set_xtal(fe);
35320676
MK
652 if (XC_RESULT_SUCCESS == ret)
653 printk(KERN_INFO "xc5000: firmware upload complete...\n");
654 else
655 printk(KERN_ERR "xc5000: firmware upload failed...\n");
aacb9d31
ST
656 }
657
5ea60531 658out:
aacb9d31
ST
659 release_firmware(fw);
660 return ret;
661}
662
e12671cf 663static void xc_debug_dump(struct xc5000_priv *priv)
aacb9d31 664{
e12671cf
ST
665 u16 adc_envelope;
666 u32 freq_error_hz = 0;
667 u16 lock_status;
668 u32 hsync_freq_hz = 0;
669 u16 frame_lines;
670 u16 quality;
7c287f18
DH
671 u16 snr;
672 u16 totalgain;
e12671cf
ST
673 u8 hw_majorversion = 0, hw_minorversion = 0;
674 u8 fw_majorversion = 0, fw_minorversion = 0;
bae7b7d7 675 u16 fw_buildversion = 0;
de49bc6e 676 u16 regval;
aacb9d31
ST
677
678 /* Wait for stats to stabilize.
679 * Frame Lines needs two frame times after initial lock
680 * before it is valid.
681 */
e12671cf 682 xc_wait(100);
aacb9d31 683
e12671cf
ST
684 xc_get_ADC_Envelope(priv, &adc_envelope);
685 dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
aacb9d31 686
e12671cf
ST
687 xc_get_frequency_error(priv, &freq_error_hz);
688 dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
aacb9d31 689
e12671cf
ST
690 xc_get_lock_status(priv, &lock_status);
691 dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
aacb9d31
ST
692 lock_status);
693
694 xc_get_version(priv, &hw_majorversion, &hw_minorversion,
e12671cf 695 &fw_majorversion, &fw_minorversion);
bae7b7d7
DH
696 xc_get_buildversion(priv, &fw_buildversion);
697 dprintk(1, "*** HW: V%02x.%02x, FW: V%02x.%02x.%04x\n",
aacb9d31 698 hw_majorversion, hw_minorversion,
bae7b7d7 699 fw_majorversion, fw_minorversion, fw_buildversion);
aacb9d31 700
e12671cf
ST
701 xc_get_hsync_freq(priv, &hsync_freq_hz);
702 dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
aacb9d31 703
e12671cf
ST
704 xc_get_frame_lines(priv, &frame_lines);
705 dprintk(1, "*** Frame lines = %d\n", frame_lines);
aacb9d31 706
e12671cf 707 xc_get_quality(priv, &quality);
1aa9c487 708 dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality & 0x07);
7c287f18
DH
709
710 xc_get_analogsnr(priv, &snr);
711 dprintk(1, "*** Unweighted analog SNR = %d dB\n", snr & 0x3f);
712
713 xc_get_totalgain(priv, &totalgain);
714 dprintk(1, "*** Total gain = %d.%d dB\n", totalgain / 256,
715 (totalgain % 256) * 100 / 256);
de49bc6e
DH
716
717 if (priv->pll_register_no) {
718 xc5000_readreg(priv, priv->pll_register_no, &regval);
719 dprintk(1, "*** PLL lock status = 0x%04x\n", regval);
720 }
aacb9d31
ST
721}
722
14d24d14 723static int xc5000_set_params(struct dvb_frontend *fe)
aacb9d31 724{
fd66c45d 725 int ret, b;
aacb9d31 726 struct xc5000_priv *priv = fe->tuner_priv;
fd66c45d
MCC
727 u32 bw = fe->dtv_property_cache.bandwidth_hz;
728 u32 freq = fe->dtv_property_cache.frequency;
729 u32 delsys = fe->dtv_property_cache.delivery_system;
aacb9d31 730
de49bc6e 731 if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
fc7a74ba
DH
732 dprintk(1, "Unable to load firmware and init tuner\n");
733 return -EINVAL;
760c466c 734 }
8e4c6797 735
fd66c45d 736 dprintk(1, "%s() frequency=%d (Hz)\n", __func__, freq);
aacb9d31 737
fd66c45d
MCC
738 switch (delsys) {
739 case SYS_ATSC:
740 dprintk(1, "%s() VSB modulation\n", __func__);
741 priv->rf_mode = XC_RF_MODE_AIR;
742 priv->freq_hz = freq - 1750000;
fd66c45d
MCC
743 priv->video_standard = DTV6;
744 break;
745 case SYS_DVBC_ANNEX_B:
746 dprintk(1, "%s() QAM modulation\n", __func__);
747 priv->rf_mode = XC_RF_MODE_CABLE;
748 priv->freq_hz = freq - 1750000;
fd66c45d
MCC
749 priv->video_standard = DTV6;
750 break;
5cf73ce1
MCC
751 case SYS_ISDBT:
752 /* All ISDB-T are currently for 6 MHz bw */
753 if (!bw)
754 bw = 6000000;
755 /* fall to OFDM handling */
756 case SYS_DMBTH:
fd66c45d
MCC
757 case SYS_DVBT:
758 case SYS_DVBT2:
6c99080d 759 dprintk(1, "%s() OFDM\n", __func__);
fd66c45d
MCC
760 switch (bw) {
761 case 6000000:
6c99080d 762 priv->video_standard = DTV6;
fd66c45d 763 priv->freq_hz = freq - 1750000;
6c99080d 764 break;
fd66c45d 765 case 7000000:
0433cd28 766 priv->video_standard = DTV7;
fd66c45d 767 priv->freq_hz = freq - 2250000;
0433cd28 768 break;
fd66c45d 769 case 8000000:
6c99080d 770 priv->video_standard = DTV8;
fd66c45d 771 priv->freq_hz = freq - 2750000;
6c99080d
DW
772 break;
773 default:
774 printk(KERN_ERR "xc5000 bandwidth not set!\n");
775 return -EINVAL;
776 }
aacb9d31 777 priv->rf_mode = XC_RF_MODE_AIR;
fd66c45d
MCC
778 case SYS_DVBC_ANNEX_A:
779 case SYS_DVBC_ANNEX_C:
780 dprintk(1, "%s() QAM modulation\n", __func__);
781 priv->rf_mode = XC_RF_MODE_CABLE;
782 if (bw <= 6000000) {
fd66c45d
MCC
783 priv->video_standard = DTV6;
784 priv->freq_hz = freq - 1750000;
785 b = 6;
786 } else if (bw <= 7000000) {
fd66c45d
MCC
787 priv->video_standard = DTV7;
788 priv->freq_hz = freq - 2250000;
789 b = 7;
790 } else {
fd66c45d
MCC
791 priv->video_standard = DTV7_8;
792 priv->freq_hz = freq - 2750000;
793 b = 8;
e80edce1 794 }
fd66c45d
MCC
795 dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
796 b, bw);
797 break;
798 default:
799 printk(KERN_ERR "xc5000: delivery system is not supported!\n");
aacb9d31
ST
800 return -EINVAL;
801 }
802
fd66c45d
MCC
803 dprintk(1, "%s() frequency=%d (compensated to %d)\n",
804 __func__, freq, priv->freq_hz);
aacb9d31 805
e12671cf
ST
806 ret = xc_SetSignalSource(priv, priv->rf_mode);
807 if (ret != XC_RESULT_SUCCESS) {
808 printk(KERN_ERR
809 "xc5000: xc_SetSignalSource(%d) failed\n",
810 priv->rf_mode);
811 return -EREMOTEIO;
812 }
aacb9d31 813
e12671cf 814 ret = xc_SetTVStandard(priv,
aacb9d31
ST
815 XC5000_Standard[priv->video_standard].VideoMode,
816 XC5000_Standard[priv->video_standard].AudioMode);
e12671cf
ST
817 if (ret != XC_RESULT_SUCCESS) {
818 printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
819 return -EREMOTEIO;
820 }
821
2a6003c2 822 ret = xc_set_IF_frequency(priv, priv->if_khz);
e12671cf
ST
823 if (ret != XC_RESULT_SUCCESS) {
824 printk(KERN_ERR "xc5000: xc_Set_IF_frequency(%d) failed\n",
2a6003c2 825 priv->if_khz);
e12671cf
ST
826 return -EIO;
827 }
828
724dcbfa
DB
829 xc_write_reg(priv, XREG_OUTPUT_AMP, 0x8a);
830
a78baacf 831 xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);
aacb9d31 832
e12671cf
ST
833 if (debug)
834 xc_debug_dump(priv);
aacb9d31 835
c6f56e7d
MCC
836 priv->bandwidth = bw;
837
aacb9d31
ST
838 return 0;
839}
840
e470d817
ST
841static int xc5000_is_firmware_loaded(struct dvb_frontend *fe)
842{
843 struct xc5000_priv *priv = fe->tuner_priv;
844 int ret;
845 u16 id;
846
847 ret = xc5000_readreg(priv, XREG_PRODUCT_ID, &id);
848 if (ret == XC_RESULT_SUCCESS) {
849 if (id == XC_PRODUCT_ID_FW_NOT_LOADED)
850 ret = XC_RESULT_RESET_FAILURE;
851 else
852 ret = XC_RESULT_SUCCESS;
853 }
854
855 dprintk(1, "%s() returns %s id = 0x%x\n", __func__,
856 ret == XC_RESULT_SUCCESS ? "True" : "False", id);
857 return ret;
858}
859
d7009cdc 860static int xc5000_set_tv_freq(struct dvb_frontend *fe,
27c685a4
ST
861 struct analog_parameters *params)
862{
863 struct xc5000_priv *priv = fe->tuner_priv;
de49bc6e 864 u16 pll_lock_status;
27c685a4
ST
865 int ret;
866
27c685a4 867 dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
271ddbf7 868 __func__, params->frequency);
27c685a4 869
1fab14ed
MCC
870 /* Fix me: it could be air. */
871 priv->rf_mode = params->mode;
872 if (params->mode > XC_RF_MODE_CABLE)
873 priv->rf_mode = XC_RF_MODE_CABLE;
27c685a4
ST
874
875 /* params->frequency is in units of 62.5khz */
876 priv->freq_hz = params->frequency * 62500;
877
878 /* FIX ME: Some video standards may have several possible audio
879 standards. We simply default to one of them here.
880 */
8f3cd530 881 if (params->std & V4L2_STD_MN) {
27c685a4
ST
882 /* default to BTSC audio standard */
883 priv->video_standard = MN_NTSC_PAL_BTSC;
884 goto tune_channel;
885 }
886
8f3cd530 887 if (params->std & V4L2_STD_PAL_BG) {
27c685a4
ST
888 /* default to NICAM audio standard */
889 priv->video_standard = BG_PAL_NICAM;
890 goto tune_channel;
891 }
892
8f3cd530 893 if (params->std & V4L2_STD_PAL_I) {
27c685a4
ST
894 /* default to NICAM audio standard */
895 priv->video_standard = I_PAL_NICAM;
896 goto tune_channel;
897 }
898
8f3cd530 899 if (params->std & V4L2_STD_PAL_DK) {
27c685a4
ST
900 /* default to NICAM audio standard */
901 priv->video_standard = DK_PAL_NICAM;
902 goto tune_channel;
903 }
904
8f3cd530 905 if (params->std & V4L2_STD_SECAM_DK) {
27c685a4
ST
906 /* default to A2 DK1 audio standard */
907 priv->video_standard = DK_SECAM_A2DK1;
908 goto tune_channel;
909 }
910
8f3cd530 911 if (params->std & V4L2_STD_SECAM_L) {
27c685a4
ST
912 priv->video_standard = L_SECAM_NICAM;
913 goto tune_channel;
914 }
915
8f3cd530 916 if (params->std & V4L2_STD_SECAM_LC) {
27c685a4
ST
917 priv->video_standard = LC_SECAM_NICAM;
918 goto tune_channel;
919 }
920
921tune_channel:
922 ret = xc_SetSignalSource(priv, priv->rf_mode);
923 if (ret != XC_RESULT_SUCCESS) {
8f3cd530 924 printk(KERN_ERR
27c685a4
ST
925 "xc5000: xc_SetSignalSource(%d) failed\n",
926 priv->rf_mode);
927 return -EREMOTEIO;
928 }
929
930 ret = xc_SetTVStandard(priv,
931 XC5000_Standard[priv->video_standard].VideoMode,
932 XC5000_Standard[priv->video_standard].AudioMode);
933 if (ret != XC_RESULT_SUCCESS) {
934 printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
935 return -EREMOTEIO;
936 }
937
724dcbfa
DB
938 xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
939
a78baacf 940 xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
27c685a4
ST
941
942 if (debug)
943 xc_debug_dump(priv);
944
de49bc6e
DH
945 if (priv->pll_register_no != 0) {
946 msleep(20);
947 xc5000_readreg(priv, priv->pll_register_no, &pll_lock_status);
948 if (pll_lock_status > 63) {
949 /* PLL is unlocked, force reload of the firmware */
950 dprintk(1, "xc5000: PLL not locked (0x%x). Reloading...\n",
951 pll_lock_status);
952 if (xc_load_fw_and_init_tuner(fe, 1) != XC_RESULT_SUCCESS) {
953 printk(KERN_ERR "xc5000: Unable to reload fw\n");
954 return -EREMOTEIO;
955 }
956 goto tune_channel;
957 }
958 }
959
27c685a4
ST
960 return 0;
961}
962
d7009cdc
BILDB
963static int xc5000_set_radio_freq(struct dvb_frontend *fe,
964 struct analog_parameters *params)
965{
966 struct xc5000_priv *priv = fe->tuner_priv;
967 int ret = -EINVAL;
496e9057 968 u8 radio_input;
d7009cdc
BILDB
969
970 dprintk(1, "%s() frequency=%d (in units of khz)\n",
971 __func__, params->frequency);
972
496e9057
DH
973 if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
974 dprintk(1, "%s() radio input not configured\n", __func__);
975 return -EINVAL;
976 }
977
978 if (priv->radio_input == XC5000_RADIO_FM1)
979 radio_input = FM_Radio_INPUT1;
980 else if (priv->radio_input == XC5000_RADIO_FM2)
981 radio_input = FM_Radio_INPUT2;
724dcbfa
DB
982 else if (priv->radio_input == XC5000_RADIO_FM1_MONO)
983 radio_input = FM_Radio_INPUT1_MONO;
496e9057
DH
984 else {
985 dprintk(1, "%s() unknown radio input %d\n", __func__,
986 priv->radio_input);
987 return -EINVAL;
988 }
989
d7009cdc
BILDB
990 priv->freq_hz = params->frequency * 125 / 2;
991
992 priv->rf_mode = XC_RF_MODE_AIR;
993
496e9057
DH
994 ret = xc_SetTVStandard(priv, XC5000_Standard[radio_input].VideoMode,
995 XC5000_Standard[radio_input].AudioMode);
d7009cdc
BILDB
996
997 if (ret != XC_RESULT_SUCCESS) {
998 printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
999 return -EREMOTEIO;
1000 }
1001
1002 ret = xc_SetSignalSource(priv, priv->rf_mode);
1003 if (ret != XC_RESULT_SUCCESS) {
1004 printk(KERN_ERR
1005 "xc5000: xc_SetSignalSource(%d) failed\n",
1006 priv->rf_mode);
1007 return -EREMOTEIO;
1008 }
1009
724dcbfa
DB
1010 if ((priv->radio_input == XC5000_RADIO_FM1) ||
1011 (priv->radio_input == XC5000_RADIO_FM2))
1012 xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
1013 else if (priv->radio_input == XC5000_RADIO_FM1_MONO)
1014 xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06);
1015
d7009cdc
BILDB
1016 xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
1017
1018 return 0;
1019}
1020
1021static int xc5000_set_analog_params(struct dvb_frontend *fe,
1022 struct analog_parameters *params)
1023{
1024 struct xc5000_priv *priv = fe->tuner_priv;
1025 int ret = -EINVAL;
1026
1027 if (priv->i2c_props.adap == NULL)
1028 return -EINVAL;
1029
de49bc6e 1030 if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
fc7a74ba
DH
1031 dprintk(1, "Unable to load firmware and init tuner\n");
1032 return -EINVAL;
760c466c 1033 }
d7009cdc
BILDB
1034
1035 switch (params->mode) {
1036 case V4L2_TUNER_RADIO:
1037 ret = xc5000_set_radio_freq(fe, params);
1038 break;
1039 case V4L2_TUNER_ANALOG_TV:
1040 case V4L2_TUNER_DIGITAL_TV:
1041 ret = xc5000_set_tv_freq(fe, params);
1042 break;
1043 }
1044
1045 return ret;
1046}
1047
1048
aacb9d31
ST
1049static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1050{
1051 struct xc5000_priv *priv = fe->tuner_priv;
271ddbf7 1052 dprintk(1, "%s()\n", __func__);
e12671cf 1053 *freq = priv->freq_hz;
aacb9d31
ST
1054 return 0;
1055}
1056
35621030
MCC
1057static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
1058{
1059 struct xc5000_priv *priv = fe->tuner_priv;
1060 dprintk(1, "%s()\n", __func__);
1061 *freq = priv->if_khz * 1000;
1062 return 0;
1063}
1064
aacb9d31
ST
1065static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1066{
1067 struct xc5000_priv *priv = fe->tuner_priv;
271ddbf7 1068 dprintk(1, "%s()\n", __func__);
27c685a4 1069
aacb9d31
ST
1070 *bw = priv->bandwidth;
1071 return 0;
1072}
1073
1074static int xc5000_get_status(struct dvb_frontend *fe, u32 *status)
1075{
1076 struct xc5000_priv *priv = fe->tuner_priv;
e12671cf 1077 u16 lock_status = 0;
aacb9d31
ST
1078
1079 xc_get_lock_status(priv, &lock_status);
1080
271ddbf7 1081 dprintk(1, "%s() lock_status = 0x%08x\n", __func__, lock_status);
aacb9d31
ST
1082
1083 *status = lock_status;
1084
1085 return 0;
1086}
1087
de49bc6e 1088static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
aacb9d31
ST
1089{
1090 struct xc5000_priv *priv = fe->tuner_priv;
fc7a74ba 1091 int ret = XC_RESULT_SUCCESS;
de49bc6e
DH
1092 u16 pll_lock_status;
1093
1094 if (force || xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
1095
1096fw_retry:
aacb9d31 1097
aacb9d31 1098 ret = xc5000_fwupload(fe);
e12671cf
ST
1099 if (ret != XC_RESULT_SUCCESS)
1100 return ret;
aacb9d31 1101
de49bc6e
DH
1102 msleep(20);
1103
fc7a74ba
DH
1104 /* Start the tuner self-calibration process */
1105 ret |= xc_initialize(priv);
aacb9d31 1106
de49bc6e
DH
1107 if (ret != XC_RESULT_SUCCESS)
1108 goto fw_retry;
1109
fc7a74ba
DH
1110 /* Wait for calibration to complete.
1111 * We could continue but XC5000 will clock stretch subsequent
1112 * I2C transactions until calibration is complete. This way we
1113 * don't have to rely on clock stretching working.
1114 */
1115 xc_wait(100);
aacb9d31 1116
de49bc6e
DH
1117 if (priv->pll_register_no) {
1118 xc5000_readreg(priv, priv->pll_register_no,
1119 &pll_lock_status);
1120 if (pll_lock_status > 63) {
1121 /* PLL is unlocked, force reload of the firmware */
1122 printk(KERN_ERR "xc5000: PLL not running after fwload.\n");
1123 goto fw_retry;
1124 }
1125 }
1126
fc7a74ba
DH
1127 /* Default to "CABLE" mode */
1128 ret |= xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
1129 }
aacb9d31
ST
1130
1131 return ret;
1132}
1133
e12671cf
ST
1134static int xc5000_sleep(struct dvb_frontend *fe)
1135{
27c685a4
ST
1136 int ret;
1137
271ddbf7 1138 dprintk(1, "%s()\n", __func__);
e12671cf 1139
b6bd5eb8
DH
1140 /* Avoid firmware reload on slow devices */
1141 if (no_poweroff)
1142 return 0;
1143
7f05b530
DH
1144 /* According to Xceive technical support, the "powerdown" register
1145 was removed in newer versions of the firmware. The "supported"
1146 way to sleep the tuner is to pull the reset pin low for 10ms */
1147 ret = xc5000_TunerReset(fe);
8f3cd530 1148 if (ret != XC_RESULT_SUCCESS) {
27c685a4
ST
1149 printk(KERN_ERR
1150 "xc5000: %s() unable to shutdown tuner\n",
271ddbf7 1151 __func__);
27c685a4 1152 return -EREMOTEIO;
8f3cd530 1153 } else
27c685a4 1154 return XC_RESULT_SUCCESS;
e12671cf
ST
1155}
1156
aacb9d31
ST
1157static int xc5000_init(struct dvb_frontend *fe)
1158{
1159 struct xc5000_priv *priv = fe->tuner_priv;
271ddbf7 1160 dprintk(1, "%s()\n", __func__);
aacb9d31 1161
de49bc6e 1162 if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
e12671cf
ST
1163 printk(KERN_ERR "xc5000: Unable to initialise tuner\n");
1164 return -EREMOTEIO;
1165 }
1166
1167 if (debug)
1168 xc_debug_dump(priv);
aacb9d31
ST
1169
1170 return 0;
1171}
1172
1173static int xc5000_release(struct dvb_frontend *fe)
1174{
89fd2854
MK
1175 struct xc5000_priv *priv = fe->tuner_priv;
1176
271ddbf7 1177 dprintk(1, "%s()\n", __func__);
89fd2854
MK
1178
1179 mutex_lock(&xc5000_list_mutex);
1180
1181 if (priv)
1182 hybrid_tuner_release_state(priv);
1183
1184 mutex_unlock(&xc5000_list_mutex);
1185
aacb9d31 1186 fe->tuner_priv = NULL;
89fd2854 1187
aacb9d31
ST
1188 return 0;
1189}
1190
724dcbfa
DB
1191static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
1192{
1193 struct xc5000_priv *priv = fe->tuner_priv;
1194 struct xc5000_config *p = priv_cfg;
1195
1196 dprintk(1, "%s()\n", __func__);
1197
1198 if (p->if_khz)
1199 priv->if_khz = p->if_khz;
1200
1201 if (p->radio_input)
1202 priv->radio_input = p->radio_input;
1203
1204 return 0;
1205}
1206
1207
aacb9d31
ST
1208static const struct dvb_tuner_ops xc5000_tuner_ops = {
1209 .info = {
1210 .name = "Xceive XC5000",
1211 .frequency_min = 1000000,
1212 .frequency_max = 1023000000,
1213 .frequency_step = 50000,
1214 },
1215
27c685a4
ST
1216 .release = xc5000_release,
1217 .init = xc5000_init,
1218 .sleep = xc5000_sleep,
aacb9d31 1219
724dcbfa 1220 .set_config = xc5000_set_config,
27c685a4
ST
1221 .set_params = xc5000_set_params,
1222 .set_analog_params = xc5000_set_analog_params,
1223 .get_frequency = xc5000_get_frequency,
35621030 1224 .get_if_frequency = xc5000_get_if_frequency,
27c685a4
ST
1225 .get_bandwidth = xc5000_get_bandwidth,
1226 .get_status = xc5000_get_status
aacb9d31
ST
1227};
1228
48723543
MK
1229struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
1230 struct i2c_adapter *i2c,
2e4e98e7 1231 const struct xc5000_config *cfg)
aacb9d31
ST
1232{
1233 struct xc5000_priv *priv = NULL;
89fd2854 1234 int instance;
aacb9d31
ST
1235 u16 id = 0;
1236
89fd2854
MK
1237 dprintk(1, "%s(%d-%04x)\n", __func__,
1238 i2c ? i2c_adapter_id(i2c) : -1,
1239 cfg ? cfg->i2c_address : -1);
aacb9d31 1240
89fd2854 1241 mutex_lock(&xc5000_list_mutex);
aacb9d31 1242
89fd2854
MK
1243 instance = hybrid_tuner_request_state(struct xc5000_priv, priv,
1244 hybrid_tuner_instance_list,
1245 i2c, cfg->i2c_address, "xc5000");
1246 switch (instance) {
1247 case 0:
1248 goto fail;
1249 break;
1250 case 1:
1251 /* new tuner instance */
c6f56e7d 1252 priv->bandwidth = 6000000;
89fd2854
MK
1253 fe->tuner_priv = priv;
1254 break;
1255 default:
1256 /* existing tuner instance */
1257 fe->tuner_priv = priv;
1258 break;
1259 }
aacb9d31 1260
ea227863
DH
1261 if (priv->if_khz == 0) {
1262 /* If the IF hasn't been set yet, use the value provided by
1263 the caller (occurs in hybrid devices where the analog
1264 call to xc5000_attach occurs before the digital side) */
1265 priv->if_khz = cfg->if_khz;
1266 }
1267
7d3d0d8d
MK
1268 if (priv->xtal_khz == 0)
1269 priv->xtal_khz = cfg->xtal_khz;
1270
496e9057
DH
1271 if (priv->radio_input == 0)
1272 priv->radio_input = cfg->radio_input;
1273
6fab81df 1274 /* don't override chip id if it's already been set
76efb0ba 1275 unless explicitly specified */
6fab81df
MK
1276 if ((priv->chip_id == 0) || (cfg->chip_id))
1277 /* use default chip id if none specified, set to 0 so
1278 it can be overridden if this is a hybrid driver */
1279 priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
76efb0ba 1280
27c685a4
ST
1281 /* Check if firmware has been loaded. It is possible that another
1282 instance of the driver has loaded the firmware.
1283 */
7988fc21 1284 if (xc5000_readreg(priv, XREG_PRODUCT_ID, &id) != XC_RESULT_SUCCESS)
89fd2854 1285 goto fail;
aacb9d31 1286
8f3cd530 1287 switch (id) {
27c685a4
ST
1288 case XC_PRODUCT_ID_FW_LOADED:
1289 printk(KERN_INFO
1290 "xc5000: Successfully identified at address 0x%02x\n",
1291 cfg->i2c_address);
1292 printk(KERN_INFO
1293 "xc5000: Firmware has been loaded previously\n");
27c685a4
ST
1294 break;
1295 case XC_PRODUCT_ID_FW_NOT_LOADED:
1296 printk(KERN_INFO
1297 "xc5000: Successfully identified at address 0x%02x\n",
1298 cfg->i2c_address);
1299 printk(KERN_INFO
1300 "xc5000: Firmware has not been loaded previously\n");
27c685a4
ST
1301 break;
1302 default:
aacb9d31
ST
1303 printk(KERN_ERR
1304 "xc5000: Device not found at addr 0x%02x (0x%x)\n",
1305 cfg->i2c_address, id);
89fd2854 1306 goto fail;
aacb9d31
ST
1307 }
1308
89fd2854
MK
1309 mutex_unlock(&xc5000_list_mutex);
1310
aacb9d31
ST
1311 memcpy(&fe->ops.tuner_ops, &xc5000_tuner_ops,
1312 sizeof(struct dvb_tuner_ops));
1313
aacb9d31 1314 return fe;
89fd2854
MK
1315fail:
1316 mutex_unlock(&xc5000_list_mutex);
1317
1318 xc5000_release(fe);
1319 return NULL;
aacb9d31
ST
1320}
1321EXPORT_SYMBOL(xc5000_attach);
1322
1323MODULE_AUTHOR("Steven Toth");
e12671cf 1324MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
aacb9d31 1325MODULE_LICENSE("GPL");
3422f2a6
TG
1326MODULE_FIRMWARE(XC5000A_FIRMWARE);
1327MODULE_FIRMWARE(XC5000C_FIRMWARE);
This page took 1.073799 seconds and 5 git commands to generate.