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