clear_bit(BTN_MIDDLE, psmouse->dev.keybit); 
clear_bit(BTN_MIDDLE, psmouse->dev->keybit); 
int ps2pp_init(struct psmouse *psmouse, int set_properties){	struct ps2dev *ps2dev = &psmouse->ps2dev;	unsigned char param[4];	unsigned char model, buttons;	struct ps2pp_info *model_info;	int use_ps2pp = 0;	param[0] = 0;	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);	ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11);	ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11);	ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11);	param[1] = 0;	ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO);	if (!param[1])		return -1;	model = ((param[0] >> 4) & 0x07) | ((param[0] << 3) & 0x78);	buttons = param[1];	if ((model_info = get_model_info(model)) != NULL) {/* * Do Logitech PS2++ / PS2T++ magic init. */		if (model == 97) { /* Touch Pad 3 */			/* Unprotect RAM */			param[0] = 0x11; param[1] = 0x04; param[2] = 0x68;			ps2_command(ps2dev, param, 0x30d1);			/* Enable features */			param[0] = 0x11; param[1] = 0x05; param[2] = 0x0b;			ps2_command(ps2dev, param, 0x30d1);			/* Enable PS2++ */			param[0] = 0x11; param[1] = 0x09; param[2] = 0xc3;			ps2_command(ps2dev, param, 0x30d1);			param[0] = 0;			if (!ps2_command(ps2dev, param, 0x13d1) &&			    param[0] == 0x06 && param[1] == 0x00 && param[2] == 0x14) {				use_ps2pp = 1;			}		} else {			param[0] = param[1] = param[2] = 0;			ps2pp_cmd(psmouse, param, 0x39); /* Magic knock */			ps2pp_cmd(psmouse, param, 0xDB);			if ((param[0] & 0x78) == 0x48 &&			    (param[1] & 0xf3) == 0xc2 &&			    (param[2] & 0x03) == ((param[1] >> 2) & 3)) {				ps2pp_set_smartscroll(psmouse, psmouse->smartscroll);				use_ps2pp = 1;			}		}	}	if (set_properties) {		psmouse->vendor = "Logitech";		psmouse->model = model;		if (use_ps2pp) {			psmouse->protocol_handler = ps2pp_process_byte;			psmouse->pktsize = 3;			if (model_info->kind != PS2PP_KIND_TP3) {				psmouse->set_resolution = ps2pp_set_resolution;				psmouse->disconnect = ps2pp_disconnect;				device_create_file(&psmouse->ps2dev.serio->dev,						   &psmouse_attr_smartscroll.dattr);			}		}		if (buttons < 3)			clear_bit(BTN_MIDDLE, psmouse->dev.keybit);		if (model_info)			ps2pp_set_model_properties(psmouse, model_info, use_ps2pp);	}	return use_ps2pp ? 0 : -1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/2e5b636bb5f8dacbb91d08544e2c41ebcad5dace/logips2pp.c/clean/drivers/input/mouse/logips2pp.c