diff options
| -rw-r--r-- | drivers/input/mouse/synaptics.c | 32 | 
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index c5c91bc2cce8..86bd89a28710 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -406,26 +406,10 @@ static int synaptics_parse_hw_state(const unsigned char buf[],  	memset(hw, 0, sizeof(struct synaptics_hw_state));  	if (SYN_MODEL_NEWABS(priv->model_id)) { -		hw->x = (((buf[3] & 0x10) << 8) | -			 ((buf[1] & 0x0f) << 8) | -			 buf[4]); -		hw->y = (((buf[3] & 0x20) << 7) | -			 ((buf[1] & 0xf0) << 4) | -			 buf[5]); - -		hw->z = buf[2];  		hw->w = (((buf[0] & 0x30) >> 2) |  			 ((buf[0] & 0x04) >> 1) |  			 ((buf[3] & 0x04) >> 2)); -		if (SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) && hw->w == 2) { -			/* Gesture packet: (x, y, z) at half resolution */ -			priv->mt.x = (((buf[4] & 0x0f) << 8) | buf[1]) << 1; -			priv->mt.y = (((buf[4] & 0xf0) << 4) | buf[2]) << 1; -			priv->mt.z = ((buf[3] & 0x30) | (buf[5] & 0x0f)) << 1; -			return 1; -		} -  		hw->left  = (buf[0] & 0x01) ? 1 : 0;  		hw->right = (buf[0] & 0x02) ? 1 : 0; @@ -448,6 +432,22 @@ static int synaptics_parse_hw_state(const unsigned char buf[],  			hw->down = ((buf[0] ^ buf[3]) & 0x02) ? 1 : 0;  		} +		if (SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) && hw->w == 2) { +			/* Gesture packet: (x, y, z) at half resolution */ +			priv->mt.x = (((buf[4] & 0x0f) << 8) | buf[1]) << 1; +			priv->mt.y = (((buf[4] & 0xf0) << 4) | buf[2]) << 1; +			priv->mt.z = ((buf[3] & 0x30) | (buf[5] & 0x0f)) << 1; +			return 1; +		} + +		hw->x = (((buf[3] & 0x10) << 8) | +			 ((buf[1] & 0x0f) << 8) | +			 buf[4]); +		hw->y = (((buf[3] & 0x20) << 7) | +			 ((buf[1] & 0xf0) << 4) | +			 buf[5]); +		hw->z = buf[2]; +  		if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) &&  		    ((buf[0] ^ buf[3]) & 0x02)) {  			switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) {  | 
