| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| /* WARNING |
| * Switchable graphics not yet tested! |
| */ |
| |
| /* Hybrid graphics enable/disable GPIO bitfields */ |
| Name (HYG1, 0x004A0000) |
| Name (HYG2, 0x00020000) |
| |
| /* GPIO control port */ |
| Name (GPCP, DEFAULT_GPIOBASE) |
| |
| /* GPIO control map */ |
| OperationRegion (GPCM, SystemIO, GPCP, 0x3F) |
| Field (GPCM, ByteAcc, NoLock, Preserve) { |
| GPUS, 32, |
| GPIS, 32, |
| Offset (0x0C), |
| GPLV, 32, |
| Offset (0x30), |
| GQUS, 32, |
| GQIS, 32, |
| GQLV, 32 |
| } |
| |
| Method(SHYB, 1) { |
| /* Switch hybrid graphics */ |
| if (Arg0 == 1) |
| { |
| /* Discrete graphics requested */ |
| GPLV |= HYG1 |
| GQLV |= HYG2 |
| } |
| else |
| { |
| /* Integrated graphics requested */ |
| Local0 = HYG1 ^ 0xFFFFFFFF |
| GPLV &= Local0 |
| Local0 = HYG2 ^ 0xFFFFFFFF |
| GQLV &= Local0 |
| } |
| } |
| |
| Method (ATPX, 2, Serialized) { |
| /* Create local variables */ |
| Name (ATPR, Buffer (0x08) { |
| 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0 |
| }) |
| CreateWordField (ATPR, 0x00, SIZE) |
| CreateWordField (ATPR, 0x02, VERS) |
| CreateDWordField (ATPR, 0x04, FUNC) |
| |
| /* Version request */ |
| if (Arg0 == 0x0) |
| { |
| /* Assemble and return version information */ |
| SIZE = 0x08 /* Response length */ |
| VERS = 0x01 /* Version number */ |
| FUNC = 0x0F /* Supported functions? */ |
| Return (ATPR) |
| } |
| |
| /* Mux select */ |
| if (Arg0 == 0x2) |
| { |
| CreateByteField (Arg1, 0x02, PWST) |
| Local0 = PWST |
| Local0 &= 0x01 |
| If (Local0) |
| { |
| /* Enable discrete graphics */ |
| SHYB(0x01) |
| } |
| else |
| { |
| /* Enable integrated graphics */ |
| SHYB(0x00) |
| } |
| } |
| Return(0) |
| } |