1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3/* WARNING 4 * Switchable graphics not yet tested! 5 */ 6 7/* Hybrid graphics enable/disable GPIO bitfields */ 8Name (HYG1, 0x004A0000) 9Name (HYG2, 0x00020000) 10 11/* GPIO control port */ 12Name (GPCP, DEFAULT_GPIOBASE) 13 14/* GPIO control map */ 15OperationRegion (GPCM, SystemIO, GPCP, 0x3F) 16Field (GPCM, ByteAcc, NoLock, Preserve) { 17 GPUS, 32, 18 GPIS, 32, 19 Offset (0x0C), 20 GPLV, 32, 21 Offset (0x30), 22 GQUS, 32, 23 GQIS, 32, 24 GQLV, 32 25} 26 27Method(SHYB, 1) { 28 /* Switch hybrid graphics */ 29 if (Arg0 == 1) 30 { 31 /* Discrete graphics requested */ 32 GPLV |= HYG1 33 GQLV |= HYG2 34 } 35 else 36 { 37 /* Integrated graphics requested */ 38 Local0 = HYG1 ^ 0xFFFFFFFF 39 GPLV &= Local0 40 Local0 = HYG2 ^ 0xFFFFFFFF 41 GQLV &= Local0 42 } 43} 44 45Method (ATPX, 2, Serialized) { 46 /* Create local variables */ 47 Name (ATPR, Buffer (0x08) { 48 0x0, 0x0, 0x0, 0x0, 49 0x0, 0x0, 0x0, 0x0 50 }) 51 CreateWordField (ATPR, 0x00, SIZE) 52 CreateWordField (ATPR, 0x02, VERS) 53 CreateDWordField (ATPR, 0x04, FUNC) 54 55 /* Version request */ 56 if (Arg0 == 0x0) 57 { 58 /* Assemble and return version information */ 59 SIZE = 0x08 /* Response length */ 60 VERS = 0x01 /* Version number */ 61 FUNC = 0x0F /* Supported functions? */ 62 Return (ATPR) 63 } 64 65 /* Mux select */ 66 if (Arg0 == 0x2) 67 { 68 CreateByteField (Arg1, 0x02, PWST) 69 Local0 = PWST 70 Local0 &= 0x01 71 If (Local0) 72 { 73 /* Enable discrete graphics */ 74 SHYB(0x01) 75 } 76 else 77 { 78 /* Enable integrated graphics */ 79 SHYB(0x00) 80 } 81 } 82 Return(0) 83} 84