patch-2.4.10 linux/drivers/telephony/ixj.c
Next file: linux/drivers/telephony/ixj.h
Previous file: linux/drivers/telephony/ixj-ver.h
Back to the patch index
Back to the overall index
- Lines: 11392
- Date:
Sun Sep 9 10:52:35 2001
- Orig file:
v2.4.9/linux/drivers/telephony/ixj.c
- Orig date:
Mon Aug 27 12:41:45 2001
diff -u --recursive --new-file v2.4.9/linux/drivers/telephony/ixj.c linux/drivers/telephony/ixj.c
@@ -1,10 +1,12 @@
/****************************************************************************
* ixj.c
*
- * Device Driver for the Internet PhoneJACK and
- * Internet LineJACK Telephony Cards.
+ * Device Driver for Quicknet Technologies, Inc.'s Telephony cards
+ * including the Internet PhoneJACK, Internet PhoneJACK Lite,
+ * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and
+ * SmartCABLE
*
- * (c) Copyright 1999-2000 Quicknet Technologies, Inc.
+ * (c) Copyright 1999-2001 Quicknet Technologies, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -18,17 +20,17 @@
* John Sellers, <jsellers@quicknet.net>
* Mike Preston, <mpreston@quicknet.net>
*
- * Fixes:
- * Marc Boucher, <marc@mbsi.ca>
- * David Huggins-Daines <dhd@cepstral.com>
- *
+ * Fixes: David Huggins-Daines, <dhd@cepstral.com>
+ * Fabio Ferrari, <fabio.ferrari@digitro.com.br>
+ * Artis Kugevics, <artis@mt.lv>
+ *
* More information about the hardware related to this driver can be found
* at our website: http://www.quicknet.net
*
* IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
- * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * TECHNOLOGIES, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
@@ -38,14 +40,215 @@
*
***************************************************************************/
-static char ixj_c_rcsid[] = "$Id: ixj.c,v 3.31 2000/04/14 19:24:47 jaugenst Exp $";
-static char ixj_c_revision[] = "$Revision: 3.31 $";
+static char ixj_c_rcsid[] = "$Id: ixj.c,v 4.7 2001/08/13 06:19:33 craigs Exp $";
+static char ixj_c_revision[] = "$Revision: 4.7 $";
-//#define PERFMON_STATS
+/*
+ * $Log: ixj.c,v $
+ * Revision 4.7 2001/08/13 06:19:33 craigs
+ * Added additional changes from Alan Cox and John Anderson for
+ * 2.2 to 2.4 cleanup and bounds checking
+ *
+ * Revision 4.6 2001/08/13 01:05:05 craigs
+ * Really fixed PHONE_QUERY_CODEC problem this time
+ *
+ * Revision 4.5 2001/08/13 00:11:03 craigs
+ * Fixed problem in handling of PHONE_QUERY_CODEC, thanks to Shane Anderson
+ *
+ * Revision 4.4 2001/08/07 07:58:12 craigs
+ * Changed back to three digit version numbers
+ * Added tagbuild target to allow automatic and easy tagging of versions
+ *
+ * Revision 4.3 2001/08/07 07:24:47 craigs
+ * Added ixj-ver.h to allow easy configuration management of driver
+ * Added display of version number in /prox/ixj
+ *
+ * Revision 4.2 2001/08/06 07:07:19 craigs
+ * Reverted IXJCTL_DSP_TYPE and IXJCTL_DSP_VERSION files to original
+ * behaviour of returning int rather than short *
+ *
+ * Revision 4.1 2001/08/05 00:17:37 craigs
+ * More changes for correct PCMCIA installation
+ * Start of changes for backward Linux compatibility
+ *
+ * Revision 4.0 2001/08/04 12:33:12 craigs
+ * New version using GNU autoconf
+ *
+ * Revision 3.105 2001/07/20 23:14:32 eokerson
+ * More work on CallerID generation when using ring cadences.
+ *
+ * Revision 3.104 2001/07/06 01:33:55 eokerson
+ * Some bugfixes from Robert Vojta <vojta@ipex.cz> and a few mods to the Makefile.
+ *
+ * Revision 3.103 2001/07/05 19:20:16 eokerson
+ * Updated HOWTO
+ * Changed mic gain to 30dB on Internet LineJACK mic/speaker port.
+ *
+ * Revision 3.102 2001/07/03 23:51:21 eokerson
+ * Un-mute mic on Internet LineJACK when in speakerphone mode.
+ *
+ * Revision 3.101 2001/07/02 19:26:56 eokerson
+ * Removed initialiazation of ixjdebug and ixj_convert_loaded so they will go in the .bss instead of the .data
+ *
+ * Revision 3.100 2001/07/02 19:18:27 eokerson
+ * Changed driver to make dynamic allocation possible. We now pass IXJ * between functions instead of array indexes.
+ * Fixed the way the POTS and PSTN ports interact during a PSTN call to allow local answering.
+ * Fixed speaker mode on Internet LineJACK.
+ *
+ * Revision 3.99 2001/05/09 14:11:16 eokerson
+ * Fixed kmalloc error in ixj_build_filter_cadence. Thanks David Chan <cat@waulogy.stanford.edu>.
+ *
+ * Revision 3.98 2001/05/08 19:55:33 eokerson
+ * Fixed POTS hookstate detection while it is connected to PSTN port.
+ *
+ * Revision 3.97 2001/05/08 00:01:04 eokerson
+ * Fixed kernel oops when sending caller ID data.
+ *
+ * Revision 3.96 2001/05/04 23:09:30 eokerson
+ * Now uses one kernel timer for each card, instead of one for the entire driver.
+ *
+ * Revision 3.95 2001/04/25 22:06:47 eokerson
+ * Fixed squawking at beginning of some G.723.1 calls.
+ *
+ * Revision 3.94 2001/04/03 23:42:00 eokerson
+ * Added linear volume ioctls
+ * Added raw filter load ioctl
+ *
+ * Revision 3.93 2001/02/27 01:00:06 eokerson
+ * Fixed blocking in CallerID.
+ * Reduced size of ixj structure for smaller driver footprint.
+ *
+ * Revision 3.92 2001/02/20 22:02:59 eokerson
+ * Fixed isapnp and pcmcia module compatibility for 2.4.x kernels.
+ * Improved PSTN ring detection.
+ * Fixed wink generation on POTS ports.
+ *
+ * Revision 3.91 2001/02/13 00:55:44 eokerson
+ * Turn AEC back on after changing frame sizes.
+ *
+ * Revision 3.90 2001/02/12 16:42:00 eokerson
+ * Added ALAW codec, thanks to Fabio Ferrari for the table based converters to make ALAW from ULAW.
+ *
+ * Revision 3.89 2001/02/12 15:41:16 eokerson
+ * Fix from Artis Kugevics - Tone gains were not being set correctly.
+ *
+ * Revision 3.88 2001/02/05 23:25:42 eokerson
+ * Fixed lockup bugs with deregister.
+ *
+ * Revision 3.87 2001/01/29 21:00:39 eokerson
+ * Fix from Fabio Ferrari <fabio.ferrari@digitro.com.br> to properly handle EAGAIN and EINTR during non-blocking write.
+ * Updated copyright date.
+ *
+ * Revision 3.86 2001/01/23 23:53:46 eokerson
+ * Fixes to G.729 compatibility.
+ *
+ * Revision 3.85 2001/01/23 21:30:36 eokerson
+ * Added verbage about cards supported.
+ * Removed commands that put the card in low power mode at some times that it should not be in low power mode.
+ *
+ * Revision 3.84 2001/01/22 23:32:10 eokerson
+ * Some bugfixes from David Huggins-Daines, <dhd@cepstral.com> and other cleanups.
+ *
+ * Revision 3.83 2001/01/19 14:51:41 eokerson
+ * Fixed ixj_WriteDSPCommand to decrement usage counter when command fails.
+ *
+ * Revision 3.82 2001/01/19 00:34:49 eokerson
+ * Added verbosity to write overlap errors.
+ *
+ * Revision 3.81 2001/01/18 23:56:54 eokerson
+ * Fixed PSTN line test functions.
+ *
+ * Revision 3.80 2001/01/18 22:29:27 eokerson
+ * Updated AEC/AGC values for different cards.
+ *
+ * Revision 3.79 2001/01/17 02:58:54 eokerson
+ * Fixed AEC reset after Caller ID.
+ * Fixed Codec lockup after Caller ID on Call Waiting when not using 30ms frames.
+ *
+ * Revision 3.78 2001/01/16 19:43:09 eokerson
+ * Added support for Linux 2.4.x kernels.
+ *
+ * Revision 3.77 2001/01/09 04:00:52 eokerson
+ * Linetest will now test the line, even if it has previously succeded.
+ *
+ * Revision 3.76 2001/01/08 19:27:00 eokerson
+ * Fixed problem with standard cable on Internet PhoneCARD.
+ *
+ * Revision 3.75 2000/12/22 16:52:14 eokerson
+ * Modified to allow hookstate detection on the POTS port when the PSTN port is selected.
+ *
+ * Revision 3.74 2000/12/08 22:41:50 eokerson
+ * Added capability for G729B.
+ *
+ * Revision 3.73 2000/12/07 23:35:16 eokerson
+ * Added capability to have different ring pattern before CallerID data.
+ * Added hookstate checks in CallerID routines to stop FSK.
+ *
+ * Revision 3.72 2000/12/06 19:31:31 eokerson
+ * Modified signal behavior to only send one signal per event.
+ *
+ * Revision 3.71 2000/12/06 03:23:08 eokerson
+ * Fixed CallerID on Call Waiting.
+ *
+ * Revision 3.70 2000/12/04 21:29:37 eokerson
+ * Added checking to Smart Cable gain functions.
+ *
+ * Revision 3.69 2000/12/04 21:05:20 eokerson
+ * Changed ixjdebug levels.
+ * Added ioctls to change gains in Internet Phone CARD Smart Cable.
+ *
+ * Revision 3.68 2000/12/04 00:17:21 craigs
+ * Changed mixer voice gain to +6dB rather than 0dB
+ *
+ * Revision 3.67 2000/11/30 21:25:51 eokerson
+ * Fixed write signal errors.
+ *
+ * Revision 3.66 2000/11/29 22:42:44 eokerson
+ * Fixed PSTN ring detect problems.
+ *
+ * Revision 3.65 2000/11/29 07:31:55 craigs
+ * Added new 425Hz filter co-efficients
+ * Added card-specific DTMF prescaler initialisation
+ *
+ * Revision 3.64 2000/11/28 14:03:32 craigs
+ * Changed certain mixer initialisations to be 0dB rather than 12dB
+ * Added additional information to /proc/ixj
+ *
+ * Revision 3.63 2000/11/28 11:38:41 craigs
+ * Added display of AEC modes in AUTO and AGC mode
+ *
+ * Revision 3.62 2000/11/28 04:05:44 eokerson
+ * Improved PSTN ring detection routine.
+ *
+ * Revision 3.61 2000/11/27 21:53:12 eokerson
+ * Fixed flash detection.
+ *
+ * Revision 3.60 2000/11/27 15:57:29 eokerson
+ * More work on G.729 load routines.
+ *
+ * Revision 3.59 2000/11/25 21:55:12 eokerson
+ * Fixed errors in G.729 load routine.
+ *
+ * Revision 3.58 2000/11/25 04:08:29 eokerson
+ * Added board locks around G.729 and TS85 load routines.
+ *
+ * Revision 3.57 2000/11/24 05:35:17 craigs
+ * Added ability to retrieve mixer values on LineJACK
+ * Added complete initialisation of all mixer values at startup
+ * Fixed spelling mistake
+ *
+ * Revision 3.56 2000/11/23 02:52:11 robertj
+ * Added cvs change log keyword.
+ * Fixed bug in capabilities list when using G.729 module.
+ *
+ */
+
+#include "ixj-ver.h"
+
+#define PERFMON_STATS
#define IXJDEBUG 0
#define MAXRINGS 5
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>
@@ -68,34 +271,128 @@
#include <asm/segment.h>
#include <asm/uaccess.h>
-#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
-#include <pcmcia/version.h>
-#include <pcmcia/cs_types.h>
-#include <pcmcia/cs.h>
-#include <pcmcia/cistpl.h>
-#include <pcmcia/ds.h>
-#endif
-
-#ifdef CONFIG_ISAPNP
#include <linux/isapnp.h>
-#endif
#include "ixj.h"
#define TYPE(dev) (MINOR(dev) >> 4)
#define NUM(dev) (MINOR(dev) & 0xf)
-static int ixjdebug = 0;
+static int ixjdebug;
static int hertz = HZ;
static int samplerate = 100;
MODULE_PARM(ixjdebug, "i");
-static IXJ* ixj[IXJMAX];
+/************************************************************************
+*
+* ixjdebug meanings are now bit mapped instead of level based
+* Values can be or'ed together to turn on multiple messages
+*
+* bit 0 (0x0001) = any failure
+* bit 1 (0x0002) = general messages
+* bit 2 (0x0004) = POTS ringing related
+* bit 3 (0x0008) = PSTN events
+* bit 4 (0x0010) = PSTN Cadence state details
+* bit 5 (0x0020) = Tone detection triggers
+* bit 6 (0x0040) = Tone detection cadence details
+* bit 7 (0x0080) = ioctl tracking
+* bit 8 (0x0100) = signal tracking
+* bit 9 (0x0200) = CallerID generation details
+*
+************************************************************************/
+
+#ifdef IXJ_DYN_ALLOC
-static struct timer_list ixj_timer;
+static IXJ *ixj[IXJMAX];
+#define get_ixj(b) ixj[(b)]
-int ixj_convert_loaded = 0;
+/*
+ * Allocate a free IXJ device
+ */
+
+static IXJ *ixj_alloc()
+{
+ for(cnt=0; cnt<IXJMAX; cnt++)
+ {
+ if(ixj[cnt] == NULL || !ixj[cnt]->DSPbase)
+ {
+ j = kmalloc(sizeof(IXJ), GFP_KERNEL);
+ if (j == NULL)
+ return NULL;
+ ixj[cnt] = j;
+ return j;
+ }
+ }
+ return NULL;
+}
+
+static void ixj_fsk_free(IXJ *j)
+{
+ if(j->fskdata != NULL) {
+ kfree(j->fskdata);
+ j->fskdata = NULL;
+ }
+}
+
+static void ixj_fsk_alloc(IXJ *j)
+{
+ if(!j->fskdata) {
+ j->fskdata = kmalloc(8000, GFP_KERNEL);
+ if (!j->fskdata) {
+ if(ixjdebug & 0x0200) {
+ printk("IXJ phone%d - allocate failed\n", j->board);
+ }
+ return;
+ } else {
+ j->fsksize = 8000;
+ if(ixjdebug & 0x0200) {
+ printk("IXJ phone%d - allocate succeded\n", j->board);
+ }
+ }
+ }
+}
+
+#else
+
+static IXJ ixj[IXJMAX];
+#define get_ixj(b) (&ixj[(b)])
+
+/*
+ * Allocate a free IXJ device
+ */
+
+static IXJ *ixj_alloc(void)
+{
+ int cnt;
+ for(cnt=0; cnt<IXJMAX; cnt++)
+ {
+ if(!ixj[cnt].DSPbase)
+ {
+ return &ixj[cnt];
+ }
+ }
+ return NULL;
+}
+
+static inline void ixj_fsk_free(IXJ *j) {;}
+
+static inline void ixj_fsk_alloc(IXJ *j)
+{
+ j->fsksize = 8000;
+}
+
+#endif
+
+#ifdef PERFMON_STATS
+#define ixj_perfmon(x) ((x)++)
+#else
+#deifne ixj_perfmon(x) do {} while(0);
+#endif
+
+static int ixj_convert_loaded;
+
+static int ixj_WriteDSPCommand(unsigned short, IXJ *j);
/************************************************************************
*
@@ -104,7 +401,7 @@
*
************************************************************************/
-static int Stub(IXJ * j, unsigned long arg)
+static int Stub(IXJ * J, unsigned long arg)
{
return 0;
}
@@ -120,8 +417,8 @@
static void ixj_read_frame(IXJ *j);
static void ixj_write_frame(IXJ *j);
-static void ixj_init_timer(void);
-static void ixj_add_timer(void);
+static void ixj_init_timer(IXJ *j);
+static void ixj_add_timer(IXJ * j);
static void ixj_timeout(unsigned long ptr);
static int read_filters(IXJ *j);
static int LineMonitor(IXJ *j);
@@ -132,12 +429,15 @@
static int ixj_record_start(IXJ *j);
static void ixj_record_stop(IXJ *j);
static void set_rec_volume(IXJ *j, int volume);
+static int get_rec_volume(IXJ *j);
+static int set_rec_codec(IXJ *j, int rate);
static void ixj_vad(IXJ *j, int arg);
static int ixj_play_start(IXJ *j);
static void ixj_play_stop(IXJ *j);
static int ixj_set_tone_on(unsigned short arg, IXJ *j);
static int ixj_set_tone_off(unsigned short, IXJ *j);
static int ixj_play_tone(IXJ *j, char tone);
+static void ixj_aec_start(IXJ *j, int level);
static int idle(IXJ *j);
static void ixj_ring_on(IXJ *j);
static void ixj_ring_off(IXJ *j);
@@ -147,6 +447,7 @@
static void ixj_dialtone(IXJ *j);
static void ixj_cpt_stop(IXJ *j);
static char daa_int_read(IXJ *j);
+static char daa_CR_read(IXJ *j, int cr);
static int daa_set_mode(IXJ *j, int mode);
static int ixj_linetest(IXJ *j);
static int ixj_daa_write(IXJ *j);
@@ -158,22 +459,24 @@
static void DAA_Coeff_Australia(IXJ *j);
static void DAA_Coeff_Japan(IXJ *j);
static int ixj_init_filter(IXJ *j, IXJ_FILTER * jf);
+static int ixj_init_filter_raw(IXJ *j, IXJ_FILTER_RAW * jfr);
static int ixj_init_tone(IXJ *j, IXJ_TONE * ti);
static int ixj_build_cadence(IXJ *j, IXJ_CADENCE * cp);
static int ixj_build_filter_cadence(IXJ *j, IXJ_FILTER_CADENCE * cp);
-// Serial Control Interface funtions
+/* Serial Control Interface funtions */
static int SCI_Control(IXJ *j, int control);
static int SCI_Prepare(IXJ *j);
static int SCI_WaitHighSCI(IXJ *j);
static int SCI_WaitLowSCI(IXJ *j);
static DWORD PCIEE_GetSerialNumber(WORD wAddress);
static int ixj_PCcontrol_wait(IXJ *j);
+static void ixj_pre_cid(IXJ *j);
static void ixj_write_cid(IXJ *j);
static void ixj_write_cid_bit(IXJ *j, int bit);
static int set_base_frame(IXJ *j, int size);
static int set_play_codec(IXJ *j, int rate);
static void set_rec_depth(IXJ *j, int depth);
-static void set_play_depth(IXJ *j, int depth);
+static int ixj_mixer(long val, IXJ *j);
/************************************************************************
CT8020/CT8021 Host Programmers Model
@@ -186,58 +489,95 @@
8-9 Hardware Status Register Read Only
A-B Hardware Control Register Read Write
C-D Host Transmit (Write) Data Buffer Access Port (buffer input)Write Only
-E-F Host Receive (Read) Data Buffer Access Port (buffer input) Read Only
+E-F Host Recieve (Read) Data Buffer Access Port (buffer input) Read Only
************************************************************************/
-extern __inline__ void ixj_read_HSR(IXJ *j)
+static inline void ixj_read_HSR(IXJ *j)
{
j->hsr.bytes.low = inb_p(j->DSPbase + 8);
j->hsr.bytes.high = inb_p(j->DSPbase + 9);
}
-extern __inline__ int IsControlReady(IXJ *j)
+static inline int IsControlReady(IXJ *j)
{
ixj_read_HSR(j);
return j->hsr.bits.controlrdy ? 1 : 0;
}
-extern __inline__ int IsPCControlReady(IXJ *j)
+static inline int IsPCControlReady(IXJ *j)
{
j->pccr1.byte = inb_p(j->XILINXbase + 3);
return j->pccr1.bits.crr ? 1 : 0;
}
-extern __inline__ int IsStatusReady(IXJ *j)
+static inline int IsStatusReady(IXJ *j)
{
ixj_read_HSR(j);
return j->hsr.bits.statusrdy ? 1 : 0;
}
-extern __inline__ int IsRxReady(IXJ *j)
+static inline int IsRxReady(IXJ *j)
{
ixj_read_HSR(j);
-#ifdef PERFMON_STATS
- ++j->rxreadycheck;
-#endif
+ ixj_perfmon(j->rxreadycheck);
return j->hsr.bits.rxrdy ? 1 : 0;
}
-extern __inline__ int IsTxReady(IXJ *j)
+static inline int IsTxReady(IXJ *j)
{
ixj_read_HSR(j);
-#ifdef PERFMON_STATS
- ++j->txreadycheck;
-#endif
+ ixj_perfmon(j->txreadycheck);
return j->hsr.bits.txrdy ? 1 : 0;
}
-extern __inline__ void set_play_volume(IXJ *j, int volume)
+static inline void set_play_volume(IXJ *j, int volume)
{
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: /dev/phone%d Setting Play Volume to 0x%4.4x\n", j->board, volume);
ixj_WriteDSPCommand(0xCF02, j);
ixj_WriteDSPCommand(volume, j);
}
-extern __inline__ void set_play_depth(IXJ *j, int depth)
+static int set_play_volume_linear(IXJ *j, int volume)
+{
+ int newvolume, dspplaymax;
+
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: /dev/phone %d Setting Linear Play Volume to 0x%4.4x\n", j->board, volume);
+ if(volume > 100 || volume < 0) {
+ return -1;
+ }
+
+ /* This should normalize the perceived volumes between the different cards caused by differences in the hardware */
+ switch (j->cardtype) {
+ case QTI_PHONEJACK:
+ dspplaymax = 0x380;
+ break;
+ case QTI_LINEJACK:
+ if(j->port == PORT_PSTN) {
+ dspplaymax = 0x48;
+ } else {
+ dspplaymax = 0x100;
+ }
+ break;
+ case QTI_PHONEJACK_LITE:
+ dspplaymax = 0x380;
+ break;
+ case QTI_PHONEJACK_PCI:
+ dspplaymax = 0x6C;
+ break;
+ case QTI_PHONECARD:
+ dspplaymax = 0x50;
+ break;
+ default:
+ return -1;
+ }
+ newvolume = (dspplaymax * volume) / 100;
+ set_play_volume(j, newvolume);
+ return 0;
+}
+
+static inline void set_play_depth(IXJ *j, int depth)
{
if (depth > 60)
depth = 60;
@@ -246,13 +586,48 @@
ixj_WriteDSPCommand(0x5280 + depth, j);
}
-extern __inline__ int get_play_volume(IXJ *j)
+static inline int get_play_volume(IXJ *j)
{
ixj_WriteDSPCommand(0xCF00, j);
return j->ssr.high << 8 | j->ssr.low;
}
-extern __inline__ BYTE SLIC_GetState(IXJ *j)
+static int get_play_volume_linear(IXJ *j)
+{
+ int volume, newvolume, dspplaymax;
+
+ /* This should normalize the perceived volumes between the different cards caused by differences in the hardware */
+ switch (j->cardtype) {
+ case QTI_PHONEJACK:
+ dspplaymax = 0x380;
+ break;
+ case QTI_LINEJACK:
+ if(j->port == PORT_PSTN) {
+ dspplaymax = 0x48;
+ } else {
+ dspplaymax = 0x100;
+ }
+ break;
+ case QTI_PHONEJACK_LITE:
+ dspplaymax = 0x380;
+ break;
+ case QTI_PHONEJACK_PCI:
+ dspplaymax = 0x6C;
+ break;
+ case QTI_PHONECARD:
+ dspplaymax = 100;
+ break;
+ default:
+ return -1;
+ }
+ volume = get_play_volume(j);
+ newvolume = (volume * 100) / dspplaymax;
+ if(newvolume > 100)
+ newvolume = 100;
+ return newvolume;
+}
+
+static inline BYTE SLIC_GetState(IXJ *j)
{
if (j->cardtype == QTI_PHONECARD) {
j->pccr1.byte = 0;
@@ -295,7 +670,7 @@
fRetVal = TRUE;
}
break;
- case PLD_SLIC_STATE_OHT: // On-hook transmit
+ case PLD_SLIC_STATE_OHT: /* On-hook transmit */
case PLD_SLIC_STATE_STANDBY:
case PLD_SLIC_STATE_ACTIVE:
@@ -307,9 +682,9 @@
j->pslic.bits.ring0 = j->pslic.bits.ring1 = 0;
fRetVal = TRUE;
break;
- case PLD_SLIC_STATE_APR: // Active polarity reversal
+ case PLD_SLIC_STATE_APR: /* Active polarity reversal */
- case PLD_SLIC_STATE_OHTPR: // OHT polarity reversal
+ case PLD_SLIC_STATE_OHTPR: /* OHT polarity reversal */
default:
fRetVal = FALSE;
@@ -321,7 +696,7 @@
ixj_PCcontrol_wait(j);
}
} else {
- // Set the C1, C2, C3 & B2EN signals.
+ /* Set the C1, C2, C3 & B2EN signals. */
switch (byState) {
case PLD_SLIC_STATE_OC:
j->pld_slicw.bits.c1 = 0;
@@ -347,7 +722,7 @@
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
fRetVal = TRUE;
break;
- case PLD_SLIC_STATE_OHT: // On-hook transmit
+ case PLD_SLIC_STATE_OHT: /* On-hook transmit */
j->pld_slicw.bits.c1 = 1;
j->pld_slicw.bits.c2 = 1;
@@ -372,7 +747,7 @@
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
fRetVal = TRUE;
break;
- case PLD_SLIC_STATE_APR: // Active polarity reversal
+ case PLD_SLIC_STATE_APR: /* Active polarity reversal */
j->pld_slicw.bits.c1 = 0;
j->pld_slicw.bits.c2 = 1;
@@ -381,7 +756,7 @@
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
fRetVal = TRUE;
break;
- case PLD_SLIC_STATE_OHTPR: // OHT polarity reversal
+ case PLD_SLIC_STATE_OHTPR: /* OHT polarity reversal */
j->pld_slicw.bits.c1 = 1;
j->pld_slicw.bits.c2 = 1;
@@ -399,22 +774,52 @@
return fRetVal;
}
-int ixj_register(int index, IXJ_REGFUNC regfunc)
+static int ixj_wink(IXJ *j)
+{
+ BYTE slicnow;
+
+ slicnow = SLIC_GetState(j);
+
+ j->pots_winkstart = jiffies;
+ SLIC_SetState(PLD_SLIC_STATE_OC, j);
+
+ while (time_before(jiffies, j->pots_winkstart + j->winktime)) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+
+ SLIC_SetState(slicnow, j);
+ return 0;
+}
+
+static int ixj_register(int index, IXJ_REGFUNC regfunc)
{
int cnt;
int retval = 0;
switch (index) {
case G729LOADER:
ixj_DownloadG729 = regfunc;
- for (cnt = 0; cnt < IXJMAX; cnt++)
- if (ixj[cnt] != NULL)
- ixj_DownloadG729(ixj[cnt], 0L);
+ for (cnt = 0; cnt < IXJMAX; cnt++) {
+ IXJ *j = get_ixj(cnt);
+ while(test_and_set_bit(cnt, (void *)&j->busyflags) != 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ ixj_DownloadG729(j, 0L);
+ clear_bit(cnt, &j->busyflags);
+ }
break;
case TS85LOADER:
ixj_DownloadTS85 = regfunc;
- for (cnt = 0; cnt < IXJMAX; cnt++)
- if (ixj[cnt] != NULL)
- ixj_DownloadTS85(ixj[cnt], 0L);
+ for (cnt = 0; cnt < IXJMAX; cnt++) {
+ IXJ *j = get_ixj(cnt);
+ while(test_and_set_bit(cnt, (void *)&j->busyflags) != 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ ixj_DownloadTS85(j, 0L);
+ clear_bit(cnt, &j->busyflags);
+ }
break;
case PRE_READ:
ixj_PreRead = regfunc;
@@ -440,7 +845,9 @@
return retval;
}
-int ixj_unregister(int index)
+EXPORT_SYMBOL(ixj_register);
+
+static int ixj_unregister(int index)
{
int retval = 0;
switch (index) {
@@ -474,17 +881,19 @@
return retval;
}
-static void ixj_init_timer(void)
+EXPORT_SYMBOL(ixj_unregister);
+
+static void ixj_init_timer(IXJ *j)
{
- init_timer(&ixj_timer);
- ixj_timer.function = ixj_timeout;
- ixj_timer.data = (int) NULL;
+ init_timer(&j->timer);
+ j->timer.function = ixj_timeout;
+ j->timer.data = (unsigned long)j;
}
-static void ixj_add_timer(void)
+static void ixj_add_timer(IXJ *j)
{
- ixj_timer.expires = jiffies + (hertz / samplerate);
- add_timer(&ixj_timer);
+ j->timer.expires = jiffies + (hertz / samplerate);
+ add_timer(&j->timer);
}
static void ixj_tone_timeout(IXJ *j)
@@ -537,268 +946,573 @@
}
}
-extern __inline__ void ixj_kill_fasync(IXJ *j, int band)
+static inline void ixj_kill_fasync(IXJ *j, IXJ_SIGEVENT event, int dir)
{
- kill_fasync(&j->async_queue, SIGIO, band);
+ if(j->ixj_signals[event]) {
+ if(ixjdebug & 0x0100)
+ printk("Sending signal for event %d\n", event);
+ /* Send apps notice of change */
+ /* see config.h for macro definition */
+ kill_fasync(&(j->async_queue), j->ixj_signals[event], dir);
+ }
}
-static void ixj_timeout(unsigned long ptr)
+static void ixj_pstn_state(IXJ *j)
{
- int board;
- unsigned long jifon;
+ int var;
+ union XOPXR0 XR0, daaint;
- for (board = 0; board < IXJMAX; board++) {
- IXJ *j = ixj[board];
+ var = 10;
- if (j == NULL)
- continue;
+ XR0.reg = j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.reg;
+ daaint.reg = 0;
+ XR0.bitreg.RMR = j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.bitreg.RMR;
- if (j->DSPbase) {
-#ifdef PERFMON_STATS
- j->timerchecks++;
-#endif
- if (j->tone_state) {
- if (!ixj_hookstate(j)) {
- ixj_cpt_stop(j);
- if (j->m_hook) {
- j->m_hook = 0;
- j->ex.bits.hookstate = 1;
- ixj_kill_fasync(j, POLL_PRI);
+ j->pld_scrr.byte = inb_p(j->XILINXbase);
+ if (j->pld_scrr.bits.daaflag) {
+ daa_int_read(j);
+ if(j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.RING) {
+ if(time_after(jiffies, j->pstn_sleeptil) && !(j->flags.pots_pstn && j->hookstate)) {
+ daaint.bitreg.RING = 1;
+ if(ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ DAA Ring Interrupt /dev/phone%d at %ld\n", j->board, jiffies);
+ }
+ } else {
+ daa_set_mode(j, SOP_PU_RESET);
+ }
+ }
+ if(j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.Caller_ID) {
+ daaint.bitreg.Caller_ID = 1;
+ j->pstn_cid_intr = 1;
+ j->pstn_cid_received = jiffies;
+ if(ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ DAA Caller_ID Interrupt /dev/phone%d at %ld\n", j->board, jiffies);
+ }
+ }
+ if(j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.Cadence) {
+ daaint.bitreg.Cadence = 1;
+ if(ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ DAA Cadence Interrupt /dev/phone%d at %ld\n", j->board, jiffies);
+ }
+ }
+ if(j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK != XR0.bitreg.VDD_OK) {
+ daaint.bitreg.VDD_OK = 1;
+ daaint.bitreg.SI_0 = j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK;
+ }
+ }
+ daa_CR_read(j, 1);
+ if(j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.bitreg.RMR != XR0.bitreg.RMR && time_after(jiffies, j->pstn_sleeptil) && !(j->flags.pots_pstn && j->hookstate)) {
+ daaint.bitreg.RMR = 1;
+ daaint.bitreg.SI_1 = j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.bitreg.RMR;
+ if(ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ DAA RMR /dev/phone%d was %s for %ld\n", j->board, XR0.bitreg.RMR?"on":"off", jiffies - j->pstn_last_rmr);
+ }
+ j->pstn_prev_rmr = j->pstn_last_rmr;
+ j->pstn_last_rmr = jiffies;
+ }
+ switch(j->daa_mode) {
+ case SOP_PU_SLEEP:
+ if (daaint.bitreg.RING) {
+ if (!j->flags.pstn_ringing) {
+ if (j->daa_mode != SOP_PU_RINGING) {
+ j->pstn_ring_int = jiffies;
+ daa_set_mode(j, SOP_PU_RINGING);
}
- continue;
}
- if (j->tone_state == 1)
- jifon = (hertz * j->tone_on_time * 25 / 100000);
- else
- jifon = (hertz * j->tone_on_time * 25 / 100000) +
- (hertz * j->tone_off_time * 25 / 100000);
- if (time_before(jiffies, j->tone_start_jif + jifon)) {
- if (j->tone_state == 1) {
- ixj_play_tone(j, j->tone_index);
- if (j->dsp.low == 0x20) {
- continue;
+ }
+ break;
+ case SOP_PU_RINGING:
+ if (daaint.bitreg.RMR) {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence a state = %d /dev/phone%d at %ld\n", j->cadence_f[4].state, j->board, jiffies);
+ }
+ if (daaint.bitreg.SI_1) { /* Rising edge of RMR */
+ j->flags.pstn_rmr = 1;
+ j->pstn_ring_start = jiffies;
+ j->pstn_ring_stop = 0;
+ j->ex.bits.pstn_ring = 0;
+ if (j->cadence_f[4].state == 0) {
+ j->cadence_f[4].state = 1;
+ j->cadence_f[4].on1min = jiffies + (long)((j->cadence_f[4].on1 * hertz * (100 - var)) / 10000);
+ j->cadence_f[4].on1dot = jiffies + (long)((j->cadence_f[4].on1 * hertz * (100)) / 10000);
+ j->cadence_f[4].on1max = jiffies + (long)((j->cadence_f[4].on1 * hertz * (100 + var)) / 10000);
+ } else if (j->cadence_f[4].state == 2) {
+ if((time_after(jiffies, j->cadence_f[4].off1min) &&
+ time_before(jiffies, j->cadence_f[4].off1max))) {
+ if (j->cadence_f[4].on2) {
+ j->cadence_f[4].state = 3;
+ j->cadence_f[4].on2min = jiffies + (long)((j->cadence_f[4].on2 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[4].on2dot = jiffies + (long)((j->cadence_f[4].on2 * (hertz * (100)) / 10000));
+ j->cadence_f[4].on2max = jiffies + (long)((j->cadence_f[4].on2 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[4].state = 7;
+ }
+ } else {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence fail state = %d /dev/phone%d at %ld should be %d\n",
+ j->cadence_f[4].state, j->board, jiffies - j->pstn_prev_rmr,
+ j->cadence_f[4].off1);
+ }
+ j->cadence_f[4].state = 0;
}
- } else {
- ixj_play_tone(j, 0);
- if (j->dsp.low == 0x20) {
- continue;
+ } else if (j->cadence_f[4].state == 4) {
+ if((time_after(jiffies, j->cadence_f[4].off2min) &&
+ time_before(jiffies, j->cadence_f[4].off2max))) {
+ if (j->cadence_f[4].on3) {
+ j->cadence_f[4].state = 5;
+ j->cadence_f[4].on3min = jiffies + (long)((j->cadence_f[4].on3 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[4].on3dot = jiffies + (long)((j->cadence_f[4].on3 * (hertz * (100)) / 10000));
+ j->cadence_f[4].on3max = jiffies + (long)((j->cadence_f[4].on3 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[4].state = 7;
+ }
+ } else {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence fail state = %d /dev/phone%d at %ld should be %d\n",
+ j->cadence_f[4].state, j->board, jiffies - j->pstn_prev_rmr,
+ j->cadence_f[4].off2);
+ }
+ j->cadence_f[4].state = 0;
}
- }
- } else {
- ixj_tone_timeout(j);
- if (j->flags.dialtone) {
- ixj_dialtone(j);
- }
- if (j->flags.busytone) {
- ixj_busytone(j);
- if (j->dsp.low == 0x20) {
- continue;
+ } else if (j->cadence_f[4].state == 6) {
+ if((time_after(jiffies, j->cadence_f[4].off3min) &&
+ time_before(jiffies, j->cadence_f[4].off3max))) {
+ j->cadence_f[4].state = 7;
+ } else {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence fail state = %d /dev/phone%d at %ld should be %d\n",
+ j->cadence_f[4].state, j->board, jiffies - j->pstn_prev_rmr,
+ j->cadence_f[4].off3);
+ }
+ j->cadence_f[4].state = 0;
}
+ } else {
+ j->cadence_f[4].state = 0;
}
- if (j->flags.ringback) {
- ixj_ringback(j);
- if (j->dsp.low == 0x20) {
- continue;
+ } else { /* Falling edge of RMR */
+ j->pstn_ring_start = 0;
+ j->pstn_ring_stop = jiffies;
+ if (j->cadence_f[4].state == 1) {
+ if(!j->cadence_f[4].on1) {
+ j->cadence_f[4].state = 7;
+ } else if((time_after(jiffies, j->cadence_f[4].on1min) &&
+ time_before(jiffies, j->cadence_f[4].on1max))) {
+ if (j->cadence_f[4].off1) {
+ j->cadence_f[4].state = 2;
+ j->cadence_f[4].off1min = jiffies + (long)((j->cadence_f[4].off1 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[4].off1dot = jiffies + (long)((j->cadence_f[4].off1 * (hertz * (100)) / 10000));
+ j->cadence_f[4].off1max = jiffies + (long)((j->cadence_f[4].off1 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[4].state = 7;
+ }
+ } else {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence fail state = %d /dev/phone%d at %ld should be %d\n",
+ j->cadence_f[4].state, j->board, jiffies - j->pstn_prev_rmr,
+ j->cadence_f[4].on1);
+ }
+ j->cadence_f[4].state = 0;
+ }
+ } else if (j->cadence_f[4].state == 3) {
+ if((time_after(jiffies, j->cadence_f[4].on2min) &&
+ time_before(jiffies, j->cadence_f[4].on2max))) {
+ if (j->cadence_f[4].off2) {
+ j->cadence_f[4].state = 4;
+ j->cadence_f[4].off2min = jiffies + (long)((j->cadence_f[4].off2 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[4].off2dot = jiffies + (long)((j->cadence_f[4].off2 * (hertz * (100)) / 10000));
+ j->cadence_f[4].off2max = jiffies + (long)((j->cadence_f[4].off2 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[4].state = 7;
+ }
+ } else {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence fail state = %d /dev/phone%d at %ld should be %d\n",
+ j->cadence_f[4].state, j->board, jiffies - j->pstn_prev_rmr,
+ j->cadence_f[4].on2);
+ }
+ j->cadence_f[4].state = 0;
}
+ } else if (j->cadence_f[4].state == 5) {
+ if((time_after(jiffies, j->cadence_f[4].on3min) &&
+ time_before(jiffies, j->cadence_f[4].on3max))) {
+ if (j->cadence_f[4].off3) {
+ j->cadence_f[4].state = 6;
+ j->cadence_f[4].off3min = jiffies + (long)((j->cadence_f[4].off3 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[4].off3dot = jiffies + (long)((j->cadence_f[4].off3 * (hertz * (100)) / 10000));
+ j->cadence_f[4].off3max = jiffies + (long)((j->cadence_f[4].off3 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[4].state = 7;
+ }
+ } else {
+ j->cadence_f[4].state = 0;
+ }
+ } else {
+ if (ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring Cadence fail state = %d /dev/phone%d at %ld should be %d\n",
+ j->cadence_f[4].state, j->board, jiffies - j->pstn_prev_rmr,
+ j->cadence_f[4].on3);
+ }
+ j->cadence_f[4].state = 0;
}
- if (!j->tone_state) {
- if (j->dsp.low == 0x20 || (j->play_mode == -1 && j->rec_mode == -1))
- idle(j);
- if (j->dsp.low == 0x20 && j->play_mode != -1)
- ixj_play_start(j);
- if (j->dsp.low == 0x20 && j->rec_mode != -1)
- ixj_record_start(j);
+ }
+ if (ixjdebug & 0x0010) {
+ printk(KERN_INFO "IXJ Ring Cadence b state = %d /dev/phone%d at %ld\n", j->cadence_f[4].state, j->board, jiffies);
+ }
+ if (ixjdebug & 0x0010) {
+ switch(j->cadence_f[4].state) {
+ case 1:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Ring Cadence state at %u min %ld - %ld - max %ld\n", j->board,
+ j->cadence_f[4].on1, j->cadence_f[4].on1min, j->cadence_f[4].on1dot, j->cadence_f[4].on1max);
+ break;
+ case 2:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Ring Cadence state at %u min %ld - %ld - max %ld\n", j->board,
+ j->cadence_f[4].off1, j->cadence_f[4].off1min, j->cadence_f[4].off1dot, j->cadence_f[4].off1max);
+ break;
+ case 3:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Ring Cadence state at %u min %ld - %ld - max %ld\n", j->board,
+ j->cadence_f[4].on2, j->cadence_f[4].on2min, j->cadence_f[4].on2dot, j->cadence_f[4].on2max);
+ break;
+ case 4:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Ring Cadence state at %u min %ld - %ld - max %ld\n", j->board,
+ j->cadence_f[4].off2, j->cadence_f[4].off2min, j->cadence_f[4].off2dot, j->cadence_f[4].off2max);
+ break;
+ case 5:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Ring Cadence state at %u min %ld - %ld - max %ld\n", j->board,
+ j->cadence_f[4].on3, j->cadence_f[4].on3min, j->cadence_f[4].on3dot, j->cadence_f[4].on3max);
+ break;
+ case 6:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Ring Cadence state at %u min %ld - %ld - max %ld\n", j->board,
+ j->cadence_f[4].off3, j->cadence_f[4].off3min, j->cadence_f[4].off3dot, j->cadence_f[4].off3max);
+ break;
}
}
}
- if (!(j->tone_state && j->dsp.low == 0x20)) {
- if (IsRxReady(j)) {
- ixj_read_frame(j);
+ if (j->cadence_f[4].state == 7) {
+ j->cadence_f[4].state = 0;
+ j->pstn_ring_stop = jiffies;
+ j->ex.bits.pstn_ring = 1;
+ ixj_kill_fasync(j, SIG_PSTN_RING, POLL_IN);
+ if(ixjdebug & 0x0008) {
+ printk(KERN_INFO "IXJ Ring int set /dev/phone%d at %ld\n", j->board, jiffies);
+ }
+ }
+ if((j->pstn_ring_int != 0 && time_after(jiffies, j->pstn_ring_int + (hertz * 5)) && !j->flags.pstn_rmr) ||
+ (j->pstn_ring_stop != 0 && time_after(jiffies, j->pstn_ring_stop + (hertz * 5)))) {
+ if(ixjdebug & 0x0008) {
+ printk("IXJ DAA no ring in 5 seconds /dev/phone%d at %ld\n", j->board, jiffies);
+ printk("IXJ DAA pstn ring int /dev/phone%d at %ld\n", j->board, j->pstn_ring_int);
+ printk("IXJ DAA pstn ring stop /dev/phone%d at %ld\n", j->board, j->pstn_ring_stop);
}
- if (IsTxReady(j) && !j->flags.cidplay) {
- ixj_write_frame(j);
+ j->pstn_ring_stop = j->pstn_ring_int = 0;
+ daa_set_mode(j, SOP_PU_SLEEP);
+ }
+ outb_p(j->pld_scrw.byte, j->XILINXbase);
+ if (j->pstn_cid_intr && time_after(jiffies, j->pstn_cid_received + hertz)) {
+ ixj_daa_cid_read(j);
+ j->ex.bits.caller_id = 1;
+ ixj_kill_fasync(j, SIG_CALLER_ID, POLL_IN);
+ j->pstn_cid_intr = 0;
+ }
+ if (daaint.bitreg.Cadence) {
+ if(ixjdebug & 0x0008) {
+ printk("IXJ DAA Cadence interrupt going to sleep /dev/phone%d\n", j->board);
}
+ daa_set_mode(j, SOP_PU_SLEEP);
+ j->ex.bits.pstn_ring = 0;
}
- if (j->flags.cringing) {
- if (ixj_hookstate(j) & 1) {
- j->flags.cringing = 0;
- ixj_ring_off(j);
+ break;
+ case SOP_PU_CONVERSATION:
+ if (daaint.bitreg.VDD_OK) {
+ if(!daaint.bitreg.SI_0) {
+ if (!j->pstn_winkstart) {
+ if(ixjdebug & 0x0008) {
+ printk("IXJ DAA possible wink /dev/phone%d %ld\n", j->board, jiffies);
+ }
+ j->pstn_winkstart = jiffies;
+ }
} else {
- if (jiffies - j->ring_cadence_jif >= (hertz/2)) {
- if (j->flags.cidring && !j->flags.cidsent) {
- j->flags.cidsent = 1;
- ixj_write_cid(j);
- j->flags.cidring = 0;
+ if (j->pstn_winkstart) {
+ if(ixjdebug & 0x0008) {
+ printk("IXJ DAA possible wink end /dev/phone%d %ld\n", j->board, jiffies);
}
- j->ring_cadence_t--;
- if (j->ring_cadence_t == -1)
- j->ring_cadence_t = 15;
- j->ring_cadence_jif = jiffies;
- }
- if (j->ring_cadence & 1 << j->ring_cadence_t) {
- ixj_ring_on(j);
- } else {
- ixj_ring_off(j);
- j->flags.cidring = 1;
+ j->pstn_winkstart = 0;
}
- continue;
}
}
- if (!j->flags.ringing) {
- if (ixj_hookstate(j)) {
- if (j->dsp.low != 0x20 &&
- SLIC_GetState(j) != PLD_SLIC_STATE_ACTIVE) {
- SLIC_SetState(PLD_SLIC_STATE_ACTIVE, j);
- }
- LineMonitor(j);
- read_filters(j);
- ixj_WriteDSPCommand(0x511B, j);
- j->proc_load = j->ssr.high << 8 | j->ssr.low;
- if (!j->m_hook) {
- j->m_hook = j->ex.bits.hookstate = 1;
- ixj_kill_fasync(j, POLL_PRI);
+ if (j->pstn_winkstart && time_after(jiffies, j->pstn_winkstart + ((hertz * j->winktime) / 1000))) {
+ if(ixjdebug & 0x0008) {
+ printk("IXJ DAA wink detected going to sleep /dev/phone%d %ld\n", j->board, jiffies);
+ }
+ daa_set_mode(j, SOP_PU_SLEEP);
+ j->pstn_winkstart = 0;
+ j->ex.bits.pstn_wink = 1;
+ ixj_kill_fasync(j, SIG_PSTN_WINK, POLL_IN);
+ }
+ break;
+ }
+}
+
+static void ixj_timeout(unsigned long ptr)
+{
+ int board;
+ unsigned long jifon;
+ IXJ *j = (IXJ *)ptr;
+ board = j->board;
+
+ if (j->DSPbase && atomic_read(&j->DSPWrite) == 0 && test_and_set_bit(board, (void *)&j->busyflags) == 0) {
+ ixj_perfmon(j->timerchecks);
+ j->hookstate = ixj_hookstate(j);
+ if (j->tone_state) {
+ if (!(j->hookstate)) {
+ ixj_cpt_stop(j);
+ if (j->m_hook) {
+ j->m_hook = 0;
+ j->ex.bits.hookstate = 1;
+ ixj_kill_fasync(j, SIG_HOOKSTATE, POLL_IN);
+ }
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
+ }
+ if (j->tone_state == 1)
+ jifon = ((hertz * j->tone_on_time) * 25 / 100000);
+ else
+ jifon = ((hertz * j->tone_on_time) * 25 / 100000) + ((hertz * j->tone_off_time) * 25 / 100000);
+ if (time_before(jiffies, j->tone_start_jif + jifon)) {
+ if (j->tone_state == 1) {
+ ixj_play_tone(j, j->tone_index);
+ if (j->dsp.low == 0x20) {
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
}
} else {
- if (j->dsp.low != 0x20 &&
- SLIC_GetState(j) == PLD_SLIC_STATE_ACTIVE)
- // Internet LineJACK
- {
- SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
+ ixj_play_tone(j, 0);
+ if (j->dsp.low == 0x20) {
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
}
- if (j->ex.bits.dtmf_ready) {
- j->dtmf_wp = j->dtmf_rp = j->ex.bits.dtmf_ready = 0;
+ }
+ } else {
+ ixj_tone_timeout(j);
+ if (j->flags.dialtone) {
+ ixj_dialtone(j);
+ }
+ if (j->flags.busytone) {
+ ixj_busytone(j);
+ if (j->dsp.low == 0x20) {
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
}
- if (j->m_hook) {
- j->m_hook = 0;
- j->ex.bits.hookstate = 1;
- ixj_kill_fasync(j, POLL_PRI);
+ }
+ if (j->flags.ringback) {
+ ixj_ringback(j);
+ if (j->dsp.low == 0x20) {
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
}
}
+ if (!j->tone_state) {
+ ixj_cpt_stop(j);
+ }
}
- if (j->cardtype == 300 && !j->flags.incheck) {
- if (j->flags.pstn_present) {
- j->pld_scrr.byte = inb_p(j->XILINXbase);
- if (j->pld_scrr.bits.daaflag) {
- daa_int_read(j);
- if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.RING) {
- if (!j->flags.pstn_ringing) {
- j->flags.pstn_ringing = 1;
- if (j->daa_mode != SOP_PU_RINGING)
- daa_set_mode(j, SOP_PU_RINGING);
+ }
+ if (!(j->tone_state && j->dsp.low == 0x20)) {
+ if (IsRxReady(j)) {
+ ixj_read_frame(j);
+ }
+ if (IsTxReady(j)) {
+ ixj_write_frame(j);
+ }
+ }
+ if (j->flags.cringing) {
+ if (j->hookstate & 1) {
+ j->flags.cringing = 0;
+ ixj_ring_off(j);
+ } else if(j->cadence_f[5].enable && ((!j->cadence_f[5].en_filter) || (j->cadence_f[5].en_filter && j->flags.firstring))) {
+ switch(j->cadence_f[5].state) {
+ case 0:
+ j->cadence_f[5].on1dot = jiffies + (long)((j->cadence_f[5].on1 * (hertz * 100) / 10000));
+ if (time_before(jiffies, j->cadence_f[5].on1dot)) {
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
}
+ ixj_ring_on(j);
}
- if (time_after(jiffies, j->pstn_sleeptil) && j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
- j->pstn_winkstart = 0;
- j->pstn_ring_stop = 0;
- j->pld_scrw.bits.led1 = 1;
- if (j->flags.pstn_ringing && !j->pstn_envelope) {
- if (j->daa_mode != SOP_PU_RINGING) {
- j->flags.pstn_ringing = 0;
- } else {
- j->pld_scrw.bits.led2 = 0;
- j->pstn_envelope = 1;
- j->pstn_ring_start = jiffies;
- j->pstn_ring_stop = 0;
- }
- j->ex.bits.pstn_ring = 0;
+ j->cadence_f[5].state = 1;
+ break;
+ case 1:
+ if (time_after(jiffies, j->cadence_f[5].on1dot)) {
+ j->cadence_f[5].off1dot = jiffies + (long)((j->cadence_f[5].off1 * (hertz * 100) / 10000));
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
}
- outb_p(j->pld_scrw.byte, j->XILINXbase);
- } else {
- j->pld_scrw.bits.led1 = 0;
- j->pld_scrw.bits.led2 = 1;
- outb_p(j->pld_scrw.byte, j->XILINXbase);
- if (j->flags.pstn_ringing && j->pstn_envelope) {
- if(!j->pstn_ring_stop) {
- j->pstn_ring_stop = jiffies;
- } else if (time_after(jiffies, j->pstn_ring_stop + ((hertz * 5) / 100))){
- j->pstn_ring_stop = 0;
- j->ex.bits.pstn_ring = 1;
- j->pstn_envelope = 0;
- }
- } else if (j->daa_mode == SOP_PU_CONVERSATION) {
- if (!j->pstn_winkstart) {
- j->pstn_winkstart = jiffies;
- } else if (time_after(jiffies, j->pstn_winkstart + (hertz * j->winktime / 1000))) {
- daa_set_mode(j, SOP_PU_SLEEP);
- j->pstn_winkstart = 0;
- j->ex.bits.pstn_wink = 1;
- }
+ ixj_ring_off(j);
+ j->cadence_f[5].state = 2;
+ }
+ break;
+ case 2:
+ if (time_after(jiffies, j->cadence_f[5].off1dot)) {
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
+ }
+ ixj_ring_on(j);
+ if (j->cadence_f[5].on2) {
+ j->cadence_f[5].on2dot = jiffies + (long)((j->cadence_f[5].on2 * (hertz * 100) / 10000));
+ j->cadence_f[5].state = 3;
} else {
- j->ex.bits.pstn_ring = 0;
+ j->cadence_f[5].state = 7;
}
}
- if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.Cadence) {
- if (j->daa_mode == SOP_PU_RINGING) {
- daa_set_mode(j, SOP_PU_SLEEP);
- j->flags.pstn_ringing = 0;
- j->ex.bits.pstn_ring = 0;
+ break;
+ case 3:
+ if (time_after(jiffies, j->cadence_f[5].on2dot)) {
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
}
- }
- if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.Caller_ID) {
- if (j->daa_mode == SOP_PU_RINGING && j->flags.pstn_ringing) {
- j->pstn_cid_intr = 1;
- j->pstn_cid_received = jiffies;
+ ixj_ring_off(j);
+ if (j->cadence_f[5].off2) {
+ j->cadence_f[5].off2dot = jiffies + (long)((j->cadence_f[5].off2 * (hertz * 100) / 10000));
+ j->cadence_f[5].state = 4;
+ } else {
+ j->cadence_f[5].state = 7;
}
}
- } else {
- if (j->pld_scrr.bits.daaflag) {
- daa_int_read(j);
+ break;
+ case 4:
+ if (time_after(jiffies, j->cadence_f[5].off2dot)) {
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
+ }
+ ixj_ring_on(j);
+ if (j->cadence_f[5].on3) {
+ j->cadence_f[5].on3dot = jiffies + (long)((j->cadence_f[5].on3 * (hertz * 100) / 10000));
+ j->cadence_f[5].state = 5;
+ } else {
+ j->cadence_f[5].state = 7;
+ }
}
- j->ex.bits.pstn_ring = 0;
- if (j->pstn_cid_intr && jiffies > j->pstn_cid_received + (hertz * 3)) {
- if (j->daa_mode == SOP_PU_RINGING) {
- ixj_daa_cid_read(j);
- j->ex.bits.caller_id = 1;
+ break;
+ case 5:
+ if (time_after(jiffies, j->cadence_f[5].on3dot)) {
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
+ }
+ ixj_ring_off(j);
+ if (j->cadence_f[5].off3) {
+ j->cadence_f[5].off3dot = jiffies + (long)((j->cadence_f[5].off3 * (hertz * 100) / 10000));
+ j->cadence_f[5].state = 6;
+ } else {
+ j->cadence_f[5].state = 7;
}
- j->pstn_cid_intr = 0;
- } else {
- j->ex.bits.caller_id = 0;
}
- if (!j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
- j->pld_scrw.bits.led1 = 0;
- j->pld_scrw.bits.led2 = 1;
- outb_p(j->pld_scrw.byte, j->XILINXbase);
- if (j->flags.pstn_ringing && j->pstn_envelope) {
- if(!j->pstn_ring_stop) {
- j->pstn_ring_stop = jiffies;
- } else if (time_after(jiffies, j->pstn_ring_stop + ((hertz * 5) / 100))){
- j->pstn_ring_stop = 0;
- j->ex.bits.pstn_ring = 1;
- j->pstn_envelope = 0;
- }
- j->pld_scrw.bits.led1 = 0;
- outb_p(j->pld_scrw.byte, j->XILINXbase);
- } else if (j->daa_mode == SOP_PU_CONVERSATION) {
- if (!j->pstn_winkstart) {
- j->pstn_winkstart = jiffies;
- } else if (time_after(jiffies, j->pstn_winkstart + (hertz * j->winktime / 1000))) {
- daa_set_mode(j, SOP_PU_SLEEP);
- j->pstn_winkstart = 0;
- j->ex.bits.pstn_wink = 1;
- }
+ break;
+ case 6:
+ if (time_after(jiffies, j->cadence_f[5].off3dot)) {
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
}
+ j->cadence_f[5].state = 7;
+ }
+ break;
+ case 7:
+ if(ixjdebug & 0x0004) {
+ printk("Ringing cadence state = %d - %ld\n", j->cadence_f[5].state, jiffies);
}
+ j->flags.cidring = 1;
+ j->cadence_f[5].state = 0;
+ break;
+ }
+ if (j->flags.cidring && !j->flags.cidsent) {
+ j->flags.cidsent = 1;
+ if(j->fskdcnt) {
+ SLIC_SetState(PLD_SLIC_STATE_OHT, j);
+ ixj_pre_cid(j);
+ }
+ j->flags.cidring = 0;
+ }
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
+ } else {
+ if (time_after(jiffies, j->ring_cadence_jif + (hertz / 2))) {
+ if (j->flags.cidring && !j->flags.cidsent) {
+ j->flags.cidsent = 1;
+ if(j->fskdcnt) {
+ SLIC_SetState(PLD_SLIC_STATE_OHT, j);
+ ixj_pre_cid(j);
+ }
+ j->flags.cidring = 0;
+ }
+ j->ring_cadence_t--;
+ if (j->ring_cadence_t == -1)
+ j->ring_cadence_t = 15;
+ j->ring_cadence_jif = jiffies;
+
+ if (j->ring_cadence & 1 << j->ring_cadence_t) {
+ if(j->flags.cidsent && j->cadence_f[5].en_filter)
+ j->flags.firstring = 1;
+ else
+ ixj_ring_on(j);
+ } else {
+ ixj_ring_off(j);
+ if(!j->flags.cidsent)
+ j->flags.cidring = 1;
}
}
+ clear_bit(board, &j->busyflags);
+ ixj_add_timer(j);
+ return;
}
- if (j->ex.bytes) {
- wake_up_interruptible(&j->poll_q); // Wake any blocked selects
- ixj_kill_fasync(j, POLL_PRI);
+ }
+ if (!j->flags.ringing) {
+ if (j->hookstate) { /* & 1) { */
+ if (j->dsp.low != 0x20 &&
+ SLIC_GetState(j) != PLD_SLIC_STATE_ACTIVE) {
+ SLIC_SetState(PLD_SLIC_STATE_ACTIVE, j);
+ }
+ LineMonitor(j);
+ read_filters(j);
+ ixj_WriteDSPCommand(0x511B, j);
+ j->proc_load = j->ssr.high << 8 | j->ssr.low;
+ if (!j->m_hook && (j->hookstate & 1)) {
+ j->m_hook = j->ex.bits.hookstate = 1;
+ ixj_kill_fasync(j, SIG_HOOKSTATE, POLL_IN);
+ }
+ } else {
+ if (j->ex.bits.dtmf_ready) {
+ j->dtmf_wp = j->dtmf_rp = j->ex.bits.dtmf_ready = 0;
+ }
+ if (j->m_hook) {
+ j->m_hook = 0;
+ j->ex.bits.hookstate = 1;
+ ixj_kill_fasync(j, SIG_HOOKSTATE, POLL_IN);
+ }
}
- } else {
- break;
}
+ if (j->cardtype == QTI_LINEJACK && !j->flags.pstncheck && j->flags.pstn_present) {
+ ixj_pstn_state(j);
+ }
+ if (j->ex.bytes) {
+ wake_up_interruptible(&j->poll_q); /* Wake any blocked selects */
+ }
+ clear_bit(board, &j->busyflags);
}
- ixj_add_timer();
+ ixj_add_timer(j);
}
static int ixj_status_wait(IXJ *j)
{
unsigned long jif;
- jif = jiffies;
+ jif = jiffies + ((60 * hertz) / 100);
while (!IsStatusReady(j)) {
- if (jiffies - jif > (60 * (hertz / 100))) {
+ ixj_perfmon(j->statuswait);
+ if (time_after(jiffies, jif)) {
+ ixj_perfmon(j->statuswaitfail);
return -1;
}
}
@@ -809,39 +1523,69 @@
{
unsigned long jif;
- jif = jiffies;
+ jif = jiffies + ((60 * hertz) / 100);
while (!IsPCControlReady(j)) {
- if (jiffies - jif > (60 * (hertz / 100))) {
+ ixj_perfmon(j->pcontrolwait);
+ if (time_after(jiffies, jif)) {
+ ixj_perfmon(j->pcontrolwaitfail);
return -1;
}
}
return 0;
}
-int ixj_WriteDSPCommand(unsigned short cmd, IXJ *j)
+static int ixj_WriteDSPCommand(unsigned short cmd, IXJ *j)
{
BYTES bytes;
unsigned long jif;
+ atomic_inc(&j->DSPWrite);
+ if(atomic_read(&j->DSPWrite) > 1) {
+ printk("IXJ %d DSP write overlap attempting command 0x%4.4x\n", j->board, cmd);
+ return -1;
+ }
bytes.high = (cmd & 0xFF00) >> 8;
bytes.low = cmd & 0x00FF;
- jif = jiffies;
+ jif = jiffies + ((60 * hertz) / 100);
while (!IsControlReady(j)) {
- if (jiffies - jif > (60 * (hertz / 100))) {
+ ixj_perfmon(j->iscontrolready);
+ if (time_after(jiffies, jif)) {
+ ixj_perfmon(j->iscontrolreadyfail);
+ atomic_dec(&j->DSPWrite);
+ if(atomic_read(&j->DSPWrite) > 0) {
+ printk("IXJ %d DSP overlaped command 0x%4.4x during control ready failure.\n", j->board, cmd);
+ while(atomic_read(&j->DSPWrite) > 0) {
+ atomic_dec(&j->DSPWrite);
+ }
+ }
return -1;
}
}
- outb_p(bytes.low, j->DSPbase + 6);
- outb_p(bytes.high, j->DSPbase + 7);
+ outb(bytes.low, j->DSPbase + 6);
+ outb(bytes.high, j->DSPbase + 7);
if (ixj_status_wait(j)) {
j->ssr.low = 0xFF;
j->ssr.high = 0xFF;
+ atomic_dec(&j->DSPWrite);
+ if(atomic_read(&j->DSPWrite) > 0) {
+ printk("IXJ %d DSP overlaped command 0x%4.4x during status wait failure.\n", j->board, cmd);
+ while(atomic_read(&j->DSPWrite) > 0) {
+ atomic_dec(&j->DSPWrite);
+ }
+ }
return -1;
}
/* Read Software Status Register */
j->ssr.low = inb_p(j->DSPbase + 2);
j->ssr.high = inb_p(j->DSPbase + 3);
+ atomic_dec(&j->DSPWrite);
+ if(atomic_read(&j->DSPWrite) > 0) {
+ printk("IXJ %d DSP overlaped command 0x%4.4x\n", j->board, cmd);
+ while(atomic_read(&j->DSPWrite) > 0) {
+ atomic_dec(&j->DSPWrite);
+ }
+ }
return 0;
}
@@ -850,7 +1594,7 @@
* General Purpose IO Register read routine
*
***************************************************************************/
-extern __inline__ int ixj_gpio_read(IXJ *j)
+static inline int ixj_gpio_read(IXJ *j)
{
if (ixj_WriteDSPCommand(0x5143, j))
return -1;
@@ -861,7 +1605,7 @@
return 0;
}
-extern __inline__ void LED_SetState(int state, IXJ *j)
+static inline void LED_SetState(int state, IXJ *j)
{
if (j->cardtype == QTI_LINEJACK) {
j->pld_scrw.bits.led1 = state & 0x1 ? 1 : 0;
@@ -869,7 +1613,7 @@
j->pld_scrw.bits.led3 = state & 0x4 ? 1 : 0;
j->pld_scrw.bits.led4 = state & 0x8 ? 1 : 0;
- outb_p(j->pld_scrw.byte, j->XILINXbase);
+ outb(j->pld_scrw.byte, j->XILINXbase);
}
}
@@ -908,22 +1652,31 @@
case QTI_PHONEJACK_PCI:
j->pld_slicw.pcib.mic = 0;
j->pld_slicw.pcib.spk = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
break;
case QTI_LINEJACK:
- ixj_set_pots(j, 0);
+ ixj_set_pots(j, 0); /* Disconnect POTS/PSTN relay */
if (ixj_WriteDSPCommand(0xC528, j)) /* Write CODEC config to
Software Control Register */
return 2;
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
- outb_p(j->pld_scrw.byte, j->XILINXbase);
+ outb(j->pld_scrw.byte, j->XILINXbase);
j->pld_clock.byte = 0;
- outb_p(j->pld_clock.byte, j->XILINXbase + 0x04);
+ outb(j->pld_clock.byte, j->XILINXbase + 0x04);
j->pld_slicw.bits.rly1 = 1;
j->pld_slicw.bits.spken = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ ixj_mixer(0x1200, j); /* Turn Off MIC switch on mixer left */
+ ixj_mixer(0x1401, j); /* Turn On Mono1 switch on mixer left */
+ ixj_mixer(0x1300, j); /* Turn Off MIC switch on mixer right */
+ ixj_mixer(0x1501, j); /* Turn On Mono1 switch on mixer right */
+ ixj_mixer(0x0E80, j); /*Mic mute */
+ ixj_mixer(0x0F00, j); /* Set mono out (SLIC) to 0dB */
+ ixj_mixer(0x0080, j); /* Mute Master Left volume */
+ ixj_mixer(0x0180, j); /* Mute Master Right volume */
SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
+/* SLIC_SetState(PLD_SLIC_STATE_ACTIVE, j); */
break;
case QTI_PHONEJACK:
j->gpio.bytes.high = 0x0B;
@@ -940,7 +1693,7 @@
j->pld_slicw.bits.rly3 = 0;
j->pld_slicw.bits.rly1 = 1;
j->pld_slicw.bits.spken = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
j->port = PORT_PSTN;
} else {
return 4;
@@ -957,10 +1710,29 @@
case QTI_PHONEJACK_PCI:
j->pld_slicw.pcib.mic = 1;
j->pld_slicw.pcib.spk = 1;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
break;
case QTI_LINEJACK:
- ixj_set_pots(j, 0);
+ ixj_set_pots(j, 0); /* Disconnect POTS/PSTN relay */
+ if (ixj_WriteDSPCommand(0xC528, j)) /* Write CODEC config to
+ Software Control Register */
+ return 2;
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
+
+ outb(j->pld_scrw.byte, j->XILINXbase);
+ j->pld_clock.byte = 0;
+ outb(j->pld_clock.byte, j->XILINXbase + 0x04);
+ j->pld_slicw.bits.rly1 = 1;
+ j->pld_slicw.bits.spken = 1;
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ ixj_mixer(0x1201, j); /* Turn On MIC switch on mixer left */
+ ixj_mixer(0x1400, j); /* Turn Off Mono1 switch on mixer left */
+ ixj_mixer(0x1301, j); /* Turn On MIC switch on mixer right */
+ ixj_mixer(0x1500, j); /* Turn Off Mono1 switch on mixer right */
+ ixj_mixer(0x0E06, j); /*Mic un-mute 0dB */
+ ixj_mixer(0x0F80, j); /* Mute mono out (SLIC) */
+ ixj_mixer(0x0000, j); /* Set Master Left volume to 0dB */
+ ixj_mixer(0x0100, j); /* Set Master Right volume to 0dB */
break;
case QTI_PHONEJACK:
j->gpio.bytes.high = 0x0B;
@@ -971,7 +1743,7 @@
}
break;
case PORT_HANDSET:
- if (j->cardtype == QTI_LINEJACK || j->cardtype == QTI_PHONEJACK_PCI) {
+ if (j->cardtype != QTI_PHONEJACK) {
return 5;
} else {
j->gpio.bytes.high = 0x0B;
@@ -994,14 +1766,17 @@
if (arg) {
if (j->port == PORT_PSTN) {
j->pld_slicw.bits.rly1 = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ j->flags.pots_pstn = 1;
return 1;
} else {
+ j->flags.pots_pstn = 0;
return 0;
}
} else {
j->pld_slicw.bits.rly1 = 1;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ outb(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ j->flags.pots_pstn = 0;
return 1;
}
} else {
@@ -1011,18 +1786,76 @@
static void ixj_ring_on(IXJ *j)
{
- if (j->dsp.low == 0x20) { // Internet PhoneJACK
+ if (j->dsp.low == 0x20) /* Internet PhoneJACK */
+ {
+ if (ixjdebug & 0x0004)
+ printk(KERN_INFO "IXJ Ring On /dev/phone%d\n", j->board);
+
j->gpio.bytes.high = 0x0B;
j->gpio.bytes.low = 0x00;
j->gpio.bits.gpio1 = 1;
j->gpio.bits.gpio2 = 1;
j->gpio.bits.gpio5 = 0;
ixj_WriteDSPCommand(j->gpio.word, j); /* send the ring signal */
- } else { // Internet LineJACK, Internet PhoneJACK Lite or Internet PhoneJACK PCI
+ } else /* Internet LineJACK, Internet PhoneJACK Lite or Internet PhoneJACK PCI */
+ {
+ if (ixjdebug & 0x0004)
+ printk(KERN_INFO "IXJ Ring On /dev/phone%d\n", j->board);
+
SLIC_SetState(PLD_SLIC_STATE_RINGING, j);
}
}
+static int ixj_siadc(IXJ *j, int val)
+{
+ if(j->cardtype == QTI_PHONECARD){
+ if(j->flags.pcmciascp){
+ if(val == -1)
+ return j->siadc.bits.rxg;
+
+ if(val < 0 || val > 0x1F)
+ return -1;
+
+ j->siadc.bits.hom = 0; /* Handset Out Mute */
+ j->siadc.bits.lom = 0; /* Line Out Mute */
+ j->siadc.bits.rxg = val; /*(0xC000 - 0x41C8) / 0x4EF; RX PGA Gain */
+ j->psccr.bits.addr = 6; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
+ j->psccr.bits.dev = 0;
+ outb(j->siadc.byte, j->XILINXbase + 0x00);
+ outb(j->psccr.byte, j->XILINXbase + 0x01);
+ ixj_PCcontrol_wait(j);
+ return j->siadc.bits.rxg;
+ }
+ }
+ return -1;
+}
+
+static int ixj_sidac(IXJ *j, int val)
+{
+ if(j->cardtype == QTI_PHONECARD){
+ if(j->flags.pcmciascp){
+ if(val == -1)
+ return j->sidac.bits.txg;
+
+ if(val < 0 || val > 0x1F)
+ return -1;
+
+ j->sidac.bits.srm = 1; /* Speaker Right Mute */
+ j->sidac.bits.slm = 1; /* Speaker Left Mute */
+ j->sidac.bits.txg = val; /* (0xC000 - 0x45E4) / 0x5D3; TX PGA Gain */
+ j->psccr.bits.addr = 7; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
+ j->psccr.bits.dev = 0;
+ outb(j->sidac.byte, j->XILINXbase + 0x00);
+ outb(j->psccr.byte, j->XILINXbase + 0x01);
+ ixj_PCcontrol_wait(j);
+ return j->sidac.bits.txg;
+ }
+ }
+ return -1;
+}
+
static int ixj_pcmcia_cable_check(IXJ *j)
{
j->pccr1.byte = inb_p(j->XILINXbase + 0x03);
@@ -1058,8 +1891,8 @@
} else if (j->flags.pcmciastate == 3) {
j->pccr2.bits.pwr = 0;
j->pccr2.bits.rstc = 1;
- outb_p(j->pccr2.byte, j->XILINXbase + 0x02);
- j->checkwait = jiffies + hertz * 2;
+ outb(j->pccr2.byte, j->XILINXbase + 0x02);
+ j->checkwait = jiffies + (hertz * 2);
j->flags.incheck = 1;
j->flags.pcmciastate = 2;
return 0;
@@ -1083,9 +1916,9 @@
j->psccr.bits.rw = 1;
outb_p(j->psccr.byte, j->XILINXbase + 0x01);
ixj_PCcontrol_wait(j);
- j->flags.pcmciascp = 1; // Set Cable Present Flag
+ j->flags.pcmciascp = 1; /* Set Cable Present Flag */
- j->flags.pcmciasct = (inw_p(j->XILINXbase + 0x00) >> 8) & 0x03; // Get Cable Type
+ j->flags.pcmciasct = (inw_p(j->XILINXbase + 0x00) >> 8) & 0x03; /* Get Cable Type */
if (j->flags.pcmciasct == 3) {
j->flags.pcmciastate = 4;
@@ -1098,113 +1931,63 @@
} else {
j->port = PORT_POTS;
}
- j->sic1.bits.cpd = 0; // Chip Power Down
-
- j->sic1.bits.mpd = 0; // MIC Bias Power Down
-
- j->sic1.bits.hpd = 0; // Handset Bias Power Down
-
- j->sic1.bits.lpd = 0; // Line Bias Power Down
-
- j->sic1.bits.spd = 1; // Speaker Drive Power Down
-
- j->psccr.bits.addr = 1; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
-
+ j->sic1.bits.cpd = 0; /* Chip Power Down */
+ j->sic1.bits.mpd = 0; /* MIC Bias Power Down */
+ j->sic1.bits.hpd = 0; /* Handset Bias Power Down */
+ j->sic1.bits.lpd = 0; /* Line Bias Power Down */
+ j->sic1.bits.spd = 1; /* Speaker Drive Power Down */
+ j->psccr.bits.addr = 1; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
j->psccr.bits.dev = 0;
- outb(j->sic1.byte, j->XILINXbase + 0x00);
- outb(j->psccr.byte, j->XILINXbase + 0x01);
- ixj_PCcontrol_wait(j);
- j->sic2.bits.al = 0; // Analog Loopback DAC analog -> ADC analog
-
- j->sic2.bits.dl2 = 0; // Digital Loopback DAC -> ADC one bit
-
- j->sic2.bits.dl1 = 0; // Digital Loopback ADC -> DAC one bit
-
- j->sic2.bits.pll = 0; // 1 = div 10, 0 = div 5
-
- j->sic2.bits.hpd = 0; // HPF disable
-
- j->psccr.bits.addr = 2; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
-
- j->psccr.bits.dev = 0;
- outb(j->sic2.byte, j->XILINXbase + 0x00);
- outb(j->psccr.byte, j->XILINXbase + 0x01);
- ixj_PCcontrol_wait(j);
- j->psccr.bits.addr = 3; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
-
- j->psccr.bits.dev = 0;
- outb(0x00, j->XILINXbase + 0x00); // PLL Divide N1
-
+ outb(j->sic1.byte, j->XILINXbase + 0x00);
outb(j->psccr.byte, j->XILINXbase + 0x01);
ixj_PCcontrol_wait(j);
- j->psccr.bits.addr = 4; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
+ j->sic2.bits.al = 0; /* Analog Loopback DAC analog -> ADC analog */
+ j->sic2.bits.dl2 = 0; /* Digital Loopback DAC -> ADC one bit */
+ j->sic2.bits.dl1 = 0; /* Digital Loopback ADC -> DAC one bit */
+ j->sic2.bits.pll = 0; /* 1 = div 10, 0 = div 5 */
+ j->sic2.bits.hpd = 0; /* HPF disable */
+ j->psccr.bits.addr = 2; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
j->psccr.bits.dev = 0;
- outb(0x09, j->XILINXbase + 0x00); // PLL Multiply M1
-
+ outb(j->sic2.byte, j->XILINXbase + 0x00);
outb(j->psccr.byte, j->XILINXbase + 0x01);
ixj_PCcontrol_wait(j);
- j->sirxg.bits.lig = 1; // Line In Gain
-
- j->sirxg.bits.lim = 1; // Line In Mute
-
- j->sirxg.bits.mcg = 0; // MIC In Gain // was 3
-
- j->sirxg.bits.mcm = 0; // MIC In Mute
-
- j->sirxg.bits.him = 0; // Handset In Mute
-
- j->sirxg.bits.iir = 1; // IIR
-
- j->psccr.bits.addr = 5; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
+ j->psccr.bits.addr = 3; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
j->psccr.bits.dev = 0;
- outb(j->sirxg.byte, j->XILINXbase + 0x00);
+ outb(0x00, j->XILINXbase + 0x00); /* PLL Divide N1 */
outb(j->psccr.byte, j->XILINXbase + 0x01);
ixj_PCcontrol_wait(j);
- j->siadc.bits.hom = 0; // Handset Out Mute
-
- j->siadc.bits.lom = 0; // Line Out Mute
-
- j->siadc.bits.rxg = 23; //(0xC000 - 0x41C8) / 0x4EF; // RX PGA Gain
-
- j->psccr.bits.addr = 6; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
+ j->psccr.bits.addr = 4; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
j->psccr.bits.dev = 0;
- outb(j->siadc.byte, j->XILINXbase + 0x00);
+ outb(0x09, j->XILINXbase + 0x00); /* PLL Multiply M1 */
outb(j->psccr.byte, j->XILINXbase + 0x01);
ixj_PCcontrol_wait(j);
- j->sidac.bits.srm = 1; // Speaker Right Mute
-
- j->sidac.bits.slm = 1; // Speaker Left Mute
-
- j->sidac.bits.txg = (0xC000 - 0x45E4) / 0x5D3; // TX PGA Gain
-
- j->psccr.bits.addr = 7; // R/W Smart Cable Register Address
-
- j->psccr.bits.rw = 0; // Read / Write flag
+ j->sirxg.bits.lig = 1; /* Line In Gain */
+ j->sirxg.bits.lim = 1; /* Line In Mute */
+ j->sirxg.bits.mcg = 0; /* MIC In Gain was 3 */
+ j->sirxg.bits.mcm = 0; /* MIC In Mute */
+ j->sirxg.bits.him = 0; /* Handset In Mute */
+ j->sirxg.bits.iir = 1; /* IIR */
+ j->psccr.bits.addr = 5; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
j->psccr.bits.dev = 0;
- outb(j->sidac.byte, j->XILINXbase + 0x00);
+ outb(j->sirxg.byte, j->XILINXbase + 0x00);
outb(j->psccr.byte, j->XILINXbase + 0x01);
ixj_PCcontrol_wait(j);
- j->siaatt.bits.sot = 0;
- j->psccr.bits.addr = 9; // R/W Smart Cable Register Address
- j->psccr.bits.rw = 0; // Read / Write flag
+ ixj_siadc(j, 0x17);
+ ixj_sidac(j, 0x1D);
+ j->siaatt.bits.sot = 0;
+ j->psccr.bits.addr = 9; /* R/W Smart Cable Register Address */
+ j->psccr.bits.rw = 0; /* Read / Write flag */
j->psccr.bits.dev = 0;
outb(j->siaatt.byte, j->XILINXbase + 0x00);
outb(j->psccr.byte, j->XILINXbase + 0x01);
@@ -1241,26 +2024,42 @@
case QTI_PHONEJACK_LITE:
case QTI_PHONEJACK_PCI:
SLIC_GetState(j);
- if (j->pld_slicr.bits.state == PLD_SLIC_STATE_ACTIVE ||
- j->pld_slicr.bits.state == PLD_SLIC_STATE_STANDBY) {
- if (j->flags.ringing) {
- if (!in_interrupt()) {
- det = jiffies + (hertz / 50);
- while (time_before(jiffies, det)) {
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(1);
- }
+ if(j->cardtype == QTI_LINEJACK && j->flags.pots_pstn == 1 && (j->readers || j->writers)) {
+ fOffHook = j->pld_slicr.bits.potspstn ? 1 : 0;
+ if(fOffHook != j->p_hook) {
+ if(!j->checkwait) {
+ j->checkwait = jiffies;
+ }
+ if(time_before(jiffies, j->checkwait + 2)) {
+ fOffHook ^= 1;
+ } else {
+ j->checkwait = 0;
}
- SLIC_GetState(j);
- if (j->pld_slicr.bits.state == PLD_SLIC_STATE_RINGING) {
- ixj_ring_on(j);
+ j->p_hook = fOffHook;
+ printk("IXJ : /dev/phone%d pots-pstn hookstate check %d at %ld\n", j->board, fOffHook, jiffies);
+ }
+ } else {
+ if (j->pld_slicr.bits.state == PLD_SLIC_STATE_ACTIVE ||
+ j->pld_slicr.bits.state == PLD_SLIC_STATE_STANDBY) {
+ if (j->flags.ringing || j->flags.cringing) {
+ if (!in_interrupt()) {
+ det = jiffies + (hertz / 50);
+ while (time_before(jiffies, det)) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ }
+ SLIC_GetState(j);
+ if (j->pld_slicr.bits.state == PLD_SLIC_STATE_RINGING) {
+ ixj_ring_on(j);
+ }
}
+ if (j->cardtype == QTI_PHONEJACK_PCI) {
+ j->pld_scrr.byte = inb_p(j->XILINXbase);
+ fOffHook = j->pld_scrr.pcib.det ? 1 : 0;
+ } else
+ fOffHook = j->pld_slicr.bits.det ? 1 : 0;
}
- if (j->cardtype == QTI_PHONEJACK_PCI) {
- j->pld_scrr.byte = inb_p(j->XILINXbase);
- fOffHook = j->pld_scrr.pcib.det ? 1 : 0;
- } else
- fOffHook = j->pld_slicr.bits.det ? 1 : 0;
}
break;
case QTI_PHONECARD:
@@ -1269,34 +2068,49 @@
}
if (j->r_hook != fOffHook) {
j->r_hook = fOffHook;
- if (j->port != PORT_POTS) {
+ if (j->port == PORT_SPEAKER || j->port == PORT_HANDSET) { // || (j->port == PORT_PSTN && j->flags.pots_pstn == 0)) {
j->ex.bits.hookstate = 1;
- ixj_kill_fasync(j, POLL_PRI);
+ ixj_kill_fasync(j, SIG_HOOKSTATE, POLL_IN);
} else if (!fOffHook) {
- j->flash_end = jiffies + (hertz / 10 * 6);
+ j->flash_end = jiffies + ((60 * hertz) / 100);
+ }
+ }
+ if (fOffHook) {
+ if(time_before(jiffies, j->flash_end)) {
+ j->ex.bits.flash = 1;
+ j->flash_end = 0;
+ ixj_kill_fasync(j, SIG_FLASH, POLL_IN);
+ }
+ } else {
+ if(time_before(jiffies, j->flash_end)) {
+ fOffHook = 1;
}
}
+
if (j->port == PORT_PSTN && j->daa_mode == SOP_PU_CONVERSATION)
fOffHook |= 2;
- if (j->port == PORT_SPEAKER)
- fOffHook |= 2;
+ if (j->port == PORT_SPEAKER) {
+ if(j->cardtype == QTI_PHONECARD) {
+ if(j->flags.pcmciascp && j->flags.pcmciasct) {
+ fOffHook |= 2;
+ }
+ } else {
+ fOffHook |= 2;
+ }
+ }
if (j->port == PORT_HANDSET)
fOffHook |= 2;
- if (fOffHook && time_before(jiffies, j->flash_end))
- return 0;
- else
- return fOffHook;
+ return fOffHook;
}
static void ixj_ring_off(IXJ *j)
{
-
- if (j->dsp.low == 0x20) // Internet PhoneJACK
+ if (j->dsp.low == 0x20) /* Internet PhoneJACK */
{
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0004)
printk(KERN_INFO "IXJ Ring Off\n");
j->gpio.bytes.high = 0x0B;
j->gpio.bytes.low = 0x00;
@@ -1304,12 +2118,13 @@
j->gpio.bits.gpio2 = 1;
j->gpio.bits.gpio5 = 0;
ixj_WriteDSPCommand(j->gpio.word, j);
- } else // Internet LineJACK
- {
- if (ixjdebug > 0)
+ } else /* Internet LineJACK */
+ {
+ if (ixjdebug & 0x0004)
printk(KERN_INFO "IXJ Ring Off\n");
- SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
+ if(!j->flags.cidplay)
+ SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
SLIC_GetState(j);
}
@@ -1318,10 +2133,20 @@
static void ixj_ring_start(IXJ *j)
{
j->flags.cringing = 1;
+ if (ixjdebug & 0x0004)
+ printk(KERN_INFO "IXJ Cadence Ringing Start /dev/phone%d\n", j->board);
if (ixj_hookstate(j) & 1) {
if (j->port == PORT_POTS)
ixj_ring_off(j);
j->flags.cringing = 0;
+ if (ixjdebug & 0x0004)
+ printk(KERN_INFO "IXJ Cadence Ringing Stopped /dev/phone%d off hook\n", j->board);
+ } else if(j->cadence_f[5].enable && (!j->cadence_f[5].en_filter)) {
+ j->ring_cadence_jif = jiffies;
+ j->flags.cidsent = j->flags.cidring = 0;
+ j->cadence_f[5].state = 0;
+ if(j->cadence_f[5].on1)
+ ixj_ring_on(j);
} else {
j->ring_cadence_jif = jiffies;
j->ring_cadence_t = 15;
@@ -1330,6 +2155,7 @@
} else {
ixj_ring_off(j);
}
+ j->flags.cidsent = j->flags.cidring = j->flags.firstring = 0;
}
}
@@ -1386,12 +2212,10 @@
return 0;
}
-int ixj_open(struct phone_device *p, struct file *file_p)
+static int ixj_open(struct phone_device *p, struct file *file_p)
{
- IXJ *j = file_p->private_data = ixj[p->board];
-
- if (j == NULL)
- return -ENODEV;
+ IXJ *j = get_ixj(p->board);
+ file_p->private_data = j;
if (!j->DSPbase)
return -ENODEV;
@@ -1423,7 +2247,12 @@
ixj_PCcontrol_wait(j);
}
- if (ixjdebug > 0)
+ j->flags.cidplay = 0;
+ j->flags.cidcw_ack = 0;
+
+ MOD_INC_USE_COUNT;
+
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Opening board %d\n", p->board);
j->framesread = j->frameswritten = 0;
@@ -1435,14 +2264,24 @@
IXJ_TONE ti;
int cnt;
IXJ *j = file_p->private_data;
+ int board = j->p.board;
- if (ixjdebug > 0)
+ /*
+ * Set up locks to ensure that only one process is talking to the DSP at a time.
+ * This is necessary to keep the DSP from locking up.
+ */
+ while(test_and_set_bit(board, (void *)&j->busyflags) != 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Closing board %d\n", NUM(inode->i_rdev));
if (j->cardtype == QTI_PHONECARD)
ixj_set_port(j, PORT_SPEAKER);
else
ixj_set_port(j, PORT_POTS);
+
aec_stop(j);
ixj_play_stop(j);
ixj_record_stop(j);
@@ -1450,22 +2289,25 @@
set_rec_volume(j, 0x100);
ixj_ring_off(j);
- // Restore the tone table to default settings.
+ /* Restore the tone table to default settings. */
ti.tone_index = 10;
ti.gain0 = 1;
ti.freq0 = hz941;
ti.gain1 = 0;
ti.freq1 = hz1209;
+ ixj_init_tone(j, &ti);
ti.tone_index = 11;
ti.gain0 = 1;
ti.freq0 = hz941;
ti.gain1 = 0;
ti.freq1 = hz1336;
+ ixj_init_tone(j, &ti);
ti.tone_index = 12;
ti.gain0 = 1;
ti.freq0 = hz941;
ti.gain1 = 0;
ti.freq1 = hz1477;
+ ixj_init_tone(j, &ti);
ti.tone_index = 13;
ti.gain0 = 1;
ti.freq0 = hz800;
@@ -1557,9 +2399,9 @@
ti.freq1 = hz620;
ixj_init_tone(j, &ti);
- set_rec_depth(j, 2); // Set Record Channel Limit to 2 frames
+ set_rec_depth(j, 2); /* Set Record Channel Limit to 2 frames */
- set_play_depth(j, 2); // Set Playback Channel Limit to 2 frames
+ set_play_depth(j, 2); /* Set Playback Channel Limit to 2 frames */
j->ex.bits.dtmf_ready = 0;
j->dtmf_state = 0;
@@ -1568,6 +2410,9 @@
j->flags.ringing = 0;
j->maxrings = MAXRINGS;
j->ring_cadence = USA_RING_CADENCE;
+ if(j->cadence_f[5].enable) {
+ j->cadence_f[5].enable = j->cadence_f[5].en_filter = j->cadence_f[5].state = 0;
+ }
j->drybuffer = 0;
j->winktime = 320;
j->flags.dtmf_oob = 0;
@@ -1598,27 +2443,42 @@
j->rec_codec = j->play_codec = 0;
j->rec_frame_size = j->play_frame_size = 0;
j->flags.cidsent = j->flags.cidring = 0;
- ixj_fasync(-1, file_p, 0); // remove from list of async notification
+ ixj_fasync(-1, file_p, 0); /* remove from list of async notification */
if(j->cardtype == QTI_LINEJACK && !j->readers && !j->writers) {
ixj_set_port(j, PORT_PSTN);
daa_set_mode(j, SOP_PU_SLEEP);
ixj_set_pots(j, 1);
}
- ixj_WriteDSPCommand(0x0FE3, j); // Put the DSP in 1/5 power mode.
+ ixj_WriteDSPCommand(0x0FE3, j); /* Put the DSP in 1/5 power mode. */
+
+ /* Set up the default signals for events */
+ for (cnt = 0; cnt < 35; cnt++)
+ j->ixj_signals[cnt] = SIGIO;
+
+ /* Set the excetion signal enable flags */
+ j->ex_sig.bits.dtmf_ready = j->ex_sig.bits.hookstate = j->ex_sig.bits.flash = j->ex_sig.bits.pstn_ring =
+ j->ex_sig.bits.caller_id = j->ex_sig.bits.pstn_wink = j->ex_sig.bits.f0 = j->ex_sig.bits.f1 = j->ex_sig.bits.f2 =
+ j->ex_sig.bits.f3 = j->ex_sig.bits.fc0 = j->ex_sig.bits.fc1 = j->ex_sig.bits.fc2 = j->ex_sig.bits.fc3 = 1;
file_p->private_data = NULL;
+ clear_bit(board, &j->busyflags);
+ MOD_DEC_USE_COUNT;
return 0;
}
static int read_filters(IXJ *j)
{
- unsigned short fc, cnt;
+ unsigned short fc, cnt, trg;
int var;
- if (ixj_WriteDSPCommand(0x5144, j))
+ trg = 0;
+ if (ixj_WriteDSPCommand(0x5144, j)) {
+ if(ixjdebug & 0x0001) {
+ printk(KERN_INFO "Read Frame Counter failed!\n");
+ }
return -1;
-
+ }
fc = j->ssr.high << 8 | j->ssr.low;
if (fc == j->frame_count)
return 1;
@@ -1631,65 +2491,97 @@
var = 10;
for (cnt = 0; cnt < 4; cnt++) {
- if (ixj_WriteDSPCommand(0x5154 + cnt, j))
+ if (ixj_WriteDSPCommand(0x5154 + cnt, j)) {
+ if(ixjdebug & 0x0001) {
+ printk(KERN_INFO "Select Filter %d failed!\n", cnt);
+ }
return -1;
-
- if (ixj_WriteDSPCommand(0x515C, j))
+ }
+ if (ixj_WriteDSPCommand(0x515C, j)) {
+ if(ixjdebug & 0x0001) {
+ printk(KERN_INFO "Read Filter History %d failed!\n", cnt);
+ }
return -1;
-
+ }
j->filter_hist[cnt] = j->ssr.high << 8 | j->ssr.low;
if (j->cadence_f[cnt].enable) {
if (j->filter_hist[cnt] & 3 && !(j->filter_hist[cnt] & 12)) {
if (j->cadence_f[cnt].state == 0) {
j->cadence_f[cnt].state = 1;
- j->cadence_f[cnt].on1min = jiffies + (j->cadence_f[cnt].on1 * hertz * (100 - var) / 10000);
- j->cadence_f[cnt].on1dot = jiffies + (j->cadence_f[cnt].on1 * hertz * (100) / 10000);
- j->cadence_f[cnt].on1max = jiffies + (j->cadence_f[cnt].on1 * hertz * (100 + var) / 10000);
+ j->cadence_f[cnt].on1min = jiffies + (long)((j->cadence_f[cnt].on1 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[cnt].on1dot = jiffies + (long)((j->cadence_f[cnt].on1 * (hertz * (100)) / 10000));
+ j->cadence_f[cnt].on1max = jiffies + (long)((j->cadence_f[cnt].on1 * (hertz * (100 + var)) / 10000));
} else if (j->cadence_f[cnt].state == 2 &&
(time_after(jiffies, j->cadence_f[cnt].off1min) &&
time_before(jiffies, j->cadence_f[cnt].off1max))) {
if (j->cadence_f[cnt].on2) {
j->cadence_f[cnt].state = 3;
- j->cadence_f[cnt].on2min = jiffies + (j->cadence_f[cnt].on2 * hertz * (100 - var) / 10000);
- j->cadence_f[cnt].on2dot = jiffies + (j->cadence_f[cnt].on2 * hertz * (100) / 10000);
- j->cadence_f[cnt].on2max = jiffies + (j->cadence_f[cnt].on2 * hertz * (100 + var) / 10000);
+ j->cadence_f[cnt].on2min = jiffies + (long)((j->cadence_f[cnt].on2 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[cnt].on2dot = jiffies + (long)((j->cadence_f[cnt].on2 * (hertz * (100)) / 10000));
+ j->cadence_f[cnt].on2max = jiffies + (long)((j->cadence_f[cnt].on2 * (hertz * (100 + var)) / 10000));
} else {
- j->cadence_f[cnt].state = 6;
+ j->cadence_f[cnt].state = 7;
}
} else if (j->cadence_f[cnt].state == 4 &&
(time_after(jiffies, j->cadence_f[cnt].off2min) &&
time_before(jiffies, j->cadence_f[cnt].off2max))) {
- if (j->cadence_f[cnt].on2) {
+ if (j->cadence_f[cnt].on3) {
j->cadence_f[cnt].state = 5;
- j->cadence_f[cnt].on3min = jiffies + (j->cadence_f[cnt].on3 * hertz * (100 - var) / 10000);
- j->cadence_f[cnt].on3dot = jiffies + (j->cadence_f[cnt].on3 * hertz * (100) / 10000);
- j->cadence_f[cnt].on3max = jiffies + (j->cadence_f[cnt].on3 * hertz * (100 + var) / 10000);
+ j->cadence_f[cnt].on3min = jiffies + (long)((j->cadence_f[cnt].on3 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[cnt].on3dot = jiffies + (long)((j->cadence_f[cnt].on3 * (hertz * (100)) / 10000));
+ j->cadence_f[cnt].on3max = jiffies + (long)((j->cadence_f[cnt].on3 * (hertz * (100 + var)) / 10000));
} else {
- j->cadence_f[cnt].state = 6;
+ j->cadence_f[cnt].state = 7;
}
} else {
j->cadence_f[cnt].state = 0;
}
} else if (j->filter_hist[cnt] & 12 && !(j->filter_hist[cnt] & 3)) {
- if (j->cadence_f[cnt].state == 1 &&
- (time_after(jiffies, j->cadence_f[cnt].on1min) &&
- time_before(jiffies, j->cadence_f[cnt].on1max))) {
- j->cadence_f[cnt].state = 2;
- j->cadence_f[cnt].off1min = jiffies + (j->cadence_f[cnt].off1 * hertz * (100 - var) / 10000);
- j->cadence_f[cnt].off1max = jiffies + (j->cadence_f[cnt].off1 * hertz * (100 + var) / 10000);
- } else if (j->cadence_f[cnt].state == 3 &&
- (time_after(jiffies, j->cadence_f[cnt].on2min) &&
+ if (j->cadence_f[cnt].state == 1) {
+ if(!j->cadence_f[cnt].on1) {
+ j->cadence_f[cnt].state = 7;
+ } else if((time_after(jiffies, j->cadence_f[cnt].on1min) &&
+ time_before(jiffies, j->cadence_f[cnt].on1max))) {
+ if(j->cadence_f[cnt].off1) {
+ j->cadence_f[cnt].state = 2;
+ j->cadence_f[cnt].off1min = jiffies + (long)((j->cadence_f[cnt].off1 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[cnt].off1dot = jiffies + (long)((j->cadence_f[cnt].off1 * (hertz * (100)) / 10000));
+ j->cadence_f[cnt].off1max = jiffies + (long)((j->cadence_f[cnt].off1 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[cnt].state = 7;
+ }
+ } else {
+ j->cadence_f[cnt].state = 0;
+ }
+ } else if (j->cadence_f[cnt].state == 3) {
+ if((time_after(jiffies, j->cadence_f[cnt].on2min) &&
time_before(jiffies, j->cadence_f[cnt].on2max))) {
- j->cadence_f[cnt].state = 4;
- j->cadence_f[cnt].off2min = jiffies + (j->cadence_f[cnt].off2 * hertz * (100 - var) / 10000);
- j->cadence_f[cnt].off2max = jiffies + (j->cadence_f[cnt].off2 * hertz * (100 + var) / 10000);
- } else if (j->cadence_f[cnt].state == 5 &&
- (time_after(jiffies, j->cadence_f[cnt].on3min) &&
+ if(j->cadence_f[cnt].off2) {
+ j->cadence_f[cnt].state = 4;
+ j->cadence_f[cnt].off2min = jiffies + (long)((j->cadence_f[cnt].off2 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[cnt].off2dot = jiffies + (long)((j->cadence_f[cnt].off2 * (hertz * (100)) / 10000));
+ j->cadence_f[cnt].off2max = jiffies + (long)((j->cadence_f[cnt].off2 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[cnt].state = 7;
+ }
+ } else {
+ j->cadence_f[cnt].state = 0;
+ }
+ } else if (j->cadence_f[cnt].state == 5) {
+ if ((time_after(jiffies, j->cadence_f[cnt].on3min) &&
time_before(jiffies, j->cadence_f[cnt].on3max))) {
- j->cadence_f[cnt].state = 6;
- j->cadence_f[cnt].off3min = jiffies + (j->cadence_f[cnt].off3 * hertz * (100 - var) / 10000);
- j->cadence_f[cnt].off3max = jiffies + (j->cadence_f[cnt].off3 * hertz * (100 + var) / 10000);
+ if(j->cadence_f[cnt].off3) {
+ j->cadence_f[cnt].state = 6;
+ j->cadence_f[cnt].off3min = jiffies + (long)((j->cadence_f[cnt].off3 * (hertz * (100 - var)) / 10000));
+ j->cadence_f[cnt].off3dot = jiffies + (long)((j->cadence_f[cnt].off3 * (hertz * (100)) / 10000));
+ j->cadence_f[cnt].off3max = jiffies + (long)((j->cadence_f[cnt].off3 * (hertz * (100 + var)) / 10000));
+ } else {
+ j->cadence_f[cnt].state = 7;
+ }
+ } else {
+ j->cadence_f[cnt].state = 0;
+ }
} else {
j->cadence_f[cnt].state = 0;
}
@@ -1700,58 +2592,128 @@
!j->cadence_f[cnt].off1 &&
!j->cadence_f[cnt].on2 && !j->cadence_f[cnt].off2 &&
!j->cadence_f[cnt].on3 && !j->cadence_f[cnt].off3) {
- j->cadence_f[cnt].state = 6;
+ j->cadence_f[cnt].state = 7;
}
break;
case 3:
if(time_after(jiffies, j->cadence_f[cnt].on2dot) &&
!j->cadence_f[cnt].off2 &&
!j->cadence_f[cnt].on3 && !j->cadence_f[cnt].off3) {
- j->cadence_f[cnt].state = 6;
+ j->cadence_f[cnt].state = 7;
}
break;
case 5:
if(time_after(jiffies, j->cadence_f[cnt].on3dot) &&
!j->cadence_f[cnt].off3) {
- j->cadence_f[cnt].state = 6;
+ j->cadence_f[cnt].state = 7;
}
break;
}
}
+
+ if (ixjdebug & 0x0040) {
+ printk(KERN_INFO "IXJ Tone Cadence state = %d /dev/phone%d at %ld\n", j->cadence_f[cnt].state, j->board, jiffies);
+ switch(j->cadence_f[cnt].state) {
+ case 0:
+ printk(KERN_INFO "IXJ /dev/phone%d No Tone detected\n", j->board);
+ break;
+ case 1:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Tone Cadence state at %u %ld - %ld - %ld\n", j->board,
+ j->cadence_f[cnt].on1, j->cadence_f[cnt].on1min, j->cadence_f[cnt].on1dot, j->cadence_f[cnt].on1max);
+ break;
+ case 2:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Tone Cadence state at %ld - %ld\n", j->board, j->cadence_f[cnt].off1min,
+ j->cadence_f[cnt].off1max);
+ break;
+ case 3:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Tone Cadence state at %ld - %ld\n", j->board, j->cadence_f[cnt].on2min,
+ j->cadence_f[cnt].on2max);
+ break;
+ case 4:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Tone Cadence state at %ld - %ld\n", j->board, j->cadence_f[cnt].off2min,
+ j->cadence_f[cnt].off2max);
+ break;
+ case 5:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Tone Cadence state at %ld - %ld\n", j->board, j->cadence_f[cnt].on3min,
+ j->cadence_f[cnt].on3max);
+ break;
+ case 6:
+ printk(KERN_INFO "IXJ /dev/phone%d Next Tone Cadence state at %ld - %ld\n", j->board, j->cadence_f[cnt].off3min,
+ j->cadence_f[cnt].off3max);
+ break;
+ }
+ }
}
- if (j->cadence_f[cnt].state == 6) {
+ if (j->cadence_f[cnt].state == 7) {
j->cadence_f[cnt].state = 0;
if (j->cadence_f[cnt].enable == 1)
j->cadence_f[cnt].enable = 0;
switch (cnt) {
case 0:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter Cadence 0 triggered %ld\n", jiffies);
+ }
j->ex.bits.fc0 = 1;
+ ixj_kill_fasync(j, SIG_FC0, POLL_IN);
break;
case 1:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter Cadence 1 triggered %ld\n", jiffies);
+ }
j->ex.bits.fc1 = 1;
+ ixj_kill_fasync(j, SIG_FC1, POLL_IN);
break;
case 2:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter Cadence 2 triggered %ld\n", jiffies);
+ }
j->ex.bits.fc2 = 1;
+ ixj_kill_fasync(j, SIG_FC2, POLL_IN);
break;
case 3:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter Cadence 3 triggered %ld\n", jiffies);
+ }
j->ex.bits.fc3 = 1;
+ ixj_kill_fasync(j, SIG_FC3, POLL_IN);
break;
}
}
if (j->filter_en[cnt] && ((j->filter_hist[cnt] & 3 && !(j->filter_hist[cnt] & 12)) ||
(j->filter_hist[cnt] & 12 && !(j->filter_hist[cnt] & 3)))) {
+ if((j->filter_hist[cnt] & 3 && !(j->filter_hist[cnt] & 12))) {
+ trg = 1;
+ } else if((j->filter_hist[cnt] & 12 && !(j->filter_hist[cnt] & 3))) {
+ trg = 0;
+ }
switch (cnt) {
case 0:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter 0 triggered %d at %ld\n", trg, jiffies);
+ }
j->ex.bits.f0 = 1;
+ ixj_kill_fasync(j, SIG_F0, POLL_IN);
break;
case 1:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter 1 triggered %d at %ld\n", trg, jiffies);
+ }
j->ex.bits.f1 = 1;
+ ixj_kill_fasync(j, SIG_F1, POLL_IN);
break;
case 2:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter 2 triggered %d at %ld\n", trg, jiffies);
+ }
j->ex.bits.f2 = 1;
+ ixj_kill_fasync(j, SIG_F2, POLL_IN);
break;
case 3:
+ if(ixjdebug & 0x0020) {
+ printk(KERN_INFO "Filter 3 triggered %d at %ld\n", trg, jiffies);
+ }
j->ex.bits.f3 = 1;
+ ixj_kill_fasync(j, SIG_F3, POLL_IN);
break;
}
}
@@ -1766,7 +2728,7 @@
}
j->dtmf_proc = 1;
- if (ixj_WriteDSPCommand(0x7000, j)) // Line Monitor
+ if (ixj_WriteDSPCommand(0x7000, j)) /* Line Monitor */
return -1;
j->dtmf.bytes.high = j->ssr.high;
@@ -1775,16 +2737,22 @@
j->dtmf_state = 1;
j->dtmf_current = j->dtmf.bits.digit;
}
- if (j->dtmf_state && !j->dtmf.bits.dtmf_valid) // && j->dtmf_wp != j->dtmf_rp)
+ if (j->dtmf_state && !j->dtmf.bits.dtmf_valid) /* && j->dtmf_wp != j->dtmf_rp) */
{
- if(!j->flags.cidplay) {
+ if(!j->cidcw_wait) {
j->dtmfbuffer[j->dtmf_wp] = j->dtmf_current;
j->dtmf_wp++;
if (j->dtmf_wp == 79)
j->dtmf_wp = 0;
j->ex.bits.dtmf_ready = 1;
+ if(j->ex_sig.bits.dtmf_ready) {
+ ixj_kill_fasync(j, SIG_DTMF_READY, POLL_IN);
+ }
}
- else if(j->dtmf_current == 25 || j->dtmf_current == 31) {
+ else if(j->dtmf_current == 0x00 || j->dtmf_current == 0x0D) {
+ if(ixjdebug & 0x0020) {
+ printk("IXJ phone%d saw CIDCW Ack DTMF %d from display at %ld\n", j->board, j->dtmf_current, jiffies);
+ }
j->flags.cidcw_ack = 1;
}
j->dtmf_state = 0;
@@ -1794,14 +2762,102 @@
return 0;
}
-ssize_t ixj_read(struct file * file_p, char *buf, size_t length, loff_t * ppos)
+/************************************************************************
+*
+* Functions to allow alaw <-> ulaw conversions.
+*
+************************************************************************/
+
+static void ulaw2alaw(unsigned char *buff, unsigned long len)
+{
+ static unsigned char table_ulaw2alaw[] =
+ {
+ 0x2A, 0x2B, 0x28, 0x29, 0x2E, 0x2F, 0x2C, 0x2D,
+ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
+ 0x3A, 0x3B, 0x38, 0x39, 0x3E, 0x3F, 0x3C, 0x3D,
+ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
+ 0x0B, 0x08, 0x09, 0x0E, 0x0F, 0x0C, 0x0D, 0x02,
+ 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x1A,
+ 0x1B, 0x18, 0x19, 0x1E, 0x1F, 0x1C, 0x1D, 0x12,
+ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6B,
+ 0x68, 0x69, 0x6E, 0x6F, 0x6C, 0x6D, 0x62, 0x63,
+ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7B, 0x79,
+ 0x7E, 0x7F, 0x7C, 0x7D, 0x72, 0x73, 0x70, 0x71,
+ 0x76, 0x77, 0x74, 0x75, 0x4B, 0x49, 0x4F, 0x4D,
+ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
+ 0x5A, 0x5B, 0x58, 0x59, 0x5E, 0x5F, 0x5C, 0x5D,
+ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
+ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0xD5,
+ 0xAA, 0xAB, 0xA8, 0xA9, 0xAE, 0xAF, 0xAC, 0xAD,
+ 0xA2, 0xA3, 0xA0, 0xA1, 0xA6, 0xA7, 0xA4, 0xA5,
+ 0xBA, 0xBB, 0xB8, 0xB9, 0xBE, 0xBF, 0xBC, 0xBD,
+ 0xB2, 0xB3, 0xB0, 0xB1, 0xB6, 0xB7, 0xB4, 0xB5,
+ 0x8B, 0x88, 0x89, 0x8E, 0x8F, 0x8C, 0x8D, 0x82,
+ 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85, 0x9A,
+ 0x9B, 0x98, 0x99, 0x9E, 0x9F, 0x9C, 0x9D, 0x92,
+ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xEB,
+ 0xE8, 0xE9, 0xEE, 0xEF, 0xEC, 0xED, 0xE2, 0xE3,
+ 0xE0, 0xE1, 0xE6, 0xE7, 0xE4, 0xE5, 0xFB, 0xF9,
+ 0xFE, 0xFF, 0xFC, 0xFD, 0xF2, 0xF3, 0xF0, 0xF1,
+ 0xF6, 0xF7, 0xF4, 0xF5, 0xCB, 0xC9, 0xCF, 0xCD,
+ 0xC2, 0xC3, 0xC0, 0xC1, 0xC6, 0xC7, 0xC4, 0xC5,
+ 0xDA, 0xDB, 0xD8, 0xD9, 0xDE, 0xDF, 0xDC, 0xDD,
+ 0xD2, 0xD2, 0xD3, 0xD3, 0xD0, 0xD0, 0xD1, 0xD1,
+ 0xD6, 0xD6, 0xD7, 0xD7, 0xD4, 0xD4, 0xD5, 0xD5
+ };
+
+ while (len--)
+ *buff++ = table_ulaw2alaw[*(unsigned char *)buff];
+}
+
+static void alaw2ulaw(unsigned char *buff, unsigned long len)
+{
+ static unsigned char table_alaw2ulaw[] =
+ {
+ 0x29, 0x2A, 0x27, 0x28, 0x2D, 0x2E, 0x2B, 0x2C,
+ 0x21, 0x22, 0x1F, 0x20, 0x25, 0x26, 0x23, 0x24,
+ 0x39, 0x3A, 0x37, 0x38, 0x3D, 0x3E, 0x3B, 0x3C,
+ 0x31, 0x32, 0x2F, 0x30, 0x35, 0x36, 0x33, 0x34,
+ 0x0A, 0x0B, 0x08, 0x09, 0x0E, 0x0F, 0x0C, 0x0D,
+ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
+ 0x1A, 0x1B, 0x18, 0x19, 0x1E, 0x1F, 0x1C, 0x1D,
+ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
+ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
+ 0x5D, 0x5D, 0x5C, 0x5C, 0x5F, 0x5F, 0x5E, 0x5E,
+ 0x74, 0x76, 0x70, 0x72, 0x7C, 0x7E, 0x78, 0x7A,
+ 0x6A, 0x6B, 0x68, 0x69, 0x6E, 0x6F, 0x6C, 0x6D,
+ 0x48, 0x49, 0x46, 0x47, 0x4C, 0x4D, 0x4A, 0x4B,
+ 0x40, 0x41, 0x3F, 0x3F, 0x44, 0x45, 0x42, 0x43,
+ 0x56, 0x57, 0x54, 0x55, 0x5A, 0x5B, 0x58, 0x59,
+ 0x4F, 0x4F, 0x4E, 0x4E, 0x52, 0x53, 0x50, 0x51,
+ 0xA9, 0xAA, 0xA7, 0xA8, 0xAD, 0xAE, 0xAB, 0xAC,
+ 0xA1, 0xA2, 0x9F, 0xA0, 0xA5, 0xA6, 0xA3, 0xA4,
+ 0xB9, 0xBA, 0xB7, 0xB8, 0xBD, 0xBE, 0xBB, 0xBC,
+ 0xB1, 0xB2, 0xAF, 0xB0, 0xB5, 0xB6, 0xB3, 0xB4,
+ 0x8A, 0x8B, 0x88, 0x89, 0x8E, 0x8F, 0x8C, 0x8D,
+ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
+ 0x9A, 0x9B, 0x98, 0x99, 0x9E, 0x9F, 0x9C, 0x9D,
+ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
+ 0xE2, 0xE3, 0xE0, 0xE1, 0xE6, 0xE7, 0xE4, 0xE5,
+ 0xDD, 0xDD, 0xDC, 0xDC, 0xDF, 0xDF, 0xDE, 0xDE,
+ 0xF4, 0xF6, 0xF0, 0xF2, 0xFC, 0xFE, 0xF8, 0xFA,
+ 0xEA, 0xEB, 0xE8, 0xE9, 0xEE, 0xEF, 0xEC, 0xED,
+ 0xC8, 0xC9, 0xC6, 0xC7, 0xCC, 0xCD, 0xCA, 0xCB,
+ 0xC0, 0xC1, 0xBF, 0xBF, 0xC4, 0xC5, 0xC2, 0xC3,
+ 0xD6, 0xD7, 0xD4, 0xD5, 0xDA, 0xDB, 0xD8, 0xD9,
+ 0xCF, 0xCF, 0xCE, 0xCE, 0xD2, 0xD3, 0xD0, 0xD1
+ };
+
+ while (len--)
+ *buff++ = table_alaw2ulaw[*(unsigned char *)buff];
+}
+
+static ssize_t ixj_read(struct file * file_p, char *buf, size_t length, loff_t * ppos)
{
unsigned long i = *ppos;
- IXJ *j = ixj[NUM(file_p->f_dentry->d_inode->i_rdev)];
- DECLARE_WAITQUEUE(wait, current);
+ IXJ * j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ DECLARE_WAITQUEUE(wait, current);
if (j->flags.inread)
return -EALREADY;
@@ -1814,12 +2870,6 @@
while (!j->read_buffer_ready || (j->dtmf_state && j->flags.dtmf_oob)) {
++j->read_wait;
- if(j->tone_state) {
- set_current_state(TASK_RUNNING);
- remove_wait_queue(&j->read_q, &wait);
- j->flags.inread = 0;
- return -EAGAIN;
- }
if (file_p->f_flags & O_NONBLOCK) {
set_current_state(TASK_RUNNING);
remove_wait_queue(&j->read_q, &wait);
@@ -1844,27 +2894,25 @@
remove_wait_queue(&j->read_q, &wait);
set_current_state(TASK_RUNNING);
/* Don't ever copy more than the user asks */
- i = copy_to_user(buf, j->read_buffer,
- min(unsigned int, length, j->read_buffer_size));
+ if(j->rec_codec == ALAW)
+ ulaw2alaw(j->read_buffer, min(length, j->read_buffer_size));
+ i = copy_to_user(buf, j->read_buffer, min(length, j->read_buffer_size));
j->read_buffer_ready = 0;
if (i) {
j->flags.inread = 0;
return -EFAULT;
} else {
j->flags.inread = 0;
- return min(unsigned int, length, j->read_buffer_size);
+ return min(length, j->read_buffer_size);
}
}
-ssize_t ixj_enhanced_read(struct file * file_p, char *buf, size_t length,
+static ssize_t ixj_enhanced_read(struct file * file_p, char *buf, size_t length,
loff_t * ppos)
{
int pre_retval;
ssize_t read_retval = 0;
- IXJ *j = ixj[NUM(file_p->f_dentry->d_inode->i_rdev)];
-
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
pre_retval = ixj_PreRead(j, 0L);
switch (pre_retval) {
@@ -1884,14 +2932,12 @@
return read_retval;
}
-ssize_t ixj_write(struct file *file_p, const char *buf, size_t count, loff_t * ppos)
+static ssize_t ixj_write(struct file *file_p, const char *buf, size_t count, loff_t * ppos)
{
unsigned long i = *ppos;
IXJ *j = file_p->private_data;
- DECLARE_WAITQUEUE(wait, current);
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ DECLARE_WAITQUEUE(wait, current);
if (j->flags.inwrite)
return -EALREADY;
@@ -1905,12 +2951,6 @@
while (!j->write_buffers_empty) {
++j->write_wait;
- if(j->tone_state) {
- set_current_state(TASK_RUNNING);
- remove_wait_queue(&j->write_q, &wait);
- j->flags.inwrite = 0;
- return -EAGAIN;
- }
if (file_p->f_flags & O_NONBLOCK) {
set_current_state(TASK_RUNNING);
remove_wait_queue(&j->write_q, &wait);
@@ -1935,30 +2975,29 @@
remove_wait_queue(&j->write_q, &wait);
if (j->write_buffer_wp + count >= j->write_buffer_end)
j->write_buffer_wp = j->write_buffer;
- i = copy_from_user(j->write_buffer_wp, buf,
- min(unsigned int, count, j->write_buffer_size));
+ i = copy_from_user(j->write_buffer_wp, buf, min(count, j->write_buffer_size));
if (i) {
j->flags.inwrite = 0;
return -EFAULT;
}
+ if(j->play_codec == ALAW)
+ alaw2ulaw(j->write_buffer_wp, min(count, j->write_buffer_size));
j->flags.inwrite = 0;
- return min(unsigned int, count, j->write_buffer_size);
+ return min(count, j->write_buffer_size);
}
-ssize_t ixj_enhanced_write(struct file * file_p, const char *buf, size_t count, loff_t * ppos)
+static ssize_t ixj_enhanced_write(struct file * file_p, const char *buf, size_t count, loff_t * ppos)
{
int pre_retval;
ssize_t write_retval = 0;
- IXJ *j = ixj[NUM(file_p->f_dentry->d_inode->i_rdev)];
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
pre_retval = ixj_PreWrite(j, 0L);
switch (pre_retval) {
case NORMAL:
write_retval = ixj_write(file_p, buf, count, ppos);
- if (write_retval != -EFAULT) {
+ if (write_retval > 0) {
ixj_PostWrite(j, 0L);
j->write_buffer_wp += write_retval;
j->write_buffers_empty--;
@@ -1966,7 +3005,7 @@
break;
case NOPOST:
write_retval = ixj_write(file_p, buf, count, ppos);
- if (write_retval != -EFAULT) {
+ if (write_retval > 0) {
j->write_buffer_wp += write_retval;
j->write_buffers_empty--;
}
@@ -1996,8 +3035,8 @@
udelay(10);
}
}
- // Throw away word 0 of the 8021 compressed format to get standard G.729.
- if (j->rec_codec == G729 && (cnt == 0 || cnt == 5 || cnt == 10)) {
+ /* Throw away word 0 of the 8021 compressed format to get standard G.729. */
+ if (j->rec_codec == G729 && (cnt == 0 || cnt == 10 || cnt == 20)) {
inb_p(j->DSPbase + 0x0E);
inb_p(j->DSPbase + 0x0F);
}
@@ -2006,15 +3045,7 @@
}
++j->framesread;
if (j->intercom != -1) {
- IXJ *icom = ixj[j->intercom];
-
- if (icom == NULL) { /* shouldn't happen! */
- printk(KERN_ERR "ixj_read_frame(): j->intercom = %d = NULL!",
- j->intercom);
- return;
- }
-
- if (IsTxReady(icom)) {
+ if (IsTxReady(get_ixj(j->intercom))) {
for (cnt = 0; cnt < j->rec_frame_size * 2; cnt += 2) {
if (!(cnt % 16) && !IsTxReady(j)) {
dly = 0;
@@ -2026,18 +3057,19 @@
udelay(10);
}
}
- outb_p(*(j->read_buffer + cnt), icom->DSPbase + 0x0C);
- outb_p(*(j->read_buffer + cnt + 1), icom->DSPbase + 0x0D);
+ outb_p(*(j->read_buffer + cnt), get_ixj(j->intercom)->DSPbase + 0x0C);
+ outb_p(*(j->read_buffer + cnt + 1), get_ixj(j->intercom)->DSPbase + 0x0D);
}
- ++icom->frameswritten;
+ get_ixj(j->intercom)->frameswritten++;
}
} else {
j->read_buffer_ready = 1;
- wake_up_interruptible(&j->read_q); // Wake any blocked readers
+ wake_up_interruptible(&j->read_q); /* Wake any blocked readers */
- wake_up_interruptible(&j->poll_q); // Wake any blocked selects
+ wake_up_interruptible(&j->poll_q); /* Wake any blocked selects */
- ixj_kill_fasync(j, POLL_IN);
+ if(j->ixj_signals[SIG_READ_READY])
+ ixj_kill_fasync(j, SIG_READ_READY, POLL_OUT);
}
}
}
@@ -2101,25 +3133,10 @@
static void ixj_write_cid_bit(IXJ *j, int bit)
{
- int dly;
- IXJ_WORD dat;
-
while (j->fskcnt < 20) {
- if (!IsTxReady(j)) {
- dly = 0;
- while (!IsTxReady(j)) {
- if (dly++ > 5) {
- dly = 0;
- // break;
- // printk("CID delay\n");
- }
- udelay(10);
- }
- }
- dat.word = j->fskdata[j->fskdcnt++] =
- fsk[bit][j->fskz][j->fskcnt];
- outb_p(dat.bytes.low, j->DSPbase + 0x0C);
- outb_p(dat.bytes.high, j->DSPbase + 0x0D);
+ if(j->fskdcnt < (j->fsksize - 1))
+ j->fskdata[j->fskdcnt++] = fsk[bit][j->fskz][j->fskcnt];
+
j->fskcnt += 3;
}
j->fskcnt %= 20;
@@ -2131,52 +3148,51 @@
}
-static void ixj_write_cid_byte(IXJ *board, char byte)
+static void ixj_write_cid_byte(IXJ *j, char byte)
{
IXJ_CBYTE cb;
-// printk("Writing CID data %x - %c\n", byte, byte);
- cb.cbyte = byte;
- ixj_write_cid_bit(board, 0);
- ixj_write_cid_bit(board, cb.cbits.b0 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b1 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b2 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b3 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b4 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b5 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b6 ? 1 : 0);
- ixj_write_cid_bit(board, cb.cbits.b7 ? 1 : 0);
- ixj_write_cid_bit(board, 1);
+ cb.cbyte = byte;
+ ixj_write_cid_bit(j, 0);
+ ixj_write_cid_bit(j, cb.cbits.b0 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b1 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b2 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b3 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b4 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b5 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b6 ? 1 : 0);
+ ixj_write_cid_bit(j, cb.cbits.b7 ? 1 : 0);
+ ixj_write_cid_bit(j, 1);
}
-static void ixj_write_cid_seize(IXJ *board)
+static void ixj_write_cid_seize(IXJ *j)
{
int cnt;
for (cnt = 0; cnt < 150; cnt++) {
- ixj_write_cid_bit(board, 0);
- ixj_write_cid_bit(board, 1);
+ ixj_write_cid_bit(j, 0);
+ ixj_write_cid_bit(j, 1);
}
for (cnt = 0; cnt < 180; cnt++) {
- ixj_write_cid_bit(board, 1);
+ ixj_write_cid_bit(j, 1);
}
}
-static void ixj_write_cidcw_seize(IXJ *board)
+static void ixj_write_cidcw_seize(IXJ *j)
{
int cnt;
for (cnt = 0; cnt < 80; cnt++) {
- ixj_write_cid_bit(board, 1);
+ ixj_write_cid_bit(j, 1);
}
}
-static int ixj_write_cid_string(IXJ *board, char *s, int checksum)
+static int ixj_write_cid_string(IXJ *j, char *s, int checksum)
{
int cnt;
for (cnt = 0; cnt < strlen(s); cnt++) {
- ixj_write_cid_byte(board, s[cnt]);
+ ixj_write_cid_byte(j, s[cnt]);
checksum = (checksum + s[cnt]);
}
return checksum;
@@ -2184,33 +3200,85 @@
static void ixj_pad_fsk(IXJ *j, int pad)
{
- int cnt, dly;
+ int cnt;
for (cnt = 0; cnt < pad; cnt++) {
- if (!IsTxReady(j)) {
- dly = 0;
- while (!IsTxReady(j)) {
- if (dly++ > 5) {
- dly = 0;
- }
- udelay(10);
- }
- }
- outb_p(0x00, j->DSPbase + 0x0C);
- outb_p(0x00, j->DSPbase + 0x0D);
+ if(j->fskdcnt < (j->fsksize - 1))
+ j->fskdata[j->fskdcnt++] = 0x0000;
}
for (cnt = 0; cnt < 720; cnt++) {
- if (!IsTxReady(j)) {
- dly = 0;
- while (!IsTxReady(j)) {
- if (dly++ > 5) {
- dly = 0;
- }
- udelay(10);
- }
- }
- outb_p(0x00, j->DSPbase + 0x0C);
- outb_p(0x00, j->DSPbase + 0x0D);
+ if(j->fskdcnt < (j->fsksize - 1))
+ j->fskdata[j->fskdcnt++] = 0x0000;
+ }
+}
+
+static void ixj_pre_cid(IXJ *j)
+{
+ j->cid_play_codec = j->play_codec;
+ j->cid_play_frame_size = j->play_frame_size;
+ j->cid_play_volume = get_play_volume(j);
+ j->cid_play_flag = j->flags.playing;
+
+ j->cid_rec_codec = j->rec_codec;
+ j->cid_rec_volume = get_rec_volume(j);
+ j->cid_rec_flag = j->flags.recording;
+
+ j->cid_play_aec_level = j->aec_level;
+
+ switch(j->baseframe.low) {
+ case 0xA0:
+ j->cid_base_frame_size = 20;
+ break;
+ case 0x50:
+ j->cid_base_frame_size = 10;
+ break;
+ case 0xF0:
+ j->cid_base_frame_size = 30;
+ break;
+ }
+
+ ixj_play_stop(j);
+ ixj_cpt_stop(j);
+
+ j->flags.cidplay = 1;
+
+ set_base_frame(j, 30);
+ set_play_codec(j, LINEAR16);
+ set_play_volume(j, 0x1B);
+ ixj_play_start(j);
+}
+
+static void ixj_post_cid(IXJ *j)
+{
+ ixj_play_stop(j);
+
+ if(j->cidsize > 5000) {
+ SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
+ }
+ j->flags.cidplay = 0;
+ if(ixjdebug & 0x0200) {
+ printk("IXJ phone%d Finished Playing CallerID data %ld\n", j->board, jiffies);
+ }
+
+ ixj_fsk_free(j);
+
+ j->fskdcnt = 0;
+ set_base_frame(j, j->cid_base_frame_size);
+ set_play_codec(j, j->cid_play_codec);
+ ixj_aec_start(j, j->cid_play_aec_level);
+ set_play_volume(j, j->cid_play_volume);
+
+ set_rec_codec(j, j->cid_rec_codec);
+ set_rec_volume(j, j->cid_rec_volume);
+
+ if(j->cid_rec_flag)
+ ixj_record_start(j);
+
+ if(j->cid_play_flag)
+ ixj_play_start(j);
+
+ if(j->cid_play_flag) {
+ wake_up_interruptible(&j->write_q); /* Wake any blocked writers */
}
}
@@ -2224,13 +3292,13 @@
int checksum = 0;
- if (j->dsp.low == 0x20)
+ if (j->dsp.low == 0x20 || j->flags.cidplay)
return;
- j->fskz = j->fskphase = j->fskcnt =
- j->fskdcnt = 0;
+ j->fskz = j->fskphase = j->fskcnt = j->fskdcnt = 0;
+ j->cidsize = j->cidcnt = 0;
- j->flags.cidplay = 1;
+ ixj_fsk_alloc(j);
strcpy(sdmf1, j->cid_send.month);
strcat(sdmf1, j->cid_send.day);
@@ -2244,54 +3312,53 @@
len3 = strlen(sdmf3);
mdmflen = len1 + len2 + len3 + 6;
- set_base_frame(j, 30);
- set_play_codec(j, LINEAR16);
-
- if (j->port == PORT_POTS)
- if(!j->r_hook)
- SLIC_SetState(PLD_SLIC_STATE_OHT, j);
-
- set_play_volume(j, 0x1B);
- ixj_play_start(j);
- ixj_write_cid_seize(j);
-
- ixj_write_cid_byte(j, 0x80);
- checksum = 0x80;
- ixj_write_cid_byte(j, mdmflen);
- checksum = checksum + mdmflen;
+ while(1){
+ ixj_write_cid_seize(j);
- ixj_write_cid_byte(j, 0x01);
- checksum = checksum + 0x01;
- ixj_write_cid_byte(j, len1);
- checksum = checksum + len1;
- checksum = ixj_write_cid_string(j, sdmf1, checksum);
+ ixj_write_cid_byte(j, 0x80);
+ checksum = 0x80;
+ ixj_write_cid_byte(j, mdmflen);
+ checksum = checksum + mdmflen;
- ixj_write_cid_byte(j, 0x02);
- checksum = checksum + 0x02;
- ixj_write_cid_byte(j, len2);
- checksum = checksum + len2;
- checksum = ixj_write_cid_string(j, sdmf2, checksum);
+ ixj_write_cid_byte(j, 0x01);
+ checksum = checksum + 0x01;
+ ixj_write_cid_byte(j, len1);
+ checksum = checksum + len1;
+ checksum = ixj_write_cid_string(j, sdmf1, checksum);
+ if(ixj_hookstate(j) & 1)
+ break;
- ixj_write_cid_byte(j, 0x07);
- checksum = checksum + 0x07;
- ixj_write_cid_byte(j, len3);
- checksum = checksum + len3;
- checksum = ixj_write_cid_string(j, sdmf3, checksum);
+ ixj_write_cid_byte(j, 0x02);
+ checksum = checksum + 0x02;
+ ixj_write_cid_byte(j, len2);
+ checksum = checksum + len2;
+ checksum = ixj_write_cid_string(j, sdmf2, checksum);
+ if(ixj_hookstate(j) & 1)
+ break;
- checksum %= 256;
- checksum ^= 0xFF;
- checksum += 1;
+ ixj_write_cid_byte(j, 0x07);
+ checksum = checksum + 0x07;
+ ixj_write_cid_byte(j, len3);
+ checksum = checksum + len3;
+ checksum = ixj_write_cid_string(j, sdmf3, checksum);
+ if(ixj_hookstate(j) & 1)
+ break;
- ixj_write_cid_byte(j, (char) checksum);
+ checksum %= 256;
+ checksum ^= 0xFF;
+ checksum += 1;
- pad = j->fskdcnt % 240;
- if (pad) {
- pad = 240 - pad;
+ ixj_write_cid_byte(j, (char) checksum);
+
+ pad = j->fskdcnt % 240;
+ if (pad) {
+ pad = 240 - pad;
+ }
+ ixj_pad_fsk(j, pad);
+ break;
}
- ixj_pad_fsk(j, pad);
- SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
- j->flags.cidplay = 0;
- ixj_play_stop(j);
+
+ ixj_write_frame(j);
}
static void ixj_write_cidcw(IXJ *j)
@@ -2306,12 +3373,15 @@
int checksum = 0;
- if (j->dsp.low == 0x20)
+ if (j->dsp.low == 0x20 || j->flags.cidplay)
return;
j->fskz = j->fskphase = j->fskcnt = j->fskdcnt = 0;
+ j->cidsize = j->cidcnt = 0;
- j->flags.cidplay = 1;
+ ixj_fsk_alloc(j);
+
+ j->flags.cidcw_ack = 0;
ti.tone_index = 23;
ti.gain0 = 1;
@@ -2320,6 +3390,26 @@
ti.freq1 = 0;
ixj_init_tone(j, &ti);
+ ixj_set_tone_on(1500, j);
+ ixj_set_tone_off(32, j);
+ if(ixjdebug & 0x0200) {
+ printk("IXJ cidcw phone%d first tone start at %ld\n", j->board, jiffies);
+ }
+ ixj_play_tone(j, 23);
+
+ clear_bit(j->board, &j->busyflags);
+ while(j->tone_state) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ if(ixjdebug & 0x0200) {
+ printk("IXJ cidcw phone%d first tone end at %ld\n", j->board, jiffies);
+ }
+
ti.tone_index = 24;
ti.gain0 = 1;
ti.freq0 = hz2130;
@@ -2327,33 +3417,51 @@
ti.freq1 = hz2750;
ixj_init_tone(j, &ti);
- ixj_set_tone_on(1200, j);
- ixj_play_tone(j, 23);
+ ixj_set_tone_off(10, j);
+ ixj_set_tone_on(600, j);
+ if(ixjdebug & 0x0200) {
+ printk("IXJ cidcw phone%d second tone start at %ld\n", j->board, jiffies);
+ }
+ ixj_play_tone(j, 24);
+ clear_bit(j->board, &j->busyflags);
while(j->tone_state) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
-
- ixj_set_tone_on(320, j);
- ixj_play_tone(j, 24);
-
- while(j->tone_state) {
+ while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
+ if(ixjdebug & 0x0200) {
+ printk("IXJ cidcw phone%d sent second tone at %ld\n", j->board, jiffies);
+ }
- j->cidcw_wait = jiffies + (200 * hertz / 100000);
+ j->cidcw_wait = jiffies + ((50 * hertz) / 100);
+ clear_bit(j->board, &j->busyflags);
while(!j->flags.cidcw_ack && time_before(jiffies, j->cidcw_wait)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
-
+ while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ j->cidcw_wait = 0;
if(!j->flags.cidcw_ack) {
+ if(ixjdebug & 0x0200) {
+ printk("IXJ cidcw phone%d did not recieve ACK from display %ld\n", j->board, jiffies);
+ }
+ ixj_post_cid(j);
+ if(j->cid_play_flag) {
+ wake_up_interruptible(&j->write_q); /* Wake any blocked readers */
+ }
return;
+ } else {
+ ixj_pre_cid(j);
}
-
+ j->flags.cidcw_ack = 0;
strcpy(sdmf1, j->cid_send.month);
strcat(sdmf1, j->cid_send.day);
strcat(sdmf1, j->cid_send.hour);
@@ -2366,25 +3474,6 @@
len3 = strlen(sdmf3);
mdmflen = len1 + len2 + len3 + 6;
- j->cid_play_codec = j->play_codec;
- ixj_play_stop(j);
-
- switch(j->baseframe.low) {
- case 0xA0:
- j->cid_base_frame_size = 20;
- break;
- case 0x50:
- j->cid_base_frame_size = 10;
- break;
- default:
- j->cid_base_frame_size = 30;
- break;
- }
- set_base_frame(j, 30);
- set_play_codec(j, LINEAR16);
-
- set_play_volume(j, 0x1B);
- ixj_play_start(j);
ixj_write_cidcw_seize(j);
ixj_write_cid_byte(j, 0x80);
@@ -2421,11 +3510,9 @@
pad = 240 - pad;
}
ixj_pad_fsk(j, pad);
- j->flags.cidplay = 0;
- ixj_play_stop(j);
-
- set_base_frame(j, j->cid_base_frame_size);
- set_play_codec(j, j->cid_play_codec);
+ if(ixjdebug & 0x0200) {
+ printk("IXJ cidcw phone%d sent FSK data at %ld\n", j->board, jiffies);
+ }
}
static void ixj_write_vmwi(IXJ *j, int msg)
@@ -2435,23 +3522,19 @@
int checksum = 0;
- if (j->dsp.low == 0x20)
+ if (j->dsp.low == 0x20 || j->flags.cidplay)
return;
j->fskz = j->fskphase = j->fskcnt = j->fskdcnt = 0;
+ j->cidsize = j->cidcnt = 0;
- j->flags.cidplay = 1;
+ ixj_fsk_alloc(j);
mdmflen = 3;
- set_base_frame(j, 30);
- set_play_codec(j, LINEAR16);
-
if (j->port == PORT_POTS)
SLIC_SetState(PLD_SLIC_STATE_OHT, j);
- set_play_volume(j, 0x1B);
- ixj_play_start(j);
ixj_write_cid_seize(j);
ixj_write_cid_byte(j, 0x82);
@@ -2484,18 +3567,49 @@
pad = 240 - pad;
}
ixj_pad_fsk(j, pad);
- SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
- j->flags.cidplay = 0;
- ixj_play_stop(j);
}
static void ixj_write_frame(IXJ *j)
{
int cnt, frame_count, dly;
+ IXJ_WORD dat;
BYTES blankword;
frame_count = 0;
- if (j->write_buffer && j->write_buffers_empty < 2) {
+ if(j->flags.cidplay) {
+ for(cnt = 0; cnt < 480; cnt++) {
+ if (!(cnt % 16) && !IsTxReady(j)) {
+ dly = 0;
+ while (!IsTxReady(j)) {
+ if (dly++ > 5) {
+ dly = 0;
+ break;
+ }
+ udelay(10);
+ }
+ }
+ dat.word = j->fskdata[j->cidcnt++];
+ outb_p(dat.bytes.low, j->DSPbase + 0x0C);
+ outb_p(dat.bytes.high, j->DSPbase + 0x0D);
+ cnt++;
+ }
+ if(j->cidcnt >= j->fskdcnt) {
+ ixj_post_cid(j);
+ }
+ /* This may seem rude, but if we just played one frame of FSK data for CallerID
+ and there is real audio data in the buffer, we need to throw it away because
+ we just used it's time slot */
+ if (j->write_buffer_rp > j->write_buffer_wp) {
+ j->write_buffer_rp += j->cid_play_frame_size * 2;
+ if (j->write_buffer_rp >= j->write_buffer_end) {
+ j->write_buffer_rp = j->write_buffer;
+ }
+ j->write_buffers_empty++;
+ wake_up_interruptible(&j->write_q); /* Wake any blocked writers */
+
+ wake_up_interruptible(&j->poll_q); /* Wake any blocked selects */
+ }
+ } else if (j->write_buffer && j->write_buffers_empty < 1) {
if (j->write_buffer_wp > j->write_buffer_rp) {
frame_count =
(j->write_buffer_wp - j->write_buffer_rp) / (j->play_frame_size * 2);
@@ -2535,6 +3649,29 @@
outb_p((blankword.high), j->DSPbase + 0x0D);
}
j->flags.play_first_frame = 0;
+ } else if (j->play_codec == G723_63 && j->flags.play_first_frame) {
+ for (cnt = 0; cnt < 24; cnt++) {
+ if(cnt == 12) {
+ blankword.low = 0x02;
+ blankword.high = 0x00;
+ }
+ else {
+ blankword.low = blankword.high = 0x00;
+ }
+ if (!(cnt % 16) && !IsTxReady(j)) {
+ dly = 0;
+ while (!IsTxReady(j)) {
+ if (dly++ > 5) {
+ dly = 0;
+ break;
+ }
+ udelay(10);
+ }
+ }
+ outb_p((blankword.low), j->DSPbase + 0x0C);
+ outb_p((blankword.high), j->DSPbase + 0x0D);
+ }
+ j->flags.play_first_frame = 0;
}
for (cnt = 0; cnt < j->play_frame_size * 2; cnt += 2) {
if (!(cnt % 16) && !IsTxReady(j)) {
@@ -2547,11 +3684,20 @@
udelay(10);
}
}
-// Add word 0 to G.729 frames for the 8021. Right now we don't do VAD/CNG
- // so all frames are type 1.
- if (j->play_codec == G729 && (cnt == 0 || cnt == 5 || cnt == 10)) {
- outb_p(0x01, j->DSPbase + 0x0C);
- outb_p(0x00, j->DSPbase + 0x0D);
+ /* Add word 0 to G.729 frames for the 8021. Right now we don't do VAD/CNG */
+ if (j->play_codec == G729 && (cnt == 0 || cnt == 10 || cnt == 20)) {
+ if(j->write_buffer_rp + cnt == 0 && j->write_buffer_rp + cnt + 1 == 0 && j->write_buffer_rp + cnt + 2 == 0 &&
+ j->write_buffer_rp + cnt + 3 == 0 && j->write_buffer_rp + cnt + 4 == 0 && j->write_buffer_rp + cnt + 5 == 0 &&
+ j->write_buffer_rp + cnt + 6 == 0 && j->write_buffer_rp + cnt + 7 == 0 && j->write_buffer_rp + cnt + 8 == 0 &&
+ j->write_buffer_rp + cnt + 9 == 0) {
+ /* someone is trying to write silence lets make this a type 0 frame. */
+ outb_p(0x00, j->DSPbase + 0x0C);
+ outb_p(0x00, j->DSPbase + 0x0D);
+ } else {
+ /* so all other frames are type 1. */
+ outb_p(0x01, j->DSPbase + 0x0C);
+ outb_p(0x00, j->DSPbase + 0x0D);
+ }
}
outb_p(*(j->write_buffer_rp + cnt), j->DSPbase + 0x0C);
outb_p(*(j->write_buffer_rp + cnt + 1), j->DSPbase + 0x0D);
@@ -2563,27 +3709,35 @@
j->write_buffer_rp = j->write_buffer;
}
j->write_buffers_empty++;
- wake_up_interruptible(&j->write_q); // Wake any blocked writers
+ wake_up_interruptible(&j->write_q); /* Wake any blocked writers */
- wake_up_interruptible(&j->poll_q); // Wake any blocked selects
+ wake_up_interruptible(&j->poll_q); /* Wake any blocked selects */
- ixj_kill_fasync(j, POLL_OUT);
++j->frameswritten;
}
} else {
j->drybuffer++;
}
+ if(j->ixj_signals[SIG_WRITE_READY]) {
+ ixj_kill_fasync(j, SIG_WRITE_READY, POLL_OUT);
+ }
}
static int idle(IXJ *j)
{
- if (ixj_WriteDSPCommand(0x0000, j)) // DSP Idle
+ if (ixj_WriteDSPCommand(0x0000, j)) /* DSP Idle */
return 0;
- if (j->ssr.high || j->ssr.low)
+
+ if (j->ssr.high || j->ssr.low) {
return 0;
- else
+ } else {
+ j->play_mode = -1;
+ j->flags.playing = 0;
+ j->rec_mode = -1;
+ j->flags.recording = 0;
return 1;
+ }
}
static int set_base_frame(IXJ *j, int size)
@@ -2591,6 +3745,8 @@
unsigned short cmd;
int cnt;
+ idle(j);
+ j->cid_play_aec_level = j->aec_level;
aec_stop(j);
for (cnt = 0; cnt < 10; cnt++) {
if (idle(j))
@@ -2627,7 +3783,12 @@
} else {
j->baseframe.high = j->ssr.high;
j->baseframe.low = j->ssr.low;
+ /* If the status returned is 0x0000 (pg9-9 8021) the call failed */
+ if(j->baseframe.high == 0x00 && j->baseframe.low == 0x00) {
+ return -1;
+ }
}
+ ixj_aec_start(j, j->cid_play_aec_level);
return size;
}
@@ -2708,6 +3869,28 @@
retval = 1;
}
break;
+ case G729B:
+ if (j->dsp.low != 0x20) {
+ if (!j->flags.g729_loaded) {
+ retval = 1;
+ break;
+ }
+ switch (j->baseframe.low) {
+ case 0xA0:
+ j->rec_frame_size = 12;
+ break;
+ case 0x50:
+ j->rec_frame_size = 6;
+ break;
+ default:
+ j->rec_frame_size = 18;
+ break;
+ }
+ j->rec_mode = 0;
+ } else {
+ retval = 1;
+ }
+ break;
case ULAW:
switch (j->baseframe.low) {
case 0xA0:
@@ -2800,7 +3983,10 @@
ixj_record_stop(j);
}
j->flags.recording = 1;
- ixj_WriteDSPCommand(0x0FE0, j); // Put the DSP in full power mode.
+ ixj_WriteDSPCommand(0x0FE0, j); /* Put the DSP in full power mode. */
+
+ if(ixjdebug & 0x0002)
+ printk("IXJ %d Starting Record Codec %d at %ld\n", j->board, j->rec_codec, jiffies);
if (!j->rec_mode) {
switch (j->rec_codec) {
@@ -2811,21 +3997,22 @@
cmd = 0x5132;
break;
case TS85:
- cmd = 0x5130; // TrueSpeech 8.5
+ cmd = 0x5130; /* TrueSpeech 8.5 */
break;
case TS48:
- cmd = 0x5133; // TrueSpeech 4.8
+ cmd = 0x5133; /* TrueSpeech 4.8 */
break;
case TS41:
- cmd = 0x5134; // TrueSpeech 4.1
+ cmd = 0x5134; /* TrueSpeech 4.1 */
break;
case G728:
cmd = 0x5135;
break;
case G729:
+ case G729B:
cmd = 0x5136;
break;
default:
@@ -2838,67 +4025,70 @@
if (!j->read_buffer)
j->read_buffer = kmalloc(j->rec_frame_size * 2, GFP_ATOMIC);
if (!j->read_buffer) {
- printk("Read buffer allocation for ixj board %d failed!\n",
- j->p.board);
+ printk("Read buffer allocation for ixj board %d failed!\n", j->board);
return -ENOMEM;
}
}
j->read_buffer_size = j->rec_frame_size * 2;
- if (ixj_WriteDSPCommand(0x5102, j)) // Set Poll sync mode
+ if (ixj_WriteDSPCommand(0x5102, j)) /* Set Poll sync mode */
return -1;
switch (j->rec_mode) {
case 0:
- cmd = 0x1C03; // Record C1
+ cmd = 0x1C03; /* Record C1 */
break;
case 4:
if (j->ver.low == 0x12) {
- cmd = 0x1E03; // Record C1
+ cmd = 0x1E03; /* Record C1 */
} else {
- cmd = 0x1E01; // Record C1
+ cmd = 0x1E01; /* Record C1 */
}
break;
case 5:
if (j->ver.low == 0x12) {
- cmd = 0x1E83; // Record C1
+ cmd = 0x1E83; /* Record C1 */
} else {
- cmd = 0x1E81; // Record C1
+ cmd = 0x1E81; /* Record C1 */
}
break;
case 6:
if (j->ver.low == 0x12) {
- cmd = 0x1F03; // Record C1
+ cmd = 0x1F03; /* Record C1 */
} else {
- cmd = 0x1F01; // Record C1
+ cmd = 0x1F01; /* Record C1 */
}
break;
case 7:
if (j->ver.low == 0x12) {
- cmd = 0x1F83; // Record C1
-
+ cmd = 0x1F83; /* Record C1 */
} else {
- cmd = 0x1F81; // Record C1
-
+ cmd = 0x1F81; /* Record C1 */
}
break;
}
if (ixj_WriteDSPCommand(cmd, j))
return -1;
+ if (j->flags.playing) {
+ ixj_aec_start(j, j->aec_level);
+ }
return 0;
}
static void ixj_record_stop(IXJ *j)
{
+ if(ixjdebug & 0x0002)
+ printk("IXJ %d Stopping Record Codec %d at %ld\n", j->board, j->rec_codec, jiffies);
+
if (j->read_buffer) {
kfree(j->read_buffer);
j->read_buffer = NULL;
@@ -2909,9 +4099,6 @@
j->rec_mode = -1;
}
j->flags.recording = 0;
- if (!j->flags.playing)
- ixj_WriteDSPCommand(0x0FE3, j); // Put the DSP in 1/5 power mode.
-
}
static void ixj_vad(IXJ *j, int arg)
{
@@ -2930,18 +4117,118 @@
ixj_WriteDSPCommand(0x5180 + depth, j);
}
-static void set_rec_volume(IXJ *j, int volume)
+static void set_dtmf_prescale(IXJ *j, int volume)
{
- ixj_WriteDSPCommand(0xCF03, j);
+ ixj_WriteDSPCommand(0xCF07, j);
ixj_WriteDSPCommand(volume, j);
}
-static int get_rec_volume(IXJ *j)
+static int get_dtmf_prescale(IXJ *j)
{
- ixj_WriteDSPCommand(0xCF01, j);
+ ixj_WriteDSPCommand(0xCF05, j);
return j->ssr.high << 8 | j->ssr.low;
}
+static void set_rec_volume(IXJ *j, int volume)
+{
+ if(j->aec_level == AEC_AGC) {
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: /dev/phone%d Setting AGC Threshold to 0x%4.4x\n", j->board, volume);
+ ixj_WriteDSPCommand(0xCF96, j);
+ ixj_WriteDSPCommand(volume, j);
+ } else {
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: /dev/phone %d Setting Record Volume to 0x%4.4x\n", j->board, volume);
+ ixj_WriteDSPCommand(0xCF03, j);
+ ixj_WriteDSPCommand(volume, j);
+ }
+}
+
+static int set_rec_volume_linear(IXJ *j, int volume)
+{
+ int newvolume, dsprecmax;
+
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: /dev/phone %d Setting Linear Record Volume to 0x%4.4x\n", j->board, volume);
+ if(volume > 100 || volume < 0) {
+ return -1;
+ }
+
+ /* This should normalize the perceived volumes between the different cards caused by differences in the hardware */
+ switch (j->cardtype) {
+ case QTI_PHONEJACK:
+ dsprecmax = 0x440;
+ break;
+ case QTI_LINEJACK:
+ dsprecmax = 0x180;
+ ixj_mixer(0x0203, j); /*Voice Left Volume unmute 6db */
+ ixj_mixer(0x0303, j); /*Voice Right Volume unmute 6db */
+ ixj_mixer(0x0C00, j); /*Mono1 unmute 12db */
+ break;
+ case QTI_PHONEJACK_LITE:
+ dsprecmax = 0x4C0;
+ break;
+ case QTI_PHONEJACK_PCI:
+ dsprecmax = 0x100;
+ break;
+ case QTI_PHONECARD:
+ dsprecmax = 0x400;
+ break;
+ default:
+ return -1;
+ }
+ newvolume = (dsprecmax * volume) / 100;
+ set_rec_volume(j, newvolume);
+ return 0;
+}
+
+static int get_rec_volume(IXJ *j)
+{
+ if(j->aec_level == AEC_AGC) {
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "Getting AGC Threshold\n");
+ ixj_WriteDSPCommand(0xCF86, j);
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "AGC Threshold is 0x%2.2x%2.2x\n", j->ssr.high, j->ssr.low);
+ return j->ssr.high << 8 | j->ssr.low;
+ } else {
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "Getting Record Volume\n");
+ ixj_WriteDSPCommand(0xCF01, j);
+ return j->ssr.high << 8 | j->ssr.low;
+ }
+}
+
+static int get_rec_volume_linear(IXJ *j)
+{
+ int volume, newvolume, dsprecmax;
+
+ switch (j->cardtype) {
+ case QTI_PHONEJACK:
+ dsprecmax = 0x440;
+ break;
+ case QTI_LINEJACK:
+ dsprecmax = 0x180;
+ break;
+ case QTI_PHONEJACK_LITE:
+ dsprecmax = 0x4C0;
+ break;
+ case QTI_PHONEJACK_PCI:
+ dsprecmax = 0x100;
+ break;
+ case QTI_PHONECARD:
+ dsprecmax = 0x400;
+ break;
+ default:
+ return -1;
+ }
+ volume = get_rec_volume(j);
+ newvolume = (volume * 100) / dsprecmax;
+ if(newvolume > 100)
+ newvolume = 100;
+ return newvolume;
+}
+
static int get_rec_level(IXJ *j)
{
int retval;
@@ -2956,52 +4243,117 @@
static void ixj_aec_start(IXJ *j, int level)
{
j->aec_level = level;
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "AGC set = 0x%2.2x\n", j->aec_level);
if (!level) {
aec_stop(j);
} else {
- if (j->rec_codec == G729 || j->play_codec == G729) {
- ixj_WriteDSPCommand(0xE022, j); // Move AEC filter buffer
+ if (j->rec_codec == G729 || j->play_codec == G729 || j->rec_codec == G729B || j->play_codec == G729B) {
+ ixj_WriteDSPCommand(0xE022, j); /* Move AEC filter buffer */
ixj_WriteDSPCommand(0x0300, j);
}
- ixj_WriteDSPCommand(0xB001, j); // AEC On
+ ixj_WriteDSPCommand(0xB001, j); /* AEC On */
- ixj_WriteDSPCommand(0xE013, j); // Advanced AEC C1
+ ixj_WriteDSPCommand(0xE013, j); /* Advanced AEC C1 */
switch (level) {
case AEC_LOW:
- ixj_WriteDSPCommand(0x0000, j); // Advanced AEC C2 = off
+ ixj_WriteDSPCommand(0x0000, j); /* Advanced AEC C2 = off */
ixj_WriteDSPCommand(0xE011, j);
ixj_WriteDSPCommand(0xFFFF, j);
+
+ ixj_WriteDSPCommand(0xCF97, j); /* Set AGC Enable */
+ ixj_WriteDSPCommand(0x0000, j); /* to off */
+
break;
case AEC_MED:
- ixj_WriteDSPCommand(0x0600, j); // Advanced AEC C2 = on medium
+ ixj_WriteDSPCommand(0x0600, j); /* Advanced AEC C2 = on medium */
ixj_WriteDSPCommand(0xE011, j);
ixj_WriteDSPCommand(0x0080, j);
+
+ ixj_WriteDSPCommand(0xCF97, j); /* Set AGC Enable */
+ ixj_WriteDSPCommand(0x0000, j); /* to off */
+
break;
case AEC_HIGH:
- ixj_WriteDSPCommand(0x0C00, j); // Advanced AEC C2 = on high
+ ixj_WriteDSPCommand(0x0C00, j); /* Advanced AEC C2 = on high */
ixj_WriteDSPCommand(0xE011, j);
ixj_WriteDSPCommand(0x0080, j);
+
+ ixj_WriteDSPCommand(0xCF97, j); /* Set AGC Enable */
+ ixj_WriteDSPCommand(0x0000, j); /* to off */
+
+ break;
+
+ case AEC_AGC:
+ /* First we have to put the AEC into advance auto mode so that AGC will not conflict with it */
+ ixj_WriteDSPCommand(0x0002, j); /* Attenuation scaling factor of 2 */
+
+ ixj_WriteDSPCommand(0xE011, j);
+ ixj_WriteDSPCommand(0x0100, j); /* Higher Threshold Floor */
+
+ ixj_WriteDSPCommand(0xE012, j); /* Set Train and Lock */
+
+ if(j->cardtype == QTI_LINEJACK || j->cardtype == QTI_PHONECARD)
+ ixj_WriteDSPCommand(0x0224, j);
+ else
+ ixj_WriteDSPCommand(0x1224, j);
+
+ ixj_WriteDSPCommand(0xE014, j);
+ ixj_WriteDSPCommand(0x0003, j); /* Lock threashold at 3dB */
+
+ ixj_WriteDSPCommand(0xE338, j); /* Set Echo Suppresser Attenuation to 0dB */
+
+ /* Now we can set the AGC initial parameters and turn it on */
+ ixj_WriteDSPCommand(0xCF90, j); /* Set AGC Minumum gain */
+ ixj_WriteDSPCommand(0x0020, j); /* to 0.125 (-18dB) */
+
+ ixj_WriteDSPCommand(0xCF91, j); /* Set AGC Maximum gain */
+ ixj_WriteDSPCommand(0x1000, j); /* to 16 (24dB) */
+
+ ixj_WriteDSPCommand(0xCF92, j); /* Set AGC start gain */
+ ixj_WriteDSPCommand(0x0800, j); /* to 8 (+18dB) */
+
+ ixj_WriteDSPCommand(0xCF93, j); /* Set AGC hold time */
+ ixj_WriteDSPCommand(0x1F40, j); /* to 2 seconds (units are 250us) */
+
+ ixj_WriteDSPCommand(0xCF94, j); /* Set AGC Attack Time Constant */
+ ixj_WriteDSPCommand(0x0005, j); /* to 8ms */
+
+ ixj_WriteDSPCommand(0xCF95, j); /* Set AGC Decay Time Constant */
+ ixj_WriteDSPCommand(0x000D, j); /* to 4096ms */
+
+ ixj_WriteDSPCommand(0xCF96, j); /* Set AGC Attack Threshold */
+ ixj_WriteDSPCommand(0x1200, j); /* to 25% */
+
+ ixj_WriteDSPCommand(0xCF97, j); /* Set AGC Enable */
+ ixj_WriteDSPCommand(0x0001, j); /* to on */
+
break;
case AEC_AUTO:
- ixj_WriteDSPCommand(0x0002, j); // Attenuation scaling factor of 2
+ ixj_WriteDSPCommand(0x0002, j); /* Attenuation scaling factor of 2 */
ixj_WriteDSPCommand(0xE011, j);
- ixj_WriteDSPCommand(0x0100, j); // Higher Threshold Floor
+ ixj_WriteDSPCommand(0x0100, j); /* Higher Threshold Floor */
- ixj_WriteDSPCommand(0xE012, j); // Set Train and Lock
+ ixj_WriteDSPCommand(0xE012, j); /* Set Train and Lock */
- ixj_WriteDSPCommand(0x0023, j);
+ if(j->cardtype == QTI_LINEJACK || j->cardtype == QTI_PHONECARD)
+ ixj_WriteDSPCommand(0x0224, j);
+ else
+ ixj_WriteDSPCommand(0x1224, j);
ixj_WriteDSPCommand(0xE014, j);
- ixj_WriteDSPCommand(0x0003, j); // Lock threashold at 3dB
+ ixj_WriteDSPCommand(0x0003, j); /* Lock threashold at 3dB */
+
+ ixj_WriteDSPCommand(0xE338, j); /* Set Echo Suppresser Attenuation to 0dB */
break;
}
@@ -3010,15 +4362,15 @@
static void aec_stop(IXJ *j)
{
- if (j->rec_codec == G729 || j->play_codec == G729) {
- ixj_WriteDSPCommand(0xE022, j); // Move AEC filter buffer back
+ j->aec_level = AEC_OFF;
+ if (j->rec_codec == G729 || j->play_codec == G729 || j->rec_codec == G729B || j->play_codec == G729B) {
+ ixj_WriteDSPCommand(0xE022, j); /* Move AEC filter buffer back */
ixj_WriteDSPCommand(0x0700, j);
}
if (j->play_mode != -1 && j->rec_mode != -1)
{
- ixj_WriteDSPCommand(0xB002, j); // AEC Stop
-
+ ixj_WriteDSPCommand(0xB002, j); /* AEC Stop */
}
}
@@ -3099,6 +4451,28 @@
retval = 1;
}
break;
+ case G729B:
+ if (j->dsp.low != 0x20) {
+ if (!j->flags.g729_loaded) {
+ retval = 1;
+ break;
+ }
+ switch (j->baseframe.low) {
+ case 0xA0:
+ j->play_frame_size = 12;
+ break;
+ case 0x50:
+ j->play_frame_size = 6;
+ break;
+ default:
+ j->play_frame_size = 18;
+ break;
+ }
+ j->play_mode = 0;
+ } else {
+ retval = 1;
+ }
+ break;
case ULAW:
switch (j->baseframe.low) {
case 0xA0:
@@ -3190,8 +4564,12 @@
if (j->write_buffer) {
ixj_play_stop(j);
}
+
+ if(ixjdebug & 0x0002)
+ printk("IXJ %d Starting Play Codec %d at %ld\n", j->board, j->play_codec, jiffies);
+
j->flags.playing = 1;
- ixj_WriteDSPCommand(0x0FE0, j); // Put the DSP in full power mode.
+ ixj_WriteDSPCommand(0x0FE0, j); /* Put the DSP in full power mode. */
j->flags.play_first_frame = 1;
j->drybuffer = 0;
@@ -3205,21 +4583,22 @@
cmd = 0x5232;
break;
case TS85:
- cmd = 0x5230; // TrueSpeech 8.5
+ cmd = 0x5230; /* TrueSpeech 8.5 */
break;
case TS48:
- cmd = 0x5233; // TrueSpeech 4.8
+ cmd = 0x5233; /* TrueSpeech 4.8 */
break;
case TS41:
- cmd = 0x5234; // TrueSpeech 4.1
+ cmd = 0x5234; /* TrueSpeech 4.1 */
break;
case G728:
cmd = 0x5235;
break;
case G729:
+ case G729B:
cmd = 0x5236;
break;
default:
@@ -3230,16 +4609,16 @@
}
j->write_buffer = kmalloc(j->play_frame_size * 2, GFP_ATOMIC);
if (!j->write_buffer) {
- printk("Write buffer allocation for ixj board %d failed!\n",
- j->p.board);
+ printk("Write buffer allocation for ixj board %d failed!\n", j->board);
return -ENOMEM;
}
- j->write_buffers_empty = 2;
+/* j->write_buffers_empty = 2; */
+ j->write_buffers_empty = 1;
j->write_buffer_size = j->play_frame_size * 2;
j->write_buffer_end = j->write_buffer + j->play_frame_size * 2;
j->write_buffer_rp = j->write_buffer_wp = j->write_buffer;
- if (ixj_WriteDSPCommand(0x5202, j)) // Set Poll sync mode
+ if (ixj_WriteDSPCommand(0x5202, j)) /* Set Poll sync mode */
return -1;
@@ -3279,42 +4658,42 @@
if (ixj_WriteDSPCommand(cmd, j))
return -1;
- if (ixj_WriteDSPCommand(0x2000, j)) // Playback C2
-
+ if (ixj_WriteDSPCommand(0x2000, j)) /* Playback C2 */
return -1;
- if (ixj_WriteDSPCommand(0x2000 + j->play_frame_size, j)) // Playback C3
-
+ if (ixj_WriteDSPCommand(0x2000 + j->play_frame_size, j)) /* Playback C3 */
return -1;
+ if (j->flags.recording) {
+ ixj_aec_start(j, j->aec_level);
+ }
- ixj_kill_fasync(j, POLL_OUT);
return 0;
}
static void ixj_play_stop(IXJ *j)
{
+ if(ixjdebug & 0x0002)
+ printk("IXJ %d Stopping Play Codec %d at %ld\n", j->board, j->play_codec, jiffies);
+
if (j->write_buffer) {
kfree(j->write_buffer);
j->write_buffer = NULL;
j->write_buffer_size = 0;
}
if (j->play_mode > -1) {
- ixj_WriteDSPCommand(0x5221, j); // Stop playback and flush buffers. 8022 reference page 9-40
+ ixj_WriteDSPCommand(0x5221, j); /* Stop playback and flush buffers. 8022 reference page 9-40 */
j->play_mode = -1;
}
j->flags.playing = 0;
- if (!j->flags.recording)
- ixj_WriteDSPCommand(0x0FE3, j); // Put the DSP in 1/5 power mode.
-
}
-extern __inline__ int get_play_level(IXJ *j)
+static inline int get_play_level(IXJ *j)
{
int retval;
- ixj_WriteDSPCommand(0xCF8F, j); // 8022 Reference page 9-38
+ ixj_WriteDSPCommand(0xCF8F, j); /* 8022 Reference page 9-38 */
return j->ssr.high << 8 | j->ssr.low;
retval = j->ssr.high << 8 | j->ssr.low;
retval = (retval * 256) / 240;
@@ -3324,10 +4703,8 @@
static unsigned int ixj_poll(struct file *file_p, poll_table * wait)
{
unsigned int mask = 0;
- IXJ *j = ixj[NUM(file_p->f_dentry->d_inode->i_rdev)];
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
poll_wait(file_p, &(j->poll_q), wait);
if (j->read_buffer_ready > 0)
@@ -3341,18 +4718,22 @@
static int ixj_play_tone(IXJ *j, char tone)
{
- if (!j->tone_state && j->dsp.low == 0x20)
- idle(j);
-
- j->tone_index = tone;
- if (ixj_WriteDSPCommand(0x6000 + j->tone_index, j))
- return -1;
-
if (!j->tone_state) {
+ if(ixjdebug & 0x0002) {
+ printk("IXJ %d starting tone %d at %ld\n", j->board, tone, jiffies);
+ }
+ if (j->dsp.low == 0x20) {
+ idle(j);
+ }
j->tone_start_jif = jiffies;
j->tone_state = 1;
}
+
+ j->tone_index = tone;
+ if (ixj_WriteDSPCommand(0x6000 + j->tone_index, j))
+ return -1;
+
return 0;
}
@@ -3360,7 +4741,7 @@
{
j->tone_on_time = arg;
- if (ixj_WriteDSPCommand(0x6E04, j)) // Set Tone On Period
+ if (ixj_WriteDSPCommand(0x6E04, j)) /* Set Tone On Period */
return -1;
@@ -3383,7 +4764,7 @@
if ((j->pld_scrr.bits.sci))
return 1;
}
- if (ixjdebug > 1)
+ if (ixjdebug & 0x0001)
printk(KERN_INFO "SCI Wait High failed %x\n", j->pld_scrr.byte);
return 0;
} else
@@ -3403,7 +4784,7 @@
if (!(j->pld_scrr.bits.sci))
return 1;
}
- if (ixjdebug > 1)
+ if (ixjdebug & 0x0001)
printk(KERN_INFO "SCI Wait Low failed %x\n", j->pld_scrr.byte);
return 0;
} else
@@ -3414,27 +4795,27 @@
{
switch (control) {
case SCI_End:
- j->pld_scrw.bits.c0 = 0; // Set PLD Serial control interface
+ j->pld_scrw.bits.c0 = 0; /* Set PLD Serial control interface */
- j->pld_scrw.bits.c1 = 0; // to no selection
+ j->pld_scrw.bits.c1 = 0; /* to no selection */
break;
case SCI_Enable_DAA:
- j->pld_scrw.bits.c0 = 1; // Set PLD Serial control interface
+ j->pld_scrw.bits.c0 = 1; /* Set PLD Serial control interface */
- j->pld_scrw.bits.c1 = 0; // to write to DAA
+ j->pld_scrw.bits.c1 = 0; /* to write to DAA */
break;
case SCI_Enable_Mixer:
- j->pld_scrw.bits.c0 = 0; // Set PLD Serial control interface
+ j->pld_scrw.bits.c0 = 0; /* Set PLD Serial control interface */
- j->pld_scrw.bits.c1 = 1; // to write to mixer
+ j->pld_scrw.bits.c1 = 1; /* to write to mixer */
break;
case SCI_Enable_EEPROM:
- j->pld_scrw.bits.c0 = 1; // Set PLD Serial control interface
+ j->pld_scrw.bits.c0 = 1; /* Set PLD Serial control interface */
- j->pld_scrw.bits.c1 = 1; // to write to EEPROM
+ j->pld_scrw.bits.c1 = 1; /* to write to EEPROM */
break;
default:
@@ -3471,16 +4852,25 @@
return 1;
}
+static int ixj_get_mixer(long val, IXJ *j)
+{
+ int reg = (val & 0x1F00) >> 8;
+ return j->mix.vol[reg];
+}
+
static int ixj_mixer(long val, IXJ *j)
{
BYTES bytes;
- bytes.high = (val & 0xFF00) >> 8;
+ bytes.high = (val & 0x1F00) >> 8;
bytes.low = val & 0x00FF;
- outb_p(bytes.high & 0x1F, j->XILINXbase + 0x03); // Load Mixer Address
+ /* save mixer value so we can get back later on */
+ j->mix.vol[bytes.high] = bytes.low;
- outb_p(bytes.low, j->XILINXbase + 0x02); // Load Mixer Data
+ outb_p(bytes.high & 0x1F, j->XILINXbase + 0x03); /* Load Mixer Address */
+
+ outb_p(bytes.low, j->XILINXbase + 0x02); /* Load Mixer Data */
SCI_Control(j, SCI_Enable_Mixer);
@@ -3564,7 +4954,7 @@
bytes.high = inb_p(j->XILINXbase + 0x03);
bytes.low = inb_p(j->XILINXbase + 0x02);
if (bytes.low != ALISDAA_ID_BYTE) {
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0001)
printk("Cannot read DAA ID Byte high = %d low = %d\n", bytes.high, bytes.low);
return 0;
}
@@ -3577,6 +4967,77 @@
bytes.low = inb_p(j->XILINXbase + 0x02);
j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.reg = bytes.high;
+
+ return 1;
+}
+
+static char daa_CR_read(IXJ *j, int cr)
+{
+ IXJ_WORD wdata;
+ BYTES bytes;
+
+ if (!SCI_Prepare(j))
+ return 0;
+
+ switch (j->daa_mode) {
+ case SOP_PU_SLEEP:
+ bytes.high = 0x30 + cr;
+ break;
+ case SOP_PU_RINGING:
+ bytes.high = 0x70 + cr;
+ break;
+ case SOP_PU_CONVERSATION:
+ bytes.high = 0xB0 + cr;
+ break;
+ case SOP_PU_PULSEDIALING:
+ bytes.high = 0xF0 + cr;
+ break;
+ }
+
+ bytes.low = 0x00;
+
+ outb_p(bytes.high, j->XILINXbase + 0x03);
+ outb_p(bytes.low, j->XILINXbase + 0x02);
+
+ if (!SCI_Control(j, SCI_Enable_DAA))
+ return 0;
+
+ bytes.high = inb_p(j->XILINXbase + 0x03);
+ bytes.low = inb_p(j->XILINXbase + 0x02);
+ if (bytes.low != ALISDAA_ID_BYTE) {
+ if (ixjdebug & 0x0001)
+ printk("Cannot read DAA ID Byte high = %d low = %d\n", bytes.high, bytes.low);
+ return 0;
+ }
+ if (!SCI_Control(j, SCI_Enable_DAA))
+ return 0;
+ if (!SCI_Control(j, SCI_End))
+ return 0;
+
+ wdata.word = inw_p(j->XILINXbase + 0x02);
+
+ switch(cr){
+ case 5:
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr5.reg = wdata.bytes.high;
+ break;
+ case 4:
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = wdata.bytes.high;
+ break;
+ case 3:
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = wdata.bytes.high;
+ break;
+ case 2:
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = wdata.bytes.high;
+ break;
+ case 1:
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = wdata.bytes.high;
+ break;
+ case 0:
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = wdata.bytes.high;
+ break;
+ default:
+ return 0;
+ }
return 1;
}
@@ -3585,6 +5046,9 @@
int i;
BYTES bytes;
+ if (ixjdebug & 0x0002)
+ printk("DAA Clearing CID ram\n");
+
if (!SCI_Prepare(j))
return 0;
@@ -3617,6 +5081,9 @@
if (!SCI_Control(j, SCI_End))
return 0;
+ if (ixjdebug & 0x0002)
+ printk("DAA CID ram cleared\n");
+
return 1;
}
@@ -3644,7 +5111,7 @@
bytes.high = inb_p(j->XILINXbase + 0x03);
bytes.low = inb_p(j->XILINXbase + 0x02);
if (bytes.low != ALISDAA_ID_BYTE) {
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0001)
printk("DAA Get Version Cannot read DAA ID Byte high = %d low = %d\n", bytes.high, bytes.low);
return 0;
}
@@ -3727,7 +5194,7 @@
bytes.high = inb_p(j->XILINXbase + 0x03);
bytes.low = inb_p(j->XILINXbase + 0x02);
if (bytes.low != ALISDAA_ID_BYTE) {
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0001)
printk("DAA Get Version Cannot read DAA ID Byte high = %d low = %d\n", bytes.high, bytes.low);
return 0;
}
@@ -3739,7 +5206,7 @@
bytes.high = inb_p(j->XILINXbase + 0x03);
bytes.low = inb_p(j->XILINXbase + 0x02);
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk("DAA CR5 Byte high = 0x%x low = 0x%x\n", bytes.high, bytes.low);
j->m_DAAShadowRegs.SOP_REGS.SOP.cr5.reg = bytes.high;
return bytes.high;
@@ -3747,30 +5214,52 @@
static int daa_set_mode(IXJ *j, int mode)
{
- // NOTE:
- // The DAA *MUST* be in the conversation mode if the
- // PSTN line is to be seized (PSTN line off-hook).
- // Taking the PSTN line off-hook while the DAA is in
- // a mode other than conversation mode will cause a
- // hardware failure of the ALIS-A part.
-
- // NOTE:
- // The DAA can only go to SLEEP, RINGING or PULSEDIALING modes
- // if the PSTN line is on-hook. Failure to have the PSTN line
- // in the on-hook state WILL CAUSE A HARDWARE FAILURE OF THE
- // ALIS-A part.
- //
+ /* NOTE:
+ The DAA *MUST* be in the conversation mode if the
+ PSTN line is to be seized (PSTN line off-hook).
+ Taking the PSTN line off-hook while the DAA is in
+ a mode other than conversation mode will cause a
+ hardware failure of the ALIS-A part.
+
+ NOTE:
+ The DAA can only go to SLEEP, RINGING or PULSEDIALING modes
+ if the PSTN line is on-hook. Failure to have the PSTN line
+ in the on-hook state WILL CAUSE A HARDWARE FAILURE OF THE
+ ALIS-A part.
+ */
BYTES bytes;
+ j->flags.pstn_rmr = 0;
+
if (!SCI_Prepare(j))
return 0;
switch (mode) {
+ case SOP_PU_RESET:
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
+
+ outb_p(j->pld_scrw.byte, j->XILINXbase);
+ j->pld_slicw.bits.rly2 = 0;
+ outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ bytes.high = 0x10;
+ bytes.low = j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg;
+ daa_load(&bytes, j);
+ if (!SCI_Prepare(j))
+ return 0;
+
+ j->daa_mode = SOP_PU_SLEEP;
+ break;
case SOP_PU_SLEEP:
- if(j->daa_mode == SOP_PU_CONVERSATION)
+ if(j->daa_mode == SOP_PU_SLEEP)
{
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ break;
+ }
+ if (ixjdebug & 0x0008)
+ printk(KERN_INFO "phone DAA: SOP_PU_SLEEP at %ld\n", jiffies);
+/* if(j->daa_mode == SOP_PU_CONVERSATION) */
+ {
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
j->pld_slicw.bits.rly2 = 0;
@@ -3781,7 +5270,7 @@
if (!SCI_Prepare(j))
return 0;
}
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
j->pld_slicw.bits.rly2 = 0;
@@ -3795,13 +5284,15 @@
j->daa_mode = SOP_PU_SLEEP;
j->flags.pstn_ringing = 0;
j->ex.bits.pstn_ring = 0;
- j->pstn_sleeptil = jiffies + (hertz / 2);
- wake_up_interruptible(&j->read_q); // Wake any blocked readers
- wake_up_interruptible(&j->write_q); // Wake any blocked writers
- wake_up_interruptible(&j->poll_q); // Wake any blocked selects
+ j->pstn_sleeptil = jiffies + (hertz / 4);
+ wake_up_interruptible(&j->read_q); /* Wake any blocked readers */
+ wake_up_interruptible(&j->write_q); /* Wake any blocked writers */
+ wake_up_interruptible(&j->poll_q); /* Wake any blocked selects */
break;
case SOP_PU_RINGING:
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ if (ixjdebug & 0x0008)
+ printk(KERN_INFO "phone DAA: SOP_PU_RINGING at %ld\n", jiffies);
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
j->pld_slicw.bits.rly2 = 0;
@@ -3814,6 +5305,8 @@
j->daa_mode = SOP_PU_RINGING;
break;
case SOP_PU_CONVERSATION:
+ if (ixjdebug & 0x0008)
+ printk(KERN_INFO "phone DAA: SOP_PU_CONVERSATION at %ld\n", jiffies);
bytes.high = 0x90;
bytes.low = j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg;
daa_load(&bytes, j);
@@ -3821,17 +5314,19 @@
return 0;
j->pld_slicw.bits.rly2 = 1;
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
- j->pld_scrw.bits.led1 = 0;
- j->pld_scrw.bits.led2 = 1;
- j->pld_scrw.bits.daafsyncen = 1; // Turn on DAA Frame Sync
+ j->pld_scrw.bits.daafsyncen = 1; /* Turn on DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
j->daa_mode = SOP_PU_CONVERSATION;
j->flags.pstn_ringing = 0;
j->ex.bits.pstn_ring = 0;
+ j->pstn_sleeptil = jiffies;
+ j->pstn_ring_start = j->pstn_ring_stop = j->pstn_ring_int = 0;
break;
case SOP_PU_PULSEDIALING:
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ if (ixjdebug & 0x0008)
+ printk(KERN_INFO "phone DAA: SOP_PU_PULSEDIALING at %ld\n", jiffies);
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
j->pld_slicw.bits.rly2 = 0;
@@ -3853,9 +5348,15 @@
{
BYTES bytes;
+ j->flags.pstncheck = 1;
+
+ daa_set_mode(j, SOP_PU_SLEEP);
+
if (!SCI_Prepare(j))
return 0;
+ outb_p(j->pld_scrw.byte, j->XILINXbase);
+
bytes.high = 0x14;
bytes.low = j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg;
if (!daa_load(&bytes, j))
@@ -4332,13 +5833,19 @@
if (!SCI_Control(j, SCI_End))
return 0;
+ outb_p(j->pld_scrw.byte, j->XILINXbase);
+
+ if (ixjdebug & 0x0002)
+ printk("DAA Coefficients Loaded\n");
+
+ j->flags.pstncheck = 0;
return 1;
}
int ixj_set_tone_off(unsigned short arg, IXJ *j)
{
j->tone_off_time = arg;
- if (ixj_WriteDSPCommand(0x6E05, j)) // Set Tone Off Period
+ if (ixj_WriteDSPCommand(0x6E05, j)) /* Set Tone Off Period */
return -1;
if (ixj_WriteDSPCommand(arg, j))
@@ -4348,7 +5855,7 @@
static int ixj_get_tone_on(IXJ *j)
{
- if (ixj_WriteDSPCommand(0x6E06, j)) // Get Tone On Period
+ if (ixj_WriteDSPCommand(0x6E06, j)) /* Get Tone On Period */
return -1;
return 0;
@@ -4356,7 +5863,8 @@
static int ixj_get_tone_off(IXJ *j)
{
- if (ixj_WriteDSPCommand(0x6E07, j)) // Get Tone Off Period
+ if (ixj_WriteDSPCommand(0x6E07, j)) /* Get Tone Off Period */
+
return -1;
return 0;
}
@@ -4387,7 +5895,7 @@
static void ixj_cpt_stop(IXJ *j)
{
- if(j->tone_state)
+ if(j->tone_state || j->tone_cadence_state)
{
j->flags.dialtone = 0;
j->flags.busytone = 0;
@@ -4395,7 +5903,7 @@
ixj_set_tone_on(0x0001, j);
ixj_set_tone_off(0x0000, j);
ixj_play_tone(j, 0);
- j->tone_state = 0;
+ j->tone_state = j->tone_cadence_state = 0;
if (j->cadence_t) {
if (j->cadence_t->ce) {
kfree(j->cadence_t->ce);
@@ -4436,12 +5944,11 @@
lcp = kmalloc(sizeof(IXJ_CADENCE), GFP_KERNEL);
if (lcp == NULL)
return -ENOMEM;
- if (copy_from_user(lcp, (char *) cp, sizeof(IXJ_CADENCE)) ||
- (unsigned)lcp->elements_used >= ~0U/sizeof(IXJ_CADENCE) )
- {
- kfree(lcp);
- return -EFAULT;
- }
+ if (copy_from_user(lcp, (char *) cp, sizeof(IXJ_CADENCE)) || (unsigned)lcp->elements_used >= ~0U/sizeof(IXJ_CADENCE) )
+ {
+ kfree(lcp);
+ return -EFAULT;
+ }
lcep = kmalloc(sizeof(IXJ_CADENCE_ELEMENT) * lcp->elements_used, GFP_KERNEL);
if (lcep == NULL) {
kfree(lcp);
@@ -4477,18 +5984,23 @@
static int ixj_build_filter_cadence(IXJ *j, IXJ_FILTER_CADENCE * cp)
{
IXJ_FILTER_CADENCE *lcp;
-
lcp = kmalloc(sizeof(IXJ_FILTER_CADENCE), GFP_KERNEL);
- if (lcp == NULL)
+ if (lcp == NULL) {
+ if(ixjdebug & 0x0001) {
+ printk(KERN_INFO "Could not allocate memory for cadence\n");
+ }
return -ENOMEM;
- if (copy_from_user(lcp, (char *) cp, sizeof(IXJ_FILTER_CADENCE)))
- {
- kfree(lcp);
+ }
+ if (copy_from_user(lcp, (char *) cp, sizeof(IXJ_FILTER_CADENCE))) {
+ if(ixjdebug & 0x0001) {
+ printk(KERN_INFO "Could not copy cadence to kernel\n");
+ }
return -EFAULT;
}
- if (lcp->filter >= 4)
- {
- kfree(lcp);
+ if (lcp->filter > 5) {
+ if(ixjdebug & 0x0001) {
+ printk(KERN_INFO "Cadence out of range\n");
+ }
return -1;
}
j->cadence_f[lcp->filter].state = 0;
@@ -4513,6 +6025,9 @@
j->cadence_f[lcp->filter].off3min = 0;
j->cadence_f[lcp->filter].off3max = 0;
kfree(lcp);
+ if(ixjdebug & 0x0002) {
+ printk(KERN_INFO "Cadence %d loaded\n", lcp->filter);
+ }
return 0;
}
@@ -4548,7 +6063,7 @@
j->caplist[j->caps].cap = pots;
j->caplist[j->caps].handle = j->caps++;
- // add devices that can do speaker/mic
+ /* add devices that can do speaker/mic */
switch (j->cardtype) {
case QTI_PHONEJACK:
case QTI_LINEJACK:
@@ -4562,7 +6077,7 @@
break;
}
- // add devices that can do handset
+ /* add devices that can do handset */
switch (j->cardtype) {
case QTI_PHONEJACK:
strcpy(j->caplist[j->caps].desc, "HANDSET");
@@ -4574,7 +6089,7 @@
break;
}
- // add devices that can do PSTN
+ /* add devices that can do PSTN */
switch (j->cardtype) {
case QTI_LINEJACK:
strcpy(j->caplist[j->caps].desc, "PSTN");
@@ -4586,7 +6101,7 @@
break;
}
- // add codecs - all cards can do uLaw, linear 8/16, and Windows sound system
+ /* add codecs - all cards can do uLaw, linear 8/16, and Windows sound system */
strcpy(j->caplist[j->caps].desc, "ULAW");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = ULAW;
@@ -4607,66 +6122,73 @@
j->caplist[j->caps].cap = WSS;
j->caplist[j->caps].handle = j->caps++;
- // version 12 of the 8020 does the following codecs in a broken way
+ /* software ALAW codec, made from ULAW */
+ strcpy(j->caplist[j->caps].desc, "ALAW");
+ j->caplist[j->caps].captype = codec;
+ j->caplist[j->caps].cap = ALAW;
+ j->caplist[j->caps].handle = j->caps++;
+
+ /* version 12 of the 8020 does the following codecs in a broken way */
if (j->dsp.low != 0x20 || j->ver.low != 0x12) {
- strcpy(j->caplist[j->caps].desc, "G.723.1 6.3Kbps");
+ strcpy(j->caplist[j->caps].desc, "G.723.1 6.3kbps");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = G723_63;
j->caplist[j->caps].handle = j->caps++;
- strcpy(j->caplist[j->caps].desc, "G.723.1 5.3Kbps");
+ strcpy(j->caplist[j->caps].desc, "G.723.1 5.3kbps");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = G723_53;
j->caplist[j->caps].handle = j->caps++;
- strcpy(j->caplist[j->caps].desc, "TrueSpeech 4.8Kbps");
+ strcpy(j->caplist[j->caps].desc, "TrueSpeech 4.8kbps");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = TS48;
j->caplist[j->caps].handle = j->caps++;
- strcpy(j->caplist[j->caps].desc, "TrueSpeech 4.1Kbps");
+ strcpy(j->caplist[j->caps].desc, "TrueSpeech 4.1kbps");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = TS41;
j->caplist[j->caps].handle = j->caps++;
}
- // 8020 chips can do TS8.5 native, and 8021/8022 can load it
+ /* 8020 chips can do TS8.5 native, and 8021/8022 can load it */
if (j->dsp.low == 0x20 || j->flags.ts85_loaded) {
- strcpy(j->caplist[j->caps].desc, "TrueSpeech 8.5Kbps");
+ strcpy(j->caplist[j->caps].desc, "TrueSpeech 8.5kbps");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = TS85;
j->caplist[j->caps].handle = j->caps++;
}
- // 8021 chips can do G728
+ /* 8021 chips can do G728 */
if (j->dsp.low == 0x21) {
- strcpy(j->caplist[j->caps].desc, "G.728 16Kbps");
+ strcpy(j->caplist[j->caps].desc, "G.728 16kbps");
j->caplist[j->caps].captype = codec;
j->caplist[j->caps].cap = G728;
j->caplist[j->caps].handle = j->caps++;
}
- // 8021/8022 chips can do G729 if loaded
+ /* 8021/8022 chips can do G729 if loaded */
if (j->dsp.low != 0x20 && j->flags.g729_loaded) {
- strcpy(j->caplist[j->caps].desc, "G.729A/B");
+ strcpy(j->caplist[j->caps].desc, "G.729A 8kbps");
j->caplist[j->caps].captype = codec;
- j->caplist[j->caps].cap = G728;
+ j->caplist[j->caps].cap = G729;
+ j->caplist[j->caps].handle = j->caps++;
+ }
+ if (j->dsp.low != 0x20 && j->flags.g729_loaded) {
+ strcpy(j->caplist[j->caps].desc, "G.729B 8kbps");
+ j->caplist[j->caps].captype = codec;
+ j->caplist[j->caps].cap = G729B;
j->caplist[j->caps].handle = j->caps++;
}
}
-static int capabilities_check(IXJ *j, struct phone_capability *u_pcreq)
+static int capabilities_check(IXJ *j, struct phone_capability *pcreq)
{
int cnt;
int retval = 0;
- struct phone_capability pcreq;
-
- if(copy_from_user(&pcreq, u_pcreq, sizeof(struct phone_capability)))
- return -EFAULT;
-
for (cnt = 0; cnt < j->caps; cnt++) {
- if (pcreq.captype == j->caplist[cnt].captype
- && pcreq.cap == j->caplist[cnt].cap) {
+ if (pcreq->captype == j->caplist[cnt].captype
+ && pcreq->cap == j->caplist[cnt].cap) {
retval = 1;
break;
}
@@ -4674,31 +6196,42 @@
return retval;
}
-int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd, unsigned long arg)
+static int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd, unsigned long arg)
{
IXJ_TONE ti;
IXJ_FILTER jf;
+ IXJ_FILTER_RAW jfr;
+
+ unsigned int raise, mant;
unsigned int minor = MINOR(inode->i_rdev);
- unsigned int board = NUM(inode->i_rdev);
- IXJ *j = ixj[board];
- int retval = 0;
+ int board = NUM(inode->i_rdev);
- if (ixjdebug > 1)
- printk(KERN_DEBUG "phone%d ioctl, cmd: 0x%x, arg: 0x%lx\n", minor, cmd, arg);
- if (minor >= IXJMAX)
- return -ENODEV;
+ IXJ *j = get_ixj(NUM(inode->i_rdev));
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ int retval = 0;
/*
+ * Set up locks to ensure that only one process is talking to the DSP at a time.
+ * This is necessary to keep the DSP from locking up.
+ */
+ while(test_and_set_bit(board, (void *)&j->busyflags) != 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ if (ixjdebug & 0x0040)
+ printk("phone%d ioctl, cmd: 0x%x, arg: 0x%lx\n", minor, cmd, arg);
+ if (minor >= IXJMAX) {
+ clear_bit(board, &j->busyflags);
+ return -ENODEV;
+ }
+ /*
* Check ioctls only root can use.
*/
if (!capable(CAP_SYS_ADMIN)) {
switch (cmd) {
case IXJCTL_TESTRAM:
case IXJCTL_HZ:
- return -EPERM;
+ retval = -EPERM;
}
}
switch (cmd) {
@@ -4713,12 +6246,11 @@
retval = j->serial;
break;
case IXJCTL_VERSION:
- if (copy_to_user((char *) arg, ixj_c_revision, strlen(ixj_c_revision)))
- return -EFAULT;
+ if (copy_to_user((char *) arg, ixj_c_revision, strlen(ixj_c_revision)))
+ retval = -EFAULT;
break;
case PHONE_RING_CADENCE:
- if(get_user(j->ring_cadence, (int *)arg))
- return -EFAULT;
+ j->ring_cadence = arg;
break;
case IXJCTL_CIDCW:
if(arg) {
@@ -4729,13 +6261,18 @@
}
ixj_write_cidcw(j);
break;
- /* Binary compatbility */
- case OLD_PHONE_RING_START:
- arg = 0;
- /* Fall through */
- case PHONE_RING_START:
+ /* Binary compatbility */
+ case OLD_PHONE_RING_START:
+ arg = 0;
+ /* Fall through */
+ case PHONE_RING_START:
if(arg) {
- copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID));
+ if(copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID)))
+ {
+ retval = -EFAULT;
+ break;
+ }
+ ixj_write_cid(j);
}
else {
memset(&j->cid_send, 0, sizeof(PHONE_CID));
@@ -4744,6 +6281,9 @@
break;
case PHONE_RING_STOP:
j->flags.cringing = 0;
+ if(j->cadence_f[5].enable) {
+ j->cadence_f[5].state = 0;
+ }
ixj_ring_off(j);
break;
case PHONE_RING:
@@ -4751,7 +6291,10 @@
break;
case PHONE_EXCEPTION:
retval = j->ex.bytes;
- j->ex.bits.flash = 0;
+ if(j->ex.bits.flash) {
+ j->flash_end = 0;
+ j->ex.bits.flash = 0;
+ }
j->ex.bits.pstn_ring = 0;
j->ex.bits.caller_id = 0;
j->ex.bits.pstn_wink = 0;
@@ -4767,7 +6310,7 @@
break;
case PHONE_HOOKSTATE:
j->ex.bits.hookstate = 0;
- retval = j->r_hook;
+ retval = j->hookstate; //j->r_hook;
break;
case IXJCTL_SET_LED:
LED_SetState(arg, j);
@@ -4799,9 +6342,33 @@
retval = arg;
}
break;
+ case PHONE_REC_VOLUME_LINEAR:
+ if(arg == -1) {
+ retval = get_rec_volume_linear(j);
+ }
+ else {
+ set_rec_volume_linear(j, arg);
+ retval = arg;
+ }
+ break;
+ case IXJCTL_DTMF_PRESCALE:
+ if(arg == -1) {
+ retval = get_dtmf_prescale(j);
+ }
+ else {
+ set_dtmf_prescale(j, arg);
+ retval = arg;
+ }
+ break;
case PHONE_REC_LEVEL:
retval = get_rec_level(j);
break;
+ case IXJCTL_SC_RXG:
+ retval = ixj_siadc(j, arg);
+ break;
+ case IXJCTL_SC_TXG:
+ retval = ixj_sidac(j, arg);
+ break;
case IXJCTL_AEC_START:
ixj_aec_start(j, arg);
break;
@@ -4832,6 +6399,15 @@
retval = arg;
}
break;
+ case PHONE_PLAY_VOLUME_LINEAR:
+ if(arg == -1) {
+ retval = get_play_volume_linear(j);
+ }
+ else {
+ set_play_volume_linear(j, arg);
+ retval = arg;
+ }
+ break;
case PHONE_PLAY_LEVEL:
retval = get_play_level(j);
break;
@@ -4921,31 +6497,31 @@
if (j->dtmf_rp != j->dtmf_wp) {
switch (j->dtmfbuffer[j->dtmf_rp]) {
case 10:
- retval = 42; //'*';
+ retval = 42; /* '*'; */
break;
case 11:
- retval = 48; //'0';
+ retval = 48; /*'0'; */
break;
case 12:
- retval = 35; //'#';
+ retval = 35; /*'#'; */
break;
case 28:
- retval = 65; //'A';
+ retval = 65; /*'A'; */
break;
case 29:
- retval = 66; //'B';
+ retval = 66; /*'B'; */
break;
case 30:
- retval = 67; //'C';
+ retval = 67; /*'C'; */
break;
case 31:
- retval = 68; //'D';
+ retval = 68; /*'D'; */
break;
default:
@@ -4955,7 +6531,7 @@
j->dtmf_rp++;
if (j->dtmf_rp == 79)
j->dtmf_rp = 0;
-// if(j->dtmf_rp == j->dtmf_wp)
+ if(j->dtmf_rp == j->dtmf_wp)
{
j->ex.bits.dtmf_ready = j->dtmf_rp = j->dtmf_wp = 0;
}
@@ -4974,40 +6550,53 @@
case PHONE_RINGBACK:
ixj_ringback(j);
break;
+ case PHONE_WINK:
+ if(j->cardtype == QTI_PHONEJACK)
+ retval = -1;
+ else
+ retval = ixj_wink(j);
+ break;
case PHONE_CPT_STOP:
ixj_cpt_stop(j);
break;
- case PHONE_QUERY_CODEC:
- {
- struct phone_codec_data pd;
- int val;
- int proto_size[] = {
- -1,
- 12, 10, 16, 9, 8, 48, 5,
- 40, 40, 80, 40, 40
- };
- if(copy_from_user(&pd, (void *)arg, sizeof(pd)))
- return -EFAULT;
- if(pd.type<1 || pd.type>12)
- return -EPROTONOSUPPORT;
- if(pd.type<G729)
- val=proto_size[pd.type];
- else switch(j->baseframe.low)
- {
- case 0xA0:val=2*proto_size[pd.type];break;
- case 0x50:val=proto_size[pd.type];break;
- default:val=proto_size[pd.type]*3;break;
- }
- pd.buf_min=pd.buf_max=pd.buf_opt=val;
- if(copy_to_user((void *)arg, &pd, sizeof(pd)))
- return -EFAULT;
- return 0;
- }
+ case PHONE_QUERY_CODEC:
+ {
+ struct phone_codec_data pd;
+ int val;
+ int proto_size[] = {
+ -1,
+ 12, 10, 16, 9, 8, 48, 5,
+ 40, 40, 80, 40, 40, 6
+ };
+ if(copy_from_user(&pd, (void *)arg, sizeof(pd))) {
+ retval = -EFAULT;
+ break;
+ }
+ if(pd.type<1 || pd.type>13) {
+ retval = -EPROTONOSUPPORT;
+ break;
+ }
+ if(pd.type<G729)
+ val=proto_size[pd.type];
+ else switch(j->baseframe.low)
+ {
+ case 0xA0:val=2*proto_size[pd.type];break;
+ case 0x50:val=proto_size[pd.type];break;
+ default:val=proto_size[pd.type]*3;break;
+ }
+ pd.buf_min=pd.buf_max=pd.buf_opt=val;
+ if(copy_to_user((void *)arg, &pd, sizeof(pd)))
+ retval = -EFAULT;
+ break;
+ }
case IXJCTL_DSP_IDLE:
idle(j);
break;
case IXJCTL_MIXER:
- ixj_mixer(arg, j);
+ if ((arg & 0xff) == 0xff)
+ retval = ixj_get_mixer(arg, j);
+ else
+ ixj_mixer(arg, j);
break;
case IXJCTL_DAA_COEFF_SET:
switch (arg) {
@@ -5039,7 +6628,6 @@
retval = 1;
break;
}
- j->country = arg;
break;
case IXJCTL_DAA_AGAIN:
ixj_daa_cr4(j, arg | 0x02);
@@ -5051,8 +6639,8 @@
ixj_write_vmwi(j, arg);
break;
case IXJCTL_CID:
- if (copy_to_user((char *) arg, &j->cid, sizeof(PHONE_CID)))
- return -EFAULT;
+ if (copy_to_user((char *) arg, &j->cid, sizeof(PHONE_CID)))
+ retval = -EFAULT;
j->ex.bits.caller_id = 0;
break;
case IXJCTL_WINK_DURATION:
@@ -5068,14 +6656,24 @@
retval = ixj_set_pots(j, arg);
break;
case PHONE_CAPABILITIES:
+ add_caps(j);
retval = j->caps;
break;
case PHONE_CAPABILITIES_LIST:
- if (copy_to_user((char *) arg, j->caplist, sizeof(struct phone_capability) * j->caps))
- return -EFAULT;
+ add_caps(j);
+ if (copy_to_user((char *) arg, j->caplist, sizeof(struct phone_capability) * j->caps))
+ retval = -EFAULT;
break;
case PHONE_CAPABILITIES_CHECK:
- retval = capabilities_check(j, (struct phone_capability *) arg);
+ {
+ struct phone_capability cap;
+ if (copy_from_user(&cap, (char *) arg, sizeof(cap)))
+ retval = -EFAULT;
+ else {
+ add_caps(j);
+ retval = capabilities_check(j, &cap);
+ }
+ }
break;
case PHONE_PSTN_SET_STATE:
daa_set_mode(j, arg);
@@ -5085,12 +6683,20 @@
j->ex.bits.pstn_ring = 0;
break;
case IXJCTL_SET_FILTER:
- if (copy_from_user(&jf, (char *) arg, sizeof(jf)))
- return -EFAULT;
+ if (copy_from_user(&jf, (char *) arg, sizeof(jf)))
+ retval = -EFAULT;
retval = ixj_init_filter(j, &jf);
break;
+ case IXJCTL_SET_FILTER_RAW:
+ if (copy_from_user(&jfr, (char *) arg, sizeof(jfr)))
+ retval = -EFAULT;
+ retval = ixj_init_filter_raw(j, &jfr);
+ break;
case IXJCTL_GET_FILTER_HIST:
- retval = j->filter_hist[arg];
+ if(arg<0||arg>3)
+ retval = -EINVAL;
+ else
+ retval = j->filter_hist[arg];
break;
case IXJCTL_INIT_TONE:
copy_from_user(&ti, (char *) arg, sizeof(ti));
@@ -5102,117 +6708,123 @@
case IXJCTL_FILTER_CADENCE:
retval = ixj_build_filter_cadence(j, (IXJ_FILTER_CADENCE *) arg);
break;
+ case IXJCTL_SIGCTL:
+ if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF)))
+ retval = -EFAULT;
+ j->ixj_signals[j->sigdef.event] = j->sigdef.signal;
+ if(j->sigdef.event < 33) {
+ raise = 1;
+ for(mant = 0; mant < j->sigdef.event; mant++){
+ raise *= 2;
+ }
+ if(j->sigdef.signal)
+ j->ex_sig.bytes |= raise;
+ else
+ j->ex_sig.bytes &= (raise^0xffff);
+ }
+ break;
case IXJCTL_INTERCOM_STOP:
- if (arg != j->intercom
- || ixj[arg]->intercom != board)
+ if(arg < 0 || arg >= IXJMAX)
return -EINVAL;
-
j->intercom = -1;
- ixj[arg]->intercom = -1;
ixj_record_stop(j);
- ixj_record_stop(ixj[arg]);
ixj_play_stop(j);
- ixj_play_stop(ixj[arg]);
idle(j);
- idle(ixj[arg]);
+ get_ixj(arg)->intercom = -1;
+ ixj_record_stop(get_ixj(arg));
+ ixj_play_stop(get_ixj(arg));
+ idle(get_ixj(arg));
break;
case IXJCTL_INTERCOM_START:
- if (ixj[arg] == NULL)
- return -ENODEV;
-
+ if(arg < 0 || arg >= IXJMAX)
+ return -EINVAL;
j->intercom = arg;
- ixj[arg]->intercom = board;
- ixj_play_start(ixj[arg]);
ixj_record_start(j);
ixj_play_start(j);
- ixj_record_start(ixj[arg]);
- idle(j);
- idle(ixj[arg]);
+ get_ixj(arg)->intercom = board;
+ ixj_play_start(get_ixj(arg));
+ ixj_record_start(get_ixj(arg));
break;
}
+ if (ixjdebug & 0x0040)
+ printk("phone%d ioctl end, cmd: 0x%x, arg: 0x%lx\n", minor, cmd, arg);
+ clear_bit(board, &j->busyflags);
return retval;
}
static int ixj_fasync(int fd, struct file *file_p, int mode)
{
- IXJ *j = ixj[NUM(file_p->f_dentry->d_inode->i_rdev)];
-
- if (j == NULL) /* shouldn't happen! */
- return -ENODEV;
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
return fasync_helper(fd, file_p, mode, &j->async_queue);
}
struct file_operations ixj_fops =
{
- owner: THIS_MODULE,
- read: ixj_enhanced_read,
- write: ixj_enhanced_write,
- poll: ixj_poll,
- ioctl: ixj_ioctl,
- release: ixj_release,
- fasync: ixj_fasync
+ owner: THIS_MODULE,
+ read: ixj_enhanced_read,
+ write: ixj_enhanced_write,
+ poll: ixj_poll,
+ ioctl: ixj_ioctl,
+ release: ixj_release,
+ fasync: ixj_fasync
};
static int ixj_linetest(IXJ *j)
{
unsigned long jifwait;
- j->flags.incheck = 1; // Testing
- if (!j->flags.pots_correct) {
- j->flags.pots_correct = 1;
-
- daa_int_read(j); //Clear DAA Interrupt flags
- //
- // Hold all relays in the normally de-energized position.
- //
+ j->flags.pstncheck = 1; /* Testing */
+ j->flags.pstn_present = 0; /* Assume the line is not there */
+
+ daa_int_read(j); /*Clear DAA Interrupt flags */
+ /* */
+ /* Hold all relays in the normally de-energized position. */
+ /* */
+ j->pld_slicw.bits.rly1 = 0;
+ j->pld_slicw.bits.rly2 = 0;
+ j->pld_slicw.bits.rly3 = 0;
+ outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
+
+ outb_p(j->pld_scrw.byte, j->XILINXbase);
+ j->pld_slicr.byte = inb_p(j->XILINXbase + 0x01);
+ if (j->pld_slicr.bits.potspstn) {
+ j->flags.pots_pstn = 1;
+ j->flags.pots_correct = 0;
+ LED_SetState(0x4, j);
+ } else {
+ j->flags.pots_pstn = 0;
j->pld_slicw.bits.rly1 = 0;
j->pld_slicw.bits.rly2 = 0;
- j->pld_slicw.bits.rly3 = 0;
+ j->pld_slicw.bits.rly3 = 1;
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
- j->pld_slicr.byte = inb_p(j->XILINXbase + 0x01);
- if (j->pld_slicr.bits.potspstn) {
- j->flags.pots_pstn = 1;
- j->flags.pots_correct = 0;
+ daa_set_mode(j, SOP_PU_CONVERSATION);
+ jifwait = jiffies + hertz;
+ while (time_before(jiffies, jifwait)) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
+ }
+ daa_int_read(j);
+ daa_set_mode(j, SOP_PU_RESET);
+ if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
+ j->flags.pots_correct = 0; /* Should not be line voltage on POTS port. */
LED_SetState(0x4, j);
+ j->pld_slicw.bits.rly3 = 0;
+ outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
} else {
- j->flags.pots_pstn = 0;
- j->pld_slicw.bits.rly1 = 0;
+ j->flags.pots_correct = 1;
+ LED_SetState(0x8, j);
+ j->pld_slicw.bits.rly1 = 1;
j->pld_slicw.bits.rly2 = 0;
- j->pld_slicw.bits.rly3 = 1;
+ j->pld_slicw.bits.rly3 = 0;
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
-
- outb_p(j->pld_scrw.byte, j->XILINXbase);
- daa_set_mode(j, SOP_PU_CONVERSATION);
- jifwait = jiffies + hertz;
- while (time_before(jiffies, jifwait)) {
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(1);
- }
- daa_int_read(j);
- daa_set_mode(j, SOP_PU_SLEEP);
- if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
- j->flags.pots_correct = 0; // Should not be line voltage on POTS port.
-
- LED_SetState(0x4, j);
- j->pld_slicw.bits.rly3 = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
- } else {
- j->flags.pots_correct = 1;
- LED_SetState(0x8, j);
- j->pld_slicw.bits.rly1 = 1;
- j->pld_slicw.bits.rly2 = 0;
- j->pld_slicw.bits.rly3 = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
- }
}
}
-// if (!j->flags.pstn_present) {
j->pld_slicw.bits.rly3 = 0;
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
daa_set_mode(j, SOP_PU_CONVERSATION);
@@ -5222,13 +6834,13 @@
schedule_timeout(1);
}
daa_int_read(j);
- daa_set_mode(j, SOP_PU_SLEEP);
+ daa_set_mode(j, SOP_PU_RESET);
if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
+ j->pstn_sleeptil = jiffies + (hertz / 4);
j->flags.pstn_present = 1;
} else {
j->flags.pstn_present = 0;
}
-// }
if (j->flags.pstn_present) {
if (j->flags.pots_correct) {
LED_SetState(0xA, j);
@@ -5242,36 +6854,39 @@
LED_SetState(0x5, j);
}
}
- j->flags.incheck = 0; // Testing
+ j->flags.pstncheck = 0; /* Testing */
return j->flags.pstn_present;
}
-static int ixj_selfprobe(IXJ *j, int cnt)
+static int ixj_selfprobe(IXJ *j)
{
unsigned short cmd;
unsigned long jif;
- int i;
+ int cnt;
BYTES bytes;
-
- init_waitqueue_head(&j->poll_q);
- init_waitqueue_head(&j->read_q);
- init_waitqueue_head(&j->write_q);
- if (ixjdebug > 0)
+
+ init_waitqueue_head(&j->poll_q);
+ init_waitqueue_head(&j->read_q);
+ init_waitqueue_head(&j->write_q);
+
+ while(atomic_read(&j->DSPWrite) > 0)
+ atomic_dec(&j->DSPWrite);
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Write IDLE to Software Control Register\n");
- ixj_WriteDSPCommand(0x0FE0, j); // Put the DSP in full power mode.
+ ixj_WriteDSPCommand(0x0FE0, j); /* Put the DSP in full power mode. */
if (ixj_WriteDSPCommand(0x0000, j)) /* Write IDLE to Software Control Register */
return -1;
-// The read values of the SSR should be 0x00 for the IDLE command
+/* The read values of the SSR should be 0x00 for the IDLE command */
if (j->ssr.low || j->ssr.high)
return -1;
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Get Device ID Code\n");
if (ixj_WriteDSPCommand(0x3400, j)) /* Get Device ID Code */
return -1;
j->dsp.low = j->ssr.low;
j->dsp.high = j->ssr.high;
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Get Device Version Code\n");
if (ixj_WriteDSPCommand(0x3800, j)) /* Get Device Version Code */
return -1;
@@ -5279,13 +6894,12 @@
j->ver.high = j->ssr.high;
if (!j->cardtype) {
if (j->dsp.low == 0x21) {
-// j->XILINXbase = j->DSPbase + 0x10;
bytes.high = bytes.low = inb_p(j->XILINXbase + 0x02);
outb_p(bytes.low ^ 0xFF, j->XILINXbase + 0x02);
-// Test for Internet LineJACK or Internet PhoneJACK Lite
+/* Test for Internet LineJACK or Internet PhoneJACK Lite */
bytes.low = inb_p(j->XILINXbase + 0x02);
- if (bytes.low == bytes.high) // Register is read only on
- // Internet PhoneJack Lite
+ if (bytes.low == bytes.high) /* Register is read only on */
+ /* Internet PhoneJack Lite */
{
j->cardtype = QTI_PHONEJACK_LITE;
if (check_region(j->XILINXbase, 4)) {
@@ -5343,14 +6957,12 @@
break;
}
}
- if (j->dsp.low == 0x20
- || j->cardtype == QTI_PHONEJACK_LITE
- || j->cardtype == QTI_PHONEJACK_PCI) {
- if (ixjdebug > 0)
+ if (j->dsp.low == 0x20 || j->cardtype == QTI_PHONEJACK_LITE || j->cardtype == QTI_PHONEJACK_PCI) {
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Write CODEC config to Software Control Register\n");
if (ixj_WriteDSPCommand(0xC462, j)) /* Write CODEC config to Software Control Register */
return -1;
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Write CODEC timing to Software Control Register\n");
if (j->cardtype == QTI_PHONEJACK) {
cmd = 0x9FF2;
@@ -5362,7 +6974,7 @@
} else {
if (set_base_frame(j, 30) != 30)
return -1;
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Write CODEC config to Software Control Register\n");
if (j->cardtype == QTI_PHONECARD) {
if (ixj_WriteDSPCommand(0xC528, j)) /* Write CODEC config to Software Control Register */
@@ -5371,7 +6983,7 @@
if (j->cardtype == QTI_LINEJACK) {
if (ixj_WriteDSPCommand(0xC528, j)) /* Write CODEC config to Software Control Register */
return -1;
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Turn on the PLD Clock at 8Khz\n");
j->pld_clock.byte = 0;
outb_p(j->pld_clock.byte, j->XILINXbase + 0x04);
@@ -5379,7 +6991,7 @@
}
if (j->dsp.low == 0x20) {
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Configure GPIO pins\n");
j->gpio.bytes.high = 0x09;
/* bytes.low = 0xEF; 0xF7 */
@@ -5391,7 +7003,7 @@
j->gpio.bits.gpio6 = 1;
j->gpio.bits.gpio7 = 1;
ixj_WriteDSPCommand(j->gpio.word, j); /* Set GPIO pin directions */
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Enable SLIC\n");
j->gpio.bytes.high = 0x0B;
j->gpio.bytes.low = 0x00;
@@ -5428,51 +7040,86 @@
}
LED_SetState(0x0, j);
daa_get_version(j);
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk("Loading DAA Coefficients\n");
DAA_Coeff_US(j);
- if (!ixj_daa_write(j))
- printk("DAA write failed on board %d\n",
- j->p.board);
- ixj_daa_cid_reset(j);
+ if (!ixj_daa_write(j)) {
+ printk("DAA write failed on board %d\n", j->board);
+ return -1;
+ }
+ if(!ixj_daa_cid_reset(j)) {
+ printk("DAA CID reset failed on board %d\n", j->board);
+ return -1;
+ }
j->flags.pots_correct = 0;
j->flags.pstn_present = 0;
ixj_linetest(j);
if (j->flags.pots_correct) {
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
outb_p(j->pld_scrw.byte, j->XILINXbase);
j->pld_slicw.bits.rly1 = 1;
j->pld_slicw.bits.spken = 1;
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
+/* SLIC_SetState(PLD_SLIC_STATE_ACTIVE, j); */
j->port = PORT_POTS;
}
ixj_set_port(j, PORT_PSTN);
ixj_set_pots(j, 1);
- if (ixjdebug > 0)
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Enable Mixer\n");
- ixj_mixer(0x0000, j); //Master Volume Left unmute 0db
+ ixj_mixer(0x0000, j); /*Master Volume Left unmute 0db */
+ ixj_mixer(0x0100, j); /*Master Volume Right unmute 0db */
+
+ ixj_mixer(0x0203, j); /*Voice Left Volume unmute 6db */
+ ixj_mixer(0x0303, j); /*Voice Right Volume unmute 6db */
- ixj_mixer(0x0100, j); //Master Volume Right unmute 0db
+ ixj_mixer(0x0480, j); /*FM Left mute */
+ ixj_mixer(0x0580, j); /*FM Right mute */
- ixj_mixer(0x0F00, j); //Mono Out Volume unmute 0db
+ ixj_mixer(0x0680, j); /*CD Left mute */
+ ixj_mixer(0x0780, j); /*CD Right mute */
- ixj_mixer(0x0C00, j); //Mono1 Volume unmute 0db
+ ixj_mixer(0x0880, j); /*Line Left mute */
+ ixj_mixer(0x0980, j); /*Line Right mute */
- ixj_mixer(0x0200, j); //Voice Left Volume unmute 0db
+ ixj_mixer(0x0A80, j); /*Aux left mute */
+ ixj_mixer(0x0B80, j); /*Aux right mute */
- ixj_mixer(0x0300, j); //Voice Right Volume unmute 0db
+ ixj_mixer(0x0C00, j); /*Mono1 unmute 12db */
+ ixj_mixer(0x0D80, j); /*Mono2 mute */
- ixj_mixer(0x110C, j); //Voice Left and Right out
+ ixj_mixer(0x0E80, j); /*Mic mute */
- ixj_mixer(0x1401, j); //Mono1 switch on mixer left
+ ixj_mixer(0x0F00, j); /*Mono Out Volume unmute 0db */
- ixj_mixer(0x1501, j); //Mono1 switch on mixer right
+ ixj_mixer(0x1000, j); /*Voice Left and Right out only */
+ ixj_mixer(0x110C, j);
- ixj_mixer(0x1700, j); //Clock select
- ixj_mixer(0x1800, j); //ADC Source select
+ ixj_mixer(0x1200, j); /*Mono1 switch on mixer left */
+ ixj_mixer(0x1401, j);
+
+ ixj_mixer(0x1300, j); /*Mono1 switch on mixer right */
+ ixj_mixer(0x1501, j);
+
+ ixj_mixer(0x1700, j); /*Clock select */
+
+ ixj_mixer(0x1800, j); /*ADC input from mixer */
+
+ ixj_mixer(0x1901, j); /*Mic gain 30db */
+
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "Setting Default US Ring Cadence Detection\n");
+ j->cadence_f[4].state = 0;
+ j->cadence_f[4].on1 = 0; /*Cadence Filter 4 is used for PSTN ring cadence */
+ j->cadence_f[4].off1 = 0;
+ j->cadence_f[4].on2 = 0;
+ j->cadence_f[4].off2 = 0;
+ j->cadence_f[4].on3 = 0;
+ j->cadence_f[4].off3 = 0; /* These should represent standard US ring pulse. */
+ j->pstn_last_rmr = jiffies;
} else {
if (j->cardtype == QTI_PHONECARD) {
@@ -5482,6 +7129,7 @@
} else {
ixj_set_port(j, PORT_POTS);
SLIC_SetState(PLD_SLIC_STATE_STANDBY, j);
+/* SLIC_SetState(PLD_SLIC_STATE_ACTIVE, j); */
}
}
}
@@ -5490,31 +7138,43 @@
j->framesread = j->frameswritten = 0;
j->read_wait = j->write_wait = 0;
j->rxreadycheck = j->txreadycheck = 0;
+
+ /* initialise the DTMF prescale to a sensible value */
+ if (j->cardtype == QTI_LINEJACK) {
+ set_dtmf_prescale(j, 0x10);
+ } else {
+ set_dtmf_prescale(j, 0x40);
+ }
set_play_volume(j, 0x100);
set_rec_volume(j, 0x100);
+
if (ixj_WriteDSPCommand(0x0000, j)) /* Write IDLE to Software Control Register */
return -1;
-// The read values of the SSR should be 0x00 for the IDLE command
+/* The read values of the SSR should be 0x00 for the IDLE command */
if (j->ssr.low || j->ssr.high)
return -1;
- if (ixjdebug > 0)
+
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Enable Line Monitor\n");
- if (ixjdebug > 0)
+
+ if (ixjdebug & 0x0002)
printk(KERN_INFO "Set Line Monitor to Asyncronous Mode\n");
- if (ixj_WriteDSPCommand(0x7E01, j)) // Asynchronous Line Monitor
+ if (ixj_WriteDSPCommand(0x7E01, j)) /* Asynchronous Line Monitor */
return -1;
- if (ixjdebug > 0)
+
+ if (ixjdebug & 0x002)
printk(KERN_INFO "Enable DTMF Detectors\n");
- if (ixj_WriteDSPCommand(0x5151, j)) // Enable DTMF detection
+ if (ixj_WriteDSPCommand(0x5151, j)) /* Enable DTMF detection */
return -1;
- if (ixj_WriteDSPCommand(0x6E01, j)) // Set Asyncronous Tone Generation
+ if (ixj_WriteDSPCommand(0x6E01, j)) /* Set Asyncronous Tone Generation */
return -1;
- set_rec_depth(j, 2); // Set Record Channel Limit to 2 frames
- set_play_depth(j, 2); // Set Playback Channel Limit to 2 frames
+ set_rec_depth(j, 2); /* Set Record Channel Limit to 2 frames */
+
+ set_play_depth(j, 2); /* Set Playback Channel Limit to 2 frames */
j->ex.bits.dtmf_ready = 0;
j->dtmf_state = 0;
@@ -5526,34 +7186,74 @@
j->drybuffer = 0;
j->winktime = 320;
j->flags.dtmf_oob = 0;
- for (i = 0; i < 4; i++)
- j->cadence_f[i].enable = 0;
+ for (cnt = 0; cnt < 4; cnt++)
+ j->cadence_f[cnt].enable = 0;
/* must be a device on the specified address */
- ixj_WriteDSPCommand(0x0FE3, j); // Put the DSP in 1/5 power mode.
+ ixj_WriteDSPCommand(0x0FE3, j); /* Put the DSP in 1/5 power mode. */
+
+ /* Set up the default signals for events */
+ for (cnt = 0; cnt < 35; cnt++)
+ j->ixj_signals[cnt] = SIGIO;
+
+ /* Set the excetion signal enable flags */
+ j->ex_sig.bits.dtmf_ready = j->ex_sig.bits.hookstate = j->ex_sig.bits.flash = j->ex_sig.bits.pstn_ring =
+ j->ex_sig.bits.caller_id = j->ex_sig.bits.pstn_wink = j->ex_sig.bits.f0 = j->ex_sig.bits.f1 = j->ex_sig.bits.f2 =
+ j->ex_sig.bits.f3 = j->ex_sig.bits.fc0 = j->ex_sig.bits.fc1 = j->ex_sig.bits.fc2 = j->ex_sig.bits.fc3 = 1;
+#ifdef IXJ_DYN_ALLOC
+ j->fskdata = NULL;
+#endif
+ j->fskdcnt = 0;
+ j->cidcw_wait = 0;
+
/* Register with the Telephony for Linux subsystem */
j->p.f_op = &ixj_fops;
j->p.open = ixj_open;
- j->p.board = cnt;
+ j->p.board = j->board;
phone_register_device(&j->p, PHONE_UNIT_ANY);
- add_caps(j);
+
+ ixj_init_timer(j);
+ ixj_add_timer(j);
return 0;
}
-int ixj_get_status_proc(char *buf)
+/*
+ * Exported service for pcmcia card handling
+ */
+
+IXJ *ixj_pcmcia_probe(unsigned long dsp, unsigned long xilinx)
+{
+ IXJ *j = ixj_alloc();
+
+ j->board = 0;
+
+ j->DSPbase = dsp;
+ j->XILINXbase = xilinx;
+ j->cardtype = QTI_PHONECARD;
+ ixj_selfprobe(j);
+ return j;
+}
+
+EXPORT_SYMBOL(ixj_pcmcia_probe); /* Fpr PCMCIA */
+
+static int ixj_get_status_proc(char *buf)
{
int len;
int cnt;
IXJ *j;
len = 0;
- len += sprintf(buf + len, "\n%s", ixj_c_rcsid);
+ len += sprintf(buf + len, "%s", ixj_c_rcsid);
len += sprintf(buf + len, "\n%s", ixj_h_rcsid);
len += sprintf(buf + len, "\n%s", ixjuser_h_rcsid);
- for (cnt = 0; cnt < IXJMAX; cnt++) {
- j = ixj[cnt];
+ len += sprintf(buf + len, "\nDriver version %i.%i.%i", IXJ_VER_MAJOR, IXJ_VER_MINOR, IXJ_BLD_VER);
+ len += sprintf(buf + len, "\nsizeof IXJ struct %d bytes", sizeof(IXJ));
+ len += sprintf(buf + len, "\nsizeof DAA struct %d bytes", sizeof(DAA_REGS));
+ len += sprintf(buf + len, "\nUsing old telephony API");
+ len += sprintf(buf + len, "\nDebug Level %d\n", ixjdebug);
- if (j == NULL)
+ for (cnt = 0; cnt < IXJMAX; cnt++) {
+ j = get_ixj(cnt);
+ if(j==NULL)
continue;
-
if (j->DSPbase) {
len += sprintf(buf + len, "\nCard Num %d", cnt);
len += sprintf(buf + len, "\nDSP Base Address 0x%4.4x", j->DSPbase);
@@ -5570,7 +7270,7 @@
len += sprintf(buf + len, "\nCard Type = Internet LineJACK");
if (j->flags.g729_loaded)
len += sprintf(buf + len, " w/G.729 A/B");
- len += sprintf(buf + len, " Country = %d", j->country);
+ len += sprintf(buf + len, " Country = %d", j->daa_country);
break;
case (QTI_PHONEJACK_LITE):
len += sprintf(buf + len, "\nCard Type = Internet PhoneJACK Lite");
@@ -5597,8 +7297,7 @@
}
len += sprintf(buf + len, "\nReaders %d", j->readers);
len += sprintf(buf + len, "\nWriters %d", j->writers);
- /* FIXME: This makes no sense! */
- len += sprintf(buf + len, "\nFSK words %d", ixj[2] ? ixj[2]->fskdcnt : 0);
+ add_caps(j);
len += sprintf(buf + len, "\nCapabilities %d", j->caps);
if (j->dsp.low != 0x20)
len += sprintf(buf + len, "\nDSP Processor load %d", j->proc_load);
@@ -5607,11 +7306,6 @@
else
len += sprintf(buf + len, "\nCaller ID data not sent");
- len += sprintf(buf + len, "\nCaller ID Date %s%s", j->cid_send.month, j->cid_send.day);
- len += sprintf(buf + len, "\nCaller ID Time %s%s", j->cid_send.hour, j->cid_send.min);
- len += sprintf(buf + len, "\nCaller ID Name %s", j->cid_send.name);
- len += sprintf(buf + len, "\nCaller ID Number %s", j->cid_send.number);
-
len += sprintf(buf + len, "\nPlay CODEC ");
switch (j->play_codec) {
case G723_63:
@@ -5635,6 +7329,9 @@
case G729:
len += sprintf(buf + len, "G.729");
break;
+ case G729B:
+ len += sprintf(buf + len, "G.729B");
+ break;
case ULAW:
len += sprintf(buf + len, "uLaw");
break;
@@ -5677,6 +7374,9 @@
case G729:
len += sprintf(buf + len, "G.729");
break;
+ case G729B:
+ len += sprintf(buf + len, "G.729B");
+ break;
case ULAW:
len += sprintf(buf + len, "uLaw");
break;
@@ -5696,33 +7396,49 @@
len += sprintf(buf + len, "NO CODEC CHOSEN");
break;
}
+ len += sprintf(buf + len, "\nAEC ");
switch (j->aec_level) {
case AEC_OFF:
- len += sprintf(buf + len, "\n AEC OFF");
+ len += sprintf(buf + len, "Off");
break;
case AEC_LOW:
- len += sprintf(buf + len, "\n AEC LOW");
+ len += sprintf(buf + len, "Low");
break;
case AEC_MED:
- len += sprintf(buf + len, "\n AEC MED");
+ len += sprintf(buf + len, "Med");
break;
case AEC_HIGH:
- len += sprintf(buf + len, "\n AEC HIGH");
+ len += sprintf(buf + len, "High");
+ break;
+ case AEC_AUTO:
+ len += sprintf(buf + len, "Auto");
+ break;
+ case AEC_AGC:
+ len += sprintf(buf + len, "AEC/AGC");
+ break;
+ default:
+ len += sprintf(buf + len, "unknown(%i)", j->aec_level);
break;
}
- len += sprintf(buf + len, "\nHook state %d", j->r_hook); // ixj_hookstate(cnt));
+
+ len += sprintf(buf + len, "\nRec volume 0x%x", get_rec_volume(j));
+ len += sprintf(buf + len, "\nPlay volume 0x%x", get_play_volume(j));
+ len += sprintf(buf + len, "\nDTMF prescale 0x%x", get_dtmf_prescale(j));
+
+ len += sprintf(buf + len, "\nHook state %d", j->hookstate); /* j->r_hook); */
if (j->cardtype == QTI_LINEJACK) {
len += sprintf(buf + len, "\nPOTS Correct %d", j->flags.pots_correct);
len += sprintf(buf + len, "\nPSTN Present %d", j->flags.pstn_present);
+ len += sprintf(buf + len, "\nPSTN Check %d", j->flags.pstncheck);
len += sprintf(buf + len, "\nPOTS to PSTN %d", j->flags.pots_pstn);
- len += sprintf(buf + len, "\nPSTN sleeptil %ld - jiffies %ld", j->pstn_sleeptil, jiffies);
switch (j->daa_mode) {
case SOP_PU_SLEEP:
len += sprintf(buf + len, "\nDAA PSTN On Hook");
break;
case SOP_PU_RINGING:
len += sprintf(buf + len, "\nDAA PSTN Ringing");
+ len += sprintf(buf + len, "\nRinging state = %d", j->cadence_f[4].state);
break;
case SOP_PU_CONVERSATION:
len += sprintf(buf + len, "\nDAA PSTN Off Hook");
@@ -5731,6 +7447,16 @@
len += sprintf(buf + len, "\nDAA PSTN Pulse Dialing");
break;
}
+ len += sprintf(buf + len, "\nDAA RMR = %d", j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.bitreg.RMR);
+ len += sprintf(buf + len, "\nDAA VDD OK = %d", j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK);
+ len += sprintf(buf + len, "\nDAA CR0 = 0x%02x", j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg);
+ len += sprintf(buf + len, "\nDAA CR1 = 0x%02x", j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg);
+ len += sprintf(buf + len, "\nDAA CR2 = 0x%02x", j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg);
+ len += sprintf(buf + len, "\nDAA CR3 = 0x%02x", j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg);
+ len += sprintf(buf + len, "\nDAA CR4 = 0x%02x", j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg);
+ len += sprintf(buf + len, "\nDAA CR5 = 0x%02x", j->m_DAAShadowRegs.SOP_REGS.SOP.cr5.reg);
+ len += sprintf(buf + len, "\nDAA XR0 = 0x%02x", j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.reg);
+ len += sprintf(buf + len, "\nDAA ringstop %ld - jiffies %ld", j->pstn_ring_stop, jiffies);
}
switch (j->port) {
case PORT_POTS:
@@ -5758,8 +7484,7 @@
case PLD_SLIC_STATE_ACTIVE:
len += sprintf(buf + len, "ACTIVE");
break;
- case PLD_SLIC_STATE_OHT: // On-hook transmit
-
+ case PLD_SLIC_STATE_OHT: /* On-hook transmit */
len += sprintf(buf + len, "OHT");
break;
case PLD_SLIC_STATE_TIPOPEN:
@@ -5768,12 +7493,10 @@
case PLD_SLIC_STATE_STANDBY:
len += sprintf(buf + len, "STANDBY");
break;
- case PLD_SLIC_STATE_APR: // Active polarity reversal
-
+ case PLD_SLIC_STATE_APR: /* Active polarity reversal */
len += sprintf(buf + len, "APR");
break;
- case PLD_SLIC_STATE_OHTPR: // OHT polarity reversal
-
+ case PLD_SLIC_STATE_OHTPR: /* OHT polarity reversal */
len += sprintf(buf + len, "OHTPR");
break;
default:
@@ -5781,16 +7504,24 @@
break;
}
}
+ len += sprintf(buf + len, "\nBase Frame %2.2x.%2.2x", j->baseframe.high, j->baseframe.low);
+ len += sprintf(buf + len, "\nCID Base Frame %2d", j->cid_base_frame_size);
#ifdef PERFMON_STATS
len += sprintf(buf + len, "\nTimer Checks %ld", j->timerchecks);
len += sprintf(buf + len, "\nRX Ready Checks %ld", j->rxreadycheck);
len += sprintf(buf + len, "\nTX Ready Checks %ld", j->txreadycheck);
- len += sprintf(buf + len, "\nBase Frame %2.2x.%2.2x", j->baseframe.high, j->baseframe.low);
len += sprintf(buf + len, "\nFrames Read %ld", j->framesread);
len += sprintf(buf + len, "\nFrames Written %ld", j->frameswritten);
len += sprintf(buf + len, "\nDry Buffer %ld", j->drybuffer);
len += sprintf(buf + len, "\nRead Waits %ld", j->read_wait);
len += sprintf(buf + len, "\nWrite Waits %ld", j->write_wait);
+ len += sprintf(buf + len, "\nStatus Waits %ld", j->statuswait);
+ len += sprintf(buf + len, "\nStatus Wait Fails %ld", j->statuswaitfail);
+ len += sprintf(buf + len, "\nPControl Waits %ld", j->pcontrolwait);
+ len += sprintf(buf + len, "\nPControl Wait Fails %ld", j->pcontrolwaitfail);
+ len += sprintf(buf + len, "\nIs Control Ready Checks %ld", j->iscontrolready);
+ len += sprintf(buf + len, "\nIs Control Ready Check failures %ld", j->iscontrolreadyfail);
+
#endif
len += sprintf(buf + len, "\n");
}
@@ -5798,19 +7529,6 @@
return len;
}
-int ixj_get_status_proc_fsk(char *buf)
-{
- int len;
- len = 0;
-
- /* This makes no sense - why is ixj[2] special? */
- if (ixj[2] != NULL && ixj[2]->fskdcnt) {
- memcpy(buf, &ixj[2]->fskdata, (ixj[2]->fskdcnt) * 2);
- len += ixj[2]->fskdcnt * 2;
- }
- return len;
-}
-
static int ixj_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
@@ -5823,409 +7541,92 @@
return len;
}
-static int ixj_read_proc_fsk(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- int len = ixj_get_status_proc_fsk(page);
- if (len <= off+count) *eof = 1;
- *start = page + off;
- len -= off;
- if (len>count) len = count;
- if (len<0) len = 0;
- return len;
-}
-
-MODULE_DESCRIPTION("Internet Phone/Internet LineJack module - www.quicknet.net");
-MODULE_AUTHOR("Ed Okerson <eokerson@quicknet.net>");
-
-#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
-
-#ifdef PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-MODULE_PARM(pc_debug, "i");
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-#else
-#define DEBUG(n, args...)
-#endif /* PCMCIA_DEBUG */
-
-typedef struct ixj_info_t {
- int ndev;
- dev_node_t node;
- struct ixj *port;
-} ixj_info_t;
-static dev_link_t *ixj_attach(void);
-static void ixj_detach(dev_link_t *);
-static void ixj_config(dev_link_t * link);
-static void ixj_cs_release(u_long arg);
-static int ixj_event(event_t event, int priority, event_callback_args_t * args);
-static dev_info_t dev_info = "ixj_cs";
-static dev_link_t *dev_list = NULL;
-static void cs_error(client_handle_t handle, int func, int ret)
-{
- error_info_t err =
- {
- func, ret
- };
- CardServices(ReportError, handle, &err);
-}
-
-static dev_link_t *ixj_attach(void)
-{
- client_reg_t client_reg;
- dev_link_t *link;
- int ret;
- DEBUG(0, "ixj_attach()\n");
- /* Create new ixj device */
- link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
- if (!link)
- return NULL;
- memset(link, 0, sizeof(struct dev_link_t));
- link->release.function = &ixj_cs_release;
- link->release.data = (u_long) link;
- link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
- link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
- link->io.IOAddrLines = 3;
- link->conf.Vcc = 50;
- link->conf.IntType = INT_MEMORY_AND_IO;
- link->priv = kmalloc(sizeof(struct ixj_info_t), GFP_KERNEL);
- if (!link->priv)
- return NULL;
- memset(link->priv, 0, sizeof(struct ixj_info_t));
- /* Register with Card Services */
- link->next = dev_list;
- dev_list = link;
- client_reg.dev_info = &dev_info;
- client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
- client_reg.EventMask =
- CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
- CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
- CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
- client_reg.event_handler = &ixj_event;
- client_reg.Version = 0x0210;
- client_reg.event_callback_args.client_data = link;
- ret = CardServices(RegisterClient, &link->handle, &client_reg);
- if (ret != CS_SUCCESS) {
- cs_error(link->handle, RegisterClient, ret);
- ixj_detach(link);
- return NULL;
- }
- return link;
-}
-
-static void ixj_detach(dev_link_t * link)
-{
- dev_link_t **linkp;
- long flags;
- int ret;
- DEBUG(0, "ixj_detach(0x%p)\n", link);
- for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
- if (*linkp == link)
- break;
- if (*linkp == NULL)
- return;
- save_flags(flags);
- cli();
- if (link->state & DEV_RELEASE_PENDING) {
- del_timer(&link->release);
- link->state &= ~DEV_RELEASE_PENDING;
- }
- restore_flags(flags);
- if (link->state & DEV_CONFIG)
- ixj_cs_release((u_long) link);
- if (link->handle) {
- ret = CardServices(DeregisterClient, link->handle);
- if (ret != CS_SUCCESS)
- cs_error(link->handle, DeregisterClient, ret);
- }
- /* Unlink device structure, free bits */
- *linkp = link->next;
- kfree(link->priv);
- kfree(link);
-}
-
-#define CS_CHECK(fn, args...) \
-while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
-
-#define CFG_CHECK(fn, args...) \
-if (CardServices(fn, args) != 0) goto next_entry
-
-void ixj_get_serial(dev_link_t * link, IXJ * j)
-{
- client_handle_t handle;
- tuple_t tuple;
- u_short buf[128];
- char *str;
- int last_ret, last_fn, i, place;
- handle = link->handle;
- DEBUG(0, "ixj_get_serial(0x%p)\n", link);
- tuple.TupleData = (cisdata_t *) buf;
- tuple.TupleOffset = 0;
- tuple.TupleDataMax = 80;
- tuple.Attributes = 0;
- tuple.DesiredTuple = CISTPL_VERS_1;
- CS_CHECK(GetFirstTuple, handle, &tuple);
- CS_CHECK(GetTupleData, handle, &tuple);
- str = (char *) buf;
- printk("PCMCIA Version %d.%d\n", str[0], str[1]);
- str += 2;
- printk("%s", str);
- str = str + strlen(str) + 1;
- printk(" %s", str);
- str = str + strlen(str) + 1;
- place = 1;
- for (i = strlen(str) - 1; i >= 0; i--) {
- switch (str[i]) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- j->serial += (str[i] - 48) * place;
- break;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- j->serial += (str[i] - 55) * place;
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- j->serial += (str[i] - 87) * place;
- break;
- }
- place = place * 0x10;
- }
- str = str + strlen(str) + 1;
- printk(" version %s\n", str);
- cs_failed:
- return;
-}
-
-void ixj_config(dev_link_t * link)
-{
- IXJ *j;
- client_handle_t handle;
- ixj_info_t *info;
- tuple_t tuple;
- u_short buf[128];
- cisparse_t parse;
- config_info_t conf;
- cistpl_cftable_entry_t *cfg = &parse.cftable_entry;
- cistpl_cftable_entry_t dflt =
- {
- 0
- };
- int last_ret, last_fn;
- handle = link->handle;
- info = link->priv;
- DEBUG(0, "ixj_config(0x%p)\n", link);
- tuple.TupleData = (cisdata_t *) buf;
- tuple.TupleOffset = 0;
- tuple.TupleDataMax = 255;
- tuple.Attributes = 0;
- tuple.DesiredTuple = CISTPL_CONFIG;
- CS_CHECK(GetFirstTuple, handle, &tuple);
- CS_CHECK(GetTupleData, handle, &tuple);
- CS_CHECK(ParseTuple, handle, &tuple, &parse);
- link->conf.ConfigBase = parse.config.base;
- link->conf.Present = parse.config.rmask[0];
- link->state |= DEV_CONFIG;
- CS_CHECK(GetConfigurationInfo, handle, &conf);
- tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
- tuple.Attributes = 0;
- CS_CHECK(GetFirstTuple, handle, &tuple);
- while (1) {
- CFG_CHECK(GetTupleData, handle, &tuple);
- CFG_CHECK(ParseTuple, handle, &tuple, &parse);
- if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
- cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
- link->conf.ConfigIndex = cfg->index;
- link->io.BasePort1 = io->win[0].base;
- link->io.NumPorts1 = io->win[0].len;
- if (io->nwin == 2) {
- link->io.BasePort2 = io->win[1].base;
- link->io.NumPorts2 = io->win[1].len;
- }
- CFG_CHECK(RequestIO, link->handle, &link->io);
- /* If we've got this far, we're done */
- break;
- }
- next_entry:
- if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
- dflt = *cfg;
- CS_CHECK(GetNextTuple, handle, &tuple);
- }
-
- CS_CHECK(RequestConfiguration, handle, &link->conf);
-
-
- if ((j = kmalloc(sizeof(*j), GFP_KERNEL)) == NULL)
- goto cs_failed;
-
- ixj[0] = j;
-
- j->DSPbase = link->io.BasePort1;
- j->XILINXbase = link->io.BasePort1 + 0x10;
- j->cardtype = QTI_PHONECARD;
- ixj_selfprobe(j, 0);
-
- info->ndev = 1;
- info->node.major = PHONE_MAJOR;
- link->dev = &info->node;
- ixj_get_serial(link, j);
- link->state &= ~DEV_CONFIG_PENDING;
- return;
-
- cs_failed:
- cs_error(link->handle, last_fn, last_ret);
- ixj_cs_release((u_long) link);
-}
-
-void ixj_cs_release(u_long arg)
-{
- dev_link_t *link = (dev_link_t *) arg;
- ixj_info_t *info = link->priv;
- DEBUG(0, "ixj_cs_release(0x%p)\n", link);
- info->ndev = 0;
- link->dev = NULL;
- CardServices(ReleaseConfiguration, link->handle);
- CardServices(ReleaseIO, link->handle, &link->io);
- link->state &= ~DEV_CONFIG;
-
- kfree(ixj[0]);
- ixj[0] = NULL;
-}
-
-int ixj_event(event_t event, int priority, event_callback_args_t * args)
-{
- dev_link_t *link = args->client_data;
- DEBUG(1, "ixj_event(0x%06x)\n", event);
- switch (event) {
- case CS_EVENT_CARD_REMOVAL:
- link->state &= ~DEV_PRESENT;
- if (link->state & DEV_CONFIG) {
- link->release.expires = jiffies + (HZ / 20);
- link->state |= DEV_RELEASE_PENDING;
- add_timer(&link->release);
- }
- break;
- case CS_EVENT_CARD_INSERTION:
- link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
- ixj_config(link);
- break;
- case CS_EVENT_PM_SUSPEND:
- link->state |= DEV_SUSPEND;
- /* Fall through... */
- case CS_EVENT_RESET_PHYSICAL:
- if (link->state & DEV_CONFIG)
- CardServices(ReleaseConfiguration, link->handle);
- break;
- case CS_EVENT_PM_RESUME:
- link->state &= ~DEV_SUSPEND;
- /* Fall through... */
- case CS_EVENT_CARD_RESET:
- if (DEV_OK(link))
- CardServices(RequestConfiguration, link->handle, &link->conf);
- break;
- }
- return 0;
-}
-
-#endif /* CONFIG_PCMCIA */
static void cleanup(void)
{
int cnt;
- del_timer(&ixj_timer);
- for (cnt = 0; cnt < IXJMAX; cnt++) {
- IXJ *j = ixj[cnt];
-
- if (j == NULL)
- continue;
+ IXJ *j;
- if (j->cardtype == QTI_LINEJACK) {
- j->pld_scrw.bits.daafsyncen = 0; // Turn off DAA Frame Sync
+ for (cnt = 0; cnt < IXJMAX; cnt++) {
+ j = get_ixj(cnt);
+ if(j != NULL && j->DSPbase) {
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Deleting timer for /dev/phone%d\n", cnt);
+ del_timer(&j->timer);
+ if (j->cardtype == QTI_LINEJACK) {
+ j->pld_scrw.bits.daafsyncen = 0; /* Turn off DAA Frame Sync */
- outb_p(j->pld_scrw.byte, j->XILINXbase);
- j->pld_slicw.bits.rly1 = 0;
- j->pld_slicw.bits.rly2 = 0;
- j->pld_slicw.bits.rly3 = 0;
- outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
- LED_SetState(0x0, j);
- release_region(j->XILINXbase, 8);
- }
- if (j->cardtype == QTI_PHONEJACK_LITE
- || j->cardtype == QTI_PHONEJACK_PCI) {
- release_region(j->XILINXbase, 4);
- }
- if (j->DSPbase) {
- release_region(j->DSPbase, 16);
+ outb_p(j->pld_scrw.byte, j->XILINXbase);
+ j->pld_slicw.bits.rly1 = 0;
+ j->pld_slicw.bits.rly2 = 0;
+ j->pld_slicw.bits.rly3 = 0;
+ outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
+ LED_SetState(0x0, j);
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Releasing XILINX address for /dev/phone%d\n", cnt);
+ release_region(j->XILINXbase, 8);
+ } else if (j->cardtype == QTI_PHONEJACK_LITE || j->cardtype == QTI_PHONEJACK_PCI) {
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Releasing XILINX address for /dev/phone%d\n", cnt);
+ release_region(j->XILINXbase, 4);
+ }
+ if (j->read_buffer)
+ kfree(j->read_buffer);
+ if (j->write_buffer)
+ kfree(j->write_buffer);
+ if (j->dev && j->dev->deactivate)
+ j->dev->deactivate(j->dev);
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Unregistering /dev/phone%d from LTAPI\n", cnt);
phone_unregister_device(&j->p);
- }
- if (j->read_buffer)
- kfree(j->read_buffer);
- if (j->write_buffer)
- kfree(j->write_buffer);
-#ifdef CONFIG_ISAPNP
- if (j->dev)
- j->dev->deactivate(j->dev);
-#endif
-#ifdef CONFIG_PCMCIA
- DEBUG(0, "ixj_cs: unloading\n");
- unregister_pcmcia_driver(&dev_info);
- while (dev_list != NULL)
- ixj_detach(dev_list);
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Releasing DSP address for /dev/phone%d\n", cnt);
+ release_region(j->DSPbase, 16);
+#ifdef IXJ_DYN_ALLOC
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Freeing memory for /dev/phone%d\n", cnt);
+ kfree(j);
+ ixj[cnt] = NULL;
#endif
-
- kfree(j);
- ixj[cnt] = NULL;
+ }
}
+ if (ixjdebug & 0x0002)
+ printk(KERN_INFO "IXJ: Removing /proc/ixj\n");
remove_proc_entry ("ixj", NULL);
- remove_proc_entry ("ixjfsk", NULL);
}
-// Typedefs
+/* Typedefs */
typedef struct {
BYTE length;
DWORD bits;
} DATABLOCK;
+
static void PCIEE_WriteBit(WORD wEEPROMAddress, BYTE lastLCC, BYTE byData)
{
lastLCC = lastLCC & 0xfb;
lastLCC = lastLCC | (byData ? 4 : 0);
- outb(lastLCC, wEEPROMAddress); //set data out bit as appropriate
+ outb(lastLCC, wEEPROMAddress); /*set data out bit as appropriate */
- udelay(1000);
+ mdelay(1);
lastLCC = lastLCC | 0x01;
- outb(lastLCC, wEEPROMAddress); //SK rising edge
+ outb(lastLCC, wEEPROMAddress); /*SK rising edge */
byData = byData << 1;
lastLCC = lastLCC & 0xfe;
- udelay(1000);
- outb(lastLCC, wEEPROMAddress); //after delay, SK falling edge
+ mdelay(1);
+ outb(lastLCC, wEEPROMAddress); /*after delay, SK falling edge */
}
static BYTE PCIEE_ReadBit(WORD wEEPROMAddress, BYTE lastLCC)
{
- udelay(1000);
+ mdelay(1);
lastLCC = lastLCC | 0x01;
- outb(lastLCC, wEEPROMAddress); //SK rising edge
+ outb(lastLCC, wEEPROMAddress); /*SK rising edge */
lastLCC = lastLCC & 0xfe;
- udelay(1000);
- outb(lastLCC, wEEPROMAddress); //after delay, SK falling edge
+ mdelay(1);
+ outb(lastLCC, wEEPROMAddress); /*after delay, SK falling edge */
return ((inb(wEEPROMAddress) >> 3) & 1);
}
@@ -6240,9 +7641,9 @@
lastLCC = inb(wEEPROMAddress);
lastLCC = lastLCC | 0x02;
lastLCC = lastLCC & 0xfe;
- outb(lastLCC, wEEPROMAddress); // CS hi, SK lo
+ outb(lastLCC, wEEPROMAddress); /* CS hi, SK lo */
- udelay(1000); // delay
+ mdelay(1); /* delay */
PCIEE_WriteBit(wEEPROMAddress, lastLCC, 1);
PCIEE_WriteBit(wEEPROMAddress, lastLCC, 1);
@@ -6257,10 +7658,10 @@
*pwResult = (*pwResult << 1) | byResult;
}
- udelay(1000); // another delay
+ mdelay(1); /* another delay */
lastLCC = lastLCC & 0xfd;
- outb(lastLCC, wEEPROMAddress); // negate CS
+ outb(lastLCC, wEEPROMAddress); /* negate CS */
return 0;
}
@@ -6275,51 +7676,31 @@
return (((DWORD) wHi << 16) | wLo);
}
-#ifndef CONFIG_ISAPNP
-static int dspio[IXJMAX + 1];
-static int xio[IXJMAX + 1];
+static int dspio[IXJMAX + 1] =
+{
+ 0,
+};
+static int xio[IXJMAX + 1] =
+{
+ 0,
+};
MODULE_PARM(dspio, "1-" __MODULE_STRING(IXJMAX) "i");
MODULE_PARM(xio, "1-" __MODULE_STRING(IXJMAX) "i");
-#endif
+MODULE_DESCRIPTION("Quicknet VoIP Telephony card module - www.quicknet.net");
+MODULE_AUTHOR("Ed Okerson <eokerson@quicknet.net>");
+MODULE_LICENSE("GPL");
void ixj_exit(void)
{
- cleanup();
-}
-
-#if defined(CONFIG_PCMCIA)
-int __init ixj_register_pcmcia(void)
-{
- servinfo_t serv;
-
- DEBUG(0, "%s\n", version);
- CardServices(GetCardServicesInfo, &serv);
- if (serv.Revision != CS_RELEASE_CODE) {
- printk(KERN_NOTICE "ixj_cs: Card Services release does not match!\n");
- return -EINVAL;
- }
- register_pcmcia_driver(&dev_info, &ixj_attach, &ixj_detach);
- return 0;
-}
-#else
-extern __inline__ int ixj_register_pcmcia(void)
-{
- return 0;
-}
-#endif /* CONFIG_PCMCIA */
-
-#if defined(CONFIG_ISAPNP)
-extern __inline__ int ixj_probe_isa(int *cnt)
-{
- return 0;
+ cleanup();
}
int __init ixj_probe_isapnp(int *cnt)
-{
+{
int probe = 0;
int func = 0x110;
- struct pci_dev *dev = NULL, *old_dev = NULL;
+ struct pci_dev *dev = NULL, *old_dev = NULL;
while (1) {
do {
@@ -6328,7 +7709,7 @@
old_dev = dev;
dev = isapnp_find_dev(NULL, ISAPNP_VENDOR('Q', 'T', 'I'),
- ISAPNP_FUNCTION(func), old_dev);
+ ISAPNP_FUNCTION(func), old_dev);
if (!dev)
break;
result = dev->prepare(dev);
@@ -6348,28 +7729,17 @@
return -ENOMEM;
}
- /* DSP base */
- if ((result = check_region(dev->resource[0].start, 16)) < 0) {
- printk(KERN_INFO "ixj: can't get I/O address 0x%lx\n",
- dev->resource[0].start);
- cleanup();
- return result;
- }
-
- if ((j = kmalloc(sizeof(*j), GFP_KERNEL)) == NULL) {
- cleanup();
- return -ENOMEM;
+ result = check_region(dev->resource[0].start, 16);
+ if (result) {
+ printk(KERN_INFO "ixj: can't get I/O address 0x%lx\n", dev->resource[0].start);
+ break;
}
- ixj[*cnt] = j;
-
- j->DSPbase = dev->resource[0].start;
-
- /* XXX is this racy? */
+ j = ixj_alloc();
request_region(j->DSPbase, 16, "ixj DSP");
if (func != 0x110)
- j->XILINXbase = dev->resource[1].start;
+ j->XILINXbase = dev->resource[1].start; /* get real port */
switch (func) {
case (0x110):
@@ -6382,23 +7752,22 @@
j->cardtype = QTI_PHONEJACK_LITE;
break;
}
- probe = ixj_selfprobe(j, *cnt);
-
- j->serial = dev->bus->serial;
- j->dev = dev;
- switch (func) {
- case 0x110:
- printk(KERN_INFO "ixj: found Internet PhoneJACK at 0x%x\n",
- j->DSPbase);
- break;
- case 0x310:
- printk(KERN_INFO "ixj: found Internet LineJACK at 0x%x\n",
- j->DSPbase);
- break;
- case 0x410:
- printk(KERN_INFO "ixj: found Internet PhoneJACK Lite at 0x%x\n",
- j->DSPbase);
- break;
+ j->board = *cnt;
+ probe = ixj_selfprobe(j);
+ if(!probe) {
+ j->serial = dev->bus->serial;
+ j->dev = dev;
+ switch (func) {
+ case 0x110:
+ printk(KERN_INFO "ixj: found Internet PhoneJACK at 0x%x\n", j->DSPbase);
+ break;
+ case 0x310:
+ printk(KERN_INFO "ixj: found Internet LineJACK at 0x%x\n", j->DSPbase);
+ break;
+ case 0x410:
+ printk(KERN_INFO "ixj: found Internet PhoneJACK Lite at 0x%x\n", j->DSPbase);
+ break;
+ }
}
++*cnt;
} while (dev);
@@ -6410,15 +7779,9 @@
func = 0x310;
dev = NULL;
}
-
return probe;
}
-#else
-extern __inline__ int ixj_probe_isapnp(int *cnt)
-{
- return 0;
-}
-
+
int __init ixj_probe_isa(int *cnt)
{
int i, result, probe;
@@ -6428,17 +7791,12 @@
if (dspio[i]) {
IXJ *j;
- if ((result = check_region(dspio[i], 16)) < 0) {
- printk(KERN_INFO "ixj: can't get I/O address 0x%x\n", dspio[i]);
- cleanup();
- return result;
+ if ((result = check_region(ixj[*cnt].DSPbase, 16)) < 0) {
+ printk(KERN_INFO "ixj: can't get I/O address 0x%x\n", ixj[*cnt].DSPbase);
+ break;
}
- if ((j = kmalloc(sizeof(*j), GFP_KERNEL)) == NULL) {
- cleanup();
- return -ENOMEM;
- }
- ixj[*cnt] = j;
+ j = ixj_alloc();
j->DSPbase = dspio[i];
request_region(j->DSPbase, 16, "ixj DSP");
@@ -6446,78 +7804,64 @@
j->XILINXbase = xio[i];
j->cardtype = 0;
- probe = ixj_selfprobe(j, *cnt);
+ j->board = *cnt;
+ probe = ixj_selfprobe(j);
j->dev = NULL;
-
++*cnt;
}
}
-
return 0;
}
-#endif /* CONFIG_ISAPNP */
-#if defined(CONFIG_PCI)
int __init ixj_probe_pci(int *cnt)
{
- struct pci_dev *pci = NULL;
+ struct pci_dev *pci = NULL;
int i, probe = 0;
+ IXJ *j = NULL;
+ int result;
+
+ if(!pci_present())
+ return 0;
for (i = 0; i < IXJMAX - *cnt; i++) {
pci = pci_find_device(0x15E2, 0x0500, pci);
if (!pci)
break;
+
if (pci_enable_device(pci))
break;
- {
- IXJ *j;
- int result;
-
- if ((result = check_region(pci_resource_start(pci, 0), 16)) < 0) {
- printk(KERN_INFO "ixj: can't get I/O address 0x%lx\n",
- pci_resource_start(pci, 0));
- cleanup();
- return result;
- }
-
- if ((j = kmalloc(sizeof(*j), GFP_KERNEL)) == NULL) {
- cleanup();
- return -ENOMEM;
- }
- ixj[*cnt] = j;
-
- j->DSPbase = pci_resource_start(pci, 0);
- request_region(j->DSPbase, 16, "ixj DSP");
-
- j->XILINXbase = j->DSPbase + 0x10;
- j->serial = (PCIEE_GetSerialNumber)pci_resource_start(pci, 2);
- j->cardtype = QTI_PHONEJACK_PCI;
-
- probe = ixj_selfprobe(j, *cnt);
- if (probe)
- printk(KERN_INFO "ixj: found Internet PhoneJACK PCI at 0x%x\n", j->DSPbase);
- ++*cnt;
+ if ((result = check_region(pci_resource_start(pci, 0), 16)) < 0) {
+ printk(KERN_INFO "ixj: can't get I/O address\n");
+ break;
}
- }
+ /* Grab a device slot */
+ j = ixj_alloc();
+ if(j == NULL)
+ break;
+
+ j->DSPbase = pci_resource_start(pci, 0);
+ j->serial = (PCIEE_GetSerialNumber)pci_resource_start(pci, 2);
+ j->XILINXbase = j->DSPbase + 0x10;
+ request_region(j->DSPbase, 16, "ixj DSP");
+ j->cardtype = QTI_PHONEJACK_PCI;
+ j->board = *cnt;
+ probe = ixj_selfprobe(j);
+ if (!probe)
+ printk(KERN_INFO "ixj: found Internet PhoneJACK PCI at 0x%x\n", j->DSPbase);
+ ++*cnt;
+ }
return probe;
}
-#else
-extern __inline__ int ixj_probe_pci(int *cnt)
-{
- return 0;
-}
-#endif /* CONFIG_PCI */
int __init ixj_init(void)
{
int cnt = 0;
- int probe = 0;
+ int probe = 0;
+
+ cnt = 0;
/* These might be no-ops, see above. */
- if ((probe = ixj_register_pcmcia()) < 0) {
- return probe;
- }
if ((probe = ixj_probe_isapnp(&cnt)) < 0) {
return probe;
}
@@ -6528,16 +7872,9 @@
if ((probe = ixj_probe_pci(&cnt)) < 0) {
return probe;
}
- }
-
+ }
printk("%s\n", ixj_c_rcsid);
-
create_proc_read_entry ("ixj", 0, NULL, ixj_read_proc, NULL);
- create_proc_read_entry ("ixjfsk", 0, NULL, ixj_read_proc_fsk, NULL);
-
- ixj_init_timer();
- ixj_add_timer();
-
return probe;
}
@@ -6549,112 +7886,138 @@
int i;
j->daa_country = DAA_US;
- //-----------------------------------------------
- // CAO
+ /*----------------------------------------------- */
+ /* CAO */
for (i = 0; i < ALISDAA_CALLERID_SIZE; i++) {
j->m_DAAShadowRegs.CAO_REGS.CAO.CallerID[i] = 0;
}
-// Bytes for IM-filter part 1 (04): 0E,32,E2,2F,C2,5A,C0,00
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x0E;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0x32;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0xE2;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[4] = 0x2F;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[3] = 0xC2;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0x5A;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xC0;
+/* Bytes for IM-filter part 1 (04): 0E,32,E2,2F,C2,5A,C0,00 */
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x03;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0x4B;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0x5D;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[4] = 0xCD;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[3] = 0x24;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0xC5;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xA0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[0] = 0x00;
-// Bytes for IM-filter part 2 (05): 72,85,00,0E,2B,3A,D0,08
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x72;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0x85;
+/* Bytes for IM-filter part 2 (05): 72,85,00,0E,2B,3A,D0,08 */
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x71;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0x1A;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[5] = 0x00;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[4] = 0x0E;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[3] = 0x2B;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x3A;
- j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xD0;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[4] = 0x0A;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[3] = 0xB5;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x33;
+ j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xE0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[0] = 0x08;
-// Bytes for FRX-filter (08): 03,8F,48,F2,8F,48,70,08
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x03;
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0x8F;
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0x48;
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[4] = 0xF2;
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[3] = 0x8F;
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0x48;
- j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0x70;
+/* Bytes for FRX-filter (08): 03,8F,48,F2,8F,48,70,08 */
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x05;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0xA3;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0x72;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[4] = 0x34;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[3] = 0x3F;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0x3B;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0x30;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[0] = 0x08;
-// Bytes for FRR-filter (07): 04,8F,38,7F,9B,EA,B0,08
- j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x04;
- j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x8F;
- j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0x38;
- j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[4] = 0x7F;
- j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[3] = 0x9B;
- j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xEA;
+/* Bytes for FRR-filter (07): 04,8F,38,7F,9B,EA,B0,08 */
+ j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x05;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x87;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0xF9;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[4] = 0x3E;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[3] = 0x32;
+ j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xDA;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[1] = 0xB0;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[0] = 0x08;
-// Bytes for AX-filter (0A): 16,55,DD,CA
- j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0x16;
- j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0x55;
+/* Bytes for AX-filter (0A): 16,55,DD,CA */
+ j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0x41;
+ j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[1] = 0xDD;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[0] = 0xCA;
-// Bytes for AR-filter (09): 52,D3,11,42
- j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0x52;
- j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0xD3;
- j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x11;
- j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0x42;
-// Bytes for TH-filter part 1 (00): 00,42,48,81,B3,80,00,98
+/* Bytes for AR-filter (09): 52,D3,11,42 */
+ j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0x25;
+ j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0xC7;
+ j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x10;
+ j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0xD6;
+/* Bytes for TH-filter part 1 (00): 00,42,48,81,B3,80,00,98 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[6] = 0x42;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[5] = 0x48;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[4] = 0x81;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[3] = 0xB3;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[3] = 0xA5;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[2] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[0] = 0x98;
-// Bytes for TH-filter part 2 (01): 02,F2,33,A0,68,AB,8A,AD
+/* Bytes for TH-filter part 2 (01): 02,F2,33,A0,68,AB,8A,AD */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[7] = 0x02;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0xF2;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x33;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[4] = 0xA0;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[3] = 0x68;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0xA2;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x2B;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[4] = 0xB0;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[3] = 0xE8;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[2] = 0xAB;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x8A;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0xAD;
-// Bytes for TH-filter part 3 (02): 00,88,DA,54,A4,BA,2D,BB
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x81;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0xCC;
+/* Bytes for TH-filter part 3 (02): 00,88,DA,54,A4,BA,2D,BB */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[6] = 0x88;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0xDA;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[4] = 0x54;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[3] = 0xA4;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0xBA;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0x2D;
- j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0xBB;
-// ; (10K, 0.68uF)
- //
- // Bytes for Ringing part 1 (03):1B,3B,9B,BA,D4,1C,B3,23
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0xD2;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[4] = 0x24;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[3] = 0xBA;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0xA9;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0x3B;
+ j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0xA6;
+/* ; (10K, 0.68uF) */
+ /* */
+ /* Bytes for Ringing part 1 (03):1B,3B,9B,BA,D4,1C,B3,23 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1B;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3B;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x9B;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[4] = 0xBA;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[3] = 0xD4;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x1C;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xB3;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3C;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x93;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[4] = 0x3A;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[3] = 0x22;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x12;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x23;
-// Bytes for Ringing part 2 (06):13,42,A6,BA,D4,73,CA,D5
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x13;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0x42;
+ /* Bytes for Ringing part 2 (06):13,42,A6,BA,D4,73,CA,D5 */
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x12;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[4] = 0xBA;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[3] = 0xD4;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x73;
- j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0xCA;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[3] = 0x22;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x7A;
+ j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0x0A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD5;
-//
- // Levelmetering Ringing (0D):B2,45,0F,8E
- j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0xB2;
- j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x45;
+
+ /* Levelmetering Ringing (0D):B2,45,0F,8E */
+ j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0xAA;
+ j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x35;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0x0F;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x8E;
-// Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99
+
+ /* Bytes for Ringing part 1 (03):1B,3B,9B,BA,D4,1C,B3,23 */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1C; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0xB3; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0xAB; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[4] = 0xAB; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[3] = 0x54; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x2D; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0x62; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x2D; */
+ /* Bytes for Ringing part 2 (06):13,42,A6,BA,D4,73,CA,D5 */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x2D; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0x62; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[4] = 0xBB; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[3] = 0x2A; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x7D; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0x0A; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD4; */
+/* */
+ /* Levelmetering Ringing (0D):B2,45,0F,8E */
+/* j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0xAA; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x05; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0x0F; */
+/* j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x8E; */
+
+ /* Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[7] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[6] = 0x0E;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[5] = 0xCA;
@@ -6663,7 +8026,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[2] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[1] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[0] = 0x99;
-// Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00
+/* Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[7] = 0xFD;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[6] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[5] = 0xBA;
@@ -6672,56 +8035,56 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[0] = 0x00;
-//
- // ;CR Registers
- // Config. Reg. 0 (filters) (cr0):FE ; CLK gen. by crystal
+/* */
+ /* ;CR Registers */
+ /* Config. Reg. 0 (filters) (cr0):FE ; CLK gen. by crystal */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFF;
-// Config. Reg. 1 (dialing) (cr1):05
+/* Config. Reg. 1 (dialing) (cr1):05 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = 0x05;
-// Config. Reg. 2 (caller ID) (cr2):04
+/* Config. Reg. 2 (caller ID) (cr2):04 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = 0x04;
-// Config. Reg. 3 (testloops) (cr3):03 ; SEL Bit==0, HP-disabled
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x03;
-// Config. Reg. 4 (analog gain) (cr4):01
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02; //0x01;
- // Config. Reg. 5 (Version) (cr5):02
- // Config. Reg. 6 (Reserved) (cr6):00
- // Config. Reg. 7 (Reserved) (cr7):00
- //
- // ;xr Registers
- // Ext. Reg. 0 (Interrupt Reg.) (xr0):02
+/* Config. Reg. 3 (testloops) (cr3):03 ; SEL Bit==0, HP-disabled */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x00;
+/* Config. Reg. 4 (analog gain) (cr4):02 */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02;
+ /* Config. Reg. 5 (Version) (cr5):02 */
+ /* Config. Reg. 6 (Reserved) (cr6):00 */
+ /* Config. Reg. 7 (Reserved) (cr7):00 */
+ /* */
+ /* ;xr Registers */
+ /* Ext. Reg. 0 (Interrupt Reg.) (xr0):02 */
- j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; // SO_1 set to '1' because it is inverted.
- // Ext. Reg. 1 (Interrupt enable) (xr1):1C // Cadence, RING, Caller ID, VDD_OK
+ j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; /* SO_1 set to '1' because it is inverted. */
+ /* Ext. Reg. 1 (Interrupt enable) (xr1):3C Cadence, RING, Caller ID, VDD_OK */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x3C;
-// Ext. Reg. 2 (Cadence Time Out) (xr2):7D
+/* Ext. Reg. 2 (Cadence Time Out) (xr2):7D */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr2.reg = 0x7D;
-// Ext. Reg. 3 (DC Char) (xr3):32 ; B-Filter Off == 1
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x12; //0x32;
- // Ext. Reg. 4 (Cadence) (xr4):00
+/* Ext. Reg. 3 (DC Char) (xr3):32 ; B-Filter Off == 1 */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x3B; /*0x32; */
+ /* Ext. Reg. 4 (Cadence) (xr4):00 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr4.reg = 0x00;
-// Ext. Reg. 5 (Ring timer) (xr5):22
+/* Ext. Reg. 5 (Ring timer) (xr5):22 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr5.reg = 0x22;
-// Ext. Reg. 6 (Power State) (xr6):00
+/* Ext. Reg. 6 (Power State) (xr6):00 */
j->m_DAAShadowRegs.XOP_xr6_W.reg = 0x00;
-// Ext. Reg. 7 (Vdd) (xr7):40
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; // 0x40 ??? Should it be 0x00?
- //
- // DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz
- // 12,33,5A,C3 ; 770 Hz
- // 13,3C,5B,32 ; 852 Hz
- // 1D,1B,5C,CC ; 941 Hz
+/* Ext. Reg. 7 (Vdd) (xr7):40 */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; /* 0x40 ??? Should it be 0x00? */
+ /* */
+ /* DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz */
+ /* 12,33,5A,C3 ; 770 Hz */
+ /* 13,3C,5B,32 ; 852 Hz */
+ /* 1D,1B,5C,CC ; 941 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[3] = 0x11;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[2] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[1] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[0] = 0x2C;
-// DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz
- // EC,1D,52,22 ; 1336 Hz
- // AA,AC,51,D2 ; 1477 Hz
- // 9B,3B,51,25 ; 1633 Hz
+/* DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz */
+ /* EC,1D,52,22 ; 1336 Hz */
+ /* AA,AC,51,D2 ; 1477 Hz */
+ /* 9B,3B,51,25 ; 1633 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[2] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[1] = 0x52;
@@ -6733,13 +8096,13 @@
int i;
j->daa_country = DAA_UK;
- //-----------------------------------------------
- // CAO
+ /*----------------------------------------------- */
+ /* CAO */
for (i = 0; i < ALISDAA_CALLERID_SIZE; i++) {
j->m_DAAShadowRegs.CAO_REGS.CAO.CallerID[i] = 0;
}
-// Bytes for IM-filter part 1 (04): 00,C2,BB,A8,CB,81,A0,00
+/* Bytes for IM-filter part 1 (04): 00,C2,BB,A8,CB,81,A0,00 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0xC2;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0xBB;
@@ -6748,7 +8111,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0x81;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xA0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[0] = 0x00;
-// Bytes for IM-filter part 2 (05): 40,00,00,0A,A4,33,E0,08
+/* Bytes for IM-filter part 2 (05): 40,00,00,0A,A4,33,E0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x40;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[5] = 0x00;
@@ -6757,7 +8120,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x33;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xE0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[0] = 0x08;
-// Bytes for FRX-filter (08): 07,9B,ED,24,B2,A2,A0,08
+/* Bytes for FRX-filter (08): 07,9B,ED,24,B2,A2,A0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x07;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0x9B;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0xED;
@@ -6766,7 +8129,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0xA0;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[0] = 0x08;
-// Bytes for FRR-filter (07): 0F,92,F2,B2,87,D2,30,08
+/* Bytes for FRR-filter (07): 0F,92,F2,B2,87,D2,30,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x0F;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x92;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0xF2;
@@ -6775,17 +8138,17 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xD2;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[1] = 0x30;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[0] = 0x08;
-// Bytes for AX-filter (0A): 1B,A5,DD,CA
+/* Bytes for AX-filter (0A): 1B,A5,DD,CA */
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0xA5;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[1] = 0xDD;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[0] = 0xCA;
-// Bytes for AR-filter (09): E2,27,10,D6
+/* Bytes for AR-filter (09): E2,27,10,D6 */
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0xE2;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0x27;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x10;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0xD6;
-// Bytes for TH-filter part 1 (00): 80,2D,38,8B,D0,00,00,98
+/* Bytes for TH-filter part 1 (00): 80,2D,38,8B,D0,00,00,98 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[7] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[6] = 0x2D;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[5] = 0x38;
@@ -6794,7 +8157,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[0] = 0x98;
-// Bytes for TH-filter part 2 (01): 02,5A,53,F0,0B,5F,84,D4
+/* Bytes for TH-filter part 2 (01): 02,5A,53,F0,0B,5F,84,D4 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x53;
@@ -6803,7 +8166,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[2] = 0x5F;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x84;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0xD4;
-// Bytes for TH-filter part 3 (02): 00,88,6A,A4,8F,52,F5,32
+/* Bytes for TH-filter part 3 (02): 00,88,6A,A4,8F,52,F5,32 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[6] = 0x88;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0x6A;
@@ -6812,8 +8175,8 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0x52;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0xF5;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0x32;
-// ; idle
- // Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23
+/* ; idle */
+ /* Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3C;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x93;
@@ -6822,7 +8185,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x23;
-// Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5
+/* Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6;
@@ -6831,12 +8194,12 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x7A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0x0A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD5;
-// Levelmetering Ringing (0D):AA,35,0F,8E ; 25Hz 30V less possible?
+/* Levelmetering Ringing (0D):AA,35,0F,8E ; 25Hz 30V less possible? */
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0xAA;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x35;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0x0F;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x8E;
-// Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99
+/* Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[7] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[6] = 0x0E;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[5] = 0xCA;
@@ -6845,7 +8208,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[2] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[1] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[0] = 0x99;
-// Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00
+/* Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[7] = 0xFD;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[6] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[5] = 0xBA;
@@ -6854,53 +8217,53 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[0] = 0x00;
-// ;CR Registers
- // Config. Reg. 0 (filters) (cr0):FF
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFE;
-// Config. Reg. 1 (dialing) (cr1):05
+/* ;CR Registers */
+ /* Config. Reg. 0 (filters) (cr0):FF */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFF;
+/* Config. Reg. 1 (dialing) (cr1):05 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = 0x05;
-// Config. Reg. 2 (caller ID) (cr2):04
+/* Config. Reg. 2 (caller ID) (cr2):04 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = 0x04;
-// Config. Reg. 3 (testloops) (cr3):00 ;
+/* Config. Reg. 3 (testloops) (cr3):00 ; */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x00;
-// Config. Reg. 4 (analog gain) (cr4):01
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02; //0x01;
- // Config. Reg. 5 (Version) (cr5):02
- // Config. Reg. 6 (Reserved) (cr6):00
- // Config. Reg. 7 (Reserved) (cr7):00
- // ;xr Registers
- // Ext. Reg. 0 (Interrupt Reg.) (xr0):02
+/* Config. Reg. 4 (analog gain) (cr4):02 */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02;
+ /* Config. Reg. 5 (Version) (cr5):02 */
+ /* Config. Reg. 6 (Reserved) (cr6):00 */
+ /* Config. Reg. 7 (Reserved) (cr7):00 */
+ /* ;xr Registers */
+ /* Ext. Reg. 0 (Interrupt Reg.) (xr0):02 */
- j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; // SO_1 set to '1' because it is inverted.
- // Ext. Reg. 1 (Interrupt enable) (xr1):1C
+ j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; /* SO_1 set to '1' because it is inverted. */
+ /* Ext. Reg. 1 (Interrupt enable) (xr1):1C */
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; // RING, Caller ID, VDD_OK
- // Ext. Reg. 2 (Cadence Time Out) (xr2):7D
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; /* RING, Caller ID, VDD_OK */
+ /* Ext. Reg. 2 (Cadence Time Out) (xr2):7D */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr2.reg = 0x7D;
-// Ext. Reg. 3 (DC Char) (xr3):36 ;
+/* Ext. Reg. 3 (DC Char) (xr3):36 ; */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x36;
-// Ext. Reg. 4 (Cadence) (xr4):00
+/* Ext. Reg. 4 (Cadence) (xr4):00 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr4.reg = 0x00;
-// Ext. Reg. 5 (Ring timer) (xr5):22
+/* Ext. Reg. 5 (Ring timer) (xr5):22 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr5.reg = 0x22;
-// Ext. Reg. 6 (Power State) (xr6):00
+/* Ext. Reg. 6 (Power State) (xr6):00 */
j->m_DAAShadowRegs.XOP_xr6_W.reg = 0x00;
-// Ext. Reg. 7 (Vdd) (xr7):46
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x46; // 0x46 ??? Should it be 0x00?
- // DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz
- // 12,33,5A,C3 ; 770 Hz
- // 13,3C,5B,32 ; 852 Hz
- // 1D,1B,5C,CC ; 941 Hz
+/* Ext. Reg. 7 (Vdd) (xr7):46 */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x46; /* 0x46 ??? Should it be 0x00? */
+ /* DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz */
+ /* 12,33,5A,C3 ; 770 Hz */
+ /* 13,3C,5B,32 ; 852 Hz */
+ /* 1D,1B,5C,CC ; 941 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[3] = 0x11;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[2] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[1] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[0] = 0x2C;
-// DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz
- // EC,1D,52,22 ; 1336 Hz
- // AA,AC,51,D2 ; 1477 Hz
- // 9B,3B,51,25 ; 1633 Hz
+/* DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz */
+ /* EC,1D,52,22 ; 1336 Hz */
+ /* AA,AC,51,D2 ; 1477 Hz */
+ /* 9B,3B,51,25 ; 1633 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[2] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[1] = 0x52;
@@ -6913,13 +8276,13 @@
int i;
j->daa_country = DAA_FRANCE;
- //-----------------------------------------------
- // CAO
+ /*----------------------------------------------- */
+ /* CAO */
for (i = 0; i < ALISDAA_CALLERID_SIZE; i++) {
j->m_DAAShadowRegs.CAO_REGS.CAO.CallerID[i] = 0;
}
-// Bytes for IM-filter part 1 (04): 02,A2,43,2C,22,AF,A0,00
+/* Bytes for IM-filter part 1 (04): 02,A2,43,2C,22,AF,A0,00 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0x43;
@@ -6928,7 +8291,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0xAF;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xA0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[0] = 0x00;
-// Bytes for IM-filter part 2 (05): 67,CE,00,0C,22,33,E0,08
+/* Bytes for IM-filter part 2 (05): 67,CE,00,0C,22,33,E0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x67;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0xCE;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[5] = 0x00;
@@ -6937,7 +8300,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x33;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xE0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[0] = 0x08;
-// Bytes for FRX-filter (08): 07,9A,28,F6,23,4A,B0,08
+/* Bytes for FRX-filter (08): 07,9A,28,F6,23,4A,B0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x07;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0x9A;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0x28;
@@ -6946,7 +8309,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0x4A;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0xB0;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[0] = 0x08;
-// Bytes for FRR-filter (07): 03,8F,F9,2F,9E,FA,20,08
+/* Bytes for FRR-filter (07): 03,8F,F9,2F,9E,FA,20,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x03;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x8F;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0xF9;
@@ -6955,17 +8318,17 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xFA;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[1] = 0x20;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[0] = 0x08;
-// Bytes for AX-filter (0A): 16,B5,DD,CA
+/* Bytes for AX-filter (0A): 16,B5,DD,CA */
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0x16;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[1] = 0xDD;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[0] = 0xCA;
-// Bytes for AR-filter (09): 52,C7,10,D6
+/* Bytes for AR-filter (09): 52,C7,10,D6 */
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0xE2;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0xC7;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x10;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0xD6;
-// Bytes for TH-filter part 1 (00): 00,42,48,81,A6,80,00,98
+/* Bytes for TH-filter part 1 (00): 00,42,48,81,A6,80,00,98 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[6] = 0x42;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[5] = 0x48;
@@ -6974,7 +8337,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[2] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[0] = 0x98;
-// Bytes for TH-filter part 2 (01): 02,AC,2A,30,78,AC,8A,2C
+/* Bytes for TH-filter part 2 (01): 02,AC,2A,30,78,AC,8A,2C */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0xAC;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x2A;
@@ -6983,7 +8346,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[2] = 0xAC;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x8A;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0x2C;
-// Bytes for TH-filter part 3 (02): 00,88,DA,A5,22,BA,2C,45
+/* Bytes for TH-filter part 3 (02): 00,88,DA,A5,22,BA,2C,45 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[6] = 0x88;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0xDA;
@@ -6992,8 +8355,8 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0xBA;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0x2C;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0x45;
-// ; idle
- // Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23
+/* ; idle */
+ /* Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3C;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x93;
@@ -7002,7 +8365,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x23;
-// Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5
+/* Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6;
@@ -7011,12 +8374,12 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x7A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0x0A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD5;
-// Levelmetering Ringing (0D):32,45,B5,84 ; 50Hz 20V
+/* Levelmetering Ringing (0D):32,45,B5,84 ; 50Hz 20V */
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x45;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x84;
-// Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99
+/* Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[7] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[6] = 0x0E;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[5] = 0xCA;
@@ -7025,7 +8388,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[2] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[1] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[0] = 0x99;
-// Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00
+/* Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[7] = 0xFD;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[6] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[5] = 0xBA;
@@ -7034,53 +8397,53 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[0] = 0x00;
-// ;CR Registers
- // Config. Reg. 0 (filters) (cr0):FF
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFE;
-// Config. Reg. 1 (dialing) (cr1):05
+/* ;CR Registers */
+ /* Config. Reg. 0 (filters) (cr0):FF */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFF;
+/* Config. Reg. 1 (dialing) (cr1):05 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = 0x05;
-// Config. Reg. 2 (caller ID) (cr2):04
+/* Config. Reg. 2 (caller ID) (cr2):04 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = 0x04;
-// Config. Reg. 3 (testloops) (cr3):00 ;
+/* Config. Reg. 3 (testloops) (cr3):00 ; */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x00;
-// Config. Reg. 4 (analog gain) (cr4):01
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02; //0x01;
- // Config. Reg. 5 (Version) (cr5):02
- // Config. Reg. 6 (Reserved) (cr6):00
- // Config. Reg. 7 (Reserved) (cr7):00
- // ;xr Registers
- // Ext. Reg. 0 (Interrupt Reg.) (xr0):02
+/* Config. Reg. 4 (analog gain) (cr4):02 */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02;
+ /* Config. Reg. 5 (Version) (cr5):02 */
+ /* Config. Reg. 6 (Reserved) (cr6):00 */
+ /* Config. Reg. 7 (Reserved) (cr7):00 */
+ /* ;xr Registers */
+ /* Ext. Reg. 0 (Interrupt Reg.) (xr0):02 */
- j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; // SO_1 set to '1' because it is inverted.
- // Ext. Reg. 1 (Interrupt enable) (xr1):1C
+ j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; /* SO_1 set to '1' because it is inverted. */
+ /* Ext. Reg. 1 (Interrupt enable) (xr1):1C */
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; // RING, Caller ID, VDD_OK
- // Ext. Reg. 2 (Cadence Time Out) (xr2):7D
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; /* RING, Caller ID, VDD_OK */
+ /* Ext. Reg. 2 (Cadence Time Out) (xr2):7D */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr2.reg = 0x7D;
-// Ext. Reg. 3 (DC Char) (xr3):36 ;
+/* Ext. Reg. 3 (DC Char) (xr3):36 ; */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x36;
-// Ext. Reg. 4 (Cadence) (xr4):00
+/* Ext. Reg. 4 (Cadence) (xr4):00 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr4.reg = 0x00;
-// Ext. Reg. 5 (Ring timer) (xr5):22
+/* Ext. Reg. 5 (Ring timer) (xr5):22 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr5.reg = 0x22;
-// Ext. Reg. 6 (Power State) (xr6):00
+/* Ext. Reg. 6 (Power State) (xr6):00 */
j->m_DAAShadowRegs.XOP_xr6_W.reg = 0x00;
-// Ext. Reg. 7 (Vdd) (xr7):46
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x46; // 0x46 ??? Should it be 0x00?
- // DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz
- // 12,33,5A,C3 ; 770 Hz
- // 13,3C,5B,32 ; 852 Hz
- // 1D,1B,5C,CC ; 941 Hz
+/* Ext. Reg. 7 (Vdd) (xr7):46 */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x46; /* 0x46 ??? Should it be 0x00? */
+ /* DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz */
+ /* 12,33,5A,C3 ; 770 Hz */
+ /* 13,3C,5B,32 ; 852 Hz */
+ /* 1D,1B,5C,CC ; 941 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[3] = 0x11;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[2] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[1] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[0] = 0x2C;
-// DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz
- // EC,1D,52,22 ; 1336 Hz
- // AA,AC,51,D2 ; 1477 Hz
- // 9B,3B,51,25 ; 1633 Hz
+/* DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz */
+ /* EC,1D,52,22 ; 1336 Hz */
+ /* AA,AC,51,D2 ; 1477 Hz */
+ /* 9B,3B,51,25 ; 1633 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[2] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[1] = 0x52;
@@ -7093,13 +8456,13 @@
int i;
j->daa_country = DAA_GERMANY;
- //-----------------------------------------------
- // CAO
+ /*----------------------------------------------- */
+ /* CAO */
for (i = 0; i < ALISDAA_CALLERID_SIZE; i++) {
j->m_DAAShadowRegs.CAO_REGS.CAO.CallerID[i] = 0;
}
-// Bytes for IM-filter part 1 (04): 00,CE,BB,B8,D2,81,B0,00
+/* Bytes for IM-filter part 1 (04): 00,CE,BB,B8,D2,81,B0,00 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0xCE;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0xBB;
@@ -7108,7 +8471,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0x81;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xB0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[0] = 0x00;
-// Bytes for IM-filter part 2 (05): 45,8F,00,0C,D2,3A,D0,08
+/* Bytes for IM-filter part 2 (05): 45,8F,00,0C,D2,3A,D0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x45;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0x8F;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[5] = 0x00;
@@ -7117,7 +8480,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x3A;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xD0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[0] = 0x08;
-// Bytes for FRX-filter (08): 07,AA,E2,34,24,89,20,08
+/* Bytes for FRX-filter (08): 07,AA,E2,34,24,89,20,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x07;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0xAA;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0xE2;
@@ -7126,7 +8489,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0x89;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0x20;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[0] = 0x08;
-// Bytes for FRR-filter (07): 02,87,FA,37,9A,CA,B0,08
+/* Bytes for FRR-filter (07): 02,87,FA,37,9A,CA,B0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x87;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0xFA;
@@ -7135,17 +8498,17 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[1] = 0xB0;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[0] = 0x08;
-// Bytes for AX-filter (0A): 72,D5,DD,CA
+/* Bytes for AX-filter (0A): 72,D5,DD,CA */
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0x72;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0xD5;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[1] = 0xDD;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[0] = 0xCA;
-// Bytes for AR-filter (09): 72,42,13,4B
+/* Bytes for AR-filter (09): 72,42,13,4B */
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0x72;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0x42;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x13;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0x4B;
-// Bytes for TH-filter part 1 (00): 80,52,48,81,AD,80,00,98
+/* Bytes for TH-filter part 1 (00): 80,52,48,81,AD,80,00,98 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[7] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[6] = 0x52;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[5] = 0x48;
@@ -7154,7 +8517,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[2] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[0] = 0x98;
-// Bytes for TH-filter part 2 (01): 02,42,5A,20,E8,1A,81,27
+/* Bytes for TH-filter part 2 (01): 02,42,5A,20,E8,1A,81,27 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0x42;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x5A;
@@ -7163,7 +8526,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[2] = 0x1A;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x81;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0x27;
-// Bytes for TH-filter part 3 (02): 00,88,63,26,BD,4B,A3,C2
+/* Bytes for TH-filter part 3 (02): 00,88,63,26,BD,4B,A3,C2 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[6] = 0x88;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0x63;
@@ -7172,8 +8535,8 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0x4B;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0xC2;
-// ; (10K, 0.68uF)
- // Bytes for Ringing part 1 (03):1B,3B,9B,BA,D4,1C,B3,23
+/* ; (10K, 0.68uF) */
+ /* Bytes for Ringing part 1 (03):1B,3B,9B,BA,D4,1C,B3,23 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3B;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x9B;
@@ -7182,7 +8545,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x1C;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x23;
-// Bytes for Ringing part 2 (06):13,42,A6,BA,D4,73,CA,D5
+/* Bytes for Ringing part 2 (06):13,42,A6,BA,D4,73,CA,D5 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x13;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0x42;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6;
@@ -7191,12 +8554,12 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x73;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD5;
-// Levelmetering Ringing (0D):B2,45,0F,8E
+/* Levelmetering Ringing (0D):B2,45,0F,8E */
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0xB2;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x45;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0x0F;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x8E;
-// Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99
+/* Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[7] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[6] = 0x0E;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[5] = 0xCA;
@@ -7205,7 +8568,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[2] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[1] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[0] = 0x99;
-// Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00
+/* Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[7] = 0xFD;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[6] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[5] = 0xBA;
@@ -7214,53 +8577,53 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[0] = 0x00;
-// ;CR Registers
- // Config. Reg. 0 (filters) (cr0):FF ; all Filters enabled, CLK from ext. source
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFE;
-// Config. Reg. 1 (dialing) (cr1):05 ; Manual Ring, Ring metering enabled
+/* ;CR Registers */
+ /* Config. Reg. 0 (filters) (cr0):FF ; all Filters enabled, CLK from ext. source */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFF;
+/* Config. Reg. 1 (dialing) (cr1):05 ; Manual Ring, Ring metering enabled */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = 0x05;
-// Config. Reg. 2 (caller ID) (cr2):04 ; Analog Gain 0dB, FSC internal
+/* Config. Reg. 2 (caller ID) (cr2):04 ; Analog Gain 0dB, FSC internal */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = 0x04;
-// Config. Reg. 3 (testloops) (cr3):00 ; SEL Bit==0, HP-enabled
+/* Config. Reg. 3 (testloops) (cr3):00 ; SEL Bit==0, HP-enabled */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x00;
-// Config. Reg. 4 (analog gain) (cr4):01
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02; //0x01;
- // Config. Reg. 5 (Version) (cr5):02
- // Config. Reg. 6 (Reserved) (cr6):00
- // Config. Reg. 7 (Reserved) (cr7):00
- // ;xr Registers
- // Ext. Reg. 0 (Interrupt Reg.) (xr0):02
+/* Config. Reg. 4 (analog gain) (cr4):02 */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02;
+ /* Config. Reg. 5 (Version) (cr5):02 */
+ /* Config. Reg. 6 (Reserved) (cr6):00 */
+ /* Config. Reg. 7 (Reserved) (cr7):00 */
+ /* ;xr Registers */
+ /* Ext. Reg. 0 (Interrupt Reg.) (xr0):02 */
- j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; // SO_1 set to '1' because it is inverted.
- // Ext. Reg. 1 (Interrupt enable) (xr1):1C ; Ring, CID, VDDOK Interrupts enabled
+ j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; /* SO_1 set to '1' because it is inverted. */
+ /* Ext. Reg. 1 (Interrupt enable) (xr1):1C ; Ring, CID, VDDOK Interrupts enabled */
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; // RING, Caller ID, VDD_OK
- // Ext. Reg. 2 (Cadence Time Out) (xr2):7D
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; /* RING, Caller ID, VDD_OK */
+ /* Ext. Reg. 2 (Cadence Time Out) (xr2):7D */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr2.reg = 0x7D;
-// Ext. Reg. 3 (DC Char) (xr3):32 ; B-Filter Off==1, U0=3.5V, R=200Ohm
+/* Ext. Reg. 3 (DC Char) (xr3):32 ; B-Filter Off==1, U0=3.5V, R=200Ohm */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x32;
-// Ext. Reg. 4 (Cadence) (xr4):00
+/* Ext. Reg. 4 (Cadence) (xr4):00 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr4.reg = 0x00;
-// Ext. Reg. 5 (Ring timer) (xr5):22
+/* Ext. Reg. 5 (Ring timer) (xr5):22 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr5.reg = 0x22;
-// Ext. Reg. 6 (Power State) (xr6):00
+/* Ext. Reg. 6 (Power State) (xr6):00 */
j->m_DAAShadowRegs.XOP_xr6_W.reg = 0x00;
-// Ext. Reg. 7 (Vdd) (xr7):40 ; VDD=4.25 V
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; // 0x40 ??? Should it be 0x00?
- // DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz
- // 12,33,5A,C3 ; 770 Hz
- // 13,3C,5B,32 ; 852 Hz
- // 1D,1B,5C,CC ; 941 Hz
+/* Ext. Reg. 7 (Vdd) (xr7):40 ; VDD=4.25 V */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; /* 0x40 ??? Should it be 0x00? */
+ /* DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz */
+ /* 12,33,5A,C3 ; 770 Hz */
+ /* 13,3C,5B,32 ; 852 Hz */
+ /* 1D,1B,5C,CC ; 941 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[3] = 0x11;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[2] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[1] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[0] = 0x2C;
-// DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz
- // EC,1D,52,22 ; 1336 Hz
- // AA,AC,51,D2 ; 1477 Hz
- // 9B,3B,51,25 ; 1633 Hz
+/* DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz */
+ /* EC,1D,52,22 ; 1336 Hz */
+ /* AA,AC,51,D2 ; 1477 Hz */
+ /* 9B,3B,51,25 ; 1633 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[2] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[1] = 0x52;
@@ -7273,13 +8636,13 @@
int i;
j->daa_country = DAA_AUSTRALIA;
- //-----------------------------------------------
- // CAO
+ /*----------------------------------------------- */
+ /* CAO */
for (i = 0; i < ALISDAA_CALLERID_SIZE; i++) {
j->m_DAAShadowRegs.CAO_REGS.CAO.CallerID[i] = 0;
}
-// Bytes for IM-filter part 1 (04): 00,A3,AA,28,B3,82,D0,00
+/* Bytes for IM-filter part 1 (04): 00,A3,AA,28,B3,82,D0,00 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0xAA;
@@ -7288,7 +8651,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0x82;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xD0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[0] = 0x00;
-// Bytes for IM-filter part 2 (05): 70,96,00,09,32,6B,C0,08
+/* Bytes for IM-filter part 2 (05): 70,96,00,09,32,6B,C0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x70;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0x96;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[5] = 0x00;
@@ -7297,7 +8660,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x6B;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xC0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[0] = 0x08;
-// Bytes for FRX-filter (08): 07,96,E2,34,32,9B,30,08
+/* Bytes for FRX-filter (08): 07,96,E2,34,32,9B,30,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x07;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0x96;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0xE2;
@@ -7306,7 +8669,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0x9B;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0x30;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[0] = 0x08;
-// Bytes for FRR-filter (07): 0F,9A,E9,2F,22,CC,A0,08
+/* Bytes for FRR-filter (07): 0F,9A,E9,2F,22,CC,A0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x0F;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x9A;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0xE9;
@@ -7315,17 +8678,17 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xCC;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[1] = 0xA0;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[0] = 0x08;
-// Bytes for AX-filter (0A): CB,45,DD,CA
+/* Bytes for AX-filter (0A): CB,45,DD,CA */
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0xCB;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0x45;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[1] = 0xDD;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[0] = 0xCA;
-// Bytes for AR-filter (09): 1B,67,10,D6
+/* Bytes for AR-filter (09): 1B,67,10,D6 */
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0x67;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x10;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0xD6;
-// Bytes for TH-filter part 1 (00): 80,52,48,81,AF,80,00,98
+/* Bytes for TH-filter part 1 (00): 80,52,48,81,AF,80,00,98 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[7] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[6] = 0x52;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[5] = 0x48;
@@ -7334,7 +8697,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[2] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[0] = 0x98;
-// Bytes for TH-filter part 2 (01): 02,DB,52,B0,38,01,82,AC
+/* Bytes for TH-filter part 2 (01): 02,DB,52,B0,38,01,82,AC */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0xDB;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x52;
@@ -7343,7 +8706,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[2] = 0x01;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x82;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0xAC;
-// Bytes for TH-filter part 3 (02): 00,88,4A,3E,2C,3B,24,46
+/* Bytes for TH-filter part 3 (02): 00,88,4A,3E,2C,3B,24,46 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[6] = 0x88;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0x4A;
@@ -7352,8 +8715,8 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0x3B;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0x24;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0x46;
-// ; idle
- // Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23
+/* ; idle */
+ /* Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3C;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x93;
@@ -7362,7 +8725,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x23;
-// Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5
+/* Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6;
@@ -7371,12 +8734,12 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x7A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0x0A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD5;
-// Levelmetering Ringing (0D):32,45,B5,84 ; 50Hz 20V
+/* Levelmetering Ringing (0D):32,45,B5,84 ; 50Hz 20V */
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x45;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x84;
-// Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99
+/* Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[7] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[6] = 0x0E;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[5] = 0xCA;
@@ -7385,7 +8748,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[2] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[1] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[0] = 0x99;
-// Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00
+/* Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[7] = 0xFD;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[6] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[5] = 0xBA;
@@ -7394,53 +8757,54 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[0] = 0x00;
-// ;CR Registers
- // Config. Reg. 0 (filters) (cr0):FF
+/* ;CR Registers */
+ /* Config. Reg. 0 (filters) (cr0):FF */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFF;
-// Config. Reg. 1 (dialing) (cr1):05
+/* Config. Reg. 1 (dialing) (cr1):05 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = 0x05;
-// Config. Reg. 2 (caller ID) (cr2):04
+/* Config. Reg. 2 (caller ID) (cr2):04 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = 0x04;
-// Config. Reg. 3 (testloops) (cr3):00 ;
+/* Config. Reg. 3 (testloops) (cr3):00 ; */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x00;
-// Config. Reg. 4 (analog gain) (cr4):01
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02; //0x01;
- // Config. Reg. 5 (Version) (cr5):02
- // Config. Reg. 6 (Reserved) (cr6):00
- // Config. Reg. 7 (Reserved) (cr7):00
- // ;xr Registers
- // Ext. Reg. 0 (Interrupt Reg.) (xr0):02
+/* Config. Reg. 4 (analog gain) (cr4):02 */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02;
+ /* Config. Reg. 5 (Version) (cr5):02 */
+ /* Config. Reg. 6 (Reserved) (cr6):00 */
+ /* Config. Reg. 7 (Reserved) (cr7):00 */
+ /* ;xr Registers */
+ /* Ext. Reg. 0 (Interrupt Reg.) (xr0):02 */
- j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; // SO_1 set to '1' because it is inverted.
- // Ext. Reg. 1 (Interrupt enable) (xr1):1C
+ j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; /* SO_1 set to '1' because it is inverted. */
+ /* Ext. Reg. 1 (Interrupt enable) (xr1):1C */
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; // RING, Caller ID, VDD_OK
- // Ext. Reg. 2 (Cadence Time Out) (xr2):7D
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; /* RING, Caller ID, VDD_OK */
+ /* Ext. Reg. 2 (Cadence Time Out) (xr2):7D */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr2.reg = 0x7D;
-// Ext. Reg. 3 (DC Char) (xr3):2B ;
+/* Ext. Reg. 3 (DC Char) (xr3):2B ; */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x2B;
-// Ext. Reg. 4 (Cadence) (xr4):00
+/* Ext. Reg. 4 (Cadence) (xr4):00 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr4.reg = 0x00;
-// Ext. Reg. 5 (Ring timer) (xr5):22
+/* Ext. Reg. 5 (Ring timer) (xr5):22 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr5.reg = 0x22;
-// Ext. Reg. 6 (Power State) (xr6):00
+/* Ext. Reg. 6 (Power State) (xr6):00 */
j->m_DAAShadowRegs.XOP_xr6_W.reg = 0x00;
-// Ext. Reg. 7 (Vdd) (xr7):40
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; // 0x40 ??? Should it be 0x00?
- // DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz
- // 12,33,5A,C3 ; 770 Hz
- // 13,3C,5B,32 ; 852 Hz
- // 1D,1B,5C,CC ; 941 Hz
+/* Ext. Reg. 7 (Vdd) (xr7):40 */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; /* 0x40 ??? Should it be 0x00? */
+ /* DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz */
+ /* 12,33,5A,C3 ; 770 Hz */
+ /* 13,3C,5B,32 ; 852 Hz */
+ /* 1D,1B,5C,CC ; 941 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[3] = 0x11;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[2] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[1] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[0] = 0x2C;
-// DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz
- // EC,1D,52,22 ; 1336 Hz
- // AA,AC,51,D2 ; 1477 Hz
- // 9B,3B,51,25 ; 1633 Hz
+
+ /* DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz */
+ /* EC,1D,52,22 ; 1336 Hz */
+ /* AA,AC,51,D2 ; 1477 Hz */
+ /* 9B,3B,51,25 ; 1633 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[2] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[1] = 0x52;
@@ -7452,13 +8816,13 @@
int i;
j->daa_country = DAA_JAPAN;
- //-----------------------------------------------
- // CAO
+ /*----------------------------------------------- */
+ /* CAO */
for (i = 0; i < ALISDAA_CALLERID_SIZE; i++) {
j->m_DAAShadowRegs.CAO_REGS.CAO.CallerID[i] = 0;
}
-// Bytes for IM-filter part 1 (04): 06,BD,E2,2D,BA,F9,A0,00
+/* Bytes for IM-filter part 1 (04): 06,BD,E2,2D,BA,F9,A0,00 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[7] = 0x06;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[6] = 0xBD;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[5] = 0xE2;
@@ -7467,7 +8831,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[2] = 0xF9;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[1] = 0xA0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_1[0] = 0x00;
-// Bytes for IM-filter part 2 (05): 6F,F7,00,0E,34,33,E0,08
+/* Bytes for IM-filter part 2 (05): 6F,F7,00,0E,34,33,E0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[7] = 0x6F;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[6] = 0xF7;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[5] = 0x00;
@@ -7476,7 +8840,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[2] = 0x33;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[1] = 0xE0;
j->m_DAAShadowRegs.COP_REGS.COP.IMFilterCoeff_2[0] = 0x08;
-// Bytes for FRX-filter (08): 02,8F,68,77,9C,58,F0,08
+/* Bytes for FRX-filter (08): 02,8F,68,77,9C,58,F0,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[6] = 0x8F;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[5] = 0x68;
@@ -7485,7 +8849,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[2] = 0x58;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[1] = 0xF0;
j->m_DAAShadowRegs.COP_REGS.COP.FRXFilterCoeff[0] = 0x08;
-// Bytes for FRR-filter (07): 03,8F,38,73,87,EA,20,08
+/* Bytes for FRR-filter (07): 03,8F,38,73,87,EA,20,08 */
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[7] = 0x03;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[6] = 0x8F;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[5] = 0x38;
@@ -7494,17 +8858,17 @@
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[2] = 0xEA;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[1] = 0x20;
j->m_DAAShadowRegs.COP_REGS.COP.FRRFilterCoeff[0] = 0x08;
-// Bytes for AX-filter (0A): 51,C5,DD,CA
+/* Bytes for AX-filter (0A): 51,C5,DD,CA */
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[3] = 0x51;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[2] = 0xC5;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[1] = 0xDD;
j->m_DAAShadowRegs.COP_REGS.COP.AXFilterCoeff[0] = 0xCA;
-// Bytes for AR-filter (09): 25,A7,10,D6
+/* Bytes for AR-filter (09): 25,A7,10,D6 */
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[3] = 0x25;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[2] = 0xA7;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[1] = 0x10;
j->m_DAAShadowRegs.COP_REGS.COP.ARFilterCoeff[0] = 0xD6;
-// Bytes for TH-filter part 1 (00): 00,42,48,81,AE,80,00,98
+/* Bytes for TH-filter part 1 (00): 00,42,48,81,AE,80,00,98 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[6] = 0x42;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[5] = 0x48;
@@ -7513,7 +8877,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[2] = 0x80;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_1[0] = 0x98;
-// Bytes for TH-filter part 2 (01): 02,AB,2A,20,99,5B,89,28
+/* Bytes for TH-filter part 2 (01): 02,AB,2A,20,99,5B,89,28 */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[7] = 0x02;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[6] = 0xAB;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[5] = 0x2A;
@@ -7522,7 +8886,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[2] = 0x5B;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[1] = 0x89;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_2[0] = 0x28;
-// Bytes for TH-filter part 3 (02): 00,88,DA,25,34,C5,4C,BA
+/* Bytes for TH-filter part 3 (02): 00,88,DA,25,34,C5,4C,BA */
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[7] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[6] = 0x88;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[5] = 0xDA;
@@ -7531,8 +8895,8 @@
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[2] = 0xC5;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[1] = 0x4C;
j->m_DAAShadowRegs.COP_REGS.COP.THFilterCoeff_3[0] = 0xBA;
-// ; idle
- // Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23
+/* ; idle */
+ /* Bytes for Ringing part 1 (03):1B,3C,93,3A,22,12,A3,23 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[7] = 0x1B;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[6] = 0x3C;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[5] = 0x93;
@@ -7541,7 +8905,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[2] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[1] = 0xA3;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_1[0] = 0x23;
-// Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5
+/* Bytes for Ringing part 2 (06):12,A2,A6,BA,22,7A,0A,D5 */
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[7] = 0x12;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[6] = 0xA2;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[5] = 0xA6;
@@ -7550,12 +8914,12 @@
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[2] = 0x7A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[1] = 0x0A;
j->m_DAAShadowRegs.COP_REGS.COP.RingerImpendance_2[0] = 0xD5;
-// Levelmetering Ringing (0D):AA,35,0F,8E ; 25Hz 30V ?????????
+/* Levelmetering Ringing (0D):AA,35,0F,8E ; 25Hz 30V ????????? */
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[3] = 0xAA;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[2] = 0x35;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[1] = 0x0F;
j->m_DAAShadowRegs.COP_REGS.COP.LevelmeteringRinging[0] = 0x8E;
-// Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99
+/* Caller ID 1st Tone (0E):CA,0E,CA,09,99,99,99,99 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[7] = 0xCA;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[6] = 0x0E;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[5] = 0xCA;
@@ -7564,7 +8928,7 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[2] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[1] = 0x99;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID1stTone[0] = 0x99;
-// Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00
+/* Caller ID 2nd Tone (0F):FD,B5,BA,07,DA,00,00,00 */
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[7] = 0xFD;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[6] = 0xB5;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[5] = 0xBA;
@@ -7573,53 +8937,53 @@
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[2] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[1] = 0x00;
j->m_DAAShadowRegs.COP_REGS.COP.CallerID2ndTone[0] = 0x00;
-// ;CR Registers
- // Config. Reg. 0 (filters) (cr0):FF
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFE;
-// Config. Reg. 1 (dialing) (cr1):05
+/* ;CR Registers */
+ /* Config. Reg. 0 (filters) (cr0):FF */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr0.reg = 0xFF;
+/* Config. Reg. 1 (dialing) (cr1):05 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr1.reg = 0x05;
-// Config. Reg. 2 (caller ID) (cr2):04
+/* Config. Reg. 2 (caller ID) (cr2):04 */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr2.reg = 0x04;
-// Config. Reg. 3 (testloops) (cr3):00 ;
+/* Config. Reg. 3 (testloops) (cr3):00 ; */
j->m_DAAShadowRegs.SOP_REGS.SOP.cr3.reg = 0x00;
-// Config. Reg. 4 (analog gain) (cr4):01
- j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02; //0x01;
- // Config. Reg. 5 (Version) (cr5):02
- // Config. Reg. 6 (Reserved) (cr6):00
- // Config. Reg. 7 (Reserved) (cr7):00
- // ;xr Registers
- // Ext. Reg. 0 (Interrupt Reg.) (xr0):02
+/* Config. Reg. 4 (analog gain) (cr4):02 */
+ j->m_DAAShadowRegs.SOP_REGS.SOP.cr4.reg = 0x02;
+ /* Config. Reg. 5 (Version) (cr5):02 */
+ /* Config. Reg. 6 (Reserved) (cr6):00 */
+ /* Config. Reg. 7 (Reserved) (cr7):00 */
+ /* ;xr Registers */
+ /* Ext. Reg. 0 (Interrupt Reg.) (xr0):02 */
- j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; // SO_1 set to '1' because it is inverted.
- // Ext. Reg. 1 (Interrupt enable) (xr1):1C
+ j->m_DAAShadowRegs.XOP_xr0_W.reg = 0x02; /* SO_1 set to '1' because it is inverted. */
+ /* Ext. Reg. 1 (Interrupt enable) (xr1):1C */
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; // RING, Caller ID, VDD_OK
- // Ext. Reg. 2 (Cadence Time Out) (xr2):7D
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr1.reg = 0x1C; /* RING, Caller ID, VDD_OK */
+ /* Ext. Reg. 2 (Cadence Time Out) (xr2):7D */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr2.reg = 0x7D;
-// Ext. Reg. 3 (DC Char) (xr3):22 ;
+/* Ext. Reg. 3 (DC Char) (xr3):22 ; */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr3.reg = 0x22;
-// Ext. Reg. 4 (Cadence) (xr4):00
+/* Ext. Reg. 4 (Cadence) (xr4):00 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr4.reg = 0x00;
-// Ext. Reg. 5 (Ring timer) (xr5):22
+/* Ext. Reg. 5 (Ring timer) (xr5):22 */
j->m_DAAShadowRegs.XOP_REGS.XOP.xr5.reg = 0x22;
-// Ext. Reg. 6 (Power State) (xr6):00
+/* Ext. Reg. 6 (Power State) (xr6):00 */
j->m_DAAShadowRegs.XOP_xr6_W.reg = 0x00;
-// Ext. Reg. 7 (Vdd) (xr7):40
- j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; // 0x40 ??? Should it be 0x00?
- // DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz
- // 12,33,5A,C3 ; 770 Hz
- // 13,3C,5B,32 ; 852 Hz
- // 1D,1B,5C,CC ; 941 Hz
+/* Ext. Reg. 7 (Vdd) (xr7):40 */
+ j->m_DAAShadowRegs.XOP_REGS.XOP.xr7.reg = 0x40; /* 0x40 ??? Should it be 0x00? */
+ /* DTMF Tone 1 (0B): 11,B3,5A,2C ; 697 Hz */
+ /* 12,33,5A,C3 ; 770 Hz */
+ /* 13,3C,5B,32 ; 852 Hz */
+ /* 1D,1B,5C,CC ; 941 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[3] = 0x11;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[2] = 0xB3;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[1] = 0x5A;
j->m_DAAShadowRegs.COP_REGS.COP.Tone1Coeff[0] = 0x2C;
-// DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz
- // EC,1D,52,22 ; 1336 Hz
- // AA,AC,51,D2 ; 1477 Hz
- // 9B,3B,51,25 ; 1633 Hz
+/* DTMF Tone 2 (0C): 32,32,52,B3 ; 1209 Hz */
+ /* EC,1D,52,22 ; 1336 Hz */
+ /* AA,AC,51,D2 ; 1477 Hz */
+ /* 9B,3B,51,25 ; 1633 Hz */
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[3] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[2] = 0x32;
j->m_DAAShadowRegs.COP_REGS.COP.Tone2Coeff[1] = 0x52;
@@ -7628,1538 +8992,1562 @@
static s16 tone_table[][19] =
{
- { // f20_50[] 11
- 32538, // A1 = 1.985962
- -32325, // A2 = -0.986511
- -343, // B2 = -0.010493
- 0, // B1 = 0
- 343, // B0 = 0.010493
- 32619, // A1 = 1.990906
- -32520, // A2 = -0.992462
- 19179, // B2 = 0.585327
- -19178, // B1 = -1.170593
- 19179, // B0 = 0.585327
- 32723, // A1 = 1.997314
- -32686, // A2 = -0.997528
- 9973, // B2 = 0.304352
- -9955, // B1 = -0.607605
- 9973, // B0 = 0.304352
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f133_200[] 12
- 32072, // A1 = 1.95752
- -31896, // A2 = -0.973419
- -435, // B2 = -0.013294
- 0, // B1 = 0
- 435, // B0 = 0.013294
- 32188, // A1 = 1.9646
- -32400, // A2 = -0.98877
- 15139, // B2 = 0.462036
- -14882, // B1 = -0.908356
- 15139, // B0 = 0.462036
- 32473, // A1 = 1.981995
- -32524, // A2 = -0.992584
- 23200, // B2 = 0.708008
- -23113, // B1 = -1.410706
- 23200, // B0 = 0.708008
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 300.txt 13
- 31769, // A1 = -1.939026
- -32584, // A2 = 0.994385
- -475, // B2 = -0.014522
- 0, // B1 = 0.000000
- 475, // B0 = 0.014522
- 31789, // A1 = -1.940247
- -32679, // A2 = 0.997284
- 17280, // B2 = 0.527344
- -16865, // B1 = -1.029358
- 17280, // B0 = 0.527344
- 31841, // A1 = -1.943481
- -32681, // A2 = 0.997345
- 543, // B2 = 0.016579
- -525, // B1 = -0.032097
- 543, // B0 = 0.016579
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f300_420[] 14
- 30750, // A1 = 1.876892
- -31212, // A2 = -0.952515
- -804, // B2 = -0.024541
- 0, // B1 = 0
- 804, // B0 = 0.024541
- 30686, // A1 = 1.872925
- -32145, // A2 = -0.980988
- 14747, // B2 = 0.450043
- -13703, // B1 = -0.836395
- 14747, // B0 = 0.450043
- 31651, // A1 = 1.931824
- -32321, // A2 = -0.986389
- 24425, // B2 = 0.745422
- -23914, // B1 = -1.459595
- 24427, // B0 = 0.745483
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 330.txt 15
- 31613, // A1 = -1.929565
- -32646, // A2 = 0.996277
- -185, // B2 = -0.005657
- 0, // B1 = 0.000000
- 185, // B0 = 0.005657
- 31620, // A1 = -1.929932
- -32713, // A2 = 0.998352
- 19253, // B2 = 0.587585
- -18566, // B1 = -1.133179
- 19253, // B0 = 0.587585
- 31674, // A1 = -1.933228
- -32715, // A2 = 0.998413
- 2575, // B2 = 0.078590
- -2495, // B1 = -0.152283
- 2575, // B0 = 0.078590
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f300_425[] 16
- 30741, // A1 = 1.876282
- -31475, // A2 = -0.960541
- -703, // B2 = -0.021484
- 0, // B1 = 0
- 703, // B0 = 0.021484
- 30688, // A1 = 1.873047
- -32248, // A2 = -0.984161
- 14542, // B2 = 0.443787
- -13523, // B1 = -0.825439
- 14542, // B0 = 0.443817
- 31494, // A1 = 1.922302
- -32366, // A2 = -0.987762
- 21577, // B2 = 0.658508
- -21013, // B1 = -1.282532
- 21577, // B0 = 0.658508
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f330_440[] 17
- 30627, // A1 = 1.869324
- -31338, // A2 = -0.95636
- -843, // B2 = -0.025749
- 0, // B1 = 0
- 843, // B0 = 0.025749
- 30550, // A1 = 1.864685
- -32221, // A2 = -0.983337
- 13594, // B2 = 0.414886
- -12589, // B1 = -0.768402
- 13594, // B0 = 0.414886
- 31488, // A1 = 1.921936
- -32358, // A2 = -0.987518
- 24684, // B2 = 0.753296
- -24029, // B1 = -1.466614
- 24684, // B0 = 0.753296
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 340.txt 18
- 31546, // A1 = -1.925476
- -32646, // A2 = 0.996277
- -445, // B2 = -0.013588
- 0, // B1 = 0.000000
- 445, // B0 = 0.013588
- 31551, // A1 = -1.925781
- -32713, // A2 = 0.998352
- 23884, // B2 = 0.728882
- -22979, // B1 = -1.402527
- 23884, // B0 = 0.728882
- 31606, // A1 = -1.929138
- -32715, // A2 = 0.998413
- 863, // B2 = 0.026367
- -835, // B1 = -0.050985
- 863, // B0 = 0.026367
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f350_400[] 19
- 31006, // A1 = 1.892517
- -32029, // A2 = -0.977448
- -461, // B2 = -0.014096
- 0, // B1 = 0
- 461, // B0 = 0.014096
- 30999, // A1 = 1.892029
- -32487, // A2 = -0.991455
- 11325, // B2 = 0.345612
- -10682, // B1 = -0.651978
- 11325, // B0 = 0.345612
- 31441, // A1 = 1.919067
- -32526, // A2 = -0.992615
- 24324, // B2 = 0.74231
- -23535, // B1 = -1.436523
- 24324, // B0 = 0.74231
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f350_440[]
- 30634, // A1 = 1.869751
- -31533, // A2 = -0.962341
- -680, // B2 = -0.020782
- 0, // B1 = 0
- 680, // B0 = 0.020782
- 30571, // A1 = 1.865906
- -32277, // A2 = -0.985016
- 12894, // B2 = 0.393524
- -11945, // B1 = -0.729065
- 12894, // B0 = 0.393524
- 31367, // A1 = 1.91449
- -32379, // A2 = -0.988129
- 23820, // B2 = 0.726929
- -23104, // B1 = -1.410217
- 23820, // B0 = 0.726929
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f350_450[]
- 30552, // A1 = 1.864807
- -31434, // A2 = -0.95929
- -690, // B2 = -0.021066
- 0, // B1 = 0
- 690, // B0 = 0.021066
- 30472, // A1 = 1.859924
- -32248, // A2 = -0.984161
- 13385, // B2 = 0.408478
- -12357, // B1 = -0.754242
- 13385, // B0 = 0.408478
- 31358, // A1 = 1.914001
- -32366, // A2 = -0.987732
- 26488, // B2 = 0.80835
- -25692, // B1 = -1.568176
- 26490, // B0 = 0.808411
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 360.txt
- 31397, // A1 = -1.916321
- -32623, // A2 = 0.995605
- -117, // B2 = -0.003598
- 0, // B1 = 0.000000
- 117, // B0 = 0.003598
- 31403, // A1 = -1.916687
- -32700, // A2 = 0.997925
- 3388, // B2 = 0.103401
- -3240, // B1 = -0.197784
- 3388, // B0 = 0.103401
- 31463, // A1 = -1.920410
- -32702, // A2 = 0.997986
- 13346, // B2 = 0.407288
- -12863, // B1 = -0.785126
- 13346, // B0 = 0.407288
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f380_420[]
- 30831, // A1 = 1.881775
- -32064, // A2 = -0.978546
- -367, // B2 = -0.01122
- 0, // B1 = 0
- 367, // B0 = 0.01122
- 30813, // A1 = 1.880737
- -32456, // A2 = -0.990509
- 11068, // B2 = 0.337769
- -10338, // B1 = -0.631042
- 11068, // B0 = 0.337769
- 31214, // A1 = 1.905212
- -32491, // A2 = -0.991577
- 16374, // B2 = 0.499695
- -15781, // B1 = -0.963196
- 16374, // B0 = 0.499695
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 392.txt
- 31152, // A1 = -1.901428
- -32613, // A2 = 0.995300
- -314, // B2 = -0.009605
- 0, // B1 = 0.000000
- 314, // B0 = 0.009605
- 31156, // A1 = -1.901672
- -32694, // A2 = 0.997742
- 28847, // B2 = 0.880371
- -2734, // B1 = -0.166901
- 28847, // B0 = 0.880371
- 31225, // A1 = -1.905823
- -32696, // A2 = 0.997803
- 462, // B2 = 0.014108
- -442, // B1 = -0.027019
- 462, // B0 = 0.014108
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f400_425[]
- 30836, // A1 = 1.882141
- -32296, // A2 = -0.985596
- -324, // B2 = -0.009903
- 0, // B1 = 0
- 324, // B0 = 0.009903
- 30825, // A1 = 1.881409
- -32570, // A2 = -0.993958
- 16847, // B2 = 0.51416
- -15792, // B1 = -0.963898
- 16847, // B0 = 0.51416
- 31106, // A1 = 1.89856
- -32584, // A2 = -0.994415
- 9579, // B2 = 0.292328
- -9164, // B1 = -0.559357
- 9579, // B0 = 0.292328
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f400_440[]
- 30702, // A1 = 1.873962
- -32134, // A2 = -0.980682
- -517, // B2 = -0.015793
- 0, // B1 = 0
- 517, // B0 = 0.015793
- 30676, // A1 = 1.872375
- -32520, // A2 = -0.992462
- 8144, // B2 = 0.24855
- -7596, // B1 = -0.463684
- 8144, // B0 = 0.24855
- 31084, // A1 = 1.897217
- -32547, // A2 = -0.993256
- 22713, // B2 = 0.693176
- -21734, // B1 = -1.326599
- 22713, // B0 = 0.693176
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f400_450[]
- 30613, // A1 = 1.86853
- -32031, // A2 = -0.977509
- -618, // B2 = -0.018866
- 0, // B1 = 0
- 618, // B0 = 0.018866
- 30577, // A1 = 1.866272
- -32491, // A2 = -0.991577
- 9612, // B2 = 0.293335
- -8935, // B1 = -0.54541
- 9612, // B0 = 0.293335
- 31071, // A1 = 1.896484
- -32524, // A2 = -0.992584
- 21596, // B2 = 0.659058
- -20667, // B1 = -1.261414
- 21596, // B0 = 0.659058
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 420.txt
- 30914, // A1 = -1.886841
- -32584, // A2 = 0.994385
- -426, // B2 = -0.013020
- 0, // B1 = 0.000000
- 426, // B0 = 0.013020
- 30914, // A1 = -1.886841
- -32679, // A2 = 0.997314
- 17520, // B2 = 0.534668
- -16471, // B1 = -1.005310
- 17520, // B0 = 0.534668
- 31004, // A1 = -1.892334
- -32683, // A2 = 0.997406
- 819, // B2 = 0.025023
- -780, // B1 = -0.047619
- 819, // B0 = 0.025023
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 425.txt
- 30881, // A1 = -1.884827
- -32603, // A2 = 0.994965
- -496, // B2 = -0.015144
- 0, // B1 = 0.000000
- 496, // B0 = 0.015144
- 30880, // A1 = -1.884766
- -32692, // A2 = 0.997711
- 24767, // B2 = 0.755859
- -23290, // B1 = -1.421509
- 24767, // B0 = 0.755859
- 30967, // A1 = -1.890076
- -32694, // A2 = 0.997772
- 728, // B2 = 0.022232
- -691, // B1 = -0.042194
- 728, // B0 = 0.022232
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f425_450[]
- 30646, // A1 = 1.870544
- -32327, // A2 = -0.986572
- -287, // B2 = -0.008769
- 0, // B1 = 0
- 287, // B0 = 0.008769
- 30627, // A1 = 1.869324
- -32607, // A2 = -0.995087
- 13269, // B2 = 0.404968
- -12376, // B1 = -0.755432
- 13269, // B0 = 0.404968
- 30924, // A1 = 1.887512
- -32619, // A2 = -0.995453
- 19950, // B2 = 0.608826
- -18940, // B1 = -1.156006
- 19950, // B0 = 0.608826
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f425_475[]
- 30396, // A1 = 1.855225
- -32014, // A2 = -0.97699
- -395, // B2 = -0.012055
- 0, // B1 = 0
- 395, // B0 = 0.012055
- 30343, // A1 = 1.85199
- -32482, // A2 = -0.991302
- 17823, // B2 = 0.543945
- -16431, // B1 = -1.002869
- 17823, // B0 = 0.543945
- 30872, // A1 = 1.884338
- -32516, // A2 = -0.99231
- 18124, // B2 = 0.553101
- -17246, // B1 = -1.052673
- 18124, // B0 = 0.553101
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 435.txt
- 30796, // A1 = -1.879639
- -32603, // A2 = 0.994965
- -254, // B2 = -0.007762
- 0, // B1 = 0.000000
- 254, // B0 = 0.007762
- 30793, // A1 = -1.879456
- -32692, // A2 = 0.997711
- 18934, // B2 = 0.577820
- -17751, // B1 = -1.083496
- 18934, // B0 = 0.577820
- 30882, // A1 = -1.884888
- -32694, // A2 = 0.997772
- 1858, // B2 = 0.056713
- -1758, // B1 = -0.107357
- 1858, // B0 = 0.056713
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f440_450[]
- 30641, // A1 = 1.870239
- -32458, // A2 = -0.99057
- -155, // B2 = -0.004735
- 0, // B1 = 0
- 155, // B0 = 0.004735
- 30631, // A1 = 1.869568
- -32630, // A2 = -0.995789
- 11453, // B2 = 0.349548
- -10666, // B1 = -0.651001
- 11453, // B0 = 0.349548
- 30810, // A1 = 1.880554
- -32634, // A2 = -0.995941
- 12237, // B2 = 0.373474
- -11588, // B1 = -0.707336
- 12237, // B0 = 0.373474
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f440_480[]
- 30367, // A1 = 1.853455
- -32147, // A2 = -0.981079
- -495, // B2 = -0.015113
- 0, // B1 = 0
- 495, // B0 = 0.015113
- 30322, // A1 = 1.850769
- -32543, // A2 = -0.993134
- 10031, // B2 = 0.306152
- -9252, // B1 = -0.564728
- 10031, // B0 = 0.306152
- 30770, // A1 = 1.878052
- -32563, // A2 = -0.993774
- 22674, // B2 = 0.691956
- -21465, // B1 = -1.31012
- 22674, // B0 = 0.691956
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 445.txt
- 30709, // A1 = -1.874329
- -32603, // A2 = 0.994965
- -83, // B2 = -0.002545
- 0, // B1 = 0.000000
- 83, // B0 = 0.002545
- 30704, // A1 = -1.874084
- -32692, // A2 = 0.997711
- 10641, // B2 = 0.324738
- -9947, // B1 = -0.607147
- 10641, // B0 = 0.324738
- 30796, // A1 = -1.879639
- -32694, // A2 = 0.997772
- 10079, // B2 = 0.307587
- 9513, // B1 = 0.580688
- 10079, // B0 = 0.307587
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 450.txt
- 30664, // A1 = -1.871643
- -32603, // A2 = 0.994965
- -164, // B2 = -0.005029
- 0, // B1 = 0.000000
- 164, // B0 = 0.005029
- 30661, // A1 = -1.871399
- -32692, // A2 = 0.997711
- 15294, // B2 = 0.466736
- -14275, // B1 = -0.871307
- 15294, // B0 = 0.466736
- 30751, // A1 = -1.876953
- -32694, // A2 = 0.997772
- 3548, // B2 = 0.108284
- -3344, // B1 = -0.204155
- 3548, // B0 = 0.108284
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 452.txt
- 30653, // A1 = -1.870911
- -32615, // A2 = 0.995361
- -209, // B2 = -0.006382
- 0, // B1 = 0.000000
- 209, // B0 = 0.006382
- 30647, // A1 = -1.870605
- -32702, // A2 = 0.997986
- 18971, // B2 = 0.578979
- -17716, // B1 = -1.081299
- 18971, // B0 = 0.578979
- 30738, // A1 = -1.876099
- -32702, // A2 = 0.998016
- 2967, // B2 = 0.090561
- -2793, // B1 = -0.170502
- 2967, // B0 = 0.090561
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 475.txt
- 30437, // A1 = -1.857727
- -32603, // A2 = 0.994965
- -264, // B2 = -0.008062
- 0, // B1 = 0.000000
- 264, // B0 = 0.008062
- 30430, // A1 = -1.857300
- -32692, // A2 = 0.997711
- 21681, // B2 = 0.661682
- -20082, // B1 = -1.225708
- 21681, // B0 = 0.661682
- 30526, // A1 = -1.863220
- -32694, // A2 = 0.997742
- 1559, // B2 = 0.047600
- -1459, // B1 = -0.089096
- 1559, // B0 = 0.047600
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f480_620[]
- 28975, // A1 = 1.768494
- -30955, // A2 = -0.944672
- -1026, // B2 = -0.03133
- 0, // B1 = 0
- 1026, // B0 = 0.03133
- 28613, // A1 = 1.746399
- -32089, // A2 = -0.979309
- 14214, // B2 = 0.433807
- -12202, // B1 = -0.744812
- 14214, // B0 = 0.433807
- 30243, // A1 = 1.845947
- -32238, // A2 = -0.983856
- 24825, // B2 = 0.757629
- -23402, // B1 = -1.428345
- 24825, // B0 = 0.757629
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 494.txt
- 30257, // A1 = -1.846741
- -32605, // A2 = 0.995056
- -249, // B2 = -0.007625
- 0, // B1 = 0.000000
- 249, // B0 = 0.007625
- 30247, // A1 = -1.846191
- -32694, // A2 = 0.997772
- 18088, // B2 = 0.552002
- -16652, // B1 = -1.016418
- 18088, // B0 = 0.552002
- 30348, // A1 = -1.852295
- -32696, // A2 = 0.997803
- 2099, // B2 = 0.064064
- -1953, // B1 = -0.119202
- 2099, // B0 = 0.064064
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 500.txt
- 30202, // A1 = -1.843431
- -32624, // A2 = 0.995622
- -413, // B2 = -0.012622
- 0, // B1 = 0.000000
- 413, // B0 = 0.012622
- 30191, // A1 = -1.842721
- -32714, // A2 = 0.998364
- 25954, // B2 = 0.792057
- -23890, // B1 = -1.458131
- 25954, // B0 = 0.792057
- 30296, // A1 = -1.849172
- -32715, // A2 = 0.998397
- 2007, // B2 = 0.061264
- -1860, // B1 = -0.113568
- 2007, // B0 = 0.061264
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 520.txt
- 30001, // A1 = -1.831116
- -32613, // A2 = 0.995270
- -155, // B2 = -0.004750
- 0, // B1 = 0.000000
- 155, // B0 = 0.004750
- 29985, // A1 = -1.830200
- -32710, // A2 = 0.998260
- 6584, // B2 = 0.200928
- -6018, // B1 = -0.367355
- 6584, // B0 = 0.200928
- 30105, // A1 = -1.837524
- -32712, // A2 = 0.998291
- 23812, // B2 = 0.726685
- -21936, // B1 = -1.338928
- 23812, // B0 = 0.726685
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 523.txt
- 29964, // A1 = -1.828918
- -32601, // A2 = 0.994904
- -101, // B2 = -0.003110
- 0, // B1 = 0.000000
- 101, // B0 = 0.003110
- 29949, // A1 = -1.827942
- -32700, // A2 = 0.997925
- 11041, // B2 = 0.336975
- -10075, // B1 = -0.614960
- 11041, // B0 = 0.336975
- 30070, // A1 = -1.835388
- -32702, // A2 = 0.997986
- 16762, // B2 = 0.511536
- -15437, // B1 = -0.942230
- 16762, // B0 = 0.511536
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 525.txt
- 29936, // A1 = -1.827209
- -32584, // A2 = 0.994415
- -91, // B2 = -0.002806
- 0, // B1 = 0.000000
- 91, // B0 = 0.002806
- 29921, // A1 = -1.826233
- -32688, // A2 = 0.997559
- 11449, // B2 = 0.349396
- -10426, // B1 = -0.636383
- 11449, // B0 = 0.349396
- 30045, // A1 = -1.833862
- -32688, // A2 = 0.997589
- 13055, // B2 = 0.398407
- -12028, // B1 = -0.734161
- 13055, // B0 = 0.398407
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f540_660[]
- 28499, // A1 = 1.739441
- -31129, // A2 = -0.949982
- -849, // B2 = -0.025922
- 0, // B1 = 0
- 849, // B0 = 0.025922
- 28128, // A1 = 1.716797
- -32130, // A2 = -0.98056
- 14556, // B2 = 0.444214
- -12251, // B1 = -0.747772
- 14556, // B0 = 0.444244
- 29667, // A1 = 1.81073
- -32244, // A2 = -0.984039
- 23038, // B2 = 0.703064
- -21358, // B1 = -1.303589
- 23040, // B0 = 0.703125
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 587.txt
- 29271, // A1 = -1.786560
- -32599, // A2 = 0.994873
- -490, // B2 = -0.014957
- 0, // B1 = 0.000000
- 490, // B0 = 0.014957
- 29246, // A1 = -1.785095
- -32700, // A2 = 0.997925
- 28961, // B2 = 0.883850
- -25796, // B1 = -1.574463
- 28961, // B0 = 0.883850
- 29383, // A1 = -1.793396
- -32700, // A2 = 0.997955
- 1299, // B2 = 0.039650
- -1169, // B1 = -0.071396
- 1299, // B0 = 0.039650
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 590.txt
- 29230, // A1 = -1.784058
- -32584, // A2 = 0.994415
- -418, // B2 = -0.012757
- 0, // B1 = 0.000000
- 418, // B0 = 0.012757
- 29206, // A1 = -1.782593
- -32688, // A2 = 0.997559
- 36556, // B2 = 1.115601
- -32478, // B1 = -1.982300
- 36556, // B0 = 1.115601
- 29345, // A1 = -1.791077
- -32688, // A2 = 0.997589
- 897, // B2 = 0.027397
- -808, // B1 = -0.049334
- 897, // B0 = 0.027397
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 600.txt
- 29116, // A1 = -1.777100
- -32603, // A2 = 0.994965
- -165, // B2 = -0.005039
- 0, // B1 = 0.000000
- 165, // B0 = 0.005039
- 29089, // A1 = -1.775452
- -32708, // A2 = 0.998199
- 6963, // B2 = 0.212494
- -6172, // B1 = -0.376770
- 6963, // B0 = 0.212494
- 29237, // A1 = -1.784485
- -32710, // A2 = 0.998230
- 24197, // B2 = 0.738464
- -21657, // B1 = -1.321899
- 24197, // B0 = 0.738464
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 660.txt
- 28376, // A1 = -1.731934
- -32567, // A2 = 0.993896
- -363, // B2 = -0.011102
- 0, // B1 = 0.000000
- 363, // B0 = 0.011102
- 28337, // A1 = -1.729614
- -32683, // A2 = 0.997434
- 21766, // B2 = 0.664246
- -18761, // B1 = -1.145081
- 21766, // B0 = 0.664246
- 28513, // A1 = -1.740356
- -32686, // A2 = 0.997498
- 2509, // B2 = 0.076584
- -2196, // B1 = -0.134041
- 2509, // B0 = 0.076584
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 700.txt
- 27844, // A1 = -1.699463
- -32563, // A2 = 0.993744
- -366, // B2 = -0.011187
- 0, // B1 = 0.000000
- 366, // B0 = 0.011187
- 27797, // A1 = -1.696655
- -32686, // A2 = 0.997498
- 22748, // B2 = 0.694214
- -19235, // B1 = -1.174072
- 22748, // B0 = 0.694214
- 27995, // A1 = -1.708740
- -32688, // A2 = 0.997559
- 2964, // B2 = 0.090477
- -2546, // B1 = -0.155449
- 2964, // B0 = 0.090477
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 740.txt
- 27297, // A1 = -1.666077
- -32551, // A2 = 0.993408
- -345, // B2 = -0.010540
- 0, // B1 = 0.000000
- 345, // B0 = 0.010540
- 27240, // A1 = -1.662598
- -32683, // A2 = 0.997406
- 22560, // B2 = 0.688477
- -18688, // B1 = -1.140625
- 22560, // B0 = 0.688477
- 27461, // A1 = -1.676147
- -32684, // A2 = 0.997467
- 3541, // B2 = 0.108086
- -2985, // B1 = -0.182220
- 3541, // B0 = 0.108086
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 750.txt
- 27155, // A1 = -1.657410
- -32551, // A2 = 0.993408
- -462, // B2 = -0.014117
- 0, // B1 = 0.000000
- 462, // B0 = 0.014117
- 27097, // A1 = -1.653870
- -32683, // A2 = 0.997406
- 32495, // B2 = 0.991699
- -26776, // B1 = -1.634338
- 32495, // B0 = 0.991699
- 27321, // A1 = -1.667542
- -32684, // A2 = 0.997467
- 1835, // B2 = 0.056007
- -1539, // B1 = -0.093948
- 1835, // B0 = 0.056007
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f750_1450[]
- 19298, // A1 = 1.177917
- -24471, // A2 = -0.746796
- -4152, // B2 = -0.126709
- 0, // B1 = 0
- 4152, // B0 = 0.126709
- 12902, // A1 = 0.787476
- -29091, // A2 = -0.887817
- 12491, // B2 = 0.38121
- -1794, // B1 = -0.109528
- 12494, // B0 = 0.381317
- 26291, // A1 = 1.604736
- -30470, // A2 = -0.929901
- 28859, // B2 = 0.880737
- -26084, // B1 = -1.592102
- 28861, // B0 = 0.880798
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 770.txt
- 26867, // A1 = -1.639832
- -32551, // A2 = 0.993408
- -123, // B2 = -0.003755
- 0, // B1 = 0.000000
- 123, // B0 = 0.003755
- 26805, // A1 = -1.636108
- -32683, // A2 = 0.997406
- 17297, // B2 = 0.527863
- -14096, // B1 = -0.860382
- 17297, // B0 = 0.527863
- 27034, // A1 = -1.650085
- -32684, // A2 = 0.997467
- 12958, // B2 = 0.395477
- -10756, // B1 = -0.656525
- 12958, // B0 = 0.395477
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 800.txt
- 26413, // A1 = -1.612122
- -32547, // A2 = 0.993286
- -223, // B2 = -0.006825
- 0, // B1 = 0.000000
- 223, // B0 = 0.006825
- 26342, // A1 = -1.607849
- -32686, // A2 = 0.997498
- 6391, // B2 = 0.195053
- -5120, // B1 = -0.312531
- 6391, // B0 = 0.195053
- 26593, // A1 = -1.623108
- -32688, // A2 = 0.997559
- 23681, // B2 = 0.722717
- -19328, // B1 = -1.179688
- 23681, // B0 = 0.722717
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 816.txt
- 26168, // A1 = -1.597209
- -32528, // A2 = 0.992706
- -235, // B2 = -0.007182
- 0, // B1 = 0.000000
- 235, // B0 = 0.007182
- 26092, // A1 = -1.592590
- -32675, // A2 = 0.997192
- 20823, // B2 = 0.635498
- -16510, // B1 = -1.007751
- 20823, // B0 = 0.635498
- 26363, // A1 = -1.609070
- -32677, // A2 = 0.997253
- 6739, // B2 = 0.205688
- -5459, // B1 = -0.333206
- 6739, // B0 = 0.205688
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 850.txt
- 25641, // A1 = -1.565063
- -32536, // A2 = 0.992950
- -121, // B2 = -0.003707
- 0, // B1 = 0.000000
- 121, // B0 = 0.003707
- 25560, // A1 = -1.560059
- -32684, // A2 = 0.997437
- 18341, // B2 = 0.559753
- -14252, // B1 = -0.869904
- 18341, // B0 = 0.559753
- 25837, // A1 = -1.577026
- -32684, // A2 = 0.997467
- 16679, // B2 = 0.509003
- -13232, // B1 = -0.807648
- 16679, // B0 = 0.509003
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f857_1645[]
- 16415, // A1 = 1.001953
- -23669, // A2 = -0.722321
- -4549, // B2 = -0.138847
- 0, // B1 = 0
- 4549, // B0 = 0.138847
- 8456, // A1 = 0.516174
- -28996, // A2 = -0.884918
- 13753, // B2 = 0.419724
- -12, // B1 = -0.000763
- 13757, // B0 = 0.419846
- 24632, // A1 = 1.503418
- -30271, // A2 = -0.923828
- 29070, // B2 = 0.887146
- -25265, // B1 = -1.542114
- 29073, // B0 = 0.887268
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 900.txt
- 24806, // A1 = -1.514099
- -32501, // A2 = 0.991852
- -326, // B2 = -0.009969
- 0, // B1 = 0.000000
- 326, // B0 = 0.009969
- 24709, // A1 = -1.508118
- -32659, // A2 = 0.996674
- 20277, // B2 = 0.618835
- -15182, // B1 = -0.926636
- 20277, // B0 = 0.618835
- 25022, // A1 = -1.527222
- -32661, // A2 = 0.996735
- 4320, // B2 = 0.131836
- -3331, // B1 = -0.203339
- 4320, // B0 = 0.131836
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f900_1300[]
- 19776, // A1 = 1.207092
- -27437, // A2 = -0.837341
- -2666, // B2 = -0.081371
- 0, // B1 = 0
- 2666, // B0 = 0.081371
- 16302, // A1 = 0.995026
- -30354, // A2 = -0.926361
- 10389, // B2 = 0.317062
- -3327, // B1 = -0.203064
- 10389, // B0 = 0.317062
- 24299, // A1 = 1.483154
- -30930, // A2 = -0.943909
- 25016, // B2 = 0.763428
- -21171, // B1 = -1.292236
- 25016, // B0 = 0.763428
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f935_1215[]
- 20554, // A1 = 1.254517
- -28764, // A2 = -0.877838
- -2048, // B2 = -0.062515
- 0, // B1 = 0
- 2048, // B0 = 0.062515
- 18209, // A1 = 1.11145
- -30951, // A2 = -0.94458
- 9390, // B2 = 0.286575
- -3955, // B1 = -0.241455
- 9390, // B0 = 0.286575
- 23902, // A1 = 1.458923
- -31286, // A2 = -0.954803
- 23252, // B2 = 0.709595
- -19132, // B1 = -1.167725
- 23252, // B0 = 0.709595
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f941_1477[]
- 17543, // A1 = 1.07074
- -26220, // A2 = -0.800201
- -3298, // B2 = -0.100647
- 0, // B1 = 0
- 3298, // B0 = 0.100647
- 12423, // A1 = 0.75827
- -30036, // A2 = -0.916626
- 12651, // B2 = 0.386078
- -2444, // B1 = -0.14917
- 12653, // B0 = 0.386154
- 23518, // A1 = 1.435425
- -30745, // A2 = -0.938293
- 27282, // B2 = 0.832581
- -22529, // B1 = -1.375122
- 27286, // B0 = 0.832703
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 942.txt
- 24104, // A1 = -1.471252
- -32507, // A2 = 0.992065
- -351, // B2 = -0.010722
- 0, // B1 = 0.000000
- 351, // B0 = 0.010722
- 23996, // A1 = -1.464600
- -32671, // A2 = 0.997040
- 22848, // B2 = 0.697266
- -16639, // B1 = -1.015564
- 22848, // B0 = 0.697266
- 24332, // A1 = -1.485168
- -32673, // A2 = 0.997101
- 4906, // B2 = 0.149727
- -3672, // B1 = -0.224174
- 4906, // B0 = 0.149727
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 950.txt
- 23967, // A1 = -1.462830
- -32507, // A2 = 0.992065
- -518, // B2 = -0.015821
- 0, // B1 = 0.000000
- 518, // B0 = 0.015821
- 23856, // A1 = -1.456055
- -32671, // A2 = 0.997040
- 26287, // B2 = 0.802246
- -19031, // B1 = -1.161560
- 26287, // B0 = 0.802246
- 24195, // A1 = -1.476746
- -32673, // A2 = 0.997101
- 2890, // B2 = 0.088196
- -2151, // B1 = -0.131317
- 2890, // B0 = 0.088196
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f950_1400[]
- 18294, // A1 = 1.116638
- -26962, // A2 = -0.822845
- -2914, // B2 = -0.088936
- 0, // B1 = 0
- 2914, // B0 = 0.088936
- 14119, // A1 = 0.861786
- -30227, // A2 = -0.922455
- 11466, // B2 = 0.349945
- -2833, // B1 = -0.172943
- 11466, // B0 = 0.349945
- 23431, // A1 = 1.430115
- -30828, // A2 = -0.940796
- 25331, // B2 = 0.773071
- -20911, // B1 = -1.276367
- 25331, // B0 = 0.773071
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 975.txt
- 23521, // A1 = -1.435608
- -32489, // A2 = 0.991516
- -193, // B2 = -0.005915
- 0, // B1 = 0.000000
- 193, // B0 = 0.005915
- 23404, // A1 = -1.428467
- -32655, // A2 = 0.996582
- 17740, // B2 = 0.541412
- -12567, // B1 = -0.767029
- 17740, // B0 = 0.541412
- 23753, // A1 = -1.449829
- -32657, // A2 = 0.996613
- 9090, // B2 = 0.277405
- -6662, // B1 = -0.406647
- 9090, // B0 = 0.277405
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1000.txt
- 23071, // A1 = -1.408203
- -32489, // A2 = 0.991516
- -293, // B2 = -0.008965
- 0, // B1 = 0.000000
- 293, // B0 = 0.008965
- 22951, // A1 = -1.400818
- -32655, // A2 = 0.996582
- 5689, // B2 = 0.173645
- -3951, // B1 = -0.241150
- 5689, // B0 = 0.173645
- 23307, // A1 = -1.422607
- -32657, // A2 = 0.996613
- 18692, // B2 = 0.570435
- -13447, // B1 = -0.820770
- 18692, // B0 = 0.570435
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1020.txt
- 22701, // A1 = -1.385620
- -32474, // A2 = 0.991058
- -292, // B2 = -0.008933
- 0, //163840 , // B1 = 10.000000
- 292, // B0 = 0.008933
- 22564, // A1 = -1.377258
- -32655, // A2 = 0.996552
- 20756, // B2 = 0.633423
- -14176, // B1 = -0.865295
- 20756, // B0 = 0.633423
- 22960, // A1 = -1.401428
- -32657, // A2 = 0.996613
- 6520, // B2 = 0.198990
- -4619, // B1 = -0.281937
- 6520, // B0 = 0.198990
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1050.txt
- 22142, // A1 = -1.351501
- -32474, // A2 = 0.991058
- -147, // B2 = -0.004493
- 0, // B1 = 0.000000
- 147, // B0 = 0.004493
- 22000, // A1 = -1.342834
- -32655, // A2 = 0.996552
- 15379, // B2 = 0.469360
- -10237, // B1 = -0.624847
- 15379, // B0 = 0.469360
- 22406, // A1 = -1.367554
- -32657, // A2 = 0.996613
- 17491, // B2 = 0.533783
- -12096, // B1 = -0.738312
- 17491, // B0 = 0.533783
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f1100_1750[]
- 12973, // A1 = 0.79184
- -24916, // A2 = -0.760376
- 6655, // B2 = 0.203102
- 367, // B1 = 0.0224
- 6657, // B0 = 0.203171
- 5915, // A1 = 0.361053
- -29560, // A2 = -0.90213
- -7777, // B2 = -0.23735
- 0, // B1 = 0
- 7777, // B0 = 0.23735
- 20510, // A1 = 1.251892
- -30260, // A2 = -0.923462
- 26662, // B2 = 0.81366
- -20573, // B1 = -1.255737
- 26668, // B0 = 0.813843
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1140.txt
- 20392, // A1 = -1.244629
- -32460, // A2 = 0.990601
- -270, // B2 = -0.008240
- 0, // B1 = 0.000000
- 270, // B0 = 0.008240
- 20218, // A1 = -1.234009
- -32655, // A2 = 0.996582
- 21337, // B2 = 0.651154
- -13044, // B1 = -0.796143
- 21337, // B0 = 0.651154
- 20684, // A1 = -1.262512
- -32657, // A2 = 0.996643
- 8572, // B2 = 0.261612
- -5476, // B1 = -0.334244
- 8572, // B0 = 0.261612
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1200.txt
- 19159, // A1 = -1.169373
- -32456, // A2 = 0.990509
- -335, // B2 = -0.010252
- 0, // B1 = 0.000000
- 335, // B0 = 0.010252
- 18966, // A1 = -1.157593
- -32661, // A2 = 0.996735
- 6802, // B2 = 0.207588
- -3900, // B1 = -0.238098
- 6802, // B0 = 0.207588
- 19467, // A1 = -1.188232
- -32661, // A2 = 0.996765
- 25035, // B2 = 0.764008
- -15049, // B1 = -0.918579
- 25035, // B0 = 0.764008
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1209.txt
- 18976, // A1 = -1.158264
- -32439, // A2 = 0.989990
- -183, // B2 = -0.005588
- 0, // B1 = 0.000000
- 183, // B0 = 0.005588
- 18774, // A1 = -1.145874
- -32650, // A2 = 0.996429
- 15468, // B2 = 0.472076
- -8768, // B1 = -0.535217
- 15468, // B0 = 0.472076
- 19300, // A1 = -1.177979
- -32652, // A2 = 0.996490
- 19840, // B2 = 0.605499
- -11842, // B1 = -0.722809
- 19840, // B0 = 0.605499
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1330.txt
- 16357, // A1 = -0.998413
- -32368, // A2 = 0.987793
- -217, // B2 = -0.006652
- 0, // B1 = 0.000000
- 217, // B0 = 0.006652
- 16107, // A1 = -0.983126
- -32601, // A2 = 0.994904
- 11602, // B2 = 0.354065
- -5555, // B1 = -0.339111
- 11602, // B0 = 0.354065
- 16722, // A1 = -1.020630
- -32603, // A2 = 0.994965
- 15574, // B2 = 0.475311
- -8176, // B1 = -0.499069
- 15574, // B0 = 0.475311
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1336.txt
- 16234, // A1 = -0.990875
- 32404, // A2 = -0.988922
- -193, // B2 = -0.005908
- 0, // B1 = 0.000000
- 193, // B0 = 0.005908
- 15986, // A1 = -0.975769
- -32632, // A2 = 0.995880
- 18051, // B2 = 0.550903
- -8658, // B1 = -0.528473
- 18051, // B0 = 0.550903
- 16591, // A1 = -1.012695
- -32634, // A2 = 0.995941
- 15736, // B2 = 0.480240
- -8125, // B1 = -0.495926
- 15736, // B0 = 0.480240
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1366.txt
- 15564, // A1 = -0.949982
- -32404, // A2 = 0.988922
- -269, // B2 = -0.008216
- 0, // B1 = 0.000000
- 269, // B0 = 0.008216
- 15310, // A1 = -0.934479
- -32632, // A2 = 0.995880
- 10815, // B2 = 0.330063
- -4962, // B1 = -0.302887
- 10815, // B0 = 0.330063
- 15924, // A1 = -0.971924
- -32634, // A2 = 0.995941
- 18880, // B2 = 0.576172
- -9364, // B1 = -0.571594
- 18880, // B0 = 0.576172
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1380.txt
- 15247, // A1 = -0.930603
- -32397, // A2 = 0.988708
- -244, // B2 = -0.007451
- 0, // B1 = 0.000000
- 244, // B0 = 0.007451
- 14989, // A1 = -0.914886
- -32627, // A2 = 0.995697
- 18961, // B2 = 0.578644
- -8498, // B1 = -0.518707
- 18961, // B0 = 0.578644
- 15608, // A1 = -0.952667
- -32628, // A2 = 0.995758
- 11145, // B2 = 0.340134
- -5430, // B1 = -0.331467
- 11145, // B0 = 0.340134
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1400.txt
- 14780, // A1 = -0.902130
- -32393, // A2 = 0.988586
- -396, // B2 = -0.012086
- 0, // B1 = 0.000000
- 396, // B0 = 0.012086
- 14510, // A1 = -0.885651
- -32630, // A2 = 0.995819
- 6326, // B2 = 0.193069
- -2747, // B1 = -0.167671
- 6326, // B0 = 0.193069
- 15154, // A1 = -0.924957
- -32632, // A2 = 0.995850
- 23235, // B2 = 0.709076
- -10983, // B1 = -0.670380
- 23235, // B0 = 0.709076
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1477.txt
- 13005, // A1 = -0.793793
- -32368, // A2 = 0.987823
- -500, // B2 = -0.015265
- 0, // B1 = 0.000000
- 500, // B0 = 0.015265
- 12708, // A1 = -0.775665
- -32615, // A2 = 0.995331
- 11420, // B2 = 0.348526
- -4306, // B1 = -0.262833
- 11420, // B0 = 0.348526
- 13397, // A1 = -0.817688
- -32615, // A2 = 0.995361
- 9454, // B2 = 0.288528
- -3981, // B1 = -0.243027
- 9454, // B0 = 0.288528
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1600.txt
- 10046, // A1 = -0.613190
- -32331, // A2 = 0.986694
- -455, // B2 = -0.013915
- 0, // B1 = 0.000000
- 455, // B0 = 0.013915
- 9694, // A1 = -0.591705
- -32601, // A2 = 0.994934
- 6023, // B2 = 0.183815
- -1708, // B1 = -0.104279
- 6023, // B0 = 0.183815
- 10478, // A1 = -0.639587
- -32603, // A2 = 0.994965
- 22031, // B2 = 0.672333
- -7342, // B1 = -0.448151
- 22031, // B0 = 0.672333
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // f1633_1638[]
- 9181, // A1 = 0.560394
- -32256, // A2 = -0.984375
- -556, // B2 = -0.016975
- 0, // B1 = 0
- 556, // B0 = 0.016975
- 8757, // A1 = 0.534515
- -32574, // A2 = -0.99408
- 8443, // B2 = 0.25769
- -2135, // B1 = -0.130341
- 8443, // B0 = 0.25769
- 9691, // A1 = 0.591522
- -32574, // A2 = -0.99411
- 15446, // B2 = 0.471375
- -4809, // B1 = -0.293579
- 15446, // B0 = 0.471375
- 7, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1800.txt
- 5076, // A1 = -0.309875
- -32304, // A2 = 0.985840
- -508, // B2 = -0.015503
- 0, // B1 = 0.000000
- 508, // B0 = 0.015503
- 4646, // A1 = -0.283600
- -32605, // A2 = 0.995026
- 6742, // B2 = 0.205780
- -878, // B1 = -0.053635
- 6742, // B0 = 0.205780
- 5552, // A1 = -0.338928
- -32605, // A2 = 0.995056
- 23667, // B2 = 0.722260
- -4297, // B1 = -0.262329
- 23667, // B0 = 0.722260
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
- },
- { // 1860.txt
- 3569, // A1 = -0.217865
- -32292, // A2 = 0.985504
- -239, // B2 = -0.007322
- 0, // B1 = 0.000000
- 239, // B0 = 0.007322
- 3117, // A1 = -0.190277
- -32603, // A2 = 0.994965
- 18658, // B2 = 0.569427
- -1557, // B1 = -0.095032
- 18658, // B0 = 0.569427
- 4054, // A1 = -0.247437
- -32603, // A2 = 0.994965
- 18886, // B2 = 0.576385
- -2566, // B1 = -0.156647
- 18886, // B0 = 0.576385
- 5, // Internal filter scaling
- 159, // Minimum in-band energy threshold
- 21, // 21/32 in-band to broad-band ratio
- 0x0FF5 // shift-mask 0x0FF (look at 16 half-frames) bit count = 5
+ { /* f20_50[] 11 */
+ 32538, /* A1 = 1.985962 */
+ -32325, /* A2 = -0.986511 */
+ -343, /* B2 = -0.010493 */
+ 0, /* B1 = 0 */
+ 343, /* B0 = 0.010493 */
+ 32619, /* A1 = 1.990906 */
+ -32520, /* A2 = -0.992462 */
+ 19179, /* B2 = 0.585327 */
+ -19178, /* B1 = -1.170593 */
+ 19179, /* B0 = 0.585327 */
+ 32723, /* A1 = 1.997314 */
+ -32686, /* A2 = -0.997528 */
+ 9973, /* B2 = 0.304352 */
+ -9955, /* B1 = -0.607605 */
+ 9973, /* B0 = 0.304352 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f133_200[] 12 */
+ 32072, /* A1 = 1.95752 */
+ -31896, /* A2 = -0.973419 */
+ -435, /* B2 = -0.013294 */
+ 0, /* B1 = 0 */
+ 435, /* B0 = 0.013294 */
+ 32188, /* A1 = 1.9646 */
+ -32400, /* A2 = -0.98877 */
+ 15139, /* B2 = 0.462036 */
+ -14882, /* B1 = -0.908356 */
+ 15139, /* B0 = 0.462036 */
+ 32473, /* A1 = 1.981995 */
+ -32524, /* A2 = -0.992584 */
+ 23200, /* B2 = 0.708008 */
+ -23113, /* B1 = -1.410706 */
+ 23200, /* B0 = 0.708008 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f300 13 */
+ 31769, /* A1 = -1.939026 */
+ -32584, /* A2 = 0.994385 */
+ -475, /* B2 = -0.014522 */
+ 0, /* B1 = 0.000000 */
+ 475, /* B0 = 0.014522 */
+ 31789, /* A1 = -1.940247 */
+ -32679, /* A2 = 0.997284 */
+ 17280, /* B2 = 0.527344 */
+ -16865, /* B1 = -1.029358 */
+ 17280, /* B0 = 0.527344 */
+ 31841, /* A1 = -1.943481 */
+ -32681, /* A2 = 0.997345 */
+ 543, /* B2 = 0.016579 */
+ -525, /* B1 = -0.032097 */
+ 543, /* B0 = 0.016579 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f300_420[] 14 */
+ 30750, /* A1 = 1.876892 */
+ -31212, /* A2 = -0.952515 */
+ -804, /* B2 = -0.024541 */
+ 0, /* B1 = 0 */
+ 804, /* B0 = 0.024541 */
+ 30686, /* A1 = 1.872925 */
+ -32145, /* A2 = -0.980988 */
+ 14747, /* B2 = 0.450043 */
+ -13703, /* B1 = -0.836395 */
+ 14747, /* B0 = 0.450043 */
+ 31651, /* A1 = 1.931824 */
+ -32321, /* A2 = -0.986389 */
+ 24425, /* B2 = 0.745422 */
+ -23914, /* B1 = -1.459595 */
+ 24427, /* B0 = 0.745483 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f330 15 */
+ 31613, /* A1 = -1.929565 */
+ -32646, /* A2 = 0.996277 */
+ -185, /* B2 = -0.005657 */
+ 0, /* B1 = 0.000000 */
+ 185, /* B0 = 0.005657 */
+ 31620, /* A1 = -1.929932 */
+ -32713, /* A2 = 0.998352 */
+ 19253, /* B2 = 0.587585 */
+ -18566, /* B1 = -1.133179 */
+ 19253, /* B0 = 0.587585 */
+ 31674, /* A1 = -1.933228 */
+ -32715, /* A2 = 0.998413 */
+ 2575, /* B2 = 0.078590 */
+ -2495, /* B1 = -0.152283 */
+ 2575, /* B0 = 0.078590 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f300_425[] 16 */
+ 30741, /* A1 = 1.876282 */
+ -31475, /* A2 = -0.960541 */
+ -703, /* B2 = -0.021484 */
+ 0, /* B1 = 0 */
+ 703, /* B0 = 0.021484 */
+ 30688, /* A1 = 1.873047 */
+ -32248, /* A2 = -0.984161 */
+ 14542, /* B2 = 0.443787 */
+ -13523, /* B1 = -0.825439 */
+ 14542, /* B0 = 0.443817 */
+ 31494, /* A1 = 1.922302 */
+ -32366, /* A2 = -0.987762 */
+ 21577, /* B2 = 0.658508 */
+ -21013, /* B1 = -1.282532 */
+ 21577, /* B0 = 0.658508 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f330_440[] 17 */
+ 30627, /* A1 = 1.869324 */
+ -31338, /* A2 = -0.95636 */
+ -843, /* B2 = -0.025749 */
+ 0, /* B1 = 0 */
+ 843, /* B0 = 0.025749 */
+ 30550, /* A1 = 1.864685 */
+ -32221, /* A2 = -0.983337 */
+ 13594, /* B2 = 0.414886 */
+ -12589, /* B1 = -0.768402 */
+ 13594, /* B0 = 0.414886 */
+ 31488, /* A1 = 1.921936 */
+ -32358, /* A2 = -0.987518 */
+ 24684, /* B2 = 0.753296 */
+ -24029, /* B1 = -1.466614 */
+ 24684, /* B0 = 0.753296 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f340 18 */
+ 31546, /* A1 = -1.925476 */
+ -32646, /* A2 = 0.996277 */
+ -445, /* B2 = -0.013588 */
+ 0, /* B1 = 0.000000 */
+ 445, /* B0 = 0.013588 */
+ 31551, /* A1 = -1.925781 */
+ -32713, /* A2 = 0.998352 */
+ 23884, /* B2 = 0.728882 */
+ -22979, /* B1 = -1.402527 */
+ 23884, /* B0 = 0.728882 */
+ 31606, /* A1 = -1.929138 */
+ -32715, /* A2 = 0.998413 */
+ 863, /* B2 = 0.026367 */
+ -835, /* B1 = -0.050985 */
+ 863, /* B0 = 0.026367 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f350_400[] 19 */
+ 31006, /* A1 = 1.892517 */
+ -32029, /* A2 = -0.977448 */
+ -461, /* B2 = -0.014096 */
+ 0, /* B1 = 0 */
+ 461, /* B0 = 0.014096 */
+ 30999, /* A1 = 1.892029 */
+ -32487, /* A2 = -0.991455 */
+ 11325, /* B2 = 0.345612 */
+ -10682, /* B1 = -0.651978 */
+ 11325, /* B0 = 0.345612 */
+ 31441, /* A1 = 1.919067 */
+ -32526, /* A2 = -0.992615 */
+ 24324, /* B2 = 0.74231 */
+ -23535, /* B1 = -1.436523 */
+ 24324, /* B0 = 0.74231 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f350_440[] */
+ 30634, /* A1 = 1.869751 */
+ -31533, /* A2 = -0.962341 */
+ -680, /* B2 = -0.020782 */
+ 0, /* B1 = 0 */
+ 680, /* B0 = 0.020782 */
+ 30571, /* A1 = 1.865906 */
+ -32277, /* A2 = -0.985016 */
+ 12894, /* B2 = 0.393524 */
+ -11945, /* B1 = -0.729065 */
+ 12894, /* B0 = 0.393524 */
+ 31367, /* A1 = 1.91449 */
+ -32379, /* A2 = -0.988129 */
+ 23820, /* B2 = 0.726929 */
+ -23104, /* B1 = -1.410217 */
+ 23820, /* B0 = 0.726929 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f350_450[] */
+ 30552, /* A1 = 1.864807 */
+ -31434, /* A2 = -0.95929 */
+ -690, /* B2 = -0.021066 */
+ 0, /* B1 = 0 */
+ 690, /* B0 = 0.021066 */
+ 30472, /* A1 = 1.859924 */
+ -32248, /* A2 = -0.984161 */
+ 13385, /* B2 = 0.408478 */
+ -12357, /* B1 = -0.754242 */
+ 13385, /* B0 = 0.408478 */
+ 31358, /* A1 = 1.914001 */
+ -32366, /* A2 = -0.987732 */
+ 26488, /* B2 = 0.80835 */
+ -25692, /* B1 = -1.568176 */
+ 26490, /* B0 = 0.808411 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f360 */
+ 31397, /* A1 = -1.916321 */
+ -32623, /* A2 = 0.995605 */
+ -117, /* B2 = -0.003598 */
+ 0, /* B1 = 0.000000 */
+ 117, /* B0 = 0.003598 */
+ 31403, /* A1 = -1.916687 */
+ -32700, /* A2 = 0.997925 */
+ 3388, /* B2 = 0.103401 */
+ -3240, /* B1 = -0.197784 */
+ 3388, /* B0 = 0.103401 */
+ 31463, /* A1 = -1.920410 */
+ -32702, /* A2 = 0.997986 */
+ 13346, /* B2 = 0.407288 */
+ -12863, /* B1 = -0.785126 */
+ 13346, /* B0 = 0.407288 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f380_420[] */
+ 30831, /* A1 = 1.881775 */
+ -32064, /* A2 = -0.978546 */
+ -367, /* B2 = -0.01122 */
+ 0, /* B1 = 0 */
+ 367, /* B0 = 0.01122 */
+ 30813, /* A1 = 1.880737 */
+ -32456, /* A2 = -0.990509 */
+ 11068, /* B2 = 0.337769 */
+ -10338, /* B1 = -0.631042 */
+ 11068, /* B0 = 0.337769 */
+ 31214, /* A1 = 1.905212 */
+ -32491, /* A2 = -0.991577 */
+ 16374, /* B2 = 0.499695 */
+ -15781, /* B1 = -0.963196 */
+ 16374, /* B0 = 0.499695 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f392 */
+ 31152, /* A1 = -1.901428 */
+ -32613, /* A2 = 0.995300 */
+ -314, /* B2 = -0.009605 */
+ 0, /* B1 = 0.000000 */
+ 314, /* B0 = 0.009605 */
+ 31156, /* A1 = -1.901672 */
+ -32694, /* A2 = 0.997742 */
+ 28847, /* B2 = 0.880371 */
+ -2734, /* B1 = -0.166901 */
+ 28847, /* B0 = 0.880371 */
+ 31225, /* A1 = -1.905823 */
+ -32696, /* A2 = 0.997803 */
+ 462, /* B2 = 0.014108 */
+ -442, /* B1 = -0.027019 */
+ 462, /* B0 = 0.014108 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f400_425[] */
+ 30836, /* A1 = 1.882141 */
+ -32296, /* A2 = -0.985596 */
+ -324, /* B2 = -0.009903 */
+ 0, /* B1 = 0 */
+ 324, /* B0 = 0.009903 */
+ 30825, /* A1 = 1.881409 */
+ -32570, /* A2 = -0.993958 */
+ 16847, /* B2 = 0.51416 */
+ -15792, /* B1 = -0.963898 */
+ 16847, /* B0 = 0.51416 */
+ 31106, /* A1 = 1.89856 */
+ -32584, /* A2 = -0.994415 */
+ 9579, /* B2 = 0.292328 */
+ -9164, /* B1 = -0.559357 */
+ 9579, /* B0 = 0.292328 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f400_440[] */
+ 30702, /* A1 = 1.873962 */
+ -32134, /* A2 = -0.980682 */
+ -517, /* B2 = -0.015793 */
+ 0, /* B1 = 0 */
+ 517, /* B0 = 0.015793 */
+ 30676, /* A1 = 1.872375 */
+ -32520, /* A2 = -0.992462 */
+ 8144, /* B2 = 0.24855 */
+ -7596, /* B1 = -0.463684 */
+ 8144, /* B0 = 0.24855 */
+ 31084, /* A1 = 1.897217 */
+ -32547, /* A2 = -0.993256 */
+ 22713, /* B2 = 0.693176 */
+ -21734, /* B1 = -1.326599 */
+ 22713, /* B0 = 0.693176 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f400_450[] */
+ 30613, /* A1 = 1.86853 */
+ -32031, /* A2 = -0.977509 */
+ -618, /* B2 = -0.018866 */
+ 0, /* B1 = 0 */
+ 618, /* B0 = 0.018866 */
+ 30577, /* A1 = 1.866272 */
+ -32491, /* A2 = -0.991577 */
+ 9612, /* B2 = 0.293335 */
+ -8935, /* B1 = -0.54541 */
+ 9612, /* B0 = 0.293335 */
+ 31071, /* A1 = 1.896484 */
+ -32524, /* A2 = -0.992584 */
+ 21596, /* B2 = 0.659058 */
+ -20667, /* B1 = -1.261414 */
+ 21596, /* B0 = 0.659058 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f420 */
+ 30914, /* A1 = -1.886841 */
+ -32584, /* A2 = 0.994385 */
+ -426, /* B2 = -0.013020 */
+ 0, /* B1 = 0.000000 */
+ 426, /* B0 = 0.013020 */
+ 30914, /* A1 = -1.886841 */
+ -32679, /* A2 = 0.997314 */
+ 17520, /* B2 = 0.534668 */
+ -16471, /* B1 = -1.005310 */
+ 17520, /* B0 = 0.534668 */
+ 31004, /* A1 = -1.892334 */
+ -32683, /* A2 = 0.997406 */
+ 819, /* B2 = 0.025023 */
+ -780, /* B1 = -0.047619 */
+ 819, /* B0 = 0.025023 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+#if 0
+ { /* f425 */
+ 30881, /* A1 = -1.884827 */
+ -32603, /* A2 = 0.994965 */
+ -496, /* B2 = -0.015144 */
+ 0, /* B1 = 0.000000 */
+ 496, /* B0 = 0.015144 */
+ 30880, /* A1 = -1.884766 */
+ -32692, /* A2 = 0.997711 */
+ 24767, /* B2 = 0.755859 */
+ -23290, /* B1 = -1.421509 */
+ 24767, /* B0 = 0.755859 */
+ 30967, /* A1 = -1.890076 */
+ -32694, /* A2 = 0.997772 */
+ 728, /* B2 = 0.022232 */
+ -691, /* B1 = -0.042194 */
+ 728, /* B0 = 0.022232 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+#else
+ {
+ 30850,
+ -32534,
+ -504,
+ 0,
+ 504,
+ 30831,
+ -32669,
+ 24303,
+ -22080,
+ 24303,
+ 30994,
+ -32673,
+ 1905,
+ -1811,
+ 1905,
+ 5,
+ 129,
+ 17,
+ 0xff5
+ },
+#endif
+ { /* f425_450[] */
+ 30646, /* A1 = 1.870544 */
+ -32327, /* A2 = -0.986572 */
+ -287, /* B2 = -0.008769 */
+ 0, /* B1 = 0 */
+ 287, /* B0 = 0.008769 */
+ 30627, /* A1 = 1.869324 */
+ -32607, /* A2 = -0.995087 */
+ 13269, /* B2 = 0.404968 */
+ -12376, /* B1 = -0.755432 */
+ 13269, /* B0 = 0.404968 */
+ 30924, /* A1 = 1.887512 */
+ -32619, /* A2 = -0.995453 */
+ 19950, /* B2 = 0.608826 */
+ -18940, /* B1 = -1.156006 */
+ 19950, /* B0 = 0.608826 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f425_475[] */
+ 30396, /* A1 = 1.855225 */
+ -32014, /* A2 = -0.97699 */
+ -395, /* B2 = -0.012055 */
+ 0, /* B1 = 0 */
+ 395, /* B0 = 0.012055 */
+ 30343, /* A1 = 1.85199 */
+ -32482, /* A2 = -0.991302 */
+ 17823, /* B2 = 0.543945 */
+ -16431, /* B1 = -1.002869 */
+ 17823, /* B0 = 0.543945 */
+ 30872, /* A1 = 1.884338 */
+ -32516, /* A2 = -0.99231 */
+ 18124, /* B2 = 0.553101 */
+ -17246, /* B1 = -1.052673 */
+ 18124, /* B0 = 0.553101 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f435 */
+ 30796, /* A1 = -1.879639 */
+ -32603, /* A2 = 0.994965 */
+ -254, /* B2 = -0.007762 */
+ 0, /* B1 = 0.000000 */
+ 254, /* B0 = 0.007762 */
+ 30793, /* A1 = -1.879456 */
+ -32692, /* A2 = 0.997711 */
+ 18934, /* B2 = 0.577820 */
+ -17751, /* B1 = -1.083496 */
+ 18934, /* B0 = 0.577820 */
+ 30882, /* A1 = -1.884888 */
+ -32694, /* A2 = 0.997772 */
+ 1858, /* B2 = 0.056713 */
+ -1758, /* B1 = -0.107357 */
+ 1858, /* B0 = 0.056713 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f440_450[] */
+ 30641, /* A1 = 1.870239 */
+ -32458, /* A2 = -0.99057 */
+ -155, /* B2 = -0.004735 */
+ 0, /* B1 = 0 */
+ 155, /* B0 = 0.004735 */
+ 30631, /* A1 = 1.869568 */
+ -32630, /* A2 = -0.995789 */
+ 11453, /* B2 = 0.349548 */
+ -10666, /* B1 = -0.651001 */
+ 11453, /* B0 = 0.349548 */
+ 30810, /* A1 = 1.880554 */
+ -32634, /* A2 = -0.995941 */
+ 12237, /* B2 = 0.373474 */
+ -11588, /* B1 = -0.707336 */
+ 12237, /* B0 = 0.373474 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f440_480[] */
+ 30367, /* A1 = 1.853455 */
+ -32147, /* A2 = -0.981079 */
+ -495, /* B2 = -0.015113 */
+ 0, /* B1 = 0 */
+ 495, /* B0 = 0.015113 */
+ 30322, /* A1 = 1.850769 */
+ -32543, /* A2 = -0.993134 */
+ 10031, /* B2 = 0.306152 */
+ -9252, /* B1 = -0.564728 */
+ 10031, /* B0 = 0.306152 */
+ 30770, /* A1 = 1.878052 */
+ -32563, /* A2 = -0.993774 */
+ 22674, /* B2 = 0.691956 */
+ -21465, /* B1 = -1.31012 */
+ 22674, /* B0 = 0.691956 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f445 */
+ 30709, /* A1 = -1.874329 */
+ -32603, /* A2 = 0.994965 */
+ -83, /* B2 = -0.002545 */
+ 0, /* B1 = 0.000000 */
+ 83, /* B0 = 0.002545 */
+ 30704, /* A1 = -1.874084 */
+ -32692, /* A2 = 0.997711 */
+ 10641, /* B2 = 0.324738 */
+ -9947, /* B1 = -0.607147 */
+ 10641, /* B0 = 0.324738 */
+ 30796, /* A1 = -1.879639 */
+ -32694, /* A2 = 0.997772 */
+ 10079, /* B2 = 0.307587 */
+ 9513, /* B1 = 0.580688 */
+ 10079, /* B0 = 0.307587 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f450 */
+ 30664, /* A1 = -1.871643 */
+ -32603, /* A2 = 0.994965 */
+ -164, /* B2 = -0.005029 */
+ 0, /* B1 = 0.000000 */
+ 164, /* B0 = 0.005029 */
+ 30661, /* A1 = -1.871399 */
+ -32692, /* A2 = 0.997711 */
+ 15294, /* B2 = 0.466736 */
+ -14275, /* B1 = -0.871307 */
+ 15294, /* B0 = 0.466736 */
+ 30751, /* A1 = -1.876953 */
+ -32694, /* A2 = 0.997772 */
+ 3548, /* B2 = 0.108284 */
+ -3344, /* B1 = -0.204155 */
+ 3548, /* B0 = 0.108284 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f452 */
+ 30653, /* A1 = -1.870911 */
+ -32615, /* A2 = 0.995361 */
+ -209, /* B2 = -0.006382 */
+ 0, /* B1 = 0.000000 */
+ 209, /* B0 = 0.006382 */
+ 30647, /* A1 = -1.870605 */
+ -32702, /* A2 = 0.997986 */
+ 18971, /* B2 = 0.578979 */
+ -17716, /* B1 = -1.081299 */
+ 18971, /* B0 = 0.578979 */
+ 30738, /* A1 = -1.876099 */
+ -32702, /* A2 = 0.998016 */
+ 2967, /* B2 = 0.090561 */
+ -2793, /* B1 = -0.170502 */
+ 2967, /* B0 = 0.090561 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f475 */
+ 30437, /* A1 = -1.857727 */
+ -32603, /* A2 = 0.994965 */
+ -264, /* B2 = -0.008062 */
+ 0, /* B1 = 0.000000 */
+ 264, /* B0 = 0.008062 */
+ 30430, /* A1 = -1.857300 */
+ -32692, /* A2 = 0.997711 */
+ 21681, /* B2 = 0.661682 */
+ -20082, /* B1 = -1.225708 */
+ 21681, /* B0 = 0.661682 */
+ 30526, /* A1 = -1.863220 */
+ -32694, /* A2 = 0.997742 */
+ 1559, /* B2 = 0.047600 */
+ -1459, /* B1 = -0.089096 */
+ 1559, /* B0 = 0.047600 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f480_620[] */
+ 28975, /* A1 = 1.768494 */
+ -30955, /* A2 = -0.944672 */
+ -1026, /* B2 = -0.03133 */
+ 0, /* B1 = 0 */
+ 1026, /* B0 = 0.03133 */
+ 28613, /* A1 = 1.746399 */
+ -32089, /* A2 = -0.979309 */
+ 14214, /* B2 = 0.433807 */
+ -12202, /* B1 = -0.744812 */
+ 14214, /* B0 = 0.433807 */
+ 30243, /* A1 = 1.845947 */
+ -32238, /* A2 = -0.983856 */
+ 24825, /* B2 = 0.757629 */
+ -23402, /* B1 = -1.428345 */
+ 24825, /* B0 = 0.757629 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f494 */
+ 30257, /* A1 = -1.846741 */
+ -32605, /* A2 = 0.995056 */
+ -249, /* B2 = -0.007625 */
+ 0, /* B1 = 0.000000 */
+ 249, /* B0 = 0.007625 */
+ 30247, /* A1 = -1.846191 */
+ -32694, /* A2 = 0.997772 */
+ 18088, /* B2 = 0.552002 */
+ -16652, /* B1 = -1.016418 */
+ 18088, /* B0 = 0.552002 */
+ 30348, /* A1 = -1.852295 */
+ -32696, /* A2 = 0.997803 */
+ 2099, /* B2 = 0.064064 */
+ -1953, /* B1 = -0.119202 */
+ 2099, /* B0 = 0.064064 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f500 */
+ 30202, /* A1 = -1.843431 */
+ -32624, /* A2 = 0.995622 */
+ -413, /* B2 = -0.012622 */
+ 0, /* B1 = 0.000000 */
+ 413, /* B0 = 0.012622 */
+ 30191, /* A1 = -1.842721 */
+ -32714, /* A2 = 0.998364 */
+ 25954, /* B2 = 0.792057 */
+ -23890, /* B1 = -1.458131 */
+ 25954, /* B0 = 0.792057 */
+ 30296, /* A1 = -1.849172 */
+ -32715, /* A2 = 0.998397 */
+ 2007, /* B2 = 0.061264 */
+ -1860, /* B1 = -0.113568 */
+ 2007, /* B0 = 0.061264 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f520 */
+ 30001, /* A1 = -1.831116 */
+ -32613, /* A2 = 0.995270 */
+ -155, /* B2 = -0.004750 */
+ 0, /* B1 = 0.000000 */
+ 155, /* B0 = 0.004750 */
+ 29985, /* A1 = -1.830200 */
+ -32710, /* A2 = 0.998260 */
+ 6584, /* B2 = 0.200928 */
+ -6018, /* B1 = -0.367355 */
+ 6584, /* B0 = 0.200928 */
+ 30105, /* A1 = -1.837524 */
+ -32712, /* A2 = 0.998291 */
+ 23812, /* B2 = 0.726685 */
+ -21936, /* B1 = -1.338928 */
+ 23812, /* B0 = 0.726685 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f523 */
+ 29964, /* A1 = -1.828918 */
+ -32601, /* A2 = 0.994904 */
+ -101, /* B2 = -0.003110 */
+ 0, /* B1 = 0.000000 */
+ 101, /* B0 = 0.003110 */
+ 29949, /* A1 = -1.827942 */
+ -32700, /* A2 = 0.997925 */
+ 11041, /* B2 = 0.336975 */
+ -10075, /* B1 = -0.614960 */
+ 11041, /* B0 = 0.336975 */
+ 30070, /* A1 = -1.835388 */
+ -32702, /* A2 = 0.997986 */
+ 16762, /* B2 = 0.511536 */
+ -15437, /* B1 = -0.942230 */
+ 16762, /* B0 = 0.511536 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f525 */
+ 29936, /* A1 = -1.827209 */
+ -32584, /* A2 = 0.994415 */
+ -91, /* B2 = -0.002806 */
+ 0, /* B1 = 0.000000 */
+ 91, /* B0 = 0.002806 */
+ 29921, /* A1 = -1.826233 */
+ -32688, /* A2 = 0.997559 */
+ 11449, /* B2 = 0.349396 */
+ -10426, /* B1 = -0.636383 */
+ 11449, /* B0 = 0.349396 */
+ 30045, /* A1 = -1.833862 */
+ -32688, /* A2 = 0.997589 */
+ 13055, /* B2 = 0.398407 */
+ -12028, /* B1 = -0.734161 */
+ 13055, /* B0 = 0.398407 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f540_660[] */
+ 28499, /* A1 = 1.739441 */
+ -31129, /* A2 = -0.949982 */
+ -849, /* B2 = -0.025922 */
+ 0, /* B1 = 0 */
+ 849, /* B0 = 0.025922 */
+ 28128, /* A1 = 1.716797 */
+ -32130, /* A2 = -0.98056 */
+ 14556, /* B2 = 0.444214 */
+ -12251, /* B1 = -0.747772 */
+ 14556, /* B0 = 0.444244 */
+ 29667, /* A1 = 1.81073 */
+ -32244, /* A2 = -0.984039 */
+ 23038, /* B2 = 0.703064 */
+ -21358, /* B1 = -1.303589 */
+ 23040, /* B0 = 0.703125 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f587 */
+ 29271, /* A1 = -1.786560 */
+ -32599, /* A2 = 0.994873 */
+ -490, /* B2 = -0.014957 */
+ 0, /* B1 = 0.000000 */
+ 490, /* B0 = 0.014957 */
+ 29246, /* A1 = -1.785095 */
+ -32700, /* A2 = 0.997925 */
+ 28961, /* B2 = 0.883850 */
+ -25796, /* B1 = -1.574463 */
+ 28961, /* B0 = 0.883850 */
+ 29383, /* A1 = -1.793396 */
+ -32700, /* A2 = 0.997955 */
+ 1299, /* B2 = 0.039650 */
+ -1169, /* B1 = -0.071396 */
+ 1299, /* B0 = 0.039650 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f590 */
+ 29230, /* A1 = -1.784058 */
+ -32584, /* A2 = 0.994415 */
+ -418, /* B2 = -0.012757 */
+ 0, /* B1 = 0.000000 */
+ 418, /* B0 = 0.012757 */
+ 29206, /* A1 = -1.782593 */
+ -32688, /* A2 = 0.997559 */
+ 36556, /* B2 = 1.115601 */
+ -32478, /* B1 = -1.982300 */
+ 36556, /* B0 = 1.115601 */
+ 29345, /* A1 = -1.791077 */
+ -32688, /* A2 = 0.997589 */
+ 897, /* B2 = 0.027397 */
+ -808, /* B1 = -0.049334 */
+ 897, /* B0 = 0.027397 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f600 */
+ 29116, /* A1 = -1.777100 */
+ -32603, /* A2 = 0.994965 */
+ -165, /* B2 = -0.005039 */
+ 0, /* B1 = 0.000000 */
+ 165, /* B0 = 0.005039 */
+ 29089, /* A1 = -1.775452 */
+ -32708, /* A2 = 0.998199 */
+ 6963, /* B2 = 0.212494 */
+ -6172, /* B1 = -0.376770 */
+ 6963, /* B0 = 0.212494 */
+ 29237, /* A1 = -1.784485 */
+ -32710, /* A2 = 0.998230 */
+ 24197, /* B2 = 0.738464 */
+ -21657, /* B1 = -1.321899 */
+ 24197, /* B0 = 0.738464 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f660 */
+ 28376, /* A1 = -1.731934 */
+ -32567, /* A2 = 0.993896 */
+ -363, /* B2 = -0.011102 */
+ 0, /* B1 = 0.000000 */
+ 363, /* B0 = 0.011102 */
+ 28337, /* A1 = -1.729614 */
+ -32683, /* A2 = 0.997434 */
+ 21766, /* B2 = 0.664246 */
+ -18761, /* B1 = -1.145081 */
+ 21766, /* B0 = 0.664246 */
+ 28513, /* A1 = -1.740356 */
+ -32686, /* A2 = 0.997498 */
+ 2509, /* B2 = 0.076584 */
+ -2196, /* B1 = -0.134041 */
+ 2509, /* B0 = 0.076584 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f700 */
+ 27844, /* A1 = -1.699463 */
+ -32563, /* A2 = 0.993744 */
+ -366, /* B2 = -0.011187 */
+ 0, /* B1 = 0.000000 */
+ 366, /* B0 = 0.011187 */
+ 27797, /* A1 = -1.696655 */
+ -32686, /* A2 = 0.997498 */
+ 22748, /* B2 = 0.694214 */
+ -19235, /* B1 = -1.174072 */
+ 22748, /* B0 = 0.694214 */
+ 27995, /* A1 = -1.708740 */
+ -32688, /* A2 = 0.997559 */
+ 2964, /* B2 = 0.090477 */
+ -2546, /* B1 = -0.155449 */
+ 2964, /* B0 = 0.090477 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f740 */
+ 27297, /* A1 = -1.666077 */
+ -32551, /* A2 = 0.993408 */
+ -345, /* B2 = -0.010540 */
+ 0, /* B1 = 0.000000 */
+ 345, /* B0 = 0.010540 */
+ 27240, /* A1 = -1.662598 */
+ -32683, /* A2 = 0.997406 */
+ 22560, /* B2 = 0.688477 */
+ -18688, /* B1 = -1.140625 */
+ 22560, /* B0 = 0.688477 */
+ 27461, /* A1 = -1.676147 */
+ -32684, /* A2 = 0.997467 */
+ 3541, /* B2 = 0.108086 */
+ -2985, /* B1 = -0.182220 */
+ 3541, /* B0 = 0.108086 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f750 */
+ 27155, /* A1 = -1.657410 */
+ -32551, /* A2 = 0.993408 */
+ -462, /* B2 = -0.014117 */
+ 0, /* B1 = 0.000000 */
+ 462, /* B0 = 0.014117 */
+ 27097, /* A1 = -1.653870 */
+ -32683, /* A2 = 0.997406 */
+ 32495, /* B2 = 0.991699 */
+ -26776, /* B1 = -1.634338 */
+ 32495, /* B0 = 0.991699 */
+ 27321, /* A1 = -1.667542 */
+ -32684, /* A2 = 0.997467 */
+ 1835, /* B2 = 0.056007 */
+ -1539, /* B1 = -0.093948 */
+ 1835, /* B0 = 0.056007 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f750_1450[] */
+ 19298, /* A1 = 1.177917 */
+ -24471, /* A2 = -0.746796 */
+ -4152, /* B2 = -0.126709 */
+ 0, /* B1 = 0 */
+ 4152, /* B0 = 0.126709 */
+ 12902, /* A1 = 0.787476 */
+ -29091, /* A2 = -0.887817 */
+ 12491, /* B2 = 0.38121 */
+ -1794, /* B1 = -0.109528 */
+ 12494, /* B0 = 0.381317 */
+ 26291, /* A1 = 1.604736 */
+ -30470, /* A2 = -0.929901 */
+ 28859, /* B2 = 0.880737 */
+ -26084, /* B1 = -1.592102 */
+ 28861, /* B0 = 0.880798 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f770 */
+ 26867, /* A1 = -1.639832 */
+ -32551, /* A2 = 0.993408 */
+ -123, /* B2 = -0.003755 */
+ 0, /* B1 = 0.000000 */
+ 123, /* B0 = 0.003755 */
+ 26805, /* A1 = -1.636108 */
+ -32683, /* A2 = 0.997406 */
+ 17297, /* B2 = 0.527863 */
+ -14096, /* B1 = -0.860382 */
+ 17297, /* B0 = 0.527863 */
+ 27034, /* A1 = -1.650085 */
+ -32684, /* A2 = 0.997467 */
+ 12958, /* B2 = 0.395477 */
+ -10756, /* B1 = -0.656525 */
+ 12958, /* B0 = 0.395477 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f800 */
+ 26413, /* A1 = -1.612122 */
+ -32547, /* A2 = 0.993286 */
+ -223, /* B2 = -0.006825 */
+ 0, /* B1 = 0.000000 */
+ 223, /* B0 = 0.006825 */
+ 26342, /* A1 = -1.607849 */
+ -32686, /* A2 = 0.997498 */
+ 6391, /* B2 = 0.195053 */
+ -5120, /* B1 = -0.312531 */
+ 6391, /* B0 = 0.195053 */
+ 26593, /* A1 = -1.623108 */
+ -32688, /* A2 = 0.997559 */
+ 23681, /* B2 = 0.722717 */
+ -19328, /* B1 = -1.179688 */
+ 23681, /* B0 = 0.722717 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f816 */
+ 26168, /* A1 = -1.597209 */
+ -32528, /* A2 = 0.992706 */
+ -235, /* B2 = -0.007182 */
+ 0, /* B1 = 0.000000 */
+ 235, /* B0 = 0.007182 */
+ 26092, /* A1 = -1.592590 */
+ -32675, /* A2 = 0.997192 */
+ 20823, /* B2 = 0.635498 */
+ -16510, /* B1 = -1.007751 */
+ 20823, /* B0 = 0.635498 */
+ 26363, /* A1 = -1.609070 */
+ -32677, /* A2 = 0.997253 */
+ 6739, /* B2 = 0.205688 */
+ -5459, /* B1 = -0.333206 */
+ 6739, /* B0 = 0.205688 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f850 */
+ 25641, /* A1 = -1.565063 */
+ -32536, /* A2 = 0.992950 */
+ -121, /* B2 = -0.003707 */
+ 0, /* B1 = 0.000000 */
+ 121, /* B0 = 0.003707 */
+ 25560, /* A1 = -1.560059 */
+ -32684, /* A2 = 0.997437 */
+ 18341, /* B2 = 0.559753 */
+ -14252, /* B1 = -0.869904 */
+ 18341, /* B0 = 0.559753 */
+ 25837, /* A1 = -1.577026 */
+ -32684, /* A2 = 0.997467 */
+ 16679, /* B2 = 0.509003 */
+ -13232, /* B1 = -0.807648 */
+ 16679, /* B0 = 0.509003 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f857_1645[] */
+ 16415, /* A1 = 1.001953 */
+ -23669, /* A2 = -0.722321 */
+ -4549, /* B2 = -0.138847 */
+ 0, /* B1 = 0 */
+ 4549, /* B0 = 0.138847 */
+ 8456, /* A1 = 0.516174 */
+ -28996, /* A2 = -0.884918 */
+ 13753, /* B2 = 0.419724 */
+ -12, /* B1 = -0.000763 */
+ 13757, /* B0 = 0.419846 */
+ 24632, /* A1 = 1.503418 */
+ -30271, /* A2 = -0.923828 */
+ 29070, /* B2 = 0.887146 */
+ -25265, /* B1 = -1.542114 */
+ 29073, /* B0 = 0.887268 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f900 */
+ 24806, /* A1 = -1.514099 */
+ -32501, /* A2 = 0.991852 */
+ -326, /* B2 = -0.009969 */
+ 0, /* B1 = 0.000000 */
+ 326, /* B0 = 0.009969 */
+ 24709, /* A1 = -1.508118 */
+ -32659, /* A2 = 0.996674 */
+ 20277, /* B2 = 0.618835 */
+ -15182, /* B1 = -0.926636 */
+ 20277, /* B0 = 0.618835 */
+ 25022, /* A1 = -1.527222 */
+ -32661, /* A2 = 0.996735 */
+ 4320, /* B2 = 0.131836 */
+ -3331, /* B1 = -0.203339 */
+ 4320, /* B0 = 0.131836 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f900_1300[] */
+ 19776, /* A1 = 1.207092 */
+ -27437, /* A2 = -0.837341 */
+ -2666, /* B2 = -0.081371 */
+ 0, /* B1 = 0 */
+ 2666, /* B0 = 0.081371 */
+ 16302, /* A1 = 0.995026 */
+ -30354, /* A2 = -0.926361 */
+ 10389, /* B2 = 0.317062 */
+ -3327, /* B1 = -0.203064 */
+ 10389, /* B0 = 0.317062 */
+ 24299, /* A1 = 1.483154 */
+ -30930, /* A2 = -0.943909 */
+ 25016, /* B2 = 0.763428 */
+ -21171, /* B1 = -1.292236 */
+ 25016, /* B0 = 0.763428 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f935_1215[] */
+ 20554, /* A1 = 1.254517 */
+ -28764, /* A2 = -0.877838 */
+ -2048, /* B2 = -0.062515 */
+ 0, /* B1 = 0 */
+ 2048, /* B0 = 0.062515 */
+ 18209, /* A1 = 1.11145 */
+ -30951, /* A2 = -0.94458 */
+ 9390, /* B2 = 0.286575 */
+ -3955, /* B1 = -0.241455 */
+ 9390, /* B0 = 0.286575 */
+ 23902, /* A1 = 1.458923 */
+ -31286, /* A2 = -0.954803 */
+ 23252, /* B2 = 0.709595 */
+ -19132, /* B1 = -1.167725 */
+ 23252, /* B0 = 0.709595 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f941_1477[] */
+ 17543, /* A1 = 1.07074 */
+ -26220, /* A2 = -0.800201 */
+ -3298, /* B2 = -0.100647 */
+ 0, /* B1 = 0 */
+ 3298, /* B0 = 0.100647 */
+ 12423, /* A1 = 0.75827 */
+ -30036, /* A2 = -0.916626 */
+ 12651, /* B2 = 0.386078 */
+ -2444, /* B1 = -0.14917 */
+ 12653, /* B0 = 0.386154 */
+ 23518, /* A1 = 1.435425 */
+ -30745, /* A2 = -0.938293 */
+ 27282, /* B2 = 0.832581 */
+ -22529, /* B1 = -1.375122 */
+ 27286, /* B0 = 0.832703 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f942 */
+ 24104, /* A1 = -1.471252 */
+ -32507, /* A2 = 0.992065 */
+ -351, /* B2 = -0.010722 */
+ 0, /* B1 = 0.000000 */
+ 351, /* B0 = 0.010722 */
+ 23996, /* A1 = -1.464600 */
+ -32671, /* A2 = 0.997040 */
+ 22848, /* B2 = 0.697266 */
+ -16639, /* B1 = -1.015564 */
+ 22848, /* B0 = 0.697266 */
+ 24332, /* A1 = -1.485168 */
+ -32673, /* A2 = 0.997101 */
+ 4906, /* B2 = 0.149727 */
+ -3672, /* B1 = -0.224174 */
+ 4906, /* B0 = 0.149727 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f950 */
+ 23967, /* A1 = -1.462830 */
+ -32507, /* A2 = 0.992065 */
+ -518, /* B2 = -0.015821 */
+ 0, /* B1 = 0.000000 */
+ 518, /* B0 = 0.015821 */
+ 23856, /* A1 = -1.456055 */
+ -32671, /* A2 = 0.997040 */
+ 26287, /* B2 = 0.802246 */
+ -19031, /* B1 = -1.161560 */
+ 26287, /* B0 = 0.802246 */
+ 24195, /* A1 = -1.476746 */
+ -32673, /* A2 = 0.997101 */
+ 2890, /* B2 = 0.088196 */
+ -2151, /* B1 = -0.131317 */
+ 2890, /* B0 = 0.088196 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f950_1400[] */
+ 18294, /* A1 = 1.116638 */
+ -26962, /* A2 = -0.822845 */
+ -2914, /* B2 = -0.088936 */
+ 0, /* B1 = 0 */
+ 2914, /* B0 = 0.088936 */
+ 14119, /* A1 = 0.861786 */
+ -30227, /* A2 = -0.922455 */
+ 11466, /* B2 = 0.349945 */
+ -2833, /* B1 = -0.172943 */
+ 11466, /* B0 = 0.349945 */
+ 23431, /* A1 = 1.430115 */
+ -30828, /* A2 = -0.940796 */
+ 25331, /* B2 = 0.773071 */
+ -20911, /* B1 = -1.276367 */
+ 25331, /* B0 = 0.773071 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f975 */
+ 23521, /* A1 = -1.435608 */
+ -32489, /* A2 = 0.991516 */
+ -193, /* B2 = -0.005915 */
+ 0, /* B1 = 0.000000 */
+ 193, /* B0 = 0.005915 */
+ 23404, /* A1 = -1.428467 */
+ -32655, /* A2 = 0.996582 */
+ 17740, /* B2 = 0.541412 */
+ -12567, /* B1 = -0.767029 */
+ 17740, /* B0 = 0.541412 */
+ 23753, /* A1 = -1.449829 */
+ -32657, /* A2 = 0.996613 */
+ 9090, /* B2 = 0.277405 */
+ -6662, /* B1 = -0.406647 */
+ 9090, /* B0 = 0.277405 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1000 */
+ 23071, /* A1 = -1.408203 */
+ -32489, /* A2 = 0.991516 */
+ -293, /* B2 = -0.008965 */
+ 0, /* B1 = 0.000000 */
+ 293, /* B0 = 0.008965 */
+ 22951, /* A1 = -1.400818 */
+ -32655, /* A2 = 0.996582 */
+ 5689, /* B2 = 0.173645 */
+ -3951, /* B1 = -0.241150 */
+ 5689, /* B0 = 0.173645 */
+ 23307, /* A1 = -1.422607 */
+ -32657, /* A2 = 0.996613 */
+ 18692, /* B2 = 0.570435 */
+ -13447, /* B1 = -0.820770 */
+ 18692, /* B0 = 0.570435 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1020 */
+ 22701, /* A1 = -1.385620 */
+ -32474, /* A2 = 0.991058 */
+ -292, /* B2 = -0.008933 */
+ 0, /*163840 , B1 = 10.000000 */
+ 292, /* B0 = 0.008933 */
+ 22564, /* A1 = -1.377258 */
+ -32655, /* A2 = 0.996552 */
+ 20756, /* B2 = 0.633423 */
+ -14176, /* B1 = -0.865295 */
+ 20756, /* B0 = 0.633423 */
+ 22960, /* A1 = -1.401428 */
+ -32657, /* A2 = 0.996613 */
+ 6520, /* B2 = 0.198990 */
+ -4619, /* B1 = -0.281937 */
+ 6520, /* B0 = 0.198990 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1050 */
+ 22142, /* A1 = -1.351501 */
+ -32474, /* A2 = 0.991058 */
+ -147, /* B2 = -0.004493 */
+ 0, /* B1 = 0.000000 */
+ 147, /* B0 = 0.004493 */
+ 22000, /* A1 = -1.342834 */
+ -32655, /* A2 = 0.996552 */
+ 15379, /* B2 = 0.469360 */
+ -10237, /* B1 = -0.624847 */
+ 15379, /* B0 = 0.469360 */
+ 22406, /* A1 = -1.367554 */
+ -32657, /* A2 = 0.996613 */
+ 17491, /* B2 = 0.533783 */
+ -12096, /* B1 = -0.738312 */
+ 17491, /* B0 = 0.533783 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1100_1750[] */
+ 12973, /* A1 = 0.79184 */
+ -24916, /* A2 = -0.760376 */
+ 6655, /* B2 = 0.203102 */
+ 367, /* B1 = 0.0224 */
+ 6657, /* B0 = 0.203171 */
+ 5915, /* A1 = 0.361053 */
+ -29560, /* A2 = -0.90213 */
+ -7777, /* B2 = -0.23735 */
+ 0, /* B1 = 0 */
+ 7777, /* B0 = 0.23735 */
+ 20510, /* A1 = 1.251892 */
+ -30260, /* A2 = -0.923462 */
+ 26662, /* B2 = 0.81366 */
+ -20573, /* B1 = -1.255737 */
+ 26668, /* B0 = 0.813843 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1140 */
+ 20392, /* A1 = -1.244629 */
+ -32460, /* A2 = 0.990601 */
+ -270, /* B2 = -0.008240 */
+ 0, /* B1 = 0.000000 */
+ 270, /* B0 = 0.008240 */
+ 20218, /* A1 = -1.234009 */
+ -32655, /* A2 = 0.996582 */
+ 21337, /* B2 = 0.651154 */
+ -13044, /* B1 = -0.796143 */
+ 21337, /* B0 = 0.651154 */
+ 20684, /* A1 = -1.262512 */
+ -32657, /* A2 = 0.996643 */
+ 8572, /* B2 = 0.261612 */
+ -5476, /* B1 = -0.334244 */
+ 8572, /* B0 = 0.261612 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1200 */
+ 19159, /* A1 = -1.169373 */
+ -32456, /* A2 = 0.990509 */
+ -335, /* B2 = -0.010252 */
+ 0, /* B1 = 0.000000 */
+ 335, /* B0 = 0.010252 */
+ 18966, /* A1 = -1.157593 */
+ -32661, /* A2 = 0.996735 */
+ 6802, /* B2 = 0.207588 */
+ -3900, /* B1 = -0.238098 */
+ 6802, /* B0 = 0.207588 */
+ 19467, /* A1 = -1.188232 */
+ -32661, /* A2 = 0.996765 */
+ 25035, /* B2 = 0.764008 */
+ -15049, /* B1 = -0.918579 */
+ 25035, /* B0 = 0.764008 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1209 */
+ 18976, /* A1 = -1.158264 */
+ -32439, /* A2 = 0.989990 */
+ -183, /* B2 = -0.005588 */
+ 0, /* B1 = 0.000000 */
+ 183, /* B0 = 0.005588 */
+ 18774, /* A1 = -1.145874 */
+ -32650, /* A2 = 0.996429 */
+ 15468, /* B2 = 0.472076 */
+ -8768, /* B1 = -0.535217 */
+ 15468, /* B0 = 0.472076 */
+ 19300, /* A1 = -1.177979 */
+ -32652, /* A2 = 0.996490 */
+ 19840, /* B2 = 0.605499 */
+ -11842, /* B1 = -0.722809 */
+ 19840, /* B0 = 0.605499 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1330 */
+ 16357, /* A1 = -0.998413 */
+ -32368, /* A2 = 0.987793 */
+ -217, /* B2 = -0.006652 */
+ 0, /* B1 = 0.000000 */
+ 217, /* B0 = 0.006652 */
+ 16107, /* A1 = -0.983126 */
+ -32601, /* A2 = 0.994904 */
+ 11602, /* B2 = 0.354065 */
+ -5555, /* B1 = -0.339111 */
+ 11602, /* B0 = 0.354065 */
+ 16722, /* A1 = -1.020630 */
+ -32603, /* A2 = 0.994965 */
+ 15574, /* B2 = 0.475311 */
+ -8176, /* B1 = -0.499069 */
+ 15574, /* B0 = 0.475311 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1336 */
+ 16234, /* A1 = -0.990875 */
+ 32404, /* A2 = -0.988922 */
+ -193, /* B2 = -0.005908 */
+ 0, /* B1 = 0.000000 */
+ 193, /* B0 = 0.005908 */
+ 15986, /* A1 = -0.975769 */
+ -32632, /* A2 = 0.995880 */
+ 18051, /* B2 = 0.550903 */
+ -8658, /* B1 = -0.528473 */
+ 18051, /* B0 = 0.550903 */
+ 16591, /* A1 = -1.012695 */
+ -32634, /* A2 = 0.995941 */
+ 15736, /* B2 = 0.480240 */
+ -8125, /* B1 = -0.495926 */
+ 15736, /* B0 = 0.480240 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1366 */
+ 15564, /* A1 = -0.949982 */
+ -32404, /* A2 = 0.988922 */
+ -269, /* B2 = -0.008216 */
+ 0, /* B1 = 0.000000 */
+ 269, /* B0 = 0.008216 */
+ 15310, /* A1 = -0.934479 */
+ -32632, /* A2 = 0.995880 */
+ 10815, /* B2 = 0.330063 */
+ -4962, /* B1 = -0.302887 */
+ 10815, /* B0 = 0.330063 */
+ 15924, /* A1 = -0.971924 */
+ -32634, /* A2 = 0.995941 */
+ 18880, /* B2 = 0.576172 */
+ -9364, /* B1 = -0.571594 */
+ 18880, /* B0 = 0.576172 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1380 */
+ 15247, /* A1 = -0.930603 */
+ -32397, /* A2 = 0.988708 */
+ -244, /* B2 = -0.007451 */
+ 0, /* B1 = 0.000000 */
+ 244, /* B0 = 0.007451 */
+ 14989, /* A1 = -0.914886 */
+ -32627, /* A2 = 0.995697 */
+ 18961, /* B2 = 0.578644 */
+ -8498, /* B1 = -0.518707 */
+ 18961, /* B0 = 0.578644 */
+ 15608, /* A1 = -0.952667 */
+ -32628, /* A2 = 0.995758 */
+ 11145, /* B2 = 0.340134 */
+ -5430, /* B1 = -0.331467 */
+ 11145, /* B0 = 0.340134 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1400 */
+ 14780, /* A1 = -0.902130 */
+ -32393, /* A2 = 0.988586 */
+ -396, /* B2 = -0.012086 */
+ 0, /* B1 = 0.000000 */
+ 396, /* B0 = 0.012086 */
+ 14510, /* A1 = -0.885651 */
+ -32630, /* A2 = 0.995819 */
+ 6326, /* B2 = 0.193069 */
+ -2747, /* B1 = -0.167671 */
+ 6326, /* B0 = 0.193069 */
+ 15154, /* A1 = -0.924957 */
+ -32632, /* A2 = 0.995850 */
+ 23235, /* B2 = 0.709076 */
+ -10983, /* B1 = -0.670380 */
+ 23235, /* B0 = 0.709076 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1477 */
+ 13005, /* A1 = -0.793793 */
+ -32368, /* A2 = 0.987823 */
+ -500, /* B2 = -0.015265 */
+ 0, /* B1 = 0.000000 */
+ 500, /* B0 = 0.015265 */
+ 12708, /* A1 = -0.775665 */
+ -32615, /* A2 = 0.995331 */
+ 11420, /* B2 = 0.348526 */
+ -4306, /* B1 = -0.262833 */
+ 11420, /* B0 = 0.348526 */
+ 13397, /* A1 = -0.817688 */
+ -32615, /* A2 = 0.995361 */
+ 9454, /* B2 = 0.288528 */
+ -3981, /* B1 = -0.243027 */
+ 9454, /* B0 = 0.288528 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1600 */
+ 10046, /* A1 = -0.613190 */
+ -32331, /* A2 = 0.986694 */
+ -455, /* B2 = -0.013915 */
+ 0, /* B1 = 0.000000 */
+ 455, /* B0 = 0.013915 */
+ 9694, /* A1 = -0.591705 */
+ -32601, /* A2 = 0.994934 */
+ 6023, /* B2 = 0.183815 */
+ -1708, /* B1 = -0.104279 */
+ 6023, /* B0 = 0.183815 */
+ 10478, /* A1 = -0.639587 */
+ -32603, /* A2 = 0.994965 */
+ 22031, /* B2 = 0.672333 */
+ -7342, /* B1 = -0.448151 */
+ 22031, /* B0 = 0.672333 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1633_1638[] */
+ 9181, /* A1 = 0.560394 */
+ -32256, /* A2 = -0.984375 */
+ -556, /* B2 = -0.016975 */
+ 0, /* B1 = 0 */
+ 556, /* B0 = 0.016975 */
+ 8757, /* A1 = 0.534515 */
+ -32574, /* A2 = -0.99408 */
+ 8443, /* B2 = 0.25769 */
+ -2135, /* B1 = -0.130341 */
+ 8443, /* B0 = 0.25769 */
+ 9691, /* A1 = 0.591522 */
+ -32574, /* A2 = -0.99411 */
+ 15446, /* B2 = 0.471375 */
+ -4809, /* B1 = -0.293579 */
+ 15446, /* B0 = 0.471375 */
+ 7, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1800 */
+ 5076, /* A1 = -0.309875 */
+ -32304, /* A2 = 0.985840 */
+ -508, /* B2 = -0.015503 */
+ 0, /* B1 = 0.000000 */
+ 508, /* B0 = 0.015503 */
+ 4646, /* A1 = -0.283600 */
+ -32605, /* A2 = 0.995026 */
+ 6742, /* B2 = 0.205780 */
+ -878, /* B1 = -0.053635 */
+ 6742, /* B0 = 0.205780 */
+ 5552, /* A1 = -0.338928 */
+ -32605, /* A2 = 0.995056 */
+ 23667, /* B2 = 0.722260 */
+ -4297, /* B1 = -0.262329 */
+ 23667, /* B0 = 0.722260 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
+ },
+ { /* f1860 */
+ 3569, /* A1 = -0.217865 */
+ -32292, /* A2 = 0.985504 */
+ -239, /* B2 = -0.007322 */
+ 0, /* B1 = 0.000000 */
+ 239, /* B0 = 0.007322 */
+ 3117, /* A1 = -0.190277 */
+ -32603, /* A2 = 0.994965 */
+ 18658, /* B2 = 0.569427 */
+ -1557, /* B1 = -0.095032 */
+ 18658, /* B0 = 0.569427 */
+ 4054, /* A1 = -0.247437 */
+ -32603, /* A2 = 0.994965 */
+ 18886, /* B2 = 0.576385 */
+ -2566, /* B1 = -0.156647 */
+ 18886, /* B0 = 0.576385 */
+ 5, /* Internal filter scaling */
+ 159, /* Minimum in-band energy threshold */
+ 21, /* 21/32 in-band to broad-band ratio */
+ 0x0FF5 /* shift-mask 0x0FF (look at 16 half-frames) bit count = 5 */
},
};
static int ixj_init_filter(IXJ *j, IXJ_FILTER * jf)
@@ -9170,33 +10558,33 @@
if (jf->filter > 3) {
return -1;
}
- if (ixj_WriteDSPCommand(0x5154 + jf->filter, j)) // Select Filter
+ if (ixj_WriteDSPCommand(0x5154 + jf->filter, j)) /* Select Filter */
return -1;
if (!jf->enable) {
- if (ixj_WriteDSPCommand(0x5152, j)) // Disable Filter
+ if (ixj_WriteDSPCommand(0x5152, j)) /* Disable Filter */
return -1;
else
return 0;
} else {
- if (ixj_WriteDSPCommand(0x5153, j)) // Enable Filter
+ if (ixj_WriteDSPCommand(0x5153, j)) /* Enable Filter */
return -1;
- // Select the filter (f0 - f3) to use.
+ /* Select the filter (f0 - f3) to use. */
if (ixj_WriteDSPCommand(0x5154 + jf->filter, j))
return -1;
}
if (jf->freq < 12 && jf->freq > 3) {
- // Select the frequency for the selected filter.
+ /* Select the frequency for the selected filter. */
if (ixj_WriteDSPCommand(0x5170 + jf->freq, j))
return -1;
} else if (jf->freq > 11) {
- // We need to load a programmable filter set for undefined
- // frequencies. So we will point the filter to a programmable set.
- // Since there are only 4 filters and 4 programmable sets, we will
- // just point the filter to the same number set and program it for the
- // frequency we want.
+ /* We need to load a programmable filter set for undefined */
+ /* frequencies. So we will point the filter to a programmable set. */
+ /* Since there are only 4 filters and 4 programmable sets, we will */
+ /* just point the filter to the same number set and program it for the */
+ /* frequency we want. */
if (ixj_WriteDSPCommand(0x5170 + jf->filter, j))
return -1;
if (j->ver.low != 0x12) {
@@ -9217,6 +10605,52 @@
return 0;
}
+static int ixj_init_filter_raw(IXJ *j, IXJ_FILTER_RAW * jfr)
+{
+ unsigned short cmd;
+ int cnt, max;
+ if (jfr->filter > 3) {
+ return -1;
+ }
+ if (ixj_WriteDSPCommand(0x5154 + jfr->filter, j)) /* Select Filter */
+ return -1;
+
+ if (!jfr->enable) {
+ if (ixj_WriteDSPCommand(0x5152, j)) /* Disable Filter */
+ return -1;
+ else
+ return 0;
+ } else {
+ if (ixj_WriteDSPCommand(0x5153, j)) /* Enable Filter */
+ return -1;
+ /* Select the filter (f0 - f3) to use. */
+ if (ixj_WriteDSPCommand(0x5154 + jfr->filter, j))
+ return -1;
+ }
+ /* We need to load a programmable filter set for undefined */
+ /* frequencies. So we will point the filter to a programmable set. */
+ /* Since there are only 4 filters and 4 programmable sets, we will */
+ /* just point the filter to the same number set and program it for the */
+ /* frequency we want. */
+ if (ixj_WriteDSPCommand(0x5170 + jfr->filter, j))
+ return -1;
+ if (j->ver.low != 0x12) {
+ cmd = 0x515B;
+ max = 19;
+ } else {
+ cmd = 0x515E;
+ max = 15;
+ }
+ if (ixj_WriteDSPCommand(cmd, j))
+ return -1;
+ for (cnt = 0; cnt < max; cnt++) {
+ if (ixj_WriteDSPCommand(jfr->coeff[cnt], j))
+ return -1;
+ }
+ j->filter_en[jfr->filter] = jfr->enable;
+ return 0;
+}
+
static int ixj_init_tone(IXJ *j, IXJ_TONE * ti)
{
int freq0, freq1;
@@ -9237,7 +10671,7 @@
{
if (ixj_WriteDSPCommand(0x6800 + ti->tone_index, j))
return -1;
- if (ixj_WriteDSPCommand(0x6000 + (ti->gain0 << 4) + ti->gain1, j))
+ if (ixj_WriteDSPCommand(0x6000 + (ti->gain1 << 4) + ti->gain0, j))
return -1;
data = freq0;
if (ixj_WriteDSPCommand(data, j))
@@ -9248,3 +10682,4 @@
}
return freq0;
}
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)