Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tuner-xc2028.c
Go to the documentation of this file.
1 /* tuner-xc2028
2  *
3  * Copyright (c) 2007-2008 Mauro Carvalho Chehab ([email protected])
4  *
5  * Copyright (c) 2007 Michel Ludwig ([email protected])
6  * - frontend interface
7  *
8  * This code is placed under the terms of the GNU General Public License v2
9  */
10 
11 #include <linux/i2c.h>
12 #include <asm/div64.h>
13 #include <linux/firmware.h>
14 #include <linux/videodev2.h>
15 #include <linux/delay.h>
16 #include <media/tuner.h>
17 #include <linux/mutex.h>
18 #include <linux/slab.h>
19 #include <asm/unaligned.h>
20 #include "tuner-i2c.h"
21 #include "tuner-xc2028.h"
22 #include "tuner-xc2028-types.h"
23 
24 #include <linux/dvb/frontend.h>
25 #include "dvb_frontend.h"
26 
27 /* Registers (Write-only) */
28 #define XREG_INIT 0x00
29 #define XREG_RF_FREQ 0x02
30 #define XREG_POWER_DOWN 0x08
31 
32 /* Registers (Read-only) */
33 #define XREG_FREQ_ERROR 0x01
34 #define XREG_LOCK 0x02
35 #define XREG_VERSION 0x04
36 #define XREG_PRODUCT_ID 0x08
37 #define XREG_HSYNC_FREQ 0x10
38 #define XREG_FRAME_LINES 0x20
39 #define XREG_SNR 0x40
40 
41 #define XREG_ADC_ENV 0x0100
42 
43 static int debug;
44 module_param(debug, int, 0644);
45 MODULE_PARM_DESC(debug, "enable verbose debug messages");
46 
47 static int no_poweroff;
48 module_param(no_poweroff, int, 0644);
49 MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
50  "1 keep device energized and with tuner ready all the times.\n"
51  " Faster, but consumes more power and keeps the device hotter\n");
52 
53 static char audio_std[8];
54 module_param_string(audio_std, audio_std, sizeof(audio_std), 0);
55 MODULE_PARM_DESC(audio_std,
56  "Audio standard. XC3028 audio decoder explicitly "
57  "needs to know what audio\n"
58  "standard is needed for some video standards with audio A2 or NICAM.\n"
59  "The valid values are:\n"
60  "A2\n"
61  "A2/A\n"
62  "A2/B\n"
63  "NICAM\n"
64  "NICAM/A\n"
65  "NICAM/B\n");
66 
67 static char firmware_name[30];
68 module_param_string(firmware_name, firmware_name, sizeof(firmware_name), 0);
69 MODULE_PARM_DESC(firmware_name, "Firmware file name. Allows overriding the "
70  "default firmware name\n");
71 
72 static LIST_HEAD(hybrid_tuner_instance_list);
73 static DEFINE_MUTEX(xc2028_list_mutex);
74 
75 /* struct for storing firmware table */
77  unsigned int type;
80  unsigned char *ptr;
81  unsigned int size;
82 };
83 
85  unsigned int type;
89  unsigned int scode_table;
90  int scode_nr;
91 };
92 
99 };
100 
101 struct xc2028_data {
105 
107  const char *fname;
108 
112 
115 
117 
119 
120  struct mutex lock;
121 };
122 
123 #define i2c_send(priv, buf, size) ({ \
124  int _rc; \
125  _rc = tuner_i2c_xfer_send(&priv->i2c_props, buf, size); \
126  if (size != _rc) \
127  tuner_info("i2c output error: rc = %d (should be %d)\n",\
128  _rc, (int)size); \
129  if (priv->ctrl.msleep) \
130  msleep(priv->ctrl.msleep); \
131  _rc; \
132 })
133 
134 #define i2c_rcv(priv, buf, size) ({ \
135  int _rc; \
136  _rc = tuner_i2c_xfer_recv(&priv->i2c_props, buf, size); \
137  if (size != _rc) \
138  tuner_err("i2c input error: rc = %d (should be %d)\n", \
139  _rc, (int)size); \
140  _rc; \
141 })
142 
143 #define i2c_send_recv(priv, obuf, osize, ibuf, isize) ({ \
144  int _rc; \
145  _rc = tuner_i2c_xfer_send_recv(&priv->i2c_props, obuf, osize, \
146  ibuf, isize); \
147  if (isize != _rc) \
148  tuner_err("i2c input error: rc = %d (should be %d)\n", \
149  _rc, (int)isize); \
150  if (priv->ctrl.msleep) \
151  msleep(priv->ctrl.msleep); \
152  _rc; \
153 })
154 
155 #define send_seq(priv, data...) ({ \
156  static u8 _val[] = data; \
157  int _rc; \
158  if (sizeof(_val) != \
159  (_rc = tuner_i2c_xfer_send(&priv->i2c_props, \
160  _val, sizeof(_val)))) { \
161  tuner_err("Error on line %d: %d\n", __LINE__, _rc); \
162  } else if (priv->ctrl.msleep) \
163  msleep(priv->ctrl.msleep); \
164  _rc; \
165 })
166 
167 static int xc2028_get_reg(struct xc2028_data *priv, u16 reg, u16 *val)
168 {
169  unsigned char buf[2];
170  unsigned char ibuf[2];
171 
172  tuner_dbg("%s %04x called\n", __func__, reg);
173 
174  buf[0] = reg >> 8;
175  buf[1] = (unsigned char) reg;
176 
177  if (i2c_send_recv(priv, buf, 2, ibuf, 2) != 2)
178  return -EIO;
179 
180  *val = (ibuf[1]) | (ibuf[0] << 8);
181  return 0;
182 }
183 
184 #define dump_firm_type(t) dump_firm_type_and_int_freq(t, 0)
185 static void dump_firm_type_and_int_freq(unsigned int type, u16 int_freq)
186 {
187  if (type & BASE)
188  printk("BASE ");
189  if (type & INIT1)
190  printk("INIT1 ");
191  if (type & F8MHZ)
192  printk("F8MHZ ");
193  if (type & MTS)
194  printk("MTS ");
195  if (type & D2620)
196  printk("D2620 ");
197  if (type & D2633)
198  printk("D2633 ");
199  if (type & DTV6)
200  printk("DTV6 ");
201  if (type & QAM)
202  printk("QAM ");
203  if (type & DTV7)
204  printk("DTV7 ");
205  if (type & DTV78)
206  printk("DTV78 ");
207  if (type & DTV8)
208  printk("DTV8 ");
209  if (type & FM)
210  printk("FM ");
211  if (type & INPUT1)
212  printk("INPUT1 ");
213  if (type & LCD)
214  printk("LCD ");
215  if (type & NOGD)
216  printk("NOGD ");
217  if (type & MONO)
218  printk("MONO ");
219  if (type & ATSC)
220  printk("ATSC ");
221  if (type & IF)
222  printk("IF ");
223  if (type & LG60)
224  printk("LG60 ");
225  if (type & ATI638)
226  printk("ATI638 ");
227  if (type & OREN538)
228  printk("OREN538 ");
229  if (type & OREN36)
230  printk("OREN36 ");
231  if (type & TOYOTA388)
232  printk("TOYOTA388 ");
233  if (type & TOYOTA794)
234  printk("TOYOTA794 ");
235  if (type & DIBCOM52)
236  printk("DIBCOM52 ");
237  if (type & ZARLINK456)
238  printk("ZARLINK456 ");
239  if (type & CHINA)
240  printk("CHINA ");
241  if (type & F6MHZ)
242  printk("F6MHZ ");
243  if (type & INPUT2)
244  printk("INPUT2 ");
245  if (type & SCODE)
246  printk("SCODE ");
247  if (type & HAS_IF)
248  printk("HAS_IF_%d ", int_freq);
249 }
250 
251 static v4l2_std_id parse_audio_std_option(void)
252 {
253  if (strcasecmp(audio_std, "A2") == 0)
254  return V4L2_STD_A2;
255  if (strcasecmp(audio_std, "A2/A") == 0)
256  return V4L2_STD_A2_A;
257  if (strcasecmp(audio_std, "A2/B") == 0)
258  return V4L2_STD_A2_B;
259  if (strcasecmp(audio_std, "NICAM") == 0)
260  return V4L2_STD_NICAM;
261  if (strcasecmp(audio_std, "NICAM/A") == 0)
262  return V4L2_STD_NICAM_A;
263  if (strcasecmp(audio_std, "NICAM/B") == 0)
264  return V4L2_STD_NICAM_B;
265 
266  return 0;
267 }
268 
269 static int check_device_status(struct xc2028_data *priv)
270 {
271  switch (priv->state) {
272  case XC2028_NO_FIRMWARE:
274  return -EAGAIN;
275  case XC2028_ACTIVE:
276  case XC2028_SLEEP:
277  return 0;
278  case XC2028_NODEV:
279  return -ENODEV;
280  }
281  return 0;
282 }
283 
284 static void free_firmware(struct xc2028_data *priv)
285 {
286  int i;
287  tuner_dbg("%s called\n", __func__);
288 
289  if (!priv->firm)
290  return;
291 
292  for (i = 0; i < priv->firm_size; i++)
293  kfree(priv->firm[i].ptr);
294 
295  kfree(priv->firm);
296 
297  priv->firm = NULL;
298  priv->firm_size = 0;
299  priv->state = XC2028_NO_FIRMWARE;
300 
301  memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
302 }
303 
304 static int load_all_firmwares(struct dvb_frontend *fe,
305  const struct firmware *fw)
306 {
307  struct xc2028_data *priv = fe->tuner_priv;
308  const unsigned char *p, *endp;
309  int rc = 0;
310  int n, n_array;
311  char name[33];
312 
313  tuner_dbg("%s called\n", __func__);
314 
315  p = fw->data;
316  endp = p + fw->size;
317 
318  if (fw->size < sizeof(name) - 1 + 2 + 2) {
319  tuner_err("Error: firmware file %s has invalid size!\n",
320  priv->fname);
321  goto corrupt;
322  }
323 
324  memcpy(name, p, sizeof(name) - 1);
325  name[sizeof(name) - 1] = 0;
326  p += sizeof(name) - 1;
327 
328  priv->firm_version = get_unaligned_le16(p);
329  p += 2;
330 
331  n_array = get_unaligned_le16(p);
332  p += 2;
333 
334  tuner_info("Loading %d firmware images from %s, type: %s, ver %d.%d\n",
335  n_array, priv->fname, name,
336  priv->firm_version >> 8, priv->firm_version & 0xff);
337 
338  priv->firm = kcalloc(n_array, sizeof(*priv->firm), GFP_KERNEL);
339  if (priv->firm == NULL) {
340  tuner_err("Not enough memory to load firmware file.\n");
341  rc = -ENOMEM;
342  goto err;
343  }
344  priv->firm_size = n_array;
345 
346  n = -1;
347  while (p < endp) {
348  __u32 type, size;
349  v4l2_std_id id;
350  __u16 int_freq = 0;
351 
352  n++;
353  if (n >= n_array) {
354  tuner_err("More firmware images in file than "
355  "were expected!\n");
356  goto corrupt;
357  }
358 
359  /* Checks if there's enough bytes to read */
360  if (endp - p < sizeof(type) + sizeof(id) + sizeof(size))
361  goto header;
362 
363  type = get_unaligned_le32(p);
364  p += sizeof(type);
365 
366  id = get_unaligned_le64(p);
367  p += sizeof(id);
368 
369  if (type & HAS_IF) {
370  int_freq = get_unaligned_le16(p);
371  p += sizeof(int_freq);
372  if (endp - p < sizeof(size))
373  goto header;
374  }
375 
376  size = get_unaligned_le32(p);
377  p += sizeof(size);
378 
379  if (!size || size > endp - p) {
380  tuner_err("Firmware type ");
381  dump_firm_type(type);
382  printk("(%x), id %llx is corrupted "
383  "(size=%d, expected %d)\n",
384  type, (unsigned long long)id,
385  (unsigned)(endp - p), size);
386  goto corrupt;
387  }
388 
389  priv->firm[n].ptr = kzalloc(size, GFP_KERNEL);
390  if (priv->firm[n].ptr == NULL) {
391  tuner_err("Not enough memory to load firmware file.\n");
392  rc = -ENOMEM;
393  goto err;
394  }
395  tuner_dbg("Reading firmware type ");
396  if (debug) {
397  dump_firm_type_and_int_freq(type, int_freq);
398  printk("(%x), id %llx, size=%d.\n",
399  type, (unsigned long long)id, size);
400  }
401 
402  memcpy(priv->firm[n].ptr, p, size);
403  priv->firm[n].type = type;
404  priv->firm[n].id = id;
405  priv->firm[n].size = size;
406  priv->firm[n].int_freq = int_freq;
407 
408  p += size;
409  }
410 
411  if (n + 1 != priv->firm_size) {
412  tuner_err("Firmware file is incomplete!\n");
413  goto corrupt;
414  }
415 
416  goto done;
417 
418 header:
419  tuner_err("Firmware header is incomplete!\n");
420 corrupt:
421  rc = -EINVAL;
422  tuner_err("Error: firmware file is corrupted!\n");
423 
424 err:
425  tuner_info("Releasing partially loaded firmware file.\n");
426  free_firmware(priv);
427 
428 done:
429  if (rc == 0)
430  tuner_dbg("Firmware files loaded.\n");
431  else
432  priv->state = XC2028_NODEV;
433 
434  return rc;
435 }
436 
437 static int seek_firmware(struct dvb_frontend *fe, unsigned int type,
438  v4l2_std_id *id)
439 {
440  struct xc2028_data *priv = fe->tuner_priv;
441  int i, best_i = -1, best_nr_matches = 0;
442  unsigned int type_mask = 0;
443 
444  tuner_dbg("%s called, want type=", __func__);
445  if (debug) {
446  dump_firm_type(type);
447  printk("(%x), id %016llx.\n", type, (unsigned long long)*id);
448  }
449 
450  if (!priv->firm) {
451  tuner_err("Error! firmware not loaded\n");
452  return -EINVAL;
453  }
454 
455  if (((type & ~SCODE) == 0) && (*id == 0))
456  *id = V4L2_STD_PAL;
457 
458  if (type & BASE)
459  type_mask = BASE_TYPES;
460  else if (type & SCODE) {
461  type &= SCODE_TYPES;
462  type_mask = SCODE_TYPES & ~HAS_IF;
463  } else if (type & DTV_TYPES)
464  type_mask = DTV_TYPES;
465  else if (type & STD_SPECIFIC_TYPES)
466  type_mask = STD_SPECIFIC_TYPES;
467 
468  type &= type_mask;
469 
470  if (!(type & SCODE))
471  type_mask = ~0;
472 
473  /* Seek for exact match */
474  for (i = 0; i < priv->firm_size; i++) {
475  if ((type == (priv->firm[i].type & type_mask)) &&
476  (*id == priv->firm[i].id))
477  goto found;
478  }
479 
480  /* Seek for generic video standard match */
481  for (i = 0; i < priv->firm_size; i++) {
482  v4l2_std_id match_mask;
483  int nr_matches;
484 
485  if (type != (priv->firm[i].type & type_mask))
486  continue;
487 
488  match_mask = *id & priv->firm[i].id;
489  if (!match_mask)
490  continue;
491 
492  if ((*id & match_mask) == *id)
493  goto found; /* Supports all the requested standards */
494 
495  nr_matches = hweight64(match_mask);
496  if (nr_matches > best_nr_matches) {
497  best_nr_matches = nr_matches;
498  best_i = i;
499  }
500  }
501 
502  if (best_nr_matches > 0) {
503  tuner_dbg("Selecting best matching firmware (%d bits) for "
504  "type=", best_nr_matches);
505  dump_firm_type(type);
506  printk("(%x), id %016llx:\n", type, (unsigned long long)*id);
507  i = best_i;
508  goto found;
509  }
510 
511  /*FIXME: Would make sense to seek for type "hint" match ? */
512 
513  i = -ENOENT;
514  goto ret;
515 
516 found:
517  *id = priv->firm[i].id;
518 
519 ret:
520  tuner_dbg("%s firmware for type=", (i < 0) ? "Can't find" : "Found");
521  if (debug) {
522  dump_firm_type(type);
523  printk("(%x), id %016llx.\n", type, (unsigned long long)*id);
524  }
525  return i;
526 }
527 
528 static inline int do_tuner_callback(struct dvb_frontend *fe, int cmd, int arg)
529 {
530  struct xc2028_data *priv = fe->tuner_priv;
531 
532  /* analog side (tuner-core) uses i2c_adap->algo_data.
533  * digital side is not guaranteed to have algo_data defined.
534  *
535  * digital side will always have fe->dvb defined.
536  * analog side (tuner-core) doesn't (yet) define fe->dvb.
537  */
538 
539  return (!fe->callback) ? -EINVAL :
540  fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
541  fe->dvb->priv : priv->i2c_props.adap->algo_data,
542  DVB_FRONTEND_COMPONENT_TUNER, cmd, arg);
543 }
544 
545 static int load_firmware(struct dvb_frontend *fe, unsigned int type,
546  v4l2_std_id *id)
547 {
548  struct xc2028_data *priv = fe->tuner_priv;
549  int pos, rc;
550  unsigned char *p, *endp, buf[priv->ctrl.max_len];
551 
552  tuner_dbg("%s called\n", __func__);
553 
554  pos = seek_firmware(fe, type, id);
555  if (pos < 0)
556  return pos;
557 
558  tuner_info("Loading firmware for type=");
559  dump_firm_type(priv->firm[pos].type);
560  printk("(%x), id %016llx.\n", priv->firm[pos].type,
561  (unsigned long long)*id);
562 
563  p = priv->firm[pos].ptr;
564  endp = p + priv->firm[pos].size;
565 
566  while (p < endp) {
567  __u16 size;
568 
569  /* Checks if there's enough bytes to read */
570  if (p + sizeof(size) > endp) {
571  tuner_err("Firmware chunk size is wrong\n");
572  return -EINVAL;
573  }
574 
575  size = le16_to_cpu(*(__u16 *) p);
576  p += sizeof(size);
577 
578  if (size == 0xffff)
579  return 0;
580 
581  if (!size) {
582  /* Special callback command received */
583  rc = do_tuner_callback(fe, XC2028_TUNER_RESET, 0);
584  if (rc < 0) {
585  tuner_err("Error at RESET code %d\n",
586  (*p) & 0x7f);
587  return -EINVAL;
588  }
589  continue;
590  }
591  if (size >= 0xff00) {
592  switch (size) {
593  case 0xff00:
594  rc = do_tuner_callback(fe, XC2028_RESET_CLK, 0);
595  if (rc < 0) {
596  tuner_err("Error at RESET code %d\n",
597  (*p) & 0x7f);
598  return -EINVAL;
599  }
600  break;
601  default:
602  tuner_info("Invalid RESET code %d\n",
603  size & 0x7f);
604  return -EINVAL;
605 
606  }
607  continue;
608  }
609 
610  /* Checks for a sleep command */
611  if (size & 0x8000) {
612  msleep(size & 0x7fff);
613  continue;
614  }
615 
616  if ((size + p > endp)) {
617  tuner_err("missing bytes: need %d, have %d\n",
618  size, (int)(endp - p));
619  return -EINVAL;
620  }
621 
622  buf[0] = *p;
623  p++;
624  size--;
625 
626  /* Sends message chunks */
627  while (size > 0) {
628  int len = (size < priv->ctrl.max_len - 1) ?
629  size : priv->ctrl.max_len - 1;
630 
631  memcpy(buf + 1, p, len);
632 
633  rc = i2c_send(priv, buf, len + 1);
634  if (rc < 0) {
635  tuner_err("%d returned from send\n", rc);
636  return -EINVAL;
637  }
638 
639  p += len;
640  size -= len;
641  }
642 
643  /* silently fail if the frontend doesn't support I2C flush */
644  rc = do_tuner_callback(fe, XC2028_I2C_FLUSH, 0);
645  if ((rc < 0) && (rc != -EINVAL)) {
646  tuner_err("error executing flush: %d\n", rc);
647  return rc;
648  }
649  }
650  return 0;
651 }
652 
653 static int load_scode(struct dvb_frontend *fe, unsigned int type,
654  v4l2_std_id *id, __u16 int_freq, int scode)
655 {
656  struct xc2028_data *priv = fe->tuner_priv;
657  int pos, rc;
658  unsigned char *p;
659 
660  tuner_dbg("%s called\n", __func__);
661 
662  if (!int_freq) {
663  pos = seek_firmware(fe, type, id);
664  if (pos < 0)
665  return pos;
666  } else {
667  for (pos = 0; pos < priv->firm_size; pos++) {
668  if ((priv->firm[pos].int_freq == int_freq) &&
669  (priv->firm[pos].type & HAS_IF))
670  break;
671  }
672  if (pos == priv->firm_size)
673  return -ENOENT;
674  }
675 
676  p = priv->firm[pos].ptr;
677 
678  if (priv->firm[pos].type & HAS_IF) {
679  if (priv->firm[pos].size != 12 * 16 || scode >= 16)
680  return -EINVAL;
681  p += 12 * scode;
682  } else {
683  /* 16 SCODE entries per file; each SCODE entry is 12 bytes and
684  * has a 2-byte size header in the firmware format. */
685  if (priv->firm[pos].size != 14 * 16 || scode >= 16 ||
686  le16_to_cpu(*(__u16 *)(p + 14 * scode)) != 12)
687  return -EINVAL;
688  p += 14 * scode + 2;
689  }
690 
691  tuner_info("Loading SCODE for type=");
692  dump_firm_type_and_int_freq(priv->firm[pos].type,
693  priv->firm[pos].int_freq);
694  printk("(%x), id %016llx.\n", priv->firm[pos].type,
695  (unsigned long long)*id);
696 
697  if (priv->firm_version < 0x0202)
698  rc = send_seq(priv, {0x20, 0x00, 0x00, 0x00});
699  else
700  rc = send_seq(priv, {0xa0, 0x00, 0x00, 0x00});
701  if (rc < 0)
702  return -EIO;
703 
704  rc = i2c_send(priv, p, 12);
705  if (rc < 0)
706  return -EIO;
707 
708  rc = send_seq(priv, {0x00, 0x8c});
709  if (rc < 0)
710  return -EIO;
711 
712  return 0;
713 }
714 
715 static int check_firmware(struct dvb_frontend *fe, unsigned int type,
716  v4l2_std_id std, __u16 int_freq)
717 {
718  struct xc2028_data *priv = fe->tuner_priv;
719  struct firmware_properties new_fw;
720  int rc, retry_count = 0;
721  u16 version, hwmodel;
722  v4l2_std_id std0;
723 
724  tuner_dbg("%s called\n", __func__);
725 
726  rc = check_device_status(priv);
727  if (rc < 0)
728  return rc;
729 
730  if (priv->ctrl.mts && !(type & FM))
731  type |= MTS;
732 
733 retry:
734  new_fw.type = type;
735  new_fw.id = std;
736  new_fw.std_req = std;
737  new_fw.scode_table = SCODE | priv->ctrl.scode_table;
738  new_fw.scode_nr = 0;
739  new_fw.int_freq = int_freq;
740 
741  tuner_dbg("checking firmware, user requested type=");
742  if (debug) {
743  dump_firm_type(new_fw.type);
744  printk("(%x), id %016llx, ", new_fw.type,
745  (unsigned long long)new_fw.std_req);
746  if (!int_freq) {
747  printk("scode_tbl ");
748  dump_firm_type(priv->ctrl.scode_table);
749  printk("(%x), ", priv->ctrl.scode_table);
750  } else
751  printk("int_freq %d, ", new_fw.int_freq);
752  printk("scode_nr %d\n", new_fw.scode_nr);
753  }
754 
755  /*
756  * No need to reload base firmware if it matches and if the tuner
757  * is not at sleep mode
758  */
759  if ((priv->state == XC2028_ACTIVE) &&
760  (((BASE | new_fw.type) & BASE_TYPES) ==
761  (priv->cur_fw.type & BASE_TYPES))) {
762  tuner_dbg("BASE firmware not changed.\n");
763  goto skip_base;
764  }
765 
766  /* Updating BASE - forget about all currently loaded firmware */
767  memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
768 
769  /* Reset is needed before loading firmware */
770  rc = do_tuner_callback(fe, XC2028_TUNER_RESET, 0);
771  if (rc < 0)
772  goto fail;
773 
774  /* BASE firmwares are all std0 */
775  std0 = 0;
776  rc = load_firmware(fe, BASE | new_fw.type, &std0);
777  if (rc < 0) {
778  tuner_err("Error %d while loading base firmware\n",
779  rc);
780  goto fail;
781  }
782 
783  /* Load INIT1, if needed */
784  tuner_dbg("Load init1 firmware, if exists\n");
785 
786  rc = load_firmware(fe, BASE | INIT1 | new_fw.type, &std0);
787  if (rc == -ENOENT)
788  rc = load_firmware(fe, (BASE | INIT1 | new_fw.type) & ~F8MHZ,
789  &std0);
790  if (rc < 0 && rc != -ENOENT) {
791  tuner_err("Error %d while loading init1 firmware\n",
792  rc);
793  goto fail;
794  }
795 
796 skip_base:
797  /*
798  * No need to reload standard specific firmware if base firmware
799  * was not reloaded and requested video standards have not changed.
800  */
801  if (priv->cur_fw.type == (BASE | new_fw.type) &&
802  priv->cur_fw.std_req == std) {
803  tuner_dbg("Std-specific firmware already loaded.\n");
804  goto skip_std_specific;
805  }
806 
807  /* Reloading std-specific firmware forces a SCODE update */
808  priv->cur_fw.scode_table = 0;
809 
810  rc = load_firmware(fe, new_fw.type, &new_fw.id);
811  if (rc == -ENOENT)
812  rc = load_firmware(fe, new_fw.type & ~F8MHZ, &new_fw.id);
813 
814  if (rc < 0)
815  goto fail;
816 
817 skip_std_specific:
818  if (priv->cur_fw.scode_table == new_fw.scode_table &&
819  priv->cur_fw.scode_nr == new_fw.scode_nr) {
820  tuner_dbg("SCODE firmware already loaded.\n");
821  goto check_device;
822  }
823 
824  if (new_fw.type & FM)
825  goto check_device;
826 
827  /* Load SCODE firmware, if exists */
828  tuner_dbg("Trying to load scode %d\n", new_fw.scode_nr);
829 
830  rc = load_scode(fe, new_fw.type | new_fw.scode_table, &new_fw.id,
831  new_fw.int_freq, new_fw.scode_nr);
832 
833 check_device:
834  if (xc2028_get_reg(priv, 0x0004, &version) < 0 ||
835  xc2028_get_reg(priv, 0x0008, &hwmodel) < 0) {
836  tuner_err("Unable to read tuner registers.\n");
837  goto fail;
838  }
839 
840  tuner_dbg("Device is Xceive %d version %d.%d, "
841  "firmware version %d.%d\n",
842  hwmodel, (version & 0xf000) >> 12, (version & 0xf00) >> 8,
843  (version & 0xf0) >> 4, version & 0xf);
844 
845 
846  if (priv->ctrl.read_not_reliable)
847  goto read_not_reliable;
848 
849  /* Check firmware version against what we downloaded. */
850  if (priv->firm_version != ((version & 0xf0) << 4 | (version & 0x0f))) {
851  if (!priv->ctrl.read_not_reliable) {
852  tuner_err("Incorrect readback of firmware version.\n");
853  goto fail;
854  } else {
855  tuner_err("Returned an incorrect version. However, "
856  "read is not reliable enough. Ignoring it.\n");
857  hwmodel = 3028;
858  }
859  }
860 
861  /* Check that the tuner hardware model remains consistent over time. */
862  if (priv->hwmodel == 0 && (hwmodel == 2028 || hwmodel == 3028)) {
863  priv->hwmodel = hwmodel;
864  priv->hwvers = version & 0xff00;
865  } else if (priv->hwmodel == 0 || priv->hwmodel != hwmodel ||
866  priv->hwvers != (version & 0xff00)) {
867  tuner_err("Read invalid device hardware information - tuner "
868  "hung?\n");
869  goto fail;
870  }
871 
872 read_not_reliable:
873  memcpy(&priv->cur_fw, &new_fw, sizeof(priv->cur_fw));
874 
875  /*
876  * By setting BASE in cur_fw.type only after successfully loading all
877  * firmwares, we can:
878  * 1. Identify that BASE firmware with type=0 has been loaded;
879  * 2. Tell whether BASE firmware was just changed the next time through.
880  */
881  priv->cur_fw.type |= BASE;
882  priv->state = XC2028_ACTIVE;
883 
884  return 0;
885 
886 fail:
887  priv->state = XC2028_SLEEP;
888 
889  memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
890  if (retry_count < 8) {
891  msleep(50);
892  retry_count++;
893  tuner_dbg("Retrying firmware load\n");
894  goto retry;
895  }
896 
897  if (rc == -ENOENT)
898  rc = -EINVAL;
899  return rc;
900 }
901 
902 static int xc2028_signal(struct dvb_frontend *fe, u16 *strength)
903 {
904  struct xc2028_data *priv = fe->tuner_priv;
905  u16 frq_lock, signal = 0;
906  int rc, i;
907 
908  tuner_dbg("%s called\n", __func__);
909 
910  rc = check_device_status(priv);
911  if (rc < 0)
912  return rc;
913 
914  mutex_lock(&priv->lock);
915 
916  /* Sync Lock Indicator */
917  for (i = 0; i < 3; i++) {
918  rc = xc2028_get_reg(priv, XREG_LOCK, &frq_lock);
919  if (rc < 0)
920  goto ret;
921 
922  if (frq_lock)
923  break;
924  msleep(6);
925  }
926 
927  /* Frequency didn't lock */
928  if (frq_lock == 2)
929  goto ret;
930 
931  /* Get SNR of the video signal */
932  rc = xc2028_get_reg(priv, XREG_SNR, &signal);
933  if (rc < 0)
934  goto ret;
935 
936  /* Signal level is 3 bits only */
937 
938  signal = ((1 << 12) - 1) | ((signal & 0x07) << 12);
939 
940 ret:
941  mutex_unlock(&priv->lock);
942 
943  *strength = signal;
944 
945  tuner_dbg("signal strength is %d\n", signal);
946 
947  return rc;
948 }
949 
950 static int xc2028_get_afc(struct dvb_frontend *fe, s32 *afc)
951 {
952  struct xc2028_data *priv = fe->tuner_priv;
953  int i, rc;
954  u16 frq_lock = 0;
955  s16 afc_reg = 0;
956 
957  rc = check_device_status(priv);
958  if (rc < 0)
959  return rc;
960 
961  mutex_lock(&priv->lock);
962 
963  /* Sync Lock Indicator */
964  for (i = 0; i < 3; i++) {
965  rc = xc2028_get_reg(priv, XREG_LOCK, &frq_lock);
966  if (rc < 0)
967  goto ret;
968 
969  if (frq_lock)
970  break;
971  msleep(6);
972  }
973 
974  /* Frequency didn't lock */
975  if (frq_lock == 2)
976  goto ret;
977 
978  /* Get AFC */
979  rc = xc2028_get_reg(priv, XREG_FREQ_ERROR, &afc_reg);
980  if (rc < 0)
981  goto ret;
982 
983  *afc = afc_reg * 15625; /* Hz */
984 
985  tuner_dbg("AFC is %d Hz\n", *afc);
986 
987 ret:
988  mutex_unlock(&priv->lock);
989 
990  return rc;
991 }
992 
993 #define DIV 15625
994 
995 static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
996  enum v4l2_tuner_type new_type,
997  unsigned int type,
998  v4l2_std_id std,
999  u16 int_freq)
1000 {
1001  struct xc2028_data *priv = fe->tuner_priv;
1002  int rc = -EINVAL;
1003  unsigned char buf[4];
1004  u32 div, offset = 0;
1005 
1006  tuner_dbg("%s called\n", __func__);
1007 
1008  mutex_lock(&priv->lock);
1009 
1010  tuner_dbg("should set frequency %d kHz\n", freq / 1000);
1011 
1012  if (check_firmware(fe, type, std, int_freq) < 0)
1013  goto ret;
1014 
1015  /* On some cases xc2028 can disable video output, if
1016  * very weak signals are received. By sending a soft
1017  * reset, this is re-enabled. So, it is better to always
1018  * send a soft reset before changing channels, to be sure
1019  * that xc2028 will be in a safe state.
1020  * Maybe this might also be needed for DTV.
1021  */
1022  switch (new_type) {
1023  case V4L2_TUNER_ANALOG_TV:
1024  rc = send_seq(priv, {0x00, 0x00});
1025 
1026  /* Analog mode requires offset = 0 */
1027  break;
1028  case V4L2_TUNER_RADIO:
1029  /* Radio mode requires offset = 0 */
1030  break;
1031  case V4L2_TUNER_DIGITAL_TV:
1032  /*
1033  * Digital modes require an offset to adjust to the
1034  * proper frequency. The offset depends on what
1035  * firmware version is used.
1036  */
1037 
1038  /*
1039  * Adjust to the center frequency. This is calculated by the
1040  * formula: offset = 1.25MHz - BW/2
1041  * For DTV 7/8, the firmware uses BW = 8000, so it needs a
1042  * further adjustment to get the frequency center on VHF
1043  */
1044 
1045  /*
1046  * The firmware DTV78 used to work fine in UHF band (8 MHz
1047  * bandwidth) but not at all in VHF band (7 MHz bandwidth).
1048  * The real problem was connected to the formula used to
1049  * calculate the center frequency offset in VHF band.
1050  * In fact, removing the 500KHz adjustment fixed the problem.
1051  * This is coherent to what was implemented for the DTV7
1052  * firmware.
1053  * In the end, now the center frequency is the same for all 3
1054  * firmwares (DTV7, DTV8, DTV78) and doesn't depend on channel
1055  * bandwidth.
1056  */
1057 
1058  if (priv->cur_fw.type & DTV6)
1059  offset = 1750000;
1060  else /* DTV7 or DTV8 or DTV78 */
1061  offset = 2750000;
1062 
1063  /*
1064  * xc3028 additional "magic"
1065  * Depending on the firmware version, it needs some adjustments
1066  * to properly centralize the frequency. This seems to be
1067  * needed to compensate the SCODE table adjustments made by
1068  * newer firmwares
1069  */
1070 
1071  /*
1072  * The proper adjustment would be to do it at s-code table.
1073  * However, this didn't work, as reported by
1074  * Robert Lowery <[email protected]>
1075  */
1076 
1077 #if 0
1078  /*
1079  * Still need tests for XC3028L (firmware 3.2 or upper)
1080  * So, for now, let's just comment the per-firmware
1081  * version of this change. Reports with xc3028l working
1082  * with and without the lines bellow are welcome
1083  */
1084 
1085  if (priv->firm_version < 0x0302) {
1086  if (priv->cur_fw.type & DTV7)
1087  offset += 500000;
1088  } else {
1089  if (priv->cur_fw.type & DTV7)
1090  offset -= 300000;
1091  else if (type != ATSC) /* DVB @6MHz, DTV 8 and DTV 7/8 */
1092  offset += 200000;
1093  }
1094 #endif
1095  }
1096 
1097  div = (freq - offset + DIV / 2) / DIV;
1098 
1099  /* CMD= Set frequency */
1100  if (priv->firm_version < 0x0202)
1101  rc = send_seq(priv, {0x00, XREG_RF_FREQ, 0x00, 0x00});
1102  else
1103  rc = send_seq(priv, {0x80, XREG_RF_FREQ, 0x00, 0x00});
1104  if (rc < 0)
1105  goto ret;
1106 
1107  /* Return code shouldn't be checked.
1108  The reset CLK is needed only with tm6000.
1109  Driver should work fine even if this fails.
1110  */
1111  if (priv->ctrl.msleep)
1112  msleep(priv->ctrl.msleep);
1113  do_tuner_callback(fe, XC2028_RESET_CLK, 1);
1114 
1115  msleep(10);
1116 
1117  buf[0] = 0xff & (div >> 24);
1118  buf[1] = 0xff & (div >> 16);
1119  buf[2] = 0xff & (div >> 8);
1120  buf[3] = 0xff & (div);
1121 
1122  rc = i2c_send(priv, buf, sizeof(buf));
1123  if (rc < 0)
1124  goto ret;
1125  msleep(100);
1126 
1127  priv->frequency = freq;
1128 
1129  tuner_dbg("divisor= %*ph (freq=%d.%03d)\n", 4, buf,
1130  freq / 1000000, (freq % 1000000) / 1000);
1131 
1132  rc = 0;
1133 
1134 ret:
1135  mutex_unlock(&priv->lock);
1136 
1137  return rc;
1138 }
1139 
1140 static int xc2028_set_analog_freq(struct dvb_frontend *fe,
1141  struct analog_parameters *p)
1142 {
1143  struct xc2028_data *priv = fe->tuner_priv;
1144  unsigned int type=0;
1145 
1146  tuner_dbg("%s called\n", __func__);
1147 
1148  if (p->mode == V4L2_TUNER_RADIO) {
1149  type |= FM;
1150  if (priv->ctrl.input1)
1151  type |= INPUT1;
1152  return generic_set_freq(fe, (625l * p->frequency) / 10,
1153  V4L2_TUNER_RADIO, type, 0, 0);
1154  }
1155 
1156  /* if std is not defined, choose one */
1157  if (!p->std)
1158  p->std = V4L2_STD_MN;
1159 
1160  /* PAL/M, PAL/N, PAL/Nc and NTSC variants should use 6MHz firmware */
1161  if (!(p->std & V4L2_STD_MN))
1162  type |= F8MHZ;
1163 
1164  /* Add audio hack to std mask */
1165  p->std |= parse_audio_std_option();
1166 
1167  return generic_set_freq(fe, 62500l * p->frequency,
1168  V4L2_TUNER_ANALOG_TV, type, p->std, 0);
1169 }
1170 
1171 static int xc2028_set_params(struct dvb_frontend *fe)
1172 {
1174  u32 delsys = c->delivery_system;
1175  u32 bw = c->bandwidth_hz;
1176  struct xc2028_data *priv = fe->tuner_priv;
1177  int rc;
1178  unsigned int type = 0;
1179  u16 demod = 0;
1180 
1181  tuner_dbg("%s called\n", __func__);
1182 
1183  rc = check_device_status(priv);
1184  if (rc < 0)
1185  return rc;
1186 
1187  switch (delsys) {
1188  case SYS_DVBT:
1189  case SYS_DVBT2:
1190  /*
1191  * The only countries with 6MHz seem to be Taiwan/Uruguay.
1192  * Both seem to require QAM firmware for OFDM decoding
1193  * Tested in Taiwan by Terry Wu <[email protected]>
1194  */
1195  if (bw <= 6000000)
1196  type |= QAM;
1197 
1198  switch (priv->ctrl.type) {
1199  case XC2028_D2633:
1200  type |= D2633;
1201  break;
1202  case XC2028_D2620:
1203  type |= D2620;
1204  break;
1205  case XC2028_AUTO:
1206  default:
1207  /* Zarlink seems to need D2633 */
1208  if (priv->ctrl.demod == XC3028_FE_ZARLINK456)
1209  type |= D2633;
1210  else
1211  type |= D2620;
1212  }
1213  break;
1214  case SYS_ATSC:
1215  /* The only ATSC firmware (at least on v2.7) is D2633 */
1216  type |= ATSC | D2633;
1217  break;
1218  /* DVB-S and pure QAM (FE_QAM) are not supported */
1219  default:
1220  return -EINVAL;
1221  }
1222 
1223  if (bw <= 6000000) {
1224  type |= DTV6;
1225  priv->ctrl.vhfbw7 = 0;
1226  priv->ctrl.uhfbw8 = 0;
1227  } else if (bw <= 7000000) {
1228  if (c->frequency < 470000000)
1229  priv->ctrl.vhfbw7 = 1;
1230  else
1231  priv->ctrl.uhfbw8 = 0;
1232  type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV7;
1233  type |= F8MHZ;
1234  } else {
1235  if (c->frequency < 470000000)
1236  priv->ctrl.vhfbw7 = 0;
1237  else
1238  priv->ctrl.uhfbw8 = 1;
1239  type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV8;
1240  type |= F8MHZ;
1241  }
1242 
1243  /* All S-code tables need a 200kHz shift */
1244  if (priv->ctrl.demod) {
1245  demod = priv->ctrl.demod;
1246 
1247  /*
1248  * Newer firmwares require a 200 kHz offset only for ATSC
1249  */
1250  if (type == ATSC || priv->firm_version < 0x0302)
1251  demod += 200;
1252  /*
1253  * The DTV7 S-code table needs a 700 kHz shift.
1254  *
1255  * DTV7 is only used in Australia. Germany or Italy may also
1256  * use this firmware after initialization, but a tune to a UHF
1257  * channel should then cause DTV78 to be used.
1258  *
1259  * Unfortunately, on real-field tests, the s-code offset
1260  * didn't work as expected, as reported by
1261  * Robert Lowery <[email protected]>
1262  */
1263  }
1264 
1265  return generic_set_freq(fe, c->frequency,
1266  V4L2_TUNER_DIGITAL_TV, type, 0, demod);
1267 }
1268 
1269 static int xc2028_sleep(struct dvb_frontend *fe)
1270 {
1271  struct xc2028_data *priv = fe->tuner_priv;
1272  int rc;
1273 
1274  rc = check_device_status(priv);
1275  if (rc < 0)
1276  return rc;
1277 
1278  /* Avoid firmware reload on slow devices or if PM disabled */
1279  if (no_poweroff || priv->ctrl.disable_power_mgmt)
1280  return 0;
1281 
1282  tuner_dbg("Putting xc2028/3028 into poweroff mode.\n");
1283  if (debug > 1) {
1284  tuner_dbg("Printing sleep stack trace:\n");
1285  dump_stack();
1286  }
1287 
1288  mutex_lock(&priv->lock);
1289 
1290  if (priv->firm_version < 0x0202)
1291  rc = send_seq(priv, {0x00, XREG_POWER_DOWN, 0x00, 0x00});
1292  else
1293  rc = send_seq(priv, {0x80, XREG_POWER_DOWN, 0x00, 0x00});
1294 
1295  priv->state = XC2028_SLEEP;
1296 
1297  mutex_unlock(&priv->lock);
1298 
1299  return rc;
1300 }
1301 
1302 static int xc2028_dvb_release(struct dvb_frontend *fe)
1303 {
1304  struct xc2028_data *priv = fe->tuner_priv;
1305 
1306  tuner_dbg("%s called\n", __func__);
1307 
1308  mutex_lock(&xc2028_list_mutex);
1309 
1310  /* only perform final cleanup if this is the last instance */
1311  if (hybrid_tuner_report_instance_count(priv) == 1) {
1312  free_firmware(priv);
1313  kfree(priv->ctrl.fname);
1314  priv->ctrl.fname = NULL;
1315  }
1316 
1317  if (priv)
1319 
1320  mutex_unlock(&xc2028_list_mutex);
1321 
1322  fe->tuner_priv = NULL;
1323 
1324  return 0;
1325 }
1326 
1327 static int xc2028_get_frequency(struct dvb_frontend *fe, u32 *frequency)
1328 {
1329  struct xc2028_data *priv = fe->tuner_priv;
1330  int rc;
1331 
1332  tuner_dbg("%s called\n", __func__);
1333 
1334  rc = check_device_status(priv);
1335  if (rc < 0)
1336  return rc;
1337 
1338  *frequency = priv->frequency;
1339 
1340  return 0;
1341 }
1342 
1343 static void load_firmware_cb(const struct firmware *fw,
1344  void *context)
1345 {
1346  struct dvb_frontend *fe = context;
1347  struct xc2028_data *priv = fe->tuner_priv;
1348  int rc;
1349 
1350  tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
1351  if (!fw) {
1352  tuner_err("Could not load firmware %s.\n", priv->fname);
1353  priv->state = XC2028_NODEV;
1354  return;
1355  }
1356 
1357  rc = load_all_firmwares(fe, fw);
1358 
1359  release_firmware(fw);
1360 
1361  if (rc < 0)
1362  return;
1363  priv->state = XC2028_SLEEP;
1364 }
1365 
1366 static int xc2028_set_config(struct dvb_frontend *fe, void *priv_cfg)
1367 {
1368  struct xc2028_data *priv = fe->tuner_priv;
1369  struct xc2028_ctrl *p = priv_cfg;
1370  int rc = 0;
1371 
1372  tuner_dbg("%s called\n", __func__);
1373 
1374  mutex_lock(&priv->lock);
1375 
1376  /*
1377  * Copy the config data.
1378  * For the firmware name, keep a local copy of the string,
1379  * in order to avoid troubles during device release.
1380  */
1381  if (priv->ctrl.fname)
1382  kfree(priv->ctrl.fname);
1383  memcpy(&priv->ctrl, p, sizeof(priv->ctrl));
1384  if (p->fname) {
1385  priv->ctrl.fname = kstrdup(p->fname, GFP_KERNEL);
1386  if (priv->ctrl.fname == NULL)
1387  rc = -ENOMEM;
1388  }
1389 
1390  /*
1391  * If firmware name changed, frees firmware. As free_firmware will
1392  * reset the status to NO_FIRMWARE, this forces a new request_firmware
1393  */
1394  if (!firmware_name[0] && p->fname &&
1395  priv->fname && strcmp(p->fname, priv->fname))
1396  free_firmware(priv);
1397 
1398  if (priv->ctrl.max_len < 9)
1399  priv->ctrl.max_len = 13;
1400 
1401  if (priv->state == XC2028_NO_FIRMWARE) {
1402  if (!firmware_name[0])
1403  priv->fname = priv->ctrl.fname;
1404  else
1405  priv->fname = firmware_name;
1406 
1408  priv->fname,
1409  priv->i2c_props.adap->dev.parent,
1410  GFP_KERNEL,
1411  fe, load_firmware_cb);
1412  if (rc < 0) {
1413  tuner_err("Failed to request firmware %s\n",
1414  priv->fname);
1415  priv->state = XC2028_NODEV;
1416  } else
1418  }
1419  mutex_unlock(&priv->lock);
1420 
1421  return rc;
1422 }
1423 
1424 static const struct dvb_tuner_ops xc2028_dvb_tuner_ops = {
1425  .info = {
1426  .name = "Xceive XC3028",
1427  .frequency_min = 42000000,
1428  .frequency_max = 864000000,
1429  .frequency_step = 50000,
1430  },
1431 
1432  .set_config = xc2028_set_config,
1433  .set_analog_params = xc2028_set_analog_freq,
1434  .release = xc2028_dvb_release,
1435  .get_frequency = xc2028_get_frequency,
1436  .get_rf_strength = xc2028_signal,
1437  .get_afc = xc2028_get_afc,
1438  .set_params = xc2028_set_params,
1439  .sleep = xc2028_sleep,
1440 };
1441 
1443  struct xc2028_config *cfg)
1444 {
1445  struct xc2028_data *priv;
1446  int instance;
1447 
1448  if (debug)
1449  printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n");
1450 
1451  if (NULL == cfg)
1452  return NULL;
1453 
1454  if (!fe) {
1455  printk(KERN_ERR "xc2028: No frontend!\n");
1456  return NULL;
1457  }
1458 
1459  mutex_lock(&xc2028_list_mutex);
1460 
1461  instance = hybrid_tuner_request_state(struct xc2028_data, priv,
1463  cfg->i2c_adap, cfg->i2c_addr,
1464  "xc2028");
1465  switch (instance) {
1466  case 0:
1467  /* memory allocation failure */
1468  goto fail;
1469  break;
1470  case 1:
1471  /* new tuner instance */
1472  priv->ctrl.max_len = 13;
1473 
1474  mutex_init(&priv->lock);
1475 
1476  fe->tuner_priv = priv;
1477  break;
1478  case 2:
1479  /* existing tuner instance */
1480  fe->tuner_priv = priv;
1481  break;
1482  }
1483 
1484  memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
1485  sizeof(xc2028_dvb_tuner_ops));
1486 
1487  tuner_info("type set to %s\n", "XCeive xc2028/xc3028 tuner");
1488 
1489  if (cfg->ctrl)
1490  xc2028_set_config(fe, cfg->ctrl);
1491 
1492  mutex_unlock(&xc2028_list_mutex);
1493 
1494  return fe;
1495 fail:
1496  mutex_unlock(&xc2028_list_mutex);
1497 
1498  xc2028_dvb_release(fe);
1499  return NULL;
1500 }
1501 
1503 
1504 MODULE_DESCRIPTION("Xceive xc2028/xc3028 tuner driver");
1505 MODULE_AUTHOR("Michel Ludwig <[email protected]>");
1506 MODULE_AUTHOR("Mauro Carvalho Chehab <[email protected]>");
1507 MODULE_LICENSE("GPL");