Re: Ensoniq SoundScape VIVO90

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/14/2007 10:12 AM, Krzysztof Helt wrote:

I acquired Ensoniq VIVO90 card. I tried sscape driver but it does not work. I quickly looked at the oss driver in the kernel and it works completely different (uses different pnp resources for codec and mpu).

Also looked at that in response to a list question a while ago and posted a very basic driver for the codec part only:

http://mailman.alsa-project.org/pipermail/alsa-devel/2007-April/000716.html

Also attached again. Haven't looked at it anymore since then.

I want to ask if somebody tested this driver and if so what was the Ensoniq card model. If it worked only for non-pnp models I would integrate at least for VIVO cards.

It supposedly worked for the original author (Chris Rankin, CCed) with that ENS3081 card that's listed. I suppose you also have the 4081 as both I and Cody did?

(I do also have an old non-pnp soundscape lying about, but I haven't gotten around to testing that yet).

Rene.

commit f52cdda56fd648315fcc276d701760e9183939b3
Author: Rene Herman <rene.herman@xxxxxxxxx>
Date:   Tue May 8 20:25:17 2007 +0200

    [ALSA] snd-vivo

diff --git a/sound/isa/Kconfig b/sound/isa/Kconfig
index cf3803c..9567090 100644
--- a/sound/isa/Kconfig
+++ b/sound/isa/Kconfig
@@ -397,6 +397,18 @@ config SND_SSCAPE
 	  To compile this driver as a module, choose M here: the module
 	  will be called snd-sscape.
 
+config SND_VIVO
+	tristate "Ensoniq Soundscape VIVO(90) Driver"
+	depends on SND
+	select SND_MPU401_UART
+	select SND_CS4231_LIB
+	help
+	  Say Y here to include support for Ensoniq Soundscape VIVO(90)
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-vivo.
+
 config SND_WAVEFRONT
 	tristate "Turtle Beach Maui,Tropez,Tropez+ (Wavefront)"
 	depends on SND
diff --git a/sound/isa/Makefile b/sound/isa/Makefile
index bb317cc..8f246af 100644
--- a/sound/isa/Makefile
+++ b/sound/isa/Makefile
@@ -12,6 +12,7 @@ snd-es18xx-objs := es18xx.o
 snd-opl3sa2-objs := opl3sa2.o
 snd-sgalaxy-objs := sgalaxy.o
 snd-sscape-objs := sscape.o
+snd-vivo-objs := vivo.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_ADLIB) += snd-adlib.o
@@ -23,6 +24,7 @@ obj-$(CONFIG_SND_ES18XX) += snd-es18xx.o
 obj-$(CONFIG_SND_OPL3SA2) += snd-opl3sa2.o
 obj-$(CONFIG_SND_SGALAXY) += snd-sgalaxy.o
 obj-$(CONFIG_SND_SSCAPE) += snd-sscape.o
+obj-$(CONFIG_SND_VIVO) += snd-vivo.o
 
 obj-$(CONFIG_SND) += ad1816a/ ad1848/ cs423x/ es1688/ gus/ opti9xx/ \
 		     sb/ wavefront/
diff --git a/sound/isa/vivo.c b/sound/isa/vivo.c
new file mode 100644
index 0000000..fd2c774
--- /dev/null
+++ b/sound/isa/vivo.c
@@ -0,0 +1,148 @@
+/*
+ * Ensoniq Soundscape VIVO(90) Driver
+ */
+
+#include <sound/driver.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pnp.h>
+#include <linux/delay.h>
+#include <sound/core.h>
+#include <sound/initval.h>
+#include <sound/mpu401.h>
+#include <sound/cs4231.h>
+
+#define CRD_NAME "Ensoniq Soundscape VIVO(90)"
+#define DRV_NAME "VIVO"
+#define DEV_NAME "vivo"
+
+MODULE_DESCRIPTION(CRD_NAME);
+MODULE_AUTHOR("Rene Herman");
+MODULE_LICENSE("GPL");
+
+static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
+static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
+static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE;
+
+module_param_array(index, int, NULL, 0444);
+MODULE_PARM_DESC(index, "Index value for " CRD_NAME " soundcard");
+module_param_array(id, charp, NULL, 0444);
+MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard");
+module_param_array(enable, bool, NULL, 0444);
+MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard");
+
+static struct pnp_card_device_id snd_vivo_pnpids[] = {
+	{ .id = "ENS4081", .devs = { { "ENS1011" } } },
+	{ .id = "" }
+};
+
+MODULE_DEVICE_TABLE(pnp_card, snd_vivo_pnpids);
+
+static int snd_vivo_error __devinitdata = -ENODEV;
+
+static int __devinit snd_vivo_probe(struct pnp_card_link *pcard,
+				    const struct pnp_card_device_id *pid)
+{
+	static int card_num;
+
+	struct pnp_dev	  *pdev;
+	struct snd_card	  *card;
+	struct snd_cs4231 *chip;
+
+	int num, error;
+
+	if (card_num == SNDRV_CARDS)
+		return -ENODEV;
+
+	num = card_num++;
+	if (!enable[num])
+		return -ENODEV;
+
+	pdev = pnp_request_card_device(pcard, pid->devs[0].id, NULL);
+	if (!pdev || pnp_activate_dev(pdev) < 0)
+		return -ENODEV;
+
+	card = snd_card_new(index[num], id[num], THIS_MODULE, 0);
+	if (!card)
+		return -EINVAL;
+
+	snd_card_set_dev(card, &pdev->dev);
+
+	strcpy(card->driver, DRV_NAME);
+	strcpy(card->shortname, DRV_NAME);
+	strcpy(card->longname, CRD_NAME);
+
+	error = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
+				    pnp_port_start(pdev, 0), 0,
+				    pnp_irq(pdev, 1), 0, NULL);
+	if (error < 0)
+		goto out;
+
+	msleep(500);
+
+	error = snd_cs4231_create(card, pnp_port_start(pdev, 1) + 4, -1,
+				  pnp_irq(pdev, 0), pnp_dma(pdev, 0),
+				  pnp_dma(pdev, 1), CS4231_HW_DETECT,
+				  0, &chip);
+	if (error < 0)
+		goto out;
+
+	error = snd_cs4231_pcm(chip, 0, NULL);
+	if (error < 0)
+		goto out;
+
+	error = snd_cs4231_mixer(chip);
+	if (error < 0)
+		goto out;
+
+	error = snd_cs4231_timer(chip, 0, NULL);
+	if (error < 0)
+		goto out;
+
+	error = snd_card_register(card);
+	if (error < 0)
+		goto out;
+
+	pnp_set_card_drvdata(pcard, card);
+	return (snd_vivo_error = 0);
+
+out:	snd_card_free(card);
+	return error;
+}
+
+static void __devexit snd_vivo_remove(struct pnp_card_link *pcard)
+{
+	snd_card_free(pnp_get_card_drvdata(pcard));
+	pnp_set_card_drvdata(pcard, NULL);
+}
+
+static struct pnp_card_driver snd_vivo_driver = {
+	.flags		= PNP_DRIVER_RES_DISABLE,
+	.name		= DEV_NAME,
+	.id_table	= snd_vivo_pnpids,
+	.probe		= snd_vivo_probe,
+	.remove		= __devexit_p(snd_vivo_remove)
+};
+
+static int __init alsa_card_vivo_init(void)
+{
+	int error;
+
+	error = pnp_register_card_driver(&snd_vivo_driver);
+	if (error < 0)
+		goto out;
+
+	error = snd_vivo_error;
+	if (error < 0)
+		pnp_unregister_card_driver(&snd_vivo_driver);
+
+out:	return error;
+}
+
+static void __exit alsa_card_vivo_exit(void)
+{
+	pnp_unregister_card_driver(&snd_vivo_driver);
+}
+
+module_init(alsa_card_vivo_init);
+module_exit(alsa_card_vivo_exit);
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux