Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 036d89dd authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: msm: add apr sensor domain support"

parents 7df7eae8 6bb3622c
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
/* 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);
+31 −5
Original line number Diff line number Diff line
/* 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);
+4 −0
Original line number Diff line number Diff line
@@ -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;
}
+6 −1
Original line number Diff line number Diff line
@@ -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

+2 −1
Original line number Diff line number Diff line
@@ -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)