[Letux-kernel] GTA04 Bluetooth
H. Nikolaus Schaller
hns at goldelico.com
Mon Jun 12 18:25:25 CEST 2017
Hi,
as we still use the w2cbw003 driver (serdev man-in-the-middle),
there is only one remaining issue:
> root at letux:~# ./bt-scan
> hciattach /dev/ttyBT0 texas 115200
> [ 163.117614]
> [ 163.119201] ============================================
> [ 163.124786] WARNING: possible recursive locking detected
> [ 163.130340] 4.12.0-rc5-letux+ #1107 Not tainted
> [ 163.135101] --------------------------------------------
> [ 163.140655] hciattach/2562 is trying to acquire lock:
> [ 163.145935] (&tty->termios_rwsem){++++..}, at: [<c04bc638>] tty_set_termios+0x40/0x1b0
> [ 163.154357]
> [ 163.154357] but task is already holding lock:
> [ 163.160461] (&tty->termios_rwsem){++++..}, at: [<c04bc638>] tty_set_termios+0x40/0x1b0
> [ 163.168853]
> [ 163.168853] other info that might help us debug this:
> [ 163.175689] Possible unsafe locking scenario:
> [ 163.175689]
> [ 163.181884] CPU0
> [ 163.184417] ----
> [ 163.186981] lock(&tty->termios_rwsem);
> [ 163.191101] lock(&tty->termios_rwsem);
> [ 163.195190]
> [ 163.195190] *** DEADLOCK ***
> [ 163.195190]
> [ 163.201385] May be due to missing lock nesting notation
> [ 163.201385]
> [ 163.208496] 2 locks held by hciattach/2562:
> [ 163.212890] #0: (&tty->ldisc_sem){++++++}, at: [<c04bda64>] tty_ldisc_ref_wait+0x18/0x34
> [ 163.221527] #1: (&tty->termios_rwsem){++++..}, at: [<c04bc638>] tty_set_termios+0x40/0x1b0
> [ 163.230407]
> [ 163.230407] stack backtrace:
> [ 163.234954] CPU: 0 PID: 2562 Comm: hciattach Not tainted 4.12.0-rc5-letux+ #1107
> [ 163.242706] Hardware name: Generic OMAP36xx (Flattened Device Tree)
> [ 163.249298] [<c010f478>] (unwind_backtrace) from [<c010b9bc>] (show_stack+0x10/0x14)
> [ 163.257415] [<c010b9bc>] (show_stack) from [<c04405e4>] (dump_stack+0x98/0xd0)
> [ 163.264984] [<c04405e4>] (dump_stack) from [<c01821cc>] (validate_chain+0x760/0x1010)
> [ 163.273193] [<c01821cc>] (validate_chain) from [<c0184034>] (__lock_acquire+0x690/0x760)
> [ 163.281677] [<c0184034>] (__lock_acquire) from [<c0184b44>] (lock_acquire+0x1d0/0x29c)
> [ 163.289947] [<c0184b44>] (lock_acquire) from [<c075deb4>] (down_write+0x28/0x78)
> [ 163.297729] [<c075deb4>] (down_write) from [<c04bc638>] (tty_set_termios+0x40/0x1b0)
> [ 163.305847] [<c04bc638>] (tty_set_termios) from [<c04d7824>] (ttyport_set_flow_control+0x58/0x60)
> [ 163.315155] [<c04d7824>] (ttyport_set_flow_control) from [<bf05d048>] (w2cbw_tty_set_termios+0x20/0x3c [w2cbw003_bluetooth])
> [ 163.326934] [<bf05d048>] (w2cbw_tty_set_termios [w2cbw003_bluetooth]) from [<c04bc74c>] (tty_set_termios+0x154/0x1b0)
> [ 163.338043] [<c04bc74c>] (tty_set_termios) from [<c04bcfb4>] (set_termios.part.1+0x3e4/0x460)
> [ 163.346984] [<c04bcfb4>] (set_termios.part.1) from [<c04bd294>] (tty_mode_ioctl+0x1e8/0x5cc)
> [ 163.355804] [<c04bd294>] (tty_mode_ioctl) from [<c04b812c>] (tty_ioctl+0xa1c/0xa98)
> [ 163.363830] [<c04b812c>] (tty_ioctl) from [<c027fdbc>] (vfs_ioctl+0x20/0x34)
> [ 163.371246] [<c027fdbc>] (vfs_ioctl) from [<c02807c8>] (do_vfs_ioctl+0x85c/0x97c)
> [ 163.379089] [<c02807c8>] (do_vfs_ioctl) from [<c0280934>] (SyS_ioctl+0x4c/0x74)
> [ 163.386749] [<c0280934>] (SyS_ioctl) from [<c0107060>] (ret_fast_syscall+0x0/0x1c)
> Found a Texas Instruments' chip!
> Firmware file : /lib/firmware/ti-connectivity/TIInit_11.8.32.bts
> Loaded BTS script version 1
> texas: changing baud rate to 3000000, flow control to 1
> [ 164.087524] Bluetooth: HCI UART driver ver 2.3
> [ 164.092254] Bluetooth: HCI UART protocol H4 registered
> [ 164.109252] Bluetooth: HCI UART protocol BCSP registered
> [ 164.121276] Bluetooth: HCI UART protocol LL registered
> Device setup complete
> Scanning ...
>
> BD Address: 00:0F:F6:31:5E:4A [mode 1, clkoffset 0x6fe1]
> Device name: BT-348_GPS
> Manufacturer: Cambridge Silicon Radio (10)
> LMP version: 1.1 (0x1) [subver 0x5e1]
> LMP features: 0xff 0xfe 0x7f 0x00 0x00 0x00 0x00 0x80
> <3-slot packets> <5-slot packets> <encryption> <slot offset>
> <timing accuracy> <role switch> <hold mode> <sniff mode>
> <RSSI> <channel quality> <SCO link> <HV2 packets>
> <HV3 packets> <u-law log> <A-law log> <CVSD> <paging scheme>
> <power control> <transparent SCO> <extended features>
>
> BD Address: 00:23:12:3D:07:A2 [mode 1, clkoffset 0x48d6]
> Device name: iMac
> Manufacturer: Broadcom Corporation (15)
> LMP version: 2.1 (0x4) [subver 0x21d0]
> LMP features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x79 0x83
> <3-slot packets> <5-slot packets> <encryption> <slot offset>
> <timing accuracy> <role switch> <hold mode> <sniff mode>
> <park state> <RSSI> <channel quality> <SCO link> <HV2 packets>
> <HV3 packets> <u-law log> <A-law log> <CVSD> <paging scheme>
> <power control> <transparent SCO> <broadcast encrypt>
> <EDR ACL 2 Mbps> <EDR ACL 3 Mbps> <enhanced iscan>
> <interlaced iscan> <interlaced pscan> <inquiry with RSSI>
> <extended SCO> <EV4 packets> <EV5 packets> <AFH cap. slave>
> <AFH class. slave> <3-slot EDR ACL> <5-slot EDR ACL>
> <sniff subrating> <pause encryption> <AFH cap. master>
> <AFH class. master> <EDR eSCO 2 Mbps> <EDR eSCO 3 Mbps>
> <3-slot EDR eSCO> <extended inquiry> <simple pairing>
> <encapsulated PDU> <err. data report> <non-flush flag> <LSTO>
> <inquiry TX power> <extended features>
>
> root at letux:~#
Any ideas how to solve?
For the WL183x based devices (Pyra and GTA04A5) it could be as simple
as enabling the TI_ST driver ("shared transport" multiplexer for bluetooth,
fm radio, gps and NFC).
For this to work I guess it could suffice to change to
compatible="ti,wl1837-st"
At least
root at letux:~# modprobe -c | fgrep wl1837
alias of:N*T*Cti,wl1837 wlcore_spi
alias of:N*T*Cti,wl1837C* wlcore_spi
alias of:N*T*Cti,wl1837_st hci_uart
alias of:N*T*Cti,wl1837_stC* hci_uart
root at letux:~#
and
http://elixir.free-electrons.com/linux/v4.12-rc5/source/Documentation/devicetree/bindings/net/ti,wilink-st.txt
seem to confirm that such a compatible string exists.
This should automagically create some hci0 interface w/o hciattach.
Not 100% clear to me is how to control the wl183x bluetooth enable gpio.
We do have to replace the vdd-regulator of the w2cbw003 driver by the gpio.
So this should be just some simple DT tweaking.
And this is still not a solution for the w2cbw003 bluetooth on GTA04A3/A4.
In preparation for that I have added a CONFIG_W2CBW003_HCI which
allows to turn off the creation of /dev/ttyBT0.
But it has no code yet to create a new hci interface, so it is just
a skeleton.
Anyone who wants to submit a patch for testing?
BR,
Nikolaus
More information about the Letux-kernel
mailing list