xref: /linux/include/media/tuner-types.h (revision f3d9478b2ce468c3115b02ecae7e975990697f15)
1 /*
2  * descriptions for simple tuners.
3  */
4 
5 #ifndef __TUNER_TYPES_H__
6 #define __TUNER_TYPES_H__
7 
8 enum param_type {
9 	TUNER_PARAM_TYPE_RADIO, \
10 	TUNER_PARAM_TYPE_PAL, \
11 	TUNER_PARAM_TYPE_SECAM, \
12 	TUNER_PARAM_TYPE_NTSC
13 };
14 
15 struct tuner_range {
16 	unsigned short limit;
17 	unsigned char config;
18 	unsigned char cb;
19 };
20 
21 struct tuner_params {
22 	enum param_type type;
23 	/* Many Philips based tuners have a comment like this in their
24 	 * datasheet:
25 	 *
26 	 *   For channel selection involving band switching, and to ensure
27 	 *   smooth tuning to the desired channel without causing
28 	 *   unnecessary charge pump action, it is recommended to consider
29 	 *   the difference between wanted channel frequency and the
30 	 *   current channel frequency.  Unnecessary charge pump action
31 	 *   will result in very low tuning voltage which may drive the
32 	 *   oscillator to extreme conditions.
33 	 *
34 	 * Set cb_first_if_lower_freq to 1, if this check is
35 	 * required for this tuner.
36 	 *
37 	 * I tested this for PAL by first setting the TV frequency to
38 	 * 203 MHz and then switching to 96.6 MHz FM radio. The result was
39 	 * static unless the control byte was sent first.
40 	 */
41 	unsigned int cb_first_if_lower_freq:1;
42 
43 	unsigned int count;
44 	struct tuner_range *ranges;
45 };
46 
47 struct tunertype {
48 	char *name;
49 	unsigned int count;
50 	struct tuner_params *params;
51 };
52 
53 extern struct tunertype tuners[];
54 extern unsigned const int tuner_count;
55 
56 #endif
57