From: Marcel Holtmann <marcel@holtmann.org>
To: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Cc: Johan Hedberg <johan.hedberg@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
linux-bluetooth@vger.kernel.org, dianders@chromium.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 1/4] Bluetooth: hci_bcm: Disallow set_baudrate for BCM4354
Date: Fri, 15 Nov 2019 08:59:28 +0100 [thread overview]
Message-ID: <43FDCD41-50CE-4A4B-BC57-6466FE4090F8@holtmann.org> (raw)
In-Reply-To: <20191114180959.v5.1.I8ed714e23fdf42fa35588cfee2877b53d781df12@changeid>
Hi Abhishek,
> Without updating the patchram, the BCM4354 does not support a higher
> operating speed. The normal bcm_setup follows the correct order
> (init_speed, patchram and then oper_speed) but the serdev driver will
> set the operating speed before calling the hu->setup function. Thus,
> for the BCM4354, don't set the operating speed before patchram.
>
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> ---
>
> Changes in v5: None
> Changes in v4: None
> Changes in v3: None
> Changes in v2: None
>
> drivers/bluetooth/hci_bcm.c | 31 +++++++++++++++++++++++++++++--
> 1 file changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
> index 0f851c0dde7f..ee40003008d8 100644
> --- a/drivers/bluetooth/hci_bcm.c
> +++ b/drivers/bluetooth/hci_bcm.c
> @@ -47,6 +47,14 @@
>
> #define BCM_NUM_SUPPLIES 2
>
> +/**
> + * struct bcm_device_data - device specific data
> + * @no_early_set_baudrate: Disallow set baudrate before driver setup()
> + */
> +struct bcm_device_data {
> + bool no_early_set_baudrate;
> +};
> +
> /**
> * struct bcm_device - device driver resources
> * @serdev_hu: HCI UART controller struct
> @@ -79,6 +87,7 @@
> * @hu: pointer to HCI UART controller struct,
> * used to disable flow control during runtime suspend and system sleep
> * @is_suspended: whether flow control is currently disabled
> + * @no_early_set_baudrate: don't set_baudrate before setup()
> */
> struct bcm_device {
> /* Must be the first member, hci_serdev.c expects this. */
> @@ -112,6 +121,7 @@ struct bcm_device {
> struct hci_uart *hu;
> bool is_suspended;
> #endif
> + bool no_early_set_baudrate;
> };
>
> /* generic bcm uart resources */
> @@ -447,7 +457,13 @@ static int bcm_open(struct hci_uart *hu)
> if (bcm->dev) {
> hci_uart_set_flow_control(hu, true);
> hu->init_speed = bcm->dev->init_speed;
> - hu->oper_speed = bcm->dev->oper_speed;
> +
> + /* If oper_speed is set, ldisc/serdev will set the baudrate
> + * before calling setup()
> + */
> + if (!bcm->dev->no_early_set_baudrate)
> + hu->oper_speed = bcm->dev->oper_speed;
> +
> err = bcm_gpio_set_power(bcm->dev, true);
> hci_uart_set_flow_control(hu, false);
> if (err)
> @@ -565,6 +581,8 @@ static int bcm_setup(struct hci_uart *hu)
> /* Operational speed if any */
> if (hu->oper_speed)
> speed = hu->oper_speed;
> + else if (bcm->dev && bcm->dev->oper_speed)
> + speed = bcm->dev->oper_speed;
> else if (hu->proto->oper_speed)
> speed = hu->proto->oper_speed;
> else
> @@ -1374,6 +1392,7 @@ static struct platform_driver bcm_driver = {
> static int bcm_serdev_probe(struct serdev_device *serdev)
> {
> struct bcm_device *bcmdev;
> + const struct bcm_device_data *data;
> int err;
>
> bcmdev = devm_kzalloc(&serdev->dev, sizeof(*bcmdev), GFP_KERNEL);
> @@ -1408,6 +1427,10 @@ static int bcm_serdev_probe(struct serdev_device *serdev)
> if (err)
> dev_err(&serdev->dev, "Failed to power down\n");
>
> + data = device_get_match_data(bcmdev->dev);
> + if (data)
> + bcmdev->no_early_set_baudrate = data->no_early_set_baudrate;
> +
> return hci_uart_register_device(&bcmdev->serdev_hu, &bcm_proto);
> }
>
> @@ -1419,12 +1442,16 @@ static void bcm_serdev_remove(struct serdev_device *serdev)
> }
>
> #ifdef CONFIG_OF
> +struct bcm_device_data bcm4354_device_data = {
> + .no_early_set_baudrate = true,
> +};
> +
> static const struct of_device_id bcm_bluetooth_of_match[] = {
> { .compatible = "brcm,bcm20702a1" },
> { .compatible = "brcm,bcm4345c5" },
> { .compatible = "brcm,bcm4330-bt" },
> { .compatible = "brcm,bcm43438-bt" },
> - { .compatible = "brcm,bcm43540-bt" },
> + { .compatible = "brcm,bcm43540-bt", .data = &bcm4354_device_data },
this looks good to me. Can some users of the other devices test this patch so we ensure that it won’t break other devices.
Regards
Marcel
next prev parent reply other threads:[~2019-11-15 7:59 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-15 2:10 [PATCH v5 0/4] Bluetooth: hci_bcm: Additional changes for BCM4354 support Abhishek Pandit-Subedi
2019-11-15 2:10 ` [PATCH v5 1/4] Bluetooth: hci_bcm: Disallow set_baudrate for BCM4354 Abhishek Pandit-Subedi
2019-11-15 7:59 ` Marcel Holtmann [this message]
2019-11-15 2:10 ` [PATCH v5 2/4] Bluetooth: btbcm: Support pcm configuration Abhishek Pandit-Subedi
2019-11-15 7:54 ` Marcel Holtmann
2019-11-15 2:10 ` [PATCH v5 3/4] dt-bindings: net: broadcom-bluetooth: Add pcm config Abhishek Pandit-Subedi
2019-11-15 8:01 ` Marcel Holtmann
2019-11-15 2:10 ` [PATCH v5 4/4] Bluetooth: hci_bcm: Support pcm params in dts Abhishek Pandit-Subedi
2019-11-15 8:04 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43FDCD41-50CE-4A4B-BC57-6466FE4090F8@holtmann.org \
--to=marcel@holtmann.org \
--cc=abhishekpandit@chromium.org \
--cc=dianders@chromium.org \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®