summaryrefslogtreecommitdiff
path: root/wctdm.c
diff options
context:
space:
mode:
authormarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2002-09-04 19:55:34 +0000
committermarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2002-09-04 19:55:34 +0000
commit660653fc06a609905294f3cdfa7330b02ad0fb61 (patch)
tree9bb82cec50bccb78161fff1674813e7ccae295b2 /wctdm.c
parentd02d74bf8ef6149dc5da847c7728b38a1d7c3569 (diff)
Version 0.3.0 from FTP
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@102 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'wctdm.c')
-rwxr-xr-xwctdm.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/wctdm.c b/wctdm.c
index 9b33b04..228cfcc 100755
--- a/wctdm.c
+++ b/wctdm.c
@@ -279,6 +279,12 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits)
{
/* Drop chip select */
int x;
+ wc->ios |= BIT_SCLK;
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
wc->ios &= ~BIT_CS;
outb(wc->ios, wc->ioaddr + WC_AUXD);
for (x=0;x<8;x++) {
@@ -289,9 +295,13 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits)
wc->ios &= ~BIT_SDI;
wc->ios &= ~BIT_SCLK;
outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
/* Now raise SCLK high again and repeat */
wc->ios |= BIT_SCLK;
outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
bits <<= 1;
}
/* Finally raise CS back high again */
@@ -300,21 +310,29 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits)
outb(wc->ios, wc->ioaddr + WC_AUXD);
outb(wc->ios, wc->ioaddr + WC_AUXD);
outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
}
static inline unsigned char read_8bits(struct wcfxs *wc)
{
unsigned char res=0, c;
int x;
+ wc->ios |= BIT_SCLK;
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
/* Drop chip select */
wc->ios &= ~BIT_CS;
outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
for (x=0;x<8;x++) {
res <<= 1;
/* Get SCLK */
wc->ios &= ~BIT_SCLK;
outb(wc->ios, wc->ioaddr + WC_AUXD);
-
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
/* Read back the value */
c = inb(wc->ioaddr + WC_AUXR);
if (c & BIT_SDO)
@@ -322,6 +340,9 @@ static inline unsigned char read_8bits(struct wcfxs *wc)
/* Now raise SCLK high again */
wc->ios |= BIT_SCLK;
outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
}
/* Finally raise CS back high again */
wc->ios |= BIT_CS;
@@ -329,6 +350,8 @@ static inline unsigned char read_8bits(struct wcfxs *wc)
outb(wc->ios, wc->ioaddr + WC_AUXD);
outb(wc->ios, wc->ioaddr + WC_AUXD);
outb(wc->ios, wc->ioaddr + WC_AUXD);
+ wc->ios &= ~BIT_SCLK;
+ outb(wc->ios, wc->ioaddr + WC_AUXD);
/* And return our result */
return res;
@@ -500,10 +523,12 @@ static int wcfxs_proslic_insane(struct wcfxs *wc, int card)
if (debug)
printk("ProSLIC on module %d, product %d, version %d\n", card, (blah & 0x30) >> 4, (blah & 0xf));
+#if 0
if ((blah & 0x30) >> 4) {
printk("ProSLIC on module %d is not a 3210.\n", card);
return -1;
}
+#endif
if ((blah & 0xf) < 3) {
printk("ProSLIC 3210 version %d is too old\n", blah & 0xf);
return -1;
@@ -511,7 +536,7 @@ static int wcfxs_proslic_insane(struct wcfxs *wc, int card)
blah = wcfxs_getreg(wc, card, 8);
if (blah != 0x2) {
- printk("ProSLIC on module %d insane (1)\n", card);
+ printk("ProSLIC on module %d insane (1) %d should be 2\n", card, blah);
return -1;
}
@@ -1237,3 +1262,6 @@ MODULE_LICENSE("GPL");
module_init(wcfxs_init);
module_exit(wcfxs_cleanup);
+
+
+