1016a45b2Smrg#ifndef __FI1236_H__
2016a45b2Smrg#define __FI1236_H__
3016a45b2Smrg
4016a45b2Smrg#include "xf86i2c.h"
5016a45b2Smrg
6016a45b2Smrg/* why someone has defined NUM someplace else is beyoung me.. */
7016a45b2Smrg#undef NUM
8016a45b2Smrg
9016a45b2Smrgtypedef struct {
10016a45b2Smrg	CARD32 fcar;           /* 16 * fcar_Mhz */
11016a45b2Smrg	CARD32 min_freq;       /* 16 * min_freq_Mhz */
12016a45b2Smrg	CARD32 max_freq;       /* 16 * max_freq_Mhz */
13016a45b2Smrg
14016a45b2Smrg	CARD32 threshold1;     /* 16 * Value_Mhz */
15016a45b2Smrg	CARD32 threshold2;     /* 16 * Value_Mhz */
16016a45b2Smrg
17016a45b2Smrg	CARD8  band_low;
18016a45b2Smrg	CARD8  band_mid;
19016a45b2Smrg	CARD8  band_high;
20016a45b2Smrg	CARD8  control;
21016a45b2Smrg	} FI1236_parameters;
22016a45b2Smrg
23016a45b2Smrg
24016a45b2Smrgtypedef struct {
25016a45b2Smrg	/* what we want */
26016a45b2Smrg	/* all frequencies are in Mhz */
27016a45b2Smrg	double f_rf;	/* frequency to tune to */
28016a45b2Smrg	double f_if1;   /* first intermediate frequency */
29016a45b2Smrg	double f_if2;   /* second intermediate frequency */
30016a45b2Smrg	double f_ref;   /* reference frequency */
31016a45b2Smrg	double f_ifbw;  /* bandwidth */
32016a45b2Smrg	double f_step;  /* step */
33016a45b2Smrg
34016a45b2Smrg	/* what we compute */
35016a45b2Smrg	double f_lo1;
36016a45b2Smrg	double f_lo2;
37016a45b2Smrg	int LO1I;
38016a45b2Smrg	int LO2I;
39016a45b2Smrg	int SEL;
40016a45b2Smrg	int STEP;
41016a45b2Smrg	int NUM;
42016a45b2Smrg	} MT2032_parameters;
43016a45b2Smrg
44016a45b2Smrgtypedef struct {
45016a45b2Smrg	I2CDevRec  d;
46016a45b2Smrg	int type;
47016a45b2Smrg
48016a45b2Smrg	void* afc_source;    /* The AFC source may be another chip like TDA988x */
49016a45b2Smrg
50016a45b2Smrg	int afc_delta;
51016a45b2Smrg	CARD32 original_frequency;
52016a45b2Smrg	Bool afc_timer_installed;
53016a45b2Smrg	int afc_count;
54016a45b2Smrg	int last_afc_hint;
55016a45b2Smrg
56016a45b2Smrg	double video_if;
57016a45b2Smrg	FI1236_parameters parm;
58016a45b2Smrg	int xogc; /* for MT2032 */
59016a45b2Smrg
60016a45b2Smrg	struct {
61016a45b2Smrg		CARD8   div1;
62016a45b2Smrg		CARD8   div2;
63016a45b2Smrg		CARD8   control;
64016a45b2Smrg		CARD8   band;
65016a45b2Smrg		CARD8	  aux;	/* this is for MK3 tuners */
66016a45b2Smrg		} tuner_data;
67016a45b2Smrg	} FI1236Rec, *FI1236Ptr;
68016a45b2Smrg
69016a45b2Smrg#define TUNER_TYPE_FI1236              0
70016a45b2Smrg#define TUNER_TYPE_FI1216              1
71016a45b2Smrg#define TUNER_TYPE_TEMIC_FN5AL         2
72016a45b2Smrg#define TUNER_TYPE_MT2032	       3
73016a45b2Smrg#define TUNER_TYPE_FI1246              4
74016a45b2Smrg#define TUNER_TYPE_FI1256              5
75016a45b2Smrg#define TUNER_TYPE_FI1236W             6
76016a45b2Smrg#define TUNER_TYPE_FM1216ME            7
77016a45b2Smrg
78016a45b2Smrg#define FI1236_ADDR(a)        ((a)->d.SlaveAddr)
79016a45b2Smrg
80016a45b2Smrg#define FI1236_ADDR_1	     0xC6
81016a45b2Smrg#define FI1236_ADDR_2        0xC0
82016a45b2Smrg
83016a45b2Smrg#define TUNER_TUNED   0
84016a45b2Smrg#define TUNER_JUST_BELOW 1
85016a45b2Smrg#define TUNER_JUST_ABOVE -1
86016a45b2Smrg#define TUNER_OFF      4
87016a45b2Smrg#define TUNER_STILL_TUNING      5
88016a45b2Smrg
89016a45b2Smrg
90016a45b2Smrgvoid FI1236_tune(FI1236Ptr f, CARD32 frequency);
91016a45b2Smrg
92016a45b2Smrg#define FI1236SymbolsList  \
93016a45b2Smrg		"Detect_FI1236", \
94016a45b2Smrg		"FI1236_set_tuner_type", \
95016a45b2Smrg		"TUNER_set_frequency"
96016a45b2Smrg
97016a45b2Smrg#define xf86_Detect_FI1236		Detect_FI1236
98016a45b2Smrgextern _X_EXPORT FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr);
99016a45b2Smrg#define xf86_FI1236_set_tuner_type	FI1236_set_tuner_type
100016a45b2Smrgextern _X_EXPORT void FI1236_set_tuner_type(FI1236Ptr f, int type);
101016a45b2Smrg#define xf86_TUNER_set_frequency	TUNER_set_frequency
102016a45b2Smrgextern _X_EXPORT void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency);
103016a45b2Smrg
104016a45b2Smrg#define xf86_FI1236_AFC			FI1236_AFC
105016a45b2Smrgextern _X_EXPORT int FI1236_AFC(FI1236Ptr f);
106016a45b2Smrg#define xf86_TUNER_get_afc_hint		TUNER_get_afc_hint
107016a45b2Smrgextern _X_EXPORT int TUNER_get_afc_hint(FI1236Ptr f);
108016a45b2Smrg#define xf86_fi1236_dump_status		fi1236_dump_status
109016a45b2Smrgextern _X_EXPORT void fi1236_dump_status(FI1236Ptr f);
110016a45b2Smrg
111016a45b2Smrg#endif
112