|
From: gimli <gi...@da...> - 2008-02-29 09:36:22
|
Hi, the trackpad is not supported by the appletouchpad driver. i use the stock in kernel hid driver for it. happy penguin Edgar (gimli) Hucek > > also, does the new trackpad work OK? is it jumpy or anything? > > does it do anything weird when you move more than one finger across it? > > i would like to play with the driver when I get one to see if > multi-touch can be taken advantage of very easily... > > On Thu, 2008-02-28 at 22:32 +0100, gimli wrote: >> Hi, >> >> my status report on the Macbook Air : >> Installed Ubuntu gutsy with kernel 2.6.24.3 and mactel patches >> WLAN work with ndiswrapper >> Bluetooth work >> Speedstep work >> Suspen/Resume work >> 3D acceleration work >> Applesmc partialy work >> Sound works with the mbp3 option >> Display backlight work with a pommed patch. >> >> happy penguin >> >> Edgar /gimli) Hucek >> >> > James Vautin a dit: >> >> There are some hints someone has Ubuntu running: >> >> >> >> http://www.flickr.com/photos/isriya/2265405622/ >> >> >> >> http://www.flickr.com/photos/isriya/2264613881/ >> >> >> >> but not much more than that. I'm going to try to get in touch with >> >> this guy. >> > >> > Please report back here - I'd definitely like to know as well! >> > >> > Cheers, >> > >> > -- >> > mike dentifrice <fl...@po...> >> > >> > >> > ------------------------------------------------------------------------- >> > This SF.net email is sponsored by: Microsoft >> > Defy all challenges. Microsoft(R) Visual Studio 2008. >> > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >> > _______________________________________________ >> > Mactel-linux-users mailing list >> > Mac...@li... >> > https://lists.sourceforge.net/lists/listinfo/mactel-linux-users >> > >> > >> > >> >> >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by: Microsoft >> Defy all challenges. Microsoft(R) Visual Studio 2008. >> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >> _______________________________________________ >> Mactel-linux-users mailing list >> Mac...@li... >> https://lists.sourceforge.net/lists/listinfo/mactel-linux-users > > > |
|
From: gimli <gi...@da...> - 2008-03-03 08:03:34
|
Hi, updated status on the MacBookAir1,1 : pommed 1.16 adds proper support for the MacbOkkAir1,1 kernel hid patch updated with the missing usb ids happy penguin Edgar (gimli) Hucek |
|
From: Sven A. <an...@an...> - 2008-03-10 11:52:09
|
Hello!
The is an update of the appletouch, which fixes one wrong Product-ID.
It also replaces the "appletouch-add-macbook3-trackpad.patch" patch.
Please update the SVN...
Regards
Sven
--
Sven Anders <an...@an...> () Ascii Ribbon Campaign
/\ Support plain text e-mail
ANDURAS service solutions AG
Innstraße 71 - 94036 Passau - Germany
Web: www.anduras.de - Tel: +49 (0)851-4 90 50-0 - Fax: +49 (0)851-4 90 50-55
Rechtsform: Aktiengesellschaft - Sitz: Passau - Amtsgericht Passau HRB 6032
Mitglieder des Vorstands: Sven Anders, Marcus Junker
Vorsitzender des Aufsichtsrats: Dr. Thomas Träger
|
|
From: James V. <ja...@va...> - 2008-03-16 03:39:09
|
So does this patch do anything special with 2 or 3 finger movements? It
would be nice to apply the capability of this hardware to interface with
compiz or something, for example, 3 finger swipe rotates my cube in a
given direction.
Or are we not there yet?
James
On Mon, 2008-03-10 at 12:51 +0100, Sven Anders wrote:
> Hello!
>
> The is an update of the appletouch, which fixes one wrong Product-ID.
> It also replaces the "appletouch-add-macbook3-trackpad.patch" patch.
>
> Please update the SVN...
>
> Regards
> Sven
>
> plain text document attachment (appletouch.patch-2.6.24)
> --- appletouch.c.orig-2.6.24 2008-01-28 17:50:52.000000000 +0100
> +++ appletouch.c 2008-02-29 20:15:33.000000000 +0100
> @@ -8,6 +8,7 @@
> * Copyright (C) 2005 Peter Osterlund (pe...@te...)
> * Copyright (C) 2005 Michael Hanselmann (lin...@ha...)
> * Copyright (C) 2006 Nicolas Boichat (ni...@bo...)
> + * Copyright (C) 2007-2008 Sven Anders (an...@an...)
> *
> * Thanks to Alex Harper <bas...@fo...> for his inputs.
> *
> @@ -38,16 +39,18 @@
> #define APPLE_VENDOR_ID 0x05AC
>
> /* These names come from Info.plist in AppleUSBTrackpad.kext */
> +
> +/* PowerBooks Feb 2005 / iBooks */
> #define FOUNTAIN_ANSI_PRODUCT_ID 0x020E
> #define FOUNTAIN_ISO_PRODUCT_ID 0x020F
> -
> #define FOUNTAIN_TP_ONLY_PRODUCT_ID 0x030A
>
> #define GEYSER1_TP_ONLY_PRODUCT_ID 0x030B
>
> -#define GEYSER_ANSI_PRODUCT_ID 0x0214
> -#define GEYSER_ISO_PRODUCT_ID 0x0215
> -#define GEYSER_JIS_PRODUCT_ID 0x0216
> +/* PowerBooks Oct 2005 */
> +#define GEYSER2_ANSI_PRODUCT_ID 0x0214
> +#define GEYSER2_ISO_PRODUCT_ID 0x0215
> +#define GEYSER2_JIS_PRODUCT_ID 0x0216
>
> /* MacBook devices */
> #define GEYSER3_ANSI_PRODUCT_ID 0x0217
> @@ -58,9 +61,14 @@
> * Geyser IV: same as Geyser III according to Info.plist in AppleUSBTrackpad.kext
> * -> same IOClass (AppleUSBGrIIITrackpad), same acceleration tables
> */
> -#define GEYSER4_ANSI_PRODUCT_ID 0x021A
> -#define GEYSER4_ISO_PRODUCT_ID 0x021B
> -#define GEYSER4_JIS_PRODUCT_ID 0x021C
> +#define GEYSER4_ANSI_PRODUCT_ID 0x021A
> +#define GEYSER4_ISO_PRODUCT_ID 0x021B
> +#define GEYSER4_JIS_PRODUCT_ID 0x021C
> +
> +/* Macbook3,1 devices */
> +#define GEYSER4_HF_ANSI_PRODUCT_ID 0x0229
> +#define GEYSER4_HF_ISO_PRODUCT_ID 0x022A
> +#define GEYSER4_HF_JIS_PRODUCT_ID 0x022B
>
> #define ATP_DEVICE(prod) \
> .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
> @@ -73,15 +81,17 @@
>
> /* table of devices that work with this driver */
> static struct usb_device_id atp_table [] = {
> +
> + /* PowerBooks Feb 2005, iBooks G4 */
> { ATP_DEVICE(FOUNTAIN_ANSI_PRODUCT_ID) },
> { ATP_DEVICE(FOUNTAIN_ISO_PRODUCT_ID) },
> { ATP_DEVICE(FOUNTAIN_TP_ONLY_PRODUCT_ID) },
> { ATP_DEVICE(GEYSER1_TP_ONLY_PRODUCT_ID) },
>
> /* PowerBooks Oct 2005 */
> - { ATP_DEVICE(GEYSER_ANSI_PRODUCT_ID) },
> - { ATP_DEVICE(GEYSER_ISO_PRODUCT_ID) },
> - { ATP_DEVICE(GEYSER_JIS_PRODUCT_ID) },
> + { ATP_DEVICE(GEYSER2_ANSI_PRODUCT_ID) },
> + { ATP_DEVICE(GEYSER2_ISO_PRODUCT_ID) },
> + { ATP_DEVICE(GEYSER2_JIS_PRODUCT_ID) },
>
> /* Core Duo MacBook & MacBook Pro */
> { ATP_DEVICE(GEYSER3_ANSI_PRODUCT_ID) },
> @@ -93,6 +103,11 @@
> { ATP_DEVICE(GEYSER4_ISO_PRODUCT_ID) },
> { ATP_DEVICE(GEYSER4_JIS_PRODUCT_ID) },
>
> + /* Core2 Duo MacBook3,1 */
> + { ATP_DEVICE(GEYSER4_HF_ANSI_PRODUCT_ID) },
> + { ATP_DEVICE(GEYSER4_HF_ISO_PRODUCT_ID) },
> + { ATP_DEVICE(GEYSER4_HF_JIS_PRODUCT_ID) },
> +
> /* Terminating entry */
> { }
> };
> @@ -136,12 +151,21 @@
> #define ATP_GEYSER_MODE_REQUEST_INDEX 0
> #define ATP_GEYSER_MODE_VENDOR_VALUE 0x04
>
> +/*
> + * Meaning of the status bits (only Geyser 3/4?)
> + */
> +#define ATP_STATUS_BIT_BUTTON 0x01 /* The button was pressed */
> +#define ATP_STATUS_BIT_UNKNOWN1 0x02 /* Unknown or unused */
> +#define ATP_STATUS_BIT_BASE_UPDATE 0x04 /* Update of the base values (untouched pad) */
> +#define ATP_STATUS_BIT_UNKNOWN2 0x08 /* Unknown or unused */
> +#define ATP_STATUS_BIT_FROM_RESET 0x10 /* Reset previously performed */
> +
> /* Structure to hold all of our device specific stuff */
> struct atp {
> char phys[64];
> struct usb_device * udev; /* usb device */
> struct urb * urb; /* usb request block */
> - signed char * data; /* transferred data */
> + u8 * data; /* transferred data */
> struct input_dev * input; /* input dev */
> unsigned char open; /* non-zero if opened */
> unsigned char valid; /* are the sensors valid ? */
> @@ -156,8 +180,8 @@
> /* accumulated sensors */
> int xy_acc[ATP_XSENSORS + ATP_YSENSORS];
> int datalen; /* size of an USB urb transfer */
> - int idlecount; /* number of empty packets */
> - struct work_struct work;
> + int idle_counter; /* number of empty packets */
> + struct work_struct work; /* kernel workqueue entry (for re-init) */
> };
>
> #define dbg_dump(msg, tab) \
> @@ -174,8 +198,12 @@
> if (debug) printk(KERN_DEBUG format, ##a); \
> } while (0)
>
> -MODULE_AUTHOR("Johannes Berg, Stelian Pop, Frank Arnold, Michael Hanselmann");
> -MODULE_DESCRIPTION("Apple PowerBooks USB touchpad driver");
> +MODULE_AUTHOR("Johannes Berg");
> +MODULE_AUTHOR("Stelian Pop");
> +MODULE_AUTHOR("Frank Arnold");
> +MODULE_AUTHOR("Michael Hanselmann");
> +MODULE_AUTHOR("Sven Anders");
> +MODULE_DESCRIPTION("Apple PowerBook and MacBook USB touchpad driver");
> MODULE_LICENSE("GPL");
>
> /*
> @@ -185,7 +213,7 @@
> 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;
> +static int debug;
> module_param(debug, int, 0644);
> MODULE_PARM_DESC(debug, "Activate debugging output");
>
> @@ -203,12 +231,12 @@
> {
> u16 productId = le16_to_cpu(dev->udev->descriptor.idProduct);
>
> - return (productId == GEYSER_ANSI_PRODUCT_ID) ||
> - (productId == GEYSER_ISO_PRODUCT_ID) ||
> - (productId == GEYSER_JIS_PRODUCT_ID);
> + return (productId == GEYSER2_ANSI_PRODUCT_ID) ||
> + (productId == GEYSER2_ISO_PRODUCT_ID) ||
> + (productId == GEYSER2_JIS_PRODUCT_ID);
> }
>
> -static inline int atp_is_geyser_3(struct atp *dev)
> +static inline int atp_is_geyser_3_4(struct atp *dev)
> {
> u16 productId = le16_to_cpu(dev->udev->descriptor.idProduct);
>
> @@ -217,7 +245,10 @@
> (productId == GEYSER3_JIS_PRODUCT_ID) ||
> (productId == GEYSER4_ANSI_PRODUCT_ID) ||
> (productId == GEYSER4_ISO_PRODUCT_ID) ||
> - (productId == GEYSER4_JIS_PRODUCT_ID);
> + (productId == GEYSER4_JIS_PRODUCT_ID) ||
> + (productId == GEYSER4_HF_ANSI_PRODUCT_ID) ||
> + (productId == GEYSER4_HF_ISO_PRODUCT_ID) ||
> + (productId == GEYSER4_HF_JIS_PRODUCT_ID);
> }
>
> /*
> @@ -229,7 +260,7 @@
> {
> char data[8];
> int size;
> -
> +
> size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
> ATP_GEYSER_MODE_READ_REQUEST_ID,
> USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
> @@ -237,6 +268,13 @@
> ATP_GEYSER_MODE_REQUEST_INDEX, &data, 8, 5000);
>
> if (size != 8) {
> + if (debug)
> + {
> + int i;
> + printk("appletouch atp_geyser_init READ error\n");
> + for (i=0; i<8; i++)
> + printk("appletouch[%d]: %d\n", i, (int) data[i]);
> + }
> err("Could not do mode read request from device"
> " (Geyser Raw mode)");
> return -EIO;
> @@ -252,6 +290,13 @@
> ATP_GEYSER_MODE_REQUEST_INDEX, &data, 8, 5000);
>
> if (size != 8) {
> + if (debug)
> + {
> + int i;
> + printk("appletouch atp_geyser_init WRITE error\n");
> + for (i=0; i<8; i++)
> + printk("appletouch[%d]: %d\n", i, (int) data[i]);
> + }
> err("Could not do mode write request to device"
> " (Geyser Raw mode)");
> return -EIO;
> @@ -269,8 +314,7 @@
> struct usb_device *udev = dev->udev;
> int retval;
>
> - dev->idlecount = 0;
> -
> + dprintk("appletouch: putting appletouch to sleep (reinit)\n");
> atp_geyser_init(udev);
>
> retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
> @@ -385,7 +429,7 @@
> }
>
> /* reorder the sensors values */
> - if (atp_is_geyser_3(dev)) {
> + if (atp_is_geyser_3_4(dev)) {
> memset(dev->xy_cur, 0, sizeof(dev->xy_cur));
>
> /*
> @@ -442,13 +486,20 @@
> dbg_dump("sample", dev->xy_cur);
>
> if (!dev->valid) {
> - /* first sample */
> + /* first sample after init or resume */
> dev->valid = 1;
> dev->x_old = dev->y_old = -1;
> memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));
> + dev->idle_counter = 0;
> +
> + /* store first sample on older Geyser */
> + if ((dev->data[dev->datalen-1] & ATP_STATUS_BIT_BASE_UPDATE) ||
> + !atp_is_geyser_3_4(dev))
> + memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));
> +
>
> if (dev->size_detect_done ||
> - atp_is_geyser_3(dev)) /* No 17" Macbooks (yet) */
> + atp_is_geyser_3_4(dev)) /* No 17" Macbooks (yet) */
> goto exit;
>
> /* 17" Powerbooks have extra X sensors */
> @@ -474,26 +525,47 @@
> goto exit;
> }
>
> + /* Just update the base values (i.e. touchpad in untouched state) */
> + if (dev->data[dev->datalen-1] & ATP_STATUS_BIT_BASE_UPDATE)
> + {
> + if (debug > 0) printk("appletouch: updated base values\n");
> +
> + memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));
> + goto exit;
> + }
> +
> for (i = 0; i < ATP_XSENSORS + ATP_YSENSORS; i++) {
> - /* accumulate the change */
> - signed char change = dev->xy_old[i] - dev->xy_cur[i];
> - dev->xy_acc[i] -= change;
> + /* calculate the change */
> + dev->xy_acc[i] = dev->xy_cur[i] - dev->xy_old[i];
> +
> + /* this is a round-robin value, so couple with that */
> + if (dev->xy_acc[i] > 127)
> + dev->xy_acc[i] -= 256;
> +
> + if (dev->xy_acc[i] < -127)
> + dev->xy_acc[i] += 256;
> +
> + /* Needed for the older Geyser */
> + if (!atp_is_geyser_3_4(dev))
> + {
> + /* store new 'untouched' value, if any new */
> + if (dev->xy_acc[i] < -1)
> + dev->xy_old[i] = dev->xy_cur[i];
> + }
>
> /* prevent down drifting */
> if (dev->xy_acc[i] < 0)
> dev->xy_acc[i] = 0;
> }
>
> - memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));
> -
> dbg_dump("accumulator", dev->xy_acc);
>
> x = atp_calculate_abs(dev->xy_acc, ATP_XSENSORS,
> ATP_XFACT, &x_z, &x_f);
> y = atp_calculate_abs(dev->xy_acc + ATP_XSENSORS, ATP_YSENSORS,
> ATP_YFACT, &y_z, &y_f);
> - key = dev->data[dev->datalen - 1] & 1;
> -
> + key = dev->data[dev->datalen - 1] & ATP_STATUS_BIT_BUTTON;
> +
> if (x && y) {
> if (dev->x_old != -1) {
> x = (dev->x_old * 3 + x) >> 2;
> @@ -538,16 +610,28 @@
> * work on Fountain touchpads.
> */
> if (!atp_is_fountain(dev)) {
> +
> + /* Button must not be pressed when entering suspend,
> + otherwise we will never release the button. */
> if (!x && !y && !key) {
> - dev->idlecount++;
> - if (dev->idlecount == 10) {
> - dev->valid = 0;
> +
> + /* Idle counter */
> + dev->idle_counter++;
> +
> + /* Wait for 10 more packages before suspending */
> + if (dev->idle_counter > 10) {
> +
> + /* Reset counter */
> + dev->idle_counter = 0;
> +
> + /* Prepare for device reset */
> schedule_work(&dev->work);
> +
> /* Don't resubmit urb here, wait for reinit */
> return;
> }
> } else
> - dev->idlecount = 0;
> + dev->idle_counter = 0;
> }
>
> exit:
> @@ -615,7 +699,7 @@
> dev->udev = udev;
> dev->input = input_dev;
> dev->overflowwarn = 0;
> - if (atp_is_geyser_3(dev))
> + if (atp_is_geyser_3_4(dev))
> dev->datalen = 64;
> else if (atp_is_geyser_2(dev))
> dev->datalen = 64;
> @@ -658,7 +742,7 @@
>
> set_bit(EV_ABS, input_dev->evbit);
>
> - if (atp_is_geyser_3(dev)) {
> + if (atp_is_geyser_3_4(dev)) {
> /*
> * MacBook have 20 X sensors, 10 Y sensors
> */
> @@ -701,6 +785,7 @@
> /* save our data pointer in this interface device */
> usb_set_intfdata(iface, dev);
>
> + /* initialize kernel work queue for re-init out of interrupt context */
> INIT_WORK(&dev->work, atp_reinit);
>
> return 0;
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________ Mactel-linux-devel mailing list Mac...@li... https://lists.sourceforge.net/lists/listinfo/mactel-linux-devel
|