1/*
2 * i2c tv tuner chip device driver
3 * core core, i.e. kernel interfaces, registering and so on
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.
15 */
16
17#include <linux/module.h>
18#include <linux/kernel.h>
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>
27#include <linux/init.h>
28#include <linux/videodev2.h>
29#include <media/tuner.h>
30#include <media/tuner-types.h>
31#include <media/v4l2-device.h>
32#include <media/v4l2-ioctl.h>
33#include "mt20xx.h"
34#include "tda8290.h"
35#include "tea5761.h"
36#include "tea5767.h"
37#include "tuner-xc2028.h"
38#include "tuner-simple.h"
39#include "tda9887.h"
40#include "xc5000.h"
41#include "tda18271.h"
42#include "xc4000.h"
43
44#define UNSET (-1U)
45
46#define PREFIX (t->i2c->dev.driver->name)
47
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
69module_param_named(debug, tuner_debug, int, 0644);
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
80static LIST_HEAD(tuner_list);
81static const struct v4l2_subdev_ops tuner_ops;
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
129	enum v4l2_tuner_type mode;
130	unsigned int        mode_mask; /* Combination of allowable modes */
131
132	bool                standby;	/* Standby mode */
133
134	unsigned int        type; /* chip type id */
135	void                *config;
136	const char          *name;
137#if defined(CONFIG_MEDIA_CONTROLLER)
138	struct media_pad	pad;
139#endif
140};
141
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
149/*
150 * tuner attach/detach logic
151 */
152
153/* This macro allows us to probe dynamically, avoiding static links */
154#ifdef CONFIG_MEDIA_ATTACH
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); \
160		symbol_put(FUNCTION); \
161	} else { \
162		printk(KERN_ERR "TUNER: Unable to find " \
163				"symbol "#FUNCTION"()\n"); \
164	} \
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
193
194static inline struct tuner *to_tuner(struct v4l2_subdev *sd)
195{
196	return container_of(sd, struct tuner, sd);
197}
198
199/*
200 * struct analog_demod_ops callbacks
201 */
202
203static void fe_set_params(struct dvb_frontend *fe,
204			  struct analog_parameters *params)
205{
206	struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
207	struct tuner *t = fe->analog_demod_priv;
208
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	}
213	fe_tuner_ops->set_analog_params(fe, params);
214}
215
216static void fe_standby(struct dvb_frontend *fe)
217{
218	struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
219
220	if (fe_tuner_ops->sleep)
221		fe_tuner_ops->sleep(fe);
222}
223
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
237static void tuner_status(struct dvb_frontend *fe);
238
239static const struct analog_demod_ops tuner_analog_ops = {
240	.set_params     = fe_set_params,
241	.standby        = fe_standby,
242	.set_config     = fe_set_config,
243	.tuner_status   = tuner_status
244};
245
246/*
247 * Functions to select between radio and TV and tuner probe/remove functions
248 */
249
250/**
251 * set_type - Sets the tuner type for a given device
252 *
253 * @c:			i2c_client descriptor
254 * @type:		type of the tuner (e. g. tuner number)
255 * @new_mode_mask:	Indicates if tuner supports TV and/or Radio
256 * @new_config:		an optional parameter used by a few tuners to adjust
257			internal parameters, like LNA mode
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 */
264static void set_type(struct i2c_client *c, unsigned int type,
265		     unsigned int new_mode_mask, void *new_config,
266		     int (*tuner_callback) (void *dev, int component, int cmd, int arg))
267{
268	struct tuner *t = to_tuner(i2c_get_clientdata(c));
269	struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
270	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
271	unsigned char buffer[4];
272	int tune_now = 1;
273
274	if (type == UNSET || type == TUNER_ABSENT) {
275		tuner_dbg("tuner 0x%02x: Tuner type absent\n", c->addr);
276		return;
277	}
278
279	t->type = type;
280	t->config = new_config;
281	if (tuner_callback != NULL) {
282		tuner_dbg("defining GPIO callback\n");
283		t->fe.callback = tuner_callback;
284	}
285
286	/* discard private data, in case set_type() was previously called */
287	tuner_detach(&t->fe);
288	t->fe.analog_demod_priv = NULL;
289
290	switch (t->type) {
291	case TUNER_MT2032:
292		if (!dvb_attach(microtune_attach,
293			   &t->fe, t->i2c->adapter, t->i2c->addr))
294			goto attach_failed;
295		break;
296	case TUNER_PHILIPS_TDA8290:
297	{
298		if (!dvb_attach(tda829x_attach, &t->fe, t->i2c->adapter,
299				t->i2c->addr, t->config))
300			goto attach_failed;
301		break;
302	}
303	case TUNER_TEA5767:
304		if (!dvb_attach(tea5767_attach, &t->fe,
305				t->i2c->adapter, t->i2c->addr))
306			goto attach_failed;
307		t->mode_mask = T_RADIO;
308		break;
309	case TUNER_TEA5761:
310		if (!dvb_attach(tea5761_attach, &t->fe,
311				t->i2c->adapter, t->i2c->addr))
312			goto attach_failed;
313		t->mode_mask = T_RADIO;
314		break;
315	case TUNER_PHILIPS_FMD1216ME_MK3:
316	case TUNER_PHILIPS_FMD1216MEX_MK3:
317		buffer[0] = 0x0b;
318		buffer[1] = 0xdc;
319		buffer[2] = 0x9c;
320		buffer[3] = 0x60;
321		i2c_master_send(c, buffer, 4);
322		mdelay(1);
323		buffer[2] = 0x86;
324		buffer[3] = 0x54;
325		i2c_master_send(c, buffer, 4);
326		if (!dvb_attach(simple_tuner_attach, &t->fe,
327				t->i2c->adapter, t->i2c->addr, t->type))
328			goto attach_failed;
329		break;
330	case TUNER_PHILIPS_TD1316:
331		buffer[0] = 0x0b;
332		buffer[1] = 0xdc;
333		buffer[2] = 0x86;
334		buffer[3] = 0xa4;
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))
338			goto attach_failed;
339		break;
340	case TUNER_XC2028:
341	{
342		struct xc2028_config cfg = {
343			.i2c_adap  = t->i2c->adapter,
344			.i2c_addr  = t->i2c->addr,
345		};
346		if (!dvb_attach(xc2028_attach, &t->fe, &cfg))
347			goto attach_failed;
348		tune_now = 0;
349		break;
350	}
351	case TUNER_TDA9887:
352		if (!dvb_attach(tda9887_attach,
353			   &t->fe, t->i2c->adapter, t->i2c->addr))
354			goto attach_failed;
355		break;
356	case TUNER_XC5000:
357	{
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
364		if (!dvb_attach(xc5000_attach,
365				&t->fe, t->i2c->adapter, &xc5000_cfg))
366			goto attach_failed;
367		tune_now = 0;
368		break;
369	}
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,
376			.chip_id  = XC5000C,
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	}
385	case TUNER_NXP_TDA18271:
386	{
387		struct tda18271_config cfg = {
388			.small_i2c = TDA18271_03_BYTE_CHUNK_INIT,
389		};
390
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	}
397	case TUNER_XC4000:
398	{
399		struct xc4000_config xc4000_cfg = {
400			.i2c_address	  = t->i2c->addr,
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
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	}
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
431		if (fe_tuner_ops->get_rf_strength)
432			analog_ops->has_signal = fe_tuner_ops->get_rf_strength;
433		if (fe_tuner_ops->get_afc)
434			analog_ops->get_afc = fe_tuner_ops->get_afc;
435
436	} else {
437		t->name = analog_ops->info.name;
438	}
439
440#ifdef CONFIG_MEDIA_CONTROLLER
441	t->sd.entity.name = t->name;
442#endif
443
444	tuner_dbg("type set to %s\n", t->name);
445
446	t->mode_mask = new_mode_mask;
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",
462		  c->adapter->name, c->dev.driver->name, c->addr << 1, type,
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;
469
470	return;
471}
472
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 */
487static int tuner_s_type_addr(struct v4l2_subdev *sd,
488			     struct tuner_setup *tun_setup)
489{
490	struct tuner *t = to_tuner(sd);
491	struct i2c_client *c = v4l2_get_subdevdata(sd);
492
493	tuner_dbg("Calling set_type_addr for type=%d, addr=0x%02x, mode=0x%02x, config=%p\n",
494			tun_setup->type,
495			tun_setup->addr,
496			tun_setup->mode_mask,
497			tun_setup->config);
498
499	if ((t->type == UNSET && ((tun_setup->addr == ADDR_UNSET) &&
500	    (t->mode_mask & tun_setup->mode_mask))) ||
501	    (tun_setup->addr == c->addr)) {
502		set_type(c, tun_setup->type, tun_setup->mode_mask,
503			 tun_setup->config, tun_setup->tuner_callback);
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);
509
510	return 0;
511}
512
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 */
522static int tuner_s_config(struct v4l2_subdev *sd,
523			  const struct v4l2_priv_tun_config *cfg)
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
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 */
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 ||
566		    strcmp(pos->i2c->dev.driver->name, "tuner"))
567			continue;
568
569		mode_mask = pos->mode_mask;
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 &&
576			 (pos->mode_mask & T_ANALOG_TV))
577			*tv = pos;
578	}
579}
580
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.
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;
602#ifdef CONFIG_MEDIA_CONTROLLER
603	int ret;
604#endif
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;
614	t->standby = true;
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 */
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;
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;
659				t->mode_mask = T_RADIO | T_ANALOG_TV;
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;
669				/* Sets freq to FM range */
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		}
678	}
679
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) {
689		t->mode_mask = T_ANALOG_TV;
690		if (radio == NULL)
691			t->mode_mask |= T_RADIO;
692		tuner_dbg("Setting mode_mask to 0x%02x\n", t->mode_mask);
693	}
694
695	/* Should be just before return */
696register_client:
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
709	/* Sets a default mode */
710	if (t->mode_mask & T_ANALOG_TV)
711		t->mode = V4L2_TUNER_ANALOG_TV;
712	else
713		t->mode = V4L2_TUNER_RADIO;
714	set_type(client, t->type, t->mode_mask, t->config, t->fe.callback);
715	list_add_tail(&t->list, &tuner_list);
716
717	tuner_info("Tuner %d found with type(s)%s%s.\n",
718		   t->type,
719		   t->mode_mask & T_RADIO ? " Radio" : "",
720		   t->mode_mask & T_ANALOG_TV ? " TV" : "");
721	return 0;
722}
723
724/**
725 * tuner_remove - detaches a tuner
726 *
727 * @client:	i2c_client descriptor
728 */
729
730static int tuner_remove(struct i2c_client *client)
731{
732	struct tuner *t = to_tuner(i2c_get_clientdata(client));
733
734	v4l2_device_unregister_subdev(&t->sd);
735	tuner_detach(&t->fe);
736	t->fe.analog_demod_priv = NULL;
737
738	list_del(&t->list);
739	kfree(t);
740	return 0;
741}
742
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).
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.
764 */
765static inline int check_mode(struct tuner *t, enum v4l2_tuner_type mode)
766{
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)
774		return -EINVAL;
775
776	return 0;
777}
778
779/**
780 * set_mode - Switch tuner to other mode.
781 * @t:		a pointer to the module's internal struct_tuner
782 * @mode:	enum v4l2_type (radio or TV)
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.
786 * Otherwise, changes the mode and returns 0.
787 */
788static int set_mode(struct tuner *t, enum v4l2_tuner_type mode)
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	}
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
816	if (t->mode == V4L2_TUNER_RADIO) {
817		if (!freq)
818			freq = t->radio_freq;
819		set_radio_freq(client, freq);
820	} else {
821		if (!freq)
822			freq = t->tv_freq;
823		set_tv_freq(client, freq);
824	}
825}
826
827/*
828 * Functions that are specific for TV mode
829 */
830
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 */
837static void set_tv_freq(struct i2c_client *c, unsigned int freq)
838{
839	struct tuner *t = to_tuner(i2c_get_clientdata(c));
840	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
841
842	struct analog_parameters params = {
843		.mode      = t->mode,
844		.audmode   = t->audmode,
845		.std       = t->std
846	};
847
848	if (t->type == UNSET) {
849		tuner_warn("tuner type not set\n");
850		return;
851	}
852	if (NULL == analog_ops->set_params) {
853		tuner_warn("Tuner has no way to set tv freq\n");
854		return;
855	}
856	if (freq < tv_range[0] * 16 || freq > tv_range[1] * 16) {
857		tuner_dbg("TV freq (%d.%02d) out of range (%d-%d)\n",
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;
871	t->standby = false;
872
873	analog_ops->set_params(&t->fe, &params);
874}
875
876/**
877 * tuner_fixup_std - force a given video standard variant
878 *
879 * @t: tuner internal struct
880 * @std:	TV standard
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 */
890static v4l2_std_id tuner_fixup_std(struct tuner *t, v4l2_std_id std)
891{
892	if (pal[0] != '-' && (std & V4L2_STD_PAL) == V4L2_STD_PAL) {
893		switch (pal[0]) {
894		case '6':
895			return V4L2_STD_PAL_60;
896		case 'b':
897		case 'B':
898		case 'g':
899		case 'G':
900			return V4L2_STD_PAL_BG;
901		case 'i':
902		case 'I':
903			return V4L2_STD_PAL_I;
904		case 'd':
905		case 'D':
906		case 'k':
907		case 'K':
908			return V4L2_STD_PAL_DK;
909		case 'M':
910		case 'm':
911			return V4L2_STD_PAL_M;
912		case 'N':
913		case 'n':
914			if (pal[1] == 'c' || pal[1] == 'C')
915				return V4L2_STD_PAL_Nc;
916			return V4L2_STD_PAL_N;
917		default:
918			tuner_warn("pal= argument not recognised\n");
919			break;
920		}
921	}
922	if (secam[0] != '-' && (std & V4L2_STD_SECAM) == V4L2_STD_SECAM) {
923		switch (secam[0]) {
924		case 'b':
925		case 'B':
926		case 'g':
927		case 'G':
928		case 'h':
929		case 'H':
930			return V4L2_STD_SECAM_B |
931			       V4L2_STD_SECAM_G |
932			       V4L2_STD_SECAM_H;
933		case 'd':
934		case 'D':
935		case 'k':
936		case 'K':
937			return V4L2_STD_SECAM_DK;
938		case 'l':
939		case 'L':
940			if ((secam[1] == 'C') || (secam[1] == 'c'))
941				return V4L2_STD_SECAM_LC;
942			return V4L2_STD_SECAM_L;
943		default:
944			tuner_warn("secam= argument not recognised\n");
945			break;
946		}
947	}
948
949	if (ntsc[0] != '-' && (std & V4L2_STD_NTSC) == V4L2_STD_NTSC) {
950		switch (ntsc[0]) {
951		case 'm':
952		case 'M':
953			return V4L2_STD_NTSC_M;
954		case 'j':
955		case 'J':
956			return V4L2_STD_NTSC_M_JP;
957		case 'k':
958		case 'K':
959			return V4L2_STD_NTSC_M_KR;
960		default:
961			tuner_info("ntsc= argument not recognised\n");
962			break;
963		}
964	}
965	return std;
966}
967
968/*
969 * Functions that are specific for Radio mode
970 */
971
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 */
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) {
990		tuner_warn("tuner type not set\n");
991		return;
992	}
993	if (NULL == analog_ops->set_params) {
994		tuner_warn("tuner has no way to set radio frequency\n");
995		return;
996	}
997	if (freq < radio_range[0] * 16000 || freq > radio_range[1] * 16000) {
998		tuner_dbg("radio freq (%d.%02d) out of range (%d-%d)\n",
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;
1012	t->standby = false;
1013
1014	analog_ops->set_params(&t->fe, &params);
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;
1020}
1021
1022/*
1023 * Debug function for reporting tuner status to userspace
1024 */
1025
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 */
1033static void tuner_status(struct dvb_frontend *fe)
1034{
1035	struct tuner *t = fe->analog_demod_priv;
1036	unsigned long freq, freq_fraction;
1037	struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
1038	struct analog_demod_ops *analog_ops = &fe->ops.analog_ops;
1039	const char *p;
1040
1041	switch (t->mode) {
1042	case V4L2_TUNER_RADIO:
1043		p = "radio";
1044		break;
1045	case V4L2_TUNER_DIGITAL_TV: /* Used by mt20xx */
1046		p = "digital TV";
1047		break;
1048	case V4L2_TUNER_ANALOG_TV:
1049	default:
1050		p = "analog TV";
1051		break;
1052	}
1053	if (t->mode == V4L2_TUNER_RADIO) {
1054		freq = t->radio_freq / 16000;
1055		freq_fraction = (t->radio_freq % 16000) * 100 / 16000;
1056	} else {
1057		freq = t->tv_freq / 16;
1058		freq_fraction = (t->tv_freq % 16) * 100 / 16;
1059	}
1060	tuner_info("Tuner mode:      %s%s\n", p,
1061		   t->standby ? " on standby mode" : "");
1062	tuner_info("Frequency:       %lu.%02lu MHz\n", freq, freq_fraction);
1063	tuner_info("Standard:        0x%08lx\n", (unsigned long)t->std);
1064	if (t->mode != V4L2_TUNER_RADIO)
1065		return;
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	}
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	}
1081}
1082
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);
1090
1091	if (set_mode(t, V4L2_TUNER_RADIO) == 0)
1092		set_freq(t, 0);
1093	return 0;
1094}
1095
1096/*
1097 * Tuner callbacks to handle userspace ioctl's
1098 */
1099
1100/**
1101 * tuner_s_power - controls the power state of the tuner
1102 * @sd: pointer to struct v4l2_subdev
1103 * @on: a zero value puts the tuner to sleep, non-zero wakes it up
1104 */
1105static int tuner_s_power(struct v4l2_subdev *sd, int on)
1106{
1107	struct tuner *t = to_tuner(sd);
1108	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1109
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		}
1115		return 0;
1116	}
1117
1118	tuner_dbg("Putting tuner to sleep\n");
1119	t->standby = true;
1120	if (analog_ops->standby)
1121		analog_ops->standby(&t->fe);
1122	return 0;
1123}
1124
1125static int tuner_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
1126{
1127	struct tuner *t = to_tuner(sd);
1128
1129	if (set_mode(t, V4L2_TUNER_ANALOG_TV))
1130		return 0;
1131
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);
1135	set_freq(t, 0);
1136	return 0;
1137}
1138
1139static int tuner_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *f)
1140{
1141	struct tuner *t = to_tuner(sd);
1142
1143	if (set_mode(t, f->type) == 0)
1144		set_freq(t, f->frequency);
1145	return 0;
1146}
1147
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 */
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;
1162
1163	if (check_mode(t, f->type) == -EINVAL)
1164		return 0;
1165	if (f->type == t->mode && fe_tuner_ops->get_frequency && !t->standby) {
1166		u32 abs_freq;
1167
1168		fe_tuner_ops->get_frequency(&t->fe, &abs_freq);
1169		f->frequency = (V4L2_TUNER_RADIO == t->mode) ?
1170			DIV_ROUND_CLOSEST(abs_freq * 2, 125) :
1171			DIV_ROUND_CLOSEST(abs_freq, 62500);
1172	} else {
1173		f->frequency = (V4L2_TUNER_RADIO == f->type) ?
1174			t->radio_freq : t->tv_freq;
1175	}
1176	return 0;
1177}
1178
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 */
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
1195	if (check_mode(t, vt->type) == -EINVAL)
1196		return 0;
1197	if (vt->type == t->mode && analog_ops->get_afc)
1198		analog_ops->get_afc(&t->fe, &vt->afc);
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	}
1205	if (vt->type != V4L2_TUNER_RADIO) {
1206		vt->capability |= V4L2_TUNER_CAP_NORM;
1207		vt->rangelow = tv_range[0] * 16;
1208		vt->rangehigh = tv_range[1] * 16;
1209		return 0;
1210	}
1211
1212	/* radio mode */
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		}
1224		vt->audmode = t->audmode;
1225	}
1226	vt->capability |= V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
1227	vt->rangelow = radio_range[0] * 16000;
1228	vt->rangehigh = radio_range[1] * 16000;
1229
1230	return 0;
1231}
1232
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 */
1242static int tuner_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner *vt)
1243{
1244	struct tuner *t = to_tuner(sd);
1245
1246	if (set_mode(t, vt->type))
1247		return 0;
1248
1249	if (t->mode == V4L2_TUNER_RADIO) {
1250		t->audmode = vt->audmode;
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	}
1261	set_freq(t, 0);
1262
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;
1270
1271	if (analog_ops->tuner_status)
1272		analog_ops->tuner_status(&t->fe);
1273	return 0;
1274}
1275
1276#ifdef CONFIG_PM_SLEEP
1277static int tuner_suspend(struct device *dev)
1278{
1279	struct i2c_client *c = to_i2c_client(dev);
1280	struct tuner *t = to_tuner(i2c_get_clientdata(c));
1281	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
1282
1283	tuner_dbg("suspend\n");
1284
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)
1288		analog_ops->standby(&t->fe);
1289
1290	return 0;
1291}
1292
1293static int tuner_resume(struct device *dev)
1294{
1295	struct i2c_client *c = to_i2c_client(dev);
1296	struct tuner *t = to_tuner(i2c_get_clientdata(c));
1297
1298	tuner_dbg("resume\n");
1299
1300	if (t->fe.ops.tuner_ops.resume)
1301		t->fe.ops.tuner_ops.resume(&t->fe);
1302	else if (!t->standby)
1303		if (set_mode(t, t->mode) == 0)
1304			set_freq(t, 0);
1305
1306	return 0;
1307}
1308#endif
1309
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
1324/*
1325 * Callback structs
1326 */
1327
1328static const struct v4l2_subdev_core_ops tuner_core_ops = {
1329	.log_status = tuner_log_status,
1330	.s_power = tuner_s_power,
1331};
1332
1333static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
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
1343static const struct v4l2_subdev_video_ops tuner_video_ops = {
1344	.s_std = tuner_s_std,
1345};
1346
1347static const struct v4l2_subdev_ops tuner_ops = {
1348	.core = &tuner_core_ops,
1349	.tuner = &tuner_tuner_ops,
1350	.video = &tuner_video_ops,
1351};
1352
1353/*
1354 * I2C structs and module init functions
1355 */
1356
1357static const struct dev_pm_ops tuner_pm_ops = {
1358	SET_SYSTEM_SLEEP_PM_OPS(tuner_suspend, tuner_resume)
1359};
1360
1361static const struct i2c_device_id tuner_id[] = {
1362	{ "tuner", }, /* autodetect */
1363	{ }
1364};
1365MODULE_DEVICE_TABLE(i2c, tuner_id);
1366
1367static struct i2c_driver tuner_driver = {
1368	.driver = {
1369		.owner	= THIS_MODULE,
1370		.name	= "tuner",
1371		.pm	= &tuner_pm_ops,
1372	},
1373	.probe		= tuner_probe,
1374	.remove		= tuner_remove,
1375	.command	= tuner_command,
1376	.id_table	= tuner_id,
1377};
1378
1379module_i2c_driver(tuner_driver);
1380
1381MODULE_DESCRIPTION("device driver for various TV and TV+FM radio tuners");
1382MODULE_AUTHOR("Ralph Metzler, Gerd Knorr, Gunther Mayer");
1383MODULE_LICENSE("GPL");
1384