@@ -95,13 +95,19 @@ IOReturn AlcEnabler::performPowerChange(IOService *hdaDriver, ALCAudioDevicePowe
95
95
DBGLOG (" alc" , " performPowerChange %s from %d to %d in from sleep %d hdef %d detect %d" ,
96
96
safeString (hdaDriver->getName ()), from, to, callbackAlc->receivedSleepEvent , valid, callbackAlc->hasHDAConfigDefault );
97
97
ret = callbackAlc->orgPerformPowerChange (hdaDriver, from, to, timer);
98
- if (valid && callbackAlc->hasHDAConfigDefault == WakeVerbMode::Enable && callbackAlc-> hdaCodecInstance ) {
98
+ if (valid && callbackAlc->hasHDAConfigDefault == WakeVerbMode::Enable) {
99
99
if (to == ALCAudioDeviceSleep) {
100
100
callbackAlc->receivedSleepEvent = true ;
101
101
} else if (callbackAlc->receivedSleepEvent &&
102
102
(to == ALCAudioDeviceIdle || to == ALCAudioDeviceActive)) {
103
- auto forceRet = callbackAlc->orgInitializePinConfig (callbackAlc->hdaCodecInstance , ADDPR (selfInstance));
104
- SYSLOG_COND (forceRet != kIOReturnSuccess , " alc" , " force config reinitialize returned %08X" , forceRet);
103
+ auto parent = OSDynamicCast (IOService, hdaDriver->getParentEntry (gIOServicePlane ));
104
+ if (parent) {
105
+ DBGLOG (" alc" , " performPowerChange %s forcing wake verbs on %s" , safeString (hdaDriver->getName ()), safeString (parent->getName ()));
106
+ auto forceRet = callbackAlc->orgInitializePinConfig (parent, ADDPR (selfInstance));
107
+ SYSLOG_COND (forceRet != kIOReturnSuccess , " alc" , " force config reinitialize returned %08X" , forceRet);
108
+ } else {
109
+ SYSLOG (" alc" , " cannot get hda driver parent for wake" );
110
+ }
105
111
callbackAlc->receivedSleepEvent = false ;
106
112
}
107
113
}
@@ -115,13 +121,8 @@ IOReturn AlcEnabler::initializePinConfig(IOService *hdaCodec, IOService *configD
115
121
IOReturn ret = kIOReturnError ;
116
122
if (callbackAlc && callbackAlc->orgInitializePinConfig && configDevice) {
117
123
bool valid = isAnalogAudio (hdaCodec);
118
- if (valid) {
119
- // Preserve codec instance for sleep invocations
120
- callbackAlc->hdaCodecInstance = hdaCodec;
121
- }
122
-
123
- DBGLOG (" alc" , " initializePinConfig received hda " PRIKADDR " , config " PRIKADDR " config name %s, detect %d valid %d" , CASTKADDR (hdaCodec),
124
- CASTKADDR (configDevice), configDevice ? safeString (configDevice->getName ()) : " (null config)" , callbackAlc->hasHDAConfigDefault , valid);
124
+ DBGLOG (" alc" , " initializePinConfig %s received hda " PRIKADDR " , config " PRIKADDR " config name %s, detect %d valid %d" , safeString (hdaCodec->getName ()),
125
+ CASTKADDR (hdaCodec), CASTKADDR (configDevice), configDevice ? safeString (configDevice->getName ()) : " (null config)" , callbackAlc->hasHDAConfigDefault , valid);
125
126
126
127
if (valid && callbackAlc->hasHDAConfigDefault == WakeVerbMode::Detect) {
127
128
uint32_t analogCodec = 0 ;
@@ -273,7 +274,7 @@ void AlcEnabler::processKext(KernelPatcher &patcher, size_t index, mach_vm_addre
273
274
}
274
275
275
276
if (info->platformNum > 0 || info->layoutNum > 0 ) {
276
- DBGLOG (" alc" , " will route callbacks resource loading callbacks" );
277
+ DBGLOG (" alc" , " will route resource loading callbacks" );
277
278
progressState |= ProcessingState::CallbacksWantRouting;
278
279
}
279
280
0 commit comments