mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
Merge "audio-kernel: asoc: ipc: add support for MDSP target"
This commit is contained in:
commit
9eac585aa4
2 changed files with 37 additions and 9 deletions
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/rpmsg.h>
|
||||
#include <ipc/apr_tal.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
enum apr_channel_state {
|
||||
APR_CH_DISCONNECTED,
|
||||
|
|
@ -125,14 +126,13 @@ struct apr_svc_ch_dev *apr_tal_open(uint32_t clnt, uint32_t dest, uint32_t dl,
|
|||
int rc = 0;
|
||||
struct apr_svc_ch_dev *apr_ch = NULL;
|
||||
|
||||
if ((clnt != APR_CLIENT_AUDIO) || (dest != APR_DEST_QDSP6) ||
|
||||
if ((clnt != APR_CLIENT_AUDIO) || (dest >= APR_DEST_MAX) ||
|
||||
(dl != APR_DL_SMD)) {
|
||||
pr_err("%s: Invalid params, clnt:%d, dest:%d, dl:%d\n",
|
||||
__func__, clnt, dest, dl);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
apr_ch = &apr_svc_ch[APR_DL_SMD][APR_DEST_QDSP6][APR_CLIENT_AUDIO];
|
||||
apr_ch = &apr_svc_ch[dl][dest][clnt];
|
||||
mutex_lock(&apr_ch->m_lock);
|
||||
if (!apr_ch->handle) {
|
||||
rc = wait_event_timeout(apr_ch->wait,
|
||||
|
|
@ -207,24 +207,46 @@ static int apr_tal_rpmsg_callback(struct rpmsg_device *rpdev,
|
|||
static int apr_tal_rpmsg_probe(struct rpmsg_device *rpdev)
|
||||
{
|
||||
struct apr_svc_ch_dev *apr_ch = NULL;
|
||||
int ret = 0;
|
||||
const char* dest;
|
||||
|
||||
ret = of_property_read_string(rpdev->dev.parent->of_node,
|
||||
"mbox-names", &dest);
|
||||
|
||||
if(ret < 0){
|
||||
pr_err("%s no parent source pid found\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!strcmp(rpdev->id.name, "apr_audio_svc")) {
|
||||
dev_info(&rpdev->dev, "%s: Channel[%s] state[Up]\n",
|
||||
__func__, rpdev->id.name);
|
||||
|
||||
} else {
|
||||
dev_err(&rpdev->dev, "%s, Invalid Channel [%s]\n",
|
||||
__func__, rpdev->id.name);
|
||||
return -EINVAL;
|
||||
}
|
||||
if(strstr(dest, "adsp")) {
|
||||
apr_ch =
|
||||
&apr_svc_ch[APR_DL_SMD][APR_DEST_QDSP6][APR_CLIENT_AUDIO];
|
||||
apr_ch->handle = rpdev;
|
||||
apr_ch->channel_state = APR_CH_CONNECTED;
|
||||
dev_set_drvdata(&rpdev->dev, apr_ch);
|
||||
wake_up(&apr_ch->wait);
|
||||
} else if(strstr(dest, "mpss")) {
|
||||
apr_ch =
|
||||
&apr_svc_ch[APR_DL_SMD][APR_DEST_MODEM][APR_CLIENT_AUDIO];
|
||||
apr_ch->handle = rpdev;
|
||||
apr_ch->channel_state = APR_CH_CONNECTED;
|
||||
dev_set_drvdata(&rpdev->dev, apr_ch);
|
||||
wake_up(&apr_ch->wait);
|
||||
} else {
|
||||
dev_err(&rpdev->dev, "%s, Invalid Channel [%s]\n",
|
||||
__func__, rpdev->id.name);
|
||||
dev_err(&rpdev->dev, "%s, unsupported dest %s\n",
|
||||
__func__, dest);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void apr_tal_rpmsg_remove(struct rpmsg_device *rpdev)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2013-2016, 2019 The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
|
@ -13,10 +13,16 @@
|
|||
|
||||
#define DEST_ID APR_DEST_MODEM
|
||||
|
||||
/**
|
||||
* apr_get_subsys_state - get modem subsys status
|
||||
*
|
||||
* Returns apr_subsys_state
|
||||
*/
|
||||
enum apr_subsys_state apr_get_subsys_state(void)
|
||||
{
|
||||
return apr_get_modem_state();
|
||||
}
|
||||
EXPORT_SYMBOL(apr_get_subsys_state);
|
||||
|
||||
void apr_set_subsys_state(void)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue