From 78520df6826e552bbc2c23e76e0f11c32fa559f1 Mon Sep 17 00:00:00 2001 From: Daniel Baluta Date: Fri, 5 Oct 2018 19:05:25 +0300 Subject: 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 Signed-off-by: Shengjiu Wang --- sound/soc/fsl/fsl_dsp.c | 56 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 19 deletions(-) (limited to 'sound/soc/fsl/fsl_dsp.c') 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) { -- cgit v1.2.3