Re: [PATCH 4/4] Bluetooth: hci_bcm: Support pcm params in dts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Nov 23, 2019 at 2:01 AM Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote:
>
> From: Abhishek Pandit-Subedi <abhishekpandit@xxxxxxxxxxxx>
>
> BCM chips may require configuration of PCM to operate correctly and
> there is a vendor specific HCI command to do this. Add support in the
> hci_bcm driver to parse this from devicetree and configure the chip.
>
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@xxxxxxxxxxxx>
> Signed-off-by: Marcel Holtmann <marcel@xxxxxxxxxxxx>
> ---
>  drivers/bluetooth/hci_bcm.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
> index d48044276895..9cfb202bbeca 100644
> --- a/drivers/bluetooth/hci_bcm.c
> +++ b/drivers/bluetooth/hci_bcm.c
> @@ -122,6 +122,7 @@ struct bcm_device {
>         bool                    is_suspended;
>  #endif
>         bool                    no_early_set_baudrate;
> +       u8                      pcm_int_params[5];
>  };
>
>  /* generic bcm uart resources */
> @@ -594,6 +595,16 @@ static int bcm_setup(struct hci_uart *hu)
>                         host_set_baudrate(hu, speed);
>         }
>
> +       /* PCM parameters if provided */
> +       if (bcm->dev && bcm->dev->pcm_int_params[0] != 0xff) {
> +               struct bcm_set_pcm_int_params params;
> +
> +               btbcm_read_pcm_int_params(hu->hdev, &params);
This seems redundant since we just overwrite it anyway.

> +
> +               memcpy(&params, bcm->dev->pcm_int_params, 5);
> +               btbcm_write_pcm_int_params(hu->hdev, &params);
> +       }
> +
>  finalize:
>         release_firmware(fw);
>
> @@ -1131,6 +1142,8 @@ static int bcm_acpi_probe(struct bcm_device *dev)
>  static int bcm_of_probe(struct bcm_device *bdev)
>  {
>         device_property_read_u32(bdev->dev, "max-speed", &bdev->oper_speed);
> +       device_property_read_u8_array(bdev->dev, "brcm,bt-pcm-int-params",
> +                                     bdev->pcm_int_params, 5);
>         return 0;
>  }
>
> @@ -1146,6 +1159,9 @@ static int bcm_probe(struct platform_device *pdev)
>         dev->dev = &pdev->dev;
>         dev->irq = platform_get_irq(pdev, 0);
>
> +       /* Initialize routing field to an unsued value */
unused
> +       dev->pcm_int_params[0] = 0xff;
> +
>         if (has_acpi_companion(&pdev->dev)) {
>                 ret = bcm_acpi_probe(dev);
>                 if (ret)
> @@ -1406,6 +1422,9 @@ static int bcm_serdev_probe(struct serdev_device *serdev)
>         bcmdev->serdev_hu.serdev = serdev;
>         serdev_device_set_drvdata(serdev, bcmdev);
>
> +       /* Initialize routing field to an unsued value */
unused
> +       bcmdev->pcm_int_params[0] = 0xff;
> +
>         if (has_acpi_companion(&serdev->dev))
>                 err = bcm_acpi_probe(bcmdev);
>         else
> --
> 2.23.0
>



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux