diff options
author | Daniel Baluta <daniel.baluta@nxp.com> | 2018-10-05 19:05:25 +0300 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:52:00 +0800 |
commit | 78520df6826e552bbc2c23e76e0f11c32fa559f1 (patch) | |
tree | 8dfb81b922bae85413cd96d0c6f40fbbe2de4d73 /sound/soc/fsl/fsl_dsp.c | |
parent | e5a35115db1a6c79fdf66f07bd65bbe7a741835e (diff) |
MLK-18497-10: ASoC: fsl: dsp: Refactor fsl_dsp_{open|close}
DSP driver now supports two interfaces. Old ioctl chardev based
interface and ALSA compress inteface.
Because some part of the open/close code is common introduce
two new functions which encapsulate the common functionality.
Reviewed-by: Cosmin-Gabriel Samoila <cosmin.samoila@nxp.com>
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Diffstat (limited to 'sound/soc/fsl/fsl_dsp.c')
-rw-r--r-- | sound/soc/fsl/fsl_dsp.c | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/sound/soc/fsl/fsl_dsp.c b/sound/soc/fsl/fsl_dsp.c index 7d2d6314d27f..3dddaf9e6f53 100644 --- a/sound/soc/fsl/fsl_dsp.c +++ b/sound/soc/fsl/fsl_dsp.c @@ -351,22 +351,11 @@ void resource_release(struct fsl_dsp *dsp_priv) xf_proxy_init(&dsp_priv->proxy); } -static int fsl_dsp_open(struct inode *inode, struct file *file) +int fsl_dsp_open_func(struct fsl_dsp *dsp_priv, struct xf_client *client) { - struct fsl_dsp *dsp_priv = dev_get_drvdata(dsp_miscdev.parent); struct device *dev = dsp_priv->dev; - struct xf_client *client; int ret = 0; - /* ...basic sanity checks */ - if (!inode || !file) - return -EINVAL; - - /* ...allocate new proxy client object */ - client = xf_client_alloc(dsp_priv); - if (IS_ERR(client)) - return PTR_ERR(client); - /* ...initialize waiting queue */ init_waitqueue_head(&client->wait); @@ -381,8 +370,6 @@ static int fsl_dsp_open(struct inode *inode, struct file *file) client->global = (void *)dsp_priv; - file->private_data = (void *)client; - pm_runtime_get_sync(dev); mutex_lock(&dsp_priv->dsp_mutex); @@ -393,18 +380,35 @@ static int fsl_dsp_open(struct inode *inode, struct file *file) return ret; } -static int fsl_dsp_close(struct inode *inode, struct file *file) +static int fsl_dsp_open(struct inode *inode, struct file *file) { - struct fsl_dsp *dsp_priv; - struct device *dev; - struct xf_proxy *proxy; + struct fsl_dsp *dsp_priv = dev_get_drvdata(dsp_miscdev.parent); struct xf_client *client; + int ret = 0; /* ...basic sanity checks */ - client = xf_get_client(file); + if (!inode || !file) + return -EINVAL; + + /* ...allocate new proxy client object */ + client = xf_client_alloc(dsp_priv); if (IS_ERR(client)) return PTR_ERR(client); + fsl_dsp_open_func(dsp_priv, client); + + file->private_data = (void *)client; + + return ret; +} + +int fsl_dsp_close_func(struct xf_client *client) +{ + struct fsl_dsp *dsp_priv; + struct device *dev; + struct xf_proxy *proxy; + + /* ...basic sanity checks */ proxy = client->proxy; /* release all pending messages */ @@ -432,6 +436,20 @@ static int fsl_dsp_close(struct inode *inode, struct file *file) return 0; } +static int fsl_dsp_close(struct inode *inode, struct file *file) +{ + struct xf_client *client; + + /* ...basic sanity checks */ + client = xf_get_client(file); + if (IS_ERR(client)) + return PTR_ERR(client); + + fsl_dsp_close_func(client); + + return 0; +} + /* ...wait until data is available in the response queue */ static unsigned int fsl_dsp_poll(struct file *file, poll_table *wait) { |