Re: snd-cs4236 (possibly all isa-pnp cards or all alsa isa-pnp cards)broken in 2.6.16-rc4

From: Rene Herman
Date: Tue Feb 21 2006 - 10:35:12 EST


Adam Belay wrote:

[ pnp_card_driver.remove() not called ]

Hopefully this email account will work better. In any case, thanks
for bringing this bug to my attention. I may have stumbled across it
a couple days ago, and would appreciate if you would try this patch: (there may be some fuzz)

Reject even. I've attached this patch regenerated against 2.6.16-rc4.

- if (drv->link.driver.probe) {
- if (drv->link.driver.probe(&dev->dev)) {

+ if (pnp_bus_type.probe(&dev->dev)) {

Yes, this works, thanks. If it's also the correct fix, I guess this should go into 2.6.16?

I by the way also tested with a driver that uses pnp_driver instead of pnp_card_driver, and that also works.

It's possible that the attach mechanism isn't working correctly
because of recent driver model changes. If this is the case, it
would also explain the detach-not-called issues.

The bustype stuff...

Rene.

Index: local/drivers/pnp/card.c
===================================================================
--- local.orig/drivers/pnp/card.c 2006-02-11 00:34:01.000000000 +0100
+++ local/drivers/pnp/card.c 2006-02-21 14:06:21.000000000 +0100
@@ -303,13 +303,11 @@ found:
down_write(&dev->dev.bus->subsys.rwsem);
dev->card_link = clink;
dev->dev.driver = &drv->link.driver;
- if (drv->link.driver.probe) {
- if (drv->link.driver.probe(&dev->dev)) {
- dev->dev.driver = NULL;
- dev->card_link = NULL;
- up_write(&dev->dev.bus->subsys.rwsem);
- return NULL;
- }
+ if (pnp_bus_type.probe(&dev->dev)) {
+ dev->dev.driver = NULL;
+ dev->card_link = NULL;
+ up_write(&dev->dev.bus->subsys.rwsem);
+ return NULL;
}
device_bind_driver(&dev->dev);
up_write(&dev->dev.bus->subsys.rwsem);