aboutsummarylogtreecommitdiffstats
path: root/0002-Add-support-for-Intel-Management-Engine-bus.patch
blob: fac80fdfc983eb198748df08c69d58b6c90bca48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
From ad0811c09ab7c1e4160a9ff5a8de5cf0f46fa374 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 1 Jun 2019 21:17:15 +0200
Subject: [PATCH 02/12] Add support for Intel Management Engine bus

Add support for devices connected via the Intel Management Engine (MEI).
This is required to support IPTS based devices, such as (among others)
the Microsoft Surface Books, Surface Pro 5 and 6, and Surface Laptops.
---
 libwacom/libwacom-database.c | 4 ++++
 libwacom/libwacom.c          | 5 +++++
 libwacom/libwacom.h          | 1 +
 test/test-tablet-validity.c  | 1 +
 test/test_data_files.py      | 2 +-
 5 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c
index 96aaa5e..cc3ecfd 100644
--- a/libwacom/libwacom-database.c
+++ b/libwacom/libwacom-database.c
@@ -130,6 +130,8 @@ bus_from_str (const char *str)
 		return WBUSTYPE_I2C;
 	if (g_str_equal(str, "virt"))
 		return WBUSTYPE_VIRTUAL;
+	if (strcmp (str, "mei") == 0)
+		return WBUSTYPE_MEI;
 	return WBUSTYPE_UNKNOWN;
 }
 
@@ -150,6 +152,8 @@ bus_to_str (WacomBusType bus)
 		return "i2c";
 	case WBUSTYPE_VIRTUAL:
 		return "virt";
+	case WBUSTYPE_MEI:
+		return "mei";
 	}
 	g_assert_not_reached ();
 }
diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c
index d9b8a22..e3364f4 100644
--- a/libwacom/libwacom.c
+++ b/libwacom/libwacom.c
@@ -153,6 +153,10 @@ get_bus_vid_pid (GUdevDevice  *device,
 		*bus = WBUSTYPE_VIRTUAL;
 		retval = TRUE;
 		break;
+	case 68:
+		*bus = WBUSTYPE_MEI;
+		retval = TRUE;
+		break;
 	}
 
 out:
@@ -822,6 +826,7 @@ static void print_match(int fd, const WacomMatch *match)
 		case WBUSTYPE_SERIAL:		bus_name = "serial";	break;
 		case WBUSTYPE_I2C:		bus_name = "i2c";	break;
 		case WBUSTYPE_VIRTUAL:		bus_name = "virt";	break;
+		case WBUSTYPE_MEI:		bus_name = "mei";	break;
 		case WBUSTYPE_UNKNOWN:		bus_name = "unknown";	break;
 		default:			g_assert_not_reached(); break;
 	}
diff --git a/libwacom/libwacom.h b/libwacom/libwacom.h
index b184ed7..5cd6736 100644
--- a/libwacom/libwacom.h
+++ b/libwacom/libwacom.h
@@ -150,6 +150,7 @@ typedef enum {
 	WBUSTYPE_BLUETOOTH,	/**< Bluetooth tablet */
 	WBUSTYPE_I2C,		/**< I2C tablet */
 	WBUSTYPE_VIRTUAL,	/**< Virtual (uinput) tablet */
+	WBUSTYPE_MEI,		/**< MEI */
 } WacomBusType;
 
 /**
diff --git a/test/test-tablet-validity.c b/test/test-tablet-validity.c
index da5fe07..6b45597 100644
--- a/test/test-tablet-validity.c
+++ b/test/test-tablet-validity.c
@@ -178,6 +178,7 @@ assert_vidpid(WacomBusType bus, int vid, int pid)
 		case WBUSTYPE_BLUETOOTH:
 		case WBUSTYPE_I2C:
 		case WBUSTYPE_VIRTUAL:
+		case WBUSTYPE_MEI:
 			g_assert_cmpint(vid, >, 0);
 			g_assert_cmpint(pid, >, 0);
 			break;
diff --git a/test/test_data_files.py b/test/test_data_files.py
index 4b21b6a..04a1310 100755
--- a/test/test_data_files.py
+++ b/test/test_data_files.py
@@ -41,7 +41,7 @@ def test_device_match(tabletfile):
             continue
 
         bus, vid, pid = match.split(':')[:3]  # skip the name part of the match
-        assert bus in ['usb', 'bluetooth', 'i2c', 'serial', 'virt'], f'{tabletfile}: unknown bus type'
+        assert bus in ['usb', 'bluetooth', 'i2c', 'serial', 'virt', 'mei'], f'{tabletfile}: unknown bus type'
         assert re.match('[0-9a-f]{4}', vid), f'{tabletfile}: {vid} must be lowercase hex'
         assert re.match('[0-9a-f]{4}', pid), f'{tabletfile}: {pid} must be lowercase hex'
 
-- 
2.36.1