1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3Scope (\_SB) 4{ 5 Device (UCSI) 6 { 7 Name (_HID, EisaId("USBC000")) 8 Name (_CID, Package { "GOOG000E", EisaId ("PNP0CA0") }) 9 Name (_DDN, "Wilco EC UCSI") 10 Name (_UID, 1) 11 Name (_STA, 0xf) 12 13 /* Value written to EC control register to start UCSI command */ 14 Name (UCMD, 0xE0) 15 16 /* Shared memory fields are defined in the SSDT */ 17 External (VER0, FieldUnitObj) 18 External (VER1, FieldUnitObj) 19 External (CCI0, FieldUnitObj) 20 External (CCI1, FieldUnitObj) 21 External (CCI2, FieldUnitObj) 22 External (CCI3, FieldUnitObj) 23 External (CTL0, FieldUnitObj) 24 External (CTL1, FieldUnitObj) 25 External (CTL2, FieldUnitObj) 26 External (CTL3, FieldUnitObj) 27 External (CTL4, FieldUnitObj) 28 External (CTL5, FieldUnitObj) 29 External (CTL6, FieldUnitObj) 30 External (CTL7, FieldUnitObj) 31 External (MGI0, FieldUnitObj) 32 External (MGI1, FieldUnitObj) 33 External (MGI2, FieldUnitObj) 34 External (MGI3, FieldUnitObj) 35 External (MGI4, FieldUnitObj) 36 External (MGI5, FieldUnitObj) 37 External (MGI6, FieldUnitObj) 38 External (MGI7, FieldUnitObj) 39 External (MGI8, FieldUnitObj) 40 External (MGI9, FieldUnitObj) 41 External (MGIA, FieldUnitObj) 42 External (MGIB, FieldUnitObj) 43 External (MGIC, FieldUnitObj) 44 External (MGID, FieldUnitObj) 45 External (MGIE, FieldUnitObj) 46 External (MGIF, FieldUnitObj) 47 External (MGO0, FieldUnitObj) 48 External (MGO1, FieldUnitObj) 49 External (MGO2, FieldUnitObj) 50 External (MGO3, FieldUnitObj) 51 External (MGO4, FieldUnitObj) 52 External (MGO5, FieldUnitObj) 53 External (MGO6, FieldUnitObj) 54 External (MGO7, FieldUnitObj) 55 External (MGO8, FieldUnitObj) 56 External (MGO9, FieldUnitObj) 57 External (MGOA, FieldUnitObj) 58 External (MGOB, FieldUnitObj) 59 External (MGOC, FieldUnitObj) 60 External (MGOD, FieldUnitObj) 61 External (MGOE, FieldUnitObj) 62 External (MGOF, FieldUnitObj) 63 64 Method (INIT) 65 { 66 /* Read UCSI version from EC into shared memory */ 67 ^VER0 = R (^^UVR0) 68 ^VER1 = R (^^UVR1) 69 } 70 71 Method (R, 1, Serialized, 2){ 72 Local0 = \_SB.PCI0.LPCB.EC0.R(Arg0) 73 Return (Local0) 74 } 75 76 Method (W, 2, Serialized, 2){ 77 \_SB.PCI0.LPCB.EC0.W(Arg0, Arg1) 78 } 79 80 Method (_DSM, 4, Serialized) 81 { 82 If (Arg0 != ToUUID ("6f8398c2-7ca4-11e4-ad36-631042b5008f")) { 83 Return (Buffer (1) { 0 }) 84 } 85 86 Switch (ToInteger (Arg2)) 87 { 88 Case (0) 89 { 90 Return (Buffer (1) { 0x07 }) 91 } 92 Case (1) 93 { 94 /* Write Message Out */ 95 W (^^UMO0, ^MGO0) 96 W (^^UMO1, ^MGO1) 97 W (^^UMO2, ^MGO2) 98 W (^^UMO3, ^MGO3) 99 W (^^UMO4, ^MGO4) 100 W (^^UMO5, ^MGO5) 101 W (^^UMO6, ^MGO6) 102 W (^^UMO7, ^MGO7) 103 W (^^UMO8, ^MGO8) 104 W (^^UMO9, ^MGO9) 105 W (^^UMOA, ^MGOA) 106 W (^^UMOB, ^MGOB) 107 W (^^UMOC, ^MGOC) 108 W (^^UMOD, ^MGOD) 109 W (^^UMOE, ^MGOE) 110 W (^^UMOF, ^MGOF) 111 112 /* Write Control */ 113 W (^^UCL0, ^CTL0) 114 W (^^UCL1, ^CTL1) 115 W (^^UCL2, ^CTL2) 116 W (^^UCL3, ^CTL3) 117 W (^^UCL4, ^CTL4) 118 W (^^UCL5, ^CTL5) 119 W (^^UCL6, ^CTL6) 120 W (^^UCL7, ^CTL7) 121 122 /* Start EC Command */ 123 W (^^UCTL, ^UCMD) 124 } 125 Case (2) 126 { 127 /* Read Message In */ 128 RMSG() 129 } 130 } 131 Return (Buffer (1) { 0 }) 132 } 133 134 Method (RMSG, 0, Serialized){ 135 /* Read Message In */ 136 ^MGI0 = R (^^UMI0) 137 ^MGI1 = R (^^UMI1) 138 ^MGI2 = R (^^UMI2) 139 ^MGI3 = R (^^UMI3) 140 ^MGI4 = R (^^UMI4) 141 ^MGI5 = R (^^UMI5) 142 ^MGI6 = R (^^UMI6) 143 ^MGI7 = R (^^UMI7) 144 ^MGI8 = R (^^UMI8) 145 ^MGI9 = R (^^UMI9) 146 ^MGIA = R (^^UMIA) 147 ^MGIB = R (^^UMIB) 148 ^MGIC = R (^^UMIC) 149 ^MGID = R (^^UMID) 150 ^MGIE = R (^^UMIE) 151 ^MGIF = R (^^UMIF) 152 153 /* Read Status */ 154 ^CCI0 = R (^^UCI0) 155 ^CCI1 = R (^^UCI1) 156 ^CCI2 = R (^^UCI2) 157 ^CCI3 = R (^^UCI3) 158 } 159 } 160} 161