Jump to content

Switch BT adapter


RCOO
 Share

7 posts in this topic

Recommended Posts

I've got an Atheros AR9285 which provides Bluetooth and Wifi on my setup.

The BT version is inferior to 4.0, however.

I've got an Asus BT-400 dongle, and I would like to disable the built-in Bluetooth and switch to the dongle to have the continuity feature.

Bluetooth Explorer does not switch the adapter (it fails and the built-in remains active).

 

http://cl.ly/image/1V2o3d0q0o0y

http://cl.ly/image/222h0L010X1I

 

And my DSDT: http://cl.ly/050r3k1e3F2F

 

Can anyone help me achieve this?

Thanks

Link to comment
Share on other sites

Hi,

 

In the DSDT you could try to disable the BT device: 

Change: 

                Device (BT)
                {
                    Name (_HID, "TOS6205")  // _HID: Hardware ID
                    Name (BTWK, Zero)
                    Method (_STA, 0, NotSerialized)  // _STA: Status
                    {
                        If (LNotEqual (PIDC (0x19), Ones))
                        {
                            If (BTON)
                            {
                                Return (0x0F)
                            }
                            Else
                            {
                                Return (Zero)
                            }
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }

                    Method (DUSB, 0, NotSerialized)
                    {
                        Store (Zero, ^^PCI0.LPCB.EC0.BTDT)
                    }

                    Method (AUSB, 0, NotSerialized)
                    {
                        Store (One, ^^PCI0.LPCB.EC0.BTDT)
                    }

                    Method (BTPO, 0, NotSerialized)
                    {
                        ^^PCI0.LPCB.EIOW (One, One, 0xF4, One)
                        ^^PCI0.LPCB.EC0.BTOF ()
                    }

                    Method (BTPF, 0, NotSerialized)
                    {
                        ^^PCI0.LPCB.EIOW (One, One, 0xF4, Zero)
                        ^^PCI0.LPCB.EC0.BTOF ()
                    }

                    Method (BTST, 0, NotSerialized)
                    {
                        Store (^^PCI0.LPCB.EC0.BTSW, Local3)
                        If (Local3)
                        {
                            ShiftLeft (^^PCI0.LPCB.EC0.BTDT, 0x06, Local0)
                            ShiftLeft (^^PCI0.LPCB.EC0.BTPW, 0x07, Local1)
                        }
                        Else
                        {
                            Store (Zero, ^^PCI0.LPCB.EC0.BTDT)
                            Store (Zero, ^^PCI0.LPCB.EC0.BTPW)
                            Store (One, BTPR)
                            Store (Zero, Local0)
                            Store (Zero, Local1)
                        }

                        Or (Local0, Local1, Local2)
                        Or (Local2, Local3, Local2)
                        Return (Local2)
                    }
                }
            }

To:

                Device (BT)
                {
                    Name (_HID, "TOS6205")  // _HID: Hardware ID
            Name (_STA, Zero)  // _STA: Status
            }

No idea if it works, i applied this method to my SSDT only. 

Link to comment
Share on other sites

Nope. No hardware switch.

Where would I insert that statement in the DSDT?

Link to comment
Share on other sites

Method _REG should do the trick. 

            Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECCN)
                    Store (One, ECRD)
                    Store (EIOR (0x07, Zero, 0xA3F4), Local0)
                    And (Local0, Zero, Local0)
                    If (LGreaterEqual (OSYS, 0x07D9))
                    {
                        EIOW (0x07, Zero, 0xA3F4, 0x03)
                    }
                    Else
                    {
                        If (LGreaterEqual (OSYS, 0x07D6))
                        {
                            EIOW (0x07, Zero, 0xA3F4, One)
                            Store (One, OSTY)
                        }
                        Else
                        {
                            If (LEqual (OSYS, 0x03E8))
                            {
                                EIOW (0x07, Zero, 0xA3F4, 0x02)
                            }
                            Else
                            {
                                If (LLess (OSYS, 0x07D6))
                                {
                                    If (LNotEqual (OSYS, Zero))
                                    {
                                        EIOW (0x07, Zero, 0xA3F4, Zero)
                                        Store (Zero, OSTY)
                                    }
                                }
                            }
                        }
                    }
                }

                WLSW ()
                WWSW ()
                RLED ()
                If (LNotEqual (PIDC (0x04), Ones))
                {
                    HTEV (0x02)
                }

                Store (One, ACPW)
                Sleep (0x0A)
                Store (ACPW, PWRS)
                PNOT ()
                BTOF ()
            }

iasl 5.0 returns errors, compiled it under 4.0.

 

Anyway, no idea if it works, worth a try though :)

 

DSDT-3.aml.zip

Link to comment
Share on other sites

Method _REG should do the trick. 

            Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECCN)
                    Store (One, ECRD)
                    Store (EIOR (0x07, Zero, 0xA3F4), Local0)
                    And (Local0, Zero, Local0)
                    If (LGreaterEqual (OSYS, 0x07D9))
                    {
                        EIOW (0x07, Zero, 0xA3F4, 0x03)
                    }
                    Else
                    {
                        If (LGreaterEqual (OSYS, 0x07D6))
                        {
                            EIOW (0x07, Zero, 0xA3F4, One)
                            Store (One, OSTY)
                        }
                        Else
                        {
                            If (LEqual (OSYS, 0x03E8))
                            {
                                EIOW (0x07, Zero, 0xA3F4, 0x02)
                            }
                            Else
                            {
                                If (LLess (OSYS, 0x07D6))
                                {
                                    If (LNotEqual (OSYS, Zero))
                                    {
                                        EIOW (0x07, Zero, 0xA3F4, Zero)
                                        Store (Zero, OSTY)
                                    }
                                }
                            }
                        }
                    }
                }

                WLSW ()
                WWSW ()
                RLED ()
                If (LNotEqual (PIDC (0x04), Ones))
                {
                    HTEV (0x02)
                }

                Store (One, ACPW)
                Sleep (0x0A)
                Store (ACPW, PWRS)
                PNOT ()
                BTOF ()
            }

iasl 5.0 returns errors, compiled it under 4.0.

 

Anyway, no idea if it works, worth a try though :)

 

Tried that DSDT. Still did not work. Thanks for the attempt though.

Link to comment
Share on other sites

 Share

×
×
  • Create New...