summaryrefslogtreecommitdiff
path: root/sound/soc/fsl/fsl_dsp.c
diff options
context:
space:
mode:
authorDaniel Baluta <daniel.baluta@nxp.com>2018-10-05 19:05:25 +0300
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:52:00 +0800
commit78520df6826e552bbc2c23e76e0f11c32fa559f1 (patch)
tree8dfb81b922bae85413cd96d0c6f40fbbe2de4d73 /sound/soc/fsl/fsl_dsp.c
parente5a35115db1a6c79fdf66f07bd65bbe7a741835e (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.c56
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)
{