ALSA: hda: hda_component: Move codec field into the parent
authorSimon Trimmer <simont@opensource.cirrus.com>
Mon, 17 Jun 2024 15:41:04 +0000 (16:41 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 18 Jun 2024 09:58:45 +0000 (11:58 +0200)
There is one codec shared across all of the bound HDA components and a
copy is usually stashed in the amp driver so it doesn't need to be in
every hda_component.

Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/20240617154105.108635-4-simont@opensource.cirrus.com
sound/pci/hda/cs35l41_hda.c
sound/pci/hda/cs35l56_hda.c
sound/pci/hda/hda_component.c
sound/pci/hda/hda_component.h
sound/pci/hda/tas2781_hda_i2c.c

index ceba4f2..ee9f83b 100644 (file)
@@ -1436,10 +1436,11 @@ static int cs35l41_hda_bind(struct device *dev, struct device *master, void *mas
        mutex_lock(&cs35l41->fw_mutex);
 
        comp->dev = dev;
+       cs35l41->codec = parent->codec;
        if (!cs35l41->acpi_subsystem_id)
                cs35l41->acpi_subsystem_id = kasprintf(GFP_KERNEL, "%.8x",
-                                                      comp->codec->core.subsystem_id);
-       cs35l41->codec = comp->codec;
+                                                      cs35l41->codec->core.subsystem_id);
+
        strscpy(comp->name, dev_name(dev), sizeof(comp->name));
 
        cs35l41->firmware_type = HDA_CS_DSP_FW_SPK_PROT;
@@ -1470,7 +1471,7 @@ static int cs35l41_hda_bind(struct device *dev, struct device *master, void *mas
        mutex_unlock(&cs35l41->fw_mutex);
 
        sleep_flags = lock_system_sleep();
-       if (!device_link_add(&comp->codec->core.dev, cs35l41->dev, DL_FLAG_STATELESS))
+       if (!device_link_add(&cs35l41->codec->core.dev, cs35l41->dev, DL_FLAG_STATELESS))
                dev_warn(dev, "Unable to create device link\n");
        unlock_system_sleep(sleep_flags);
 
index df4498c..cc4aa90 100644 (file)
@@ -697,7 +697,7 @@ static int cs35l56_hda_bind(struct device *dev, struct device *master, void *mas
                return -EBUSY;
 
        comp->dev = dev;
-       cs35l56->codec = comp->codec;
+       cs35l56->codec = parent->codec;
        strscpy(comp->name, dev_name(dev), sizeof(comp->name));
        comp->playback_hook = cs35l56_hda_playback_hook;
 
index 8c11c8b..1a9950b 100644 (file)
@@ -134,12 +134,9 @@ static int hda_comp_match_dev_name(struct device *dev, void *data)
 int hda_component_manager_bind(struct hda_codec *cdc,
                               struct hda_component_parent *parent)
 {
-       int i;
-
        /* Init shared and component specific data */
        memset(parent, 0, sizeof(*parent));
-       for (i = 0; i < ARRAY_SIZE(parent->comps); i++)
-               parent->comps[i].codec = cdc;
+       parent->codec = cdc;
 
        return component_bind_all(hda_codec_dev(cdc), parent);
 }
index e547e1f..dd4dabe 100644 (file)
@@ -19,7 +19,6 @@
 struct hda_component {
        struct device *dev;
        char name[HDA_MAX_NAME_SIZE];
-       struct hda_codec *codec;
        struct acpi_device *adev;
        bool acpi_notifications_supported;
        void (*acpi_notify)(acpi_handle handle, u32 event, struct device *dev);
@@ -29,6 +28,7 @@ struct hda_component {
 };
 
 struct hda_component_parent {
+       struct hda_codec *codec;
        struct hda_component comps[HDA_MAX_COMPONENTS];
 };
 
index c6c1e8e..d7af4fd 100644 (file)
@@ -719,7 +719,7 @@ static int tas2781_hda_bind(struct device *dev, struct device *master,
        if (comp->dev)
                return -EBUSY;
 
-       codec = comp->codec;
+       codec = parent->codec;
        subid = codec->core.subsystem_id >> 16;
 
        switch (subid) {