Modificaciones avanzadas de DSDT: botón de encendido (PWRB), pantalla negra al despertar, reposo al cerrar la tapa y teclas rápidas ASUS
Compendio de modificaciones prácticas de la tabla DSDT para habilitar el menú de apagado con el botón físico de encendido (PWRB), corregir la pantalla en negro tras despertar del reposo, activar el reposo al cerrar la pantalla (Clamshell) y habilitar los botones de función en portátiles ASUS.
- Autor principal
- @pentiumpc Publicado el 2009-01-19
- Colección
- Arquitectura Base OSx86 10.X y Arranque
- Registro histórico
- 625,378 lecturas históricas · 101 notas de campo seleccionadas (de 107 mensajes) · 2009-01-19 – 2013-01-21
- Voces acreditadas (32)
- @uman (21)@kizwan (18)@pentiumpc (8)@Slither2008 (6)@candykane (6)@richarda (5)@THeKiNG (4)@breakky (4)@Thireus (3)@Alexaar (2)@The Edge3000 (2)@Gurruwiwi (2)@EnzoFX (2)@Sweaty (2)@ping99 (2)@Nameci (2)+16 more
- Referencia de hardware
- Workstation Coolers & Thermal Gear ↗ Gigabyte Motherboards ↗ Laptop RAM & SSD Upgrades ↗
Existen muchos hilos sobre cómo instalar OS X utilizando la sustitución de tabla DSDT (DSDT override); una vez configurado, puedes modificar tu DSDT para corregir fallos y activar diversas funciones nativas.
Cosas que puedes activar o corregir:
1. Activar el botón de encendido (PWRB — Power Button).
2. Corregir el problema de la pantalla en negro al despertar del reposo (System Wake).
3. Activar el reposo al cerrar la tapa (Clamshell sleep) junto con Clamshell.kext (descontinuado por superhai).
4. Activar las teclas de acceso rápido (Hotkeys) en equipos ASUS.
Corrección por confirmar:
1. Problema de reposo en puertos USB (funciona en mi EeePC 1000H, pero no en mi placa DS3L).
Eso resume lo que descubrí el pasado fin de semana; si tienen más modificaciones para compartir, no duden en aportarlas en este hilo.
Todos estos parches han sido probados y funcionan en mis equipos; tendrás que ponerlos a prueba si tus especificaciones son distintas a las mías.
Puedes utilizar estos hallazgos como referencia para adaptar tus propias correcciones.
Notas de campo y pruebas de la comunidad
101 respuestas técnicas seleccionadas de 107 intervenciones originales
Activar el botón de encendido (Power Button)
Cambia _HID por _CID:
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C"))
Name (_UID, 0xAA)
Name (_STA, 0x0B)
}
Este truco lo saqué de alguna web, ahora mismo no recuerdo cuál (el mérito es de su autor/a).
Esto activará el botón físico de encendido para que muestre en pantalla el menú de apagado de OS X.
Corregir la pantalla en negro al despertar del reposo
En el EeePC 1000H, la pantalla se queda en negro al despertar del reposo y hay que pulsar la tecla de brillo para que vuelva a encenderse. La solución actual consiste en usar SleepWatcher y Reggie para escribir directamente en el registro y encenderla.
Modificando la DSDT para restablecer el brillo automáticamente al despertar se soluciona este problema de raíz:
Method (WAK, 1, NotSerialized) //WAKE up
{
\_SB.PCI0.SBRG.EC0.EC0W (Arg0)
\_SB.PCI0.NWAK (Arg0)
\_SB.PCI0.SBRG.SWAK (Arg0)
LPWK (Arg0)
Store(\_SB.ATKD.PBLG,local0) //---> Get Brightness level from NVS
\_SB.ATKD.PBLS(local0) //---> Set Brightness level.
}
Añade esas dos últimas líneas para restaurar el nivel de brillo al despertar.
El nombre del método puede variar en tu equipo; busca algo equivalente en tu DSDT.
También tendrás que averiguar qué métodos concretos de tu DSDT leen y ajustan el brillo.
Esta misma técnica puede servir para resolver otros problemas similares al volver del reposo.
Reposo al cerrar la pantalla (Clamshell sleep)
La mayoría de los portátiles no entran en reposo al cerrar la tapa (LID); intenté buscar una solución por DSDT pero no encontré ninguna (Google es mi mejor amigo), así que escribí una propia para solucionar el mío.
Si alguien conoce un método mejor o alternativo, que me lo diga, por favor. Gracias.
Device (LID0)
{
Name (_HID, EisaId ("PNP0C0D")) //LID detection
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
Name (LIDS, One)
Method (_LID, 0, NotSerialized)
{
Store (^^PCI0.SBRG.EC0.SF13, LIDS) //LID register
XOr (LIDS, One, Local0)
IF (Local0) //if LID is closed
{
Notify (SLPB, 0x80) //Set system to sleep
}
Return (LIDS)
}
El dispositivo LID debería ser fácil de localizar; solo hay que añadir una condición que envíe la notificación de reposo al sistema.
En la mayoría de los equipos (creo), es el sistema operativo el que decide dormir el ordenador al recibir el evento, pero como OS X no interpreta la notificación predeterminada que envía el dispositivo LID, lo resolví directamente a nivel de hardware/ACPI.
Activar las teclas rápidas (Hotkeys) en portátiles ASUS
Si examinas tu árbol IORegistry y ves un dispositivo llamado "ASUS010" o "ATKD", significa que tienes un controlador de teclas rápidas de Asus y que es posible hacer funcionar las combinaciones de teclas FN+Fx.
Primero hay que averiguar qué notificaciones ACPI envía cada combinación de teclas: para ello programé un kext que registra y analiza los códigos de notificación y luego busqué en el ámbito _GPE la interrupción correspondiente. Una vez mapeado todo eso, añadí código en la DSDT para conmutar (encender y apagar) las distintas funciones.
Ahora puedo encender y apagar la retroiluminación de la pantalla, el Wi-Fi, el Bluetooth, el lector de tarjetas y la cámara web, además de ajustar el brillo, etc. Todavía estoy investigando algunas funciones más, como la tecla para conmutar al monitor externo o el cambio de frecuencia FSB.
Código de ejemplo:
Method (CAMS, 1, Serialized) //Camera Set
{
Return (OCMS (Arg0))
}
Method (CAMR, 0, Serialized) //Camera toggle : added
{
Store (OCMG , Local0)
XOr (Local0, One, Local0)
Return (OCMS (Local0))
}
Method (CAMG, 0, Serialized) //Camera Set
{
Return (OCMG )
}
El código anterior es muy ilustrativo: sirve para encender y apagar la cámara web.
Method (_Q2A, 0, NotSerialized) //Camera
{
^^^^ATKD.CAMR //Toggle Camera
ATKN (0x1D) //notify ATKD
}
Y este es el manejador de interrupción encargado de atender el evento.
Corrección del reposo en los puertos USB
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (_CID, EisaId ("PNP0C01"))
Name (CRS, ResourceTemplate
{
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y03)
})
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Hacer que el método _STA de HPET devuelva el estado 0x0F parece haber solucionado mi problema con los puertos USB tras el reposo (antes se perdían los puertos USB al despertar y dejaba de funcionar la conexión en caliente / hot-plug).
Aún no está verificado al 100 % porque no he intentado reproducir el fallo a fondo (no está entre mis prioridades ahora mismo), pero mi equipo corre 10.5.6 vanilla con Decrypter, SMBIOS de AnV, PS2Nub + PS2Controller y OpenHaltRestart.
Sin ningún parche de IOUSBFamily (esos me colgaban el sistema).
Actualización: DSDT Patcher ya corrige esto automáticamente con el parámetro -newHPET, y tras aplicar el parche tampoco hace falta usar Disabler.kext.
He estado revisando a fondo el archivo dsdt.aml de mi Asus EeePC 1000H para intentar comprender mejor los métodos colgados de _SB.
¿Os parece correcta esta interpretación?
Método - Descripción
PBL (S/G) = Retroiluminación (BackLight)
CAM (S/G) = Cámara web
CRD (S/G) = Lector de tarjetas
WLD (S/G) = Red inalámbrica (Wireless LAN) Set / Get
CFV (S/G) = Velocidad de FSB y voltaje Set / Get
CAM (S/G) = Cámara web Set / Get
BTH (S/G) = Bluetooth Set / Get
SDSP = Cambiar/alternar pantalla
CRD (S/G) = Lector de tarjetas Set / Get
HDPS = ?
PBP (S/G) =
M3G (S/G) = Módem 3G móvil
HWCF = ?
GNVS = Obtener volumen (estoy seguro de que esto está mal; ¿probablemente lee y escribe referencias de memoria?)
SNVS = Ajustar volumen (estoy seguro de que esto está mal; ¿probablemente lee y escribe referencias de memoria?)
He conseguido apagar y encender tanto la cámara web como el Bluetooth usando la tecla especial adicional (0x1d). Intenté hacer funcionar también el Wi-Fi, pero vi que la llamada al método es algo más compleja que un simple ATKN(valor).
Parece tener cierta lógica interna para decidir si pasa el valor 0x11 o 0x10; de momento solo consigo que se apague y luego ya no vuelve a encenderse (seguramente me falte implementar esa condición lógica).
También puedo confirmar que el kext de prueba para Asus que programaste registra correctamente todos los botones, salvo que al pulsar la tecla Fn de apagar el Wi-Fi muestra un aviso sobre un método no mapeado y acto seguido empiezan a salir mensajes diciendo que el Bluetooth o el Wi-Fi no pueden entrar en estado de ahorro de energía. En cuanto vuelvo a pulsar la tecla Fn del Wi-Fi, los mensajes cesan.
¿Qué opinas de todo esto?
Saludos,
Steve.
Aquí dejo una copia de los códigos de evento con los que me estoy guiando:
# Botones plateados
KEY_SILVER1="0000001a" # Apagar pantalla (Blank)
KEY_SILVER2="0000001b" # Cambiar resolución
KEY_SILVER3="0000001c" # Usuario 1
KEY_SILVER4="0000001d" # Usuario 2
# Combinaciones Fn+F?
KEY_Fn_F1="00000080" # Reposo (Sleep)
KEY_Fn_F2=("00000010" "00000011") # Conmutar Wi-Fi
KEY_Fn_F5="0000002*" # Bajar brillo
KEY_Fn_F6="0000002*" # Subir brillo
KEY_Fn_F7="00000016" # Apagar retroiluminación
KEY_Fn_F8=("00000030" "00000031" "00000032") # XRandR (Pantalla externa)
KEY_Fn_F9="00000012" # Administrador de tareas
KEY_Fn_F10="00000013" # Silenciar (Mute)
KEY_Fn_F11="00000014" # Bajar volumen
KEY_Fn_F12="00000015" # Subir volumen
# Otros eventos ACPI
POWER_AC="00000001"
POWER_BAT="00000000"
Si alguien quiere asignar funciones personalizadas a Fn+F3 y Fn+F4, creo que ejecutar acpi_listen en Linux sería la mejor opción para capturar esos códigos.
Sigo intentando entender por qué las funciones de las teclas de volumen no son tan fáciles de localizar a simple vista en la DSDT.
FN+F1 no devuelve ningún código; enviar Notify (SLPB, 0x80) pone el sistema en reposo.
FN+F5 y FN+F6 devuelven valores entre 0x20 y 0x2F = 15 niveles de brillo.
FN+F8 devuelve el código del siguiente modo de pantalla: LCD interno, VGA externo o escritorio extendido en ambos.
La conexión del adaptador de corriente (AC) devuelve 0x50.
El paso a batería devuelve 0x51.
La mayoría de estas teclas necesitan un controlador (driver) que las gestione.
Ahora mismo estoy hasta arriba de trabajo en mi empleo diario, así que he tenido que pausar el desarrollo del controlador en el que estaba trabajando.
Tengo una versión en fase beta; podéis probarla libremente:
ASUS Hotkey Enabler (media fire.com/download.php?4lnemnhjnzt)
Este paquete reúne varias soluciones para habilitar las teclas de función, elimina la necesidad de usar SleepWatcher, asigna el reposo profundo a FN+F1 y el apagado de pantalla/reposo al cerrar la tapa.
Podéis personalizar la mayoría de las teclas para que ejecuten scripts propios modificando los valores del archivo plist. Llevo un tiempo usándolo en mi equipo y funciona francamente bien.
Por favor, haced una copia de seguridad de vuestro "DSDT.aml" antes de instalarlo.
@Slither2008Method - Description CFV (S/G) = FSB Speed & Voltage Set / Get SDSP = Switch/Swap Display HDPS = ? PBP (S/G) = HWCF = ? GNVS = Get Volume (I'm sure this is wrong. Probably gets and sets memory references?) SNVS = Set Volume (I'm sure this is wrong. Probably gets and sets memory references?) .
CFV = Ajusta únicamente la frecuencia del FSB… no tiene nada que ver con el voltaje.
HDP/PBP = Conmuta entre el LCD interno, el monitor externo o ambos. Se puede invocar, pero requiere refrescar la resolución en Mac para que surta efecto y resulta bastante engorroso.
HWCF = Desconocido.
G/S NVS = Leer o escribir en la NVS (Non-Volatile SRAM… de la BIOS, creo).
El método BIOS devuelve la versión actual de la BIOS.
INIT inicializa el dispositivo ATKD (es obligatorio ejecutarlo para que devuelva los códigos de las teclas).
El foro de IPIS me cierra la sesión constantemente desde mi conexión de casa y en la oficina no tengo tiempo de entrar, así que no puedo publicarlo allí. Si alguien puede volver a subir mi paquete en aquel foro se lo agradecería mucho… Gracias.
Muchas gracias por la información y por compartir tu controlador beta para las teclas Fn.
Voy a publicar toda esta información y una guía detallada en el foro de IPIS.
Saludos,
Steve.
Hilo para aplicar tus parches en la DSDT:
ipis-osx.wik idot.com/forum/t-135417/enabling-function-keys-by-modifying-your-dsdt#post-403326
Hilo sobre tu kext experimental:
ipis-osx.wik idot.com/forum/t-135405/experimental-asus-hotkey-enabler-kext-driver#post-403338
Me encantaría aportar mis conocimientos de programación para colaborar en tu kext.
¿Estarías dispuesto a compartir el código fuente de tu kext experimental, por favor?
Saludos,
Steve.
He armado el esqueleto de un kext con un bucle de trabajo (WorkLoop) básico.
El kext se inicializa, sondea (probe), encuentra y enlaza con el nodo del dispositivo ATKD y entra en mi método start.
Sin embargo, estoy teniendo problemas al añadir un IOInterruptEventSource.
Lo he declarado dentro de start de la siguiente manera:
interruptSrc = IOInterruptEventSource::interruptEventSource(
(OSObject*)this,
OSMemberFunctionCast( IOInterruptEventAction,
this,
&com_ipis_driver_AsusFNKeys::interruptOccurred ),
(IOService*)provider,
(int)0);
Tengo puesta una comprobación para que devuelva error si no se añade al WorkLoop, pero en cuanto cargo el kext me da un Kernel Panic inmediato.
He comprobado que el causante es efectivamente la fuente de eventos de interrupción, ya que al comentar ese bloque y dejar el kext como una plantilla mínima carga perfectamente.
Te agradecería mucho si pudieras orientarme en la dirección correcta.
¡Hola! ¿Qué tal va todo?
Quiero incorporar algunas mejoras más a la DSDT del 1000H y necesito algo de ayuda.
La primera consulta tiene que ver con la controladora PS/2 (también lo he preguntado en http://www.insanelymac.com/forum/index.php?showtopic=90… ↗):
Todos estamos usando este código:
Device (PS2K)
{
Name (_HID, EisaId ("PNP0303"))
Name (_CID, 0x0B03D041)
Method (_STA, 0, NotSerialized)
{
ShiftLeft (One, 0x0A, Local0)
If (And (IOST, Local0))
{
Return (0x0F)
}
Return (Zero)
}
Name (_CRS, ResourceTemplate ()
{
IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
IRQNoFlags () {1}
})
}
Device (PS2M)
{
Name (_HID, EisaId ("SYN0A04"))
Name (_CID, Package (0x03)
{
0x000A2E4F,
0x02002E4F,
0x130FD041
})
Method (_STA, 0, NotSerialized)
{
ShiftLeft (One, 0x0C, Local0)
If (And (IOST, Local0))
{
Return (0x0F)
}
Return (Zero)
}
Name (_CRS, ResourceTemplate ()
{
IRQNoFlags () {12}
})
}
pero provoca que aparezcan nodos duplicados en IORegistry.
Además, aquí tenéis el registro de arranque de OpenBSD con los recursos reales:
ichpcib0 at pci0 dev 31 function 0 "Intel 82801GBM LPC" rev 0x02: PM disabled
isa0 at ichpcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbc0: using irq 1 for kbd slot
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pmsi0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pmsi0 mux 0
El código funciona bien, pero sería más limpio evitar esa duplicación en IORegistry. ¿Alguna idea?
Y la segunda pregunta es acerca de despertar el equipo automáticamente al levantar la tapa (clamshell open wakeup). ¿Alguien ha intentado implementarlo?
Sigue sin haber respuestas, qué pena.
Mientras tanto iré preparando mi propia DSDT combinando los parches de arriba con los míos propios. Ahora mismo mi equipo funciona y entra en reposo a la perfección bajo 10.5.6, aunque los parches para las teclas Fn todavía me fallan un poco.
Sigo buscando más mejoras para la DSDT del 1000H; por ejemplo, sueño con hacer funcionar el despertar al abrir la tapa. ¿Alguna idea?
Me gustaría saber dónde y cómo puedo configurar el FSB en la DSDT para aplicar estos valores:
FSB=54
PCIE=176
Es para alcanzar una frecuencia de 1,9 GHz en mi EeePC 1000H y hacerle overclock igual que hago en Windows XP con eeectl.
He sacado esta información de InsanelyMac y creo que encaja muy bien en esta recopilación:
cómo corregir el modo de reposo mediante el método _WAK
information about the _WAK method.
Arguments:
0 The value of the sleeping state (1 for S1, 2 for S2, and so on).
Result Code (2 DWORD package):
Status Bit field of defined conditions that occurred during sleep.
0x00000000 Wake was signaled and was successful
0x00000001 Wake was signaled but failed due to lack of power.
0x00000002 Wake was signaled but failed due to thermal condition.
Other Reserved
PSS If non-zero, the effective S-state the power supply really entered.
Este valor se utiliza para detectar cuándo no se logró entrar en el estado S solicitado
debido a un consumo excesivo de corriente en la fuente de alimentación.
En resumen: el método _WAK recibe un único argumento que indica el número del estado de reposo solicitado y devuelve como resultado un paquete de 2 DWORDs. El primer valor es un código que indica si el despertar tuvo éxito (0 en caso de éxito, distinto de cero si hubo fallo) y, de haber fallado, el motivo. El segundo valor también es cero si todo fue bien o devuelve el estado de reposo en el que entró realmente el sistema en caso de fallo. Básicamente, es un código de éxito/error.
El primer argumento de la declaración Package especifica el número de elementos del paquete y el segundo contiene los elementos en sí. Por tanto, la declaración siguiente define un paquete de dos elementos donde ambos valen cero. Esto es necesario porque la especificación ACPI exige que el método _WAK devuelva siempre un paquete de dos valores.
Así que todo se reduce a añadir un valor de retorno simulado (dummy) que cumpla con la especificación (eliminando así las advertencias del compilador) y devuelva siempre una condición de éxito.
Corrección del modo de reposo:
Busca: _WAK
CODE
Method (_WAK, 1, NotSerialized)
{
Store (0xFF, DBG1)
If (LEqual (Arg0, 0x03))
{
Store (0x8F, SCP)
}
If (LEqual (Arg0, 0x04))
{
If (LEqual (OSFL, Zero))
{
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
Else
{
Store (0x58, SMIP)
}
}
If (LEqual (OSFL, One))
{
Store (0x56, SMIP)
}
If (LEqual (OSFL, 0x02))
{
Store (0x57, SMIP)
}
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
}
If (LEqual (Arg0, One)) {}
If (OSFL)
{
Notify (\_SB.PWRB, 0x02)
}
Else
{
If (LEqual (RTCW, Zero))
{
Notify (\_SB.PWRB, 0x02)
}
}
Notify (\_SB.PCI0.USB0, Zero)
Notify (\_SB.PCI0.USB1, Zero)
Notify (\_SB.PCI0.USB2, Zero)
Notify (\_SB.PCI0.USB3, Zero)
Notify (\_SB.PCI0.USB4, Zero)
Notify (\_SB.PCI0.USB5, Zero)
Return(Package(0x02){0x00, 0x00}) <------ Añádelo aquí. Edita dsdt_fixed.txt antes de compilar
}
Control de retroiluminación (Backlight)
Otro añadido muy útil para la DSDT de un portátil (dentro de _SB):
CODE
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
Puede ayudaros a activar el control nativo de brillo de la pantalla.
Mmm… ¿ninguno de vosotros puede responder a mi pregunta sobre el FSB?
Cómo solucionar el reposo y los puertos USB al despertar
¡Por fin he solucionado el reposo en mi portátil!
El culpable era el subsistema USB…
El arreglo es muy sencillo, parecido al del método WAK:
Si miráis en la DSDT dentro de cada entrada USB veréis:
QUOTE
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0xYZ, 0xYZ))
}
Pues bien, buscad Method (GPRW y al final del método cambiad el Return (PRWP) (o lo que tengáis puesto) por:
CODE
Return (Package (0x02)
{
Zero,
Zero
})
Aun así sigo teniendo que usar kexts modificados para EHCI/UHCI; sin ellos el portátil duerme bien, pero al despertar pierdo los dispositivos conectados a los buses UHCI (el Bluetooth y el lector de huellas).
Por cierto, sobre el kext EHCI corregido: odio esos mensajes de depuración (ownership debug) en el registro; no entiendo por qué a tantos desarrolladores les da por dejar activada esa basura de debug en los kexts cuando sería facilísimo compilar dos versiones (normal y debug) o añadir un booleano en el Info.plist para activarlo o desactivarlo...
Edición posterior: ¡Muchísimas gracias a Slice por las versiones limpias de los kexts! Tanto yo como mi system.log estamos encantados.
Por cierto, sigo esperando alguna respuesta sobre qué hacen internamente esos parches USB en los kexts; como el código fuente no está disponible, no sé qué registros tocan exactamente para intentar trasladar esa misma solución directamente a la DSDT...
Segunda edición: Anoche (con el cansancio) se me olvidó mencionar lo de Device (PWRB) (el botón de encendido): me di cuenta de que faltaba en mi DSDT, así que lo añadí porque en la DSDT de un MacBook real hay varias entradas de los dispositivos USB que apuntan a él.
De modo que si no lo tenéis, buscad Device (SLPB) y añadidlo justo encima o debajo para que quede así:
CODE
Scope (_SB)
{
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C"))
}
Device (SLPB)
{
Name (_HID, EisaId ("PNP0C0E"))
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
}
}
A continuación, buscad los métodos Method (_Lxy…) donde aparecen notificados todos los dispositivos USB y, debajo de cada controlador UHCI, añadid Notify (\_SB.PWRB, 0x02); en cuanto a la entrada EHCI, porté el bloque entero desde un MacBook para que quedara así:
CODE
Scope (_GPE)
{
Method (_L03, 0, Serialized)
{
Notify (\_SB.PCI0.UHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L04, 0, Serialized)
{
Notify (\_SB.PCI0.UHC2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0C, 0, Serialized)
{
Notify (\_SB.PCI0.UHC3, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0E, 0, Serialized)
{
Notify (\_SB.PCI0.UHC4, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L05, 0, Serialized)
{
Notify (\_SB.PCI0.UHC5, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0D, 0, Serialized)
{
If (\_SB.PCI0.EHC1.PMES)
{
Store (0x01, \_SB.PCI0.EHC1.PMES)
Notify (\_SB.PCI0.EHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
If (\_SB.PCI0.EHC2.PMES)
{
Store (0x01, \_SB.PCI0.EHC2.PMES)
Notify (\_SB.PCI0.EHC2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
}
Ese bloque para EHCI soluciona el reposo de los puertos USB 2.0, así que por lo menos en mi caso ya no necesito EHCISleepEnabler.
¡Ojo! Si tenéis alguna notificación a HDEF dentro de esos métodos, quitadla o podría impediros entrar en reposo.
Otro consejo: si queréis despertar el portátil o el PC de sobremesa usando el ratón o el teclado USB, mirad en IORegistry en qué bus USB está conectado y en ese método concreto de la DSDT cambiad PWRB por SLPB.
¡Que lo disfrutéis!
Acabo de conseguir que mi botón de encendido muestre el cuadro de diálogo de cierre de sesión/apagado al pulsarlo:
CODE
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C"))
}
Simplemente cambié _HID por _CID.
Guía sobre cómo hacer funcionar el audio mediante DSDT
Configurar el audio no debería ser tan complicado: tener que cargar otra extensión adicional solo para inyectar propiedades en el sistema no tiene ningún sentido cuando la mayoría de vosotros ya estáis usando una cadena device-properties para la tarjeta gráfica o una tabla DSDT modificada, así que bien podéis ahorrar recursos.
No hace falta usar HDAEnabler.kext ni ALCinject.kext para que el audio funcione correctamente.
Lo único que se necesita es el AppleHDA.kext de AlainTox714 y estos 3 datos:
layout-id
codec-id
PinConfigurations
Podéis inyectarlos mediante una cadena device-properties o directamente a través de la DSDT (lo cual suele dar mejor resultado).
He probado ambos métodos con éxito, pero la solución por DSDT resulta mucho más acorde con el estándar ACPI.
Podéis obtener los bytes de PinConfigurations a partir del campo ConfigData que se encuentra en el archivo /System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist.
(Solo necesitáis tomar el último byte de cada verbo de 4 bytes):
<00a71c1f 00a71d40 00a71e21 00a71f02 00b71c40 00b71d90 00b71ea1 00b71f02 00c71c2e 00c71d30 00c71e81 00c71f01 00d71c10 00d71d40 00d71e11 00d71f01 00e71c20 00e71d90 00e71ea1 00e71f01 00f71c12 00f71d10 00f71e11 00f71f01 01071c11 01071d70 01071e11 01071f01 02171c50 02171d21 02171e45 02171f01>
Otra forma consiste en buscar en el volcado del códec (codec dump) las líneas que contienen [Jack], tomar el valor hexadecimal de Pin Default, invertir el orden de sus bytes y ordenarlos por número de nodo:
CODE
Codec: SigmaTel STAC9274D
Address: 2
Vendor Id: 0x83847621
Subsystem Id: 0x80860419
Revision Id: 0x100201
Default PCM: rates 0x7e0, bits 0x0e, types 0x1
Default Amp-In caps: ofs=0x00, nsteps=0x0e, stepsize=0x05, mute=0
Default Amp-Out caps: ofs=0x7f, nsteps=0x7f, stepsize=0x02, mute=1
Node 0x0a [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x0221401f: [Jack] HP Out at Ext Front
Conn = 1/8, Color = Green
pasa a ser 1f402101
00a71c1f 00a71d40 00a71e21 00a71f02
Node 0x0b [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x02a19040: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink
pasa a ser 4090a102
00b71c40 00b71d90 00b71ea1 00b71f02
Node 0x0c [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x0181302e: [Jack] Line In at Ext Rear
Conn = 1/8, Color = Blue
pasa a ser 2e308101
00c71c2e 00c71d30 00c71e81 00c71f01
Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01114010: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Green
pasa a ser 10401101
00d71c10 00d71d40 00d71e11 00d71f01
Node 0x0e [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01a19020: [Jack] Mic at Ext Rear
Conn = 1/8, Color = Pink
pasa a ser 2090a101
00e71c20 00e71d90 00e71ea1 00e71f01
Node 0x0f [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01111012: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Black
pasa a ser 12101101
00f71c12 00f71d10 00f71e11 00f71f01
Node 0x10 [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01117011: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Yellow
pasa a ser 11701101
01071c11 01071d70 01071e11 01071f01
Node 0x21 [Pin Complex] wcaps 0x400301: Stereo Digital
Pin Default 0x01452150: [Jack] SPDIF Out at Ext Rear
Conn = Optical, Color = Grey
pasa a ser 50214501
02171c50 02171d21 02171e45 02171f01
Con esos datos de PinConfigurations podéis convertirlos a Base64 para vuestro archivo XML de device-properties ejecutando este comando:
CODE
echo "1f4021014090a1022e308101104011012090a101121011011170110150214501" | xxd -r -p | openssl enc -base64
En mi BadAxe2 (STAC9274D) esto me devolvió:
CODE
H0AhAUCQoQIuMIEBEEARASCQoQESEBEBEXARAVAhRQE=
Localizad la ruta PCI del dispositivo de audio con:
CODE
gfxutil -f HDEF; # si falla, probad con AZAL en lugar de HDEF
En la BadAxe2 me dio:
CODE
DevicePath = PciRoot(0x0)/Pci(0x1b,0x0)
Añadí lo siguiente a mi archivo XML y volví a generar la cadena hexadecimal con gfxutil: (gfxutil -s -v -n -i xml -o hex in.plist out.hex)
CODE
<key>PciRoot(0x0)/Pci(0x1b,0x0)</key>
<dict>
<key>PinConfigurations</key>
<data>
H0AhAUCQoQIuMIEBEEARASCQoQESEBEBEXARAVAhRQE=
</data>
<key>codec-id</key>
<string>0x83847683</string>
<key>layout-id</key>
<string>0x04000000</string>
</dict>
Estaría genial contar con un pequeño script o utilidad a la que arrastrar el volcado del códec y que te escupiera directamente los datos de PinConfigurations.
Al final, en mi BadAxe2 opté por meterlo directamente en la DSDT porque ya llevo tantas cosas ahí dentro que unos pocos bytes extra no suponen nada y así me ahorro cargar un kext innecesario.
Podéis aplicar este método si cumplís los siguientes requisitos:
- Actualmente usáis HDAEnabler.kext o ALCinject.kext
- Usáis AppleHDA.kext
- Tenéis (o podéis obtener) esos tres parámetros de vuestro hardware de audio junto con el AppleHDA.kext modificado correspondiente.
Podéis hacerlo mediante cadena device-properties o en la DSDT; el método por DSDT es con diferencia el más limpio. Aquí tenéis los detalles en IORegistry de la BadAxe1 (que monta un STAC9221D A2, en la que estoy trabajando ahora mismo) y de la BadAxe2:
BadAxe1:
CODE
| | +-o HDEF@1B <class IOPCIDevice, registered, matched, active, busy 0, retain 8>
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0","IOPCIMessagedInterruptController")
| | | | "IOName" = "pci8086,27d8"
| | | | "subsystem-id" = <17040000>
| | | | "IODeviceMemory" = (({"address"=18446744073225109504,"length"=16384}))
| | | | "class-code" = <00030400>
| | | | "revision-id" = <01000000>
| | | | "assigned-addresses" = <10d8008200000000000020e30000000000400000>
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "name" = "pci8086,27d8"
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/HDEF@1b0000"
| | | | "subsystem-vendor-id" = <86800000>
| | | | "reg" = <00d800000000000000000000000000000000000010d800020000000000000000000000000040
000>
| | | | "compatible" = <"pci8086,417","pci8086,27d8","pciclass,040300">
| | | | "PinConfigurations" = <104021021010010120308101104001012190a1011160010130214501>
| | | | "layout-id" = 2
| | | | "IOPCIExpressLinkCapabilities" = 0
| | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | "IOInterruptSpecifiers" = (<1600000007000000>,<0400000000000100>)
| | | | "device-id" = <d8270000>
| | | | "vendor-id" = <86800000>
| | | | "device_type" = <"STAC9221A2">
| | | | "codec-id" = 2206496387
| | | | "IOPCIExpressLinkStatus" = 0
| | | | }
BadAxe2:
CODE
| | +-o HDEF@1B <class IOPCIDevice, registered, matched, active, busy 0, retain 8>
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0","IOPCIMessagedInterruptController")
| | | | "IOName" = "pci8086,27d8"
| | | | "layout-id" = <04000000>
| | | | "subsystem-id" = <19040000>
| | | | "IOPCIExpressLinkCapabilities" = 0
| | | | "IODeviceMemory" = (({"address"=18446744073226158080,"length"=16384}))
| | | | "class-code" = <00030400>
| | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | "revision-id" = <01000000>
| | | | "IOInterruptSpecifiers" = (<1600000007000000>,<0200000000000100>)
| | | | "assigned-addresses" = <10d8008200000000000030e30000000000400000>
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "device-id" = <d8270000>
| | | | "vendor-id" = <86800000>
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/HDEF@1b0000"
| | | | "subsystem-vendor-id" = <86800000>
| | | | "name" = "pci8086,27d8"
| | | | "IOPCIExpressLinkStatus" = 0
| | | | "reg" = <00d800000000000000000000000000000000000010d800020000000000000000000000000040
000>
| | | | "compatible" = <"pci8086,419","pci8086,27d8","pciclass,040300">
| | | | "PinConfigurations" = <1f4021014090a1022e308101104011012090a101121011011170110150214501>
| | | | "codec-id" = 2206496289
| | | | }
Para quienes no creían que el audio pudiera funcionar sin HDAEnabler.kext ni ALCinject.kext: hacedlo con una cadena device-properties o, mejor aún, directamente en la DSDT.
Aquí tenéis el código básico; incluyo dos bloques de ejemplo, uno para la BadAxe1 y otro para la BadAxe2 (no uséis ambos a la vez).
AUDIO EN LA DSDT:
CODE
______________________________________________________________
// Esto va cerca del principio de tu DSDT (justo después de Method (_WAK, 1, Serialized))
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
______________________________________________________________
// Cambia todas las apariciones de AZAL por HDEF
______________________________________________________________
// Ejemplo para BadAxe1 (con comentarios)
______________________________________________________________
// Esto va al final de Device (HDEF)
// BadAxe1 (D975XBXLKR)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"codec-id",
Buffer (0x04)
{
0x83, 0x76, 0x84, 0x83 // Codec ID en hexadecimal (orden inverso / little-endian)
},
"layout-id",
Buffer (0x04)
{
0x02, 0x00, 0x00, 0x00 // Layout ID en hexadecimal (orden inverso)
},
"device_type",
Buffer (0x16) // longitud en hex + 1 para la cadena ASCII terminada en nulo
{
"SigmaTel STAC9221D A2" // cadena identificadora
},
"PinConfigurations",
Buffer (0x1C) // longitud real en hex
{
/* Datos de PinConfigurations tal cual aparecen.
/* 0000 */ 0x10, 0x40, 0x21, 0x02, 0x10, 0x10, 0x01, 0x01,
/* 0008 */ 0x20, 0x30, 0x81, 0x01, 0x10, 0x40, 0x01, 0x01,
/* 0010 */ 0x21, 0x90, 0xa1, 0x01, 0x11, 0x60, 0x01, 0x01,
/* 0018 */ 0x30, 0x21, 0x45, 0x01 /* parece faltar una entrada */
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
______________________________________________________________
// Ejemplo para BadAxe2
______________________________________________________________
// Esto va al final de Device (HDEF)
// BadAxe2 (D975XBX2KR)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"codec-id",
Buffer (0x04)
{
0x21, 0x76, 0x84, 0x83 // Codec ID en hexadecimal (orden inverso)
},
"layout-id",
Buffer (0x02)
{
0x04, 0x00, 0x00, 0x00 // Layout ID en hexadecimal (orden inverso)
},
"device_type",
Buffer (0x13)
{
"SigmaTel STAC9274D"
},
"PinConfigurations",
Buffer (0x20)
{
/* 0000 */ 0x1f, 0x40, 0x21, 0x02, 0x40, 0x90, 0xa1, 0x02,
/* 0008 */ 0x2e, 0x30, 0x81, 0x01, 0x10, 0x40, 0x11, 0x01,
/* 0010 */ 0x20, 0x90, 0xa1, 0x01, 0x12, 0x10, 0x11, 0x01,
/* 0018 */ 0x11, 0x70, 0x11, 0x01, 0x50, 0x21, 0x45, 0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
______________________________________________________________
Habilitar teclas rápidas en portátiles Acer
@pentiumpcFN+F1 no devuelve ningún código; enviar Notify (SLPB, 0x80) pone el sistema en reposo. FN+F5 y FN+F6 devuelven valores entre 0x20 y 0x2F = 15 niveles de brillo. FN+F8 devuelve el código del siguiente modo de pantalla: LCD interno, VGA externo o escritorio extendido en ambos. La conexión del adaptador de corriente (AC) devuelve 0x50 y batería devuelve 0x51. La mayoría de estas teclas necesitan un controlador que las gestione. Ahora mismo estoy hasta arriba de trabajo en mi empleo diario, así que…
Hola pentiumpc:
Necesito tu ayuda. Quiero habilitar un par de teclas rápidas en OS X que requieren la aplicación "Launch Manager" en Windows o el módulo "acer-acpi" en Linux para funcionar. Esos botones controlan el encendido y apagado de dos dispositivos críticos: la tarjeta inalámbrica Wi-Fi y el Bluetooth. Por suerte, la tarjeta Wi-Fi se enciende automáticamente al arrancar el portátil; sin embargo, el Bluetooth permanece apagado, lo que impide que OS X lo reconozca o pueda utilizarlo. Ojalá puedas orientarme para portar "acer-acpi" a OS X. No tengo experiencia programando controladores ni extensiones del kernel, pero aprendo rápido.
kizwan
Acer-acpi
@kizwanOjalá puedas orientarme para portar "acer-acpi" a OS X. No tengo experiencia programando controladores ni extensiones del kernel, pero aprendo rápido. kizwan
Hola kizwan, ¡qué alegría verte por aquí además de en InsanelyMac! Yo también solía participar allí hasta que se borró mi cuenta cuando migraron el foro al nuevo sistema...
Respecto a acer_acpi: mi hijo tiene un portátil Acer —si no recuerdo mal, el mismo modelo que el tuyo—, pero su disco duro está en las últimas y ahora mismo no puedo hacer pruebas en él. En cualquier caso, el mejor punto de partida (tal como descubrió pentiumpc) es el kext AMW0.kext de superhai. Lo malo es que superhai ha retirado el código fuente de su página principal de descargas y no encuentro copia en ningún sitio, así que tendrás que pedirle el código por mensaje privado.
-u
ACPI en Acer
Es posible que esto pueda hacerse directamente en la DSDT. En mi portátil Gateway observé que hay toda una serie de registros de control definidos que (sospecho) interactúan con las teclas de función para encender y apagar distintos periféricos como la red inalámbrica.
Echa un vistazo a los métodos Notify y mira si encuentras algo que reciba notificación al despertar del reposo. Dado que el Bluetooth se apaga al entrar en reposo, el sistema tiene que volver a encenderlo al despertar si ya estaba encendido antes; por tanto, es muy probable que encuentres alguna condición lógica que compruebe el estado de un registro y lo reactive.
kizwan:
Deberías ver un dispositivo llamado AMW0 dentro de tu DSDT (mira este artículo (strang eworlds.co.uk/2007/11/24/amw0-later-models-aka-version-2-notes/) de Carlos, el autor de la implementación de acer_acpi).
Sin haber visto tu DSDT, mi suposición es que las teclas de función que controlan esos dispositivos están implementadas dentro de un bloque condicional de la DSDT que comprueba si el sistema operativo es Windows. ¿Tu DSDT tiene llamadas que solo ejecutan ciertas acciones cuando _OSI es Windows? La mía sí las tiene.
Si es así, es *posible* que puedas habilitar directamente esas ramas específicas de Windows en la DSDT y luego invocar al dispositivo AMW0 desde un kext sencillo. Probablemente eso mismo era lo que hacía superhai.
Disculpa la demora en responder; no recibí ningún aviso por correo cuando publicaste tu respuesta.
Tienes toda la razón. Esto es lo que encontré dentro de mi archivo dsdt.dsl:
Device (AMW0)
{
Name (_HID, "pnp0c14")
Name (_UID, Zero)
Name (WLMP, Zero)
Name (WMID, Zero)
Name (B0ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateDWordField (B0ED, Zero, WLID)
Name (B1ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
Name (B2ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateDWordField (B2ED, Zero, BUID)
Name (_WDG, Buffer (0x0118)
Y también esto otro:
Scope (_SB)
{
Method (_INI, 0, NotSerialized)
{
Store (0x07D0, OSYS)
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Linux"))
{
Store (One, LINX)
}
If (_OSI ("Windows 2001"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP1"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP2"))
{
Store (0x07D2, OSYS)
}
If (_OSI ("Windows 2006"))
{
Store (0x07D6, OSYS)
}
}
Llevo varios días intentando resolverlo únicamente mediante modificaciones en la DSDT, pero sin suerte. Le preguntaré a superhai por el código de AMW0.kext. Incluso en Windows (tanto en XP como en Vista) los botones de Bluetooth y Wi-Fi no hacen nada hasta que instalas el programa "Launch Manager".
Seguiré analizando mi DSDT para ver si consigo modificarla.
Muchas gracias por tu respuesta.
kizwan
Puedes ignorar ese bloque _INI: lo único que hace es guardar la versión del sistema operativo en la variable OSYS para que otros métodos la consulten después y ejecuten una lógica u otra.
Todo lo que debes asegurarte es de que dentro de Device (AMW0) no haya ninguna condición que dependa exclusivamente de Windows; de ese modo el dispositivo quedará completamente definido y se registrará en IORegistry. A partir de ahí, usando el kext de superhai deberías poder (a) dejar programado directamente en el kext el comportamiento que quieras, o bien (b) crear una pequeña aplicación en espacio de usuario al estilo de Launch Manager para OS X que se comunique con el objeto del kernel (kext).
Si el AMW0 de superhai está basado en IOKit, puedes usar la interfaz de dispositivo estándar de IOKitLib (mira aquí: gemma.apple.com/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html#//apple_ref/doc/uid/TP30000380-BAJDAJDJ).
Intentaré echarte un cable en lo que pueda, aunque al no tener acceso al portátil Acer ahora mismo me temo que no podré probar nada directamente. Si pentiumpc hubiera publicado el código fuente de su kext, podrías ver cómo lo estructuró, ya que tanto los dispositivos "ASUS010" / "ATKD" de ASUS como el "AMW0" de Acer se basan casi seguro en la especificación WMI de Microsoft.
La mejor referencia técnica será sin duda el trabajo de Carlos en acer_acpi para Linux. ¡Mucha suerte!
Soy un (in)feliz propietario de un portátil Asus M50SV.
Tengo exactamente los mismos problemas con las teclas Fn...
En mi equipo funcionan de serie (OOTB) el Wi-Fi/Bluetooth (Fn+F2), el reposo (Fn+F1), el brillo (Fn+F5 y Fn+F6, aunque antes hay que dejar desactivado el sensor de luz ambiental desde Windows) y el encendido/apagado del panel LCD (Fn+F7); en cambio, al pulsar Fn+F8 (conmutar entre LCD y salida VGA) el portátil se reinicia al instante, y el resto de teclas Fn y botones multimedia no hacen nada.
Probé el paquete kext de pentiumpc pero no surte efecto, lo cual me parece lógico porque en mi DSDT no figura ningún dispositivo ASUS010, sino ATK0100 colgado de ATKD. Modifiqué el Info.plist del kext para que coincidiera con el mío, pero tampoco hubo suerte.
Encontré una utilidad estupenda (lamentablemente solo para Windows) llamada ASUS Notebook Keys (forum.noteboo kreview.com/showthread.php?t=150016) que permite reasignar los botones multimedia y las teclas Fn; gracias a ella pude capturar los códigos de evento de todos los botones multimedia y teclas Fn que no funcionan, y además su CÓDIGO FUENTE (rapid share.com/files/74365305/AsusNbKeys_v1.3_SRC.zip) está disponible públicamente. Quizá combinándolo con ACPID —el demonio de eventos ACPI de Linux (acpid.sourc eforge.net/)—, si alguien pudiera portarlo a OS X, lograríamos que funcionaran como es debido...
Las funciones multimedia integradas en el propio touchpad siguen sin poder capturarse ni siquiera con esa utilidad, lo que me hace pensar que las gestiona exclusivamente el controlador de Synaptics; aunque lo curioso es que si en Windows dejo el touchpad fijado en modo multimedia (cuando detecta un ratón externo), la iluminación de los controles del touchpad permanece encendida al reiniciar en OS X, pero no se apaga al desconectar el ratón externo, señal de que el controlador de Windows activa algún indicador ACPI… Tengo que investigar esto más a fondo.
Aquí tenéis la lista de eventos capturados:
Cursores del reproductor multimedia (no funcionan):
Fn + "":
->: Evento: 0x41 - Avance rápido
<-: Evento: 0x40 - Rebobinar
^ : Evento: 0x43 - Detener (Stop)
v : Evento: 0x45 - Reproducir/Pausa
Teclas de función (Fn + F1-F12):
Fn + "":
F1: Evento: funciona - No puedo capturarlo porque entra inmediatamente en reposo
F2: Evento: 0x5D funciona - Conmutador Wi-Fi/Bluetooth
F3: Evento: 0x50 - Abrir aplicación de correo
F4: Evento: 0x51 - Abrir navegador web
F5: Evento: 0x2D funciona - Bajar brillo
F6: Evento: 0x1E funciona - Subir brillo
F7: Evento: 0x34 funciona - Encender/apagar pantalla LCD
F8: Evento: 0x61 - Conmutar LCD/VGA (provoca un reinicio instantáneo al pulsarlo)
F9: Evento: 0x68 - Desconocido
F10: Evento: 0x32 - Silenciar (Mute)
F11: Evento: 0x31 - Bajar volumen
F12: Evento: 0x30 - Subir volumen
Otras teclas del teclado que no funcionan (+Fn):
Fn + "":
T: Evento: 0x99 - Encender/apagar módem
A: Evento: 0x7A - Sensor de luz ambiental
C: Evento: 0x8A - Desconocido
V: Evento: 0x82 - Captura de pantalla / cámara (supongo)
Espacio: Evento: 0x5C - Lanzar Power4Gear
Botones multimedia dedicados:
Botón 1: Evento: 0x5C - Misma función que Fn+Espacio = Lanzar Power4Gear
Botón 2: Evento: 0x6B - Desconocido
Botón 3: Evento: 0x5C - Desconocido
Botón 4: Evento: 0x95 - Desconocido
¿Alguna idea de cómo puedo hacer funcionar las teclas Fn restantes?
Le echaré un vistazo a acpid.
Como no tengo ningún portátil ASUS ni estoy familiarizado con su arquitectura interna, no puedo darte ningún consejo específico más allá de estos tres puntos:
1. Mira lo que se ha hecho en Linux: nos llevan muchísima ventaja respecto a la escena de OS X.
2. Creo que has dado en el clavo: la forma correcta de abordar este monstruo es mediante una infraestructura general —tal como ha hecho Linux— sobre la que se apoyen módulos específicos para cada portátil o placa base. Demasiadas veces en OSx86 cada cual parchea a medida para su portátil concreto; por ejemplo, los usuarios de la Dell Mini han modificado de arriba abajo ApplePS2Keyboard.cpp corrigiendo fallos que afectan a muchos otros equipos, pero dejándolo tan atado a la Dell Mini que no le sirve a nadie más.
3. Quizá si logramos reunir a un pequeño grupo de desarrolladores con portátiles y equipos de distintas marcas podamos escribir un controlador ACPI/WMI genérico extensible mediante plugins y/o utilidades gráficas en espacio de usuario.
@umanLe echaré un vistazo a acpid. Como no tengo ningún portátil ASUS ni estoy familiarizado con su arquitectura interna, no puedo darte ningún consejo específico más allá de estos tres puntos: 1. Mira lo que se ha hecho en Linux: nos llevan muchísima ventaja respecto a la escena de OS X. 2. Creo que has dado en el clavo: la forma correcta de abordar este monstruo es mediante una infraestructura general…
¡GUAU!
¡Qué rapidez en responder!
Acabo de recordar que Superhai me comentó una vez que ACPID no sirve en OS X (porque falta parte de la infraestructura del kernel de Linux), así que no pierdas tiempo con él...
Créeme que he buscado todo lo habido y por haber sobre este portátil en Linux, pero no se puede trasladar directamente a OS X porque el subsistema ACPI es distinto.
Sobre ApplePS2, ¿has probado VoodooPS2? Yo llevo mucho tiempo usándolo sin fallos importantes.
Coincido en que el AMW0 de Superhai es un excelente punto de partida, y sí, debería ser un motor genérico con plugins para las particularidades de cada fabricante.
Por desgracia yo no soy programador ni domino ningún lenguaje de programación; simplemente trasteo con todo lo que encuentro aplicando la lógica y buscando a fondo.
@umanPuedes ignorar ese bloque _INI: lo único que hace es guardar la versión del sistema operativo en la variable OSYS para que otros métodos la consulten después y ejecuten una lógica u otra. Todo lo que debes asegurarte es de que dentro de Device (AMW0) no haya ninguna condición que dependa exclusivamente de Windows; de ese modo el dispositivo quedará completamente definido y se registrará en IORegistry. A partir de ahí, usando el kext de superhai…
Me estudiaré esa documentación de Apple; me llevará algún tiempo asimilarla bien.
Mientras tanto, probé a modificar el código fuente de AMW0.kext para adaptarlo a los nombres y métodos presentes en mi dsdt.dsl. Aunque tras el cambio ya aparece una nueva entrada para AMW0 en IORegistry, los botones de acceso rápido siguen sin responder.
A AMW0.kext todavía le queda bastante trabajo por delante. Quizá pueda sacar más ideas estudiando el código fuente de ACPI4ASUS.kext.
¿Podrías darme algún consejo sobre cómo localizar qué objeto Name o Method dentro de mi dsdt.dsl se encarga de gestionar la pulsación de los botones de acceso rápido? He intentado comparar mi DSDT con la de un MacBook3,1, pero aún no consigo desentrañarlo. ¿Estoy en lo cierto si digo que esta función es la que ordena encender la tarjeta inalámbrica durante el POST de arranque?
Method (LAMN, 1, NotSerialized)
{
If (\_SB.AMW0.WLMP)
{
Store (Arg0, \_SB.AMW0.WLID)
Notify (\_SB.AMW0, 0xB0)
}
Else
{
PHSR (0x1F, Arg0)
}
}
kizwan
Por desgracia, yo también estoy aprendiendo sobre la marcha cómo funcionan las tablas DSDT, y la mayoría de los fabricantes no publican ni una línea de documentación sobre sus dispositivos propietarios ni sus métodos ACPI. Me temo que toca avanzar a base de puro ensayo y error.
¿Podrías pasarme el AMW0.kext? Podría trastear un poco con él en cuanto termine mi controlador para el lector de tarjetas SD (suponiendo que consiga arreglar el Acer de mi hijo).
@umanMmm, me refería al código fuente del kext AMW0. Gracias.
Puedes descargar tanto el AMW0.kext como su código fuente desde aquí:
supe rhai.com/xdarwin.html
Así que estás desarrollando un controlador para un lector de tarjetas SD, ¡qué interesante! ¿Hay alguna posibilidad de que tu controlador sea compatible con el lector de tarjetas SD de Texas Instruments?
Por cierto, ¿sigues teniendo problemas de artefactos gráficos con la GMA950? ¿Has probado con Natit.kext o mediante una cadena EFI?
kizwan
@kizwanPuedes descargar tanto el AMW0.kext como su código fuente desde aquí: supe rhai.com/xdarwin.html
[Manotazo en la frente] ¡Se me había pasado por alto esa página! Muchas gracias por el enlace. Si recupero el Acer la semana que viene o la siguiente, intentaré ponerme manos a la obra con ello.
@kizwanAsí que estás desarrollando un controlador para un lector de tarjetas SD, ¡qué interesante! ¿Hay alguna posibilidad de que tu controlador sea compatible con el lector de tarjetas SD de Texas Instruments?
¡Sí, precisamente es para el chip de Texas Instruments (TI)! Es el que montan tanto mi Gateway como el Acer. Lo estoy haciendo sobre todo para soltarme con el desarrollo de controladores del kernel en IOKit; tengo otros proyectos en mente, pero quería empezar por algo relativamente abarcable.
@kizwanPor cierto, ¿sigues teniendo problemas de artefactos gráficos con la GMA950? ¿Has probado con Natit.kext o mediante una cadena EFI?
Estoy usando los dos kexts que venían en la distribución iPC; la verdad es que no me paré mucho a mirar qué hacen exactamente. Los artefactos visuales son tan leves que no me he molestado en seguirles la pista. Puede que pruebe a inyectarla por DSDT ya que quiero coger más soltura modificando tablas DSDT, ¡aunque lleva tantísimo tiempo como sin duda ya habrás comprobado!
-u
@kizwanAsí que estás desarrollando un controlador para un lector de tarjetas SD, ¡qué interesante! ¿Hay alguna posibilidad de que tu controlador sea compatible con el lector de tarjetas SD de Texas Instruments?
He dejado este desarrollo en pausa a raíz de la noticia de ayer de que Apple ha incorporado ranuras para tarjetas SD en los nuevos MacBook Pro. Quiero ver primero cómo lo ha implementado Apple antes de seguir adelante.
Mostrar 64 notas adicionales de la comunidadRegistro de archivo completo
@umanI've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
For sure they use USB SD Reader i bet on that...
Wonder where did PentiumPC go...
Maybe he can release the source for ACPI4Asus.kext to help us understand what he did and maybe someone can continue his work, if he has no time for that, for the rest of the custom "OEM" stuff that make our life's so PITA.
@umanI'm using the two? kexts that I found in iPC. I didn't really pay much attention to what they do. The artifacts are minor enough that I haven't bothered to track them down. I may try the DSDT approach, since I want to get better at DSDT mods, but it's so time-consuming, as you've no doubt found out! -u
I was using Natit.kext for GMA950 on Acer Aspire 3680. No artifacts…that I can confirm. Right now I'm using EFI string. Don't forget to restore vanilla AppleIntelIntegratedFramebuffer.kext. Don't get excited yet, dual monitor only works with mirror mode.
I still unable to get display working with DSDT yet except for nVidia Go 7300 on Aspire 9420.
kizwan
@umanI've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
I only heard new iPhone is coming soon…iPhone 3G S. ^_^
King,
It may be that your DSDT just has functions defined for Windows, especially since Linux guys also had problems.
Have you talked to or contacted the people at OSXCORES? They have patched BIOSes for OSX:
M50SV AS207 (osxcores.sit e50.net/user/image/asus-m50sv-as207.zip)
ASUS
M50V as209 (osxcores.sit e50.net/user/image/m50vas.209.zip)
ASUS
I'm not sure what fixes they have made, but they do custom work too. See:
osxcores.sit e50.net/services.htm
Perhaps they can help.
-u
uman,
Just got a reply from Superhai. Its look like Superhai will not continue AMW0 project. Is there anybody interested continuing his project? :'(
Other topic…
Sleep:-
I found out that by deleting entry for EHCI devices in Acer Aspire 9420 DSDT, it was able to sleep. Now the EHCI devices detected as external/expansion card. Funny thing is external hard disk, which connected to EHCI port, is not turn off when putting laptop to sleep. Is this also happen with real MacBook?
I tried to compare DSDT from MacBook3,1 with mine and I found this:-
Acer Aspire 9420:-
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB1, 0x02)
}
MacBook3,1:-
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.UHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
I know that "Notify (\_SB.SLPB, 0x80)" will put computer to sleep but I don't know what "Notify (\_SB.PWRB, 0x02)" do. Do you know what "Notify (\_SB.PWRB, 0x02)" means? In my DSDT, PWRB is handle by SLPB (handle both sleep-button & power-button).
I also found "extra" method in EHCI function (MacBook3,1):-
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x07)
{
"AAPL,current-available",
0x04B0,
"AAPL,current-extra",
0x02BC,
"AAPL,current-in-sleep",
0x03E8,
Buffer (0x01)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
I think instead of removing EHCI entry from DSDT, maybe I can use this code to set EHCI device as external device. Maybe this can fix sleep issue too.
Clamshell:-
Does real MacBook automatically resume from sleep when lid is open? Or still need to push keyboard button to resume from sleep, just like windows?
kizwan
@kizwanuman, Just got a reply from Superhai. Its look like Superhai will not continue AMW0 project. Is there anybody interested continuing his project? :'(
I wish I could say yes, but my son's Acer has qualified for a replacement. So I won't have a machine that has an AMW0 to test. And that is a huge problem for development. As I understand it, Superhai's AMW0 basically allows you to call into the AMW0 device. The Linux project acer-acpi (and it's successor wmi-acpi) does the same, and supplies some utilities so that you can call/respond to the AMW0 methods.
The IOKit doc is pretty good at showing how to make a user-callable module that calls in-kernel routines. So if you know (or have someone who has an Acer and knows C) it shouldn't be hard to hack. My suggestion is to start a mini-group of Acer users, and see if anyone has any dev experience amongst the group.
Other topic… Sleep:- I found out that by deleting entry for EHCI devices in Acer Aspire 9420 DSDT, it was able to sleep. Now the EHCI devices detected as external/expansion card. Funny thing is external hard disk, which connected to EHCI port, is not turn off when putting laptop to sleep. Is this also happen with real MacBook?
I don't think you want to delete the EHCI devices. I think you need to Notify them like on my MacBook Pro DSDT.
I know that "Notify (\_SB.SLPB, 0x80)" will put computer to sleep but I don't know what "Notify (\_SB.PWRB, 0x02)" do. Do you know what "Notify (\_SB.PWRB, 0x02)" means? In my DSDT, PWRB is handle by SLPB (handle both sleep-button & power-button).
The Mac has 3 devices: PWRB (power button), SLPB (sleep button), and LID0 (the lid switch). Most hackbooks don't have all of these. I believe my gateway only had SLPB (although I am not sure-- my DSDT.dsl does have a PWRB, but I may have added it).
The power button has multiple functions. Normally if you hit it, it brings up a menu to sleep, shutdown, restart or cancel. But when the Mac is already sleeping (not thru lid sleep), it will wake from sleep. there is also some programmatic control of it in the System preferences. When a Mac has slept through the lid switch, then opening the lid switch resumes the Mac.
I also found "extra" method in EHCI function (MacBook3,1):- Method (_DSM, 4, NotSerialized) { Store (Package (0x07) { "AAPL,current-available", 0x04B0, "AAPL,current-extra", 0x02BC, "AAPL,current-in-sleep", 0x03E8, Buffer (0x01) { 0x00 } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) } I think instead of…
Strange my Macbook dsdt does not have this code AT ALL.
Clamshell:- Does real MacBook automatically resume from sleep when lid is open? Or still need to push keyboard button to resume from sleep, just like windows?
Opening the lid resumes from sleep.
I'm sorry I can't be of much use now. I'm hoping next week that I will find the time to backup and do a retail install of 10.5.7. Only then will I try more DSDT hacking, since right now my machine is a mess of hacked kexts!
-u
Multiple video card mods
Has anyone done any work trying to integrate multiple video cards? I've been searching for weeks. Trying to find info regarding DSDT in general is tough.
Fixing sleep and usb after wake up
I finally fixed sleep on my lappie!
Hi candykane,
did you already update to 10.5.8 and is your sleep fix stillworking?
Apple probably changed something in Powermanagement which is breaking sleep on most installs.
Do you use Openhaltrestart.kext or is sleep working without it?
Thanks Al
@pentiumpcchange _HID to _CID Device (PWRB) { Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C")) Name (_UID, 0xAA) Name (_STA, 0x0B) } This one I got it off some site, cannot remember where. (credit goes to him/her) This will activate your power button to bring up the shutdown menu.
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it
@sk1nhd33thmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it
Uncheck "Allow power button to put the computer to sleep" in energy saver =P.
I dont mean to hijack the thread, but what beeter place for 2 quick DSDT questions for people who actually seem to know what they are talking about !
No one has been able to answer me, well... because no one seems to actually KNOW what they are saying... Please please help!
DSDT is the voodoo of computers for to me loool...
Ok, I've got 2 Acer laptops and 1 Asus laptop. Just for reference. All had OSx, 10.4 to 10.5, many distros, my latest and greatest in my sig.
How on earth do I know if DSDT is doing something or not ?
iAtkos v7 Chameleon 2 RC1 (now RC2) and fassls DSDT script checked. DSDT.aml
is in root, but I tried in Extra folder and felt absolutely no difference.
On first boot I press power, poweroff window comes up (native install) My multimedia controller on my keyboard controls volume and front row funtions! (photos in link in signature) - Video card not detected (but with strings + 2 kext native HD res QE etc)
Out of the box, FN and up down increases/decreases screen brightness. Other fn work, very few dont.
. Audio works OTB, clicks pops etc, no internal or external mic. VoodooHDA is the same,
Ehternet with kext only... didnt try stringing it because I got it to work
So how do I know if DSDT is working? if I remove it I am almost certain my laptop will respond the same.
My previous laptops, NONE used DSDT, I pressed power button, they worked fine! Brightness and other stuff too... etc etc
and I am scared because I read sometimes
"Patch DSDT at you own risk! !
as in flashing the bios or something... can I bick my laptop with DSDT !?! When can DSDT be dangerous?
I want to try decompiling and fixing my dsdt for Snow... but I dont even know if
1) I actually need it
2) If it is working or not
3) it is dangerous, or when is it dangerous?
ok, three questions
"
@Gurruwiwi1) I actually need it 2) If it is working or not 3) it is dangerous, or when is it dangerous? …
1) You don't need it unless you need it. If everything is working properly, so you don't need it. DSDT override just for PC that have problem with CPU alias (only can use one core), sound, graphic card, power management & etc.
2) It is working.
3) No hard evidence that it is dangerous. DSDT override can be applied by 2 ways; i) by using dsdt.aml file. ii) by flashing it to ROM permanently. Of course the second one is dangerous if you do it wrongly.
kizwan
thanks for the reply
Ah, ok, you can actually flash a BIOS to mimic hardware change... ouch! no thanks.
The thing is kizwan, if I remove the DSDT.aml file, my system boots (Leo) and behaves the same! Which is really weird since I have perfect use of my multimedia pad (volume, next song, ff, rw, mute, hold and, believe it or not, and, the "enter" button works the same as Enter key, the arrows next to it like cursor, and the envolving white lines "tabs" stuffs depending on program, firefox, openoffice, folders, etc...) and 75% of bios FN keys etc.
For instance, my webcam, out of the box, reads in profile as "Acer Crystal Eye Webcam" - 100% opertional including ichat, ibooth, etc, which is know to crash with some "working" webcams - this withou dsdt or patching or stringing
That is why I say I have no idea, following logic from what I read, how the DSDT WORKS to help boot or not. even if its not present this laptop boots Leo like if it had.
Now I do have dual boot with dsdt present on both sides, but I guarantee you with single boot I had this behaviour
So the powerbutton fix, will make my power button do either sleep or shutdown/logout/resatart prompt? It depends on the setting in System Prefs is what you guys are saying? (Once enabled through dsdt)
My power button currently does nothing! =P
@EnzoFXSo the powerbutton fix, will make my power button do either sleep or shutdown/logout/resatart prompt? It depends on the setting in System Prefs is what you guys are saying? (Once enabled through dsdt) My power button currently does nothing! =P
For a working power button in Mac OS X, a dialog box will appear if you press the power button. In this dialog box, you have a choice either you want to sleep, restart or shutdown (you will see all of the 3 choices).
If your power button does nothing, it means it have not yet enabled in DSDT (most machine has this enabled by default). If you have tried to enabled it in DSDT, maybe the code is wrong. Try to check it again.
kizwan
I have not tried, but I will.
I was just wondering if what it did (Once working) depended on the setting in Sys Prefs. I.e. whether it just sleeps, or if it gives you the shutdown/etc options.
@EnzoFXI have not tried, but I will. I was just wondering if what it did (Once working) depended on the setting in Sys Prefs. I.e. whether it just sleeps, or if it gives you the shutdown/etc options.
Once it working it will always shows you the options, either sleep, shutdown or restart. There is no setting in System Preferences for power button.
kizwan
I applied the power button fix. However, It only seems to work when I check the box to allow it to sleep the computer. Other than that, it does nothing - no menu or anything.
I applied the power button fix but it doesn't work, when I press it my computer will enter sleep mode without displaying any message just like it did before I applied the fix, I have a gigabyte EP45-DS3LR, anyone knows whats wrong?, this is how the DSDT looks like:
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) --> Name (_CID, EisaId ("PNP0C0C"))
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
}
I have a Thinkpad X300, that whenever I put to sleep, I see the wireless light blink, and the the laptop wakes up. It seems as though the wireless card is waking the system after a second or two every time I sleep it.
Does anyone have any recommendations for this in terms of the DSDT? I've attached mine if it helps.
DSDT advice needed
My system is a Dell D830.
After a lot of tinkering around, I managed to install Snow Leopard on it. Please see my guide ↗.
I did a few DSDT mods to get some basic fixes.
Now, the system sleeps (S3 suspend to ram) but does not deep sleep (S5 suspend to disk), shutdown or reboot. I am using OpenHaltRestart.kext and SleepEnabler.kext. The latter made it possible to even suspend.
I am including my dsdt.dsl (which includes my fixes, by the way).
I see tantalizing references to the sleep button, SBTN, etc., but I have not found any systematic documentation for the code (btw. I am comfortable with coding as I do plenty of numerical coding in my work).
Can anyone take a look and let me know what I need to do to fix my poweroff and hibernate problem ?
The DSDT repository does not contain a fixed DSDT for my laptop.
PS: Microsoft's ASL compiler should be outlawed.
@sk1nhd33tchange _HID to _CID Device (PWRB) { Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C")) Name (_UID, 0xAA) Name (_STA, 0x0B) } This one I got it off some site, cannot remember where. (credit goes to him/her) This will activate your power button to bring up the shutdown menu.
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it
mine will shut down instantly
edit: well actually it just goes to sleep mode verry fast^^ too bad my system wont wake from sleep...
DSDT shutdown patch
With this and new restart patch chameleon booter from Duvel (strong beer that) I have only fakesmc as an added kext, although I'm about to reinstall voodoohda so I can hopefully have two soundcards working.. anyway this is mm67's work I just found it a pain to find the detail on insane so posting it here.. Thanks to all who put together these fixes. Need to add the two operation region bits and change your method PTS
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPCB.AG3E)
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
}
also your LPCB has to be like so
Device (LPCB)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
I suppose add device ID if you need it, I'm on ICH10 so don't.
Also attaching blackosx's duvel+rekursor version of RC4 here, replace your chameleon boot file with the one from here and add these to boot.plist to get unique UUID and restart fix:
<key>DeviceID</key>
<string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
<key>RestartFix</key>
<string>YES</string>
@SweatyWith this and new restart patch chameleon booter from Duvel (strong beer that) I have only fakesmc as an added kext, although I'm about to reinstall voodoohda so I can hopefully have two soundcards working.. anyway this is mm67's work I just found it a pain to find the detail on insane so posting it here.. Thanks to all who put…
It's only this :
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
and this:
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
that make the shutdown work, rest of the code is Gigabyte specific. This address 0x0430 is also motherboard specific, it is PMBASE+30h. Address of PMBASE is defined in FACP, on most boards it can also be checked from processor definitions. For example I have this in my dsdt:
Processor (CPU0, 0x00, 0x00000410, 0x06)
Here 0x00000410 is referring to PMBASE+10h so I use 0x430 on my Gigabyte board. On my MSI board's dsdt I have this:
Processor (P001, 0x01, 0x00000810, 0x06) {}
So in MSI shutdown code I use this:
OperationRegion (PMRS, SystemIO, 0x0830, 0x13)
Ok cheers mate, had to add the other bits on my board (asus p5ql/epu) to get it to compile, I'll try the simpler way later.. At least it did work the way I bodged it
EDIT: OK fixed code as you suggested I needed to use 0x830, also got rid of unnecessary bits, sometimes I needed to turn PSU off with 0x430 (before I could restart, shutdown was complete), that seems fixed now. Thanks a lot.
Im in a fix.. Everywhere there is a DSDT Fix for getting the USB port to be displayed as Built-in but i need the opposite..
USB - 3 shows as built-in, but it has bluetooth. hence on sleep i loose bluetooth.. if i remove the entry altogether, i have it as external but my sleep fails..
Am having Lenovo T60p. with ICH7-M chipset.
Thanks,
Xavier
Shutdown & Restart with sleep fix-Thanks to Sweaty & mm67
Many thanks to Sweaty and mm67. You are really nice. This resolve the problem I thought it would never be resloved.
I just made a small change to Method (_PTS, 1, NotSerialized) in order to resolve sleep issue on my notebook CQ60-202TX. Now let me put all together step by step as a guide. This might help newbie.
1 Add OperationRegion below before Method (_PTS, 1, NotSerialized)
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
2 Check Device (LPC) if there is a similar Operation Region "LPC" like below. If you don't have LPC device, just search Name (_ADR, 0x001F0000), sometimes the device name is different.
Device (LPC)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
If there is no OperationRegion LPC, please add code above. In my dsdt's OperationRegion LPC0, there is an EXPE instead of AG3E. So I did not modify it, but had to change a bit in Method (_PTS, 1, NotSerialized) . See mine below:
OperationRegion (LPC0, PCI_Config, 0x40, 0xC0)
Field (LPC0, AnyAcc, NoLock, Preserve)
{
Offset (0x60),
, 10,
EXPE, 1
}
3 Add code below in Method (_PTS, 1, NotSerialized) like this
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPC.EXPE) //Please change to \_SB.PCI0.LPC.AG3E if you don't have the EXPE, but add AG3E.
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
Else
{
//**Original Code, this resolved my sleep issue.
}
}
//This is written by mm67. You are really nice.
This address 0x0430 is also motherboard specific, it is PMBASE+30h. Address of PMBASE is defined in FACP, on most boards it can also be checked from processor definitions. For example I have this in my dsdt:
Processor (CPU0, 0x00, 0x00000410, 0x06)
Here 0x00000410 is referring to PMBASE+10h so I use 0x430 on my Gigabyte board. On my MSI board's dsdt I have this:
Processor (P001, 0x01, 0x00000810, 0x06) {}
So in MSI shutdown code I use this:
OperationRegion (PMRS, SystemIO, 0x0830, 0x13)
4 Add these in your com.apple.Boot.plist and then put "boot_RC4_Duvelv2.1_Rekursor" under your boot partition.
<key>DeviceID</key>
<string>******XX-***X-***X-***X-************</string>
<key>RestartFix</key>
<string>YES</string>
Now you can remove OpenHaltRestart.kext and PlatformUUID.kext or other similar kexts.
@pentiumpcMost portable system don't sleep on closing the LID, I tried to find a DSDT fix for it but cannot find it. (google is my best friend.) so I wrote 1 to fix my own. If you have a better or alternative method, please let me know. Thanks. Device (LID0) { Name (_HID, EisaId ("PNP0C0D")) //LID detection Method (_PRW, 0, NotSerialized) {…
Noob here.
Never did work on my dsdt, I have errors after compiling on which it cannot find the registers. After much of googling, I have edited one value on my dsdt, on the LID0, instead of 0x03 I have made it to 0x04. I have sleep on lid close now, but I still don't have wake on lid open or wake on keyboard press after sleep via Fn+F1.
Here is my DSDT.dsl if somebody care to point me to the right direction.
I have repatched the dsdt once again with a fresh one. I delete all dsdt and did the patching once again, i still have sleep on lid close, Fn+F1, on the power button. I can wake thru power button with no problems, I can wake buy plugging or unplugging a usb device. But no wake on lid open or keyboard.
With this dsdt, clamshelldisplay.kext is not necessary anymore, so I have removed this kext.
Btw I have modded my dsdt on LID as almost the same on earlier post by pentiumpc.
Any ideas on how to enabel wake on lid open?
What you need to find is the method that is called upon a lid switch event, which means it is under EC0, the embedded controller device. On a MacBook, it's typically _Q20, which looks like this:
Method (_Q20, 0, NotSerialized)
{
Store (LSTE, LIDS)
Notify (\_SB.LID0, 0x80)
}
On my Gateway, it's _Q8A:
Method (_Q8A, 0, NotSerialized)
{
If (LIDE)
{
Store ("_Q8A : LID Switch Event", Debug)
Store (0x01, LIDE)
If (IGDS)
{
Store (0x90, SMIF)
Store (0x00, TRP0)
}
Notify (\_SB.LID0, 0x80)
}
on many other notebooks, it's _Q09. So you'll need to find where it is, and add the appropriate Notify call, to inform the OS that the laptop should be woken up. (I've modified my DSDT to use LID0, to better match the MacBook DSDT).
Enabled bluetooth on Acer Aspire 9420
Do you remember, not a long time a go, I'm pursuing to enable bluetooth in Mac OS X? I'm still unable to get the bluetooth button working but I'm able to make the bluetooth device working via DSDT hacking. I'm still however unable to trigger the bluetooth ON/OFF button. I even trying to re-map the bluetooth ON/OFF button to another button (Fn+..) but unsuccessful. Therefore, I modify System Wake (_WAK) to enable bluetooth. This is for temporary solution. When hot booting the computer, it need to be put to sleep one time only & waking up the computer will turning ON the bluetooth device. To make it working cleanly, I modify both System Wake (_WAK) and Prepare to Sleep (_PTS). In the process, I also fixed the wireless device won't turn ON after waking from sleep.
_WAK code:-
Method (_WAK, 1, NotSerialized)
{
Store (Arg0, P80H)
If (LEqual (Arg0, 0x03))
{
Store (CIRT, \_SB.PCI0.LPCB.EC0.CIRE)
}
If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04)))
{
Store (EEPM, \_SB.PCI0.LPCB.EC0.WEPM)
Store (CAST, \_SB.PCI0.LPCB.EC0.CAME)
Store (WLPW, \_SB.PCI0.LPCB.EC0.WLEN)
Store (BTPW, \_SB.PCI0.LPCB.EC0.BTEN)
Store (WLLE, \_SB.PCI0.LPCB.EC0.WLLD)
Store (BTLE, \_SB.PCI0.LPCB.EC0.BTLD)
}
Store (0x00, \_SB.PCI0.LPCB.EC0.MUTE)
Store (0x00, \_SB.PCI0.LPCB.EC0.KTAF)
Store (0x01, \_SB.PCI0.LPCB.EC0.KTEE)
// start
// Add support for Wireless & Bluetooth devices (power & LED).
// Turned ON Wireless & Bluetooth devices after resume from Sleep.
Store (0x01, \_SB.PCI0.LPCB.EC0.WLEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.WLLD)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
..................
_PTS code:-
- Preventing the wireless device from turn OFF before goes to sleep. Therefore, the wireless device can be turn ON after waking from sleep.
Method (_PTS, 1, NotSerialized)
{
Store (Arg0, P80H)
Store (0x01, \_SB.PCI0.LPCB.EC0.MUTE)
If (LEqual (Arg0, 0x03))
{
Store (\_SB.PCI0.LPCB.EC0.CIRE, CIRT)
}
If (LEqual (Arg0, 0x04))
{
Store (0x01, \_SB.PCI0.LPCB.EC0.BLNK)
Store (0x00, \_SB.PCI0.LPCB.EC0.CIRE)
}
If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04)))
{
Store (\_SB.PCI0.LPCB.EC0.WEPM, EEPM)
Store (\_SB.PCI0.LPCB.EC0.CAME, CAST)
Store (\_SB.PCI0.LPCB.EC0.WLEN, WLPW)
Store (\_SB.PCI0.LPCB.EC0.BTEN, BTPW)
Store (\_SB.PCI0.LPCB.EC0.WLLD, WLLE)
Store (\_SB.PCI0.LPCB.EC0.BTLD, BTLE)
}
Store (0x00, \_SB.PCI0.LPCB.EC0.CAME)
Store (0x00, \_SB.PCI0.LPCB.EC0.CIRE)
// Preventing Wireless device from turning OFF when system going to Sleep.
// Store (0x00, \_SB.PCI0.LPCB.EC0.WLEN)
// start
// Add support for Wireless (LED) & Bluetooth (power & LED) devices.
// Turned OFF Wireless (LED) & Bluetooth (power & LED) devices before going to Sleep.
Store (0x00, \_SB.PCI0.LPCB.EC0.WLLD)
Store (0x00, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x00, \_SB.PCI0.LPCB.EC0.BTLD)
// end
If (LEqual (Arg0, 0x05))
{
PHSR (0x28, 0x00)
}
}
Applying this fix causing the computer unable to sleep anymore because USB4 device (where the bluetooth device attached to) causing the system wake immediately. I remember that according to ACPI Specification revision 4 documentation; in addition to the _PRW control method, _PSW control method can be used to enable or disable the device’s ability to wake a sleeping system.
Arguments: (1) Arg0 – An Integer containing a wake capability control 0 – Disable the device’s wake capabilities 1 – Enable the device’s wake capabilities
By looking at USB4 device in DSDT, there is _PSW entry that can be manipulate. This is the entry for USB4 device in DSDT after modifying the argument (set to 0):-
Device (USB4)
{
Name (_ADR, 0x001D0003)
OperationRegion (U4CS, PCI_Config, 0xC4, 0x04)
Field (U4CS, DWordAcc, NoLock, Preserve)
{
U4EN, 2
}
Name (_PRW, Package (0x02)
{
0x0E,
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
// Store (0x03, U4EN)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x02)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x02)
}
}
The last FIX enable the computer to sleep again.
kizwan
Nice work! Too bad I don't have bluetooth!
I've come to the conclusion that getting access to keyboard events is impossible in DSDT. I think you have three choices: construct an AMW0 device kext to bind to the AMW0 (which I presume is in your DSDT). This would be a challenge, but might allow you to be straight retail. Two, hack at ApplePS2Keyboard (if PS2) or something else if USB. Or three, do the same with VoodooPS2 (again if PS2).
If you have USB, your job may be easier, since you might be able to do it outside kernel space.
Battery indicator
I'm successfully compiled AMW0.kext for SL but got kernel panic while initializing some MethodTerm at boot. Since AMW0.kext project is not finished, I think I'm going to try ACPI4ASUS.kext instead. If ACPI4ASUS.kext developed to works with AMW0 v2 interface (AMW0 and WMID), it should works with other laptop model too.
I'm trying to enable battery icon by patching DSDT. It is being done by adjusting ADP1 & BAT0 code according to DSDT from MBP4,1. Not successful yet, but the battery indicator did show up. It said battery is not detected & current power source is power adapter. Do you think it is possible to make it working by just patching the DSDT?
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one.
Method (_Q3F, 0, NotSerialized)
{
// start
// auto turn ON Bluetooth device during computer startup
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
HKEY (0x3F)
}
kizwan
Can you somebody help me to enable my audio on Snow Leopard?My audio chip is Realtek ALC662:
I make a codec dump:You can download and see it.
hot file.com/dl/32500771/8b28fa6/Realtek_ALC662_dump.txt.rar.html
I want to fix my audio in DSDT, so I read your tutorial and convert the Default pinconfig on each "[JACK]" device:
Mic (colour:Pink) 01a19830 ---> reversed 3098a101
Mic which is not a jack 99a3093f ---> 3f09a399
HP - 0121401f ---> 1f402101
SPDIF -01441120 ---> 20114401
This is my audio configuration on my laptop.
I don't know how to generate values which I haveto enter in my DSDT.This is my DSDT (HDEF):
Device (HDEF)
{
Name (_ADR, 0x001B0000)
OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
Field (HDAR, WordAcc, NoLock, Preserve)
{
DCKA, 1,
Offset (0x01),
DCKM, 1,
, 6,
DCKS, 1,
Offset (0x08),
, 15,
PMES, 1
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
}
@kizwanEDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one. Method (_Q3F, 0, NotSerialized) { // start // auto turn ON Bluetooth device during computer startup Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN) Store (0x01,…
Where you put this code?
I searched in my DSDT for
Method (_Q3F, 0, NotSerialized)
, But didn't find it.I have a laptop with Bluetooth, where to put this code?
@kizwanI'm successfully compiled AMW0.kext for SL but got kernel panic while initializing some MethodTerm at boot. Since AMW0.kext project is not finished, I think I'm going to try ACPI4ASUS.kext instead. If ACPI4ASUS.kext developed to works with AMW0 v2 interface (AMW0 and WMID), it should works with other laptop model too.
So does Asus use AMW0, or do you need to add that code from AMW0. A WMID kext would be useful as many PC vendors use that interface. uninc's DSDT was hideously intertwined with WMID.
I'm trying to enable battery icon by patching DSDT. It is being done by adjusting ADP1 & BAT0 code according to DSDT from MBP4,1. Not successful yet, but the battery indicator did show up. It said battery is not detected & current power source is power adapter. Do you think it is possible to make it working by just patching the DSDT?
I'm not sure, but given that the ACPI 4.0 spec devotes pages and pages to battery and power issues, I think it is at least possible. I also intend to try to solve this (but it's a lower priority for me because my laptop battery is toast anyway). I tried VoodooBattery, which worked great (it told me my battery was toast, lol), but then it kernel panic'ed HARD and I had to repair my disk, so I won't be using that again.
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one. Method (_Q3F, 0, NotSerialized) { // start // auto turn ON Bluetooth device during computer startup Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN) Store (0x01,…
I still don't understand how query methods are executed, nor how they are bound to some device. ACPI says:
"For an embedded controller event, OSPM will queue the control method of the name _QXX, where XX is the hex format of the query code. Notice that each embedded controller device can have query event control methods. Similarly, for an SMBus driver, if no driver registers for SMBus alarms, the SMBus driver will queue control methods to…
And then they discuss it more with a completely unhelpful example. Oh wait, the acpi implementers guide is more helpful:
What’s the trap? Using decimal instead of hexadecimal numbers in _Lxx, _Exx, and _Qxx names in your ASL code. When the number (xx) in the _Lxx, _Exx, or _Qxx event handler object name in the ASL code does not match the number of the bit in the GPE register block (or match the number of the embedded controller query number in the case…
DSDT is fun but time consuming!
@breakkyWhere you put this code? I searched in my DSDT for Method (_Q3F, 0, NotSerialized) , But didn't find it.I have a laptop with Bluetooth, where to put this code?
Each laptop model is going to be different. That's why you have to be prepared to do some work to get DSDT going. You will first need to determine what symbols, events, and queries correspond to your bluetooth device. Then kizwan's code can act as a guide.
@breakkyWhere you put this code? I searched in my DSDT for Method (_Q3F, 0, NotSerialized) , But didn't find it.I have a laptop with Bluetooth, where to put this code?
It is hardware & BIOS specific. You may have different query method. I'm afraid, you need to try & error every query method in your DSDT.
EDIT: You may want to follow uman suggestion (next post) to get your audio working. It is much easier.
As for your sound, you need to do a lot of work to get your sound working. You already have HDEF entry in DSDT, so you just missing legacy/patched kext. You need to put your ConfigData & Pin Config in legacy/patched kext. Use this legacy kext as a template:-
media fire.com/?vkzyzmtzozo
If you like to put ConfigData & PinConfigurations in DSDT, this is how HDEF entry will look like (between "// start" & "// end"):-
Device (HDEF)
{
Name (_ADR, 0x001B0000)
Name (HDWA, 0x00)
Name (_PRW, Package (0x02)
{
0x05,
0x03
})
Method (_PS0, 0, Serialized)
{
If (LEqual (HDWA, 0x00))
{
Store (0x01, HDWA)
HKEY (0x8F)
}
}
Method (_PS3, 0, Serialized)
{
Store (0x00, HDWA)
}
// start - required code
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"built-in",
Buffer (One)
{
0x00
},
"codec-id",
Buffer (0x04)
{
0x83, 0x08, 0xEC, 0x10
},
"ConfigData",
Buffer (0x40)
{
/* 0000 */ 0x01, 0x47, 0x1C, 0x30, 0x01, 0x47, 0x1D, 0x11,
/* 0008 */ 0x01, 0x47, 0x1E, 0x0B, 0x01, 0x47, 0x1F, 0x01,
/* 0010 */ 0x01, 0x87, 0x1C, 0x10, 0x01, 0x87, 0x1D, 0x01,
/* 0018 */ 0x01, 0x87, 0x1E, 0xA0, 0x01, 0x87, 0x1F, 0x90,
/* 0020 */ 0x01, 0xA7, 0x1C, 0x20, 0x01, 0xA7, 0x1D, 0x31,
/* 0028 */ 0x01, 0xA7, 0x1E, 0x81, 0x01, 0xA7, 0x1F, 0x01,
/* 0030 */ 0x01, 0xE7, 0x1C, 0x40, 0x01, 0xE7, 0x1D, 0xE1,
/* 0038 */ 0x01, 0xE7, 0x1E, 0x45, 0x01, 0xE7, 0x1F, 0x01
},
"layout-id",
Buffer (0x04)
{
0x0C, 0x00, 0x00, 0x00
},
"device-type",
Buffer (0x11)
{
"Mobile ALC883 S/T"
},
"PinConfigurations",
Buffer (0x10)
{
/* 0000 */ 0x30, 0x11, 0x0B, 0x01, 0x10, 0x91, 0xAB, 0x01,
/* 0008 */ 0x20, 0x31, 0x81, 0x01, 0x40, 0xE1, 0x45, 0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
// end - required code
}
I'll try to construct ConfigData & PinConfigurations for you but I can't promise.
kizwan
Are you planning to use VoodooHDA, or AppleHDA? If Voodoo, first rename all references to HDEF to ALC6 (or whatever turns you on :)) Doing so will prevent AppleHDA from loading and matching your HDA device. If AppleHDA is loaded, then VoodooHDA doesn't load.
Next, and this is common for both Apple and Voodoo. Add this to your HDEF or ALC6 device:
Method (_DSM, 4, NotSerialized) { Store (Package (0x04) { "layout-id", Buffer (0x04) { 0x0C, 0x00, 0x00, 0x00 }, "PinConfigurations", Buffer (Zero) {} }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }
You can then add your pin configs in there or in the plist depending on how you want to get sound going. See the great guide on infinitemac, or the one on projectosx.
Search my posts and look for my question on pinconfigs to find the links. I'm still trying to find out how to get my pinconfigs without Windows, since I don't run that anymore!
@kizwanBy looking at USB4 device in DSDT, there is _PSW entry that can be manipulate. This is the entry for USB4 device in DSDT after modifying the argument (set to 0):- Device (USB4) { Name (_ADR, 0x001D0003) OperationRegion (U4CS, PCI_Config, 0xC4, 0x04) Field (U4CS, DWordAcc, NoLock, Preserve) { U4EN, 2 } Name (_PRW, Package (0x02) {…
can you tell me what modification should I apply to this code to disable sleep for a device in usb2 ?
regards,
Vincent
@umanSo does Asus use AMW0, or do you need to add that code from AMW0. A WMID kext would be useful as many PC vendors use that interface. uninc's DSDT was hideously intertwined with WMID.
Looks like I still need to go through WMI and ACPI documentation to have better understanding. Then I can make this successful.
@umanI'm not sure, but given that the ACPI 4.0 spec devotes pages and pages to battery and power issues, I think it is at least possible. I also intend to try to solve this (but it's a lower priority for me because my laptop battery is toast anyway). I tried VoodooBattery, which worked great (it told me my battery was toast, lol), but then…
Yeah, it's a low priority for me too. Just playing around.
I guess to make it working, maybe need to determine which query method it use. I said that because I found that there are query method that called ADP1 & BAT0 device. Just don't know what it do & what it contribute to battery detection.
@umanI still don't understand how query methods are executed, nor how they are bound to some device. ACPI says: And then they discuss it more with a completely unhelpful example. Oh wait, the acpi implementers guide is more helpful:
I'm going to grab the acpi implementers guide.
@umanDSDT is fun but time consuming!
I agree.
@barnum… can you tell me what modification should I apply to this code to disable sleep for a device in usb2 ? …
Do you mean you want to disable USB2 capability to wake a sleeping system, don't you? If in "Device (USB2)" entry it have _PSW (Power State Wake) method, you will need to change it according to my modification.
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
// Store (0x03, U4EN)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}
Refer to arguments for _PSW:
Arguments: (1) Arg0 – An Integer containing a wake capability control 0 – Disable the device’s wake capabilities 1 – Enable the device’s wake capabilities
That is why I change both condition to execute the same thing. So that it always execute the same "Store" operation as if it is Arg0=0.
kizwan
@umanAre you planning to use VoodooHDA, or AppleHDA? If Voodoo, first rename all references to HDEF to ALC6 (or whatever turns you on :)) Doing so will prevent AppleHDA from loading and matching your HDA device. If AppleHDA is loaded, then VoodooHDA doesn't load. Next, and this is common for both Apple and Voodoo. Add this to your HDEF or…
I planed to use AppleHDA with DSDT.aml fix.This is my original DSDT.aml
hot file.com/dl/32576445/45eb3b8/DSDT.dsl.zip.html
By the way I use AsereBLN booter 1.1.9.
@breakkyI planed to use AppleHDA with DSDT.aml fix.This is my original DSDT.aml
Try this legacy kext for ALC662 (Snow Leopard):-
media fire.com/?kmnykkqmy5m
Make sure AppleHDA.kext in /System/Library/Extensions/ folder is original kext. Remember to put _DSM method in Device (HDEF) (please refer to uman's post #81 →).
You also need to put DTGP code in DSDT. Put it afterMethod (_WAK) function.
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
kizwan
When I try to compile my dsdt.dsl I get one error:
4644: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Error 4067 - ^ Object is not accessible from this scope (DTGP)
Nevermind I found where is the error and fix it!
@breakkyWhen I try to compile my dsdt.dsl I get one error: 4644: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Error 4067 - ^ Object is not accessible from this scope (DTGP) Nevermind I found where is the error and fix it!
How about the sound? Is it working?
This thread has been very useful for me. I now just miss one last step to have the "perfect" install.
I'm running Snow Leopard on an ASUS eeePC 901 from the SD card. It's a bit slow but this is OK.
My problem: whenever I go to sleep and wake-up from sleep, I guess the SD card (my "boot drive") gets brutally ejected and…well, it's bad.
My question: is there any DSDT mod that would allow my SD card to stay mounted (powered maybe) during all the cycle wake-sleep-wake ?
I found a lot of approaching stuff on the thread but nothing exactly like that. this would make may day.
Any idea anyone ?
Thanks, Richard.
@richardaThis thread has been very useful for me. I now just miss one last step to have the "perfect" install. I'm running Snow Leopard on an ASUS eeePC 901 from the SD card. It's a bit slow but this is OK. My problem: whenever I go to sleep and wake-up from sleep, I guess the SD card (my "boot drive") gets brutally ejected and…well, it's bad.…
Yes, but it depends on the underlying hardware. I've found los of good info about my own laptop in my chipset doc (ICH7), and there is lots of good info on the SATA part of the device control. I assume the SSD is controled through SATA?
Thanks for the info. Not sure I was clear enough tough. I'm having the problem with the SD card (I believe it's using an internal USB port) and the machine is an eeePC 901.
I need help on this one…please.
@richardaThanks for the info. Not sure I was clear enough tough. I'm having the problem with the SD card (I believe it's using an internal USB port) and the machine is an eeePC 901. I need help on this one…please.
My bad. I'm so used to SD cards not working, that I assumed you meant SSD.
You could try the following:
1. Determine what USB slot your SD card is occupying. Easiest is to highlight he drive in disk utility and right-click Information. You should see something like: IODeviceTree:/PCI0@0/USB7@1D,7. That tells me that it's using USB7.
2. Edit your DSDT to replace the _PRW for the indicated USB slot with:
Device (USB7)
{
...
// package (argnum) {GPEbit, Wakelevel, PowerResource}
Name(_PRW, Package()
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
where I have <xx> above, keep your DSDT's existing value, as that's the handler in the GPE for USB7. What I've highlighted in red is the change. Your existing DSDT likely has 0x03, which is effectively powered off.
What the 0x01 does is says that the drive still needs power. That *might* be enough to keep it from being ejected. But it might also prevent the computer from sleeping.
Take a look at the ACPI spec (4.0 rev) Chapter 7.2 for some of the things you can do with power management.
ive been lurking around on this thread for a week or two now, and i'm more interested in getting my laptop fully working. ive been running osx for about a year now and i'm pretty familiar with everything except DSDT.
basically what i'm trying to get working:
- GMA X3100: was working with leo, but with 10.6.2 i lost the ability to make the
screen turn off.(although i still have QE/CI)
- Backlight: has never worked, "invalid firmware max backlight" problem. i was
hoping DSDT would be able to fix this
- Sleep: although i'm not too worried about it, it would be nice.
I have a Gateway M6841. I don't think it's a too popular system to be using for a hackintosh, so there's not much help that i've found in the forums.
here is my patched DSDT. its patched for sleep, backlight, and gmax3100 but it hasnt changed any of the problems. thanks to anyone that can help or at least point me in the right direction, i do have programming experience if it helps.
@umanMy bad. I'm so used to SD cards not working, that I assumed you meant SSD. You could try the following: 1. Determine what USB slot your SD card is occupying. Easiest is to highlight he drive in disk utility and right-click Information. You should see something like: IODeviceTree:/PCI0@0/USB7@1D,7. That tells me that it's using USB7.…
Hello,
Thanks a lot. In the disk utility I got: /PCI0@0/EUSB@1D,7
And in the DSDT file, at Device(EUSB) I don't have a lot of things. Just
{
Name (_ADR, 0x001D0007)
}
nothing else. Any idea what else I can add to make it working in that case ?
@richardaThanks a lot. In the disk utility I got: /PCI0@0/EUSB@1D,7 And in the DSDT file, at Device(EUSB) I don't have a lot of things. Just { Name (_ADR, 0x001D0007) } nothing else. Any idea what else I can add to make it working in that case ?
You're allowed to add what it don't have.
kizwan
Allright, I got that but in this case I guess I have to pute something like
Name(_PRW, Package
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
But how to determine the <xx> value then ?
@richardaAllright, I got that but in this case I guess I have to pute something like Name(_PRW, Package { <xx>, // Bit number in GPEx_EN to enable USB resume 0x01 // Reference to lowest sleeping state which can be // entered while still providing wake functionality // no relative power resource specified }) But how to determine the <xx> value…
That's the problem then. You really need to have some of the resources specified for your USB (UHCI) and EHCI ports. Since you don't have anything, you can add the GPE handlers, and things should work. The best way to proceed, is to first identify which Mac model your machine is closest to, and then take the requisite parts, carefully excising out the problematic parts.
For my hack, I looked at the list of mac models on wikipedia, and then chose MacBook 2,1 as the closest. I then edited my smbios.plist to reflect those values. I then compared my DSDT to the MacBook 2,1 DSDT and ioreg, and found they were surprisingly close. I've included below, some pieces for you to try from a MacBook 2,1 DSDT:
Scope (\_GPE)
{
...
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L04, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
...
Method (_L0C, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB3, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0D, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB7, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0E, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB4, 0x02)
Notify (\_SB.PWRB, 0x02)
}
...
Note the parts in red. If you already have level handlers in your GPE scope that use these numbers (so say you already have _L03), you will have to change them, and change the part in the USB1 declaration for, say, _L03. Don't put really large numbers, because there's a part in the DSDT that says the handlers go only up to 0xXX (I've forgotten where that is). Just make sure you use unused numbers. For example, in my DSDT I added one for _L11 for my firewire.
Device (USB1)
{
Name (_ADR, 0x001D0000) // keep your existing ADDR lines!!!
Device (HUB1) // will become HUB2 for USB2
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
OperationRegion (U1CS, PCI_Config, 0xC4, 0x04)
Field (U1CS, DWordAcc, NoLock, Preserve)
{
U1EN, 2
}
Name (_PRW, Package (0x02)
{
0x03, // must match number you use in _Lxx handler
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, U1EN)
}
Else
{
Store (0x00, U1EN)
}
}
Method (_S3D, 0, NotSerialized) // note: I don't have these
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized) // note: I don't have these
{
Return (0x03)
}
}
The parts in red will change to match each USB port, so U1CS, U1EN becomes U2CS and U2EN for USB2, along with changing HUB1 to HUB2. I don't have the _S3D and _S4D methods in my DSDT and from reading the spec, I don't think they are needed.
So USB2, looks like:
Device (USB2)
{
Name (_ADR, 0x001D0001)
Device (HUB2)
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
Field (U2CS, DWordAcc, NoLock, Preserve)
{
U2EN, 2
}
Name (_PRW, Package (0x02)
{
0x04, // A different _L04 is a different _LXX handler than USB1!
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, U2EN)
}
Else
{
Store (0x00, U2EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x03)
}
}
Do the same edits for USB3 and USB4 (if you have USB4) and even USB5, and USB6 if you have a desktop with lots of USB ports (although I suspect you will need another EHCI hub there, but I don't know).
USB7 is quite different:
Device (USB7)
{
Name (_ADR, 0x001D0007)
Device (HUB7)
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
Device (PRT3)
{
Name (_ADR, 0x03)
}
Device (PRT4)
{
Name (_ADR, 0x04)
}
Device (PRT5)
{
Name (_ADR, 0x05)
}
Device (PRT6)
{
Name (_ADR, 0x06)
}
Device (PRT7)
{
Name (_ADR, 0x07)
}
Device (PRT8)
{
Name (_ADR, 0x08)
}
}
Name (_PRW, Package (0x02)
{
0x0D, // yet another different handler
0x03 // I suggested you change this to 0x1
})
Method (_S3D, 0, NotSerialized)
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x03)
}
}
Remove the parts in yellow for the USB7, since they don't match the change from 0x03 -> 0x01. Plus I suspect they really aren't needed.
Oh, and if this doesn't work, there are bits you can set that essentially control power settings, ejectability, etc. But that is hugely dependent on your chipset. I have an ICH7, and most of that is the same in ICH9, and ICH10, but if you have an nvidia chipset, that's *totally* different.
OK, I'm 200% lost now. This is way too complex for me. I guess I have to find somebody litterate enough who solved the problem on the eee901 and just copy his settings.
Thanks anyway.
Device (HUB1) // will become HUB2 for USB2
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
Hi,
Can You explain me what the "utility" of this part of the usb declaration"
In my dsdt, I doesn't have that.
Thank,
Barnum
You won't need it, then. It's because on my gateway, the ports have integrated hubs. See ACPI spec, section 9.13 for full details.
Sorry of reviving this and cutting in
@ping99
I have an ASRock x58 Extreme (similar to ASUS boards), and sleep doesn't work OTB. I've been looking around, and it seems I would need to modify Method (_PTS, 1, NotSerialized).
I read your post, and it seems that the edits you did are somewhat similar to what I should do in my DSDT, whoever I have a few doubts:
@ping99... 1 Add OperationRegion below before Method (_PTS, 1, NotSerialized) OperationRegion (DEBG, SystemIO, 0x80, One) Field (DEBG, ByteAcc, NoLock, Preserve) { DBG1, 8 } OperationRegion (PMRS, SystemIO, 0x0430, 0x13) Field (PMRS, ByteAcc, NoLock, Preserve) { , 4, SLPE, 1, Offset (0x08), GPSE, 16, GPSS, 16, Offset (0x12), , 1, SWGC, 1 }
Is
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
really necessary? mm67 seems to think not (or is that for shutdown only?)
@ping99...2 Check Device (LPC) if there is a similar Operation Region "LPC" like below. If you don't have LPC device, just search Name (_ADR, 0x001F0000), sometimes the device name is different. Device (LPC) { Name (_ADR, 0x001F0000) OperationRegion (LPC0, PCI_Config, 0xA4, 0x02) Field (LPC0, ByteAcc, NoLock, Preserve) { AG3E, 1 } If there…
Here is my LPCB:
Device (LPCB)
{
Name (_ADR, 0x001F0000)
Device (IELK)
{
Name (_HID, "AWY0001")
OperationRegion (RXA0, PCI_Config, 0xA0, 0x20)
Field (RXA0, ByteAcc, NoLock, Preserve)
{
, 9,
PBLV, 1,
Offset (0x10),
, 1,
PBMS, 1,
, 1,
PMCS, 1,
ECNS, 1,
Offset (0x11),
ECT1, 16,
ELEN, 1,
Offset (0x14)
}
Method (\_GPE._L0A, 0, NotSerialized)....
Where should I put OperationRegion (LPC0...? Before Device (IELK)? After Name (_HID, "AWY0001")? Inside OperationRegion (RXA0, PCI_Config, 0xA0, 0x20) somehow?
@ping993 Add code below in Method (_PTS, 1, NotSerialized) like this Method (_PTS, 1, NotSerialized) { Or (Arg0, 0xF0, Local0) Store (Local0, DBG1) Store (Zero, \_SB.PCI0.LPC.EXPE) //Please change to \_SB.PCI0.LPC.AG3E if you don't have the EXPE, but add AG3E. If (LEqual (Arg0, 0x05)) { Store (Zero, SLPE) Sleep(0x10) } Else { //**Original…
Here is my current -disastrous- Method (_PTS, 1, NotSerialized):
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
If (LEqual (Arg0, 0x05))
{
Store (0x99, SMIP)
Store (One, \_SB.PCI0.LPCB.IELK.AG3E)
Store (Zero, SLPE)
Sleep (0x10)
}
Else
{
Store (Zero, \_SB.PCI0.LPCB.IELK.AG3E)
}
Store (ASSB, WSSB)
OSYS ()
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
The original is:
Method (_PTS, 1, NotSerialized)
{
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
Store (ASSB, WSSB)
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
, Adrian
Post Scriptum (P.S.): I attached my DSDT's, CST and IST tables, so if someone could lok at them and tell me if I -for example- managed to insert the C-States, P-States, etc-States into the DSDT correctly, I would be eternally grateful.
First all, you just need to add OperationRegion PMRS below.
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1
}
* Pay attention to 0x0430 in red. It depends your motherboard. You have Processor (CPU0, 0x00, 0x00000410, 0x06) in your dsdt, you can use 0x0430. If you have Processor (P001, 0x01, 0x00000810, 0x06) then use 0x0830. It is PMBASE+30h.
Secondly, look into Method (_PTS, 1, NotSerialized) to see whether "If (LEqual (Arg0, 0x05))" there. If not, add code as below. If already there, just insert.
If (LEqual (Arg0, 0x05))
{
Store (0x01, \_SB.PCI0.LPC.EXPE) // hibernate fix. Will return to S5 after power back
Store (Zero, SLPE) // zero SLP_SMI_EN, else won't shutdown
Sleep (0x10) // wait for bit to set
}
Yours is modified as below:
Method (_PTS, 1, NotSerialized)
{
Store (Zero, \_SB.PCI0.LPC.EXPE) //Check Device (LPC) or LPCB if you have this EXPE or something like this. change it to match yours.
If (LEqual (Arg0, 0x05))
{
Store (0x01, \_SB.PCI0.LPC.EXPE) // hibernate fix. Will return to S5 after power back
Store (Zero, SLPE) // zero SLP_SMI_EN, else won't shutdown
Sleep (0x10) // wait for bit to set
}
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL , 0x02)))
{
Sleep (0x0BB8)
}
Store (ASSB, WSSB)
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL , AOTB)
Store (OSYS , OSTP)
Store (Zero, AAXB)
}
i tried the sleep fix, but i can't get it to work, sleep in general doesn't work, when i press the sleep button, my screen freezes and that's all, when i press the powerbutton i get the restart/shutdown popup and all works again.
Lidsleep also does the same, screen freezes but stays on.
i wanna ask you if you plz wanna look at it?
really nice job!
Here is my problem... I have a Compal Ifl90 with intel 7300 @ 2GHz and 8600m gt 512mb with Snow Leopard 10.6.3 .
The problem i have is that my screen brightness slider at setting wasn't there! But with some dsdt editing i managed to show up but when i move the slider nothing happen and returns to it's original position! Any help please below is my code from Device (LCD)
Device (LCD)
{
Method (_ADR, 0, NotSerialized)
{
Return (0x0110)
}
Method (_DCS, 0, NotSerialized)
{
^^^^LPCB.PHSS (0x0C)
Store (CADL, Local0)
Store (CSTE, Local1)
And (Local0, One, Local0)
And (Local1, One, Local1)
If (Local0)
{
Store (One, LCDA)
}
Else
{
Store (Zero, LCDA)
}
If (LCDA)
{
If (LEqual (Local1, One))
{
Return (0x1F)
}
Else
{
Return (0x1D)
}
}
Else
{
If (LEqual (Local1, One))
{
Return (0x0F)
}
Else
{
Return (0x0D)
}
}
}
Method (_DGS, 0, NotSerialized)
{
If (LCDA)
{
Return (One)
}
Else
{
Return (Zero)
}
}
Method (_DSS, 1, NotSerialized)
{
}
Method (_BCL, 0, NotSerialized)
{
If (^^^^LPCB.ECOK ())
{
If (LEqual (OSYS, 0x07D6))
{
If (LEqual (^^^^LPCB.EC0.OSTY, Zero))
{
Store (One, ^^^^LPCB.EC0.OSTY)
}
}
Else
{
If (LEqual (^^^^LPCB.EC0.OSTY, One))
{
Store (Zero, ^^^^LPCB.EC0.OSTY)
}
}
}
Return (Package (0x0A)
{
0x46,
0x28,
Zero,
0x0A,
0x14,
0x1E,
0x28,
0x32,
0x3C,
0x46
})
}
Method (_BCM, 1, NotSerialized)
{
Divide (Arg0, 0x0A, Local0, Local1)
Store (Local1, ^^^^LPCB.EC0.BRTS)
}
Method (_BQC, 0, NotSerialized)
{
Multiply (^^^^LPCB.EC0.BRTS, 0x0A, Local0)
Return (Local0)
}
}
In my try to make it show up i also added
Name (_HID, EisaId ("LCD1234"))
in Device (LCD)
And
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
right above Device (LCD)
Also i am able to change brightness from my Fn Buttons but no notification is shows as the sound changing does!
Please any ideas?
Led Wireless
How I can turn on wireless led with code in DSDT?
Fuentes y registro de autoría (32 usuarios acreditados · Hilo #1960)
| Usuario | Rol en la monografía | Mensajes | Periodo activo |
|---|---|---|---|
| @uman | Colaborador clave | 21 | 2009-06-02 → 2010-03-29 |
| @kizwan | Colaborador clave | 18 | 2009-06-01 → 2010-03-20 |
| @pentiumpc | Autor principal | 8 | 2009-01-19 → 2009-03-03 |
| @Slither2008 | Colaborador clave | 6 | 2009-03-03 → 2009-03-05 |
| @candykane | Colaborador clave | 6 | 2009-05-13 |
| @richarda | Colaborador clave | 5 | 2010-03-16 → 2010-03-21 |
| @THeKiNG | Colaborador clave | 4 | 2009-06-03 → 2009-06-18 |
| @breakky | Colaborador clave | 4 | 2010-03-13 → 2010-03-14 |
| @Thireus | Colaborador clave | 3 | 2009-05-07 → 2009-05-13 |
| @Alexaar | Colaborador | 2 | 2009-04-13 → 2009-04-29 |
| @The Edge3000 | Colaborador | 2 | 2009-08-11 → 2009-09-07 |
| @Gurruwiwi | Colaborador | 2 | 2009-08-17 |
| @EnzoFX | Colaborador | 2 | 2009-09-03 |
| @Sweaty | Colaborador | 2 | 2009-12-21 |
| @ping99 | Colaborador | 2 | 2010-01-18 → 2010-07-04 |
| @Nameci | Colaborador | 2 | 2010-01-31 |
| @barnum | Colaborador | 2 | 2010-03-13 → 2010-03-26 |
| @adriangb | Colaborador | 2 | 2010-04-01 |
| @kDawg | Colaborador | 1 | 2009-07-15 |
| @aschar1 | Colaborador | 1 | 2009-08-07 |
| @sk1nhd33t | Colaborador | 1 | 2009-08-09 |
| @Common_Sense | Colaborador | 1 | 2009-09-08 |
| @gnychis | Colaborador | 1 | 2009-09-25 |
| @msingh | Colaborador | 1 | 2009-10-05 |
| @2nerd4u | Colaborador | 1 | 2009-10-20 |
| @mm67 | Colaborador | 1 | 2009-12-21 |
| @adityaxavier | Colaborador | 1 | 2010-01-09 |
| @pocenk | Colaborador | 1 | 2010-01-29 |
| @saul1d | Colaborador | 1 | 2010-03-20 |
| @SaGaR | Colaborador | 1 | 2010-12-20 |
| @ribben89 | Colaborador | 1 | 2011-02-05 |
| @Marchrius | Colaborador | 1 | 2013-01-21 |