INIT_WORK(&s->device_add, pcmcia_delayed_add_pseudo_device, s); 
static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev){	struct pcmcia_socket *socket = class_get_devdata(class_dev);	struct pcmcia_bus_socket *s;	int ret;	s = kmalloc(sizeof(struct pcmcia_bus_socket), GFP_KERNEL);	if(!s)		return -ENOMEM;	memset(s, 0, sizeof(struct pcmcia_bus_socket));	/* get reference to parent socket */	s->parent = pcmcia_get_socket(socket);	if (!s->parent) {		printk(KERN_ERR "PCMCIA obtaining reference to socket %p failed\n", socket);		kfree (s);		return -ENODEV;	}	kref_init(&s->refcount);    	/*	 * Ugly. But we want to wait for the socket threads to have started up.	 * We really should let the drivers themselves drive some of this..	 */	msleep(250);	init_waitqueue_head(&s->queue);	INIT_LIST_HEAD(&s->devices_list);	/* Set up hotline to Card Services */	s->callback.owner = THIS_MODULE;	s->callback.event = &ds_event;	s->callback.resources_done = &pcmcia_card_add;	socket->pcmcia = s;	ret = pccard_register_pcmcia(socket, &s->callback);	if (ret) {		printk(KERN_ERR "PCMCIA registration PCCard core failed for socket %p\n", socket);		pcmcia_put_bus_socket(s);		socket->pcmcia = NULL;		return (ret);	}	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1ad275e3e7d253d44f03868e85977c908e334fed/ds.c/clean/drivers/pcmcia/ds.c