All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raymond <rayau@netvigator.com>
To: alsa-devel@lists.sourceforge.net
Cc: Sasha Khapyorsky <sashak@smlink.com>,
	openvortex-dev@nongnu.org, pmhahn@titan.lahn.de,
	Manuel Jander <manuel.jander@gmail.com>
Subject: Re: au88x0 modem
Date: Fri, 16 Sep 2005 12:33:40 +0800	[thread overview]
Message-ID: <432A4B24.1040209@netvigator.com> (raw)
In-Reply-To: <20050915204345.GC27700@sashak.softier1.local>

Sasha Khapyorsky wrote:
> On 17:35 Thu 15 Sep     , Sasha Khapyorsky wrote:
> 
>>I will send cleaned codec access patch separately and will look what is
>>next.
> 
> 
> Pilipp, no real patches yet, let's investigate few things:
> 
> 1. Actual "secondary codec" bit in CODEC_EN register - just silly print
> (apply with -p1):
> 
> 
> --- au88x0_prev/au88x0_core.c	2005-09-14 20:51:03.000000000 +0300
> +++ au88x0/au88x0_core.c	2005-09-15 22:59:05.000000000 +0300
> @@ -2516,6 +2516,8 @@ static void vortex_codec_init(vortex_t *
>  	msleep(2);
>  	if (hwread(vortex->mmio, VORTEX_CODEC_EN)&(EN_CODEC1|EN_MODEM))
>  		vortex->num_of_codecs = 2;
> +	printk("vortex_codec_init: VORTEX_CODEC_EN = %08x\n",
> +		hwread(vortex->mmio, VORTEX_CODEC_EN));
>  }
>  
>  static void
> 
> 

VORTEX_CODEC_EN = 00000000 on au8830 (STAC9708) after cold reset of AC-Link.


static int vortex_core_init(vortex_t * vortex)
{

	printk(KERN_INFO "Vortex: init.... ");
	/* Hardware Init. */
	hwwrite(vortex->mmio, VORTEX_CTRL, 0xffffffff);
	msleep(5);
+	printk(KERN_INFO "VORTEX_CTRL : %.8x\n",hwread(vortex->mmio, 
VORTEX_CTRL));

VORTEX_CTRL : 00303260 after cold reset on au8830 Optical SPDIF ( 
Subsystem: 12eb:0088 )


There is a TAD connector on the au8820/au8830 sound cards.
I guess it is used for the ISA Modem Interface.

Does TAD work with external modem ?

There are P4 motherboards which has ISA slots and PCI slots.

http://www.prnewswire.co.uk/cgi/news/release?id=50053

Modem and Telephony Support on PCI Bus:

Besides sound controllers, modems are the only other PC component that 
are still ISA-based. The AU8820 includes an interface to existing, 
standard ISA modem chip sets, such as the latest 56k modems from US 
Robotics and Rockwell. This unique feature offers two key advantages to 
OEMs: the ability to build PCI based audio-telephony combo cards, and 
the design of a PC without an ISA bus.



diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au8810.c 
modem/alsa-driver/alsa-kernel/pci/au88x0/au8810.c
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au8810.c	2005-09-15 
19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au8810.c	2005-09-16 
08:56:39.000000000 +0800
@@ -6,6 +6,7 @@
  	{0,}
  };

+#include "au88x0_modem.c"
  #include "au88x0_core.c"
  #include "au88x0_pcm.c"
  #include "au88x0_mixer.c"
diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au8820.h 
modem/alsa-driver/alsa-kernel/pci/au88x0/au8820.h
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au8820.h	2005-09-15 
19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au8820.h	2005-09-15 
19:37:17.000000000 +0800
@@ -158,7 +158,7 @@
  /* CODEC */
  #define VORTEX_CODEC_CTRL 0x11984
  #define VORTEX_CODEC_EN 0x11990
-#define		EN_CODEC	0x00000300
+#define		EN_AUDIO0	0x00000300
  #define		EN_SPORT	0x00030000
  #define		EN_SPDIF	0x000c0000
  #define VORTEX_CODEC_CHN 0x11880
diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au8830.h 
modem/alsa-driver/alsa-kernel/pci/au88x0/au8830.h
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au8830.h	2005-09-15 
19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au8830.h	2005-09-15 
19:37:46.000000000 +0800
@@ -208,7 +208,6 @@
  #define		EN_AUDIO1		0x00003000
  #define		EN_SPORT		0x00030000
  #define		EN_SPDIF		0x000c0000
-#define		EN_CODEC		(EN_AUDIO1 | EN_AUDIO0)

  #define VORTEX_SPDIF_SMPRATE	0x29194

diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0.c 
modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0.c
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0.c	2005-09-15 
19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0.c	2005-09-16 
11:13:44.000000000 +0800
@@ -27,6 +27,9 @@
  static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
  static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
  static int pcifix[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 255 };
+#ifdef CHIP_AU8810
+static int pcimodem[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0 };
+#endif

  module_param_array(index, int, NULL, 0444);
  MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
@@ -36,6 +39,10 @@
  MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
  module_param_array(pcifix, int, NULL, 0444);
  MODULE_PARM_DESC(pcifix, "Enable VIA-workaround for " CARD_NAME " 
soundcard.");
+#ifdef CHIP_AU8810
+module_param_array(pcimodem, int, NULL, 0444);
+MODULE_PARM_DESC(pcimodem, "Enable PCI Modem " CARD_NAME " soundcard.");
+#endif

  MODULE_DESCRIPTION("Aureal vortex");
  MODULE_LICENSE("GPL");
@@ -256,6 +263,11 @@
  	}
  	snd_vortex_workaround(pci, pcifix[dev]);
  	// (4) Alloc components.
+	// snd_ac97_mixer
+	if ((err = snd_vortex_mixer(chip)) < 0) {
+		snd_card_free(card);
+		return err;
+	}
  	// ADB pcm.
  	if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_ADB, NR_ADB)) < 0) {
  		snd_card_free(card);
@@ -287,11 +299,25 @@
  		return err;
  	}
  #endif
-	// snd_ac97_mixer and Vortex mixer.
-	if ((err = snd_vortex_mixer(chip)) < 0) {
-		snd_card_free(card);
-		return err;
-	}
+#ifdef CHIP_AU8810
+	// MODEM
+	if ( pcimodem[dev] ) {
+		if ((err = pci_read_config_word(pci, PCI_DEVICE_ID,
+						  &(chip->device))) < 0) {
+			snd_card_free(card);
+			return err;
+		};
+		if ((err = snd_vortex_modem_mixer(chip,
+			(( chip->device == PCI_DEVICE_ID_AUREAL_ADVANTAGE) ? 1 : 0 ))) < 0) {
+			snd_card_free(card);
+			return err;
+		};
+		if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_MODEM, 1)) < 0) {
+			snd_card_free(card);
+			return err;
+		};
+	};
+#endif
  	if ((err = snd_vortex_midi(chip)) < 0) {
  		snd_card_free(card);
  		return err;
diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0_core.c 
modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0_core.c
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0_core.c 
2005-09-15 19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0_core.c	2005-09-16 
09:00:14.000000000 +0800
@@ -2510,7 +2505,7 @@
  	msleep(1);
  	/* Enable codec channels 0 and 1. */
  	hwwrite(vortex->mmio, VORTEX_CODEC_EN,
-		hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_CODEC);
+		hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_AUDIO0);
  }
diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0.h 
modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0.h
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0.h	2005-09-15 
19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0.h	2005-09-16 
08:52:10.000000000 +0800
@@ -93,8 +93,9 @@
  #define VORTEX_PCM_SPDIF	1
  #define VORTEX_PCM_A3D		2
  #define VORTEX_PCM_WT		3
-#define VORTEX_PCM_I2S		4
-#define VORTEX_PCM_LAST		5
+#define VORTEX_PCM_MODEM        4
+#define VORTEX_PCM_I2S		5
+#define VORTEX_PCM_LAST		6

  #define MIX_CAPT(x) (vortex->mixcapt[x])
  #define MIX_PLAYB(x) (vortex->mixplayb[x])
@@ -136,6 +137,9 @@

  	snd_rawmidi_t *rmidi;	/* Legacy Midi interface. */
  	ac97_t *codec;
+#ifdef CHIP_AU8810
+	ac97_t *mc97;	
+#endif

  	/* Stream structs. */
  	stream_t dma_adb[NR_ADB];
diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0_mixer.c 
modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0_mixer.c
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0_mixer.c 
2005-09-15 19:34:02.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0_mixer.c	2005-09-15 
20:04:09.000000000 +0800
@@ -28,6 +28,12 @@
  	ac97.private_data = vortex;
  	ac97.scaps = AC97_SCAP_NO_SPDIF;
  	err = snd_ac97_mixer(pbus, &ac97, &vortex->codec);
-	vortex->isquad = ((vortex->codec == NULL) ?  0 : 
(vortex->codec->ext_id&0x80));
+	vortex->isquad = ((vortex->codec == NULL) ?  0 : 
(vortex->codec->ext_id & AC97_EI_SDAC));
+#ifndef CHIP_AU8820
+	/* Enable rear channels of audio codec. */
+	if ( vortex->isquad )
+		hwwrite(vortex->mmio, VORTEX_CODEC_EN,
+			hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_AUDIO1);
+#endif
  	return err;
  }
diff -Naur modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0_modem.c 
modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0_modem.c
--- modem/alsa-driver/alsa-kernel/pci/au88x0_orig/au88x0_modem.c 
1970-01-01 08:00:00.000000000 +0800
+++ modem/alsa-driver/alsa-kernel/pci/au88x0/au88x0_modem.c	2005-09-16 
09:12:15.000000000 +0800
@@ -0,0 +1,96 @@
+/*
+ * Vortex Modem support.
+ *
+ */
+
+#include <sound/driver.h>
+#include <linux/time.h>
+#include <linux/init.h>
+#include <sound/core.h>
+#include "au88x0.h"
+#define MODEM_POLL_COUNT 1000
+
+
+static void
+vortex_modem_codec_write(ac97_t * codec, unsigned short addr, unsigned 
short data)
+{
+
+	vortex_t *card = (vortex_t *) codec->private_data;
+	unsigned int lifeboat = 0;
+
+	/* wait for transactions to clear */
+	while (!(hwread(card->mmio, VORTEX_CODEC_CTRL) & 0x100)) {
+		udelay(100);
+		if (lifeboat++ > MODEM_POLL_COUNT) {
+			printk(KERN_ERR "vortex: mc97 codec stuck busy\n");
+			return;
+		}
+	}
+	/* write register */
+	hwwrite(card->mmio, VORTEX_CODEC_IO,
+		((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK) |
+		((data << VORTEX_CODEC_DATSHIFT) & VORTEX_CODEC_DATMASK) |
+		VORTEX_CODEC_WRITE |
+		(codec->num << VORTEX_CODEC_ID_SHIFT) );
+
+	/* Flush Caches. */
+	hwread(card->mmio, VORTEX_CODEC_IO);
+}
+
+static unsigned short
+vortex_modem_codec_read(ac97_t * codec, unsigned short addr)
+{
+
+	vortex_t *card = (vortex_t *) codec->private_data;
+	u32 read_addr, data;
+	unsigned lifeboat = 0;
+
+	/* wait for transactions to clear */
+	while (!(hwread(card->mmio, VORTEX_CODEC_CTRL) & 0x100)) {
+		udelay(100);
+		if (lifeboat++ > MODEM_POLL_COUNT) {
+			printk(KERN_ERR "vortex: mc97 codec stuck busy\n");
+			return 0xffff;
+		}
+	}
+	/* set up read address */
+	read_addr = ((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK) |
+		(codec->num << VORTEX_CODEC_ID_SHIFT) ;
+
+	hwwrite(card->mmio, VORTEX_CODEC_IO, read_addr);
+
+	/* wait for address */
+	do {
+		udelay(100);
+		data = hwread(card->mmio, VORTEX_CODEC_IO);
+		if (lifeboat++ > MODEM_POLL_COUNT) {
+			printk(KERN_ERR "vortex: mc97 address never arrived\n");
+			return 0xffff;
+		}
+	} while ((data & VORTEX_CODEC_ADDMASK) !=
+		 (addr << VORTEX_CODEC_ADDSHIFT));
+
+	/* return data. */
+	return (u16) (data & VORTEX_CODEC_DATMASK);
+}
+
+static int __devinit snd_vortex_modem_mixer(vortex_t * vortex, int num)
+{
+	ac97_bus_t *pbus;
+	ac97_template_t mc97;
+	int err;
+	static ac97_bus_ops_t ops = {
+		.write = vortex_modem_codec_write,
+		.read = vortex_modem_codec_read,
+	};
+
+	if ((err = snd_ac97_bus(vortex->card, 0, &ops, NULL, &pbus)) < 0)
+		return err;
+	memset(&mc97, 0, sizeof(mc97));
+	// Intialize MC97 codec stuff.
+	mc97.private_data = vortex;
+	mc97.scaps = AC97_SCAP_SKIP_AUDIO;
+	mc97.num = num;
+	if (err = snd_ac97_mixer(pbus, &mc97, &vortex->mc97)) == 0 ) {
+ 	        hwwrite(vortex->mmio, VORTEX_CODEC_EN,
+		      hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_AC98);
+       };
+	return err;
+}




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. 
Download it for free - -and be entered to win a 42" plasma tv or your very
own Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php

  reply	other threads:[~2005-09-16  4:33 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-05 17:48 Mo' better modem support Takashi Iwai
2005-09-05 23:29 ` Sasha Khapyorsky
2005-09-06 13:29   ` Takashi Iwai
2005-09-07 16:03     ` Sasha Khapyorsky
2005-09-11 16:36       ` [alsa-lib patch] src/pcm/pcm_hooks.c : fix segfault then hooks list is empty Sasha Khapyorsky
2005-09-12 10:37         ` Takashi Iwai
2005-09-12  0:27       ` [conf patch] modem's pcm "two device" config [was: Re: Mo' better modem support] Sasha Khapyorsky
2005-09-12 10:38         ` Takashi Iwai
2005-09-12 17:49           ` Takashi Iwai
2005-09-12 22:10             ` Sasha Khapyorsky
2005-09-13  9:34               ` Takashi Iwai
2005-09-13 14:35                 ` Sasha Khapyorsky
2005-09-13 12:43                   ` Takashi Iwai
2005-09-13 15:36                     ` Sasha Khapyorsky
2005-09-13 17:27                       ` Sasha Khapyorsky
2005-09-13  0:45             ` [patch] no templated index for mc97 controls Sasha Khapyorsky
2005-09-13  1:06               ` [patch] no templated index for si3036 modem controls Sasha Khapyorsky
2005-09-13 10:24               ` [patch] no templated index for mc97 controls Takashi Iwai
2005-09-12 17:05       ` [conf patch] modem config for HDA-Intel Sasha Khapyorsky
2005-09-12 15:08         ` Takashi Iwai
2005-09-13  0:18       ` [patch] "empty" generic mfg-only codec Sasha Khapyorsky
2005-09-13 10:26         ` Takashi Iwai
2005-09-06  8:37 ` Mo' better modem support Raymond
2005-09-06 14:29   ` Sasha Khapyorsky
2005-09-06 13:19     ` Raymond
2005-09-06 20:43       ` Sasha Khapyorsky
2005-09-07  0:42     ` Raymond
2005-09-07  6:44       ` Philipp Matthias Hahn
2005-09-07 10:05         ` Raymond
2005-09-07 13:15           ` Philipp Matthias Hahn
2005-09-07 17:16             ` Sasha Khapyorsky
2005-09-08 16:10               ` Raymond
2005-09-07 16:10           ` Sasha Khapyorsky
2005-09-09 15:36             ` Raymond
2005-09-10 14:49               ` Sasha Khapyorsky
2005-09-07 16:33         ` Sasha Khapyorsky
2005-09-09 16:17         ` Raymond
2005-09-11 12:45           ` Philipp Matthias Hahn
2005-09-12 16:36             ` Raymond
2005-09-13  0:09               ` au88x0 modem [was: Re: Mo' better modem support] Sasha Khapyorsky
2005-09-13  8:55                 ` Philipp Matthias Hahn
2005-09-13 17:35                   ` Re: au88x0 modem Sasha Khapyorsky
2005-09-13 17:49                     ` Philipp Matthias Hahn
2005-09-13 21:44                       ` Sasha Khapyorsky
2005-09-14  7:02                         ` Philipp Matthias Hahn
2005-09-14  9:47                           ` [Openvortex-dev] " Maarten Vanraes
2005-09-14 12:47                             ` Raymond
2005-09-14 21:03                             ` Sasha Khapyorsky
2005-09-15  7:25                               ` Philipp Matthias Hahn
2005-09-14  8:06                       ` Raymond
2005-09-14 20:56                         ` Sasha Khapyorsky
2005-09-15  9:11                           ` Philipp Matthias Hahn
2005-09-15  9:21                             ` Philipp Matthias Hahn
2005-09-15 11:10                               ` Raymond
2005-09-15 14:35                               ` Sasha Khapyorsky
2005-09-15 15:34                                 ` Raymond
2005-09-15 21:25                                   ` Alien
2005-09-16  2:17                                     ` Raymond
2005-09-16  2:26                                       ` Lee Revell
2005-09-16 18:05                                   ` Sasha Khapyorsky
2005-09-15 20:43                                 ` Sasha Khapyorsky
2005-09-16  4:33                                   ` Raymond [this message]
2005-09-16  7:53                                     ` Philipp Matthias Hahn
2005-09-16  9:24                                       ` Raymond
2005-09-16  8:21                                   ` Raymond
2005-09-16 18:20                                     ` Sasha Khapyorsky
2005-09-16  8:46                                   ` Philipp Matthias Hahn
2005-09-16  8:55                                     ` Raymond
2005-09-16 10:36                                       ` Philipp Matthias Hahn
2005-09-16 12:04                                         ` Raymond
2005-09-16 14:42                                           ` Philipp Matthias Hahn
2005-09-16 14:49                                             ` Philipp Matthias Hahn
2005-09-16 18:47                                               ` Sasha Khapyorsky
2005-09-16 18:25                                     ` Sasha Khapyorsky
2005-09-19 15:00                                       ` Philipp Matthias Hahn
2005-09-19 15:32                                         ` Raymond
2005-09-20 13:21                                           ` Philipp Matthias Hahn
2005-09-21 22:12                                             ` Sasha Khapyorsky
2005-09-21 22:03                                         ` Sasha Khapyorsky
2005-09-22  6:24                                           ` Philipp Matthias Hahn
2005-09-22 20:19                                             ` Sasha Khapyorsky
2005-09-16 14:09                                   ` Raymond
2005-09-16 21:34                                     ` Manuel Jander
2005-09-17  3:52                                       ` Raymond
2005-09-13  9:12                 ` au88x0 modem [was: Re: Mo' better modem support] Raymond
2005-09-13 18:40                   ` au88x0 modem Sasha Khapyorsky
2005-09-14 18:07                   ` au88x0 modem [was: Re: Mo' better modem support] Philipp Matthias Hahn
2005-09-13  9:22               ` Mo' better modem support Philipp Matthias Hahn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=432A4B24.1040209@netvigator.com \
    --to=rayau@netvigator.com \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=manuel.jander@gmail.com \
    --cc=openvortex-dev@nongnu.org \
    --cc=pmhahn@titan.lahn.de \
    --cc=sashak@smlink.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.