1706f2543Smrg#ifndef __FI1236_H__
2706f2543Smrg#define __FI1236_H__
3706f2543Smrg
4706f2543Smrg#include "xf86i2c.h"
5706f2543Smrg
6706f2543Smrg/* why someone has defined NUM someplace else is beyoung me.. */
7706f2543Smrg#undef NUM
8706f2543Smrg
9706f2543Smrgtypedef struct {
10706f2543Smrg	CARD32 fcar;           /* 16 * fcar_Mhz */
11706f2543Smrg	CARD32 min_freq;       /* 16 * min_freq_Mhz */
12706f2543Smrg	CARD32 max_freq;       /* 16 * max_freq_Mhz */
13706f2543Smrg
14706f2543Smrg	CARD32 threshold1;     /* 16 * Value_Mhz */
15706f2543Smrg	CARD32 threshold2;     /* 16 * Value_Mhz */
16706f2543Smrg
17706f2543Smrg	CARD8  band_low;
18706f2543Smrg	CARD8  band_mid;
19706f2543Smrg	CARD8  band_high;
20706f2543Smrg	CARD8  control;
21706f2543Smrg	} FI1236_parameters;
22706f2543Smrg
23706f2543Smrg
24706f2543Smrgtypedef struct {
25706f2543Smrg	/* what we want */
26706f2543Smrg	/* all frequencies are in Mhz */
27706f2543Smrg	double f_rf;	/* frequency to tune to */
28706f2543Smrg	double f_if1;   /* first intermediate frequency */
29706f2543Smrg	double f_if2;   /* second intermediate frequency */
30706f2543Smrg	double f_ref;   /* reference frequency */
31706f2543Smrg	double f_ifbw;  /* bandwidth */
32706f2543Smrg	double f_step;  /* step */
33706f2543Smrg
34706f2543Smrg	/* what we compute */
35706f2543Smrg	double f_lo1;
36706f2543Smrg	double f_lo2;
37706f2543Smrg	int LO1I;
38706f2543Smrg	int LO2I;
39706f2543Smrg	int SEL;
40706f2543Smrg	int STEP;
41706f2543Smrg	int NUM;
42706f2543Smrg	} MT2032_parameters;
43706f2543Smrg
44706f2543Smrgtypedef struct {
45706f2543Smrg	I2CDevRec  d;
46706f2543Smrg	int type;
47706f2543Smrg
48706f2543Smrg	void* afc_source;    /* The AFC source may be another chip like TDA988x */
49706f2543Smrg
50706f2543Smrg	int afc_delta;
51706f2543Smrg	CARD32 original_frequency;
52706f2543Smrg	Bool afc_timer_installed;
53706f2543Smrg	int afc_count;
54706f2543Smrg	int last_afc_hint;
55706f2543Smrg
56706f2543Smrg	double video_if;
57706f2543Smrg	FI1236_parameters parm;
58706f2543Smrg	int xogc; /* for MT2032 */
59706f2543Smrg
60706f2543Smrg	struct {
61706f2543Smrg		CARD8   div1;
62706f2543Smrg		CARD8   div2;
63706f2543Smrg		CARD8   control;
64706f2543Smrg		CARD8   band;
65706f2543Smrg		CARD8	  aux;	/* this is for MK3 tuners */
66706f2543Smrg		} tuner_data;
67706f2543Smrg	} FI1236Rec, *FI1236Ptr;
68706f2543Smrg
69706f2543Smrg#define TUNER_TYPE_FI1236              0
70706f2543Smrg#define TUNER_TYPE_FI1216              1
71706f2543Smrg#define TUNER_TYPE_TEMIC_FN5AL         2
72706f2543Smrg#define TUNER_TYPE_MT2032	       3
73706f2543Smrg#define TUNER_TYPE_FI1246              4
74706f2543Smrg#define TUNER_TYPE_FI1256              5
75706f2543Smrg#define TUNER_TYPE_FI1236W             6
76706f2543Smrg#define TUNER_TYPE_FM1216ME            7
77706f2543Smrg
78706f2543Smrg#define FI1236_ADDR(a)        ((a)->d.SlaveAddr)
79706f2543Smrg
80706f2543Smrg#define FI1236_ADDR_1	     0xC6
81706f2543Smrg#define FI1236_ADDR_2        0xC0
82706f2543Smrg
83706f2543Smrg#define TUNER_TUNED   0
84706f2543Smrg#define TUNER_JUST_BELOW 1
85706f2543Smrg#define TUNER_JUST_ABOVE -1
86706f2543Smrg#define TUNER_OFF      4
87706f2543Smrg#define TUNER_STILL_TUNING      5
88706f2543Smrg
89706f2543Smrg
90706f2543Smrgvoid FI1236_tune(FI1236Ptr f, CARD32 frequency);
91706f2543Smrg
92706f2543Smrg#define FI1236SymbolsList  \
93706f2543Smrg		"Detect_FI1236", \
94706f2543Smrg		"FI1236_set_tuner_type", \
95706f2543Smrg		"TUNER_set_frequency"
96706f2543Smrg
97706f2543Smrg#define xf86_Detect_FI1236		Detect_FI1236
98706f2543Smrgextern _X_EXPORT FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr);
99706f2543Smrg#define xf86_FI1236_set_tuner_type	FI1236_set_tuner_type
100706f2543Smrgextern _X_EXPORT void FI1236_set_tuner_type(FI1236Ptr f, int type);
101706f2543Smrg#define xf86_TUNER_set_frequency	TUNER_set_frequency
102706f2543Smrgextern _X_EXPORT void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency);
103706f2543Smrg
104706f2543Smrg#define xf86_FI1236_AFC			FI1236_AFC
105706f2543Smrgextern _X_EXPORT int FI1236_AFC(FI1236Ptr f);
106706f2543Smrg#define xf86_TUNER_get_afc_hint		TUNER_get_afc_hint
107706f2543Smrgextern _X_EXPORT int TUNER_get_afc_hint(FI1236Ptr f);
108706f2543Smrg#define xf86_fi1236_dump_status		fi1236_dump_status
109706f2543Smrgextern _X_EXPORT void fi1236_dump_status(FI1236Ptr f);
110706f2543Smrg
111706f2543Smrg#endif
112