The patch titled appletouch improvements for MacBook has been removed from the -mm tree. Its filename was appletouch-improvements-for-macbook.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: appletouch improvements for MacBook From: Stelian Pop <stelian@xxxxxxxxxx> The attached patch, originally from Jason Parekh, changes a bit the finger detection method used by the appletouch driver. The patch doesn't seem to affect the Powerbooks but does greatly improve the touchpad behaviour on the MacBooks (no more "jumpiness"). Quoting Jason, for the description of the patch: - The detection method for multiple fingers. Previously, it recognizes a new finger when a low sensor is followed by a high sensor. I changed it so it checks for 'humps' in the sensor readings, so there doesn't necessarily have to be a low sensor between two high sensors for two fingers to be triggered (I personally leave my two fingers touching each other when two-finger scrolling, so this became an issue for me). - The absolute coordinate function. Previously, it incorporates new sensors into the function once the sensor passes the threshold. However, as soon as a sensor passes the threshold, its full value (usually the threshold value since it just passed it) is included in the calculation. This caused there to be some jumps in the cursor when moving the mouse around. What I do instead if subtract the threshold from each sensor when calculating the absolute position. This allows my cursor to be extremely smooth since a newly high sensor that gets included in the absolute position calculation will only have a value of 1 instead of the threshold value. - The threshold value. The default value remains at 10, but it is a module option now. Signed-off-by: Jason Parekh <jasonparekh@xxxxxxxxx> Signed-off-by: Stelian Pop <stelian@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/usb/input/appletouch.c | 47 ++++++++++++++++++++++++++++--- 1 files changed, 43 insertions(+), 4 deletions(-) diff -puN drivers/usb/input/appletouch.c~appletouch-improvements-for-macbook drivers/usb/input/appletouch.c --- a/drivers/usb/input/appletouch.c~appletouch-improvements-for-macbook +++ a/drivers/usb/input/appletouch.c @@ -154,6 +154,13 @@ MODULE_AUTHOR("Johannes Berg, Stelian Po MODULE_DESCRIPTION("Apple PowerBooks USB touchpad driver"); MODULE_LICENSE("GPL"); +/* + * Make the threshold a module parameter + */ +static int threshold = ATP_THRESHOLD; +module_param(threshold, int, 0644); +MODULE_PARM_DESC(threshold, "Discards any change in data from a sensor (trackpad has hundreds of these sensors) less than this value"); + static int debug = 1; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Activate debugging output"); @@ -183,16 +190,48 @@ static int atp_calculate_abs(int *xy_sen int i; /* values to calculate mean */ int pcum = 0, psum = 0; + int is_increasing = 0; *fingers = 0; for (i = 0; i < nb_sensors; i++) { - if (xy_sensors[i] < ATP_THRESHOLD) + if (xy_sensors[i] < threshold) { + if (is_increasing) + is_increasing = 0; + continue; - if ((i - 1 < 0) || (xy_sensors[i - 1] < ATP_THRESHOLD)) + } + + /* + * Makes the finger detection more versatile. For example, + * two fingers with no gap will be detected. Also, my + * tests show it less likely to have intermittent loss + * of multiple finger readings while moving around (scrolling). + * + * Changes the multiple finger detection to counting humps on + * sensors (transitions from nonincreasing to increasing) + * instead of counting transitions from low sensors (no + * finger reading) to high sensors (finger above + * sensor) + * + * - Jason Parekh <jasonparekh@xxxxxxxxx> + */ + if ((i < 1) || (!is_increasing && (xy_sensors[i-1] < xy_sensors[i]))) { (*fingers)++; - pcum += xy_sensors[i] * i; - psum += xy_sensors[i]; + is_increasing = 1; + } else if ((i > 0) && (xy_sensors[i-1] >= xy_sensors[i])) { + is_increasing = 0; + } + + /* + * Subtracts threshold so a high sensor that just passes the threshold + * won't skew the calculated absolute coordinate. Fixes an issue + * where slowly moving the mouse would occassionaly jump a number of + * pixels (let me restate--slowly moving the mouse makes this issue + * most apparent). + */ + pcum += (xy_sensors[i]-threshold) * i; + psum += (xy_sensors[i]-threshold); } if (psum > 0) { _ Patches currently in -mm which might be from stelian@xxxxxxxxxx are 2.6-sony_acpi4.patch sony_apci-resume.patch acpi-add-backlight-support-to-the-sony_acpi.patch git-input.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html