Merge "soc: msm: add apr sensor domain support"
This commit is contained in:
commit
036d89dd56
5 changed files with 65 additions and 8 deletions
|
@ -1,4 +1,5 @@
|
|||
/* Copyright (c) 2010-2014, 2016 The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2010-2014, 2016, 2018 The Linux Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
|
@ -209,6 +210,16 @@ static struct apr_svc_table svc_tbl_voice[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct apr_svc_table svc_tbl_sdsp[] = {
|
||||
{
|
||||
/* Micro Audio Service */
|
||||
.name = "MAS",
|
||||
.idx = 0,
|
||||
.id = APR_SVC_MAS,
|
||||
.client_id = APR_CLIENT_AUDIO,
|
||||
},
|
||||
};
|
||||
|
||||
enum apr_subsys_state apr_get_modem_state(void)
|
||||
{
|
||||
return atomic_read(&q6.modem_state);
|
||||
|
@ -444,6 +455,9 @@ struct apr_svc *apr_register(char *dest, char *svc_name, apr_fn svc_fn,
|
|||
*/
|
||||
can_open_channel = false;
|
||||
domain_id = APR_DOMAIN_MODEM;
|
||||
} else if (!strcmp(dest, "SDSP")) {
|
||||
domain_id = APR_DOMAIN_SDSP;
|
||||
pr_debug("APR: SDSP DOMAIN_ID %d\n", domain_id);
|
||||
} else {
|
||||
pr_err("APR: wrong destination\n");
|
||||
goto done;
|
||||
|
@ -472,6 +486,8 @@ struct apr_svc *apr_register(char *dest, char *svc_name, apr_fn svc_fn,
|
|||
}
|
||||
}
|
||||
pr_debug("%s: modem Up\n", __func__);
|
||||
} else if (dest_id == APR_DEST_DSPS) {
|
||||
pr_debug("%s: Sensor DSP Up\n", __func__);
|
||||
}
|
||||
|
||||
if (apr_get_svc(svc_name, domain_id, &client_id, &svc_idx, &svc_id)) {
|
||||
|
@ -624,6 +640,8 @@ void apr_cb_func(void *buf, int len, void *priv)
|
|||
pr_err("APR: Wrong svc :%d\n", svc);
|
||||
return;
|
||||
}
|
||||
} else if (hdr->src_domain == APR_DOMAIN_SDSP) {
|
||||
clnt = APR_CLIENT_AUDIO;
|
||||
} else {
|
||||
pr_err("APR: Pkt from wrong source: %d\n", hdr->src_domain);
|
||||
return;
|
||||
|
@ -700,6 +718,9 @@ int apr_get_svc(const char *svc_name, int domain_id, int *client_id,
|
|||
if ((domain_id == APR_DOMAIN_ADSP)) {
|
||||
tbl = (struct apr_svc_table *)&svc_tbl_qdsp6;
|
||||
size = ARRAY_SIZE(svc_tbl_qdsp6);
|
||||
} else if (domain_id == APR_DOMAIN_SDSP) {
|
||||
tbl = (struct apr_svc_table *)&svc_tbl_sdsp;
|
||||
size = ARRAY_SIZE(svc_tbl_sdsp);
|
||||
} else {
|
||||
tbl = (struct apr_svc_table *)&svc_tbl_voice;
|
||||
size = ARRAY_SIZE(svc_tbl_voice);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2010-2011, 2013-2014, 2016 The Linux Foundation.
|
||||
/* Copyright (c) 2010-2011, 2013-2014, 2016, 2018 The Linux Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -38,6 +38,14 @@ static char *svc_names[APR_DEST_MAX][APR_CLIENT_MAX] = {
|
|||
"apr_audio_svc",
|
||||
"apr_voice_svc",
|
||||
},
|
||||
{
|
||||
"",
|
||||
"",
|
||||
},
|
||||
{
|
||||
"apr_apps_sdsp",
|
||||
"apr_apps_sdsp",
|
||||
},
|
||||
};
|
||||
|
||||
struct apr_svc_ch_dev apr_svc_ch[APR_DL_MAX][APR_DEST_MAX][APR_CLIENT_MAX];
|
||||
|
@ -162,7 +170,8 @@ struct apr_svc_ch_dev *apr_tal_open(uint32_t clnt, uint32_t dest,
|
|||
|
||||
if ((clnt >= APR_CLIENT_MAX) || (dest >= APR_DEST_MAX) ||
|
||||
(dl >= APR_DL_MAX)) {
|
||||
pr_err("apr_tal: Invalid params\n");
|
||||
pr_err("apr_tal: Invalid params clnt %d dest %d dl %d\n",
|
||||
clnt, dest, dl);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -184,10 +193,12 @@ struct apr_svc_ch_dev *apr_tal_open(uint32_t clnt, uint32_t dest,
|
|||
pr_debug("apr_tal:Wakeup done\n");
|
||||
apr_svc_ch[dl][dest][clnt].dest_state = 0;
|
||||
}
|
||||
|
||||
rc = smd_named_open_on_edge(svc_names[dest][clnt], dest,
|
||||
&apr_svc_ch[dl][dest][clnt].ch,
|
||||
&apr_svc_ch[dl][dest][clnt],
|
||||
apr_tal_notify);
|
||||
|
||||
if (rc < 0) {
|
||||
pr_err("apr_tal: smd_open failed %s\n",
|
||||
svc_names[dest][clnt]);
|
||||
|
@ -256,6 +267,12 @@ static int apr_smd_probe(struct platform_device *pdev)
|
|||
clnt = APR_CLIENT_AUDIO;
|
||||
apr_svc_ch[APR_DL_SMD][dest][clnt].dest_state = 1;
|
||||
wake_up(&apr_svc_ch[APR_DL_SMD][dest][clnt].dest);
|
||||
} else if (pdev->id == APR_DEST_DSPS) {
|
||||
pr_info("apr_tal:Sensor DSP Is Up\n");
|
||||
dest = APR_DEST_DSPS;
|
||||
clnt = APR_CLIENT_AUDIO;
|
||||
apr_svc_ch[APR_DL_SMD][dest][clnt].dest_state = 1;
|
||||
wake_up(&apr_svc_ch[APR_DL_SMD][dest][clnt].dest);
|
||||
} else
|
||||
pr_err("apr_tal:Invalid Dest Id: %d\n", pdev->id);
|
||||
|
||||
|
@ -278,6 +295,14 @@ static struct platform_driver apr_modem_driver = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_driver apr_sdsp_driver = {
|
||||
.probe = apr_smd_probe,
|
||||
.driver = {
|
||||
.name = "apr_apps_sdsp",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init apr_tal_init(void)
|
||||
{
|
||||
int i, j, k;
|
||||
|
@ -293,6 +318,7 @@ static int __init apr_tal_init(void)
|
|||
}
|
||||
platform_driver_register(&apr_q6_driver);
|
||||
platform_driver_register(&apr_modem_driver);
|
||||
platform_driver_register(&apr_sdsp_driver);
|
||||
return 0;
|
||||
}
|
||||
device_initcall(apr_tal_init);
|
||||
|
|
|
@ -37,6 +37,8 @@ uint16_t apr_get_data_src(struct apr_hdr *hdr)
|
|||
return APR_DEST_MODEM;
|
||||
else if (hdr->src_domain == APR_DOMAIN_ADSP)
|
||||
return APR_DEST_QDSP6;
|
||||
else if (hdr->src_domain == APR_DOMAIN_SDSP)
|
||||
return APR_DEST_DSPS;
|
||||
else {
|
||||
pr_err("APR: Pkt from wrong source: %d\n", hdr->src_domain);
|
||||
return APR_DEST_MAX; /*RETURN INVALID VALUE*/
|
||||
|
@ -47,6 +49,8 @@ int apr_get_dest_id(char *dest)
|
|||
{
|
||||
if (!strcmp(dest, "ADSP"))
|
||||
return APR_DEST_QDSP6;
|
||||
else if (!strcmp(dest, "SDSP"))
|
||||
return APR_DEST_DSPS;
|
||||
else
|
||||
return APR_DEST_MODEM;
|
||||
}
|
||||
|
|
|
@ -69,7 +69,9 @@ struct apr_hdr {
|
|||
#define APR_DOMAIN_MODEM 0x3
|
||||
#define APR_DOMAIN_ADSP 0x4
|
||||
#define APR_DOMAIN_APPS 0x5
|
||||
#define APR_DOMAIN_MAX 0x6
|
||||
#define APR_DOMAIN_SDSP 0x8
|
||||
#define APR_DOMAIN_MAX 0x9
|
||||
|
||||
|
||||
/* ADSP service IDs */
|
||||
#define APR_SVC_TEST_CLIENT 0x2
|
||||
|
@ -94,6 +96,9 @@ struct apr_hdr {
|
|||
#define APR_SVC_CVP 0x6
|
||||
#define APR_SVC_SRD 0x7
|
||||
|
||||
/* Sensor DSP Micro Audio Service IDs */
|
||||
#define APR_SVC_MAS 0x3
|
||||
|
||||
/* APR Port IDs */
|
||||
#define APR_MAX_PORTS 0x80
|
||||
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
|
||||
#define APR_DEST_MODEM 0
|
||||
#define APR_DEST_QDSP6 1
|
||||
#define APR_DEST_MAX 2
|
||||
#define APR_DEST_DSPS 3
|
||||
#define APR_DEST_MAX 4
|
||||
|
||||
#if defined(CONFIG_MSM_QDSP6_APRV2_GLINK) || \
|
||||
defined(CONFIG_MSM_QDSP6_APRV3_GLINK)
|
||||
|
|
Loading…
Add table
Reference in a new issue