summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornetchild <netchild@FreeBSD.org>2006-09-30 17:08:51 +0000
committernetchild <netchild@FreeBSD.org>2006-09-30 17:08:51 +0000
commit521c0353e962321d073a39f7d2a4bcf64d680ecc (patch)
treea1fcf6ecfc8df1512c0e07635622378245ed8d86
parent5d54f83168d861622b4f64f7ae064023d94a05e3 (diff)
downloadFreeBSD-src-521c0353e962321d073a39f7d2a4bcf64d680ecc.zip
FreeBSD-src-521c0353e962321d073a39f7d2a4bcf64d680ecc.tar.gz
- fix memory leak, when "number of adcs" != "number of dacs"
- fix multiple initialization of the first codec (support for more than one codec should be added in the future) - use spicds instead of ak452x module Submitted by: "Konstantin Dimitrov" <kosio.dimitrov@gmail.com>
-rw-r--r--sys/dev/sound/pci/envy24.c41
1 files changed, 17 insertions, 24 deletions
diff --git a/sys/dev/sound/pci/envy24.c b/sys/dev/sound/pci/envy24.c
index 227c178..6b90bec 100644
--- a/sys/dev/sound/pci/envy24.c
+++ b/sys/dev/sound/pci/envy24.c
@@ -28,7 +28,7 @@
#include <dev/sound/pcm/sound.h>
#include <dev/sound/pcm/ac97.h>
-#include <dev/sound/pci/ak452x.h>
+#include <dev/sound/pci/spicds.h>
#include <dev/sound/pci/envy24.h>
#include <dev/pci/pcireg.h>
@@ -742,7 +742,7 @@ envy24_gpiosetdir(struct sc_info *sc, u_int32_t dir)
/* M-Audio Delta series AK4524 access interface routine */
struct envy24_delta_ak4524_codec {
- struct ak452x_info *info;
+ struct spicds_info *info;
struct sc_info *parent;
int dir;
int num;
@@ -786,7 +786,7 @@ envy24_delta_ak4524_create(device_t dev, void *info, int dir, int num)
else if (dir == PCMDIR_PLAY && sc->dac[num] != NULL)
buff->info = ((struct envy24_delta_ak4524_codec *)sc->dac[num])->info;
else
- buff->info = ak452x_create(dev, buff, num, envy24_delta_ak4524_ctl);
+ buff->info = spicds_create(dev, buff, num, envy24_delta_ak4524_ctl);
if (buff->info == NULL) {
free(buff, M_ENVY24);
return NULL;
@@ -810,12 +810,12 @@ envy24_delta_ak4524_destroy(void *codec)
#endif
if (ptr->dir == PCMDIR_PLAY) {
- if (ptr->parent->adc[ptr->num] != NULL)
- ak452x_destroy(ptr->info);
+ if (ptr->parent->dac[ptr->num] != NULL)
+ spicds_destroy(ptr->info);
}
else {
- if (ptr->parent->dac[ptr->num] != NULL)
- ak452x_destroy(ptr->info);
+ if (ptr->parent->adc[ptr->num] != NULL)
+ spicds_destroy(ptr->info);
}
free(codec, M_ENVY24);
@@ -853,22 +853,15 @@ envy24_delta_ak4524_init(void *codec)
ptr->cclk = ENVY24_GPIO_AK4524_CCLK;
#endif
ptr->cclk = ptr->parent->cfg->cclk;
-#if 0
- ptr->cdti = ENVY24_GPIO_AK4524_CDTI;
-#endif
ptr->cdti = ptr->parent->cfg->cdti;
-#if 0
- ak452x_settype(ptr->info, AK452X_TYPE_4524);
-#endif
- ak452x_settype(ptr->info, ptr->parent->cfg->type);
-#if 0
- ak452x_setcif(ptr->info, ENVY24_DELTA_AK4524_CIF);
-#endif
- ak452x_setcif(ptr->info, ptr->parent->cfg->cif);
- ak452x_setformat(ptr->info,
+ spicds_settype(ptr->info, ptr->parent->cfg->type);
+ spicds_setcif(ptr->info, ptr->parent->cfg->cif);
+ spicds_setformat(ptr->info,
AK452X_FORMAT_I2S | AK452X_FORMAT_256FSN | AK452X_FORMAT_1X);
- ak452x_setdvc(ptr->info, 0);
- ak452x_init(ptr->info);
+ spicds_setdvc(ptr->info, 0);
+ /* for the time being, init only first codec */
+ if (ptr->num == 0)
+ spicds_init(ptr->info);
}
static void
@@ -881,7 +874,7 @@ envy24_delta_ak4524_reinit(void *codec)
device_printf(ptr->parent->dev, "envy24_delta_ak4524_reinit()\n");
#endif
- ak452x_reinit(ptr->info);
+ spicds_reinit(ptr->info);
}
static void
@@ -894,7 +887,7 @@ envy24_delta_ak4524_setvolume(void *codec, int dir, unsigned int left, unsigned
device_printf(ptr->parent->dev, "envy24_delta_ak4524_set()\n");
#endif
- ak452x_set(ptr->info, dir, left, right);
+ spicds_set(ptr->info, dir, left, right);
}
/*
@@ -2512,5 +2505,5 @@ static driver_t envy24_driver = {
DRIVER_MODULE(snd_envy24, pci, envy24_driver, pcm_devclass, 0, 0);
MODULE_DEPEND(snd_envy24, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
-MODULE_DEPEND(snd_envy24, snd_ak452x, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
+MODULE_DEPEND(snd_envy24, snd_spicds, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
MODULE_VERSION(snd_envy24, 1);
OpenPOWER on IntegriCloud