RE: [PATCH v1] Bluetooth: btnxpuart: Add system suspend and resume handlers

From: Luke Wang
Date: Fri Jul 05 2024 - 02:37:02 EST


Hi Neeraj

> -----Original Message-----
> From: Neeraj Sanjay Kale <neeraj.sanjaykale@xxxxxxx>
> Sent: Thursday, July 4, 2024 8:58 PM
> To: marcel@xxxxxxxxxxxx; luiz.dentz@xxxxxxxxx
> Cc: linux-bluetooth@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
> Amitkumar Karwar <amitkumar.karwar@xxxxxxx>; Rohit Fule
> <rohit.fule@xxxxxxx>; Neeraj Sanjay Kale <neeraj.sanjaykale@xxxxxxx>;
> Sherry Sun <sherry.sun@xxxxxxx>; Luke Wang <ziniu.wang_1@xxxxxxx>;
> Bough Chen <haibo.chen@xxxxxxx>; LnxRevLi <LnxRevLi@xxxxxxx>
> Subject: [PATCH v1] Bluetooth: btnxpuart: Add system suspend and resume
> handlers
>
> This adds handling for system suspend and resume. While the host enters
> suspend state, the driver will drive the chip into low power state.
>
> Similarly when system is resuming, the driver will wake up the chip.
>
> Signed-off-by: Neeraj Sanjay Kale <neeraj.sanjaykale@xxxxxxx>
> ---
> drivers/bluetooth/btnxpuart.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c
> index da18fd4f54f3..acd360fcc3b8 100644
> --- a/drivers/bluetooth/btnxpuart.c
> +++ b/drivers/bluetooth/btnxpuart.c
> @@ -1498,6 +1498,24 @@ static void nxp_serdev_remove(struct
> serdev_device *serdev)
> hci_free_dev(hdev);
> }
>
> +static int nxp_suspend(struct device *dev)
> +{
> + struct btnxpuart_dev *nxpdev = dev_get_drvdata(dev);
> + struct ps_data *psdata = &nxpdev->psdata;
> +
> + ps_control(psdata->hdev, PS_STATE_SLEEP);
> + return 0;
> +}
> +
> +static int nxp_resume(struct device *dev)
> +{
> + struct btnxpuart_dev *nxpdev = dev_get_drvdata(dev);
> + struct ps_data *psdata = &nxpdev->psdata;
> +
> + ps_control(data->hdev, PS_STATE_AWAKE);
> + return 0;
> +}
> +

Is it better to use btnxpuart_suspend/resume or nxp_serdev_suspend/resume?

> static struct btnxpuart_data w8987_data __maybe_unused = {
> .helper_fw_name = NULL,
> .fw_name = FIRMWARE_W8987,
> @@ -1517,12 +1535,17 @@ static const struct of_device_id
> nxpuart_of_match_table[] __maybe_unused = {
> };
> MODULE_DEVICE_TABLE(of, nxpuart_of_match_table);
>
> +static const struct dev_pm_ops nxp_pm_ops = {
> + SET_SYSTEM_SLEEP_PM_OPS(nxp_suspend, nxp_resume)
> +};
> +
> static struct serdev_device_driver nxp_serdev_driver = {
> .probe = nxp_serdev_probe,
> .remove = nxp_serdev_remove,
> .driver = {
> .name = "btnxpuart",
> .of_match_table = of_match_ptr(nxpuart_of_match_table),
> + .pm = &nxp_pm_ops,
> },
> };
>
> --
> 2.34.1