blob: 5988a66bbd19aff8fa4aeabdf806e4d5297ecd12 [file] [log] [blame]
Angel Pons62079a52020-04-05 13:21:34 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Matt DeVillier19e70602018-07-08 19:22:05 -05002
3#include <variant/gpio.h>
4
5#define BOARD_DIG_I2C_ADDR 0x09
6#define BOARD_DIG_IRQ DIG_INT_L
7#define BOARD_DIG_PDCT DIG_PDCT_L
8#define BOARD_DIG_EJECT GPE_DIG_EJECT
9
10Scope (\_SB)
11{
12 Device (PENH)
13 {
14 Name (_HID, "PRP0001")
15
16 Name (_CRS, ResourceTemplate () {
17 GpioIo (Exclusive, PullNone, 0, 0, IoRestrictionInputOnly,
18 "\\_SB.PCI0.GPIO", 0, ResourceConsumer) { GPIO_DIG_EJECT }
19 })
20
21 Name (_DSD, Package () {
22 ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
23 Package () {
24 Package () {
25 "compatible",
26 Package () { "gpio-keys"}
27 },
28 }
29 })
30
31 Device (EJCT)
32 {
Felix Singerfa06bcb2022-12-26 09:32:47 +010033 Name (_ADR, 0)
Matt DeVillier19e70602018-07-08 19:22:05 -050034
35 Name (_DSD, Package () {
36 ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
37 Package () {
38 /* SW_PEN_INSERTED */
39 Package () { "linux,code", 0xf },
40 /* EV_SW type */
41 Package () { "linux,input-type", 0x5 },
42 Package () { "label", "pen_eject" },
43 Package () { "gpios",
44 Package () {
45 ^^PENH, 0, 0, 1 /* inserted active low */
46 }
47 },
48 }
49 })
50 }
51 }
52}
53
54Scope (\_SB.PCI0.I2C2)
55{
Matt DeVillier19e70602018-07-08 19:22:05 -050056 Device (DIGI)
57 {
Matt DeVillier78a6cae2021-04-01 07:04:04 -050058 Name (_HID, "WCOM005C")
Matt DeVillier19e70602018-07-08 19:22:05 -050059 Name (_CID, "PNP0C50")
60 Name (_UID, 1)
61 Name (_S0W, 4)
62 Name (_PRW, Package () { BOARD_DIG_EJECT, 3 })
63
64 Name (_CRS, ResourceTemplate ()
65 {
66 I2cSerialBus (
67 BOARD_DIG_I2C_ADDR,
68 ControllerInitiated,
69 400000,
70 AddressingMode7Bit,
71 "\\_SB.PCI0.I2C2",
72 )
73 Interrupt (ResourceConsumer, Level, ActiveLow)
74 {
75 BOARD_DIG_IRQ
76 }
77 })
78
79 /*
80 * Function 1 returns the offset in the I2C device register
81 * address space at which the HID descriptor can be read.
82 *
83 * Arg0 = UUID
84 * Arg1 = revision number of requested function
85 * Arg2 = requested function number
86 * Arg3 = function specific parameter
87 */
88 Method (_DSM, 4, NotSerialized)
89 {
Felix Singer49384da2022-12-11 23:21:04 +010090 If (Arg0 == ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de")) {
Felix Singerfa06bcb2022-12-26 09:32:47 +010091 If (Arg2 == 0) {
Matt DeVillier19e70602018-07-08 19:22:05 -050092 /* Function 0 - Query */
Felix Singerdfbb6342022-12-26 08:39:35 +010093 If (Arg1 == 1) {
Matt DeVillier19e70602018-07-08 19:22:05 -050094 /* Revision 1 Function 1 */
Felix Singerdfbb6342022-12-26 08:39:35 +010095 Return (Buffer (1) { 0x03 })
Matt DeVillier19e70602018-07-08 19:22:05 -050096 } Else {
97 /* Revision 2+ not supported */
Felix Singerdfbb6342022-12-26 08:39:35 +010098 Return (Buffer (1) { 0x00 })
Matt DeVillier19e70602018-07-08 19:22:05 -050099 }
Felix Singerdfbb6342022-12-26 08:39:35 +0100100 } ElseIf (Arg2 == 1) {
Matt DeVillier19e70602018-07-08 19:22:05 -0500101 /* Function 1 - HID Descriptor Addr */
102 Return (0x0001)
103 } Else {
104 /* Function 2+ not supported */
Felix Singerdfbb6342022-12-26 08:39:35 +0100105 Return (Buffer (1) { 0x00 })
Matt DeVillier19e70602018-07-08 19:22:05 -0500106 }
107 } Else {
Felix Singerdfbb6342022-12-26 08:39:35 +0100108 Return (Buffer (1) { 0x00 })
Matt DeVillier19e70602018-07-08 19:22:05 -0500109 }
110 }
111 }
112}