Fixing CSR Bluetooth in OSX (updated info)

Recently , I noticed that my CSR (Cambridge Silicon Radio) bluetooth does not quite work well . These Bluetooth adapters generally cost under $5 and its widely used in many of the laptops. Even real macs do use CSR. I did notice that generic ones would use Apple Generic Bluetooth driver instead of Apple CSR Drivers. Even if you did change the device id and included your device ID in the kext , it would still fail. Of course the generic Bluetooth driver has few issues when it comes to pairing , waking Bluetooth keyboard/mouse from sleep and other general issues

Voila - My $5 adapter thinks its Genuine Apple CSR Bluetooth
Voila - My $5 adapter thinks its Genuine Apple CSR Bluetooth

I did a research further and found out that the kext were hardcoded to work with Apple-branded CSR Devices. Yes , we could simply fire up hex editor and include our Device ID and Vendor but this would be complicated and in return it would require us to perform patching every time we upgrade OSX. Thankfully , AnV did something for Broadcom devices. I took the kext and modified it to work with CSR Devices (Cambridge Silicon Devices). Basically it fools , OSX thinking that our Bluetooth adapter is Apple’s Bluetooth Adapter therefore forcing OSX to load Apple’s CSR driver instead of Generic drivers.
With the injector , the Allow Bluetooth devices wake option is no longer grayed out
With the injector , the Allow Bluetooth devices wake option is no longer grayed out

Anyway , I am quite sure that you are tired with the explanation. Now lets get our hands dirty and start fixing it.
1. Firstly you would need to know your Device ID and Vendor ID for your Bluetooth adapter. It can be obtained from System Profiler. Be sure to convert it from Hex to Dec. If you are unsure , just google for Hex to Dec Calculator
2. Download this kext . Open it up and navigate your way to Info.plist (if you are unsure , right click and select view package content)
3. In Info.plist replace instances of
<key>idProduct</key> <integer>1</integer> <key>idVendor</key> <integer>2578</integer>
with your Product ID and Vendor ID in base 10 (Dec). You shouldn’t need to replace this value as most of the generic CSR adapter would use this value
4. Place it in your /Extra/Extensions folder (or EFI partition) and fix permission.
5. Reboot and the first thing you should notice is that Bluetooth can be toggled on and off and Wake from Sleep option in Bluetooth shouldn’t be grayed out. If it is still grayed out , you will have to fix your USB (Search for USB DSDT patch)
UPDATE #1 – After studying a bunch of IORegistry (just think of a bunch of detailed stuff , that gives the internal working of a system) . I’ve found out that Firmware version plays an important role here. It seems that these cheap $5 dongle that comes from China have different frimware. Each of it reacts differently