Aşağıdaki yamalar
sadece ve sadece ekran kartını kapatmak içindir. Batarya ses kartı vs için uyguladığınız yamalar varsa tekrar uygulayın.
Sil
SSDT-3x.dsl
SSDT-4x.dsl
SSDT-5x.dsl
x ile biten SSDT dosyalarının yamalanmasına gerek yoktur.
1. MaciASL indirin.
2. MaciASL/Preferences/Sources kısmına eğer ekli değilse şunu ekleyin.
Name RehabMan Laptop
URL
http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
Aşağıdaki dosyaları açarak yamaları uygulayın.
Önce GFX0 geçen bütün dosyaları buluyoruz. Dosyaların olduğu klasöre gidiyoruz ve terminale şunu yazıyoruz.
Sonuç şu olacaktır.
Kod:
DSDT.dsl
SSDT-0.dsl
SSDT-1.dsl
SSDT-10.dsl
SSDT-11.dsl
SSDT-12.dsl
SSDT-2.dsl
SSDT-6.dsl
SSDT-7.dsl
SSDT-8.dsl
SSDT-9.dsl
Bütün bu dosyalara yama yapılacaktır. İlk yapacağınız yama her zaman Rename _DSM methods to XDSM olsun. Cihazların ayarlarını barındıran bu methodların silinmesi veya isminin değişmesi gerekir.Bazı dosyalarda bu yamaya gerek olmayabilir.
KISIM 1. Rename GFX0 to IGPU yaması
DSDT.dsl
- Rename _DSM methods to XDSM
- OS Check Fix (Windows 8) Buradaki amaç macOS u Windows gibi tanıtmak. Çünkü bazı cihazlar mesela sadece uygun Windows versiyonu varsa açılır. Sizin cihazınızda en yüksek Windows ne ise ona uygun yamayalabilirsiniz.
- Rename GFX0 to IGPU
Ekran kartı için bütün yamalarda ilk bunun uygulanması gerekir.
- Batarya vs için diğer yamaları uygulamayı unutmayın.
SSDT-0.dsl
- Rename _DSM methods to XDSM
- Rename GFX0 to IGPU
SSDT-1.dsl
- Rename GFX0 to IGPU
Bunu yapıp compile dediğimizde şu hatayı alıyoruz.
246, 6126, syntax error, unexpected PARSEOP_PACKAGE
Bu hatayı görünce yapacağımız yama şu
- Remove _PSS placeholders
SSDT-2.dsl
- Rename GFX0 to IGPU
SSDT-6.dsl
- Rename GFX0 to IGPU
SSDT-7.dsl
- Rename GFX0 to IGPU
SSDT-8.dsl
- Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım.
SSDT-9.dsl
- Rename GFX0 to IGPU
SSDT-10.dsl
- Rename B0D3 to HDAU grafik kartı ve ses ile alakalı yama. layout id 12 kullanır. Eğer ses layout için başka numara kullanıyorsanız bunu değiştirebilirsiniz.
- Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım.
SSDT-11.dsl
- Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım.
SSDT-12.dsl
- Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım.
Bu dosyayı compile etmyeye çalışınca hata alıyoruz.
Bu hataı alınca uygulayacağınız yama
[gfx0] Cleanup/Fix Errors (SSDT)
KISIM 2. Ekran Kartının Kapatılması
Şimdi yamanın ilk ayağı olan Rename GFX0 to IGPU kısmını bitirdik. Şimdi yapacağımız external kart olan SSDT yi bulup o kartın
_INI (başlangıç) kısmında _OFF metodunu çağıracağız.
Şimdi _OFF geçen dosyaları bulalım. Yine komut satırına gidiyoruz ve şunu yazıyoruz.
Kod:
grep -l Method.*_OFF *.dsl
Sonuç şu olacaktır.
SSDT-12.dsl
Demek ki ekran kapatma kısmımız bu dosyada.
Şimdide ekran kartını başlatan dosyaları bulalım.
grep -l Method.*_INI *.dsl
DSDT.dsl
SSDT-10.dsl
SSDT-11.dsl
SSDT-12.dsl
Harici ekran kartlarının ismi genelde PEGP olur. Şimdi SSDT dosyalarına tek tek bakalım ve ekran kartının _INI kısmını bulalım.
SSDT-10.dsl
_INI arıyoruz
ekran kartı yok.
SSDT-11.dsl
Kod:
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
}
Gördüğünüz gibi INI methodumuz bu fakat _OFF methodumuz başka dosyada. Böyle olduğu zaman bazı şeylere dikkat etmemiz gerekiyor. Bazen _OFF kısmında EC(Embedded Controller) ye erişim sağlanır. Biz _INI den _OFF u çağırdığımız zaman bu EC aktif olmayabilir ve bu yüzden probelmler çıkar. Bu yüzden
SSDT-12.dsl dosyasındaki _OFF kısmını inceleyelim
Kod:
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
}
Gördüğünüz üzere \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) ile EC ye erişim sağlanıyor. Bunu halletmemiz gerekiyor.
Biz bunu bu dosyadan silip başka dosyaya ekleyeceğiz. O satırı siliyoruz ve şu hale getiriyoruz ve compile diyoruz
Kod:
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
}
SSDT-11.dsl dosyasının _INI kısmını söyle yapıyoruz.
Kod:
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj) // ekran kartinin adresi
_OFF()
}
Gördüğünüz gibi _OFF metodo SSDT-12.dsl de olduğundan External.. diyerek o methodu belirtiyoruz. ve _OFF() ile kapatıyoruz. Buraya dikkat edin. SSDT-12.dsl dosyasındaki grakik kartının
adres yolu neyse onu yazmanız gerek. Farklı cihazlarda bu adres farklı olabilir. Mesela SB.PCI0.PEG0.PEGP gibi.
İşimiz hala bitmedi. Sildiğimiz \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) satırını eklememiz gerekiyor. DSDT dosyası ile EC başlatılıyor.
Biz de bu satırı DSDT dosyasına ekleyeceğiz.
DSDT.dsl dosyasını açıyoruz.
EC0 nın reg methodu şöyle bir şekilde
Kod:
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECFL)
}
}
Bunu şu şekide değiştiriyoruz
Kod:
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECFL)
}
// EC0 kodunu ekliyoruz.
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
}
}
Bu yamalar ile diğer ekran kartı kapanacaktır. Fakat bazı durumlarda bu yamalar yüzünde uykuya geçme problemi olabilir. Bu yüzden aşağıdaki yamaları da yapıyoruz. Aşağıdaki yamalar ile uykuya geçmeden önce ekran kartı açılıyor ve uyandıktan sonra tekrar kapatılıyor. Bu yamaları MaciASL nin patch yazan text kutusuna yazıp patch diyorsunuz.
DSDT.dsl
Kod:
into method label _PTS code_regex ([\s\S]*) replace_matched
begin
External(\\_SB.PCI0.RP05.PEGP._ON, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.RP05.PEGP._ON)) { \\_SB.PCI0.RP05.PEGP._ON() }\n
%1
end;
into method label _WAK code_regex (Return\s+\(.*) replace_matched
begin
External(\\_SB.PCI0.RP05.PEGP._OFF, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.RP05.PEGP._OFF)) { \\_SB.PCI0.RP05.PEGP._OFF() }\n
%1
end;
Burada önemli olan nokta _SB.PCI0.RP05.PEGP kısmı her ekran kartında farklı olabilir. Bazılarında mesela SB.PCI0.PEG0.PEGP Bu rehberi okuyanlar ona dikkat etsinler.
Gördüğünüz gibi rehber uzun olduğu için herkese birebir yardım etmem olanaksız. Umarım bana anlayış göstrebilirsiniz.