Jump to content

[GUIDE] USB Fix El Capitan 10.11


830 posts in this topic

Recommended Posts

@falanx - if you had a working DSDT for yosemite, then one approach that may be easiest is to just rename EHC1 and EHC2 to something like EH01 and EH02.  Clover can do this or just edit your DSDT.   this is approach is outlined in the 1st post. This avoids the need for patching up the kext (i.e. no need for this custom kext)

Link to comment
Share on other sites

dp5 didnt liked the dummyusb kexts so i deleted them and it runs fine. now when updating to dp6 i got Kernel Panic @IOUsbFamily again, after adding the dummyusb kexts, i get till the login-screen but cant login because usb dont work -.-

Link to comment
Share on other sites

@falanx - if you had a working DSDT for yosemite, then one approach that may be easiest is to just rename EHC1 and EHC2 to something like EH01 and EH02.  Clover can do this or just edit your DSDT.   this is approach is outlined in the 1st post. This avoids the need for patching up the kext (i.e. no need for this custom kext)

I tried that but somehow it doesn't grab all my ports, or the wrong ones because when I enable my bluetooth my camera doesn't work. They get recognized on the same internal port. This is why I am trying to define all my ports so it won't get messed up. I will try again maybe something has changed from DP3 till DP6. Thanks for the answer anyway. :D

dp5 didnt liked the dummyusb kexts so i deleted them and it runs fine. now when updating to dp6 i got Kernel Panic @IOUsbFamily again, after adding the dummyusb kexts, i get till the login-screen but cant login because usb dont work -.-

In info.plist update com.apple.driver.usb.AppleUSBEHCI to 1.0.1 and com.apple.iokit.IOUSBHostFamily to 1.0.1 too. Maybe this will help ya.

Link to comment
Share on other sites

dp5 didnt liked the dummyusb kexts so i deleted them and it runs fine. now when updating to dp6 i got Kernel Panic @IOUsbFamily again, after adding the dummyusb kexts, i get till the login-screen but cant login because usb dont work -.-

It is best to avoid so-called "dummy" kexts (injectors with symlink binary) when they are not necessary. This is one of those cases where it is clearly not needed (I only know of a few cases where the "dummy" method is needed).

 

You can rename EHCx->EH0x, keep XHC (or rename to XHC if it was XHC1) and then control port injection with a normal AppleUSBMergeNub injector.

  • Like 1
Link to comment
Share on other sites

@falanx -- if the renaming approach is not working, then perhaps it is that your DSDT does not define the ports properly. Apple is now doing that via the kext vs DSDT. however, fixing in DSDT circumvents the need for 1 more kext to bother with. so i would look at the ports (i used about this mac/system report and ioreg) in say yosemite and then make sure all these same ports (and devices) are defined and defined uniquely in the DSDT... might be a better long term fix. my 2cents. of course the kext method/way can be made to work as well.

 

below is cut/paste my dsdt. yours should be similar. note: i don't have this many ports. and some internal devices -- bluetooth, biometric are on channel EHCB ports 3 and 4 for example. but it was helpful to know how many ports i should have defined in my dsdt.

 

 

egrep 'Device|_ADR' dsdt.dsl

....

            Device (EHCA)

                Name (_ADR, 0x001D0000)

                Device (URTH)

                    Name (_ADR, 0x00)

                    Device (URMH)

                        Name (_ADR, 0x01)

                        Device (PRT0)

                            Name (_ADR, 0x01)

                        Device (PRT1)

                            Name (_ADR, 0x02)

                        Device (PRT2)

                            Name (_ADR, 0x03)

                        Device (PRT3)

                            Name (_ADR, 0x04)

                        Device (PRT4)

                            Name (_ADR, 0x05)

                        Device (PRT5)

                            Name (_ADR, 0x06)

                        Device (PRT6)

                            Name (_ADR, 0x07)

                        Device (PRT7)

                            Name (_ADR, 0x08)

            Device (EHCB)

                Name (_ADR, 0x001A0000)

                Device (URTH)

                    Name (_ADR, 0x00)

                    Device (URMH)

                        Name (_ADR, 0x01)

                        Device (PRT8)

                            Name (_ADR, 0x01)

                        Device (PRT9)

                            Name (_ADR, 0x02)

                        Device (PRTA)

                            Name (_ADR, 0x03)

                        Device (PRTB)

                            Name (_ADR, 0x04)

                        Device (PRTC)

                            Name (_ADR, 0x05)

                        Device (PRTD)

                            Name (_ADR, 0x06)

  • Like 1
Link to comment
Share on other sites

removed the dummy kexts, repaired permissions, rebuild cache and could boot into 10.11 dp6 / 15A244d

 

everytime i change / unplug or plugin some usb cables+devices i get KP..

Edited by ndx2014
Link to comment
Share on other sites

Injecting properties for hubs...

Newer beta builds use DSDT _UPC/_PLD info to determine the state of ports on a hub, similar to how _UPC/_PLD is used for ports. I'm not sure when the change happened, but the change caused my USB2 ports on XHC to stop working when using FakePCIID_XHCIMux.kext.

If your DSDT returns incorrect information for hub ports, they will be excluded and the ports will not work. This seems to be common with laptops.

For example, with my Lenovo u430 using FakePCIID_XHCIMux.kext to force USB2 ports on XHC to be handled by EHC drivers, the ports end up being disabled and built-in devices such as camera, bluetooth, touchscreen, etc aren't recognized.

Already using a port injector for the port itself, which is defined as "not-connectable" and "not user visible", therefore disabled by 10.11:

    Device (HUBN)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (PR01)
                {
                    Name (_ADR, One)  // _ADR: Address
                    Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                    {
                        Name (UPCA, Package (0x04)
                        {
                            Zero, // not connectable
                            0xFF,
                            Zero,
                            Zero
                        })
                        Return (UPCA)
                    }
                    Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                /* 0008 */  0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // hidden
                            }
                        })
                        Return (PLDP)
                    }

 
The above port can be fixed in DSDT:

Device (HUBN)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (PR01)
                {
                    Name (_ADR, One)  // _ADR: Address
                    Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                    {
                        Name (UPCA, Package (0x04)
                        {
                            0xFF, // connectable
                            0xFF,
                            Zero,
                            Zero
                        })
                        Return (UPCA)
                    }
                    Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                /* 0008 */  0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // hidden
                            }
                        })
                        Return (PLDP)
                    }

 
You can also leave DSDT as-is, and inject port-count/ports with an injector kext (dummy not needed with EHCx->EH0x rename).
 
Injecting port-count/ports for that port makes the system load the driver for the port (which is a hub and is handled by the hub driver), but only a subset of the ports on the hub are enabled, due to the same/similar problem.
 
For example:

                    Device (PR11)
                    {
                        Name (_ADR, One)  // _ADR: Address
                        Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                        {
                            Name (UPCP, Package (0x04)
                            {
                                Zero, // not connectable
                                0xFF,
                                Zero,
                                Zero
                            })
                            Return (UPCP)
                        }
                        Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                        {
                            Name (PLDP, Package (0x01)
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0xE1, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // visible
                                }
                            })
                            Return (PLDP)
                        }
                    }

 
In this particular case, both _UPC and _PLD are wrong.  _UPC should be connectable, and the _PLD should indicate "not user visible".  This hub port is the internal bluetooth connection for the half-mini PCIe BT/WiFi combo card.
 
It can be fixed in DSDT:

Device (PR11)
                    {
                        Name (_ADR, One)  // _ADR: Address
                        Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                        {
                            Name (UPCP, Package (0x04)
                            {
                                0xFF, // connectable
                                0xFF,
                                Zero,
                                Zero
                            })
                            Return (UPCP)
                        }
                        Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                        {
                            Name (PLDP, Package (0x01)
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0xE0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // hidden
                                }
                            })
                            Return (PLDP)
                        }
                    }

 
Or you can inject port-count and ports for the hub itself and leave DSDT untouched.
 
Through a bit of experimentation (and intuition) I was able to determine that the same properties (port-count and ports) that are read by the controller driver, are also read by the hub driver.
 
The trick is injecting the properties with an appropriate IOKitPersonality match:

post-1031260-0-37793900-1438874103_thumb.png

 

Matching on provider class AppleUSB20InternalHub and locationID.  The locationID (0x1d100000, decimal 487587840) is the locationID you see for the hub in ioreg.  It is based on the port address and controller address.

 

The complete injector is at my u430 repo: https://github.com/RehabMan/Lenovo-U430-Touch-DSDT-Patch

  • Like 4
Link to comment
Share on other sites

Injecting properties for hubs...

 

Newer beta builds use DSDT _UPC/_PLD info to determine the state of ports on a hub, similar to how _UPC/_PLD is used for ports. I'm not sure when the change happened, but the change caused my USB2 ports on XHC to stop working when using FakePCIID_XHCIMux.kext.

 

If your DSDT returns incorrect information for hub ports, they will be excluded and the ports will not work. This seems to be common with laptops.

 

For example, with my Lenovo u430 using FakePCIID_XHCIMux.kext to force USB2 ports on XHC to be handled by EHC drivers, the ports end up being disabled and built-in devices such as camera, bluetooth, touchscreen, etc aren't recognized.

 

Already using a port injector for the port itself, which is defined as "not-connectable" and "not user visible", therefore disabled by 10.11:

    Device (HUBN)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (PR01)
                {
                    Name (_ADR, One)  // _ADR: Address
                    Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                    {
                        Name (UPCA, Package (0x04)
                        {
                            Zero, // not connectable
                            0xFF,
                            Zero,
                            Zero
                        })
                        Return (UPCA)
                    }
                    Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                /* 0008 */  0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // hidden
                            }
                        })
                        Return (PLDP)
                    }

 

The above port can be fixed in DSDT:

Device (HUBN)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (PR01)
                {
                    Name (_ADR, One)  // _ADR: Address
                    Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                    {
                        Name (UPCA, Package (0x04)
                        {
                            0xFF, // connectable
                            0xFF,
                            Zero,
                            Zero
                        })
                        Return (UPCA)
                    }
                    Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                /* 0008 */  0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // hidden
                            }
                        })
                        Return (PLDP)
                    }

 

You can also leave DSDT as-is, and inject port-count/ports with an injector kext (dummy not needed with EHCx->EH0x rename).

 

Injecting port-count/ports for that port makes the system load the driver for the port (which is a hub and is handled by the hub driver), but only a subset of the ports on the hub are enabled, due to the same/similar problem.

 

For example:

                    Device (PR11)
                    {
                        Name (_ADR, One)  // _ADR: Address
                        Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                        {
                            Name (UPCP, Package (0x04)
                            {
                                Zero, // not connectable
                                0xFF,
                                Zero,
                                Zero
                            })
                            Return (UPCP)
                        }
                        Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                        {
                            Name (PLDP, Package (0x01)
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0xE1, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // visible
                                }
                            })
                            Return (PLDP)
                        }
                    }

 

In this particular case, both _UPC and _PLD are wrong.  _UPC should be connectable, and the _PLD should indicate "not user visible".  This hub port is the internal bluetooth connection for the half-mini PCIe BT/WiFi combo card.

 

It can be fixed in DSDT:

Device (PR11)
                    {
                        Name (_ADR, One)  // _ADR: Address
                        Method (_UPC, 0, Serialized)  // _UPC: USB Port Capabilities
                        {
                            Name (UPCP, Package (0x04)
                            {
                                0xFF, // connectable
                                0xFF,
                                Zero,
                                Zero
                            })
                            Return (UPCP)
                        }
                        Method (_PLD, 0, Serialized)  // _PLD: Physical Location of Device
                        {
                            Name (PLDP, Package (0x01)
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0xE0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // hidden
                                }
                            })
                            Return (PLDP)
                        }
                    }

 

Or you can inject port-count and ports for the hub itself and leave DSDT untouched.

 

Through a bit of experimentation (and intuition) I was able to determine that the same properties (port-count and ports) that are read by the controller driver, are also read by the hub driver.

 

The trick is injecting the properties with an appropriate IOKitPersonality match:

attachicon.gifScreen Shot 2015-08-06 at 8.13.15 AM.png

 

Matching on provider class AppleUSB20InternalHub and locationID.  The locationID (0x1d100000, decimal 487587840) is the locationID you see for the hub in ioreg.  It is based on the port address and controller address.

 

The complete injector is at my u430 repo: https://github.com/RehabMan/Lenovo-U430-Touch-DSDT-Patch

So is it enough only to use the DSDT patch? Because in my DSDT for EHC1 I have a lot more ports defined but in ioReg only three appears now, but everything seems to work. Except Bluetooth because the firwareuploader isn't working but if I restart from Mavericks and the firmware is uploaded to RAM I got a working camera and bluetooth. They aren't conflicting with each other.

Link to comment
Share on other sites

So is it enough only to use the DSDT patch? Because in my DSDT for EHC1 I have a lot more ports defined but in ioReg only three appears now, but everything seems to work. Except Bluetooth because the firwareuploader isn't working but if I restart from Mavericks and the firmware is uploaded to RAM I got a working camera and bluetooth. They aren't conflicting with each other.

Not sure what you mean by 'the' in 'the DSDT patch'... Specifics DSDT patches will depend on what is wrong in the native DSDT.

 

With a correct DSDT and no conflicts with existing port injectors (eg. using names XHC/EH01/EH02), you can likely make all corrections in DSDT by fixing _UPC/_PLD data.

 

But it is often easier to build an injector kext instead.

Link to comment
Share on other sites

Not sure what you mean by 'the' in 'the DSDT patch'... Specifics DSDT patches will depend on what is wrong in the native DSDT.

 

With a correct DSDT and no conflicts with existing port injectors (eg. using names XHC/EH01/EH02), you can likely make all corrections in DSDT by fixing _UPC/_PLD data.

 

But it is often easier to build an injector kext instead.

Sorry, my mistake. I am super tired, I should sleep now instead of talking bollocks. I meant by DSDT patch the  _UPC/_PLD data fixing in DSDT. Sorry again.

Link to comment
Share on other sites

Sorry, my mistake. I am super tired, I should sleep now instead of talking bollocks. I meant by DSDT patch the  _UPC/_PLD data fixing in DSDT. Sorry again.

Note that it is also possible there are other things 10.11 might not like about _PLD and _UPC besides the ones I mention.

 

Only a careful look at your own data and careful reading of the ACPI spec can help determine what it might be.

 

It is a lot easier to just unblock the ports with port-count/ports injector kext.

Link to comment
Share on other sites

Note that it is also possible there are other things 10.11 might not like about _PLD and _UPC besides the ones I mention.

 

Only a careful look at your own data and careful reading of the ACPI spec can help determine what it might be.

 

It is a lot easier to just unblock the ports with port-count/ports injector kext.

Yeah, I need an injector. Now I am looking at yours and trying to figure out to build one for myself.

 

Edit:

Thank you for your work, now I have all my ports defined in ioreg. Great work.

 

Edit2: 

My mouse is working when plugged in USB 3.0 and FakePCIID is doing a great job now. :D

post-1220203-0-84061100-1438944622_thumb.png

Link to comment
Share on other sites

I have a problem that I hope someone here can shed some light on... I have a BRIX Pro with a Haswell i5-4570R. I set it up as a iMac14,1 because it most closely matches the DSDT. It only has 4 USB-3 ports and all of them work fine in El Capitan. My problem is that I've got Apple's BCM94360CD Wifi/BT card in the PCI/e slot. This has always showed up fine as stock Apple up until now. The Bluetooth just doesn't appear in El Capitan. It appears as a hub on one of the two active USB3 ports in Yosemite.

 

Any ideas? Thanks.

Link to comment
Share on other sites

I have a problem that I hope someone here can shed some light on... I have a BRIX Pro with a Haswell i5-4570R. I set it up as a iMac14,1 because it most closely matches the DSDT. It only has 4 USB-3 ports and all of them work fine in El Capitan. My problem is that I've got Apple's BCM94360CD Wifi/BT card in the PCI/e slot. This has always showed up fine as stock Apple up until now. The Bluetooth just doesn't appear in El Capitan. It appears as a hub on one of the two active USB3 ports in Yosemite.

 

Any ideas? Thanks.

Try with BrcmBluetoothInjector.kext: https://github.com/RehabMan/OS-X-BrcmPatchRAM

Link to comment
Share on other sites

I have been comparing the USB ports on my Yosemite partition with my recently created El Capitan (PB4) partition, some of the USB 3.0 ports are not listed in El Capitan although they do seem to work at USB 2.0 speeds.

 

I don't use a DSDT, instead I have some patches created for me by TimeWalker75a but I assume this change is still related to the changes to USB in El Capitan?

 

Yosemite:                                                                               

post-499606-0-46579700-1439048670_thumb.png                     

El Capitan:

post-499606-0-41431400-1439048721_thumb.png

El Capitan with USB 2.0 Drive attached (Front Left):                

post-499606-0-87736800-1439048783_thumb.png

El Capitan with USB 2.0 Drive attached (Front Right):

post-499606-0-86677600-1439048841_thumb.png

El Capitan with USB 3.0 Drive attached (Front Left):

post-499606-0-66278200-1439048896_thumb.png

El Capitan with USB 3.0 Drive attached (Front Right):

post-499606-0-42200900-1439048923_thumb.png

Link to comment
Share on other sites

Try with BrcmBluetoothInjector.kext: https://github.com/RehabMan/OS-X-BrcmPatchRAM

 

Thank you Rehab! You're posts and code have been invaluable in getting this system to work almost seamlessly!

 

 

I have been using BrcmPatchRAM.kext for awhile. I've now tried replacing it with the BrcmBluetoothInjector.kext without success. I couldn't attach the Clover debug.log and system.log so I've included links to them.

Link to comment
Share on other sites

Thank you Rehab! You're posts and code have been invaluable in getting this system to work almost seamlessly!

 

 

I have been using BrcmPatchRAM.kext for awhile. I've now tried replacing it with the BrcmBluetoothInjector.kext without success. I couldn't attach the Clover debug.log and system.log so I've included links to them.

Post ioreg using IORegistryExplorer v2.1.

Link to comment
Share on other sites

It took a bit to find version 2.1 again, but I found it. Here are my ioreg files for Yosemite and El Capitan. Both use the same Clover loader. Thanks!

I don't really see a Broadcom BT device on the USB bus. So... I think you have a USB problem to solve first.

Link to comment
Share on other sites

I don't really see a Broadcom BT device on the USB bus. So... I think you have a USB problem to solve first.

 

Yes, I've been trying every USB trick I could find. The Bluetooth shows fine in Yosemite (1st picture) but is missing in El Capitan (2nd picture). Everything else looks kosher. Anything I plug into the 4 USB3 ports works fine.

post-44094-0-85224300-1439109478_thumb.png

post-44094-0-90601200-1439109565_thumb.png

Link to comment
Share on other sites

I would like to install the last El Capitan DP on a notebook Asus N55JW-CN068H here the main spec.:

 

-CPU I7 4720HQ

-Chip-set Intel HM86

-16GB RAM

-GTX 960M

 

When I boot from USB key I obtain this error:

 

rsz_20150809_091111_1.jpg

 

Could you please indicate me how to solve it? (I have disabled in the BIOS XHCI)

If you want and you indicate me how I can send you the config.plist file.

Thanks for your support

Link to comment
Share on other sites

@ LasVegas

 

Do you install any kind of XHCI-dummy kext or whatever?

 

If yes, remove it and then restart 10.11.  You should see a bluetooth device and see data port (address of Device (HS##) in IORegistry. After that you can add HS## in your XHCI-dummy kext.

 

P.S. I guess there is one usb port connect to mini pcie slot. I might be wrong about this.  

(http://pinoutsguide.com/Slots/mini_pcie_pinout.shtml)

 

 

 

 

or

You may try to install FakePCIID.kext and FakePCIID_XHCIMux.kext and you should get your bluetooth & other USB 2.0 devices working under ECHI controller instead of XHCI controller.

  • Like 1
Link to comment
Share on other sites

I would like to install the last El Capitan DP on a notebook Asus N55JW-CN068H here the main spec.:

 

-CPU I7 4720HQ

-Chip-set Intel HM86

-16GB RAM

-GTX 960M

 

When I boot from USB key I obtain this error:

 

rsz_20150809_091111_1.jpg

 

Could you please indicate me how to solve it? (I have disabled in the BIOS XHCI)

If you want and you indicate me how I can send you the config.plist file.

Thanks for your support

@Neo_1, This thread is for fixing USB issues in El Capitan. Your problem is installation may or may not be USB related. It is advisable you use USB 2.0 for installation. I  could not read your screen shot. If you use Clover bootloader, you should go there for support and likewise for if you use Chameleon, go there for support. If you use packager by Chris1111, go there as Chris gave  excellent support for installation of 10.11.

Link to comment
Share on other sites

@ LasVegas

 

Do you install any kind of XHCI-dummy kext or whatever?

 

If yes, remove it and then restart 10.11.  You should see a bluetooth device and see data port (address of Device (HS##) in IORegistry. After that you can add HS## in your XHCI-dummy kext.

 

P.S. I guess there is one usb port connect to mini pcie slot. I might be wrong about this.  

(http://pinoutsguide.com/Slots/mini_pcie_pinout.shtml)

 

 

 

 

or

You may try to install FakePCIID.kext and FakePCIID_XHCIMux.kext and you should get your bluetooth & other USB 2.0 devices working under ECHI controller instead of XHCI controller.

 

I have tried various configurations of the EHCI and XHCI Dummy kexts and lack thereof. Nothing I did seemed to make a difference. The 4 USB3 ports worked out of the box in every configuration, with or without renaming EHC1 & EHC2 of the DSDT in the config file.

 

The problem I suspect is due to the fact that the DSDT defines 24 USB ports while only using 4 USB3 externally and 2 internally for each mini pci-e slot. With ElCap's limitation of 15 ports, I suspect my internal ports fall in the upper 9 ports. I would try editing out the unused ports if I had any idea which was which and, of course a better idea of how to edit the DSDT properly/safely.

 

Edit: The FakePCIID & FakePCI_XHCIMux had no effect...

Link to comment
Share on other sites

So close... So close...

 

I have discovered that the DummyUSB extensions just don't work on this system through Clover's Kext Injection. I moved it to /Library/Extensions and it loaded! As an experiment, I reversed the order of the ports for iMac14,1 and the Bluetooth loaded! I then removed ports HS10 through HS15 (High Speed?) to make space for SSP1 through SSP6 (Slow Speed Port?). Now every port works along with the internal BT port, except they are all USB2 now. Before I got BT back, all were USB3 only...

 

Now, I guess I can dig into the OP to understand exactly how to configure DummyUSBXHCI.

 

Thanks!

Link to comment
Share on other sites

×
×
  • Create New...