[PATCH v2 3/3] Bluetooth: hci_bcm: Add serdev support
Eric Anholt
eric at anholt.net
Mon Aug 7 15:17:25 PDT 2017
Marcel Holtmann <marcel at holtmann.org> writes:
> Hi Stefan,
>
>>>>>>>> Add basic support for Broadcom serial slave devices.
>>>>>>>> Probe the serial device, retrieve its maximum speed and
>>>>>>>> register a new hci uart device.
>>>>>>>>
>>>>>>>> Tested/compatible with bcm43438 (RPi3).
>>>>>>>>
>>>>>>>> Signed-off-by: Loic Poulain <loic.poulain at gmail.com>
>>>>>>>> ...
>>>>>>>>
>>>>>>>> +static int bcm_serdev_probe(struct serdev_device *serdev)
>>>>>>>> +{
>>>>>>>> + struct bcm_bt_device *bcmdev;
>>>>>>>> + u32 speed;
>>>>>>>> + int err;
>>>>>>>> +
>>>>>>>> + bcmdev = devm_kzalloc(&serdev->dev, sizeof(*bcmdev), GFP_KERNEL);
>>>>>>>> + if (!bcmdev)
>>>>>>>> + return -ENOMEM;
>>>>>>>> +
>>>>>>>> + bcmdev->hu.serdev = serdev;
>>>>>>>> + serdev_device_set_drvdata(serdev, bcmdev);
>>>>>>>> +
>>>>>>>> + err = of_property_read_u32(serdev->dev.of_node, "max-speed", &speed);
>>>>>>>> + if (!err)
>>>>>>>> + bcmdev->hu.oper_speed = speed;
>>>>>>>> +
>>>>>>>> + return hci_uart_register_device(&bcmdev->hu, &bcm_proto);
>>>>>>>> +}
>>>>>>>
>>>>>>> We do not need any GPIO for reset lines or anything else for the rPI3?
>>>>>>>
>>>>>>
>>>>>> unfortunately we don't have full schematics for RPI3, but according to firmware dt-blob.dts [1] there is a GPIO called BT_ON. This GPIO is controlled by the GPIO expander on the RPI3 board. The necessary driver for this expander is still out of tree (last mainlining attempt [2]).
>>>>>
>>>>> so who handles this GPIO then right now (or any other GPIO for that matter)? I have seen Bluetooth being enabled and operational, but I really want to get this working in a plain upstream Fedora and without using hciattach or btattach.
>>>>
>>>> The GPU firmware enables the GPIO and keeps this state. The mentioned expander driver should provide the ARM core (Linux) the necessary control.
>>>
>>> what is the default behavior after reboot. BT_ON enabled or not?
>>
>> AFAIK: enabled
Correct: it's enabled by the 2nd stage bootloader and never modified
From there.
> that would be a funny default since it means that it consumes power
> even if Bluetooth is never used. We really want to hook this up into
> the Bluetooth power control of the controller. So that on power down
> it also disables it and saves as much power as possible.
We would need a driver to talk to the firmware for the GPIO expander to
turn it off. I wrote one last year, but my motivation got killed by DT
bikeshedding.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-rpi-kernel/attachments/20170807/78ca7d3d/attachment.sig>
More information about the linux-rpi-kernel
mailing list