Contribute
Register

<< Solved >> Lenovo Ideapad 730S, USB port configuration and power property injection (need help)

Status
Not open for further replies.
Joined
Nov 19, 2019
Messages
5
Motherboard
Lenovo 730S-13IWL
CPU
i7 8565u
Graphics
UHD 620
Greetings! I have a Lenovo Ideapad 730S laptop, running Mojave 10.14.6. I followed Rehabman's Custom SSDT for USBInjectAll.kext guide to create SSDT-UIAC.aml to define available ports, and also tried out Hackintool approach. A screen shot of ports defined is attached below. This laptop has 2x Thunderbolt, USB-C 3.1 Gen 2, and 1x USB-C 3.1 Gen 1.

Hot plug on those Thunderbolt USB-C ports do not work, reconnected device (USB Hub) appears under HS port instead of SS port. USB stick on the HUB won't be detected. Is it a Thunderbolt issue or Power Supply Limitation issue? By the way, I didn't get "not enough power" warning message.

Another problem is that I cannot seem to configure those defined ports anymore. I removed SSDT-UIAC.aml, USBInjectAll.kext, but only those defined available ports shown up in IORegistryExplorer, ports like HS04, HS06, HS08 won't show up. I also tried to change port type in SSDT-UIAC.aml, but it won't reflect in Hackintool USB panel either. A debug file is attached below.

Lastly, I have trouble setup proper power injection for USB ports. According to rehabman's guide, I need to rename EC0 to EC, and able to see USBX@0, from which power supply is defined. However, I don't see USBX@0 in my IORegistryExplorer at all. I may have seen it before, but it is not there anymore. I tried use SSDT-USBX.aml, and it does not have any effect. Sample SSDT-UIAC.aml and SSDT-USBX.aml will be attached below. I am hopping with proper power injection, the USB stick issue I had above could be resolved.

Cheers,

J
Screen Shot 2019-12-22 at 8.51.36 PM.png
 

Attachments

  • debug_8111.zip
    2.7 MB · Views: 69
  • SSDT-UIAC.aml
    511 bytes · Views: 57
  • SSDT-USBX.aml
    135 bytes · Views: 67
Last edited:
Greetings! I have a Lenovo Ideapad 730S laptop, running Mojave 10.14.6. I followed Rehabman's Custom SSDT for USBInjectAll.kext guide to create SSDT-UIAC.aml to define available ports, and also tried out Hackintool approach. A screen shot of ports defined is attached below. This laptop has 2x Thunderbolt, USB-C 3.1 Gen 2, and 1x USB-C 3.1 Gen 1.

Hot plug on those Thunderbolt USB-C ports do not work, reconnected device (USB Hub) appears under HS port instead of SS port. USB stick on the HUB won't be detected. Is it a Thunderbolt issue or Power Supply Limitation issue? By the way, I didn't get "not enough power" warning message.

Another problem is that I cannot seem to configure those defined ports anymore. I removed SSDT-UIAC.aml, USBInjectAll.kext, but only those defined available ports shown up in IORegistryExplorer, ports like HS04, HS06, HS08 won't show up. I also tried to change port type in SSDT-UIAC.aml, but it won't reflect in Hackintool USB panel either. A debug file is attached below.

Lastly, I have trouble setup proper power injection for USB ports. According to rehabman's guide, I need to rename EC0 to EC, and able to see USBX@0, from which power supply is defined. However, I don't see USBX@0 in my IORegistryExplorer at all. I may have seen it before, but it is not there anymore. I tried use SSDT-USBX.aml, and it does not have any effect. Sample SSDT-UIAC.aml and SSDT-USBX.aml will be attached below. I am hopping with proper power injection, the USB stick issue I had above could be resolved.

Cheers,

JView attachment 441684

Hi there,

Okay, clearly the IOReg output and the Hackintool screengrab are from different "states" of configuration. Also the Debug files contain no USBInjectAll and no USB SSDTs, so it's difficult for me to understand what the set-up is at any given time.

Anyway I'll go in blind ...

All your USB3 ports, of whatever flavour, have USB2 equivalents. They are usually enumerated logically, for e.g: HS01=SS01, but a manufacturer can change this. As I've no way of knowing if they have, I'll assume it's as straight as the example.

HS01/SS01 seems to have an LG DVD or HDD drive attached.
HS02/SS02 is free in both scenarios and clearly you've plugged a hub in there.
HS03/SS03 not present in IOReg but is in Hackintool - different state?
HS05 internal - to provide bridge.
HS06 internal for keyboard
HS07 internal for webcam
HS08 internal for Bluetooth

So you can see that your available, external ports are probably the first 3x. An Intel chipset will usually have many more ports than are used and hence, in this case, several are used internally.

Next:

1) The XHCI rename in config.plist isn't working. Check the figures you are using. You should be renaming XHC1 not XHCI.

2) The state as shown in your IORegExplorer export is more correct in appearance than the Hackintool one - except for that wrong rename.

3) As for power delivery - that's a complicated subject. At the basic level remember Hackintool will provide 2x SSDT's for you, the SSDT-UIAC.aml and SSDT-EC.aml. To use these you need USBInjectAll.kext and not USBPorts.kext.

The USBX method only works for certain later system-definitions, which does include your MacBookPro15,4. So you need to add it with an *.aml.

Was this the one you used?

Code:
// USB power properties via USBX device
DefinitionBlock("", "SSDT", 2, "hack", "USBX", 0)
{
    Device(_SB.USBX)
    {
        Name(_ADR, 0)
        Method (_DSM, 4)
        {
            If (!Arg2) { Return (Buffer() { 0x03 } ) }
            Return (Package()
            {
                // these values from MacBookPro14,3
                "kUSBSleepPortCurrentLimit", 3000,
                "kUSBWakePortCurrentLimit", 3000,
            })
        }
    }
}
//EOF

:)
 
Last edited:
Hi there,

Okay, clearly the IOReg output and the Hackintool screengrab are from different "states" of configuration. Also the Debug files contain no USBInjectAll and no USB SSDTs, so it's difficult for me to understand what the set-up is at any given time.

Anyway I'll go in blind ...

All your USB3 ports, of whatever flavour, have USB2 equivalents. They are usually enumerated logically, for e.g: HS01=SS01, but a manufacturer can change this. As I've no way of knowing if they have, I'll assume it's as straight as the example.

HS01/SS01 seems to have an LG DVD or HDD drive attached.
HS02/SS02 is free in both scenarios and clearly you've plugged a hub in there.
HS03/SS03 not present in IOReg but is in Hackintool - different state?
HS05 internal - to provide bridge.
HS06 internal for keyboard
HS07 internal for webcam
HS08 internal for Bluetooth

So you can see that your available, external ports are probably the first 3x. An Intel chipset will usually have many more ports than are used and hence, in this case, several are used internally.

Next:

1) The XHCI rename in config.plist isn't working. Check the figures you are using. You should be renaming XHC1 not XHCI.

2) The state as shown in your IORegExplorer export is more correct in appearance than the Hackintool one - except for that wrong rename.

3) As for power delivery - that's a complicated subject. At the basic level remember Hackintool will provide 2x SSDT's for you, the SSDT-UIAC.aml and SSDT-EC.aml. To use these you need USBInjectAll.kext and not USBPorts.kext.

The USBX method only works for certain later system-definitions, which does include your MacBookPro15,4. So you need to add it with an *.aml.

Was this the one you used?

Code:
// USB power properties via USBX device
DefinitionBlock("", "SSDT", 2, "hack", "USBX", 0)
{
    Device(_SB.USBX)
    {
        Name(_ADR, 0)
        Method (_DSM, 4)
        {
            If (!Arg2) { Return (Buffer() { 0x03 } ) }
            Return (Package()
            {
                // these values from MacBookPro14,3
                "kUSBSleepPortCurrentLimit", 3000,
                "kUSBWakePortCurrentLimit", 3000,
            })
        }
    }
}
//EOF

:)

Thank you for taking your time to dive into my problem.

I have added back USBInjectAll.kext, SSDT-UIAC.aml and SSDT-USBX.aml. Based on Preboot.log, patched aml files are injected successfully; however here are differences on USB ports information in IORegistryExplorer, SSDT-UIAC.aml and Hackintool.

On another note, my understanding of USBInjectAll is that it contains a list of presets. It picks one that best matches to my device id (e.g. 8086_9dxx). And a custom SSDT file is used to eliminate unavailable ports defined in the preset.

Given above I should expect that all ports from a preset to show up in IORegistryExplorer if no custom SSDT is present in ACPI/Patch folder. But I experienced something different, the USB information in IORegistryExplorer remain unchanged after removing all patched SSDT files.

Please kindly point out if here is anything else also affects USB configuration.

New debug file and screen capture of the same state are attached below.
 

Attachments

  • Screen Shot 2020-01-02 at 4.21.33 PM.png
    Screen Shot 2020-01-02 at 4.21.33 PM.png
    117.8 KB · Views: 71
  • debug_12199.zip
    2.3 MB · Views: 47
Thank you for taking your time to dive into my problem.

I have added back USBInjectAll.kext, SSDT-UIAC.aml and SSDT-USBX.aml. Based on Preboot.log, patched aml files are injected successfully; however here are differences on USB ports information in IORegistryExplorer, SSDT-UIAC.aml and Hackintool.

On another note, my understanding of USBInjectAll is that it contains a list of presets. It picks one that best matches to my device id (e.g. 8086_9dxx). And a custom SSDT file is used to eliminate unavailable ports defined in the preset.

Given above I should expect that all ports from a preset to show up in IORegistryExplorer if no custom SSDT is present in ACPI/Patch folder. But I experienced something different, the USB information in IORegistryExplorer remain unchanged after removing all patched SSDT files.

Please kindly point out if here is anything else also affects USB configuration.

New debug file and screen capture of the same state are attached below.
you will also need to add the port limit patch to enable all your ports to appear,

you may need to refresh the hackintool for all your ports to then appear

then plug in devices to each port, remove unused ports, then export your SSDT
 
I tried all 4 port limit patches for 10.4.6, but nothing is changed.

I installed OS with USBInjectAll, and was able to see all defined ports for 8086_9dxx. After playing around with custom SSDT files, USB information in IORegistryExplorer seems "stuck". Neither changing content of USB-UIAC.aml nor removing USBInjectAll had any effect.

How can I tell if USBInjectAll is working correctly? Any log file or debug file I should check?
 
MacBookPro15,4 is not included in USBInjectAll plist file. That is probably why it was not working. I installed the OS with MacBookPro14,1 but switched SMBIOS to MacBookPro15,4 later on.
 
Status
Not open for further replies.
Back
Top