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

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

 



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






[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