Update of /cvsroot/alsa/alsa-driver/support/pnp
In directory sc8-pr-cvs1:/tmp/cvs-serv21447
Modified Files:
pnp.c pnp.h
Log Message:
- added pnp_disable_dev().
- disable the devices when PNP_DRIVER_RES_DISABLE is set in
pnp_register_card_driver().
Index: pnp.c
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/support/pnp/pnp.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- pnp.c 8 Jul 2003 13:37:40 -0000 1.11
+++ pnp.c 5 Sep 2003 17:44:12 -0000 1.12
@@ -145,9 +145,6 @@
if (parse_id(id, &vendor, &function) < 0)
return NULL;
dev = (struct pnp_dev *)isapnp_find_dev((struct isapnp_card *)clink->card,
vendor, function, (struct isapnp_dev *)from);
- if (dev != NULL && dev->p.active &&
- (clink->driver->flags & PNP_DRIVER_RES_DO_NOT_CHANGE) == 0)
- return NULL;
return dev;
}
@@ -193,6 +190,15 @@
dev = ninst->devs[i] = (struct pnp_dev
*)isapnp_find_dev((struct isapnp_card *)card, vendor, device, NULL);
if (dev == NULL)
goto __next;
+ if (! dev->p.active) {
+ if (! (drv->flags &
PNP_DRIVER_RES_DO_NOT_CHANGE)) {
+ pnp_activate_dev(dev);
+ }
+ } else {
+ if ((drv->flags &
PNP_DRIVER_RES_DISABLE) == PNP_DRIVER_RES_DISABLE) {
+ pnp_disable_dev(dev);
+ }
+ }
}
ninst->link.card = card;
ninst->link.driver = drv;
@@ -216,16 +222,12 @@
{
struct pnp_card_driver_instance *inst;
struct list_head *p, *n;
- unsigned int i;
list_for_each_safe(p, n, &pnp_card_drivers) {
inst = list_entry(p, struct pnp_card_driver_instance, list);
if (inst->link.driver == drv) {
list_del(p);
drv->remove(&inst->link);
- if ((drv->flags & PNP_DRIVER_RES_DO_NOT_CHANGE) == 0)
- for (i = 0; i < PNP_MAX_DEVICES && inst->devs[i]; i++)
- pnp_release_card_device(inst->devs[i]);
kfree(inst);
}
}
@@ -346,7 +348,7 @@
unsigned int idx;
if (dev->p.active)
- return -EBUSY;
+ return 0; /* FIXME: should be -EBUSY but 2.6 pnp layer behaves like
this */
/* reserve the manual configuration */
tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
@@ -369,6 +371,14 @@
return dev->p.activate((struct isapnp_dev *)dev);
}
+int pnp_disable_dev(struct pnp_dev *dev)
+{
+ if (! dev->p.active)
+ return 0;
+ return dev->p.deactivate((struct isapnp_dev *)dev);
+ /* FIXME: do we need clean up the resources again? */
+}
+
static int __init pnp_init(void)
{
return 0;
@@ -390,3 +400,4 @@
EXPORT_SYMBOL(pnp_init_resource_table);
EXPORT_SYMBOL(pnp_manual_config_dev);
EXPORT_SYMBOL(pnp_activate_dev);
+EXPORT_SYMBOL(pnp_disable_dev);
Index: pnp.h
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/support/pnp/pnp.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- pnp.h 16 May 2003 09:08:24 -0000 1.3
+++ pnp.h 5 Sep 2003 17:44:12 -0000 1.4
@@ -198,6 +198,7 @@
int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int
mode);
int pnp_activate_dev(struct pnp_dev *dev);
static inline int pnp_is_active(struct pnp_dev *dev) { return dev->p.active; }
+int pnp_disable_dev(struct pnp_dev *dev);
#else
@@ -211,6 +212,7 @@
static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct
pnp_resource_table *res, int mode) { return -ENODEV; }
static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }
static inline int pnp_is_active(struct pnp_dev * dev) { return -ENODEV; }
+static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; }
#endif
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog