V4L/DVB (6844): tuner: remove struct tuner from tuner-driver.h
[linux-2.6] / drivers / media / video / tuner-core.c
1 /*
2  *
3  * i2c tv tuner chip device driver
4  * core core, i.e. kernel interfaces, registering and so on
5  */
6
7 #include <linux/module.h>
8 #include <linux/kernel.h>
9 #include <linux/string.h>
10 #include <linux/timer.h>
11 #include <linux/delay.h>
12 #include <linux/errno.h>
13 #include <linux/slab.h>
14 #include <linux/poll.h>
15 #include <linux/i2c.h>
16 #include <linux/types.h>
17 #include <linux/init.h>
18 #include <linux/videodev.h>
19 #include <media/tuner.h>
20 #include <media/tuner-types.h>
21 #include <media/v4l2-common.h>
22 #include <media/v4l2-i2c-drv-legacy.h>
23 #include "tuner-driver.h"
24 #include "mt20xx.h"
25 #include "tda8290.h"
26 #include "tea5761.h"
27 #include "tea5767.h"
28 #include "tuner-xc2028.h"
29 #include "tuner-simple.h"
30 #include "tda9887.h"
31
32 #define UNSET (-1U)
33
34 #define PREFIX t->i2c->driver->driver.name
35
36 struct tuner {
37         /* device */
38         struct dvb_frontend fe;
39         struct i2c_client   *i2c;
40         struct list_head    list;
41         unsigned int        using_v4l2:1;
42
43         /* keep track of the current settings */
44         v4l2_std_id         std;
45         unsigned int        tv_freq;
46         unsigned int        radio_freq;
47         unsigned int        audmode;
48
49         unsigned int        mode;
50         unsigned int        mode_mask; /* Combination of allowable modes */
51
52         unsigned int        type; /* chip type id */
53         unsigned int        config;
54         int (*tuner_callback) (void *dev, int command, int arg);
55 };
56
57 /* standard i2c insmod options */
58 static unsigned short normal_i2c[] = {
59 #if defined(CONFIG_TUNER_TEA5761) || (defined(CONFIG_TUNER_TEA5761_MODULE) && defined(MODULE))
60         0x10,
61 #endif
62         0x42, 0x43, 0x4a, 0x4b,                 /* tda8290 */
63         0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
64         0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
65         I2C_CLIENT_END
66 };
67
68 I2C_CLIENT_INSMOD;
69
70 /* insmod options used at init time => read/only */
71 static unsigned int addr = 0;
72 static unsigned int no_autodetect = 0;
73 static unsigned int show_i2c = 0;
74
75 /* insmod options used at runtime => read/write */
76 static int tuner_debug;
77
78 #define tuner_warn(fmt, arg...) do {                    \
79         printk(KERN_WARNING "%s %d-%04x: " fmt, PREFIX, \
80                i2c_adapter_id(t->i2c->adapter),         \
81                t->i2c->addr, ##arg);                    \
82          } while (0)
83
84 #define tuner_info(fmt, arg...) do {                    \
85         printk(KERN_INFO "%s %d-%04x: " fmt, PREFIX,    \
86                i2c_adapter_id(t->i2c->adapter),         \
87                t->i2c->addr, ##arg);                    \
88          } while (0)
89
90 #define tuner_err(fmt, arg...) do {                     \
91         printk(KERN_ERR "%s %d-%04x: " fmt, PREFIX,     \
92                i2c_adapter_id(t->i2c->adapter),         \
93                t->i2c->addr, ##arg);                    \
94          } while (0)
95
96 #define tuner_dbg(fmt, arg...) do {                             \
97         if (tuner_debug)                                        \
98                 printk(KERN_DEBUG "%s %d-%04x: " fmt, PREFIX,   \
99                        i2c_adapter_id(t->i2c->adapter),         \
100                        t->i2c->addr, ##arg);                    \
101          } while (0)
102
103 /* ------------------------------------------------------------------------ */
104
105 static unsigned int tv_range[2] = { 44, 958 };
106 static unsigned int radio_range[2] = { 65, 108 };
107
108 static char pal[] = "--";
109 static char secam[] = "--";
110 static char ntsc[] = "-";
111
112
113 module_param(addr, int, 0444);
114 module_param(no_autodetect, int, 0444);
115 module_param(show_i2c, int, 0444);
116 module_param_named(debug,tuner_debug, int, 0644);
117 module_param_string(pal, pal, sizeof(pal), 0644);
118 module_param_string(secam, secam, sizeof(secam), 0644);
119 module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
120 module_param_array(tv_range, int, NULL, 0644);
121 module_param_array(radio_range, int, NULL, 0644);
122
123 MODULE_DESCRIPTION("device driver for various TV and TV+FM radio tuners");
124 MODULE_AUTHOR("Ralph Metzler, Gerd Knorr, Gunther Mayer");
125 MODULE_LICENSE("GPL");
126
127 /* ---------------------------------------------------------------------- */
128
129 static void fe_set_params(struct dvb_frontend *fe,
130                           struct analog_parameters *params)
131 {
132         struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
133         struct tuner *t = fe->analog_demod_priv;
134
135         if (NULL == fe_tuner_ops->set_analog_params) {
136                 tuner_warn("Tuner frontend module has no way to set freq\n");
137                 return;
138         }
139         fe_tuner_ops->set_analog_params(fe, params);
140 }
141
142 static void fe_release(struct dvb_frontend *fe)
143 {
144         if (fe->ops.tuner_ops.release)
145                 fe->ops.tuner_ops.release(fe);
146
147         fe->ops.analog_demod_ops = NULL;
148
149         /* DO NOT kfree(fe->analog_demod_priv)
150          *
151          * If we are in this function, analog_demod_priv contains a pointer
152          * to struct tuner *t.  This will be kfree'd in tuner_detach().
153          *
154          * Otherwise, fe->ops.analog_demod_ops->release will
155          * handle the cleanup for analog demodulator modules.
156          */
157         fe->analog_demod_priv = NULL;
158 }
159
160 static void fe_standby(struct dvb_frontend *fe)
161 {
162         struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
163
164         if (fe_tuner_ops->sleep)
165                 fe_tuner_ops->sleep(fe);
166 }
167
168 static int fe_has_signal(struct dvb_frontend *fe)
169 {
170         u16 strength = 0;
171
172         if (fe->ops.tuner_ops.get_rf_strength)
173                 fe->ops.tuner_ops.get_rf_strength(fe, &strength);
174
175         return strength;
176 }
177
178 static int fe_set_config(struct dvb_frontend *fe, void *priv_cfg)
179 {
180         struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
181         struct tuner *t = fe->analog_demod_priv;
182
183         if (fe_tuner_ops->set_config)
184                 return fe_tuner_ops->set_config(fe, priv_cfg);
185
186         tuner_warn("Tuner frontend module has no way to set config\n");
187
188         return 0;
189 }
190
191 static void tuner_status(struct dvb_frontend *fe);
192
193 static struct analog_tuner_ops tuner_core_ops = {
194         .set_params     = fe_set_params,
195         .standby        = fe_standby,
196         .release        = fe_release,
197         .has_signal     = fe_has_signal,
198         .set_config     = fe_set_config,
199         .tuner_status   = tuner_status
200 };
201
202 /* Set tuner frequency,  freq in Units of 62.5kHz = 1/16MHz */
203 static void set_tv_freq(struct i2c_client *c, unsigned int freq)
204 {
205         struct tuner *t = i2c_get_clientdata(c);
206         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
207
208         struct analog_parameters params = {
209                 .mode      = t->mode,
210                 .audmode   = t->audmode,
211                 .std       = t->std
212         };
213
214         if (t->type == UNSET) {
215                 tuner_warn ("tuner type not set\n");
216                 return;
217         }
218         if ((NULL == ops) || (NULL == ops->set_params)) {
219                 tuner_warn ("Tuner has no way to set tv freq\n");
220                 return;
221         }
222         if (freq < tv_range[0] * 16 || freq > tv_range[1] * 16) {
223                 tuner_dbg ("TV freq (%d.%02d) out of range (%d-%d)\n",
224                            freq / 16, freq % 16 * 100 / 16, tv_range[0],
225                            tv_range[1]);
226                 /* V4L2 spec: if the freq is not possible then the closest
227                    possible value should be selected */
228                 if (freq < tv_range[0] * 16)
229                         freq = tv_range[0] * 16;
230                 else
231                         freq = tv_range[1] * 16;
232         }
233         params.frequency = freq;
234
235         ops->set_params(&t->fe, &params);
236 }
237
238 static void set_radio_freq(struct i2c_client *c, unsigned int freq)
239 {
240         struct tuner *t = i2c_get_clientdata(c);
241         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
242
243         struct analog_parameters params = {
244                 .mode      = t->mode,
245                 .audmode   = t->audmode,
246                 .std       = t->std
247         };
248
249         if (t->type == UNSET) {
250                 tuner_warn ("tuner type not set\n");
251                 return;
252         }
253         if ((NULL == ops) || (NULL == ops->set_params)) {
254                 tuner_warn ("tuner has no way to set radio frequency\n");
255                 return;
256         }
257         if (freq < radio_range[0] * 16000 || freq > radio_range[1] * 16000) {
258                 tuner_dbg ("radio freq (%d.%02d) out of range (%d-%d)\n",
259                            freq / 16000, freq % 16000 * 100 / 16000,
260                            radio_range[0], radio_range[1]);
261                 /* V4L2 spec: if the freq is not possible then the closest
262                    possible value should be selected */
263                 if (freq < radio_range[0] * 16000)
264                         freq = radio_range[0] * 16000;
265                 else
266                         freq = radio_range[1] * 16000;
267         }
268         params.frequency = freq;
269
270         ops->set_params(&t->fe, &params);
271 }
272
273 static void set_freq(struct i2c_client *c, unsigned long freq)
274 {
275         struct tuner *t = i2c_get_clientdata(c);
276
277         switch (t->mode) {
278         case V4L2_TUNER_RADIO:
279                 tuner_dbg("radio freq set to %lu.%02lu\n",
280                           freq / 16000, freq % 16000 * 100 / 16000);
281                 set_radio_freq(c, freq);
282                 t->radio_freq = freq;
283                 break;
284         case V4L2_TUNER_ANALOG_TV:
285         case V4L2_TUNER_DIGITAL_TV:
286                 tuner_dbg("tv freq set to %lu.%02lu\n",
287                           freq / 16, freq % 16 * 100 / 16);
288                 set_tv_freq(c, freq);
289                 t->tv_freq = freq;
290                 break;
291         default:
292                 tuner_dbg("freq set: unknown mode: 0x%04x!\n",t->mode);
293         }
294 }
295
296 static void tuner_i2c_address_check(struct tuner *t)
297 {
298         if ((t->type == UNSET || t->type == TUNER_ABSENT) ||
299             ((t->i2c->addr < 0x64) || (t->i2c->addr > 0x6f)))
300                 return;
301
302         tuner_warn("====================== WARNING! ======================\n");
303         tuner_warn("Support for tuners in i2c address range 0x64 thru 0x6f\n");
304         tuner_warn("will soon be dropped. This message indicates that your\n");
305         tuner_warn("hardware has a %s tuner at i2c address 0x%02x.\n",
306                    t->i2c->name, t->i2c->addr);
307         tuner_warn("To ensure continued support for your device, please\n");
308         tuner_warn("send a copy of this message, along with full dmesg\n");
309         tuner_warn("output to v4l-dvb-maintainer@linuxtv.org\n");
310         tuner_warn("Please use subject line: \"obsolete tuner i2c address.\"\n");
311         tuner_warn("driver: %s, addr: 0x%02x, type: %d (%s)\n",
312                    t->i2c->adapter->name, t->i2c->addr, t->type,
313                    tuners[t->type].name);
314         tuner_warn("====================== WARNING! ======================\n");
315 }
316
317 static void attach_simple_tuner(struct tuner *t)
318 {
319         struct simple_tuner_config cfg = {
320                 .type = t->type,
321                 .tun  = &tuners[t->type]
322         };
323         simple_tuner_attach(&t->fe, t->i2c->adapter, t->i2c->addr, &cfg);
324 }
325
326 static void attach_tda829x(struct tuner *t)
327 {
328         struct tda829x_config cfg = {
329                 .lna_cfg        = &t->config,
330                 .tuner_callback = t->tuner_callback,
331         };
332         tda829x_attach(&t->fe, t->i2c->adapter, t->i2c->addr, &cfg);
333 }
334
335 static void set_type(struct i2c_client *c, unsigned int type,
336                      unsigned int new_mode_mask, unsigned int new_config,
337                      int (*tuner_callback) (void *dev, int command,int arg))
338 {
339         struct tuner *t = i2c_get_clientdata(c);
340         struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
341         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
342         unsigned char buffer[4];
343
344         if (type == UNSET || type == TUNER_ABSENT) {
345                 tuner_dbg ("tuner 0x%02x: Tuner type absent\n",c->addr);
346                 return;
347         }
348
349         if (type >= tuner_count) {
350                 tuner_warn ("tuner 0x%02x: Tuner count greater than %d\n",c->addr,tuner_count);
351                 return;
352         }
353
354         t->type = type;
355         t->config = new_config;
356         if (tuner_callback != NULL) {
357                 tuner_dbg("defining GPIO callback\n");
358                 t->tuner_callback = tuner_callback;
359         }
360
361         if (t->mode == T_UNINITIALIZED) {
362                 tuner_dbg ("tuner 0x%02x: called during i2c_client register by adapter's attach_inform\n", c->addr);
363
364                 return;
365         }
366
367         /* discard private data, in case set_type() was previously called */
368         if (ops && ops->release)
369                 ops->release(&t->fe);
370
371         switch (t->type) {
372         case TUNER_MT2032:
373                 microtune_attach(&t->fe, t->i2c->adapter, t->i2c->addr);
374                 break;
375         case TUNER_PHILIPS_TDA8290:
376         {
377                 attach_tda829x(t);
378                 break;
379         }
380         case TUNER_TEA5767:
381                 if (tea5767_attach(&t->fe, t->i2c->adapter, t->i2c->addr) == NULL) {
382                         t->type = TUNER_ABSENT;
383                         t->mode_mask = T_UNINITIALIZED;
384                         return;
385                 }
386                 t->mode_mask = T_RADIO;
387                 break;
388         case TUNER_TEA5761:
389                 if (tea5761_attach(&t->fe, t->i2c->adapter, t->i2c->addr) == NULL) {
390                         t->type = TUNER_ABSENT;
391                         t->mode_mask = T_UNINITIALIZED;
392                         return;
393                 }
394                 t->mode_mask = T_RADIO;
395                 break;
396         case TUNER_PHILIPS_FMD1216ME_MK3:
397                 buffer[0] = 0x0b;
398                 buffer[1] = 0xdc;
399                 buffer[2] = 0x9c;
400                 buffer[3] = 0x60;
401                 i2c_master_send(c, buffer, 4);
402                 mdelay(1);
403                 buffer[2] = 0x86;
404                 buffer[3] = 0x54;
405                 i2c_master_send(c, buffer, 4);
406                 attach_simple_tuner(t);
407                 break;
408         case TUNER_PHILIPS_TD1316:
409                 buffer[0] = 0x0b;
410                 buffer[1] = 0xdc;
411                 buffer[2] = 0x86;
412                 buffer[3] = 0xa4;
413                 i2c_master_send(c,buffer,4);
414                 attach_simple_tuner(t);
415                 break;
416         case TUNER_XC2028:
417         {
418                 struct xc2028_config cfg = {
419                         .i2c_adap  = t->i2c->adapter,
420                         .i2c_addr  = t->i2c->addr,
421                         .video_dev = c->adapter->algo_data,
422                         .callback  = t->tuner_callback,
423                 };
424                 if (!xc2028_attach(&t->fe, &cfg)) {
425                         t->type = TUNER_ABSENT;
426                         t->mode_mask = T_UNINITIALIZED;
427                         return;
428                 }
429                 break;
430         }
431         case TUNER_TDA9887:
432                 tda9887_attach(&t->fe, t->i2c->adapter, t->i2c->addr);
433                 break;
434         default:
435                 attach_simple_tuner(t);
436                 break;
437         }
438
439         ops = t->fe.ops.analog_demod_ops;
440
441         if (((NULL == ops) || (NULL == ops->set_params)) &&
442             (fe_tuner_ops->set_analog_params)) {
443                 strlcpy(t->i2c->name, fe_tuner_ops->info.name,
444                         sizeof(t->i2c->name));
445
446                 t->fe.ops.analog_demod_ops = &tuner_core_ops;
447                 t->fe.analog_demod_priv = t;
448         } else {
449                 strlcpy(t->i2c->name, ops->info.name,
450                         sizeof(t->i2c->name));
451         }
452
453         tuner_dbg("type set to %s\n", t->i2c->name);
454
455         if (t->mode_mask == T_UNINITIALIZED)
456                 t->mode_mask = new_mode_mask;
457
458         set_freq(c, (V4L2_TUNER_RADIO == t->mode) ? t->radio_freq : t->tv_freq);
459         tuner_dbg("%s %s I2C addr 0x%02x with type %d used for 0x%02x\n",
460                   c->adapter->name, c->driver->driver.name, c->addr << 1, type,
461                   t->mode_mask);
462         tuner_i2c_address_check(t);
463 }
464
465 /*
466  * This function apply tuner config to tuner specified
467  * by tun_setup structure. I addr is unset, then admin status
468  * and tun addr status is more precise then current status,
469  * it's applied. Otherwise status and type are applied only to
470  * tuner with exactly the same addr.
471 */
472
473 static void set_addr(struct i2c_client *c, struct tuner_setup *tun_setup)
474 {
475         struct tuner *t = i2c_get_clientdata(c);
476
477         tuner_dbg("set addr for type %i\n", t->type);
478
479         if ( (t->type == UNSET && ((tun_setup->addr == ADDR_UNSET) &&
480                 (t->mode_mask & tun_setup->mode_mask))) ||
481                 (tun_setup->addr == c->addr)) {
482                         set_type(c, tun_setup->type, tun_setup->mode_mask,
483                                  tun_setup->config, tun_setup->tuner_callback);
484         }
485 }
486
487 static inline int check_mode(struct tuner *t, char *cmd)
488 {
489         if ((1 << t->mode & t->mode_mask) == 0) {
490                 return EINVAL;
491         }
492
493         switch (t->mode) {
494         case V4L2_TUNER_RADIO:
495                 tuner_dbg("Cmd %s accepted for radio\n", cmd);
496                 break;
497         case V4L2_TUNER_ANALOG_TV:
498                 tuner_dbg("Cmd %s accepted for analog TV\n", cmd);
499                 break;
500         case V4L2_TUNER_DIGITAL_TV:
501                 tuner_dbg("Cmd %s accepted for digital TV\n", cmd);
502                 break;
503         }
504         return 0;
505 }
506
507 /* get more precise norm info from insmod option */
508 static int tuner_fixup_std(struct tuner *t)
509 {
510         if ((t->std & V4L2_STD_PAL) == V4L2_STD_PAL) {
511                 switch (pal[0]) {
512                 case '6':
513                         tuner_dbg ("insmod fixup: PAL => PAL-60\n");
514                         t->std = V4L2_STD_PAL_60;
515                         break;
516                 case 'b':
517                 case 'B':
518                 case 'g':
519                 case 'G':
520                         tuner_dbg ("insmod fixup: PAL => PAL-BG\n");
521                         t->std = V4L2_STD_PAL_BG;
522                         break;
523                 case 'i':
524                 case 'I':
525                         tuner_dbg ("insmod fixup: PAL => PAL-I\n");
526                         t->std = V4L2_STD_PAL_I;
527                         break;
528                 case 'd':
529                 case 'D':
530                 case 'k':
531                 case 'K':
532                         tuner_dbg ("insmod fixup: PAL => PAL-DK\n");
533                         t->std = V4L2_STD_PAL_DK;
534                         break;
535                 case 'M':
536                 case 'm':
537                         tuner_dbg ("insmod fixup: PAL => PAL-M\n");
538                         t->std = V4L2_STD_PAL_M;
539                         break;
540                 case 'N':
541                 case 'n':
542                         if (pal[1] == 'c' || pal[1] == 'C') {
543                                 tuner_dbg("insmod fixup: PAL => PAL-Nc\n");
544                                 t->std = V4L2_STD_PAL_Nc;
545                         } else {
546                                 tuner_dbg ("insmod fixup: PAL => PAL-N\n");
547                                 t->std = V4L2_STD_PAL_N;
548                         }
549                         break;
550                 case '-':
551                         /* default parameter, do nothing */
552                         break;
553                 default:
554                         tuner_warn ("pal= argument not recognised\n");
555                         break;
556                 }
557         }
558         if ((t->std & V4L2_STD_SECAM) == V4L2_STD_SECAM) {
559                 switch (secam[0]) {
560                 case 'b':
561                 case 'B':
562                 case 'g':
563                 case 'G':
564                 case 'h':
565                 case 'H':
566                         tuner_dbg("insmod fixup: SECAM => SECAM-BGH\n");
567                         t->std = V4L2_STD_SECAM_B | V4L2_STD_SECAM_G | V4L2_STD_SECAM_H;
568                         break;
569                 case 'd':
570                 case 'D':
571                 case 'k':
572                 case 'K':
573                         tuner_dbg ("insmod fixup: SECAM => SECAM-DK\n");
574                         t->std = V4L2_STD_SECAM_DK;
575                         break;
576                 case 'l':
577                 case 'L':
578                         if ((secam[1]=='C')||(secam[1]=='c')) {
579                                 tuner_dbg ("insmod fixup: SECAM => SECAM-L'\n");
580                                 t->std = V4L2_STD_SECAM_LC;
581                         } else {
582                                 tuner_dbg ("insmod fixup: SECAM => SECAM-L\n");
583                                 t->std = V4L2_STD_SECAM_L;
584                         }
585                         break;
586                 case '-':
587                         /* default parameter, do nothing */
588                         break;
589                 default:
590                         tuner_warn ("secam= argument not recognised\n");
591                         break;
592                 }
593         }
594
595         if ((t->std & V4L2_STD_NTSC) == V4L2_STD_NTSC) {
596                 switch (ntsc[0]) {
597                 case 'm':
598                 case 'M':
599                         tuner_dbg("insmod fixup: NTSC => NTSC-M\n");
600                         t->std = V4L2_STD_NTSC_M;
601                         break;
602                 case 'j':
603                 case 'J':
604                         tuner_dbg("insmod fixup: NTSC => NTSC_M_JP\n");
605                         t->std = V4L2_STD_NTSC_M_JP;
606                         break;
607                 case 'k':
608                 case 'K':
609                         tuner_dbg("insmod fixup: NTSC => NTSC_M_KR\n");
610                         t->std = V4L2_STD_NTSC_M_KR;
611                         break;
612                 case '-':
613                         /* default parameter, do nothing */
614                         break;
615                 default:
616                         tuner_info("ntsc= argument not recognised\n");
617                         break;
618                 }
619         }
620         return 0;
621 }
622
623 static void tuner_status(struct dvb_frontend *fe)
624 {
625         struct tuner *t = fe->analog_demod_priv;
626         unsigned long freq, freq_fraction;
627         struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
628         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
629         const char *p;
630
631         switch (t->mode) {
632                 case V4L2_TUNER_RADIO:      p = "radio"; break;
633                 case V4L2_TUNER_ANALOG_TV:  p = "analog TV"; break;
634                 case V4L2_TUNER_DIGITAL_TV: p = "digital TV"; break;
635                 default: p = "undefined"; break;
636         }
637         if (t->mode == V4L2_TUNER_RADIO) {
638                 freq = t->radio_freq / 16000;
639                 freq_fraction = (t->radio_freq % 16000) * 100 / 16000;
640         } else {
641                 freq = t->tv_freq / 16;
642                 freq_fraction = (t->tv_freq % 16) * 100 / 16;
643         }
644         tuner_info("Tuner mode:      %s\n", p);
645         tuner_info("Frequency:       %lu.%02lu MHz\n", freq, freq_fraction);
646         tuner_info("Standard:        0x%08lx\n", (unsigned long)t->std);
647         if (t->mode != V4L2_TUNER_RADIO)
648                return;
649         if (fe_tuner_ops->get_status) {
650                 u32 tuner_status;
651
652                 fe_tuner_ops->get_status(&t->fe, &tuner_status);
653                 if (tuner_status & TUNER_STATUS_LOCKED)
654                         tuner_info("Tuner is locked.\n");
655                 if (tuner_status & TUNER_STATUS_STEREO)
656                         tuner_info("Stereo:          yes\n");
657         }
658         if (ops) {
659                 if (ops->has_signal)
660                         tuner_info("Signal strength: %d\n",
661                                    ops->has_signal(fe));
662                 if (ops->is_stereo)
663                         tuner_info("Stereo:          %s\n",
664                                    ops->is_stereo(fe) ? "yes" : "no");
665         }
666 }
667
668 /* ---------------------------------------------------------------------- */
669
670 /*
671  * Switch tuner to other mode. If tuner support both tv and radio,
672  * set another frequency to some value (This is needed for some pal
673  * tuners to avoid locking). Otherwise, just put second tuner in
674  * standby mode.
675  */
676
677 static inline int set_mode(struct i2c_client *client, struct tuner *t, int mode, char *cmd)
678 {
679         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
680
681         if (mode == t->mode)
682                 return 0;
683
684         t->mode = mode;
685
686         if (check_mode(t, cmd) == EINVAL) {
687                 t->mode = T_STANDBY;
688                 if (ops && ops->standby)
689                         ops->standby(&t->fe);
690                 return EINVAL;
691         }
692         return 0;
693 }
694
695 #define switch_v4l2()   if (!t->using_v4l2) \
696                             tuner_dbg("switching to v4l2\n"); \
697                         t->using_v4l2 = 1;
698
699 static inline int check_v4l2(struct tuner *t)
700 {
701         /* bttv still uses both v4l1 and v4l2 calls to the tuner (v4l2 for
702            TV, v4l1 for radio), until that is fixed this code is disabled.
703            Otherwise the radio (v4l1) wouldn't tune after using the TV (v4l2)
704            first. */
705         return 0;
706 }
707
708 static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
709 {
710         struct tuner *t = i2c_get_clientdata(client);
711         struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
712         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
713
714         if (tuner_debug>1)
715                 v4l_i2c_print_ioctl(client,cmd);
716
717         switch (cmd) {
718         /* --- configuration --- */
719         case TUNER_SET_TYPE_ADDR:
720                 tuner_dbg ("Calling set_type_addr for type=%d, addr=0x%02x, mode=0x%02x, config=0x%02x\n",
721                                 ((struct tuner_setup *)arg)->type,
722                                 ((struct tuner_setup *)arg)->addr,
723                                 ((struct tuner_setup *)arg)->mode_mask,
724                                 ((struct tuner_setup *)arg)->config);
725
726                 set_addr(client, (struct tuner_setup *)arg);
727                 break;
728         case AUDC_SET_RADIO:
729                 if (set_mode(client, t, V4L2_TUNER_RADIO, "AUDC_SET_RADIO")
730                                 == EINVAL)
731                         return 0;
732                 if (t->radio_freq)
733                         set_freq(client, t->radio_freq);
734                 break;
735         case TUNER_SET_STANDBY:
736                 if (check_mode(t, "TUNER_SET_STANDBY") == EINVAL)
737                         return 0;
738                 t->mode = T_STANDBY;
739                 if (ops && ops->standby)
740                         ops->standby(&t->fe);
741                 break;
742 #ifdef CONFIG_VIDEO_V4L1
743         case VIDIOCSAUDIO:
744                 if (check_mode(t, "VIDIOCSAUDIO") == EINVAL)
745                         return 0;
746                 if (check_v4l2(t) == EINVAL)
747                         return 0;
748
749                 /* Should be implemented, since bttv calls it */
750                 tuner_dbg("VIDIOCSAUDIO not implemented.\n");
751                 break;
752         case VIDIOCSCHAN:
753                 {
754                         static const v4l2_std_id map[] = {
755                                 [VIDEO_MODE_PAL] = V4L2_STD_PAL,
756                                 [VIDEO_MODE_NTSC] = V4L2_STD_NTSC_M,
757                                 [VIDEO_MODE_SECAM] = V4L2_STD_SECAM,
758                                 [4 /* bttv */ ] = V4L2_STD_PAL_M,
759                                 [5 /* bttv */ ] = V4L2_STD_PAL_N,
760                                 [6 /* bttv */ ] = V4L2_STD_NTSC_M_JP,
761                         };
762                         struct video_channel *vc = arg;
763
764                         if (check_v4l2(t) == EINVAL)
765                                 return 0;
766
767                         if (set_mode(client,t,V4L2_TUNER_ANALOG_TV, "VIDIOCSCHAN")==EINVAL)
768                                 return 0;
769
770                         if (vc->norm < ARRAY_SIZE(map))
771                                 t->std = map[vc->norm];
772                         tuner_fixup_std(t);
773                         if (t->tv_freq)
774                                 set_tv_freq(client, t->tv_freq);
775                         return 0;
776                 }
777         case VIDIOCSFREQ:
778                 {
779                         unsigned long *v = arg;
780
781                         if (check_mode(t, "VIDIOCSFREQ") == EINVAL)
782                                 return 0;
783                         if (check_v4l2(t) == EINVAL)
784                                 return 0;
785
786                         set_freq(client, *v);
787                         return 0;
788                 }
789         case VIDIOCGTUNER:
790                 {
791                         struct video_tuner *vt = arg;
792
793                         if (check_mode(t, "VIDIOCGTUNER") == EINVAL)
794                                 return 0;
795                         if (check_v4l2(t) == EINVAL)
796                                 return 0;
797
798                         if (V4L2_TUNER_RADIO == t->mode) {
799                                 if (fe_tuner_ops->get_status) {
800                                         u32 tuner_status;
801
802                                         fe_tuner_ops->get_status(&t->fe, &tuner_status);
803                                         if (tuner_status & TUNER_STATUS_STEREO)
804                                                 vt->flags |= VIDEO_TUNER_STEREO_ON;
805                                         else
806                                                 vt->flags &= ~VIDEO_TUNER_STEREO_ON;
807                                 } else {
808                                         if (ops && ops->is_stereo) {
809                                                 if (ops->is_stereo(&t->fe))
810                                                         vt->flags |=
811                                                                 VIDEO_TUNER_STEREO_ON;
812                                                 else
813                                                         vt->flags &=
814                                                                 ~VIDEO_TUNER_STEREO_ON;
815                                         }
816                                 }
817                                 if (ops && ops->has_signal)
818                                         vt->signal = ops->has_signal(&t->fe);
819
820                                 vt->flags |= VIDEO_TUNER_LOW;   /* Allow freqs at 62.5 Hz */
821
822                                 vt->rangelow = radio_range[0] * 16000;
823                                 vt->rangehigh = radio_range[1] * 16000;
824
825                         } else {
826                                 vt->rangelow = tv_range[0] * 16;
827                                 vt->rangehigh = tv_range[1] * 16;
828                         }
829
830                         return 0;
831                 }
832         case VIDIOCGAUDIO:
833                 {
834                         struct video_audio *va = arg;
835
836                         if (check_mode(t, "VIDIOCGAUDIO") == EINVAL)
837                                 return 0;
838                         if (check_v4l2(t) == EINVAL)
839                                 return 0;
840
841                         if (V4L2_TUNER_RADIO == t->mode) {
842                                 if (fe_tuner_ops->get_status) {
843                                         u32 tuner_status;
844
845                                         fe_tuner_ops->get_status(&t->fe, &tuner_status);
846                                         va->mode = (tuner_status & TUNER_STATUS_STEREO)
847                                             ? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;
848                                 } else if (ops && ops->is_stereo)
849                                         va->mode = ops->is_stereo(&t->fe)
850                                             ? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;
851                         }
852                         return 0;
853                 }
854 #endif
855         case TUNER_SET_CONFIG:
856         {
857                 struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
858                 struct v4l2_priv_tun_config *cfg = arg;
859
860                 if (t->type != cfg->tuner)
861                         break;
862
863                 if ((NULL == ops) || (NULL == ops->set_config)) {
864                         tuner_warn("Tuner frontend module has no way to "
865                                    "set config\n");
866                         break;
867                 }
868
869                 ops->set_config(&t->fe, cfg->priv);
870                 break;
871         }
872         /* --- v4l ioctls --- */
873         /* take care: bttv does userspace copying, we'll get a
874            kernel pointer here... */
875         case VIDIOC_S_STD:
876                 {
877                         v4l2_std_id *id = arg;
878
879                         if (set_mode (client, t, V4L2_TUNER_ANALOG_TV, "VIDIOC_S_STD")
880                                         == EINVAL)
881                                 return 0;
882
883                         switch_v4l2();
884
885                         t->std = *id;
886                         tuner_fixup_std(t);
887                         if (t->tv_freq)
888                                 set_freq(client, t->tv_freq);
889                         break;
890                 }
891         case VIDIOC_S_FREQUENCY:
892                 {
893                         struct v4l2_frequency *f = arg;
894
895                         if (set_mode (client, t, f->type, "VIDIOC_S_FREQUENCY")
896                                         == EINVAL)
897                                 return 0;
898                         switch_v4l2();
899                         set_freq(client,f->frequency);
900
901                         break;
902                 }
903         case VIDIOC_G_FREQUENCY:
904                 {
905                         struct v4l2_frequency *f = arg;
906
907                         if (check_mode(t, "VIDIOC_G_FREQUENCY") == EINVAL)
908                                 return 0;
909                         switch_v4l2();
910                         f->type = t->mode;
911                         if (fe_tuner_ops->get_frequency) {
912                                 u32 abs_freq;
913
914                                 fe_tuner_ops->get_frequency(&t->fe, &abs_freq);
915                                 f->frequency = (V4L2_TUNER_RADIO == t->mode) ?
916                                         (abs_freq * 2 + 125/2) / 125 :
917                                         (abs_freq + 62500/2) / 62500;
918                                 break;
919                         }
920                         f->frequency = (V4L2_TUNER_RADIO == t->mode) ?
921                                 t->radio_freq : t->tv_freq;
922                         break;
923                 }
924         case VIDIOC_G_TUNER:
925                 {
926                         struct v4l2_tuner *tuner = arg;
927
928                         if (check_mode(t, "VIDIOC_G_TUNER") == EINVAL)
929                                 return 0;
930                         switch_v4l2();
931
932                         tuner->type = t->mode;
933                         if (ops && ops->get_afc)
934                                 tuner->afc = ops->get_afc(&t->fe);
935                         if (t->mode == V4L2_TUNER_ANALOG_TV)
936                                 tuner->capability |= V4L2_TUNER_CAP_NORM;
937                         if (t->mode != V4L2_TUNER_RADIO) {
938                                 tuner->rangelow = tv_range[0] * 16;
939                                 tuner->rangehigh = tv_range[1] * 16;
940                                 break;
941                         }
942
943                         /* radio mode */
944                         tuner->rxsubchans =
945                                 V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
946                         if (fe_tuner_ops->get_status) {
947                                 u32 tuner_status;
948
949                                 fe_tuner_ops->get_status(&t->fe, &tuner_status);
950                                 tuner->rxsubchans =
951                                         (tuner_status & TUNER_STATUS_STEREO) ?
952                                         V4L2_TUNER_SUB_STEREO :
953                                         V4L2_TUNER_SUB_MONO;
954                         } else {
955                                 if (ops && ops->is_stereo) {
956                                         tuner->rxsubchans =
957                                                 ops->is_stereo(&t->fe) ?
958                                                 V4L2_TUNER_SUB_STEREO :
959                                                 V4L2_TUNER_SUB_MONO;
960                                 }
961                         }
962                         if (ops && ops->has_signal)
963                                 tuner->signal = ops->has_signal(&t->fe);
964                         tuner->capability |=
965                             V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
966                         tuner->audmode = t->audmode;
967                         tuner->rangelow = radio_range[0] * 16000;
968                         tuner->rangehigh = radio_range[1] * 16000;
969                         break;
970                 }
971         case VIDIOC_S_TUNER:
972                 {
973                         struct v4l2_tuner *tuner = arg;
974
975                         if (check_mode(t, "VIDIOC_S_TUNER") == EINVAL)
976                                 return 0;
977
978                         switch_v4l2();
979
980                         /* do nothing unless we're a radio tuner */
981                         if (t->mode != V4L2_TUNER_RADIO)
982                                 break;
983                         t->audmode = tuner->audmode;
984                         set_radio_freq(client, t->radio_freq);
985                         break;
986                 }
987         case VIDIOC_LOG_STATUS:
988                 if (ops && ops->tuner_status)
989                         ops->tuner_status(&t->fe);
990                 break;
991         }
992
993         return 0;
994 }
995
996 static int tuner_suspend(struct i2c_client *c, pm_message_t state)
997 {
998         struct tuner *t = i2c_get_clientdata(c);
999
1000         tuner_dbg("suspend\n");
1001         /* FIXME: power down ??? */
1002         return 0;
1003 }
1004
1005 static int tuner_resume(struct i2c_client *c)
1006 {
1007         struct tuner *t = i2c_get_clientdata(c);
1008
1009         tuner_dbg("resume\n");
1010         if (V4L2_TUNER_RADIO == t->mode) {
1011                 if (t->radio_freq)
1012                         set_freq(c, t->radio_freq);
1013         } else {
1014                 if (t->tv_freq)
1015                         set_freq(c, t->tv_freq);
1016         }
1017         return 0;
1018 }
1019
1020 /* ---------------------------------------------------------------------- */
1021
1022 LIST_HEAD(tuner_list);
1023
1024 /* Search for existing radio and/or TV tuners on the given I2C adapter.
1025    Note that when this function is called from tuner_probe you can be
1026    certain no other devices will be added/deleted at the same time, I2C
1027    core protects against that. */
1028 static void tuner_lookup(struct i2c_adapter *adap,
1029                 struct tuner **radio, struct tuner **tv)
1030 {
1031         struct tuner *pos;
1032
1033         *radio = NULL;
1034         *tv = NULL;
1035
1036         list_for_each_entry(pos, &tuner_list, list) {
1037                 int mode_mask;
1038
1039                 if (pos->i2c->adapter != adap ||
1040                     pos->i2c->driver->id != I2C_DRIVERID_TUNER)
1041                         continue;
1042
1043                 mode_mask = pos->mode_mask & ~T_STANDBY;
1044                 if (*radio == NULL && mode_mask == T_RADIO)
1045                         *radio = pos;
1046                 /* Note: currently TDA9887 is the only demod-only
1047                    device. If other devices appear then we need to
1048                    make this test more general. */
1049                 else if (*tv == NULL && pos->type != TUNER_TDA9887 &&
1050                          (pos->mode_mask & (T_ANALOG_TV | T_DIGITAL_TV)))
1051                         *tv = pos;
1052         }
1053 }
1054
1055 /* During client attach, set_type is called by adapter's attach_inform callback.
1056    set_type must then be completed by tuner_probe.
1057  */
1058 static int tuner_probe(struct i2c_client *client)
1059 {
1060         struct tuner *t;
1061         struct tuner *radio;
1062         struct tuner *tv;
1063
1064         t = kzalloc(sizeof(struct tuner), GFP_KERNEL);
1065         if (NULL == t)
1066                 return -ENOMEM;
1067         t->i2c = client;
1068         strlcpy(client->name, "(tuner unset)", sizeof(client->name));
1069         i2c_set_clientdata(client, t);
1070         t->type = UNSET;
1071         t->audmode = V4L2_TUNER_MODE_STEREO;
1072         t->mode_mask = T_UNINITIALIZED;
1073
1074         if (show_i2c) {
1075                 unsigned char buffer[16];
1076                 int i, rc;
1077
1078                 memset(buffer, 0, sizeof(buffer));
1079                 rc = i2c_master_recv(client, buffer, sizeof(buffer));
1080                 tuner_info("I2C RECV = ");
1081                 for (i = 0; i < rc; i++)
1082                         printk(KERN_CONT "%02x ", buffer[i]);
1083                 printk("\n");
1084         }
1085         /* HACK: This test was added to avoid tuner to probe tda9840 and
1086            tea6415c on the MXB card */
1087         if (client->adapter->id == I2C_HW_SAA7146 && client->addr < 0x4a) {
1088                 kfree(t);
1089                 return -ENODEV;
1090         }
1091
1092         /* autodetection code based on the i2c addr */
1093         if (!no_autodetect) {
1094                 switch (client->addr) {
1095                 case 0x10:
1096                         if (tea5761_autodetection(t->i2c->adapter, t->i2c->addr)
1097                                         != EINVAL) {
1098                                 t->type = TUNER_TEA5761;
1099                                 t->mode_mask = T_RADIO;
1100                                 t->mode = T_STANDBY;
1101                                 /* Sets freq to FM range */
1102                                 t->radio_freq = 87.5 * 16000;
1103                                 tuner_lookup(t->i2c->adapter, &radio, &tv);
1104                                 if (tv)
1105                                         tv->mode_mask &= ~T_RADIO;
1106
1107                                 goto register_client;
1108                         }
1109                         break;
1110                 case 0x42:
1111                 case 0x43:
1112                 case 0x4a:
1113                 case 0x4b:
1114                         /* If chip is not tda8290, don't register.
1115                            since it can be tda9887*/
1116                         if (tda829x_probe(t->i2c->adapter,
1117                                           t->i2c->addr) == 0) {
1118                                 tuner_dbg("tda829x detected\n");
1119                         } else {
1120                                 /* Default is being tda9887 */
1121                                 t->type = TUNER_TDA9887;
1122                                 t->mode_mask = T_RADIO | T_ANALOG_TV |
1123                                                T_DIGITAL_TV;
1124                                 t->mode = T_STANDBY;
1125                                 goto register_client;
1126                         }
1127                         break;
1128                 case 0x60:
1129                         if (tea5767_autodetection(t->i2c->adapter, t->i2c->addr)
1130                                         != EINVAL) {
1131                                 t->type = TUNER_TEA5767;
1132                                 t->mode_mask = T_RADIO;
1133                                 t->mode = T_STANDBY;
1134                                 /* Sets freq to FM range */
1135                                 t->radio_freq = 87.5 * 16000;
1136                                 tuner_lookup(t->i2c->adapter, &radio, &tv);
1137                                 if (tv)
1138                                         tv->mode_mask &= ~T_RADIO;
1139
1140                                 goto register_client;
1141                         }
1142                         break;
1143                 }
1144         }
1145
1146         /* Initializes only the first TV tuner on this adapter. Why only the
1147            first? Because there are some devices (notably the ones with TI
1148            tuners) that have more than one i2c address for the *same* device.
1149            Experience shows that, except for just one case, the first
1150            address is the right one. The exception is a Russian tuner
1151            (ACORP_Y878F). So, the desired behavior is just to enable the
1152            first found TV tuner. */
1153         tuner_lookup(t->i2c->adapter, &radio, &tv);
1154         if (tv == NULL) {
1155                 t->mode_mask = T_ANALOG_TV | T_DIGITAL_TV;
1156                 if (radio == NULL)
1157                         t->mode_mask |= T_RADIO;
1158                 tuner_dbg("Setting mode_mask to 0x%02x\n", t->mode_mask);
1159                 t->tv_freq = 400 * 16; /* Sets freq to VHF High */
1160                 t->radio_freq = 87.5 * 16000; /* Sets freq to FM range */
1161         }
1162
1163         /* Should be just before return */
1164 register_client:
1165         tuner_info("chip found @ 0x%x (%s)\n", client->addr << 1,
1166                        client->adapter->name);
1167
1168         /* Sets a default mode */
1169         if (t->mode_mask & T_ANALOG_TV) {
1170                 t->mode = V4L2_TUNER_ANALOG_TV;
1171         } else  if (t->mode_mask & T_RADIO) {
1172                 t->mode = V4L2_TUNER_RADIO;
1173         } else {
1174                 t->mode = V4L2_TUNER_DIGITAL_TV;
1175         }
1176         set_type(client, t->type, t->mode_mask, t->config, t->tuner_callback);
1177         list_add_tail(&t->list, &tuner_list);
1178         return 0;
1179 }
1180
1181 static int tuner_legacy_probe(struct i2c_adapter *adap)
1182 {
1183         if (0 != addr) {
1184                 normal_i2c[0] = addr;
1185                 normal_i2c[1] = I2C_CLIENT_END;
1186         }
1187
1188         if ((adap->class & I2C_CLASS_TV_ANALOG) == 0)
1189                 return 0;
1190
1191         /* HACK: Ignore 0x6b and 0x6f on cx88 boards.
1192          * FusionHDTV5 RT Gold has an ir receiver at 0x6b
1193          * and an RTC at 0x6f which can get corrupted if probed.
1194          */
1195         if ((adap->id == I2C_HW_B_CX2388x) ||
1196             (adap->id == I2C_HW_B_CX23885)) {
1197                 unsigned int i = 0;
1198
1199                 while (i < I2C_CLIENT_MAX_OPTS && ignore[i] != I2C_CLIENT_END)
1200                         i += 2;
1201                 if (i + 4 < I2C_CLIENT_MAX_OPTS) {
1202                         ignore[i+0] = adap->nr;
1203                         ignore[i+1] = 0x6b;
1204                         ignore[i+2] = adap->nr;
1205                         ignore[i+3] = 0x6f;
1206                         ignore[i+4] = I2C_CLIENT_END;
1207                 } else
1208                         printk(KERN_WARNING "tuner: "
1209                                "too many options specified "
1210                                "in i2c probe ignore list!\n");
1211         }
1212         return 1;
1213 }
1214
1215 static int tuner_remove(struct i2c_client *client)
1216 {
1217         struct tuner *t = i2c_get_clientdata(client);
1218         struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
1219
1220         if (ops && ops->release)
1221                 ops->release(&t->fe);
1222
1223         list_del(&t->list);
1224         kfree(t);
1225         return 0;
1226 }
1227
1228 /* ----------------------------------------------------------------------- */
1229
1230 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
1231         .name = "tuner",
1232         .driverid = I2C_DRIVERID_TUNER,
1233         .command = tuner_command,
1234         .probe = tuner_probe,
1235         .remove = tuner_remove,
1236         .suspend = tuner_suspend,
1237         .resume = tuner_resume,
1238         .legacy_probe = tuner_legacy_probe,
1239 };
1240
1241
1242 /*
1243  * Overrides for Emacs so that we follow Linus's tabbing style.
1244  * ---------------------------------------------------------------------------
1245  * Local variables:
1246  * c-basic-offset: 8
1247  * End:
1248  */