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