Contribute
Register

[Guide] Lenovo ThinkPad L440 (v3.0)

Status
Not open for further replies.
Yes it is necessary for me, I will upload you my ALC292.kext,i might have uploaded the wrong one somehow (maybe.)
Nope - it was my fault. I had a few patches in my Clover config to zero out some codecs. I'm assuming that was what was done in the past to "fix" this problem (disable the external microphone all together).

I also was able to reproduce the exact same problem you described above. Therefore, I will apply the patch.

Also, if you get a chance, can you read the issue I posted about here? It's in regards to graphics glitching with hot plugging my DisplayPort cable to an external monitor:
https://www.tonymacx86.com/threads/fix-resolve-boot-screen-garble.175799/page-16#post-1564140
 
Ok i will check that tomorrow and see if i have the same issue or not.
I did try a few times and didn't notice any issue,however my MiniDP Adapter is damaged, ordered one, it should arrive tomorrow so i can test it out.
 
Ok i will check that tomorrow and see if i have the same issue or not.
I did try a few times and didn't notice any issue,however my MiniDP Adapter is damaged, ordered one, it should arrive tomorrow so i can test it out.
Thank you. The problem is described in the post linked above. As you can see, it's not a major issue - just a little annoying. I'm not sure if there's a patch or something I'm missing.

Thanks again for all of your work that you've published for everyone. It has helped me with my T440s.
 
Thank you. The problem is described in the post linked above. As you can see, it's not a major issue - just a little annoying. I'm not sure if there's a patch or something I'm missing.

Thanks again for all of your work that you've published for everyone. It has helped me with my T440s.
Actually after i did read the entire post you wrote,i can confirm that i dont have that issue/never had it at all.will check your files.
 
It depends on what you want me to help you for now,if you are at Audio, Install my Audio Files and on DSDT apply the patch layout ID 12 but go check the code and change it to 13 to match my audio codec patch. so it applies layout ID 13 if you are using static patch with MaciASL.

I am using your audio files with your config.plist and your SSDT-L440.aml and i am still not getting the audio, brightness and battery to work. The only thing i've change from your config was to disable 128MB DVMT Patch. Aside that everything is same as yours.
 
I am using your audio files with your config.plist and your SSDT-L440.aml and i am still not getting the audio, brightness and battery to work. The only thing i've change from your config was to disable 128MB DVMT Patch. Aside that everything is same as yours.
I see that i have a lot of request about the same stuff and most of them are T440P users.
For the sake of the users and by the fact that T440P is very similar to my L440 but has slightly different ACPI Structure im going to make a guide for T440P too.
Im working on the files already, but the only part where i might get stuck is battery status,i see that on @RehabMan Laptop DSDT Patch there is one for T440P already implemented.
@RehabMan i need your help on converting the static patch into Hotpatch for the T440P.
This is the patch that im required to implement for Battery Status:
Code:
#Maintained by: RehabMan for: Laptop Patches
#battery_Lenovo-T440p.txt

# created by yekki 2014-09-18
# cleanup/finished by RehabMan 2014-09-18

# works for:
#  Lenovo T440p
#  Lenovo E540
#  Lenovo E440

# Note: This DSDT requires "Fix Mutex with non-zero SyncLevel"

into method label B1B2 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) }\n
end;

into method label B1B4 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B4, 4, NotSerialized)\n
{\n
    Store(Arg3, Local0)\n
    Or(Arg2, ShiftLeft(Local0, 8), Local0)\n
    Or(Arg1, ShiftLeft(Local0, 8), Local0)\n
    Or(Arg0, ShiftLeft(Local0, 8), Local0)\n
    Return(Local0)\n
}\n
end;

into device label EC code_regex HWAK,\s+16, replace_matched begin HWK0,8,HWK1,8, end;
into method label _L1D code_regex \(\\_SB\.PCI0\.LPC\.EC\.HWAK, replaceall_matched begin (B1B2(\\_SB.PCI0.LPC.EC.HWK0,\\_SB.PCI0.LPC.EC.HWK1), end;

into device label EC code_regex SBRC,\s+16, replace_matched begin BR00,8,BR01,8, end;
into device label EC code_regex SBFC,\s+16, replace_matched begin BF00,8,BF01,8, end;
into device label EC code_regex SBAC,\s+16, replace_matched begin BA00,8,BA01,8, end;
into device label EC code_regex SBVO,\s+16, replace_matched begin BV00,8,BV01,8, end;
into device label EC code_regex SBBM,\s+16, replace_matched begin BB00,8,BB01,8, end;
into device label EC code_regex SBDC,\s+16, replace_matched begin BD00,8,BD01,8, end;
into device label EC code_regex SBDV,\s+16, replace_matched begin SB00,8,SB01,8, end;
into device label EC code_regex SBSN,\s+16 replace_matched begin BS00,8,BS01,8 end;

into method label GBST code_regex \(SBRC, replaceall_matched begin (B1B2(BR00,BR01), end;
into method label GBIF code_regex \(SBFC, replaceall_matched begin (B1B2(BF00,BF01), end;
into method label GBST code_regex \(SBAC, replaceall_matched begin (B1B2(BA00,BA01), end;
into method label GBST code_regex \(SBVO, replaceall_matched begin (B1B2(BV00,BV01), end;
into method label GBIF code_regex \(SBBM, replaceall_matched begin (B1B2(BB00,BB01), end;
into method label GBIF code_regex \(SBDC, replaceall_matched begin (B1B2(BD00,BD01), end;
into method label GBIT code_regex \(SBDV, replaceall_matched begin (B1B2(SB00,SB01), end;
into method label GBIT code_regex \(SBSN, replaceall_matched begin (B1B2(BS00,BS01), end;
into method label GBIF code_regex \(SBSN, replaceall_matched begin (B1B2(BS00,BS01), end;
into method label GBIF code_regex \(SBDV\) replaceall_matched begin (B1B2(SB00,SB01)) end;
into method label GBIF code_regex SBDV, replaceall_matched begin B1B2(SB00,SB01), end;

into device label EC code_regex SBCH,\s+32 replace_matched begin SH00,8,SH01,8,SH02,8,SH03,8 end;
into method label GBIF code_regex \(SBCH, replaceall_matched begin (B1B4(SH00,SH01,SH02,SH03), end;

into device label EC code_regex (SBMN,)\s+(128) replace_matched begin BMNX,%2,//%1%2 end;
into device label EC code_regex (SBDN,)\s+(128) replace_matched begin BDNX,%2,//%1%2 end;

into method label RE1B parent_label EC remove_entry;
into method label RECB parent_label EC remove_entry;
into device label EC insert
begin
Method (RE1B, 1, NotSerialized)\n
// Arg0 - offset in bytes from zero-based EC\n
{\n
    OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
    Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
    Return(BYTE)\n
}\n
Method (RECB, 2, Serialized)\n
// Arg0 - offset in bytes from zero-based EC\n
// Arg1 - size of buffer in bits\n
{\n
    ShiftRight(Arg1, 3, Arg1)\n
    Name(TEMP, Buffer(Arg1) { })\n
    Add(Arg0, Arg1, Arg1)\n
    Store(0, Local0)\n
    While (LLess(Arg0, Arg1))\n
    {\n
        Store(RE1B(Arg0), Index(TEMP, Local0))\n
        Increment(Arg0)\n
        Increment(Local0)\n
    }\n
    Return(TEMP)\n
}\n
end;

into method label GBIF code_regex \(SBMN, replaceall_matched begin (RECB(0xA0,128), end;
into method label GBIF code_regex \(SBDN, replaceall_matched begin (RECB(0xA0,128), end;
Not sure where should i begin with,i need like a few Hints and steps to follow with a simple example or in case you have it on one of your laptops i would like to get the data so i can look at what you did.

A few more issues to be solved that i need from an existing T440P user that have already implemented those:
  • to give me a ioreg with usbinjectall.kext + USB Port limit and attached a usb 2 and 3 device in everyport so i can create an Active usb Ports SSDT Injector
  • HDMI Audio Port patch so i can add it to the guide.
  • Battery status into hotpatch conversion
Will attach files in case you need it.
 
I see that i have a lot of request about the same stuff and most of them are T440P users.
For the sake of the users and by the fact that T440P is very similar to my L440 but has slightly different ACPI Structure im going to make a guide for T440P too.
Im working on the files already, but the only part where i might get stuck is battery status,i see that on @RehabMan Laptop DSDT Patch there is one for T440P already implemented.
@RehabMan i need your help on converting the static patch into Hotpatch for the T440P.
This is the patch that im required to implement for Battery Status:
Code:
#Maintained by: RehabMan for: Laptop Patches
#battery_Lenovo-T440p.txt

# created by yekki 2014-09-18
# cleanup/finished by RehabMan 2014-09-18

# works for:
#  Lenovo T440p
#  Lenovo E540
#  Lenovo E440

# Note: This DSDT requires "Fix Mutex with non-zero SyncLevel"

into method label B1B2 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) }\n
end;

into method label B1B4 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B4, 4, NotSerialized)\n
{\n
    Store(Arg3, Local0)\n
    Or(Arg2, ShiftLeft(Local0, 8), Local0)\n
    Or(Arg1, ShiftLeft(Local0, 8), Local0)\n
    Or(Arg0, ShiftLeft(Local0, 8), Local0)\n
    Return(Local0)\n
}\n
end;

into device label EC code_regex HWAK,\s+16, replace_matched begin HWK0,8,HWK1,8, end;
into method label _L1D code_regex \(\\_SB\.PCI0\.LPC\.EC\.HWAK, replaceall_matched begin (B1B2(\\_SB.PCI0.LPC.EC.HWK0,\\_SB.PCI0.LPC.EC.HWK1), end;

into device label EC code_regex SBRC,\s+16, replace_matched begin BR00,8,BR01,8, end;
into device label EC code_regex SBFC,\s+16, replace_matched begin BF00,8,BF01,8, end;
into device label EC code_regex SBAC,\s+16, replace_matched begin BA00,8,BA01,8, end;
into device label EC code_regex SBVO,\s+16, replace_matched begin BV00,8,BV01,8, end;
into device label EC code_regex SBBM,\s+16, replace_matched begin BB00,8,BB01,8, end;
into device label EC code_regex SBDC,\s+16, replace_matched begin BD00,8,BD01,8, end;
into device label EC code_regex SBDV,\s+16, replace_matched begin SB00,8,SB01,8, end;
into device label EC code_regex SBSN,\s+16 replace_matched begin BS00,8,BS01,8 end;

into method label GBST code_regex \(SBRC, replaceall_matched begin (B1B2(BR00,BR01), end;
into method label GBIF code_regex \(SBFC, replaceall_matched begin (B1B2(BF00,BF01), end;
into method label GBST code_regex \(SBAC, replaceall_matched begin (B1B2(BA00,BA01), end;
into method label GBST code_regex \(SBVO, replaceall_matched begin (B1B2(BV00,BV01), end;
into method label GBIF code_regex \(SBBM, replaceall_matched begin (B1B2(BB00,BB01), end;
into method label GBIF code_regex \(SBDC, replaceall_matched begin (B1B2(BD00,BD01), end;
into method label GBIT code_regex \(SBDV, replaceall_matched begin (B1B2(SB00,SB01), end;
into method label GBIT code_regex \(SBSN, replaceall_matched begin (B1B2(BS00,BS01), end;
into method label GBIF code_regex \(SBSN, replaceall_matched begin (B1B2(BS00,BS01), end;
into method label GBIF code_regex \(SBDV\) replaceall_matched begin (B1B2(SB00,SB01)) end;
into method label GBIF code_regex SBDV, replaceall_matched begin B1B2(SB00,SB01), end;

into device label EC code_regex SBCH,\s+32 replace_matched begin SH00,8,SH01,8,SH02,8,SH03,8 end;
into method label GBIF code_regex \(SBCH, replaceall_matched begin (B1B4(SH00,SH01,SH02,SH03), end;

into device label EC code_regex (SBMN,)\s+(128) replace_matched begin BMNX,%2,//%1%2 end;
into device label EC code_regex (SBDN,)\s+(128) replace_matched begin BDNX,%2,//%1%2 end;

into method label RE1B parent_label EC remove_entry;
into method label RECB parent_label EC remove_entry;
into device label EC insert
begin
Method (RE1B, 1, NotSerialized)\n
// Arg0 - offset in bytes from zero-based EC\n
{\n
    OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
    Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
    Return(BYTE)\n
}\n
Method (RECB, 2, Serialized)\n
// Arg0 - offset in bytes from zero-based EC\n
// Arg1 - size of buffer in bits\n
{\n
    ShiftRight(Arg1, 3, Arg1)\n
    Name(TEMP, Buffer(Arg1) { })\n
    Add(Arg0, Arg1, Arg1)\n
    Store(0, Local0)\n
    While (LLess(Arg0, Arg1))\n
    {\n
        Store(RE1B(Arg0), Index(TEMP, Local0))\n
        Increment(Arg0)\n
        Increment(Local0)\n
    }\n
    Return(TEMP)\n
}\n
end;

into method label GBIF code_regex \(SBMN, replaceall_matched begin (RECB(0xA0,128), end;
into method label GBIF code_regex \(SBDN, replaceall_matched begin (RECB(0xA0,128), end;
Not sure where should i begin with,i need like a few Hints and steps to follow with a simple example or in case you have it on one of your laptops i would like to get the data so i can look at what you did.

A few more issues to be solved that i need from an existing T440P user that have already implemented those:
  • to give me a ioreg with usbinjectall.kext + USB Port limit and attached a usb 2 and 3 device in everyport so i can create an Active usb Ports SSDT Injector
  • HDMI Audio Port patch so i can add it to the guide.
  • Battery status into hotpatch conversion
Will attach files in case you need it.

ACPI hotpatch guide:
http://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/

Once you accomplish your first battery hotpatch, the second/third/etc are cake.
 
Last edited:
I see that i have a lot of request about the same stuff and most of them are T440P users.
For the sake of the users and by the fact that T440P is very similar to my L440 but has slightly different ACPI Structure im going to make a guide for T440P too.
Im working on the files already, but the only part where i might get stuck is battery status,i see that on @RehabMan Laptop DSDT Patch there is one for T440P already implemented.
@RehabMan i need your help on converting the static patch into Hotpatch for the T440P.
This is the patch that im required to implement for Battery Status:
Code:
#Maintained by: RehabMan for: Laptop Patches
#battery_Lenovo-T440p.txt

# created by yekki 2014-09-18
# cleanup/finished by RehabMan 2014-09-18

# works for:
#  Lenovo T440p
#  Lenovo E540
#  Lenovo E440

# Note: This DSDT requires "Fix Mutex with non-zero SyncLevel"

into method label B1B2 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) }\n
end;

into method label B1B4 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B4, 4, NotSerialized)\n
{\n
    Store(Arg3, Local0)\n
    Or(Arg2, ShiftLeft(Local0, 8), Local0)\n
    Or(Arg1, ShiftLeft(Local0, 8), Local0)\n
    Or(Arg0, ShiftLeft(Local0, 8), Local0)\n
    Return(Local0)\n
}\n
end;

into device label EC code_regex HWAK,\s+16, replace_matched begin HWK0,8,HWK1,8, end;
into method label _L1D code_regex \(\\_SB\.PCI0\.LPC\.EC\.HWAK, replaceall_matched begin (B1B2(\\_SB.PCI0.LPC.EC.HWK0,\\_SB.PCI0.LPC.EC.HWK1), end;

into device label EC code_regex SBRC,\s+16, replace_matched begin BR00,8,BR01,8, end;
into device label EC code_regex SBFC,\s+16, replace_matched begin BF00,8,BF01,8, end;
into device label EC code_regex SBAC,\s+16, replace_matched begin BA00,8,BA01,8, end;
into device label EC code_regex SBVO,\s+16, replace_matched begin BV00,8,BV01,8, end;
into device label EC code_regex SBBM,\s+16, replace_matched begin BB00,8,BB01,8, end;
into device label EC code_regex SBDC,\s+16, replace_matched begin BD00,8,BD01,8, end;
into device label EC code_regex SBDV,\s+16, replace_matched begin SB00,8,SB01,8, end;
into device label EC code_regex SBSN,\s+16 replace_matched begin BS00,8,BS01,8 end;

into method label GBST code_regex \(SBRC, replaceall_matched begin (B1B2(BR00,BR01), end;
into method label GBIF code_regex \(SBFC, replaceall_matched begin (B1B2(BF00,BF01), end;
into method label GBST code_regex \(SBAC, replaceall_matched begin (B1B2(BA00,BA01), end;
into method label GBST code_regex \(SBVO, replaceall_matched begin (B1B2(BV00,BV01), end;
into method label GBIF code_regex \(SBBM, replaceall_matched begin (B1B2(BB00,BB01), end;
into method label GBIF code_regex \(SBDC, replaceall_matched begin (B1B2(BD00,BD01), end;
into method label GBIT code_regex \(SBDV, replaceall_matched begin (B1B2(SB00,SB01), end;
into method label GBIT code_regex \(SBSN, replaceall_matched begin (B1B2(BS00,BS01), end;
into method label GBIF code_regex \(SBSN, replaceall_matched begin (B1B2(BS00,BS01), end;
into method label GBIF code_regex \(SBDV\) replaceall_matched begin (B1B2(SB00,SB01)) end;
into method label GBIF code_regex SBDV, replaceall_matched begin B1B2(SB00,SB01), end;

into device label EC code_regex SBCH,\s+32 replace_matched begin SH00,8,SH01,8,SH02,8,SH03,8 end;
into method label GBIF code_regex \(SBCH, replaceall_matched begin (B1B4(SH00,SH01,SH02,SH03), end;

into device label EC code_regex (SBMN,)\s+(128) replace_matched begin BMNX,%2,//%1%2 end;
into device label EC code_regex (SBDN,)\s+(128) replace_matched begin BDNX,%2,//%1%2 end;

into method label RE1B parent_label EC remove_entry;
into method label RECB parent_label EC remove_entry;
into device label EC insert
begin
Method (RE1B, 1, NotSerialized)\n
// Arg0 - offset in bytes from zero-based EC\n
{\n
    OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
    Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
    Return(BYTE)\n
}\n
Method (RECB, 2, Serialized)\n
// Arg0 - offset in bytes from zero-based EC\n
// Arg1 - size of buffer in bits\n
{\n
    ShiftRight(Arg1, 3, Arg1)\n
    Name(TEMP, Buffer(Arg1) { })\n
    Add(Arg0, Arg1, Arg1)\n
    Store(0, Local0)\n
    While (LLess(Arg0, Arg1))\n
    {\n
        Store(RE1B(Arg0), Index(TEMP, Local0))\n
        Increment(Arg0)\n
        Increment(Local0)\n
    }\n
    Return(TEMP)\n
}\n
end;

into method label GBIF code_regex \(SBMN, replaceall_matched begin (RECB(0xA0,128), end;
into method label GBIF code_regex \(SBDN, replaceall_matched begin (RECB(0xA0,128), end;
Not sure where should i begin with,i need like a few Hints and steps to follow with a simple example or in case you have it on one of your laptops i would like to get the data so i can look at what you did.

A few more issues to be solved that i need from an existing T440P user that have already implemented those:
  • to give me a ioreg with usbinjectall.kext + USB Port limit and attached a usb 2 and 3 device in everyport so i can create an Active usb Ports SSDT Injector
  • HDMI Audio Port patch so i can add it to the guide.
  • Battery status into hotpatch conversion
Will attach files in case you need it.

@Sniki Great news, and thank you for your efforts. I am a T440P user and I am willing to help in any ways i can to make this happen.
Best regards and many thanks again.
 
@Sniki Great news, and thank you for your efforts. I am a T440P user and I am willing to help in any ways i can to make this happen.
Best regards and many thanks again.
You are welcome, i will need your help to test the files later (especially Battery Status) as soon as im done with making the files.
Also USB Ports,will guide you through the necessary steps for it.
 
Status
Not open for further replies.
Back
Top