struct input_dev *dev = &iforce->dev; 
struct input_dev *dev = iforce->dev; 
void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data, struct pt_regs *regs){	struct input_dev *dev = &iforce->dev;	int i;	static int being_used = 0;	if (being_used)		printk(KERN_WARNING "iforce-packets.c: re-entrant call to iforce_process %d\n", being_used);	being_used++;#ifdef CONFIG_JOYSTICK_IFORCE_232	if (HI(iforce->expect_packet) == HI(cmd)) {		iforce->expect_packet = 0;		iforce->ecmd = cmd;		memcpy(iforce->edata, data, IFORCE_MAX_LENGTH);		wake_up(&iforce->wait);	}#endif	if (!iforce->type) {		being_used--;		return;	}	switch (HI(cmd)) {		case 0x01:	/* joystick position data */		case 0x03:	/* wheel position data */			input_regs(dev, regs);			if (HI(cmd) == 1) {				input_report_abs(dev, ABS_X, (__s16) (((__s16)data[1] << 8) | data[0]));				input_report_abs(dev, ABS_Y, (__s16) (((__s16)data[3] << 8) | data[2]));				input_report_abs(dev, ABS_THROTTLE, 255 - data[4]);				if (LO(cmd) >= 8 && test_bit(ABS_RUDDER ,dev->absbit))					input_report_abs(dev, ABS_RUDDER, (__s8)data[7]);			} else {				input_report_abs(dev, ABS_WHEEL, (__s16) (((__s16)data[1] << 8) | data[0]));				input_report_abs(dev, ABS_GAS,   255 - data[2]);				input_report_abs(dev, ABS_BRAKE, 255 - data[3]);			}			input_report_abs(dev, ABS_HAT0X, iforce_hat_to_axis[data[6] >> 4].x);			input_report_abs(dev, ABS_HAT0Y, iforce_hat_to_axis[data[6] >> 4].y);			for (i = 0; iforce->type->btn[i] >= 0; i++)				input_report_key(dev, iforce->type->btn[i], data[(i >> 3) + 5] & (1 << (i & 7)));			/* If there are untouched bits left, interpret them as the second hat */			if (i <= 8) {				int btns = data[6];				if (test_bit(ABS_HAT1X, dev->absbit)) {					if (btns & 8) input_report_abs(dev, ABS_HAT1X, -1);					else if (btns & 2) input_report_abs(dev, ABS_HAT1X, 1);					else input_report_abs(dev, ABS_HAT1X, 0);				}				if (test_bit(ABS_HAT1Y, dev->absbit)) {					if (btns & 1) input_report_abs(dev, ABS_HAT1Y, -1);					else if (btns & 4) input_report_abs(dev, ABS_HAT1Y, 1);					else input_report_abs(dev, ABS_HAT1Y, 0);				}			}			input_sync(dev);			break;		case 0x02:	/* status report */			input_regs(dev, regs);			input_report_key(dev, BTN_DEAD, data[0] & 0x02);			input_sync(dev);			/* Check if an effect was just started or stopped */			i = data[1] & 0x7f;			if (data[1] & 0x80) {				if (!test_and_set_bit(FF_CORE_IS_PLAYED, iforce->core_effects[i].flags)) {				/* Report play event */				input_report_ff_status(dev, i, FF_STATUS_PLAYING);				}			}			else if (test_and_clear_bit(FF_CORE_IS_PLAYED, iforce->core_effects[i].flags)) {				/* Report stop event */				input_report_ff_status(dev, i, FF_STATUS_STOPPED);			}			if (LO(cmd) > 3) {				int j;				for (j=3; j<LO(cmd); j+=2) {					mark_core_as_ready(iforce, data[j] | (data[j+1]<<8));				}			}			break;	}	being_used--;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/17dd3f0f7aa729a042af5d3318ff9b3e7781b45b/iforce-packets.c/buggy/drivers/input/joystick/iforce/iforce-packets.c