03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#ifndef __FI1236_H__
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __FI1236_H__
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include "xf86i2c.h"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* why someone has defined NUM someplace else is beyoung me.. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#undef NUM
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD32 fcar; /* 16 * fcar_Mhz */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD32 min_freq; /* 16 * min_freq_Mhz */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD32 max_freq; /* 16 * max_freq_Mhz */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD32 threshold1; /* 16 * Value_Mhz */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD32 threshold2; /* 16 * Value_Mhz */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 band_low;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 band_mid;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 band_high;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 control;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } FI1236_parameters;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* what we want */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* all frequencies are in Mhz */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_rf; /* frequency to tune to */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_if1; /* first intermediate frequency */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_if2; /* second intermediate frequency */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_ref; /* reference frequency */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_ifbw; /* bandwidth */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_step; /* step */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* what we compute */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_lo1;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double f_lo2;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int LO1I;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int LO2I;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int SEL;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int STEP;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int NUM;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } MT2032_parameters;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync I2CDevRec d;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int type;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync void* afc_source; /* The AFC source may be another chip like TDA988x */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int afc_delta;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD32 original_frequency;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool afc_timer_installed;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int afc_count;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int last_afc_hint;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync double video_if;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FI1236_parameters parm;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xogc; /* for MT2032 */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 div1;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 div2;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 control;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 band;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 aux; /* this is for MK3 tuners */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } tuner_data;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } FI1236Rec, *FI1236Ptr;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_FI1236 0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_FI1216 1
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_TEMIC_FN5AL 2
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_MT2032 3
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_FI1246 4
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_FI1256 5
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_FI1236W 6
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TYPE_FM1216ME 7
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FI1236_ADDR(a) ((a)->d.SlaveAddr)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FI1236_ADDR_1 0xC6
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FI1236_ADDR_2 0xC0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_TUNED 0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_JUST_BELOW 1
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_JUST_ABOVE -1
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_OFF 4
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define TUNER_STILL_TUNING 5
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncFI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncvoid FI1236_set_tuner_type(FI1236Ptr f, int type);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncvoid TUNER_set_frequency(FI1236Ptr f, CARD32 frequency);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncint FI1236_AFC(FI1236Ptr f);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncint TUNER_get_afc_hint(FI1236Ptr f);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncvoid fi1236_dump_status(FI1236Ptr f);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FI1236SymbolsList \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync "Detect_FI1236", \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync "FI1236_set_tuner_type", \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync "TUNER_set_frequency"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#ifdef XFree86LOADER
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
#define xf86_Detect_FI1236 ((FI1236Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("Detect_FI1236"))
#define xf86_FI1236_set_tuner_type ((void (*)(FI1236Ptr, int))LoaderSymbol("FI1236_set_tuner_type"))
#define xf86_TUNER_set_frequency ((void (*)(FI1236Ptr, CARD32))LoaderSymbol("TUNER_set_frequency"))
#define xf86_FI1236_AFC ((int (*)(FI1236Ptr))LoaderSymbol("FI1236_AFC"))
#define xf86_TUNER_get_afc_hint ((int (*)(FI1236Ptr))LoaderSymbol("TUNER_get_afc_hint"))
#define xf86_fi1236_dump_status ((void (*)(FI1236Ptr))LoaderSymbol("fi1236_dump_status"))
#else
#define xf86_Detect_FI1236 Detect_FI1236
#define xf86_FI1236_set_tuner_type FI1236_set_tuner_type
#define xf86_TUNER_set_frequency TUNER_set_frequency
#define xf86_FI1236_AFC FI1236_AFC
#define xf86_TUNER_get_afc_hint TUNER_get_afc_hint
#define xf86_fi1236_dump_status fi1236_dump_status
#endif
#endif