lkml.org 
[lkml]   [2017]   [Nov]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 078/193] Bluetooth: btqcomsmd: Add support for BD address setup
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Loic Poulain <loic.poulain@linaro.org>

    commit 6e518111060c2290427d79c43d4add9600ad852b upstream.

    This patch implements the hdev setup function since wcnss-bt does not have
    persistent memory to store an allocated BD address. The device is therefore
    marked as unconfigured if no BD address has been previously retrieved.

    Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/bluetooth/btqcomsmd.c | 34 ++++++++++++++++++++++++++++++++++
    1 file changed, 34 insertions(+)

    --- a/drivers/bluetooth/btqcomsmd.c
    +++ b/drivers/bluetooth/btqcomsmd.c
    @@ -26,6 +26,7 @@
    struct btqcomsmd {
    struct hci_dev *hdev;

    + bdaddr_t bdaddr;
    struct rpmsg_endpoint *acl_channel;
    struct rpmsg_endpoint *cmd_channel;
    };
    @@ -100,6 +101,38 @@ static int btqcomsmd_close(struct hci_de
    return 0;
    }

    +static int btqcomsmd_setup(struct hci_dev *hdev)
    +{
    + struct btqcomsmd *btq = hci_get_drvdata(hdev);
    + struct sk_buff *skb;
    + int err;
    +
    + skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
    + if (IS_ERR(skb))
    + return PTR_ERR(skb);
    + kfree_skb(skb);
    +
    + /* Devices do not have persistent storage for BD address. If no
    + * BD address has been retrieved during probe, mark the device
    + * as having an invalid BD address.
    + */
    + if (!bacmp(&btq->bdaddr, BDADDR_ANY)) {
    + set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
    + return 0;
    + }
    +
    + /* When setting a configured BD address fails, mark the device
    + * as having an invalid BD address.
    + */
    + err = qca_set_bdaddr_rome(hdev, &btq->bdaddr);
    + if (err) {
    + set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
    + return 0;
    + }
    +
    + return 0;
    +}
    +
    static int btqcomsmd_probe(struct platform_device *pdev)
    {
    struct btqcomsmd *btq;
    @@ -135,6 +168,7 @@ static int btqcomsmd_probe(struct platfo
    hdev->open = btqcomsmd_open;
    hdev->close = btqcomsmd_close;
    hdev->send = btqcomsmd_send;
    + hdev->setup = btqcomsmd_setup;
    hdev->set_bdaddr = qca_set_bdaddr_rome;

    ret = hci_register_dev(hdev);

    \
     
     \ /
      Last update: 2017-11-28 11:48    [W:3.866 / U:1.272 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site