static int skl_ipc_process_notification(struct sst_generic_ipc *ipc, struct skl_ipc_header header) { struct skl_sst *skl = container_of(ipc, struct skl_sst, ipc); if (IPC_GLB_NOTIFY_MSG_TYPE(header.primary)) { switch (IPC_GLB_NOTIFY_TYPE(header.primary)) { case IPC_GLB_NOTIFY_UNDERRUN: dev_err(ipc->dev, "FW Underrun %x\n", header.primary); break; case IPC_GLB_NOTIFY_RESOURCE_EVENT: dev_err(ipc->dev, "MCPS Budget Violation: %x\n", header.primary); break; case IPC_GLB_NOTIFY_FW_READY: skl->boot_complete = true; wake_up(&skl->boot_wait); break; default: dev_err(ipc->dev, "ipc: Unhandled error msg=%x", header.primary); break; } } return 0; }
static int skl_ipc_process_notification(struct sst_generic_ipc *ipc, struct skl_ipc_header header) { struct skl_sst *skl = container_of(ipc, struct skl_sst, ipc); if (IPC_GLB_NOTIFY_MSG_TYPE(header.primary)) { switch (IPC_GLB_NOTIFY_TYPE(header.primary)) { case IPC_GLB_NOTIFY_UNDERRUN: dev_err(ipc->dev, "FW Underrun %x\n", header.primary); break; case IPC_GLB_NOTIFY_RESOURCE_EVENT: dev_err(ipc->dev, "MCPS Budget Violation: %x\n", header.primary); break; case IPC_GLB_NOTIFY_FW_READY: skl->boot_complete = true; wake_up(&skl->boot_wait); break; case IPC_GLB_NOTIFY_PHRASE_DETECTED: dev_dbg(ipc->dev, "***** Phrase Detected **********\n"); /* * Per HW recomendation, After phrase detection, * clear the CGCTL.MISCBDCGE. * * This will be set back on stream closure */ skl->enable_miscbdcge(ipc->dev, false); skl->miscbdcg_disabled = true; break; default: dev_err(ipc->dev, "ipc: Unhandled error msg=%x\n", header.primary); break; } } return 0; }