aboutsummaryrefslogtreecommitdiffstats
path: root/src/capabilities.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-04-11 15:27:11 +0200
committerHenrik Rydberg <rydberg@euromail.se>2010-04-15 06:10:08 +0200
commit872fccb2f4214b99b82e74a8b9e90c9c5f0773c1 (patch)
tree36c10114e7c9624497916dd2499bbe8a606d87fb /src/capabilities.c
parenta493e814663ddcb6353673e366bf61285b1695b5 (diff)
downloadxorg-input-kobomultitouch-872fccb2f4214b99b82e74a8b9e90c9c5f0773c1.tar.gz
xorg-input-kobomultitouch-872fccb2f4214b99b82e74a8b9e90c9c5f0773c1.tar.bz2
xorg-input-kobomultitouch-872fccb2f4214b99b82e74a8b9e90c9c5f0773c1.zip
Add integrated button property to capabilities
The new Apple unibody macbooks have a trackpad with an integrated button, which needs special treatment. This patch tests the device for an integrated button and keeps the result in the capabilities struture. Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/capabilities.c')
-rw-r--r--src/capabilities.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/capabilities.c b/src/capabilities.c
index 804b626..065c810 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -47,6 +47,14 @@ static int getabs(struct input_absinfo *abs, int key, int fd)
return rc >= 0;
}
+static int has_integrated_button(const struct Capabilities *cap)
+{
+ static const int bcm5974_vmask_ibt = 1;
+ if (strcmp(cap->devname, "bcm5974"))
+ return 0;
+ return cap->devid.version & bcm5974_vmask_ibt;
+}
+
int read_capabilities(struct Capabilities *cap, int fd)
{
unsigned long evbits[nlongs(EV_MAX)];
@@ -85,6 +93,7 @@ int read_capabilities(struct Capabilities *cap, int fd)
SETABS(cap, position_y, absbits, ABS_MT_POSITION_Y, fd);
cap->has_mtdata = cap->has_position_x && cap->has_position_y;
+ cap->has_ibt = has_integrated_button(cap);
cap->xfuzz = cap->abs_position_x.fuzz;
cap->yfuzz = cap->abs_position_y.fuzz;
@@ -114,6 +123,7 @@ void output_capabilities(const struct Capabilities *cap)
ADDCAP(line, cap, middle);
ADDCAP(line, cap, right);
ADDCAP(line, cap, mtdata);
+ ADDCAP(line, cap, ibt);
ADDCAP(line, cap, touch_major);
ADDCAP(line, cap, touch_minor);
ADDCAP(line, cap, width_major);