sound/soc/sof/intel/ptl.c
Source file repositories/reference/linux-study-clean/sound/soc/sof/intel/ptl.c
File Facts
- System
- Linux kernel
- Corpus path
sound/soc/sof/intel/ptl.c- Extension
.c- Size
- 4620 bytes
- Lines
- 159
- Domain
- Driver Families
- Bucket
- sound/soc
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
sound/hda_register.hsound/hda-mlink.hsound/sof/ipc4/header.h../ipc4-priv.h../ops.hhda.hhda-ipc.h../sof-audio.hmtl.hlnl.hptl.h
Detected Declarations
function sof_ptl_check_mic_privacy_irqfunction sof_ptl_mic_privacy_workfunction sof_ptl_process_mic_privacyfunction sof_ptl_set_mic_privacyfunction sof_ptl_set_ops
Annotated Snippet
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
//
// Copyright(c) 2025 Intel Corporation
/*
* Hardware interface for audio DSP on PantherLake.
*/
#include <sound/hda_register.h>
#include <sound/hda-mlink.h>
#include <sound/sof/ipc4/header.h>
#include "../ipc4-priv.h"
#include "../ops.h"
#include "hda.h"
#include "hda-ipc.h"
#include "../sof-audio.h"
#include "mtl.h"
#include "lnl.h"
#include "ptl.h"
static bool sof_ptl_check_mic_privacy_irq(struct snd_sof_dev *sdev, bool alt,
int elid)
{
if (!alt || elid != AZX_REG_ML_LEPTR_ID_SDW)
return false;
return hdac_bus_eml_is_mic_privacy_changed(sof_to_bus(sdev), alt, elid);
}
static void sof_ptl_mic_privacy_work(struct work_struct *work)
{
struct sof_intel_hda_dev *hdev = container_of(work,
struct sof_intel_hda_dev,
mic_privacy.work);
struct hdac_bus *bus = &hdev->hbus.core;
struct snd_sof_dev *sdev = dev_get_drvdata(bus->dev);
bool state;
/*
* The microphone privacy state is only available via Soundwire shim
* in PTL
* The work is only scheduled on change.
*/
state = hdac_bus_eml_get_mic_privacy_state(bus, 1,
AZX_REG_ML_LEPTR_ID_SDW);
sof_ipc4_mic_privacy_state_change(sdev, state);
}
static void sof_ptl_process_mic_privacy(struct snd_sof_dev *sdev, bool alt,
int elid)
{
struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
if (!alt || elid != AZX_REG_ML_LEPTR_ID_SDW)
return;
/*
* Schedule the work to read the microphone privacy state and send IPC
* message about the new state to the firmware
*/
schedule_work(&hdev->mic_privacy.work);
}
static void sof_ptl_set_mic_privacy(struct snd_sof_dev *sdev,
struct sof_ipc4_intel_mic_privacy_cap *caps)
{
struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
u32 micpvcp;
if (!caps || !caps->capabilities_length)
return;
micpvcp = caps->capabilities[0];
/* No need to set the mic privacy if it is not enabled or forced */
if (!(micpvcp & PTL_MICPVCP_DDZE_ENABLED) ||
micpvcp & PTL_MICPVCP_DDZE_FORCED)
return;
hdac_bus_eml_set_mic_privacy_mask(sof_to_bus(sdev), true,
AZX_REG_ML_LEPTR_ID_SDW,
PTL_MICPVCP_GET_SDW_MASK(micpvcp));
INIT_WORK(&hdev->mic_privacy.work, sof_ptl_mic_privacy_work);
hdev->mic_privacy.active = true;
}
int sof_ptl_set_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *dsp_ops)
{
struct sof_ipc4_fw_data *ipc4_data;
Annotation
- Immediate include surface: `sound/hda_register.h`, `sound/hda-mlink.h`, `sound/sof/ipc4/header.h`, `../ipc4-priv.h`, `../ops.h`, `hda.h`, `hda-ipc.h`, `../sof-audio.h`.
- Detected declarations: `function sof_ptl_check_mic_privacy_irq`, `function sof_ptl_mic_privacy_work`, `function sof_ptl_process_mic_privacy`, `function sof_ptl_set_mic_privacy`, `function sof_ptl_set_ops`.
- Atlas domain: Driver Families / sound/soc.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.