linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adam Belay <ambx1@neo.rr.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: linux-kernel@vger.kernel.org, trelane@digitasaru.net
Subject: Re: vanilla 2.6.0-test11 and CS4236 card
Date: Tue, 2 Dec 2003 23:44:32 +0000	[thread overview]
Message-ID: <20031202234432.GA14730@neo.rr.com> (raw)
In-Reply-To: <s5hsmk3ceia.wl@alsa2.suse.de>

On Tue, Dec 02, 2003 at 06:31:57PM +0100, Takashi Iwai wrote:
> At Tue, 2 Dec 2003 11:06:39 -0600,
> Joseph Pingenot wrote:
> > 
> > Howdy.
> > 
> > I'm having problems getting the CS4236+ driver to recognize my 
> >   CS4236B card.  pnp finds it on boot:
> > isapnp: Scanning for PnP cards...
> > isapnp: Card 'CS4236B'
> > isapnp: 1 Plug & Play card detected total
> > 
> > but the ALSA driver doesn't pick it up.
> > isapnp detection failed and probing for CS4236+ is not supported
> > CS4236+ soundcard not found or device busy
> > 
> > Furthermore, after fudging with manually setting it up via modprobe
> >   options, it's still not loading:
> > CS4236+ soundcard not found or device busy
> > 
> > This used to work in the 2.4 series kernel without any modprobe.conf
> >   settings; the OSS driver would pick it up.
> > 
> > Any assistance would be greatly appreciated; this is the only thing holding
> >   me back from 2.6 goodness.  ;)
> 
> does the attached patch work?  (it's untested at all...)


> --- linux-2.6.0-test11/drivers/pnp/card.c-dist	2003-12-02 18:14:21.000000000 +0100
> +++ linux-2.6.0-test11/drivers/pnp/card.c	2003-12-02 18:29:20.000000000 +0100
> @@ -26,8 +26,25 @@
>  {
>  	const struct pnp_card_device_id * drv_id = drv->id_table;
>  	while (*drv_id->id){
> -		if (compare_pnp_id(card->id,drv_id->id))
> -			return drv_id;
> +		if (compare_pnp_id(card->id,drv_id->id)) {
> +			int i = 0;
> +			for (;;) {
> +				int found;
> +				struct pnp_dev *dev;
> +				if (i == PNP_MAX_DEVICES || ! *drv_id->devs[i].id)
> +					return drv_id;
> +				found = 0;
> +				card_for_each_dev(card, dev) {
> +					if (compare_pnp_id(dev->id, drv_id->devs[i].id)) {
> +						found = 1;
> +						break;
> +					}
> +				}
> +				if (! found)
> +					break;
> +				i++;
> +			}
> +		}
>  		drv_id++;
>  	}
>  	return NULL;
>


Here's a slight cleanup of the above patch -- tested with the cs4232 driver.
Any additional testing would be appreciated.

--- a/drivers/pnp/card.c	2003-11-26 20:45:38.000000000 +0000
+++ b/drivers/pnp/card.c	2003-12-02 23:06:55.000000000 +0000
@@ -26,8 +26,18 @@
 {
 	const struct pnp_card_device_id * drv_id = drv->id_table;
 	while (*drv_id->id){
-		if (compare_pnp_id(card->id,drv_id->id))
-			return drv_id;
+		if (compare_pnp_id(card->id,drv_id->id)) {
+			int i = 0;
+			for (;;i++) {
+				struct pnp_dev *dev;
+				if (i == PNP_MAX_DEVICES || ! *drv_id->devs[i].id)
+					return drv_id;
+				card_for_each_dev(card, dev) {
+					if (!compare_pnp_id(dev->id, drv_id->devs[i].id))
+						break;
+				}
+			}
+		}
 		drv_id++;
 	}
 	return NULL;

In this case we could also just continue if the MPU device isn't present.  It
would probably be a good convention to do so because if, for whatever reason
(3rd party driver, resource conflicts, etc), the MPU device is busy in any
matched card id set, the entire probe would fail.

How about something like this? (untested)

--- a/sound/isa/cs423x/cs4236.c	2003-11-26 20:43:05.000000000 +0000
+++ b/sound/isa/cs423x/cs4236.c	2003-12-02 23:36:59.000000000 +0000
@@ -294,13 +294,8 @@
 		kfree(cfg);
 		return -EBUSY;
 	}
-	if (id->devs[2].id[0]) {
+	if (id->devs[2].id[0])
 		acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL);
-		if (acard->mpu == NULL) {
-			kfree(cfg);
-			return -EBUSY;
-		}
-	}

 	/* WSS initialization */
 	pdev = acard->wss;



Thanks,
Adam

  parent reply	other threads:[~2003-12-03  4:51 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-02 17:06 vanilla 2.6.0-test11 and CS4236 card Joseph Pingenot
2003-12-02 17:31 ` Takashi Iwai
2003-12-02 17:52   ` Joseph Pingenot
2003-12-02 21:04   ` Joseph Pingenot
2003-12-02 23:44   ` Adam Belay [this message]
2003-12-03 11:22     ` Takashi Iwai
2003-12-03 15:00       ` wes schreiner
2003-12-03 15:16         ` Joseph Pingenot
2003-12-03  3:17   ` Joseph Pingenot
2003-12-03 11:29     ` Takashi Iwai
2003-12-03 14:09       ` Joseph Pingenot
2003-12-04 20:31   ` Joseph Pingenot

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=20031202234432.GA14730@neo.rr.com \
    --to=ambx1@neo.rr.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tiwai@suse.de \
    --cc=trelane@digitasaru.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).