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