]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
soundwire: intel: Add awareness of ACE3+ microphone privacy
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Wed, 30 Apr 2025 07:47:13 +0000 (15:47 +0800)
committerVinod Koul <vkoul@kernel.org>
Wed, 14 May 2025 11:43:25 +0000 (12:43 +0100)
ACE3 introduced microphone privacy and along this feature it adds a new
register in vendor specific SHIM to control and status reporting.
The control of mic privacy via the SHIM register is only to enable the
interrupt generation via soundwire, but not handled by the soundwire code
as the mic privacy is not a feature of the soundwire IP.

On the other hand, printing the register value brings value for debugging,
so add a new flag to allow this conditionally.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20250430074714.94000-2-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/intel.h
drivers/soundwire/intel_ace2x_debugfs.c
drivers/soundwire/intel_init.c
include/linux/soundwire/sdw_intel.h

index d44e70d3c4e3c0410be86098511f26905b6374f7..86abc465260fafe43a67a61171fdf33b0b16f57a 100644 (file)
@@ -22,6 +22,7 @@ struct hdac_bus;
  * @shim_lock: mutex to handle access to shared SHIM registers
  * @shim_mask: global pointer to check SHIM register initialization
  * @clock_stop_quirks: mask defining requested behavior on pm_suspend
+ * @mic_privacy: ACE version supports microphone privacy
  * @link_mask: global mask needed for power-up/down sequences
  * @cdns: Cadence master descriptor
  * @list: used to walk-through all masters exposed by the same controller
@@ -42,6 +43,7 @@ struct sdw_intel_link_res {
        struct mutex *shim_lock; /* protect shared registers */
        u32 *shim_mask;
        u32 clock_stop_quirks;
+       bool mic_privacy;
        u32 link_mask;
        struct sdw_cdns *cdns;
        struct list_head list;
index 206a8d511ebdc7b5b1af7abd01e654223e6a5dae..fda8f0daaa96b92fa56f6e12cfc42bc6a0702c1c 100644 (file)
@@ -76,6 +76,12 @@ static int intel_reg_show(struct seq_file *s_file, void *data)
        ret += intel_sprintf(vs_s, false, buf, ret, SDW_SHIM2_INTEL_VS_IOCTL);
        ret += intel_sprintf(vs_s, false, buf, ret, SDW_SHIM2_INTEL_VS_ACTMCTL);
 
+       if (sdw->link_res->mic_privacy) {
+               ret += scnprintf(buf + ret, RD_BUF - ret, "\nVS PVCCS\n");
+               ret += intel_sprintf(vs_s, false, buf, ret,
+                                    SDW_SHIM2_INTEL_VS_PVCCS);
+       }
+
        seq_printf(s_file, "%s", buf);
        kfree(buf);
 
index 5f53666514a45a4f0869ab8022208edeb09a29ee..4ffdabaf9693f98b3651b83dd90e9b2d1d8d4d25 100644 (file)
@@ -77,6 +77,7 @@ static struct sdw_intel_link_dev *intel_link_dev_register(struct sdw_intel_res *
                link->shim = res->mmio_base +  SDW_SHIM2_GENERIC_BASE(link_id);
                link->shim_vs = res->mmio_base + SDW_SHIM2_VS_BASE(link_id);
                link->shim_lock = res->eml_lock;
+               link->mic_privacy = res->mic_privacy;
        }
 
        link->ops = res->ops;
index 493d9de4e472414f1501e99e85a0fa5e85a1e88f..2af1d8174c5062ecd64bf8d484752f53612f9d44 100644 (file)
 #define SDW_SHIM3_INTEL_VS_ACTMCTL_DOAISE2     BIT(14)
 #define SDW_SHIM3_INTEL_VS_ACTMCTL_CLDE                BIT(15)
 
+/* ACE3+ Mic privacy control and status register */
+#define SDW_SHIM2_INTEL_VS_PVCCS               0x10
+
 /**
  * struct sdw_intel_stream_params_data: configuration passed during
  * the @params_stream callback, e.g. for interaction with DSP
@@ -331,6 +334,7 @@ struct sdw_intel_ctx {
  * @shim_base: sdw shim base.
  * @alh_base: sdw alh base.
  * @ext: extended HDaudio link support
+ * @mic_privacy: ACE version supports microphone privacy
  * @hbus: hdac_bus pointer, needed for power management
  * @eml_lock: mutex protecting shared registers in the HDaudio multi-link
  * space
@@ -349,6 +353,7 @@ struct sdw_intel_res {
        u32 shim_base;
        u32 alh_base;
        bool ext;
+       bool mic_privacy;
        struct hdac_bus *hbus;
        struct mutex *eml_lock;
 };