summaryrefslogtreecommitdiff
path: root/config/coreboot/default/patches/0021-ec-dell-mec5035-Add-command-to-enable-disable-radios.patch
blob: f3dad1e191c51b4c3c0ac114ee4ab87469248294 (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
From f4c41a930b777128bd418cbae525ba509e5f19ff Mon Sep 17 00:00:00 2001
From: Nicholas Chin <nic.c3.14@gmail.com>
Date: Sun, 27 Aug 2023 17:36:36 -0600
Subject: [PATCH 1/3] ec/dell/mec5035: Add command to enable/disable radios

These were determined by sniffing the LPC bus while toggling the
hardware wireless switch on the Latitude E6400. To differentiate devices
options in the vendor BIOS to change which radios the switch controlled
were used.

Change-Id: I173dc197d63cda232dd7ede0cb798ab0a364482b
Signed-off-by: Nicholas Chin <nic.c3.14@gmail.com>
---
 src/ec/dell/mec5035/mec5035.c | 9 +++++++++
 src/ec/dell/mec5035/mec5035.h | 8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/src/ec/dell/mec5035/mec5035.c b/src/ec/dell/mec5035/mec5035.c
index 8da11e5b1c..e0335a4635 100644
--- a/src/ec/dell/mec5035/mec5035.c
+++ b/src/ec/dell/mec5035/mec5035.c
@@ -84,6 +84,15 @@ u8 mec5035_mouse_touchpad(u8 setting)
 	return buf[0];
 }
 
+void mec5035_radio_enable(enum mec5035_radio_dev dev, u8 on)
+{
+	/* From LPC traces and userspace testing with other values,
+	   the second byte has to be 2 for an unknown reason. */
+	u8 buf[3] = {dev, 2, on};
+	write_mailbox_regs(buf, 2, 3);
+	ec_command(CMD_RADIO_EN);
+}
+
 void mec5035_early_init(void)
 {
 	/* If this isn't sent the EC shuts down the system after about 15
diff --git a/src/ec/dell/mec5035/mec5035.h b/src/ec/dell/mec5035/mec5035.h
index e7a05b64d4..16512e2cc2 100644
--- a/src/ec/dell/mec5035/mec5035.h
+++ b/src/ec/dell/mec5035/mec5035.h
@@ -16,8 +16,16 @@
 
 #define CMD_CPU_OK	0xc2
 
+#define CMD_RADIO_EN	0x2b
+enum mec5035_radio_dev {
+	RADIO_WLAN = 0,
+	RADIO_WWAN = 1,
+	RADIO_WPAN = 2,
+};
+
 u8 mec5035_mouse_touchpad(u8 setting);
 void mec5035_cpu_ok(void);
 void mec5035_early_init(void);
+void mec5035_radio_enable(enum mec5035_radio_dev device, u8 on);
 
 #endif /* _EC_DELL_MEC5035_H_ */
-- 
2.42.0