(usage->type == EV_REL) && (usage->code == REL_WHEEL)) 
(usage->type == EV_REL) && (usage->code == REL_WHEEL)) 
static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field,				     struct hid_usage *usage){	struct input_dev *input = &hidinput->input;	struct hid_device *device = hidinput->input.private;	int max, code;	unsigned long *bit;	field->hidinput = hidinput;#ifdef DEBUG	printk(KERN_DEBUG "Mapping: ");	resolv_usage(usage->hid);	printk(" ---> ");#endif	if (field->flags & HID_MAIN_ITEM_CONSTANT)		goto ignore;	switch (usage->hid & HID_USAGE_PAGE) {		case HID_UP_UNDEFINED:			goto ignore;		case HID_UP_KEYBOARD:			set_bit(EV_REP, input->evbit);			if ((usage->hid & HID_USAGE) < 256) {				if (!hid_keyboard[usage->hid & HID_USAGE]) goto ignore;				map_key_clear(hid_keyboard[usage->hid & HID_USAGE]);			} else				map_key(KEY_UNKNOWN);			break;		case HID_UP_BUTTON:			code = ((usage->hid - 1) & 0xf);			switch (field->application) {				case HID_GD_MOUSE:				case HID_GD_POINTER:  code += 0x110; break;				case HID_GD_JOYSTICK: code += 0x120; break;				case HID_GD_GAMEPAD:  code += 0x130; break;				default:					switch (field->physical) {						case HID_GD_MOUSE:						case HID_GD_POINTER:  code += 0x110; break;						case HID_GD_JOYSTICK: code += 0x120; break;						case HID_GD_GAMEPAD:  code += 0x130; break;						default:              code += 0x100;					}			}			map_key(code);			break;		case HID_UP_GENDESK:			if ((usage->hid & 0xf0) == 0x80) {	/* SystemControl */				switch (usage->hid & 0xf) {					case 0x1: map_key_clear(KEY_POWER);  break;					case 0x2: map_key_clear(KEY_SLEEP);  break;					case 0x3: map_key_clear(KEY_WAKEUP); break;					default: goto unknown;				}				break;			}			if ((usage->hid & 0xf0) == 0x90) {	/* D-pad */				switch (usage->hid) {					case HID_GD_UP:	   usage->hat_dir = 1; break;					case HID_GD_DOWN:  usage->hat_dir = 5; break;					case HID_GD_RIGHT: usage->hat_dir = 3; break;					case HID_GD_LEFT:  usage->hat_dir = 7; break;					default: goto unknown;				}				if (field->dpad) {					map_abs(field->dpad);					goto ignore;				}				map_abs(ABS_HAT0X);				break;			}			switch (usage->hid) {				/* These usage IDs map directly to the usage codes. */				case HID_GD_X: case HID_GD_Y: case HID_GD_Z:				case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:				case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:					if (field->flags & HID_MAIN_ITEM_RELATIVE) 						map_rel(usage->hid & 0xf);					else						map_abs(usage->hid & 0xf);					break;				case HID_GD_HATSWITCH:					usage->hat_min = field->logical_minimum;					usage->hat_max = field->logical_maximum;					map_abs(ABS_HAT0X);					break;				case HID_GD_START:	map_key_clear(BTN_START);	break;				case HID_GD_SELECT:	map_key_clear(BTN_SELECT);	break;				default: goto unknown;			}			break;		case HID_UP_LED:			if (((usage->hid - 1) & 0xffff) >= LED_MAX)				goto ignore;			map_led((usage->hid - 1) & 0xffff);			break;		case HID_UP_DIGITIZER:			switch (usage->hid & 0xff) {				case 0x30: /* TipPressure */					if (!test_bit(BTN_TOUCH, input->keybit)) {						device->quirks |= HID_QUIRK_NOTOUCH;						set_bit(EV_KEY, input->evbit);						set_bit(BTN_TOUCH, input->keybit);					}					map_abs_clear(ABS_PRESSURE);					break;				case 0x32: /* InRange */					switch (field->physical & 0xff) {						case 0x21: map_key(BTN_TOOL_MOUSE); break;						case 0x22: map_key(BTN_TOOL_FINGER); break;						default: map_key(BTN_TOOL_PEN); break;					}					break;				case 0x3c: /* Invert */					map_key_clear(BTN_TOOL_RUBBER);					break;				case 0x33: /* Touch */				case 0x42: /* TipSwitch */				case 0x43: /* TipSwitch2 */					device->quirks &= ~HID_QUIRK_NOTOUCH;					map_key_clear(BTN_TOUCH);					break;				case 0x44: /* BarrelSwitch */					map_key_clear(BTN_STYLUS);					break;				default:  goto unknown;			}			break;		case HID_UP_CONSUMER:	/* USB HUT v1.1, pages 56-62 */			switch (usage->hid & HID_USAGE) {				case 0x000: goto ignore;				case 0x034: map_key_clear(KEY_SLEEP);		break;				case 0x036: map_key_clear(BTN_MISC);		break;				case 0x08a: map_key_clear(KEY_WWW);		break;				case 0x095: map_key_clear(KEY_HELP);		break;				case 0x0b0: map_key_clear(KEY_PLAY);		break;				case 0x0b1: map_key_clear(KEY_PAUSE);		break;				case 0x0b2: map_key_clear(KEY_RECORD);		break;				case 0x0b3: map_key_clear(KEY_FASTFORWARD);	break;				case 0x0b4: map_key_clear(KEY_REWIND);		break;				case 0x0b5: map_key_clear(KEY_NEXTSONG);	break;				case 0x0b6: map_key_clear(KEY_PREVIOUSSONG);	break;				case 0x0b7: map_key_clear(KEY_STOPCD);		break;				case 0x0b8: map_key_clear(KEY_EJECTCD);		break;				case 0x0cd: map_key_clear(KEY_PLAYPAUSE);	break;			        case 0x0e0: map_abs_clear(ABS_VOLUME);		break;				case 0x0e2: map_key_clear(KEY_MUTE);		break;				case 0x0e5: map_key_clear(KEY_BASSBOOST);	break;				case 0x0e9: map_key_clear(KEY_VOLUMEUP);	break;				case 0x0ea: map_key_clear(KEY_VOLUMEDOWN);	break;				case 0x183: map_key_clear(KEY_CONFIG);		break;				case 0x18a: map_key_clear(KEY_MAIL);		break;				case 0x192: map_key_clear(KEY_CALC);		break;				case 0x194: map_key_clear(KEY_FILE);		break;				case 0x21a: map_key_clear(KEY_UNDO);		break;				case 0x21b: map_key_clear(KEY_COPY);		break;				case 0x21c: map_key_clear(KEY_CUT);		break;				case 0x21d: map_key_clear(KEY_PASTE);		break;				case 0x221: map_key_clear(KEY_FIND);		break;				case 0x223: map_key_clear(KEY_HOMEPAGE);	break;				case 0x224: map_key_clear(KEY_BACK);		break;				case 0x225: map_key_clear(KEY_FORWARD);		break;				case 0x226: map_key_clear(KEY_STOP);		break;				case 0x227: map_key_clear(KEY_REFRESH);		break;				case 0x22a: map_key_clear(KEY_BOOKMARKS);	break;				case 0x238: map_rel(REL_HWHEEL);		break;				default:    goto unknown;			}			break;		case HID_UP_HPVENDOR:	/* Reported on a Dutch layout HP5308 */			set_bit(EV_REP, input->evbit);			switch (usage->hid & HID_USAGE) {			        case 0x021: map_key_clear(KEY_PRINT);           break;				case 0x070: map_key_clear(KEY_HP);		break;				case 0x071: map_key_clear(KEY_CAMERA);		break;				case 0x072: map_key_clear(KEY_SOUND);		break;				case 0x073: map_key_clear(KEY_QUESTION);	break;				case 0x080: map_key_clear(KEY_EMAIL);		break;				case 0x081: map_key_clear(KEY_CHAT);		break;				case 0x082: map_key_clear(KEY_SEARCH);		break;				case 0x083: map_key_clear(KEY_CONNECT);	        break;				case 0x084: map_key_clear(KEY_FINANCE);		break;				case 0x085: map_key_clear(KEY_SPORT);		break;				case 0x086: map_key_clear(KEY_SHOP);	        break;				default:    goto ignore;			}			break;		case HID_UP_MSVENDOR:			goto ignore;					case HID_UP_PID:			set_bit(EV_FF, input->evbit);			switch(usage->hid & HID_USAGE) {				case 0x26: map_ff_effect(FF_CONSTANT);	goto ignore;				case 0x27: map_ff_effect(FF_RAMP);	goto ignore;				case 0x28: map_ff_effect(FF_CUSTOM);	goto ignore;				case 0x30: map_ff_effect(FF_SQUARE);	map_ff_effect(FF_PERIODIC); goto ignore;				case 0x31: map_ff_effect(FF_SINE);	map_ff_effect(FF_PERIODIC); goto ignore;				case 0x32: map_ff_effect(FF_TRIANGLE);	map_ff_effect(FF_PERIODIC); goto ignore;				case 0x33: map_ff_effect(FF_SAW_UP);	map_ff_effect(FF_PERIODIC); goto ignore;				case 0x34: map_ff_effect(FF_SAW_DOWN);	map_ff_effect(FF_PERIODIC); goto ignore;				case 0x40: map_ff_effect(FF_SPRING);	goto ignore;				case 0x41: map_ff_effect(FF_DAMPER);	goto ignore;				case 0x42: map_ff_effect(FF_INERTIA);	goto ignore;				case 0x43: map_ff_effect(FF_FRICTION);	goto ignore;				case 0x7e: map_ff(FF_GAIN);		break;				case 0x83: input->ff_effects_max = field->value[0]; goto ignore;				case 0x98: map_ff(FF_AUTOCENTER);	break;				case 0xa4: map_key_clear(BTN_DEAD);	break;				default: goto ignore;			}			break;		default:		unknown:			if (field->report_size == 1) {				if (field->report->type == HID_OUTPUT_REPORT) {					map_led(LED_MISC);					break;				}				map_key(BTN_MISC);				break;			}			if (field->flags & HID_MAIN_ITEM_RELATIVE) {				map_rel(REL_MISC);				break;			}			map_abs(ABS_MISC);			break;	}	set_bit(usage->type, input->evbit);	while (usage->code <= max && test_and_set_bit(usage->code, bit))		usage->code = find_next_zero_bit(bit, max + 1, usage->code);	if (usage->code > max)		goto ignore;	if ((device->quirks & (HID_QUIRK_2WHEEL_MOUSE_HACK_7 | HID_QUIRK_2WHEEL_MOUSE_HACK_5)) &&		 (usage->type == EV_REL) && (usage->code == REL_WHEEL)) 			set_bit(REL_HWHEEL, bit);	if (((device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_5) && (usage->hid == 0x00090005))		|| ((device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_7) && (usage->hid == 0x00090007)))		goto ignore;	if (usage->type == EV_ABS) {		int a = field->logical_minimum;		int b = field->logical_maximum;		if ((device->quirks & HID_QUIRK_BADPAD) && (usage->code == ABS_X || usage->code == ABS_Y)) {			a = field->logical_minimum = 0;			b = field->logical_maximum = 255;		}				if (field->application == HID_GD_GAMEPAD || field->application == HID_GD_JOYSTICK)			input_set_abs_params(input, usage->code, a, b, (b - a) >> 8, (b - a) >> 4);		else	input_set_abs_params(input, usage->code, a, b, 0, 0);			}	if (usage->hat_min < usage->hat_max || usage->hat_dir) {		int i;		for (i = usage->code; i < usage->code + 2 && i <= max; i++) {			input_set_abs_params(input, i, -1, 1, 0, 0);			set_bit(i, input->absbit);		}		if (usage->hat_dir && !field->dpad)			field->dpad = usage->code;	}#ifdef DEBUG	resolv_event(usage->type, usage->code);	printk("\n");#endif	return;ignore:#ifdef DEBUG	printk("IGNORED\n");#endif	return;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/05f091ab4c8c1f12f8dd38ee789489904fea327d/hid-input.c/buggy/drivers/usb/input/hid-input.c