2019-10-25 21:56:14

by Abhishek Pandit-Subedi

[permalink] [raw]
Subject: [PATCH 0/3] ARM: dts: rockchip: Use hci_bcm driver for bcm43540 on Veyron devices


This patch series enables using the Broadcom HCI UART driver with the
BCM43540 Wi-Fi + Bluetooth chip. This chip is used on a RK3288 based
board (Veyron) and these changes have been tested on the Minnie variant
of the board (i.e. rk3288-veyron-minnie.dts).



Abhishek Pandit-Subedi (3):
Bluetooth: hci_bcm: Add compatible string for BCM43540
dt-bindings: net: broadcom-bluetooth: Add BCM43540 compatible string
ARM: dts: rockchip: Add brcm bluetooth module on uart0

.../bindings/net/broadcom-bluetooth.txt | 1 +
arch/arm/boot/dts/rk3288-veyron.dtsi | 31 +++++--------------
drivers/bluetooth/hci_bcm.c | 1 +
3 files changed, 9 insertions(+), 24 deletions(-)

--
2.24.0.rc0.303.g954a862665-goog


2019-10-25 21:56:14

by Abhishek Pandit-Subedi

[permalink] [raw]
Subject: [PATCH 1/3] Bluetooth: hci_bcm: Add compatible string for BCM43540

The BCM43540 chip is a 802.11 a/b/g/n/ac + Bluetooth 4.1 combo module.
This patch adds a compatible string match to the serdev driver for the
Bluetooth part of the chip.

Signed-off-by: Abhishek Pandit-Subedi <[email protected]>
---

drivers/bluetooth/hci_bcm.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
index 0f73f6a686cb..0f851c0dde7f 100644
--- a/drivers/bluetooth/hci_bcm.c
+++ b/drivers/bluetooth/hci_bcm.c
@@ -1424,6 +1424,7 @@ static const struct of_device_id bcm_bluetooth_of_match[] = {
{ .compatible = "brcm,bcm4345c5" },
{ .compatible = "brcm,bcm4330-bt" },
{ .compatible = "brcm,bcm43438-bt" },
+ { .compatible = "brcm,bcm43540-bt" },
{ },
};
MODULE_DEVICE_TABLE(of, bcm_bluetooth_of_match);
--
2.24.0.rc0.303.g954a862665-goog

2019-10-25 21:56:14

by Abhishek Pandit-Subedi

[permalink] [raw]
Subject: [PATCH 2/3] dt-bindings: net: broadcom-bluetooth: Add BCM43540 compatible string

The BCM43540 is a 802.11 a/b/g/n/ac WiFi + Bluetooth 4.1 chip from
Broadcom. This is present in Azurewave AW-CM195NF WiFi+BT module.

Signed-off-by: Abhishek Pandit-Subedi <[email protected]>
---

Documentation/devicetree/bindings/net/broadcom-bluetooth.txt | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/net/broadcom-bluetooth.txt b/Documentation/devicetree/bindings/net/broadcom-bluetooth.txt
index 4fa00e2eafcf..c749dc297624 100644
--- a/Documentation/devicetree/bindings/net/broadcom-bluetooth.txt
+++ b/Documentation/devicetree/bindings/net/broadcom-bluetooth.txt
@@ -14,6 +14,7 @@ Required properties:
* "brcm,bcm4330-bt"
* "brcm,bcm43438-bt"
* "brcm,bcm4345c5"
+ * "brcm,bcm43540-bt"

Optional properties:

--
2.24.0.rc0.303.g954a862665-goog

2019-10-25 21:56:14

by Abhishek Pandit-Subedi

[permalink] [raw]
Subject: [PATCH 3/3] ARM: dts: rockchip: Add brcm bluetooth module on uart0

This enables the Broadcom uart bluetooth driver on uart0 and gives it
ownership of its gpios. In order to use this, you must enable the
following kconfig options:
- CONFIG_BT_HCIUART_BCM
- CONFIG_SERIAL_DEV

Signed-off-by: Abhishek Pandit-Subedi <[email protected]>
---

arch/arm/boot/dts/rk3288-veyron.dtsi | 31 +++++++---------------------
1 file changed, 7 insertions(+), 24 deletions(-)

diff --git a/arch/arm/boot/dts/rk3288-veyron.dtsi b/arch/arm/boot/dts/rk3288-veyron.dtsi
index 7525e3dd1fc1..8c9f91ba6f57 100644
--- a/arch/arm/boot/dts/rk3288-veyron.dtsi
+++ b/arch/arm/boot/dts/rk3288-veyron.dtsi
@@ -23,30 +23,6 @@
reg = <0x0 0x0 0x0 0x80000000>;
};

- bt_activity: bt-activity {
- compatible = "gpio-keys";
- pinctrl-names = "default";
- pinctrl-0 = <&bt_host_wake>;
-
- /*
- * HACK: until we have an LPM driver, we'll use an
- * ugly GPIO key to allow Bluetooth to wake from S3.
- * This is expected to only be used by BT modules that
- * use UART for comms. For BT modules that talk over
- * SDIO we should use a wakeup mechanism related to SDIO.
- *
- * Use KEY_RESERVED here since that will work as a wakeup but
- * doesn't get reported to higher levels (so doesn't confuse
- * Chrome).
- */
- bt-wake {
- label = "BT Wakeup";
- gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
- linux,code = <KEY_RESERVED>;
- wakeup-source;
- };
-
- };

power_button: power-button {
compatible = "gpio-keys";
@@ -434,6 +410,13 @@
/* Pins don't include flow control by default; add that in */
pinctrl-names = "default";
pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
+
+ bluetooth {
+ compatible = "brcm,bcm43540-bt";
+ host-wakeup-gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
+ shutdown-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_LOW>;
+ device-wakeup-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
+ };
};

&uart1 {
--
2.24.0.rc0.303.g954a862665-goog

2019-10-25 22:52:53

by Doug Anderson

[permalink] [raw]
Subject: Re: [PATCH 3/3] ARM: dts: rockchip: Add brcm bluetooth module on uart0

Hi,

On Fri, Oct 25, 2019 at 2:55 PM Abhishek Pandit-Subedi
<[email protected]> wrote:
>
> This enables the Broadcom uart bluetooth driver on uart0 and gives it
> ownership of its gpios. In order to use this, you must enable the
> following kconfig options:
> - CONFIG_BT_HCIUART_BCM
> - CONFIG_SERIAL_DEV
>
> Signed-off-by: Abhishek Pandit-Subedi <[email protected]>
> ---
>
> arch/arm/boot/dts/rk3288-veyron.dtsi | 31 +++++++---------------------
> 1 file changed, 7 insertions(+), 24 deletions(-)
>
> diff --git a/arch/arm/boot/dts/rk3288-veyron.dtsi b/arch/arm/boot/dts/rk3288-veyron.dtsi
> index 7525e3dd1fc1..8c9f91ba6f57 100644
> --- a/arch/arm/boot/dts/rk3288-veyron.dtsi
> +++ b/arch/arm/boot/dts/rk3288-veyron.dtsi

You are changing this for _all_ veryon, not just those veyron devices
using Broadcom. I don't think you want to change the marvell-based
boards.

...presumably you'll want to make you change only affect minnie,
speedy, and mickey.


> @@ -23,30 +23,6 @@
> reg = <0x0 0x0 0x0 0x80000000>;
> };
>
> - bt_activity: bt-activity {
> - compatible = "gpio-keys";
> - pinctrl-names = "default";
> - pinctrl-0 = <&bt_host_wake>;
> -
> - /*
> - * HACK: until we have an LPM driver, we'll use an
> - * ugly GPIO key to allow Bluetooth to wake from S3.
> - * This is expected to only be used by BT modules that
> - * use UART for comms. For BT modules that talk over
> - * SDIO we should use a wakeup mechanism related to SDIO.
> - *
> - * Use KEY_RESERVED here since that will work as a wakeup but
> - * doesn't get reported to higher levels (so doesn't confuse
> - * Chrome).
> - */
> - bt-wake {
> - label = "BT Wakeup";
> - gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
> - linux,code = <KEY_RESERVED>;
> - wakeup-source;
> - };
> -
> - };
>
> power_button: power-button {
> compatible = "gpio-keys";
> @@ -434,6 +410,13 @@
> /* Pins don't include flow control by default; add that in */
> pinctrl-names = "default";
> pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
> +
> + bluetooth {
> + compatible = "brcm,bcm43540-bt";

You probably need some pinctrl entries here to make sure that things
are properly configured, like:

pinctrl-names = "default";
pinctrl-0 = <&bt_host_wake>, <&bt_dev_wake>, <&bt_enable>;

This would require defining bt_dev_wake and bt_enable and removing the
hacky output-only versions they have now.


> + host-wakeup-gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
> + shutdown-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_LOW>;

Right now gpio4 RK_PD5 is controlled by the "sdio_pwrseq". Should you
remove it from there? Looks like it was a no-op for marvell which
makes it a little easier.


> + device-wakeup-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;

You probably need to stop driving this in the pinctrl hogs for
Broadcom boards...


-Doug

2019-10-26 17:40:20

by Abhishek Pandit-Subedi

[permalink] [raw]
Subject: Re: [PATCH 3/3] ARM: dts: rockchip: Add brcm bluetooth module on uart0

Yes, these shouldn't be for all of Veyron, only Minnie, Mickey and
Speedy -- my mistake. I'll send an updated patch with your
suggestions.

Thanks
Abhishek

On Fri, Oct 25, 2019 at 3:50 PM Doug Anderson <[email protected]> wrote:
>
> Hi,
>
> On Fri, Oct 25, 2019 at 2:55 PM Abhishek Pandit-Subedi
> <[email protected]> wrote:
> >
> > This enables the Broadcom uart bluetooth driver on uart0 and gives it
> > ownership of its gpios. In order to use this, you must enable the
> > following kconfig options:
> > - CONFIG_BT_HCIUART_BCM
> > - CONFIG_SERIAL_DEV
> >
> > Signed-off-by: Abhishek Pandit-Subedi <[email protected]>
> > ---
> >
> > arch/arm/boot/dts/rk3288-veyron.dtsi | 31 +++++++---------------------
> > 1 file changed, 7 insertions(+), 24 deletions(-)
> >
> > diff --git a/arch/arm/boot/dts/rk3288-veyron.dtsi b/arch/arm/boot/dts/rk3288-veyron.dtsi
> > index 7525e3dd1fc1..8c9f91ba6f57 100644
> > --- a/arch/arm/boot/dts/rk3288-veyron.dtsi
> > +++ b/arch/arm/boot/dts/rk3288-veyron.dtsi
>
> You are changing this for _all_ veryon, not just those veyron devices
> using Broadcom. I don't think you want to change the marvell-based
> boards.
>
> ...presumably you'll want to make you change only affect minnie,
> speedy, and mickey.
>
>
> > @@ -23,30 +23,6 @@
> > reg = <0x0 0x0 0x0 0x80000000>;
> > };
> >
> > - bt_activity: bt-activity {
> > - compatible = "gpio-keys";
> > - pinctrl-names = "default";
> > - pinctrl-0 = <&bt_host_wake>;
> > -
> > - /*
> > - * HACK: until we have an LPM driver, we'll use an
> > - * ugly GPIO key to allow Bluetooth to wake from S3.
> > - * This is expected to only be used by BT modules that
> > - * use UART for comms. For BT modules that talk over
> > - * SDIO we should use a wakeup mechanism related to SDIO.
> > - *
> > - * Use KEY_RESERVED here since that will work as a wakeup but
> > - * doesn't get reported to higher levels (so doesn't confuse
> > - * Chrome).
> > - */
> > - bt-wake {
> > - label = "BT Wakeup";
> > - gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
> > - linux,code = <KEY_RESERVED>;
> > - wakeup-source;
> > - };
> > -
> > - };
> >
> > power_button: power-button {
> > compatible = "gpio-keys";
> > @@ -434,6 +410,13 @@
> > /* Pins don't include flow control by default; add that in */
> > pinctrl-names = "default";
> > pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
> > +
> > + bluetooth {
> > + compatible = "brcm,bcm43540-bt";
>
> You probably need some pinctrl entries here to make sure that things
> are properly configured, like:
>
> pinctrl-names = "default";
> pinctrl-0 = <&bt_host_wake>, <&bt_dev_wake>, <&bt_enable>;
>
> This would require defining bt_dev_wake and bt_enable and removing the
> hacky output-only versions they have now.
>
>
> > + host-wakeup-gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
> > + shutdown-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_LOW>;
>
> Right now gpio4 RK_PD5 is controlled by the "sdio_pwrseq". Should you
> remove it from there? Looks like it was a no-op for marvell which
> makes it a little easier.
>
>
> > + device-wakeup-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
>
> You probably need to stop driving this in the pinctrl hogs for
> Broadcom boards...
>
>
> -Doug