/*
** Copyright (c) 2007-2009 by Silicon Laboratories
**
** $Id: si321x.h 933 2009-07-27 17:00:38Z nizajerk@SILABS.COM $
**
** Author(s): 
** laj
**
** Distributed by: 
** Silicon Laboratories, Inc
**
** This file contains proprietary information.	 
** No dissemination allowed without prior written permission from
** Silicon Laboratories, Inc.
**
*/

/*
** Si321x Function Definitions/Datatypes
*/
#ifndef SI321XH_H
#define SI321XH_H

#include "proslic.h"


#define SI321X_POWERUP_VOLT_THRESH 0x11

/*
** Defines structure for configuring dcdc converter
*/
typedef struct {
	uInt8 irqen1;
	uInt8 irqen2;
	uInt8 irqen3;
} Si321x_General_Cfg;

typedef struct {
	Oscillator_Cfg osc1;
	Oscillator_Cfg osc2;
	uInt8 omode1;
	uInt8 omode2;
} Si321x_Tone_Cfg; 


/*
** Defines structure for configuring ring generator
*/
typedef struct {
	ramData rngx;
	ramData rngy;
	ramData roff;
	ramData rco;
	uInt8 talo;
	uInt8 tahi;
	uInt8 tilo;
	uInt8 tihi;
	uInt8 ringcon;
	uInt8 rtdi;
	uInt16 nrtp;
} Si321x_Ring_Cfg;

/*
** Defines structure for configuring gpio
*/
typedef void Si321x_GPIO_Cfg;

/*
** Defines structure for configuring dc feed
*/
typedef struct {
	uInt8 ilim;
	uInt8 voc;
	uInt8 vcm;
} Si321x_DCfeed_Cfg;

/*
** Defines structure for configuring pcm
*/
typedef struct {
	uInt8 pcmf;
	uInt8 wbe;
	uInt8 tri;
} Si321x_PCM_Cfg;

/*
** Defines structure for configuring pulse metering
*/
typedef struct {
	ramData plsco;
	ramData plsx;
	ramData plsd;
	uInt16 pat;  /*Active Timer (Hi & Low byte)*/
	uInt16 pit;  /*Inactive Timer (Hi & Low byte)*/
} Si321x_PulseMeter_Cfg;


/*
** Defines structure for configuring FSK generation
*/
typedef struct {
	ramData fsk01;
	ramData fsk10;
	ramData fsk0x; 
	ramData fsk1x;	
	ramData fsk0; 
	ramData fsk1; 
} Si321x_FSK_Cfg;

/*
** Defines structure for configuring dtmf decode
*/
typedef void Si321x_DTMFDec_Cfg;

/*
** Defines structure for configuring impedence synthesis
*/
typedef struct {
	uInt8 clc;
	uInt8 tiss;
} Si321x_Zsynth_Cfg;

/*
** Defines structure for configuring hybrid
*/
typedef void Si321x_hybrid_Cfg;

/*
** Defines structure for configuring GCI CI bits
*/
typedef void Si321x_CI_Cfg;

/*
** Defines structure for configuring modem tone detect
*/
typedef void Si321x_modemDet_Cfg;

/*
** Defines structure for configuring audio eq
*/
typedef void Si321x_audioEQ_Cfg;

/*
** Defines structure for configuring audio gain
*/
typedef struct {
	uInt8 gain;
	uInt16 digGain;
} Si321x_audioGain_Cfg;

/*
** Defines structure for configuring ring trip
*/
typedef struct {
	uInt8 rtdi;
	ramData rptp;
	ramData nrtp;
} Si321x_ringTrip_Cfg;

/*
** Defines country config structure
*/
typedef struct {
	uInt16 countryCode;
	ProslicRegInit *registers;
	ProslicRAMInit *rams;
	Si321x_FSK_Cfg fsk;
	Si321x_Ring_Cfg ring;
	Si321x_ringTrip_Cfg ringtrip;
	Si321x_Zsynth_Cfg zsynth;
	Si321x_DCfeed_Cfg dcfeed;
} Si321x_country_Cfg;

/*
** This defines names for the interrupts in the ProSLIC
*/

#define OSC1_T1_SI321X 0 
#define OSC1_T2_SI321X 1
#define OSC2_T1_SI321X 2
#define OSC2_T2_SI321X 3
#define RING_T1_SI321X 4
#define RING_T2_SI321X 5
#define PM_T1_SI321X 6
#define PM_T2_SI321X 7
#define RING_TRIP_SI321X 8
#define LOOP_STAT_SI321X 9
#define PQ1_SI321X 10
#define PQ2_SI321X 11
#define PQ3_SI321X 12
#define PQ4_SI321X 13
#define PQ5_SI321X 14
#define PQ6_SI321X 15
#define DTMF_SI321X 16
#define INDIRECT_SI321X 17
#define CM_BAL_SI321X 18

/* NOTE: these match the bit values of dr09 */
typedef enum si321x_analog_gains
{
    SI321X_AG_0DB,
    SI321X_AG_NEG35DB,
    SI321X_AG_POS35DB,
    SI321X_AG_LAST 
} Si321x_AG_SETTING;

#define SI321X_MIN_LOOP_CURRENT 20
#define SI321X_MAX_LOOP_CURRENT 41
#endif
