dev->card_link = NULL; up_write(&dev->dev.bus->subsys.rwsem); 
struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from){	struct list_head * pos;	struct pnp_dev * dev;	struct pnp_card_driver * drv;	struct pnp_card * card;	if (!clink || !id)		goto done;	card = clink->card;	drv = clink->driver;	if (!from) {		pos = card->devices.next;	} else {		if (from->card != card)			goto done;		pos = from->card_list.next;	}	while (pos != &card->devices) {		dev = card_to_pnp_dev(pos);		if ((!dev->card_link) && compare_pnp_id(dev->id,id))			goto found;		pos = pos->next;	}done:	return NULL;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;			return NULL;		}	}	device_bind_driver(&dev->dev);	up_write(&dev->dev.bus->subsys.rwsem);	return dev;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/30d5b64b63fa69af31b2cba32e6d71d68526eec9/card.c/clean/drivers/pnp/card.c