class_device_create(input_class, 
class_device_create(input_class, NULL, 
static struct input_handle *tsdev_connect(struct input_handler *handler,					  struct input_dev *dev,					  struct input_device_id *id){	struct tsdev *tsdev;	int minor, delta;	for (minor = 0; minor < TSDEV_MINORS/2 && tsdev_table[minor];	     minor++);	if (minor >= TSDEV_MINORS/2) {		printk(KERN_ERR		       "tsdev: You have way too many touchscreens\n");		return NULL;	}	if (!(tsdev = kmalloc(sizeof(struct tsdev), GFP_KERNEL)))		return NULL;	memset(tsdev, 0, sizeof(struct tsdev));	INIT_LIST_HEAD(&tsdev->list);	init_waitqueue_head(&tsdev->wait);	sprintf(tsdev->name, "ts%d", minor);	tsdev->exist = 1;	tsdev->minor = minor;	tsdev->handle.dev = dev;	tsdev->handle.name = tsdev->name;	tsdev->handle.handler = handler;	tsdev->handle.private = tsdev;	/* Precompute the rough calibration matrix */	delta = dev->absmax [ABS_X] - dev->absmin [ABS_X] + 1;	if (delta == 0)		delta = 1;	tsdev->cal.xscale = (xres << 8) / delta;	tsdev->cal.xtrans = - ((dev->absmin [ABS_X] * tsdev->cal.xscale) >> 8);	delta = dev->absmax [ABS_Y] - dev->absmin [ABS_Y] + 1;	if (delta == 0)		delta = 1;	tsdev->cal.yscale = (yres << 8) / delta;	tsdev->cal.ytrans = - ((dev->absmin [ABS_Y] * tsdev->cal.yscale) >> 8);	tsdev_table[minor] = tsdev;	devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),			S_IFCHR|S_IRUGO|S_IWUSR, "input/ts%d", minor);	devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor + TSDEV_MINORS/2),			S_IFCHR|S_IRUGO|S_IWUSR, "input/tsraw%d", minor);	class_device_create(input_class,			MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),			dev->dev, "ts%d", minor);	return &tsdev->handle;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/53f4654272df7c51064825024340554b39c9efba/tsdev.c/clean/drivers/input/tsdev.c