summaryrefslogtreecommitdiffstats
path: root/api/TDA18291local.h
blob: 3c4f69db6a08058d2f5737b13df56d3065fe4d4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
/**
 * $Header: 
 * (C) Copyright 2001 Philips Semiconductors, All rights reserved
 *
 * This source code and any compilation or derivative thereof is the sole
 * property of Philips Corporation and is provided pursuant to a Software
 * License Agreement.  This code is the proprietary information of Philips
 * Corporation and is confidential in nature.  Its use and dissemination by
 * any party other than Philips Corporation is strictly limited by the
 * confidential information provisions of the Agreement referenced above.
 *
 * FILE NAME:    tmbsl18291local.h
 *
 * DESCRIPTION:  define the object for the TDA18291
 *
 * DOCUMENT REF: DVP Software Coding Guidelines v1.14
 *               DVP Board Support Library Architecture Specification v0.5
 *
 * NOTES:        
 */

#ifndef _TMBSL_TDA18291LOCAL_H
#define _TMBSL_TDA18291LOCAL_H

#include "type.h"


/**
 * Standard include files:
 */
/* #include "hpi_basictypes.h"
   #include "tmdlFe.h"
   #include "tmhalFEtypes.h"
   #include "dvp.h"
   #include "tmbslTuner.h" */

/**
 * Project include files:
 */

#ifdef __cplusplus
extern "C"
{
#endif

/**
 * Types and defines:
 */

#define TDA18291_BSL_COMP_NUM    1
#define TDA18291_BSL_MAJOR_VER   1
#define TDA18291_BSL_MINOR_VER   0

/* #define AF901X_CAN_TUNER            0x1
   #define AF901X_SILICON_TUNER        0x2 */


/**
 * ERROR CODES
 *
 * ++from Max
 */
#define TMBSL_ERR_TUNER_BASE    0x80000000U
#define TM_ERR_BAD_UNIT_NUMBER  0x00000001U
#define TM_ERR_NOT_INITIALIZED  0x00000002U
#define TM_ERR_BAD_PARAMETER    0x00000003U
#define TM_ERR_NOT_SUPPORTED    0x00000004U
#define TM_ERR_IIC_ERR          0x00000005U

typedef enum _tmPowerState_t
{
    tmPowerOn = 1,
    tmPowerStandby,
    tmPowerSuspend,
    tmPowerOff
} tmPowerState_t;




/* Invalid unit id */
#define TMBSL_ERR_TUNER_BAD_UNIT_NUMBER \
(TMBSL_ERR_TUNER_BASE + TM_ERR_BAD_UNIT_NUMBER)

/* Component is not initialized */
#define TMBSL_ERR_TUNER_NOT_INITIALIZED \
(TMBSL_ERR_TUNER_BASE+ TM_ERR_NOT_INITIALIZED)

/* Invalid input parameter */
#define TMBSL_ERR_TUNER_BAD_PARAMETER \
(TMBSL_ERR_TUNER_BASE + TM_ERR_BAD_PARAMETER)

/* Function is not supported */
#define TMBSL_ERR_TUNER_NOT_SUPPORTED \
(TMBSL_ERR_TUNER_BASE + TM_ERR_NOT_SUPPORTED)

/* Function is not supported */
#define TMBSL_ERR_IIC_ERR \
(TMBSL_ERR_TUNER_BASE + TM_ERR_IIC_ERR)

#define TDA18291_MAX_UNITS		2
#define TDA18291_NB_REGISTERS		16
#define	TDA18291_NB_AGC_RANGES	128	

/* Indexes of TDA18291 registers */
#define TDA18291_REG_H00 0x00
#define TDA18291_REG_H01 0x01
#define TDA18291_REG_H02 0x02
#define TDA18291_REG_H03 0x03
#define TDA18291_REG_H04 0x04
#define TDA18291_REG_H05 0x05
#define TDA18291_REG_H06 0x06
#define TDA18291_REG_H07 0x07
#define TDA18291_REG_H08 0x08
#define TDA18291_REG_H09 0x09
#define TDA18291_REG_H0A 0x0A
#define TDA18291_REG_H0B 0x0B
#define TDA18291_REG_H0C 0x0C
#define TDA18291_REG_H0D 0x0D
#define TDA18291_REG_H0E 0x0E
#define TDA18291_REG_H0F 0x0F

#define OM5768_BOARD_DEF			0x57680000  /* 10047 + TDA18281 */
#define CUSTOM_BOARD_DEF            0x00000000  /* custom */

#define CUTOFF_FREQ_FOR_5MHZ		0
#define CUTOFF_FREQ_FOR_6MHZ		1
#define CUTOFF_FREQ_FOR_7MHZ		2
#define CUTOFF_FREQ_FOR_8MHZ		3

typedef float   Float;

typedef unsigned long   UInt32;     /* 32 bit unsigned integer */
typedef unsigned short  UInt16;     /* 16 bit unsigned integer */
typedef unsigned char   UInt8;      /*  8 bit unsigned integer */
typedef UInt32          tmErrorCode_t;
typedef unsigned int    Bool_;       /* Boolean (True/False) */
typedef int             tmUnitSelect_t, *ptmUnitSelect_t; 
#define Null            0

#define TM_OK                               0U         /* Global success return status   */
#define TM_FALSE                            0
#define TM_TRUE                             1

#define True TM_TRUE
#define False TM_FALSE 

/* +++ from Max */
Bool_    SY_Read2(UInt32  uAddress,
                UInt32  uSubAddress,
                UInt32  uNbData,
                UInt32* pDataBuff
);

Bool_    SY_Write2(UInt32  uAddress,
                 UInt32  uSubAddress,
                 UInt32  uNbData,
                 UInt32* pDataBuff
);


typedef struct _tmhalFEBslSystemFunc_t
{
        Bool_    (*SY_Write)         (UInt32  uAddress,
                                     UInt32  uSubAddress,
                                     UInt32  uNbData,
                                     UInt32* pDataBuff);
        Bool_    (*SY_Read)          (UInt32  uAddress,
                                     UInt32  uSubAddress,
                                     UInt32  uNbData,
                                     UInt32* pDataBuff);
} tmhalFEBslSystemFunc_t, *ptmhalFEBslSystemFunc_t;

typedef struct _tmbslTuParam_t
{
      unsigned long             uHwAddress;
      tmhalFEBslSystemFunc_t    systemFunc;    
} tmbslTuParam_t, *ptmbslTuParam_t; 

typedef struct tmSWVersion
{
    UInt32      compatibilityNr;        /* Interface compatibility number */
    UInt32      majorVersionNr;         /* Interface major version number */
    UInt32      minorVersionNr;         /* Interface minor version number */

} tmSWVersion_t, *ptmSWVersion_t; 


#if 0

typedef enum _tmTDA18281StandardMode_t {
    tmDigital_TV_ATSC_6MHz,                 /* Digital TV ATSC 6MHz */
    tmDigital_TV_DVBT_7MHz,                 /* Digital TV DVB-T 7MHz */
    tmDigital_TV_DVBT_8MHz,                 /* Digital TV DVB-T 8MHz */
    tmAnalog_TV_MN,                         /* Analog TV M/N */
    tmAnalog_TV_B,                          /* Analog TV B */
    tmAnalog_TV_GH,                         /* Analog TV G/H */
    tmAnalog_TV_I,                          /* Analog TV I */
    tmAnalog_TV_DK,                         /* Analog TV D/K */
    tmAnalog_TV_L,                          /* Analog TV L */
    tmAnalog_TV_LL,                         /* Analog TV L' */
    tmAnalog_FM_Radio,                      /* Analog FM Radio */
    tmDigital_TV_QAM_6MHz,                  /* Digital TV QAM 6MHz */
    tmDigital_TV_QAM_8MHz,                  /* Digital TV QAM 8MHz */
    tmStandardNotSupported,                 /* Not supported standard */
} tmTDA18281StandardMode_t, *ptmTDA18281StandardMode_t;

#endif

typedef enum _tm18291cfgIndex_t {
    BOARD = 0,
    FEINIT = 100,
    GETNBOFUNIT = 200,
	AGC_BUS_ENABLE = 208,
    AGC_EXT,
	AGC_GAIN_INDEX,
	AGC_GAIN_VALUE,
	LO_XTAL_FREQ_INDEX,
	LO_XTAL_FREQ_VALUE,
	XTAL_MODE,
	ENABLE_LNA,
	CUT_OFF_IND,
    BANDWIDTH = 300,
    GETLEVEL = 301,
    SET_CUTOFF_FREQ = 302
} tm18291cfgIndex_t;


typedef struct _tm18291agcMap_t {
    UInt32	uGain;	  /* Actual value of Gain (equals  (AGC1 + AGC2 + 6.5) * 10 ) */
    UInt32	uAGC_BB;  /* Digit of 9 bits to write in reg and  */
					  /* corresponding to AGC1[2] to AGC1[0] AGC2[5] to AGC2[0] */
} tm18291agcMap_t, *ptm18291agcMap_t;

typedef struct _tm18291config_t {
    UInt32	uBoard;
    UInt32	Nb;
    UInt32	Index;
    tm18291agcMap_t Map[TDA18291_NB_AGC_RANGES];
} tm18291config_t, *ptm18291config_t;

typedef struct _tm18291I2CData_t {
	UInt32	h00;	
	UInt32	h01;	
	UInt32	h02;	
	UInt32	h03;	
	UInt32	h04;	
	UInt32	h05;	
	UInt32	h06;	
	UInt32	h07;	
	UInt32	h08;	
	UInt32	h09;	
	UInt32	h0A;	
	UInt32	h0B;	
	UInt32	h0C;	
	UInt32	h0D;	
	UInt32	h0E;
	UInt32	h0F;
} tm18291I2CData_t, *ptm18291I2CData_t;

typedef struct _tm18291UserData_t {
	UInt8	FlagI2CWrite;			/* FlagI2CWrite = 1; */
	UInt8	FlagPLLCalculateNandK;	/* FlagPLLCalculateNandK = 1; */
	UInt32	AGCBB;						
	UInt8	AGCBusEn;				/* AGCBusEn	[*] AGC control via I2C bus */		
	UInt8	AGCext;					/* AGCext	[*] AGC control via dedicated pin */
	UInt32	AGCGain;				/* AGCGain	[*] AGC gain [AGCGain = (AGCgain + 6.5) * 10] */
	UInt8	FC;						/* FC		[*] Cutt off frequency */
	UInt32	Flo_max08;						
	UInt32	Flo_max09;						
	UInt32	Flo_max10;						
	UInt32	Flo_max11;
	UInt32	Flo_max12;
	UInt32	Flo_max13;
	UInt32	Flo_max14;
	UInt32	Flo_max15;
	UInt8	h03b5;						
	UInt8	h04b3tob0;						
	UInt8	h09b7tob6;						
	UInt8	h0Ab1tob0;						
	UInt8	h0Ab7;						
	UInt8	h0Bb7tob6;						
	UInt8	h0C;						
	UInt8	h0D;						
	UInt8	h0E;						
	UInt8	h0F;						
	UInt32	LO_Frac;						
	UInt32	LO_Int;					
	UInt8	LO_Postdiv;					
	UInt8	LO_Presc;						
	UInt32	LO_VCOFreq;						
	UInt32	LO_XTALFreq;		/* 52MHz or 26 MHz or other values. See gTableXtalFreq */
	UInt8	PDIC;						
	UInt8	PDIF;						
	UInt8	PDRefBuff;						
	UInt8	PDRF;						
	UInt8	PDSYNTH;						
	UInt8	PDVCO;
	UInt8   PD_Xtout;						
	UInt8	Ref_Freq;
	UInt8	Enable_LNA;
	UInt8	CutOffIndex;
} tm18291UserData_t, *ptm18291UserData_t;


typedef struct _tmAFAInfo_t {
    Demodulator*	demodulator;
    UInt8           chip;
} tmAFAInfo_t, *ptmAFAInfo_t;

typedef struct _tm18291object_t {
    tmAFAInfo_t				    AFAInfo;
    Bool_                        init;
    UInt32                      uHwAddress;
    tmhalFEBslSystemFunc_t      systemFunc;
    tmPowerState_t              curPowerState;
    tm18291config_t           config;
    UInt32                      pTunerReg[TDA18291_NB_REGISTERS];
    UInt32                      LO_FreqProg;
    UInt32                      uTickEnd;
    tm18291UserData_t         UserData;
} tm18291object_t, *ptm18291object_t;

/**
 * Global data:
 */

static UInt32 gTableXtalFreq[] =
{ 
	52000,
	19200,
	26000,
	38400
};
static UInt8 gTableCutOffVal[] =
{ 
	3,
	2,
	1
	
};

#ifdef __cplusplus
}
#endif

#endif