/*
** Copyright (c) 2007 by Silicon Laboratories
**
** $Id: si324x.h 1832 2010-04-19 21:39:12Z cdp $
**
** Author(s): 
** laj
**
** Distributed by: 
** Silicon Laboratories, Inc
**
** This file contains proprietary information.	 
** No dissemination allowed without prior written permission from
** Silicon Laboratories, Inc.
**
*/

#ifndef SI324XH_H
#define SI324XH_H

#include "proslic.h"

/*
** Si324x DataTypes/Function Definitions 
*/

#define NUMIRQ 4


/*
** Defines structure for configuring gpio
*/
typedef struct {
	uInt8 outputEn;
	uInt8 analog;
	uInt8 direction;
	uInt8 manual;
	uInt8 polarity;
	uInt8 openDrain;
} Si324x_GPIO_Cfg;

/*
** Defines structure for configuring dc feed
*/
typedef struct {
	ramData slope_vlim;
	ramData slope_rfeed;
	ramData slope_ilim;
	ramData delta1;
	ramData delta2;
	ramData v_vlim;
	ramData v_rfeed;
	ramData v_ilim;
	ramData const_rfeed;
	ramData const_ilim;
	ramData i_vlim;
	ramData lcronhk;
	ramData lcroffhk;
	ramData lcrdbi;
	ramData longhith;
	ramData longloth;
	ramData longdbi;
	ramData lcrmask;
	ramData lcrmask_polrev;
	ramData lcrmask_state;
	ramData lcrmask_linecap;
	ramData vcm_oh;
	ramData vov_bat;
	ramData vov_gnd;
} Si324x_DCfeed_Cfg;

/*
** Defines structure for configuring general parameters
*/
typedef struct {
	ramData vbatr_expect;
	ramData coef_p_hvic;
	ramData p_th_hvic;
	ramData vbath_expect;
	uInt8	cm_clamp;
	uInt8	autoRegister;
	ramData cm_dbi;
	ramData bat_dbi;
	ramData bat_hyst;
	ramData bat_settle;
	uInt8 batselmap;
	ramData coef_p_offld;
	uInt8 offld;
	ramData p_th_offld;
	ramData vbatl_expect;
	uInt8 irqen1;
	uInt8 irqen2;
	uInt8 irqen3;
	uInt8 irqen4;
} Si324x_General_Cfg;
/*
** Defines structure for configuring pcm
*/
typedef struct {
	uInt8 pcmFormat;
	uInt8 widebandEn;
	uInt8 pcm_tri;
	uInt8 tx_edge;
	uInt8 tx_both;
	uInt8 tx_hwy;
	uInt8 rx_hwy;
	uInt8 alaw_inv;
} Si324x_PCM_Cfg;

/*
** Defines structure for configuring pulse metering
*/
typedef struct {
	ramData pm_amp_thresh;
	uInt8 pmFreq;
	uInt8 pmRampRate;
} Si324x_PulseMeter_Cfg;

/*
** Defines structure for configuring FSK generation
*/
typedef struct {
	ramData fsk01;
	ramData fsk10;
	ramData fskamp0;
	ramData fskamp1;
	ramData fskfreq0;
	ramData fskfreq1;
	uInt8 eightBit;
	uInt8 fskdepth;
} Si324x_FSK_Cfg;

/*
** Defines structure for configuring dtmf decode
*/
typedef struct {
	ramData dtmfdtf_b0_1;
	ramData dtmfdtf_b1_1;
	ramData dtmfdtf_b2_1;
	ramData dtmfdtf_a1_1;
	ramData dtmfdtf_a2_1;
	ramData dtmfdtf_b0_2;
	ramData dtmfdtf_b1_2;
	ramData dtmfdtf_b2_2;
	ramData dtmfdtf_a1_2;
	ramData dtmfdtf_a2_2;
	ramData dtmfdtf_b0_3;
	ramData dtmfdtf_b1_3;
	ramData dtmfdtf_b2_3;
	ramData dtmfdtf_a1_3;
	ramData dtmfdtf_a2_3;
} Si324x_DTMFDec_Cfg;

/*
** Defines structure for configuring impedence synthesis
*/
typedef struct {
	ramData zsynth_b0;
	ramData zsynth_b1;
	ramData zsynth_b2;
	ramData zsynth_a1;
	ramData zsynth_a2;
	uInt8 ra;
} Si324x_Zsynth_Cfg;

/*
** Defines structure for configuring hybrid
*/
typedef struct {
	ramData ecfir_c2;
	ramData ecfir_c3;
	ramData ecfir_c4;
	ramData ecfir_c5;
	ramData ecfir_c6;
	ramData ecfir_c7;
	ramData ecfir_c8;
	ramData ecfir_c9;
	ramData eciir_b0;
	ramData eciir_b1;
	ramData eciir_a1;
	ramData eciir_a2;
} Si324x_hybrid_Cfg;

/*
** Defines structure for configuring GCI CI bits
*/
typedef struct {
	uInt8 gci_ci;
} Si324x_CI_Cfg;

/*
** Defines structure for configuring modem tone detect
*/
typedef struct {
	ramData rxmodpwr;
	ramData rxpwr;
	ramData modem_gain;
	ramData txmodpwr;
	ramData txpwr;
} Si324x_modemDet_Cfg;

/*
** Defines structure for configuring audio eq
*/
typedef struct {
	ramData txaceq_c0;
	ramData txaceq_c1;
	ramData txaceq_c2;
	ramData txaceq_c3;

	ramData rxaceq_c0;
	ramData rxaceq_c1;
	ramData rxaceq_c2;
	ramData rxaceq_c3;
} Si324x_audioEQ_Cfg;

/*
** Defines structure for configuring audio gain
*/
typedef struct {
	ramData acgain;
	uInt8 mute;
} Si324x_audioGain_Cfg;

typedef struct {
	Si324x_audioEQ_Cfg audioEQ;
	Si324x_hybrid_Cfg hybrid;
    Si324x_Zsynth_Cfg zsynth;
	Si324x_audioGain_Cfg txgain;
	Si324x_audioGain_Cfg rxgain;
	ramData rxachpf_b0_1;
	ramData  rxachpf_b1_1;
	ramData  rxachpf_a1_1;
} Si324x_Impedance_Cfg;

/*
** Defines structure for configuring tone generator
*/
typedef struct {
	Oscillator_Cfg osc1;
	Oscillator_Cfg osc2;
	uInt8 omode;
} Si324x_Tone_Cfg; 

/*
** Defines structure for configuring ring generator
*/
typedef struct {
	ramData freq;
	ramData amp;
	ramData offset;
	ramData phas;
	ramData rtper;
	uInt8 talo;
	uInt8 tahi;
	uInt8 tilo;
	uInt8 tihi;
	uInt8 ringcon;
	ramData rtcount;
	ramData adap_ring_min_i;
	ramData slope_ring;
	ramData rrd_delay;
	ramData rrd_delay2;
	ramData counter_vtr_val;
	ramData rtacdb;
    ramData rtacth;
	ramData rtdcdb;
	ramData rtdcth;
	ramData vov_ring_bat;
	ramData vov_ring_gnd;
	ramData vcm_ring;
} Si324x_Ring_Cfg;



/*
** This defines names for the interrupts in the ProSLIC
*/
typedef enum {
OSC1_T1_SI324X,
OSC1_T2_SI324X,
OSC2_T1_SI324X,
OSC2_T2_SI324X,
RING_T1_SI324X,
RING_T2_SI324X,
FSKBUF_AVAIL_SI324X,
VBAT_SI324X,
RING_TRIP_SI324X,
LOOP_STAT_SI324X,
LONG_STAT_SI324X,
VOC_TRACK_SI324X,
DTMF_SI324X,
INDIRECT_SI324X,
TXMDM_SI324X,
RXMDM_SI324X,
PQ1_SI324X,
PQ2_SI324X,
PQ3_SI324X,
PQ4_SI324X,
PQ5_SI324X,
PQ6_SI324X,
RING_FAIL_SI324X,
CM_BAL_SI324X,
USER_IRQ0_SI324X,
USER_IRQ1_SI324X,
USER_IRQ2_SI324X,
USER_IRQ3_SI324X,
USER_IRQ4_SI324X,
USER_IRQ5_SI324X,
USER_IRQ6_SI324X,
USER_IRQ7_SI324X
}Si324xProslicInt;

#endif
