Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f416c93
ASoC: codecs: lpass-va-macro: fix Denali DMIC divider
ooaklee Aug 26, 2026
25b8d91
ASoC: codecs: lpass: share Denali VA DMIC clocks
ooaklee Aug 26, 2026
516a32e
arm64: dts: qcom: x1-denali: add TX DMIC capture
ooaklee Aug 26, 2026
90bd9c4
dt-bindings: sound: describe Denali protected audio
geocausa Aug 23, 2026
c410674
soundwire: add optional slave transport metadata
geocausa Aug 23, 2026
8ffd6b0
ASoC: qcom: x1e80100: prepare Denali feedback backends
geocausa Aug 23, 2026
f43539b
soundwire: support opt-in SIMPLE transport extensions
geocausa Aug 23, 2026
4d104a8
soundwire: qcom: expose Denali WSA feedback DAIs
geocausa Aug 23, 2026
2f81874
ASoC: wsa884x: add opt-in VI and CPS feedback DAIs
geocausa Aug 23, 2026
4b45973
ASoC: lpass-wsa-macro: add Denali feedback endpoints
geocausa Aug 23, 2026
c60a9a4
ASoC: q6dsp: expose Denali WSA protection streams
ooaklee Aug 23, 2026
12b3dc5
soc: qcom: apr: drain callbacks before freeing services
ooaklee Sep 1, 2026
4566257
ASoC: q6apm: correlate commands and memory mappings
ooaklee Sep 1, 2026
16df7af
ASoC: q6dsp: parse FullIO topology extensions
geocausa Aug 23, 2026
fa9f83a
ASoC: q6apm: add graph-scoped OOB configuration
geocausa Aug 23, 2026
210a40c
ASoC: q6apm: run FullIO protection per graph
geocausa Aug 23, 2026
47a2434
ASoC: qcom: wire Denali protection backends
ooaklee Aug 31, 2026
5322b95
dt-bindings: sound: describe WSA884x speaker load
ooaklee Aug 31, 2026
1157df7
ASoC: wsa884x: add opt-in 2S 4-ohm profile
geocausa Jul 29, 2026
e01cfb3
ASoC: codecs: order WSA protection clocks after both PAs
geocausa Aug 23, 2026
98a1bf1
arm64: dts: qcom: denali: describe VI and CPS audio paths
geocausa Aug 23, 2026
a2726fe
arm64: dts: qcom: denali: select 4-ohm speaker profile
ooaklee Aug 31, 2026
5df38f6
ASoC: q6dsp: allow modules with more than eight input ports
ooaklee Sep 2, 2026
2353166
platform/surface: registry: omit SP11 SAM battery node
kyjus25 Aug 24, 2026
64104e9
platform/surface: aggregator_registry: omit SP11 SAM AC node
ooaklee Sep 1, 2026
fa6dc7a
ACPI: platform_profile: keep class interface without ACPI
ooaklee Aug 23, 2026
9b60a3d
platform/surface: add profile and fan nodes for SP11
ooaklee Aug 10, 2026
1600ae1
platform/surface: gate low-power CPU cap to SP11
ooaklee Aug 22, 2026
80ecee8
UBUNTU: Ubuntu-qcom-x1e-7.2.2-jg-0sp11beta1
ooaklee Sep 2, 2026
ad96ca1
media: qcom: camss: disable unconfigured CSID680 RDI crop/drop
ooaklee Aug 27, 2026
a825cb4
media: qcom: camss: select MIPI RAW mode for VFE680 RDI
ooaklee Aug 27, 2026
4df59a2
media: qcom: camss: restore IMX681 receiver crop
ooaklee Aug 27, 2026
9db37e1
media: qcom: camss: program CSID680 RDI keep-all state
ooaklee Aug 28, 2026
992be22
media: qcom: camss: unwind partial stream starts
ooaklee Aug 28, 2026
9e2e6c4
media: qcom: camss: restore IMX681 stop diagnostics
ooaklee Aug 28, 2026
396fdb0
UBUNTU: Ubuntu-qcom-x1e-7.2.2-jg-0sp11beta2
ooaklee Sep 2, 2026
68ed7f4
media: qcom: camss: contain SP11 receiver changes
ooaklee Sep 2, 2026
6d4eeb2
ASoC: q6apm: restore SP11 protected pull geometry
ooaklee Aug 23, 2026
b59a82c
ASoC: q6apm: restore protected pull pause lifecycle
ooaklee Aug 23, 2026
70e3340
ASoC: qcom: x1e80100: restore Denali PA gain range
ooaklee Aug 23, 2026
266b201
ASoC: q6apm: scope protected pull setup to graph client
ooaklee Aug 23, 2026
9f7e7d9
ASoC: q6apm: restore SP11 pull position ownership
ooaklee Aug 23, 2026
ca7606e
ASoC: q6apm: preserve SP11 pull run-state order
ooaklee Aug 23, 2026
c775c70
ASoC: q6apm: preserve SP11 pull media order
ooaklee Aug 23, 2026
38b51ff
ASoC: q6apm: match SP11 control routing
ooaklee Aug 23, 2026
b2be828
ASoC: q6apm: resolve protected position map errors
ooaklee Sep 2, 2026
88d419a
ASoC: q6apm: resume protected pull before prepare reuse
ooaklee Sep 2, 2026
7353bf6
ASoC: q6apm: reserve the protected position token
ooaklee Sep 2, 2026
0824998
ASoC: q6apm: hard-stop uncertain protected pull
ooaklee Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ properties:
- qcom,sm8650-sndcard
- qcom,sm8750-sndcard
- const: qcom,sm8450-sndcard
- items:
- const: microsoft,denali-sndcard
- const: qcom,x1e80100-sndcard
- enum:
- dell,xps13-9345-sndcard
- fairphone,fp4-sndcard
Expand Down
35 changes: 33 additions & 2 deletions Documentation/devicetree/bindings/sound/qcom,wsa8840.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,39 @@ properties:
minItems: 6
maxItems: 6

qcom,enable-cps:
type: boolean
description: Enable the dedicated CPS SoundWire source DAI on data port 6.

qcom,cps-offset1:
$ref: /schemas/types.yaml#/definitions/uint32
maximum: 255
description: |
Slave-only SoundWire DP6 OffsetCtrl1 override for CPS. This does not
change the physical master-port schedule selected by qcom,port-mapping.

qcom,visense-channel-mask:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 1
maximum: 255
description: |
Native WSA data-port-5 channel-enable mask for the VISENSE protection
sidechain. If absent, the codec default is used.

qcom,speaker-load-ohms:
enum: [4, 8]
description: |
Nominal speaker load impedance in ohms. A 4-ohm load selects the
matching PA gain and PBR thresholds when the amplifier reports a 2S
VPHX supply. If absent, the existing 8-ohm defaults are retained.

'#sound-dai-cells':
const: 0
enum: [0, 1]
description: |
Zero selects the legacy single speaker-playback DAI. With one cell,
DAI 0 is speaker playback, DAI 1 is the render-coupled VISENSE
protection-feedback sidechain, and DAI 2 is the dedicated CPS feedback
sidechain when qcom,enable-cps is present.

vdd-1p8-supply: true
vdd-io-supply: true
Expand Down Expand Up @@ -75,7 +106,7 @@ examples:
pinctrl-names = "default";
pinctrl-0 = <&spkr_2_sd_n_active>;
powerdown-gpios = <&lpass_tlmm 18 GPIO_ACTIVE_LOW>;
#sound-dai-cells = <0>;
#sound-dai-cells = <1>;
sound-name-prefix = "SpkrRight";
vdd-1p8-supply = <&vreg_l15b_1p8>;
vdd-io-supply = <&vreg_l3g_1p2>;
Expand Down
82 changes: 77 additions & 5 deletions arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -322,18 +322,21 @@
};

sound {
compatible = "qcom,x1e80100-sndcard";
compatible = "microsoft,denali-sndcard",
"qcom,x1e80100-sndcard";
model = "X1E80100-Microsoft-Surface-Pro-11";
audio-routing = "SpkrLeft IN", "WSA WSA_SPK1 OUT",
"SpkrRight IN", "WSA WSA_SPK2 OUT",
"VA DMIC0", "vdd-micb",
"VA DMIC1", "vdd-micb";
"VA DMIC1", "vdd-micb",
"TX DMIC0", "vdd-micb",
"TX DMIC1", "vdd-micb";

wsa-dai-link {
link-name = "WSA Playback";

codec {
sound-dai = <&left_spkr>, <&right_spkr>,
sound-dai = <&left_spkr 0>, <&right_spkr 0>,
<&swr0 0>, <&lpass_wsamacro 0>;
};

Expand All @@ -346,6 +349,51 @@
};
};

wsa-vi-dai-link {
link-name = "WSA VI Protection";

/*
* One two-channel Windows-equivalent feedback transport:
* amplifier VISENSE ports 10/11 -> WSA macro VI ->
* SoundWire DIN0 -> AudioReach WSA TX0.
*/
codec {
sound-dai = <&left_spkr 1>, <&right_spkr 1>,
<&swr0 9>, <&lpass_wsamacro 2>;
};

cpu {
sound-dai = <&q6apmbedai WSA_CODEC_DMA_TX_0>;
};

platform {
sound-dai = <&q6apm>;
};
};

wsa-cps-dai-link {
link-name = "WSA CPS Protection";

/*
* Dedicated CPS sidechain: both WSA8845 DP6 sources share
* physical SoundWire master port 13. swr0 DAI 10 is only
* the independent ASoC/SoundWire stream handle; qcom,port-mapping
* below remains authoritative for the physical master ports.
*/
codec {
sound-dai = <&left_spkr 2>, <&right_spkr 2>,
<&swr0 10>, <&lpass_wsamacro 4>;
};

cpu {
sound-dai = <&q6apmbedai WSA_CODEC_DMA_TX_1>;
};

platform {
sound-dai = <&q6apm>;
};
};

va-dai-link {
link-name = "VA Capture";

Expand All @@ -361,6 +409,22 @@
sound-dai = <&q6apm>;
};
};

tx-dai-link {
link-name = "TX Capture";

codec {
sound-dai = <&lpass_txmacro 0>;
};

cpu {
sound-dai = <&q6apmbedai TX_CODEC_DMA_TX_3>;
};

platform {
sound-dai = <&q6apm>;
};
};
};

wcn7850-pmu {
Expand Down Expand Up @@ -1142,23 +1206,31 @@
compatible = "sdw20217020400";
reg = <0 0>;
reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>;
#sound-dai-cells = <0>;
#sound-dai-cells = <1>;
sound-name-prefix = "SpkrLeft";
vdd-1p8-supply = <&vreg_l15b_1p8>;
vdd-io-supply = <&vreg_l12b_1p2>;
qcom,port-mapping = <1 2 3 7 10 13>;
qcom,speaker-load-ohms = <4>;
qcom,visense-channel-mask = <3>;
qcom,enable-cps;
qcom,cps-offset1 = <0>;
};

/* WSA8845, Right Speaker */
right_spkr: speaker@0,1 {
compatible = "sdw20217020400";
reg = <0 1>;
reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>;
#sound-dai-cells = <0>;
#sound-dai-cells = <1>;
sound-name-prefix = "SpkrRight";
vdd-1p8-supply = <&vreg_l15b_1p8>;
vdd-io-supply = <&vreg_l12b_1p2>;
qcom,port-mapping = <4 5 6 7 11 13>;
qcom,speaker-load-ohms = <4>;
qcom,visense-channel-mask = <3>;
qcom,enable-cps;
qcom,cps-offset1 = <25>;
};
};

Expand Down
12 changes: 12 additions & 0 deletions debian.qcom-x1e/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
linux-qcom-x1e (7.2.2-jg-0sp11beta2) resolute; urgency=medium

* Supersede sp11beta1 with the restored camera parity series.

-- Leon Silcott <leon@boasi.io> Wed, 02 Sep 2026 21:25:00 +0100

linux-qcom-x1e (7.2.2-jg-0sp11beta1) resolute; urgency=medium

* Assemble the guarded SP11 topic stack for qualification.

-- Leon Silcott <leon@boasi.io> Wed, 02 Sep 2026 19:30:00 +0100

linux-qcom-x1e (7.2.2-jg-0) resolute; urgency=medium

* arm64: dts: qcom: x1-lenovo-ideacentre-mini-01q8x10: discriminate compatible strings
Expand Down
42 changes: 30 additions & 12 deletions drivers/acpi/platform_profile.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ static const char * const profile_names[] = {
static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST);

static DEFINE_IDA(platform_profile_ida);
static bool platform_profile_legacy_registered;

static void platform_profile_legacy_notify(void)
{
if (platform_profile_legacy_registered)
sysfs_notify(acpi_kobj, NULL, "platform_profile");
}

/**
* _commmon_choices_show - Show the available profile choices
Expand Down Expand Up @@ -216,7 +223,7 @@ static ssize_t profile_store(struct device *dev,
return ret;
}

sysfs_notify(acpi_kobj, NULL, "platform_profile");
platform_profile_legacy_notify();

return count;
}
Expand Down Expand Up @@ -436,7 +443,7 @@ static ssize_t platform_profile_store(struct kobject *kobj,
return ret;
}

sysfs_notify(acpi_kobj, NULL, "platform_profile");
platform_profile_legacy_notify();

return count;
}
Expand Down Expand Up @@ -473,6 +480,14 @@ static const struct attribute_group platform_profile_group = {
.is_visible = profile_class_is_visible,
};

static int platform_profile_legacy_update_group(void)
{
if (!platform_profile_legacy_registered)
return 0;

return sysfs_update_group(acpi_kobj, &platform_profile_group);
}

/**
* platform_profile_notify - Notify class device and legacy sysfs interface
* @dev: The class device
Expand All @@ -482,7 +497,7 @@ void platform_profile_notify(struct device *dev)
scoped_cond_guard(mutex_intr, return, &profile_lock) {
_notify_class_profile(dev, NULL);
}
sysfs_notify(acpi_kobj, NULL, "platform_profile");
platform_profile_legacy_notify();
}
EXPORT_SYMBOL_GPL(platform_profile_notify);

Expand Down Expand Up @@ -532,7 +547,7 @@ int platform_profile_cycle(void)
return err;
}

sysfs_notify(acpi_kobj, NULL, "platform_profile");
platform_profile_legacy_notify();

return 0;
}
Expand Down Expand Up @@ -605,9 +620,9 @@ struct device *platform_profile_register(struct device *dev, const char *name,
goto cleanup_ida;
}

sysfs_notify(acpi_kobj, NULL, "platform_profile");
platform_profile_legacy_notify();

err = sysfs_update_group(acpi_kobj, &platform_profile_group);
err = platform_profile_legacy_update_group();
if (err)
goto cleanup_cur;

Expand Down Expand Up @@ -641,8 +656,8 @@ void platform_profile_remove(struct device *dev)
ida_free(&platform_profile_ida, pprof->minor);
device_unregister(&pprof->dev);

sysfs_notify(acpi_kobj, NULL, "platform_profile");
sysfs_update_group(acpi_kobj, &platform_profile_group);
platform_profile_legacy_notify();
platform_profile_legacy_update_group();
}
EXPORT_SYMBOL_GPL(platform_profile_remove);

Expand Down Expand Up @@ -690,23 +705,26 @@ static int __init platform_profile_init(void)
{
int err;

if (acpi_disabled)
return -EOPNOTSUPP;

err = class_register(&platform_profile_class);
if (err)
return err;

if (acpi_disabled || !acpi_kobj)
return 0;

err = sysfs_create_group(acpi_kobj, &platform_profile_group);
if (err)
class_unregister(&platform_profile_class);
else
platform_profile_legacy_registered = true;

return err;
}

static void __exit platform_profile_exit(void)
{
sysfs_remove_group(acpi_kobj, &platform_profile_group);
if (platform_profile_legacy_registered)
sysfs_remove_group(acpi_kobj, &platform_profile_group);
class_unregister(&platform_profile_class);
}
module_init(platform_profile_init);
Expand Down
Loading
Loading