diff options
author | Daniel Baluta <daniel.baluta@nxp.com> | 2020-11-11 13:11:18 +0200 |
---|---|---|
committer | Shawn Guo <shawnguo@kernel.org> | 2020-11-16 16:33:48 +0800 |
commit | 23d89aa0c2192f2d4582198b381d8805492c7925 (patch) | |
tree | a4f331d9c2613db9ca7ab53cc253d727902535e1 /include/linux/firmware | |
parent | 046326989a1845db321d3b3db637e1336383b047 (diff) | |
download | linux-stable-23d89aa0c2192f2d4582198b381d8805492c7925.tar.gz linux-stable-23d89aa0c2192f2d4582198b381d8805492c7925.tar.bz2 linux-stable-23d89aa0c2192f2d4582198b381d8805492c7925.zip |
firmware: imx-dsp: Export functions to request/free channels
In order to save power, we only need to request a channel
when the communication with the DSP active.
For this we export the following functions:
- imx_dsp_request_channel, gets a channel with a given index
- imx_dsp_free_channel, frees a channel with a given index
Notice that we still request channels at probe to support devices
that do not have PM callbacks implemented.
More explanations about why requesting a channel has an effect
on power savings:
- requesting an mailbox channel will call mailbox's startup
function.
- startup function calls pm_runtime_get_sync which increments device
usage count and will keep the device active. Specifically, mailbox
clock will be always ON when a mailbox channel is requested.
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Reviewed-by: Paul Olaru <paul.olaru@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
Diffstat (limited to 'include/linux/firmware')
-rw-r--r-- | include/linux/firmware/imx/dsp.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/firmware/imx/dsp.h b/include/linux/firmware/imx/dsp.h index 7562099c9e46..4f7895a3b73c 100644 --- a/include/linux/firmware/imx/dsp.h +++ b/include/linux/firmware/imx/dsp.h @@ -55,6 +55,9 @@ static inline void *imx_dsp_get_data(struct imx_dsp_ipc *ipc) int imx_dsp_ring_doorbell(struct imx_dsp_ipc *dsp, unsigned int chan_idx); +struct mbox_chan *imx_dsp_request_channel(struct imx_dsp_ipc *ipc, int idx); +void imx_dsp_free_channel(struct imx_dsp_ipc *ipc, int idx); + #else static inline int imx_dsp_ring_doorbell(struct imx_dsp_ipc *ipc, @@ -63,5 +66,12 @@ static inline int imx_dsp_ring_doorbell(struct imx_dsp_ipc *ipc, return -ENOTSUPP; } +struct mbox_chan *imx_dsp_request_channel(struct imx_dsp_ipc *ipc, int idx) +{ + return ERR_PTR(-EOPNOTSUPP); +} + +void imx_dsp_free_channel(struct imx_dsp_ipc *ipc, int idx) { } + #endif #endif /* _IMX_DSP_IPC_H */ |