From: Rodolfo Giometti <giometti@linux.it>
To: linux-kernel@vger.kernel.org
Cc: Takashi Iwai <tiwai@suse.de>, Jaroslav Kysela <perex@suse.cz>,
James Stafford <jstafford@ampltd.com>,
Doug McLain <nostar@comcast.net>,
Rodolfo Giometti <giometti@linux.it>
Subject: [PATCH] [ALSA] ice1724 - support for more that one codec.
Date: Wed, 30 Apr 2008 11:27:18 +0200 [thread overview]
Message-ID: <1209547638-22570-1-git-send-email-giometti@linux.it> (raw)
In-Reply-To: <s5h8xamsuxd.wl%tiwai@suse.de>
Now it's possible to specify how many codes are present on the board by
using a new filed as follow:
ice->ac97_codecs = 4;
For backward compatibility if "ice->ac97_codecs" is set to zero, the patch
redefines it as "1".
Signed-off-by: Rodolfo Giometti <giometti@linux.it>
---
sound/pci/ice1712/ice1712.c | 37 +++++++++++++++++++++++++------------
sound/pci/ice1712/ice1712.h | 1 +
2 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
index 6630a0a..f78c724 100644
--- a/sound/pci/ice1712/ice1712.c
+++ b/sound/pci/ice1712/ice1712.c
@@ -221,7 +221,7 @@ static void snd_ice1712_pro_ac97_write(struct snd_ac97 *ac97,
outb(reg, ICEMT(ice, AC97_INDEX));
outw(val, ICEMT(ice, AC97_DATA));
old_cmd &= ~(ICE1712_AC97_PBK_VSR | ICE1712_AC97_CAP_VSR);
- outb(old_cmd | ICE1712_AC97_WRITE, ICEMT(ice, AC97_CMD));
+ outb(old_cmd | ac97->num | ICE1712_AC97_WRITE, ICEMT(ice, AC97_CMD));
for (tm = 0; tm < 0x10000; tm++)
if ((inb(ICEMT(ice, AC97_CMD)) & ICE1712_AC97_WRITE) == 0)
break;
@@ -244,7 +244,7 @@ static unsigned short snd_ice1712_pro_ac97_read(struct snd_ac97 *ac97,
break;
}
outb(reg, ICEMT(ice, AC97_INDEX));
- outb(old_cmd | ICE1712_AC97_READ, ICEMT(ice, AC97_CMD));
+ outb(old_cmd | ac97->num | ICE1712_AC97_READ, ICEMT(ice, AC97_CMD));
for (tm = 0; tm < 0x10000; tm++)
if ((inb(ICEMT(ice, AC97_CMD)) & ICE1712_AC97_READ) == 0)
break;
@@ -1504,7 +1504,7 @@ static void snd_ice1712_mixer_free_ac97(struct snd_ac97 *ac97)
static int __devinit snd_ice1712_ac97_mixer(struct snd_ice1712 * ice)
{
- int err, bus_num = 0;
+ int err, codec, bus_num = 0;
struct snd_ac97_template ac97;
struct snd_ac97_bus *pbus;
static struct snd_ac97_bus_ops con_ops = {
@@ -1532,15 +1532,28 @@ static int __devinit snd_ice1712_ac97_mixer(struct snd_ice1712 * ice)
}
if (! (ice->eeprom.data[ICE_EEP1_ACLINK] & ICE1712_CFG_PRO_I2S)) {
- if ((err = snd_ac97_bus(ice->card, bus_num, &pro_ops, NULL, &pbus)) < 0)
- return err;
- memset(&ac97, 0, sizeof(ac97));
- ac97.private_data = ice;
- ac97.private_free = snd_ice1712_mixer_free_ac97;
- if ((err = snd_ac97_mixer(pbus, &ac97, &ice->ac97)) < 0)
- printk(KERN_WARNING "ice1712: cannot initialize pro ac97, skipped\n");
- else
- return 0;
+ /* Backward compatibility */
+ if (!ice->ac97_codecs)
+ ice->ac97_codecs = 1;
+
+ for (codec = 0; codec < ice->ac97_codecs; codec++) {
+ /* Sanity check */
+ if (codec >= 4) {
+ printk(KERN_WARNING "ice1712: too much pro ac97 codes (max = %d), skipped\n", codec);
+ break;
+ }
+
+ if ((err = snd_ac97_bus(ice->card, bus_num++, &pro_ops, NULL, &pbus)) < 0)
+ return err;
+ memset(&ac97, 0, sizeof(ac97));
+ ac97.num = codec;
+ ac97.private_data = ice;
+ ac97.private_free = snd_ice1712_mixer_free_ac97;
+ if ((err = snd_ac97_mixer(pbus, &ac97, &ice->ac97)) < 0)
+ printk(KERN_WARNING "ice1712: cannot initialize pro ac97 #%d, skipped\n", codec);
+ }
+
+ return 0;
}
/* I2S mixer only */
strcat(ice->card->mixername, "ICE1712 - multitrack");
diff --git a/sound/pci/ice1712/ice1712.h b/sound/pci/ice1712/ice1712.h
index 6ac486d..59047ad 100644
--- a/sound/pci/ice1712/ice1712.h
+++ b/sound/pci/ice1712/ice1712.h
@@ -335,6 +335,7 @@ struct snd_ice1712 {
unsigned int force_rdma1: 1; /* VT1720/4 - RDMA1 as non-spdif */
unsigned int num_total_dacs; /* total DACs */
unsigned int num_total_adcs; /* total ADCs */
+ unsigned int ac97_codecs; /* total pro AC97 codecs */
unsigned int cur_rate; /* current rate */
struct mutex open_mutex;
--
1.5.3.6
next parent reply other threads:[~2008-04-30 9:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <s5h8xamsuxd.wl%tiwai@suse.de>
2008-04-30 9:27 ` Rodolfo Giometti [this message]
2008-04-30 12:33 ` [PATCH] [ALSA] ice1724 - support for more that one codec Takashi Iwai
2008-05-02 19:52 ` Rodolfo Giometti
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=1209547638-22570-1-git-send-email-giometti@linux.it \
--to=giometti@linux.it \
--cc=jstafford@ampltd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nostar@comcast.net \
--cc=perex@suse.cz \
--cc=tiwai@suse.de \
/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.