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