On Tue, 19 Sep 2023 16:22:39 +0200, Stefan Binding wrote:
From: Vitaly Rodionov vitalyr@opensource.cirrus.com
Some laptops require a hardware based mute system, where when a hotkey is pressed, it forces the amp to be muted.
For CS35L41, when the hotkey is pressed, an acpi notification is sent to the CS35L41 Device Node. The driver needs to handle this notification and call a _DSM function to retrieve the mute state.
Since the amp is only muted during playback, the driver will only mute or unmute if playback is occurring, otherwise it will save the mute state for when playback starts.
Only one handler can be registered for the acpi notification, but all amps need to receive that notification, we can register a single handler inside the Realtek HDA driver, so that it can then notify through the component framework.
Signed-off-by: Vitaly Rodionov vitalyr@opensource.cirrus.com Signed-off-by: Stefan Binding sbinding@opensource.cirrus.com
The patch is a bit lengthy. I'd split the binding of patch_realtek.c into another patch. That part is fairly generic.
--- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c
(snip)
+static void comp_acpi_device_notify(acpi_handle handle, u32 event, void *data) +{
- struct hda_codec *cdc = data;
- struct alc_spec *spec = cdc->spec;
- int i;
- codec_info(cdc, "ACPI Notification %d\n", event);
- for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
if (spec->comps[i].dev && spec->comps[i].acpi_notify)
spec->comps[i].acpi_notify(acpi_device_handle(spec->comps[i].adev), event,
spec->comps[i].dev);
- }
+}
This function should be in #ifdef CONFIG_ACPI, too.
thanks,
Takashi