blob: d748a5e1f12692ece64c6de5abeeeb2506ab4251 [file] [log] [blame]
Meng Wang43bbb872018-12-10 12:32:05 +08001// SPDX-License-Identifier: GPL-2.0-only
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302/*
Meng Wang61af6842018-09-10 17:47:55 +08003 * Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05304 */
5
6#include <linux/types.h>
7#include <linux/uaccess.h>
8#include <linux/spinlock.h>
9#include <linux/kernel.h>
Laxminath Kasam605b42f2017-08-01 22:02:15 +053010#include <dsp/audio_notifier.h>
11#include <ipc/apr.h>
12#include <ipc/apr_tal.h>
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013
Rohit Kumar39603af2017-09-11 00:00:37 +053014/**
15 * apr_get_subsys_state - get Q6 subsys status
16 *
17 * Returns apr_subsys_state
18 */
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053019enum apr_subsys_state apr_get_subsys_state(void)
20{
21 return apr_get_q6_state();
22}
Rohit Kumar39603af2017-09-11 00:00:37 +053023EXPORT_SYMBOL(apr_get_subsys_state);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053024
25void apr_set_subsys_state(void)
26{
27 apr_set_q6_state(APR_SUBSYS_DOWN);
28 apr_set_modem_state(APR_SUBSYS_UP);
29}
30
31uint16_t apr_get_data_src(struct apr_hdr *hdr)
32{
33 if (hdr->src_domain == APR_DOMAIN_MODEM)
34 return APR_DEST_MODEM;
35 else if (hdr->src_domain == APR_DOMAIN_ADSP)
36 return APR_DEST_QDSP6;
37
38 pr_err("APR: Pkt from wrong source: %d\n", hdr->src_domain);
39 return APR_DEST_MAX; /*RETURN INVALID VALUE*/
40}
41
42int apr_get_dest_id(char *dest)
43{
44 if (!strcmp(dest, "ADSP"))
45 return APR_DEST_QDSP6;
46 else
47 return APR_DEST_MODEM;
48}
49
50void subsys_notif_register(char *client_name, int domain,
51 struct notifier_block *nb)
52{
53 int ret;
54
55 ret = audio_notifier_register(client_name, domain, nb);
56 if (ret < 0)
57 pr_err("%s: Audio notifier register failed for domain %d ret = %d\n",
58 __func__, domain, ret);
59}
60
Laxminath Kasam8b1366a2017-10-05 01:44:16 +053061void subsys_notif_deregister(char *client_name)
62{
63 int ret;
64
65 ret = audio_notifier_deregister(client_name);
66 if (ret < 0)
67 pr_err("%s: Audio notifier de-register failed for client %s\n",
68 __func__, client_name);
69}
70
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053071uint16_t apr_get_reset_domain(uint16_t proc)
72{
73 return proc;
74}