printk(KERN_INFO "input: %s on %s\n", twidjoy_name, serio->phys);  return 0; 
fail:	serio_set_drvdata(serio, NULL); input_free_device(input_dev); kfree(twidjoy); return err; 
static int twidjoy_connect(struct serio *serio, struct serio_driver *drv){	struct twidjoy_button_spec *bp;	struct twidjoy *twidjoy;	int i;	int err;	if (!(twidjoy = kmalloc(sizeof(struct twidjoy), GFP_KERNEL)))		return -ENOMEM;	memset(twidjoy, 0, sizeof(struct twidjoy));	sprintf(twidjoy->phys, "%s/input0", serio->phys);	init_input_dev(&twidjoy->dev);	twidjoy->dev.name = twidjoy_name;	twidjoy->dev.phys = twidjoy->phys;	twidjoy->dev.id.bustype = BUS_RS232;	twidjoy->dev.id.vendor = SERIO_TWIDJOY;	twidjoy->dev.id.product = 0x0001;	twidjoy->dev.id.version = 0x0100;	twidjoy->dev.dev = &serio->dev;	twidjoy->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);	for (bp = twidjoy_buttons; bp->bitmask; bp++) {		for (i = 0; i < bp->bitmask; i++)			set_bit(bp->buttons[i], twidjoy->dev.keybit);	}	twidjoy->dev.absbit[0] = BIT(ABS_X) | BIT(ABS_Y);	for (i = 0; i < 2; i++) {		twidjoy->dev.absmax[ABS_X+i] =  50;		twidjoy->dev.absmin[ABS_X+i] = -50;		/* TODO: arndt 20010708: Are these values appropriate? */		twidjoy->dev.absfuzz[ABS_X+i] = 4;		twidjoy->dev.absflat[ABS_X+i] = 4;	}	twidjoy->dev.private = twidjoy;	serio_set_drvdata(serio, twidjoy);	err = serio_open(serio, drv);	if (err) {		serio_set_drvdata(serio, NULL);		kfree(twidjoy);		return err;	}	input_register_device(&twidjoy->dev);	printk(KERN_INFO "input: %s on %s\n", twidjoy_name, serio->phys);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/17dd3f0f7aa729a042af5d3318ff9b3e7781b45b/twidjoy.c/clean/drivers/input/joystick/twidjoy.c