From patchwork Tue Nov 8 05:55:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 13035918 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A850C433FE for ; Tue, 8 Nov 2022 06:06:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233418AbiKHGGL (ORCPT ); Tue, 8 Nov 2022 01:06:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60098 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232736AbiKHGGJ (ORCPT ); Tue, 8 Nov 2022 01:06:09 -0500 Received: from gw.atmark-techno.com (gw.atmark-techno.com [13.115.124.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CB8A3F059 for ; Mon, 7 Nov 2022 22:06:09 -0800 (PST) Received: from gw.atmark-techno.com (localhost [127.0.0.1]) by gw.atmark-techno.com (Postfix) with ESMTP id 7173260153 for ; Tue, 8 Nov 2022 14:56:05 +0900 (JST) Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by gw.atmark-techno.com (Postfix) with ESMTPS id 5411A60141 for ; Tue, 8 Nov 2022 14:56:03 +0900 (JST) Received: by mail-pl1-f197.google.com with SMTP id t3-20020a170902e84300b00186ab03043dso10669070plg.20 for ; Mon, 07 Nov 2022 21:56:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=a8ltF6Z7hveQcIoHTD+Ocqy8FGU/fVCDeqON4Kuh0Nw=; b=qebrFLI1At11PS9+lEbN6am4rCtWDBilY3h2l90pxCNYyvVotRbXQCU6TjIzw5ZRNX A8G+j04T+TNYHHr63PjLtdmta+ZeLcElWUQPSlrqDJWd0q1sDwytjrHEfpxGEo+kUZQI QDi0BJzTIhoUrDwxlKERmApRBzWHmAb4mDGU827qCfmRW/hcZ29ScujSM10Eu5/My6vv EB4IxNHvVLp3VyszafCMY2NNOglloPGDRGX+euttv+N+7khNdlN5zmk6C2+io0l6SjZ4 qsS9qwl14NT/rnW32iPwYIiIzGPxn/6lA+kXHt2xtNAkMTOcwaok3UZ9PnDCZvubkiFQ cSyQ== X-Gm-Message-State: ACrzQf0LZVxWz+DAm9KfWTGuM5IcfDr5cyCBIB5Ea0XGoPrxaak1kgtY Bipog5d/Fy3dz9r5NyiAi7h72AP9Qr07xHs/rI2fpWiBtCkX46NtVbxJd67RF77geL2wgTlAbvS sLc0bM3+0dtweF1ejzSPV X-Received: by 2002:a17:902:c948:b0:187:2d90:9fab with SMTP id i8-20020a170902c94800b001872d909fabmr38509292pla.42.1667886962291; Mon, 07 Nov 2022 21:56:02 -0800 (PST) X-Google-Smtp-Source: AMsMyM51AQAM3Z9fEXEvq6HmWSn1u66y5bNSh60R/YuoHRFzhZ5NB8hMybzH+M6NCCVrPHnP1znooQ== X-Received: by 2002:a17:902:c948:b0:187:2d90:9fab with SMTP id i8-20020a170902c94800b001872d909fabmr38509273pla.42.1667886962062; Mon, 07 Nov 2022 21:56:02 -0800 (PST) Received: from pc-zest.atmarktech (103.131.189.35.bc.googleusercontent.com. [35.189.131.103]) by smtp.gmail.com with ESMTPSA id q8-20020a170902a3c800b00186ad73e2d5sm5950422plb.208.2022.11.07.21.56.01 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Nov 2022 21:56:01 -0800 (PST) Received: from martinet by pc-zest.atmarktech with local (Exim 4.96) (envelope-from ) id 1osHaa-0098Kr-1g; Tue, 08 Nov 2022 14:56:00 +0900 From: Dominique Martinet To: Marcel Holtmann , Rob Herring , Krzysztof Kozlowski , Luiz Augusto von Dentz , Johan Hedberg Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-bluetooth@vger.kernel.org, Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S . Miller" , mizo@atmark-techno.com, Dominique Martinet Subject: [RFC PATCH 1/2] dt-bindings: net: h4-bluetooth: add new bindings for hci_h4 Date: Tue, 8 Nov 2022 14:55:30 +0900 Message-Id: <20221108055531.2176793-2-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221108055531.2176793-1-dominique.martinet@atmark-techno.com> References: <20221108055531.2176793-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC Add devicetree binding to support defining a bluetooth device using the h4 uart protocol This was tested with a NXP wireless+BT AW-XM458 module, but might benefit others as the H4 protocol seems often used. Signed-off-by: Dominique Martinet --- .../devicetree/bindings/net/h4-bluetooth.yaml | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/h4-bluetooth.yaml diff --git a/Documentation/devicetree/bindings/net/h4-bluetooth.yaml b/Documentation/devicetree/bindings/net/h4-bluetooth.yaml new file mode 100644 index 000000000000..5d11b89ca386 --- /dev/null +++ b/Documentation/devicetree/bindings/net/h4-bluetooth.yaml @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/h4-bluetooth.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: H4 Bluetooth + +maintainers: + - Dominique Martinet + +description: + H4 is a common bluetooth over uart protocol. + For example, the AW-XM458 is a WiFi + BT module where the WiFi part is + connected over PCI (M.2), while BT is connected over serial speaking + the H4 protocol. Its firmware is sent on the PCI side. + +properties: + compatible: + enum: + - nxp,aw-xm458-bt + + max-speed: true + +required: + - compatible + +additionalProperties: false + +examples: + - | + #include + #include + + uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; + assigned-clocks = <&clk IMX8MP_CLK_UART1>; + assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>; + status = "okay"; + fsl,dte-mode = <1>; + fsl,uart-has-rtscts; + + + bluetooth { + compatible = "nxp,aw-xm458-bt"; + max-speed = <3000000>; + }; + }; From patchwork Tue Nov 8 05:55:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 13035917 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFD98C43217 for ; Tue, 8 Nov 2022 06:06:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233419AbiKHGGK (ORCPT ); Tue, 8 Nov 2022 01:06:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60076 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233205AbiKHGGI (ORCPT ); Tue, 8 Nov 2022 01:06:08 -0500 X-Greylist: delayed 618 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 07 Nov 2022 22:06:06 PST Received: from gw.atmark-techno.com (gw.atmark-techno.com [13.115.124.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 989583F06A for ; Mon, 7 Nov 2022 22:06:06 -0800 (PST) Received: from gw.atmark-techno.com (localhost [127.0.0.1]) by gw.atmark-techno.com (Postfix) with ESMTP id B71BA6014F for ; Tue, 8 Nov 2022 14:56:06 +0900 (JST) Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by gw.atmark-techno.com (Postfix) with ESMTPS id 65CC66014B for ; Tue, 8 Nov 2022 14:56:04 +0900 (JST) Received: by mail-pl1-f198.google.com with SMTP id k15-20020a170902c40f00b001887cd71fe6so4157433plk.5 for ; Mon, 07 Nov 2022 21:56:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=757yoDhLQoswhPSAxDBASMvHCABau1Li9dh0moZLC3E=; b=MWRL/jI5uSYLJO1XseEei3i3GCzqzWnAMBu35cQXauvUygNUDAsP+WVt3cYDjSfGZZ cen9hjuG2e/v+MRGqFIeVtSjsvR9/Y3RS/WClGzrIlqkVCM+7aO0qjNskHqFHXl7hOgi sBMo1CY3uD73eqLhBr7QMDnUwYF7goM88jms95yODFlZYwQr4uKSPs4Onf/Fs6gF2EiC JROFeLkGPhMdZkURPQOeS2AIwc59LOW6Gez4nH+LMwm+LhJRTFFb6ZNs6cAq1Gj2VdD9 eSwAoJM9ylQMRENR0V1Tj9l7vWtmD5wrmQKZoog1L+CR+7WD2cUAbfqYl7U9JLWi+cHM jbCA== X-Gm-Message-State: ACrzQf3Xp4ZVRit4+eSVHU7oddbLLZG99yJ6aK08RZbOzqNvPwavseRo R6adFeC7FLZbmywlJKurnjhO+yreN4Mgz+QCaRYcf9QgVHXXDVUao6G8RIWYMEq3gqe9Yk0xRPc Ut08J6vBdsbvM7oldIuW1 X-Received: by 2002:a17:90a:974b:b0:213:9bec:ae4e with SMTP id i11-20020a17090a974b00b002139becae4emr54696311pjw.200.1667886963450; Mon, 07 Nov 2022 21:56:03 -0800 (PST) X-Google-Smtp-Source: AMsMyM6Ej7xAYS13CrilvxqHh45cmxbHS136/9OIxkPX14RdA4xZx9ZMGzAQKiHNN+jhcNtN8vFgmg== X-Received: by 2002:a17:90a:974b:b0:213:9bec:ae4e with SMTP id i11-20020a17090a974b00b002139becae4emr54696286pjw.200.1667886963226; Mon, 07 Nov 2022 21:56:03 -0800 (PST) Received: from pc-zest.atmarktech (178.101.200.35.bc.googleusercontent.com. [35.200.101.178]) by smtp.gmail.com with ESMTPSA id f14-20020a170902ce8e00b00180033438a0sm5978640plg.106.2022.11.07.21.56.02 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Nov 2022 21:56:02 -0800 (PST) Received: from martinet by pc-zest.atmarktech with local (Exim 4.96) (envelope-from ) id 1osHab-0098L1-2q; Tue, 08 Nov 2022 14:56:01 +0900 From: Dominique Martinet To: Marcel Holtmann , Rob Herring , Krzysztof Kozlowski , Luiz Augusto von Dentz , Johan Hedberg Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-bluetooth@vger.kernel.org, Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S . Miller" , mizo@atmark-techno.com, Dominique Martinet Subject: [RFC PATCH 2/2] bluetooth/hci_h4: add serdev support Date: Tue, 8 Nov 2022 14:55:31 +0900 Message-Id: <20221108055531.2176793-3-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221108055531.2176793-1-dominique.martinet@atmark-techno.com> References: <20221108055531.2176793-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-State: RFC adding serdev support to hci_h4 allows users to define h4 bluetooth controllers in dts files This allows users of bluetooth modules with an uart h4 interface to use dt bindings instead of manually running btattach Signed-off-by: Dominique Martinet --- drivers/bluetooth/Kconfig | 1 + drivers/bluetooth/hci_h4.c | 65 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig index e30707405455..69edc76a8611 100644 --- a/drivers/bluetooth/Kconfig +++ b/drivers/bluetooth/Kconfig @@ -113,6 +113,7 @@ config BT_HCIUART_SERDEV config BT_HCIUART_H4 bool "UART (H4) protocol support" depends on BT_HCIUART + depends on BT_HCIUART_SERDEV help UART (H4) is serial protocol for communication between Bluetooth device and host. This protocol is required for most Bluetooth devices diff --git a/drivers/bluetooth/hci_h4.c b/drivers/bluetooth/hci_h4.c index 1d0cdf023243..b214c8a4d450 100644 --- a/drivers/bluetooth/hci_h4.c +++ b/drivers/bluetooth/hci_h4.c @@ -18,6 +18,8 @@ #include #include +#include +#include #include #include #include @@ -32,6 +34,10 @@ #include "hci_uart.h" +struct h4_device { + struct hci_uart hu; +}; + struct h4_struct { struct sk_buff *rx_skb; struct sk_buff_head txq; @@ -130,6 +136,63 @@ static struct sk_buff *h4_dequeue(struct hci_uart *hu) return skb_dequeue(&h4->txq); } +static const struct hci_uart_proto h4p; + +static int h4_probe(struct serdev_device *serdev) +{ + struct h4_device *h4dev; + struct hci_uart *hu; + int ret; + u32 speed; + + h4dev = devm_kzalloc(&serdev->dev, sizeof(*h4dev), GFP_KERNEL); + if (!h4dev) + return -ENOMEM; + + hu = &h4dev->hu; + + hu->serdev = serdev; + ret = device_property_read_u32(&serdev->dev, "max-speed", &speed); + if (!ret) { + /* h4 does not have any baudrate handling: + * user oper speed from the start + */ + hu->init_speed = speed; + hu->oper_speed = speed; + } + + serdev_device_set_drvdata(serdev, h4dev); + dev_info(&serdev->dev, "h4 device registered.\n"); + + return hci_uart_register_device(hu, &h4p); +} + +static void h4_remove(struct serdev_device *serdev) +{ + struct h4_device *h4dev = serdev_device_get_drvdata(serdev); + + dev_info(&serdev->dev, "h4 device unregistered.\n"); + + hci_uart_unregister_device(&h4dev->hu); +} + +#ifdef CONFIG_OF +static const struct of_device_id h4_bluetooth_of_match[] = { + { .compatible = "nxp,aw-xm458-bt" }, + { }, +}; +MODULE_DEVICE_TABLE(of, h4_bluetooth_of_match); +#endif + +static struct serdev_device_driver h4_serdev_driver = { + .probe = h4_probe, + .remove = h4_remove, + .driver = { + .name = "hci_uart_h4", + .of_match_table = of_match_ptr(h4_bluetooth_of_match), + }, +}; + static const struct hci_uart_proto h4p = { .id = HCI_UART_H4, .name = "H4", @@ -143,11 +206,13 @@ static const struct hci_uart_proto h4p = { int __init h4_init(void) { + serdev_device_driver_register(&h4_serdev_driver); return hci_uart_register_proto(&h4p); } int __exit h4_deinit(void) { + serdev_device_driver_unregister(&h4_serdev_driver); return hci_uart_unregister_proto(&h4p); }