summaryrefslogtreecommitdiff
path: root/dsp
diff options
context:
space:
mode:
authorSatish Babu Patakokila <quic_spatakok@quicinc.com>2022-09-26 23:44:09 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2022-10-07 03:22:56 -0700
commit255025397cadb164e1e503ac94d4afcf65a89db3 (patch)
tree78cecb4e936cf02eaf31e407f8df038296f6f071 /dsp
parentd347c5c77b4f051b85b975ed354217ef27e1758d (diff)
downloadmsm-extra-255025397cadb164e1e503ac94d4afcf65a89db3.tar.gz
dsp: audio-prm: Add support for SDX specific APIs
Add support for SDX specific APIs Change-Id: I7b3b10e612f5829a05e8ceb34b31c04179fff569 Signed-off-by: Satish Babu Patakokila <quic_spatakok@quicinc.com>
Diffstat (limited to 'dsp')
-rw-r--r--dsp/audio_prm.c59
1 files changed, 58 insertions, 1 deletions
diff --git a/dsp/audio_prm.c b/dsp/audio_prm.c
index 98db7aa7..c53be2d9 100644
--- a/dsp/audio_prm.c
+++ b/dsp/audio_prm.c
@@ -198,6 +198,59 @@ int audio_prm_set_lpass_hw_core_req(struct clk_cfg *cfg, uint32_t hw_core_id, ui
EXPORT_SYMBOL(audio_prm_set_lpass_hw_core_req);
/**
+ */
+int audio_prm_set_lpass_core_clk_req(struct clk_cfg *cfg, uint32_t hw_core_id, uint8_t enable)
+{
+ struct gpr_pkt *pkt;
+ prm_cmd_request_hw_core_t prm_rsc_request;
+ int ret = 0;
+ uint32_t size;
+
+ size = GPR_HDR_SIZE + sizeof(prm_cmd_request_hw_core_t);
+ pkt = kzalloc(size, GFP_KERNEL);
+ if (!pkt)
+ return -ENOMEM;
+
+ pkt->hdr.header = GPR_SET_FIELD(GPR_PKT_VERSION, GPR_PKT_VER) |
+ GPR_SET_FIELD(GPR_PKT_HEADER_SIZE, GPR_PKT_HEADER_WORD_SIZE_V) |
+ GPR_SET_FIELD(GPR_PKT_PACKET_SIZE, size);
+
+ pkt->hdr.src_port = GPR_SVC_ASM;
+ pkt->hdr.dst_port = PRM_MODULE_INSTANCE_ID;
+ pkt->hdr.dst_domain_id = GPR_IDS_DOMAIN_ID_ADSP_V;
+ pkt->hdr.src_domain_id = GPR_IDS_DOMAIN_ID_APPS_V;
+ pkt->hdr.token = 0; /* TBD */
+ if (enable)
+ pkt->hdr.opcode = PRM_CMD_REQUEST_HW_RSC;
+ else
+ pkt->hdr.opcode = PRM_CMD_RELEASE_HW_RSC;
+
+ //pr_err("%s: clk_id %d size of cmd_req %ld \n",__func__, cfg->clk_id, sizeof(prm_cmd_request_hw_core_t));
+
+ prm_rsc_request.payload_header.payload_address_lsw = 0;
+ prm_rsc_request.payload_header.payload_address_msw = 0;
+ prm_rsc_request.payload_header.mem_map_handle = 0;
+ prm_rsc_request.payload_header.payload_size = sizeof(prm_cmd_request_hw_core_t) - sizeof(apm_cmd_header_t);
+
+ /** Populate the param payload */
+ prm_rsc_request.module_payload_0.module_instance_id = PRM_MODULE_INSTANCE_ID;
+ prm_rsc_request.module_payload_0.error_code = 0;
+ prm_rsc_request.module_payload_0.param_id = PARAM_ID_RSC_LPASS_CORE;
+ prm_rsc_request.module_payload_0.param_size =
+ sizeof(prm_cmd_request_hw_core_t) - sizeof(apm_cmd_header_t) - sizeof(apm_module_param_data_t);
+
+ prm_rsc_request.hw_core_id = hw_core_id; // HW_CORE_ID_LPASS;
+
+ memcpy(&pkt->payload, &prm_rsc_request, sizeof(prm_cmd_request_hw_core_t));
+
+ ret = prm_gpr_send_pkt(pkt, &g_prm.wait);
+
+ kfree(pkt);
+ return ret;
+}
+EXPORT_SYMBOL(audio_prm_set_lpass_core_clk_req);
+
+/**
* prm_set_lpass_clk_cfg() - Set PRM clock
*
* Return: 0 if clock set is success
@@ -507,9 +560,13 @@ static int audio_prm_probe(struct gpr_device *adev)
__func__);
return -EPROBE_DEFER;
}
-
+#ifdef CONFIG_AUDIO_GPR_DOMAIN_MODEM
+ ret = audio_notifier_register("audio_prm", AUDIO_NOTIFIER_MODEM_DOMAIN,
+ &service_nb);
+#else
ret = audio_notifier_register("audio_prm", AUDIO_NOTIFIER_ADSP_DOMAIN,
&service_nb);
+#endif
if (ret < 0) {
if (ret != -EPROBE_DEFER)
pr_err("%s: Audio notifier register failed ret = %d\n",