* [PATCH] YMF754 direct recording
@ 2003-10-17 7:25 Clemens Ladisch
2003-10-17 10:29 ` Takashi Iwai
0 siblings, 1 reply; 2+ messages in thread
From: Clemens Ladisch @ 2003-10-17 7:25 UTC (permalink / raw)
To: alsa-devel
This patch adds a control to enable S/PDIF direct recording (without
resampling) on the YMF754.
Index: alsa-kernel/pci/ymfpci/ymfpci_main.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/ymfpci/ymfpci_main.c,v
retrieving revision 1.43
diff -u -r1.43 ymfpci_main.c
--- alsa-kernel/pci/ymfpci/ymfpci_main.c 14 Oct 2003 13:59:21 -0000 1.43
+++ alsa-kernel/pci/ymfpci/ymfpci_main.c 17 Oct 2003 06:49:00 -0000
@@ -1136,7 +1136,7 @@
if (rpcm)
*rpcm = NULL;
- if ((err = snd_pcm_new(chip->card, "YMFPCI - AC'97", device, 0, 1, &pcm)) < 0)
+ if ((err = snd_pcm_new(chip->card, "YMFPCI - PCM2", device, 0, 1, &pcm)) < 0)
return err;
pcm->private_data = chip;
pcm->private_free = snd_ymfpci_pcm2_free;
@@ -1145,7 +1145,8 @@
/* global setup */
pcm->info_flags = 0;
- strcpy(pcm->name, "YMFPCI - AC'97");
+ sprintf(pcm->name, "YMFPCI - %s",
+ chip->device_id == PCI_DEVICE_ID_YAMAHA_754 ? "Direct Recording" : "AC'97");
chip->pcm2 = pcm;
snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 256*1024);
@@ -1369,6 +1370,61 @@
.put = snd_ymfpci_spdif_stream_put
};
+static int snd_ymfpci_drec_source_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *info)
+{
+ static char *texts[3] = {"AC'97", "IEC958", "ZV Port"};
+
+ info->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+ info->count = 1;
+ info->value.enumerated.items = 3;
+ if (info->value.enumerated.item > 2)
+ info->value.enumerated.item = 2;
+ strcpy(info->value.enumerated.name, texts[info->value.enumerated.item]);
+ return 0;
+}
+
+static int snd_ymfpci_drec_source_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
+{
+ ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
+ unsigned long flags;
+ u16 reg;
+
+ spin_lock_irqsave(&chip->reg_lock, flags);
+ reg = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL);
+ spin_unlock_irqrestore(&chip->reg_lock, flags);
+ if (!(reg & 0x100))
+ value->value.enumerated.item[0] = 0;
+ else
+ value->value.enumerated.item[0] = 1 + ((reg & 0x200) != 0);
+ return 0;
+}
+
+static int snd_ymfpci_drec_source_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
+{
+ ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
+ unsigned long flags;
+ u16 reg, old_reg;
+
+ spin_lock_irqsave(&chip->reg_lock, flags);
+ old_reg = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL);
+ if (value->value.enumerated.item[0] == 0)
+ reg = old_reg & ~0x100;
+ else
+ reg = (old_reg & ~0x300) | 0x100 | ((value->value.enumerated.item[0] == 2) << 9);
+ snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, reg);
+ spin_unlock_irqrestore(&chip->reg_lock, flags);
+ return reg != old_reg;
+}
+
+static snd_kcontrol_new_t snd_ymfpci_drec_source __devinitdata = {
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .name = "Direct Recording Source",
+ .info = snd_ymfpci_drec_source_info,
+ .get = snd_ymfpci_drec_source_get,
+ .put = snd_ymfpci_drec_source_put
+};
+
/*
* Mixer controls
*/
@@ -1690,6 +1746,11 @@
return err;
kctl->id.device = chip->pcm_spdif->device;
chip->spdif_pcm_ctl = kctl;
+
+ /* direct recording source */
+ if (chip->device_id == PCI_DEVICE_ID_YAMAHA_754 &&
+ (err = snd_ctl_add(chip->card, kctl = snd_ctl_new1(&snd_ymfpci_drec_source, chip))) < 0)
+ return err;
/*
* shared rear/line-in
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] YMF754 direct recording
2003-10-17 7:25 [PATCH] YMF754 direct recording Clemens Ladisch
@ 2003-10-17 10:29 ` Takashi Iwai
0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2003-10-17 10:29 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: alsa-devel
At Fri, 17 Oct 2003 09:25:12 +0200 (METDST),
Clemens Ladisch wrote:
>
>
> This patch adds a control to enable S/PDIF direct recording (without
> resampling) on the YMF754.
applied now. thanks!
Takashi
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2003-10-17 10:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-10-17 7:25 [PATCH] YMF754 direct recording Clemens Ladisch
2003-10-17 10:29 ` Takashi Iwai
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.