libnvdimm/altmap: Track namespace boundaries in altmap
[linux-2.6-block.git] / drivers / media / v4l2-core / tuner-core.c
CommitLineData
09c434b8 1// SPDX-License-Identifier: GPL-2.0-only
1da177e4 2/*
1da177e4
LT
3 * i2c tv tuner chip device driver
4 * core core, i.e. kernel interfaces, registering and so on
a2894e3f
MCC
5 *
6 * Copyright(c) by Ralph Metzler, Gerd Knorr, Gunther Mayer
7 *
8 * Copyright(c) 2005-2011 by Mauro Carvalho Chehab
9 * - Added support for a separate Radio tuner
10 * - Major rework and cleanups at the code
11 *
12 * This driver supports many devices and the idea is to let the driver
13 * detect which device is present. So rather than listing all supported
14 * devices here, we pretend to support a single, fake device type that will
15 * handle both radio and analog TV tuning.
1da177e4
LT
16 */
17
18#include <linux/module.h>
1da177e4 19#include <linux/kernel.h>
1da177e4
LT
20#include <linux/string.h>
21#include <linux/timer.h>
22#include <linux/delay.h>
23#include <linux/errno.h>
24#include <linux/slab.h>
25#include <linux/poll.h>
26#include <linux/i2c.h>
27#include <linux/types.h>
1da177e4 28#include <linux/init.h>
75b4c260 29#include <linux/videodev2.h>
1da177e4 30#include <media/tuner.h>
4adad287 31#include <media/tuner-types.h>
e8a4a9e7 32#include <media/v4l2-device.h>
35ea11ff 33#include <media/v4l2-ioctl.h>
96c0b7cf 34#include "mt20xx.h"
910bb3e3 35#include "tda8290.h"
7ab10bf7 36#include "tea5761.h"
8d0936ed 37#include "tea5767.h"
215b95ba 38#include "tuner-xc2028.h"
4adad287 39#include "tuner-simple.h"
31c9584c 40#include "tda9887.h"
27c685a4 41#include "xc5000.h"
93463895 42#include "tda18271.h"
8d009a0c 43#include "xc4000.h"
1da177e4
LT
44
45#define UNSET (-1U)
46
9f3f71ef
MCC
47/*
48 * Driver modprobe parameters
49 */
50
51/* insmod options used at init time => read/only */
52static unsigned int addr;
53static unsigned int no_autodetect;
54static unsigned int show_i2c;
55
56module_param(addr, int, 0444);
57module_param(no_autodetect, int, 0444);
58module_param(show_i2c, int, 0444);
59
60/* insmod options used at runtime => read/write */
61static int tuner_debug;
62static unsigned int tv_range[2] = { 44, 958 };
63static unsigned int radio_range[2] = { 65, 108 };
64static char pal[] = "--";
65static char secam[] = "--";
66static char ntsc[] = "-";
67
7d275bf8 68module_param_named(debug, tuner_debug, int, 0644);
9f3f71ef
MCC
69module_param_array(tv_range, int, NULL, 0644);
70module_param_array(radio_range, int, NULL, 0644);
71module_param_string(pal, pal, sizeof(pal), 0644);
72module_param_string(secam, secam, sizeof(secam), 0644);
73module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
74
75/*
76 * Static vars
77 */
78
9f3f71ef 79static LIST_HEAD(tuner_list);
a2894e3f 80static const struct v4l2_subdev_ops tuner_ops;
9f3f71ef
MCC
81
82/*
83 * Debug macros
84 */
85
680d87c0
MCC
86#undef pr_fmt
87
88#define pr_fmt(fmt) KBUILD_MODNAME ": %d-%04x: " fmt, \
89 i2c_adapter_id(t->i2c->adapter), t->i2c->addr
90
91
92#define dprintk(fmt, arg...) do { \
93 if (tuner_debug) \
94 printk(KERN_DEBUG pr_fmt("%s: " fmt), __func__, ##arg); \
95} while (0)
9f3f71ef
MCC
96
97/*
65e83fb0 98 * Internal enums/struct used inside the driver
9f3f71ef
MCC
99 */
100
65e83fb0
MCC
101/**
102 * enum tuner_pad_index - tuner pad index for MEDIA_ENT_F_TUNER
103 *
104 * @TUNER_PAD_RF_INPUT:
105 * Radiofrequency (RF) sink pad, usually linked to a RF connector entity.
106 * @TUNER_PAD_OUTPUT:
107 * tuner video output source pad. Contains the video chrominance
108 * and luminance or the hole bandwidth of the signal converted to
109 * an Intermediate Frequency (IF) or to baseband (on zero-IF tuners).
110 * @TUNER_PAD_AUD_OUT:
111 * Tuner audio output source pad. Tuners used to decode analog TV
112 * signals have an extra pad for audio output. Old tuners use an
113 * analog stage with a saw filter for the audio IF frequency. The
114 * output of the pad is, in this case, the audio IF, with should be
115 * decoded either by the bridge chipset (that's the case of cx2388x
116 * chipsets) or may require an external IF sound processor, like
117 * msp34xx. On modern silicon tuners, the audio IF decoder is usually
118 * incorporated at the tuner. On such case, the output of this pad
119 * is an audio sampled data.
120 * @TUNER_NUM_PADS:
121 * Number of pads of the tuner.
122 */
123enum tuner_pad_index {
124 TUNER_PAD_RF_INPUT,
125 TUNER_PAD_OUTPUT,
126 TUNER_PAD_AUD_OUT,
127 TUNER_NUM_PADS
128};
129
130/**
131 * enum if_vid_dec_pad_index - video IF-PLL pad index
132 * for MEDIA_ENT_F_IF_VID_DECODER
133 *
134 * @IF_VID_DEC_PAD_IF_INPUT:
135 * video Intermediate Frequency (IF) sink pad
136 * @IF_VID_DEC_PAD_OUT:
137 * IF-PLL video output source pad. Contains the video chrominance
138 * and luminance IF signals.
139 * @IF_VID_DEC_PAD_NUM_PADS:
140 * Number of pads of the video IF-PLL.
141 */
142enum if_vid_dec_pad_index {
143 IF_VID_DEC_PAD_IF_INPUT,
144 IF_VID_DEC_PAD_OUT,
145 IF_VID_DEC_PAD_NUM_PADS
146};
147
9f3f71ef
MCC
148struct tuner {
149 /* device */
150 struct dvb_frontend fe;
151 struct i2c_client *i2c;
152 struct v4l2_subdev sd;
153 struct list_head list;
154
155 /* keep track of the current settings */
156 v4l2_std_id std;
157 unsigned int tv_freq;
158 unsigned int radio_freq;
159 unsigned int audmode;
160
cbde6898 161 enum v4l2_tuner_type mode;
9f3f71ef
MCC
162 unsigned int mode_mask; /* Combination of allowable modes */
163
cbde6898
MCC
164 bool standby; /* Standby mode */
165
9f3f71ef 166 unsigned int type; /* chip type id */
cdcd141c 167 void *config;
9f3f71ef 168 const char *name;
188d2d55 169
00a5a4bf 170#if defined(CONFIG_MEDIA_CONTROLLER)
188d2d55 171 struct media_pad pad[TUNER_NUM_PADS];
00a5a4bf 172#endif
9f3f71ef
MCC
173};
174
a2894e3f
MCC
175/*
176 * Function prototypes
177 */
178
179static void set_tv_freq(struct i2c_client *c, unsigned int freq);
180static void set_radio_freq(struct i2c_client *c, unsigned int freq);
181
9f3f71ef
MCC
182/*
183 * tuner attach/detach logic
184 */
185
0ae79d99 186/* This macro allows us to probe dynamically, avoiding static links */
ff138171 187#ifdef CONFIG_MEDIA_ATTACH
a07c8779
MK
188#define tuner_symbol_probe(FUNCTION, ARGS...) ({ \
189 int __r = -EINVAL; \
190 typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
191 if (__a) { \
192 __r = (int) __a(ARGS); \
a1355e53 193 symbol_put(FUNCTION); \
a07c8779
MK
194 } else { \
195 printk(KERN_ERR "TUNER: Unable to find " \
196 "symbol "#FUNCTION"()\n"); \
197 } \
a07c8779
MK
198 __r; \
199})
200
201static void tuner_detach(struct dvb_frontend *fe)
202{
203 if (fe->ops.tuner_ops.release) {
204 fe->ops.tuner_ops.release(fe);
205 symbol_put_addr(fe->ops.tuner_ops.release);
206 }
207 if (fe->ops.analog_ops.release) {
208 fe->ops.analog_ops.release(fe);
209 symbol_put_addr(fe->ops.analog_ops.release);
210 }
211}
212#else
213#define tuner_symbol_probe(FUNCTION, ARGS...) ({ \
214 FUNCTION(ARGS); \
215})
216
217static void tuner_detach(struct dvb_frontend *fe)
218{
219 if (fe->ops.tuner_ops.release)
220 fe->ops.tuner_ops.release(fe);
221 if (fe->ops.analog_ops.release)
222 fe->ops.analog_ops.release(fe);
223}
224#endif
225
f7f427e4 226
e8a4a9e7
HV
227static inline struct tuner *to_tuner(struct v4l2_subdev *sd)
228{
229 return container_of(sd, struct tuner, sd);
230}
231
9f3f71ef
MCC
232/*
233 * struct analog_demod_ops callbacks
234 */
1da177e4 235
c7919d52
MK
236static void fe_set_params(struct dvb_frontend *fe,
237 struct analog_parameters *params)
e18f9444 238{
4e9154b8
MK
239 struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
240 struct tuner *t = fe->analog_demod_priv;
e18f9444 241
e18f9444 242 if (NULL == fe_tuner_ops->set_analog_params) {
680d87c0 243 pr_warn("Tuner frontend module has no way to set freq\n");
e18f9444
MK
244 return;
245 }
c7919d52 246 fe_tuner_ops->set_analog_params(fe, params);
e18f9444
MK
247}
248
4e9154b8 249static void fe_standby(struct dvb_frontend *fe)
e18f9444 250{
4e9154b8 251 struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
e18f9444
MK
252
253 if (fe_tuner_ops->sleep)
4e9154b8 254 fe_tuner_ops->sleep(fe);
e18f9444
MK
255}
256
f1c9a281
MK
257static int fe_set_config(struct dvb_frontend *fe, void *priv_cfg)
258{
259 struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
260 struct tuner *t = fe->analog_demod_priv;
261
262 if (fe_tuner_ops->set_config)
263 return fe_tuner_ops->set_config(fe, priv_cfg);
264
680d87c0 265 pr_warn("Tuner frontend module has no way to set config\n");
f1c9a281
MK
266
267 return 0;
268}
269
4e9154b8 270static void tuner_status(struct dvb_frontend *fe);
1dde7a4f 271
106cf649 272static const struct analog_demod_ops tuner_analog_ops = {
c7919d52 273 .set_params = fe_set_params,
1dde7a4f 274 .standby = fe_standby,
f1c9a281 275 .set_config = fe_set_config,
1dde7a4f
MK
276 .tuner_status = tuner_status
277};
278
9f3f71ef 279/*
0eec66c0 280 * Functions to select between radio and TV and tuner probe/remove functions
9f3f71ef 281 */
1da177e4 282
a2894e3f
MCC
283/**
284 * set_type - Sets the tuner type for a given device
285 *
5618dd29 286 * @c: i2c_client descriptor
a2894e3f
MCC
287 * @type: type of the tuner (e. g. tuner number)
288 * @new_mode_mask: Indicates if tuner supports TV and/or Radio
cdcd141c 289 * @new_config: an optional parameter used by a few tuners to adjust
d28b2cf9 290 * internal parameters, like LNA mode
a2894e3f
MCC
291 * @tuner_callback: an optional function to be called when switching
292 * to analog mode
293 *
a6ab4eff 294 * This function applies the tuner config to tuner specified
a2894e3f
MCC
295 * by tun_setup structure. It contains several per-tuner initialization "magic"
296 */
f7ce3cc6 297static void set_type(struct i2c_client *c, unsigned int type,
cdcd141c 298 unsigned int new_mode_mask, void *new_config,
d7cba043 299 int (*tuner_callback) (void *dev, int component, int cmd, int arg))
1da177e4 300{
e8a4a9e7 301 struct tuner *t = to_tuner(i2c_get_clientdata(c));
e18f9444 302 struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
bc3e5c7f 303 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
586b0cab 304 unsigned char buffer[4];
d6eef494 305 int tune_now = 1;
1da177e4 306
f7ce3cc6 307 if (type == UNSET || type == TUNER_ABSENT) {
680d87c0 308 dprintk("tuner 0x%02x: Tuner type absent\n", c->addr);
1da177e4 309 return;
f7ce3cc6
MCC
310 }
311
80f90fba 312 t->type = type;
cdcd141c 313 t->config = new_config;
80f90fba 314 if (tuner_callback != NULL) {
680d87c0 315 dprintk("defining GPIO callback\n");
d7cba043 316 t->fe.callback = tuner_callback;
80f90fba
HH
317 }
318
b2083199 319 /* discard private data, in case set_type() was previously called */
a07c8779
MK
320 tuner_detach(&t->fe);
321 t->fe.analog_demod_priv = NULL;
be2b85a1 322
1da177e4
LT
323 switch (t->type) {
324 case TUNER_MT2032:
09fee5f8
MCC
325 if (!dvb_attach(microtune_attach,
326 &t->fe, t->i2c->adapter, t->i2c->addr))
327 goto attach_failed;
1da177e4
LT
328 break;
329 case TUNER_PHILIPS_TDA8290:
5bea1cd3 330 {
09fee5f8 331 if (!dvb_attach(tda829x_attach, &t->fe, t->i2c->adapter,
cdcd141c 332 t->i2c->addr, t->config))
09fee5f8 333 goto attach_failed;
5bea1cd3
MK
334 break;
335 }
586b0cab 336 case TUNER_TEA5767:
a07c8779
MK
337 if (!dvb_attach(tea5767_attach, &t->fe,
338 t->i2c->adapter, t->i2c->addr))
b9ef6bbb 339 goto attach_failed;
f7ce3cc6 340 t->mode_mask = T_RADIO;
586b0cab 341 break;
8573a9e6 342 case TUNER_TEA5761:
a07c8779
MK
343 if (!dvb_attach(tea5761_attach, &t->fe,
344 t->i2c->adapter, t->i2c->addr))
b9ef6bbb 345 goto attach_failed;
8573a9e6
MCC
346 t->mode_mask = T_RADIO;
347 break;
586b0cab 348 case TUNER_PHILIPS_FMD1216ME_MK3:
27b93d8a 349 case TUNER_PHILIPS_FMD1216MEX_MK3:
586b0cab
MCC
350 buffer[0] = 0x0b;
351 buffer[1] = 0xdc;
352 buffer[2] = 0x9c;
353 buffer[3] = 0x60;
f7ce3cc6 354 i2c_master_send(c, buffer, 4);
586b0cab
MCC
355 mdelay(1);
356 buffer[2] = 0x86;
357 buffer[3] = 0x54;
f7ce3cc6 358 i2c_master_send(c, buffer, 4);
a07c8779
MK
359 if (!dvb_attach(simple_tuner_attach, &t->fe,
360 t->i2c->adapter, t->i2c->addr, t->type))
b9ef6bbb 361 goto attach_failed;
586b0cab 362 break;
93df3413
HH
363 case TUNER_PHILIPS_TD1316:
364 buffer[0] = 0x0b;
365 buffer[1] = 0xdc;
366 buffer[2] = 0x86;
367 buffer[3] = 0xa4;
a07c8779
MK
368 i2c_master_send(c, buffer, 4);
369 if (!dvb_attach(simple_tuner_attach, &t->fe,
370 t->i2c->adapter, t->i2c->addr, t->type))
b9ef6bbb 371 goto attach_failed;
ac272ed7 372 break;
690c544c
MCC
373 case TUNER_XC2028:
374 {
a37b4c9b
ML
375 struct xc2028_config cfg = {
376 .i2c_adap = t->i2c->adapter,
377 .i2c_addr = t->i2c->addr,
a37b4c9b 378 };
a07c8779 379 if (!dvb_attach(xc2028_attach, &t->fe, &cfg))
b9ef6bbb 380 goto attach_failed;
d6eef494 381 tune_now = 0;
690c544c
MCC
382 break;
383 }
15396236 384 case TUNER_TDA9887:
09fee5f8
MCC
385 if (!dvb_attach(tda9887_attach,
386 &t->fe, t->i2c->adapter, t->i2c->addr))
387 goto attach_failed;
15396236 388 break;
27c685a4 389 case TUNER_XC5000:
b9ef6bbb 390 {
900f734b
MCC
391 struct xc5000_config xc5000_cfg = {
392 .i2c_address = t->i2c->addr,
393 /* if_khz will be set at dvb_attach() */
394 .if_khz = 0,
395 };
396
a07c8779 397 if (!dvb_attach(xc5000_attach,
30650961 398 &t->fe, t->i2c->adapter, &xc5000_cfg))
b9ef6bbb 399 goto attach_failed;
d6eef494 400 tune_now = 0;
27c685a4 401 break;
b9ef6bbb 402 }
f21cfaf6
MK
403 case TUNER_XC5000C:
404 {
405 struct xc5000_config xc5000c_cfg = {
406 .i2c_address = t->i2c->addr,
407 /* if_khz will be set at dvb_attach() */
408 .if_khz = 0,
6fab81df 409 .chip_id = XC5000C,
f21cfaf6
MK
410 };
411
412 if (!dvb_attach(xc5000_attach,
413 &t->fe, t->i2c->adapter, &xc5000c_cfg))
414 goto attach_failed;
415 tune_now = 0;
416 break;
417 }
93463895
MK
418 case TUNER_NXP_TDA18271:
419 {
420 struct tda18271_config cfg = {
e350d44f 421 .small_i2c = TDA18271_03_BYTE_CHUNK_INIT,
93463895
MK
422 };
423
9f3f71ef
MCC
424 if (!dvb_attach(tda18271_attach, &t->fe, t->i2c->addr,
425 t->i2c->adapter, &cfg))
426 goto attach_failed;
427 tune_now = 0;
428 break;
429 }
8d009a0c
DF
430 case TUNER_XC4000:
431 {
432 struct xc4000_config xc4000_cfg = {
433 .i2c_address = t->i2c->addr,
8edeb6eb 434 /* FIXME: the correct parameters will be set */
435 /* only when the digital dvb_attach() occurs */
436 .default_pm = 0,
437 .dvb_amplitude = 0,
438 .set_smoothedcvbs = 0,
439 .if_khz = 0
8d009a0c
DF
440 };
441 if (!dvb_attach(xc4000_attach,
442 &t->fe, t->i2c->adapter, &xc4000_cfg))
443 goto attach_failed;
444 tune_now = 0;
445 break;
446 }
9f3f71ef
MCC
447 default:
448 if (!dvb_attach(simple_tuner_attach, &t->fe,
449 t->i2c->adapter, t->i2c->addr, t->type))
450 goto attach_failed;
451
452 break;
453 }
454
455 if ((NULL == analog_ops->set_params) &&
456 (fe_tuner_ops->set_analog_params)) {
457
458 t->name = fe_tuner_ops->info.name;
459
460 t->fe.analog_demod_priv = t;
461 memcpy(analog_ops, &tuner_analog_ops,
462 sizeof(struct analog_demod_ops));
463
6f8ca0b5 464 if (fe_tuner_ops->get_rf_strength)
dfc2e12d 465 analog_ops->has_signal = fe_tuner_ops->get_rf_strength;
6f8ca0b5 466 if (fe_tuner_ops->get_afc)
a2192cf4 467 analog_ops->get_afc = fe_tuner_ops->get_afc;
106cf649 468
9f3f71ef
MCC
469 } else {
470 t->name = analog_ops->info.name;
471 }
472
daf77bd9 473#ifdef CONFIG_MEDIA_CONTROLLER
00a5a4bf 474 t->sd.entity.name = t->name;
daf77bd9 475#endif
00a5a4bf 476
680d87c0 477 dprintk("type set to %s\n", t->name);
9f3f71ef 478
cbde6898 479 t->mode_mask = new_mode_mask;
9f3f71ef
MCC
480
481 /* Some tuners require more initialization setup before use,
482 such as firmware download or device calibration.
483 trying to set a frequency here will just fail
484 FIXME: better to move set_freq to the tuner code. This is needed
485 on analog tuners for PLL to properly work
486 */
487 if (tune_now) {
488 if (V4L2_TUNER_RADIO == t->mode)
489 set_radio_freq(c, t->radio_freq);
490 else
491 set_tv_freq(c, t->tv_freq);
492 }
493
680d87c0 494 dprintk("%s %s I2C addr 0x%02x with type %d used for 0x%02x\n",
f9d32f25 495 c->adapter->name, c->dev.driver->name, c->addr << 1, type,
9f3f71ef
MCC
496 t->mode_mask);
497 return;
498
499attach_failed:
680d87c0 500 dprintk("Tuner attach for type = %d failed.\n", t->type);
9f3f71ef 501 t->type = TUNER_ABSENT;
9f3f71ef
MCC
502
503 return;
504}
505
0ae79d99
MCC
506/**
507 * tuner_s_type_addr - Sets the tuner type for a device
508 *
509 * @sd: subdev descriptor
510 * @tun_setup: type to be associated to a given tuner i2c address
511 *
a6ab4eff 512 * This function applies the tuner config to tuner specified
0ae79d99
MCC
513 * by tun_setup structure.
514 * If tuner I2C address is UNSET, then it will only set the device
515 * if the tuner supports the mode specified in the call.
516 * If the address is specified, the change will be applied only if
517 * tuner I2C address matches.
518 * The call can change the tuner number and the tuner mode.
519 */
a34ec5f3
MCC
520static int tuner_s_type_addr(struct v4l2_subdev *sd,
521 struct tuner_setup *tun_setup)
9f3f71ef 522{
a34ec5f3
MCC
523 struct tuner *t = to_tuner(sd);
524 struct i2c_client *c = v4l2_get_subdevdata(sd);
525
680d87c0 526 dprintk("Calling set_type_addr for type=%d, addr=0x%02x, mode=0x%02x, config=%p\n",
a34ec5f3
MCC
527 tun_setup->type,
528 tun_setup->addr,
529 tun_setup->mode_mask,
530 tun_setup->config);
9f3f71ef 531
7d275bf8
MCC
532 if ((t->type == UNSET && ((tun_setup->addr == ADDR_UNSET) &&
533 (t->mode_mask & tun_setup->mode_mask))) ||
534 (tun_setup->addr == c->addr)) {
cbde6898
MCC
535 set_type(c, tun_setup->type, tun_setup->mode_mask,
536 tun_setup->config, tun_setup->tuner_callback);
9f3f71ef 537 } else
680d87c0 538 dprintk("set addr discarded for type %i, mask %x. Asked to change tuner at addr 0x%02x, with mask %x\n",
9f3f71ef
MCC
539 t->type, t->mode_mask,
540 tun_setup->addr, tun_setup->mode_mask);
9f3f71ef 541
9f3f71ef
MCC
542 return 0;
543}
544
a2894e3f
MCC
545/**
546 * tuner_s_config - Sets tuner configuration
547 *
548 * @sd: subdev descriptor
549 * @cfg: tuner configuration
550 *
551 * Calls tuner set_config() private function to set some tuner-internal
552 * parameters
553 */
7d275bf8
MCC
554static int tuner_s_config(struct v4l2_subdev *sd,
555 const struct v4l2_priv_tun_config *cfg)
9f3f71ef
MCC
556{
557 struct tuner *t = to_tuner(sd);
558 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
559
560 if (t->type != cfg->tuner)
561 return 0;
562
563 if (analog_ops->set_config) {
564 analog_ops->set_config(&t->fe, cfg->priv);
565 return 0;
566 }
567
680d87c0 568 dprintk("Tuner frontend module has no way to set config\n");
9f3f71ef
MCC
569 return 0;
570}
571
a2894e3f
MCC
572/**
573 * tuner_lookup - Seek for tuner adapters
574 *
575 * @adap: i2c_adapter struct
576 * @radio: pointer to be filled if the adapter is radio
577 * @tv: pointer to be filled if the adapter is TV
578 *
579 * Search for existing radio and/or TV tuners on the given I2C adapter,
580 * discarding demod-only adapters (tda9887).
581 *
582 * Note that when this function is called from tuner_probe you can be
583 * certain no other devices will be added/deleted at the same time, I2C
584 * core protects against that.
585 */
9f3f71ef
MCC
586static void tuner_lookup(struct i2c_adapter *adap,
587 struct tuner **radio, struct tuner **tv)
588{
589 struct tuner *pos;
590
591 *radio = NULL;
592 *tv = NULL;
593
594 list_for_each_entry(pos, &tuner_list, list) {
595 int mode_mask;
596
597 if (pos->i2c->adapter != adap ||
f9d32f25 598 strcmp(pos->i2c->dev.driver->name, "tuner"))
9f3f71ef
MCC
599 continue;
600
cbde6898 601 mode_mask = pos->mode_mask;
9f3f71ef
MCC
602 if (*radio == NULL && mode_mask == T_RADIO)
603 *radio = pos;
604 /* Note: currently TDA9887 is the only demod-only
605 device. If other devices appear then we need to
606 make this test more general. */
607 else if (*tv == NULL && pos->type != TUNER_TDA9887 &&
ad020dc2 608 (pos->mode_mask & T_ANALOG_TV))
9f3f71ef
MCC
609 *tv = pos;
610 }
611}
612
a2894e3f
MCC
613/**
614 *tuner_probe - Probes the existing tuners on an I2C bus
615 *
616 * @client: i2c_client descriptor
617 * @id: not used
618 *
619 * This routine probes for tuners at the expected I2C addresses. On most
620 * cases, if a device answers to a given I2C address, it assumes that the
621 * device is a tuner. On a few cases, however, an additional logic is needed
622 * to double check if the device is really a tuner, or to identify the tuner
623 * type, like on tea5767/5761 devices.
624 *
625 * During client attach, set_type is called by adapter's attach_inform callback.
626 * set_type must then be completed by tuner_probe.
9f3f71ef
MCC
627 */
628static int tuner_probe(struct i2c_client *client,
629 const struct i2c_device_id *id)
630{
631 struct tuner *t;
632 struct tuner *radio;
633 struct tuner *tv;
00a5a4bf
MCC
634#ifdef CONFIG_MEDIA_CONTROLLER
635 int ret;
636#endif
9f3f71ef
MCC
637
638 t = kzalloc(sizeof(struct tuner), GFP_KERNEL);
639 if (NULL == t)
640 return -ENOMEM;
641 v4l2_i2c_subdev_init(&t->sd, client, &tuner_ops);
642 t->i2c = client;
643 t->name = "(tuner unset)";
644 t->type = UNSET;
645 t->audmode = V4L2_TUNER_MODE_STEREO;
22bf3deb 646 t->standby = true;
cbde6898
MCC
647 t->radio_freq = 87.5 * 16000; /* Initial freq range */
648 t->tv_freq = 400 * 16; /* Sets freq to VHF High - needed for some PLL's to properly start */
9f3f71ef
MCC
649
650 if (show_i2c) {
651 unsigned char buffer[16];
e428744a 652 int rc;
9f3f71ef
MCC
653
654 memset(buffer, 0, sizeof(buffer));
655 rc = i2c_master_recv(client, buffer, sizeof(buffer));
e428744a 656 if (rc >= 0)
680d87c0 657 pr_info("I2C RECV = %*ph\n", rc, buffer);
9f3f71ef
MCC
658 }
659
660 /* autodetection code based on the i2c addr */
661 if (!no_autodetect) {
662 switch (client->addr) {
663 case 0x10:
664 if (tuner_symbol_probe(tea5761_autodetection,
665 t->i2c->adapter,
666 t->i2c->addr) >= 0) {
667 t->type = TUNER_TEA5761;
668 t->mode_mask = T_RADIO;
9f3f71ef
MCC
669 tuner_lookup(t->i2c->adapter, &radio, &tv);
670 if (tv)
671 tv->mode_mask &= ~T_RADIO;
672
673 goto register_client;
674 }
675 kfree(t);
676 return -ENODEV;
677 case 0x42:
678 case 0x43:
679 case 0x4a:
680 case 0x4b:
681 /* If chip is not tda8290, don't register.
682 since it can be tda9887*/
683 if (tuner_symbol_probe(tda829x_probe, t->i2c->adapter,
684 t->i2c->addr) >= 0) {
680d87c0 685 dprintk("tda829x detected\n");
9f3f71ef
MCC
686 } else {
687 /* Default is being tda9887 */
688 t->type = TUNER_TDA9887;
ad020dc2 689 t->mode_mask = T_RADIO | T_ANALOG_TV;
9f3f71ef
MCC
690 goto register_client;
691 }
692 break;
693 case 0x60:
694 if (tuner_symbol_probe(tea5767_autodetection,
695 t->i2c->adapter, t->i2c->addr)
696 >= 0) {
697 t->type = TUNER_TEA5767;
698 t->mode_mask = T_RADIO;
9f3f71ef 699 /* Sets freq to FM range */
9f3f71ef
MCC
700 tuner_lookup(t->i2c->adapter, &radio, &tv);
701 if (tv)
702 tv->mode_mask &= ~T_RADIO;
703
704 goto register_client;
705 }
706 break;
707 }
93463895 708 }
b9ef6bbb 709
9f3f71ef
MCC
710 /* Initializes only the first TV tuner on this adapter. Why only the
711 first? Because there are some devices (notably the ones with TI
712 tuners) that have more than one i2c address for the *same* device.
713 Experience shows that, except for just one case, the first
714 address is the right one. The exception is a Russian tuner
715 (ACORP_Y878F). So, the desired behavior is just to enable the
716 first found TV tuner. */
717 tuner_lookup(t->i2c->adapter, &radio, &tv);
718 if (tv == NULL) {
ad020dc2 719 t->mode_mask = T_ANALOG_TV;
9f3f71ef
MCC
720 if (radio == NULL)
721 t->mode_mask |= T_RADIO;
680d87c0 722 dprintk("Setting mode_mask to 0x%02x\n", t->mode_mask);
1da177e4 723 }
f7ce3cc6 724
9f3f71ef
MCC
725 /* Should be just before return */
726register_client:
00a5a4bf 727#if defined(CONFIG_MEDIA_CONTROLLER)
00a5a4bf 728 t->sd.entity.name = t->name;
953a457e
MCC
729 /*
730 * Handle the special case where the tuner has actually
731 * two stages: the PLL to tune into a frequency and the
732 * IF-PLL demodulator (tda988x).
733 */
734 if (t->type == TUNER_TDA9887) {
735 t->pad[IF_VID_DEC_PAD_IF_INPUT].flags = MEDIA_PAD_FL_SINK;
c1a37dd5 736 t->pad[IF_VID_DEC_PAD_IF_INPUT].sig_type = PAD_SIGNAL_ANALOG;
953a457e 737 t->pad[IF_VID_DEC_PAD_OUT].flags = MEDIA_PAD_FL_SOURCE;
c1a37dd5 738 t->pad[IF_VID_DEC_PAD_OUT].sig_type = PAD_SIGNAL_ANALOG;
953a457e
MCC
739 ret = media_entity_pads_init(&t->sd.entity,
740 IF_VID_DEC_PAD_NUM_PADS,
741 &t->pad[0]);
742 t->sd.entity.function = MEDIA_ENT_F_IF_VID_DECODER;
743 } else {
744 t->pad[TUNER_PAD_RF_INPUT].flags = MEDIA_PAD_FL_SINK;
c1a37dd5 745 t->pad[TUNER_PAD_RF_INPUT].sig_type = PAD_SIGNAL_ANALOG;
953a457e 746 t->pad[TUNER_PAD_OUTPUT].flags = MEDIA_PAD_FL_SOURCE;
c1a37dd5 747 t->pad[TUNER_PAD_OUTPUT].sig_type = PAD_SIGNAL_ANALOG;
953a457e 748 t->pad[TUNER_PAD_AUD_OUT].flags = MEDIA_PAD_FL_SOURCE;
c1a37dd5 749 t->pad[TUNER_PAD_AUD_OUT].sig_type = PAD_SIGNAL_AUDIO;
953a457e
MCC
750 ret = media_entity_pads_init(&t->sd.entity, TUNER_NUM_PADS,
751 &t->pad[0]);
752 t->sd.entity.function = MEDIA_ENT_F_TUNER;
753 }
00a5a4bf 754
00a5a4bf 755 if (ret < 0) {
680d87c0 756 pr_err("failed to initialize media entity!\n");
00a5a4bf 757 kfree(t);
953a457e 758 return ret;
00a5a4bf
MCC
759 }
760#endif
9f3f71ef 761 /* Sets a default mode */
7d275bf8 762 if (t->mode_mask & T_ANALOG_TV)
9f3f71ef 763 t->mode = V4L2_TUNER_ANALOG_TV;
7d275bf8 764 else
ad020dc2 765 t->mode = V4L2_TUNER_RADIO;
9f3f71ef
MCC
766 set_type(client, t->type, t->mode_mask, t->config, t->fe.callback);
767 list_add_tail(&t->list, &tuner_list);
cbde6898 768
680d87c0 769 pr_info("Tuner %d found with type(s)%s%s.\n",
cbde6898 770 t->type,
ad020dc2
MCC
771 t->mode_mask & T_RADIO ? " Radio" : "",
772 t->mode_mask & T_ANALOG_TV ? " TV" : "");
9f3f71ef
MCC
773 return 0;
774}
e18f9444 775
a2894e3f
MCC
776/**
777 * tuner_remove - detaches a tuner
778 *
779 * @client: i2c_client descriptor
780 */
781
9f3f71ef
MCC
782static int tuner_remove(struct i2c_client *client)
783{
784 struct tuner *t = to_tuner(i2c_get_clientdata(client));
b9ef6bbb 785
9f3f71ef
MCC
786 v4l2_device_unregister_subdev(&t->sd);
787 tuner_detach(&t->fe);
788 t->fe.analog_demod_priv = NULL;
b9ef6bbb 789
9f3f71ef
MCC
790 list_del(&t->list);
791 kfree(t);
792 return 0;
1da177e4
LT
793}
794
0eec66c0
MCC
795/*
796 * Functions to switch between Radio and TV
797 *
798 * A few cards have a separate I2C tuner for radio. Those routines
799 * take care of switching between TV/Radio mode, filtering only the
800 * commands that apply to the Radio or TV tuner.
801 */
802
803/**
804 * check_mode - Verify if tuner supports the requested mode
805 * @t: a pointer to the module's internal struct_tuner
d28b2cf9 806 * @mode: mode of the tuner, as defined by &enum v4l2_tuner_type.
0eec66c0
MCC
807 *
808 * This function checks if the tuner is capable of tuning analog TV,
809 * digital TV or radio, depending on what the caller wants. If the
810 * tuner can't support that mode, it returns -EINVAL. Otherwise, it
811 * returns 0.
812 * This function is needed for boards that have a separate tuner for
813 * radio (like devices with tea5767).
d28b2cf9 814 *
a1ad5ec7
MCC
815 * NOTE: mt20xx uses V4L2_TUNER_DIGITAL_TV and calls set_tv_freq to
816 * select a TV frequency. So, t_mode = T_ANALOG_TV could actually
817 * be used to represent a Digital TV too.
0eec66c0
MCC
818 */
819static inline int check_mode(struct tuner *t, enum v4l2_tuner_type mode)
820{
a1ad5ec7
MCC
821 int t_mode;
822 if (mode == V4L2_TUNER_RADIO)
823 t_mode = T_RADIO;
824 else
825 t_mode = T_ANALOG_TV;
826
827 if ((t_mode & t->mode_mask) == 0)
0eec66c0
MCC
828 return -EINVAL;
829
830 return 0;
831}
832
833/**
4e4a31fb 834 * set_mode - Switch tuner to other mode.
0eec66c0
MCC
835 * @t: a pointer to the module's internal struct_tuner
836 * @mode: enum v4l2_type (radio or TV)
0eec66c0
MCC
837 *
838 * If tuner doesn't support the needed mode (radio or TV), prints a
839 * debug message and returns -EINVAL, changing its state to standby.
4e4a31fb 840 * Otherwise, changes the mode and returns 0.
0eec66c0 841 */
4e4a31fb 842static int set_mode(struct tuner *t, enum v4l2_tuner_type mode)
0eec66c0
MCC
843{
844 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
845
846 if (mode != t->mode) {
847 if (check_mode(t, mode) == -EINVAL) {
680d87c0 848 dprintk("Tuner doesn't support mode %d. Putting tuner to sleep\n",
0919f3a0 849 mode);
0eec66c0
MCC
850 t->standby = true;
851 if (analog_ops->standby)
852 analog_ops->standby(&t->fe);
853 return -EINVAL;
854 }
855 t->mode = mode;
680d87c0 856 dprintk("Changing to mode %d\n", mode);
0eec66c0 857 }
4e4a31fb
HV
858 return 0;
859}
860
861/**
862 * set_freq - Set the tuner to the desired frequency.
863 * @t: a pointer to the module's internal struct_tuner
864 * @freq: frequency to set (0 means to use the current frequency)
865 */
866static void set_freq(struct tuner *t, unsigned int freq)
867{
868 struct i2c_client *client = v4l2_get_subdevdata(&t->sd);
869
0eec66c0 870 if (t->mode == V4L2_TUNER_RADIO) {
4e4a31fb
HV
871 if (!freq)
872 freq = t->radio_freq;
873 set_radio_freq(client, freq);
0eec66c0 874 } else {
4e4a31fb
HV
875 if (!freq)
876 freq = t->tv_freq;
877 set_tv_freq(client, freq);
0eec66c0 878 }
0eec66c0
MCC
879}
880
f7ce3cc6 881/*
9f3f71ef
MCC
882 * Functions that are specific for TV mode
883 */
f7ce3cc6 884
a2894e3f
MCC
885/**
886 * set_tv_freq - Set tuner frequency, freq in Units of 62.5 kHz = 1/16MHz
887 *
888 * @c: i2c_client descriptor
889 * @freq: frequency
890 */
9f3f71ef 891static void set_tv_freq(struct i2c_client *c, unsigned int freq)
f7ce3cc6 892{
e8a4a9e7 893 struct tuner *t = to_tuner(i2c_get_clientdata(c));
9f3f71ef 894 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
f7ce3cc6 895
9f3f71ef
MCC
896 struct analog_parameters params = {
897 .mode = t->mode,
898 .audmode = t->audmode,
899 .std = t->std
900 };
56fc08ca 901
9f3f71ef 902 if (t->type == UNSET) {
680d87c0 903 pr_warn("tuner type not set\n");
9f3f71ef 904 return;
793cf9e6 905 }
9f3f71ef 906 if (NULL == analog_ops->set_params) {
680d87c0 907 pr_warn("Tuner has no way to set tv freq\n");
9f3f71ef 908 return;
56fc08ca 909 }
9f3f71ef 910 if (freq < tv_range[0] * 16 || freq > tv_range[1] * 16) {
680d87c0 911 dprintk("TV freq (%d.%02d) out of range (%d-%d)\n",
9f3f71ef
MCC
912 freq / 16, freq % 16 * 100 / 16, tv_range[0],
913 tv_range[1]);
914 /* V4L2 spec: if the freq is not possible then the closest
915 possible value should be selected */
916 if (freq < tv_range[0] * 16)
917 freq = tv_range[0] * 16;
918 else
919 freq = tv_range[1] * 16;
920 }
921 params.frequency = freq;
680d87c0 922 dprintk("tv freq set to %d.%02d\n",
9f3f71ef
MCC
923 freq / 16, freq % 16 * 100 / 16);
924 t->tv_freq = freq;
cbde6898 925 t->standby = false;
9f3f71ef
MCC
926
927 analog_ops->set_params(&t->fe, &params);
56fc08ca 928}
56fc08ca 929
a2894e3f
MCC
930/**
931 * tuner_fixup_std - force a given video standard variant
932 *
48783301
HV
933 * @t: tuner internal struct
934 * @std: TV standard
a2894e3f
MCC
935 *
936 * A few devices or drivers have problem to detect some standard variations.
937 * On other operational systems, the drivers generally have a per-country
938 * code, and some logic to apply per-country hacks. V4L2 API doesn't provide
939 * such hacks. Instead, it relies on a proper video standard selection from
940 * the userspace application. However, as some apps are buggy, not allowing
941 * to distinguish all video standard variations, a modprobe parameter can
942 * be used to force a video standard match.
943 */
48783301 944static v4l2_std_id tuner_fixup_std(struct tuner *t, v4l2_std_id std)
1da177e4 945{
48783301 946 if (pal[0] != '-' && (std & V4L2_STD_PAL) == V4L2_STD_PAL) {
1da177e4 947 switch (pal[0]) {
e71ced1a 948 case '6':
48783301 949 return V4L2_STD_PAL_60;
1da177e4
LT
950 case 'b':
951 case 'B':
952 case 'g':
953 case 'G':
48783301 954 return V4L2_STD_PAL_BG;
1da177e4
LT
955 case 'i':
956 case 'I':
48783301 957 return V4L2_STD_PAL_I;
1da177e4
LT
958 case 'd':
959 case 'D':
960 case 'k':
961 case 'K':
48783301 962 return V4L2_STD_PAL_DK;
f7ce3cc6
MCC
963 case 'M':
964 case 'm':
48783301 965 return V4L2_STD_PAL_M;
f7ce3cc6
MCC
966 case 'N':
967 case 'n':
48783301
HV
968 if (pal[1] == 'c' || pal[1] == 'C')
969 return V4L2_STD_PAL_Nc;
970 return V4L2_STD_PAL_N;
21d4df37 971 default:
680d87c0 972 pr_warn("pal= argument not recognised\n");
21d4df37 973 break;
1da177e4
LT
974 }
975 }
48783301 976 if (secam[0] != '-' && (std & V4L2_STD_SECAM) == V4L2_STD_SECAM) {
f7ce3cc6 977 switch (secam[0]) {
7e578191
MCC
978 case 'b':
979 case 'B':
980 case 'g':
981 case 'G':
982 case 'h':
983 case 'H':
48783301
HV
984 return V4L2_STD_SECAM_B |
985 V4L2_STD_SECAM_G |
986 V4L2_STD_SECAM_H;
f7ce3cc6
MCC
987 case 'd':
988 case 'D':
989 case 'k':
990 case 'K':
48783301 991 return V4L2_STD_SECAM_DK;
f7ce3cc6
MCC
992 case 'l':
993 case 'L':
48783301
HV
994 if ((secam[1] == 'C') || (secam[1] == 'c'))
995 return V4L2_STD_SECAM_LC;
996 return V4L2_STD_SECAM_L;
21d4df37 997 default:
680d87c0 998 pr_warn("secam= argument not recognised\n");
21d4df37 999 break;
f7ce3cc6
MCC
1000 }
1001 }
1002
48783301 1003 if (ntsc[0] != '-' && (std & V4L2_STD_NTSC) == V4L2_STD_NTSC) {
7e578191
MCC
1004 switch (ntsc[0]) {
1005 case 'm':
1006 case 'M':
48783301 1007 return V4L2_STD_NTSC_M;
7e578191
MCC
1008 case 'j':
1009 case 'J':
48783301 1010 return V4L2_STD_NTSC_M_JP;
d97a11e0
HV
1011 case 'k':
1012 case 'K':
48783301 1013 return V4L2_STD_NTSC_M_KR;
7e578191 1014 default:
680d87c0 1015 pr_info("ntsc= argument not recognised\n");
7e578191
MCC
1016 break;
1017 }
1018 }
48783301 1019 return std;
9f3f71ef
MCC
1020}
1021
1022/*
1023 * Functions that are specific for Radio mode
1024 */
1025
a2894e3f
MCC
1026/**
1027 * set_radio_freq - Set tuner frequency, freq in Units of 62.5 Hz = 1/16kHz
1028 *
1029 * @c: i2c_client descriptor
1030 * @freq: frequency
1031 */
9f3f71ef
MCC
1032static void set_radio_freq(struct i2c_client *c, unsigned int freq)
1033{
1034 struct tuner *t = to_tuner(i2c_get_clientdata(c));
1035 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1036
1037 struct analog_parameters params = {
1038 .mode = t->mode,
1039 .audmode = t->audmode,
1040 .std = t->std
1041 };
1042
1043 if (t->type == UNSET) {
680d87c0 1044 pr_warn("tuner type not set\n");
9f3f71ef
MCC
1045 return;
1046 }
1047 if (NULL == analog_ops->set_params) {
680d87c0 1048 pr_warn("tuner has no way to set radio frequency\n");
9f3f71ef
MCC
1049 return;
1050 }
1051 if (freq < radio_range[0] * 16000 || freq > radio_range[1] * 16000) {
680d87c0 1052 dprintk("radio freq (%d.%02d) out of range (%d-%d)\n",
9f3f71ef
MCC
1053 freq / 16000, freq % 16000 * 100 / 16000,
1054 radio_range[0], radio_range[1]);
1055 /* V4L2 spec: if the freq is not possible then the closest
1056 possible value should be selected */
1057 if (freq < radio_range[0] * 16000)
1058 freq = radio_range[0] * 16000;
1059 else
1060 freq = radio_range[1] * 16000;
1061 }
1062 params.frequency = freq;
680d87c0 1063 dprintk("radio freq set to %d.%02d\n",
9f3f71ef
MCC
1064 freq / 16000, freq % 16000 * 100 / 16000);
1065 t->radio_freq = freq;
cbde6898 1066 t->standby = false;
9f3f71ef
MCC
1067
1068 analog_ops->set_params(&t->fe, &params);
ba1066d2
HV
1069 /*
1070 * The tuner driver might decide to change the audmode if it only
1071 * supports stereo, so update t->audmode.
1072 */
1073 t->audmode = params.audmode;
9f3f71ef
MCC
1074}
1075
0eec66c0
MCC
1076/*
1077 * Debug function for reporting tuner status to userspace
9f3f71ef 1078 */
9f3f71ef 1079
cbde6898
MCC
1080/**
1081 * tuner_status - Dumps the current tuner status at dmesg
1082 * @fe: pointer to struct dvb_frontend
1083 *
1084 * This callback is used only for driver debug purposes, answering to
1085 * VIDIOC_LOG_STATUS. No changes should happen on this call.
1086 */
4e9154b8 1087static void tuner_status(struct dvb_frontend *fe)
7e578191 1088{
4e9154b8 1089 struct tuner *t = fe->analog_demod_priv;
7e578191 1090 unsigned long freq, freq_fraction;
a07c8779
MK
1091 struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
1092 struct analog_demod_ops *analog_ops = &fe->ops.analog_ops;
7e578191
MCC
1093 const char *p;
1094
1095 switch (t->mode) {
7d275bf8
MCC
1096 case V4L2_TUNER_RADIO:
1097 p = "radio";
1098 break;
a1ad5ec7 1099 case V4L2_TUNER_DIGITAL_TV: /* Used by mt20xx */
7d275bf8
MCC
1100 p = "digital TV";
1101 break;
1102 case V4L2_TUNER_ANALOG_TV:
1103 default:
1104 p = "analog TV";
1105 break;
7e578191
MCC
1106 }
1107 if (t->mode == V4L2_TUNER_RADIO) {
27487d44
HV
1108 freq = t->radio_freq / 16000;
1109 freq_fraction = (t->radio_freq % 16000) * 100 / 16000;
7e578191 1110 } else {
27487d44
HV
1111 freq = t->tv_freq / 16;
1112 freq_fraction = (t->tv_freq % 16) * 100 / 16;
7e578191 1113 }
680d87c0 1114 pr_info("Tuner mode: %s%s\n", p,
cbde6898 1115 t->standby ? " on standby mode" : "");
680d87c0
MCC
1116 pr_info("Frequency: %lu.%02lu MHz\n", freq, freq_fraction);
1117 pr_info("Standard: 0x%08lx\n", (unsigned long)t->std);
8a4b275f 1118 if (t->mode != V4L2_TUNER_RADIO)
7d275bf8 1119 return;
e18f9444
MK
1120 if (fe_tuner_ops->get_status) {
1121 u32 tuner_status;
1122
1123 fe_tuner_ops->get_status(&t->fe, &tuner_status);
1124 if (tuner_status & TUNER_STATUS_LOCKED)
680d87c0 1125 pr_info("Tuner is locked.\n");
e18f9444 1126 if (tuner_status & TUNER_STATUS_STEREO)
680d87c0 1127 pr_info("Stereo: yes\n");
e18f9444 1128 }
dfc2e12d
HV
1129 if (analog_ops->has_signal) {
1130 u16 signal;
1131
1132 if (!analog_ops->has_signal(fe, &signal))
680d87c0 1133 pr_info("Signal strength: %hu\n", signal);
dfc2e12d 1134 }
7e578191 1135}
8a4b275f 1136
0eec66c0
MCC
1137/*
1138 * Function to splicitly change mode to radio. Probably not needed anymore
1139 */
1140
1141static int tuner_s_radio(struct v4l2_subdev *sd)
1142{
1143 struct tuner *t = to_tuner(sd);
0eec66c0 1144
4e4a31fb
HV
1145 if (set_mode(t, V4L2_TUNER_RADIO) == 0)
1146 set_freq(t, 0);
0eec66c0
MCC
1147 return 0;
1148}
1149
1150/*
1151 * Tuner callbacks to handle userspace ioctl's
1152 */
1153
cbde6898 1154/**
3aab15af 1155 * tuner_standby - places the tuner in standby mode
cbde6898 1156 * @sd: pointer to struct v4l2_subdev
cbde6898 1157 */
3aab15af 1158static int tuner_standby(struct v4l2_subdev *sd)
e8a4a9e7
HV
1159{
1160 struct tuner *t = to_tuner(sd);
bc3e5c7f 1161 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1da177e4 1162
680d87c0 1163 dprintk("Putting tuner to sleep\n");
cbde6898 1164 t->standby = true;
e8a4a9e7
HV
1165 if (analog_ops->standby)
1166 analog_ops->standby(&t->fe);
1167 return 0;
1168}
5e453dc7 1169
e8a4a9e7
HV
1170static int tuner_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
1171{
1172 struct tuner *t = to_tuner(sd);
f7ce3cc6 1173
4e4a31fb 1174 if (set_mode(t, V4L2_TUNER_ANALOG_TV))
e8a4a9e7 1175 return 0;
f7ce3cc6 1176
48783301
HV
1177 t->std = tuner_fixup_std(t, std);
1178 if (t->std != std)
680d87c0 1179 dprintk("Fixup standard %llx to %llx\n", std, t->std);
4e4a31fb 1180 set_freq(t, 0);
e8a4a9e7
HV
1181 return 0;
1182}
f7ce3cc6 1183
b530a447 1184static int tuner_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *f)
e8a4a9e7
HV
1185{
1186 struct tuner *t = to_tuner(sd);
8a4b275f 1187
4e4a31fb
HV
1188 if (set_mode(t, f->type) == 0)
1189 set_freq(t, f->frequency);
e8a4a9e7
HV
1190 return 0;
1191}
f7ce3cc6 1192
338e9e1a
HV
1193/**
1194 * tuner_g_frequency - Get the tuned frequency for the tuner
1195 * @sd: pointer to struct v4l2_subdev
1196 * @f: pointer to struct v4l2_frequency
1197 *
1198 * At return, the structure f will be filled with tuner frequency
1199 * if the tuner matches the f->type.
1200 * Note: f->type should be initialized before calling it.
1201 * This is done by either video_ioctl2 or by the bridge driver.
1202 */
e8a4a9e7
HV
1203static int tuner_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f)
1204{
1205 struct tuner *t = to_tuner(sd);
1206 struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
f7ce3cc6 1207
cbde6898 1208 if (check_mode(t, f->type) == -EINVAL)
e8a4a9e7 1209 return 0;
5ad339a2 1210 if (f->type == t->mode && fe_tuner_ops->get_frequency && !t->standby) {
e8a4a9e7
HV
1211 u32 abs_freq;
1212
1213 fe_tuner_ops->get_frequency(&t->fe, &abs_freq);
1214 f->frequency = (V4L2_TUNER_RADIO == t->mode) ?
75b697f7
JL
1215 DIV_ROUND_CLOSEST(abs_freq * 2, 125) :
1216 DIV_ROUND_CLOSEST(abs_freq, 62500);
cbde6898 1217 } else {
5ad339a2 1218 f->frequency = (V4L2_TUNER_RADIO == f->type) ?
cbde6898 1219 t->radio_freq : t->tv_freq;
e8a4a9e7 1220 }
e8a4a9e7
HV
1221 return 0;
1222}
f7ce3cc6 1223
338e9e1a
HV
1224/**
1225 * tuner_g_tuner - Fill in tuner information
1226 * @sd: pointer to struct v4l2_subdev
1227 * @vt: pointer to struct v4l2_tuner
1228 *
1229 * At return, the structure vt will be filled with tuner information
1230 * if the tuner matches vt->type.
1231 * Note: vt->type should be initialized before calling it.
1232 * This is done by either video_ioctl2 or by the bridge driver.
1233 */
e8a4a9e7
HV
1234static int tuner_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
1235{
1236 struct tuner *t = to_tuner(sd);
1237 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1238 struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
1239
cbde6898 1240 if (check_mode(t, vt->type) == -EINVAL)
e8a4a9e7 1241 return 0;
5ad339a2 1242 if (vt->type == t->mode && analog_ops->get_afc)
a2192cf4 1243 analog_ops->get_afc(&t->fe, &vt->afc);
dfc2e12d
HV
1244 if (vt->type == t->mode && analog_ops->has_signal) {
1245 u16 signal = (u16)vt->signal;
1246
1247 if (!analog_ops->has_signal(&t->fe, &signal))
1248 vt->signal = signal;
1249 }
c44ff8fa 1250 if (vt->type != V4L2_TUNER_RADIO) {
e8a4a9e7 1251 vt->capability |= V4L2_TUNER_CAP_NORM;
e8a4a9e7
HV
1252 vt->rangelow = tv_range[0] * 16;
1253 vt->rangehigh = tv_range[1] * 16;
1254 return 0;
1255 }
1256
1257 /* radio mode */
5ad339a2
HV
1258 if (vt->type == t->mode) {
1259 vt->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
1260 if (fe_tuner_ops->get_status) {
1261 u32 tuner_status;
1262
1263 fe_tuner_ops->get_status(&t->fe, &tuner_status);
1264 vt->rxsubchans =
1265 (tuner_status & TUNER_STATUS_STEREO) ?
1266 V4L2_TUNER_SUB_STEREO :
1267 V4L2_TUNER_SUB_MONO;
1268 }
5ad339a2 1269 vt->audmode = t->audmode;
1da177e4 1270 }
cbde6898 1271 vt->capability |= V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
e8a4a9e7
HV
1272 vt->rangelow = radio_range[0] * 16000;
1273 vt->rangehigh = radio_range[1] * 16000;
cbde6898 1274
e8a4a9e7
HV
1275 return 0;
1276}
1277
338e9e1a
HV
1278/**
1279 * tuner_s_tuner - Set the tuner's audio mode
1280 * @sd: pointer to struct v4l2_subdev
1281 * @vt: pointer to struct v4l2_tuner
1282 *
1283 * Sets the audio mode if the tuner matches vt->type.
1284 * Note: vt->type should be initialized before calling it.
1285 * This is done by either video_ioctl2 or by the bridge driver.
1286 */
2f73c7c5 1287static int tuner_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner *vt)
e8a4a9e7
HV
1288{
1289 struct tuner *t = to_tuner(sd);
e8a4a9e7 1290
4e4a31fb 1291 if (set_mode(t, vt->type))
e8a4a9e7
HV
1292 return 0;
1293
ba1066d2 1294 if (t->mode == V4L2_TUNER_RADIO) {
cbde6898 1295 t->audmode = vt->audmode;
ba1066d2
HV
1296 /*
1297 * For radio audmode can only be mono or stereo. Map any
1298 * other values to stereo. The actual tuner driver that is
1299 * called in set_radio_freq can decide to limit the audmode to
1300 * mono if only mono is supported.
1301 */
1302 if (t->audmode != V4L2_TUNER_MODE_MONO &&
1303 t->audmode != V4L2_TUNER_MODE_STEREO)
1304 t->audmode = V4L2_TUNER_MODE_STEREO;
1305 }
4e4a31fb 1306 set_freq(t, 0);
cbde6898 1307
e8a4a9e7
HV
1308 return 0;
1309}
1310
1311static int tuner_log_status(struct v4l2_subdev *sd)
1312{
1313 struct tuner *t = to_tuner(sd);
1314 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1da177e4 1315
e8a4a9e7
HV
1316 if (analog_ops->tuner_status)
1317 analog_ops->tuner_status(&t->fe);
1da177e4
LT
1318 return 0;
1319}
1320
5cbd28df
MB
1321#ifdef CONFIG_PM_SLEEP
1322static int tuner_suspend(struct device *dev)
1da177e4 1323{
5cbd28df 1324 struct i2c_client *c = to_i2c_client(dev);
e8a4a9e7 1325 struct tuner *t = to_tuner(i2c_get_clientdata(c));
e2f63d9b 1326 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1da177e4 1327
680d87c0 1328 dprintk("suspend\n");
e2f63d9b 1329
59d7889a
MCC
1330 if (t->fe.ops.tuner_ops.suspend)
1331 t->fe.ops.tuner_ops.suspend(&t->fe);
1332 else if (!t->standby && analog_ops->standby)
e2f63d9b
MCC
1333 analog_ops->standby(&t->fe);
1334
1da177e4
LT
1335 return 0;
1336}
1337
5cbd28df 1338static int tuner_resume(struct device *dev)
1da177e4 1339{
5cbd28df 1340 struct i2c_client *c = to_i2c_client(dev);
e8a4a9e7 1341 struct tuner *t = to_tuner(i2c_get_clientdata(c));
1da177e4 1342
680d87c0 1343 dprintk("resume\n");
e2f63d9b 1344
59d7889a
MCC
1345 if (t->fe.ops.tuner_ops.resume)
1346 t->fe.ops.tuner_ops.resume(&t->fe);
1347 else if (!t->standby)
9bf0ef06 1348 if (set_mode(t, t->mode) == 0)
4e4a31fb 1349 set_freq(t, 0);
e2f63d9b 1350
1da177e4
LT
1351 return 0;
1352}
5cbd28df 1353#endif
1da177e4 1354
75b4c260
HV
1355static int tuner_command(struct i2c_client *client, unsigned cmd, void *arg)
1356{
1357 struct v4l2_subdev *sd = i2c_get_clientdata(client);
1358
1359 /* TUNER_SET_CONFIG is still called by tuner-simple.c, so we have
1360 to handle it here.
1361 There must be a better way of doing this... */
1362 switch (cmd) {
1363 case TUNER_SET_CONFIG:
1364 return tuner_s_config(sd, arg);
1365 }
1366 return -ENOIOCTLCMD;
1367}
1368
a2894e3f
MCC
1369/*
1370 * Callback structs
1371 */
e8a4a9e7
HV
1372
1373static const struct v4l2_subdev_core_ops tuner_core_ops = {
1374 .log_status = tuner_log_status,
e8a4a9e7
HV
1375};
1376
1377static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
3aab15af 1378 .standby = tuner_standby,
e8a4a9e7
HV
1379 .s_radio = tuner_s_radio,
1380 .g_tuner = tuner_g_tuner,
1381 .s_tuner = tuner_s_tuner,
1382 .s_frequency = tuner_s_frequency,
1383 .g_frequency = tuner_g_frequency,
1384 .s_type_addr = tuner_s_type_addr,
1385 .s_config = tuner_s_config,
1386};
1387
8774bed9
LP
1388static const struct v4l2_subdev_video_ops tuner_video_ops = {
1389 .s_std = tuner_s_std,
1390};
1391
e8a4a9e7
HV
1392static const struct v4l2_subdev_ops tuner_ops = {
1393 .core = &tuner_core_ops,
1394 .tuner = &tuner_tuner_ops,
8774bed9 1395 .video = &tuner_video_ops,
e8a4a9e7
HV
1396};
1397
a2894e3f
MCC
1398/*
1399 * I2C structs and module init functions
1400 */
1da177e4 1401
5cbd28df
MB
1402static const struct dev_pm_ops tuner_pm_ops = {
1403 SET_SYSTEM_SLEEP_PM_OPS(tuner_suspend, tuner_resume)
1404};
1405
af294867
JD
1406static const struct i2c_device_id tuner_id[] = {
1407 { "tuner", }, /* autodetect */
1408 { }
1409};
1410MODULE_DEVICE_TABLE(i2c, tuner_id);
1411
02a2098a
HV
1412static struct i2c_driver tuner_driver = {
1413 .driver = {
02a2098a 1414 .name = "tuner",
5cbd28df 1415 .pm = &tuner_pm_ops,
02a2098a
HV
1416 },
1417 .probe = tuner_probe,
1418 .remove = tuner_remove,
1419 .command = tuner_command,
02a2098a 1420 .id_table = tuner_id,
1da177e4 1421};
1da177e4 1422
c6e8d86f 1423module_i2c_driver(tuner_driver);
02a2098a 1424
9f3f71ef
MCC
1425MODULE_DESCRIPTION("device driver for various TV and TV+FM radio tuners");
1426MODULE_AUTHOR("Ralph Metzler, Gerd Knorr, Gunther Mayer");
1427MODULE_LICENSE("GPL");