lkml.org 
[lkml]   [2022]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v6 29/35] sound: hdac: Migrate to aggregate driver
Date
Use an aggregate driver instead of component ops so that we can get
proper driver probe ordering of the aggregate device with respect to all
the component devices that make up the aggregate device.

Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Takashi Iwai <tiwai@suse.com>
Cc: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Saravana Kannan <saravanak@google.com>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
sound/hda/hdac_component.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/sound/hda/hdac_component.c b/sound/hda/hdac_component.c
index bb37e7e0bd79..4ec5d9bf8533 100644
--- a/sound/hda/hdac_component.c
+++ b/sound/hda/hdac_component.c
@@ -181,8 +181,9 @@ int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, int dev_id,
}
EXPORT_SYMBOL_GPL(snd_hdac_acomp_get_eld);

-static int hdac_component_master_bind(struct device *dev)
+static int hdac_component_master_bind(struct aggregate_device *adev)
{
+ struct device *dev = aggregate_device_parent(adev);
struct drm_audio_component *acomp = hdac_get_acomp(dev);
int ret;

@@ -222,8 +223,9 @@ static int hdac_component_master_bind(struct device *dev)
return ret;
}

-static void hdac_component_master_unbind(struct device *dev)
+static void hdac_component_master_unbind(struct aggregate_device *adev)
{
+ struct device *dev = aggregate_device_parent(adev);
struct drm_audio_component *acomp = hdac_get_acomp(dev);

if (acomp->audio_ops && acomp->audio_ops->master_unbind)
@@ -233,9 +235,13 @@ static void hdac_component_master_unbind(struct device *dev)
WARN_ON(acomp->ops || acomp->dev);
}

-static const struct component_master_ops hdac_component_master_ops = {
- .bind = hdac_component_master_bind,
- .unbind = hdac_component_master_unbind,
+static struct aggregate_driver hdac_aggregate_driver = {
+ .probe = hdac_component_master_bind,
+ .remove = hdac_component_master_unbind,
+ .driver = {
+ .name = "hdac_agg",
+ .owner = THIS_MODULE,
+ },
};

/**
@@ -303,8 +309,7 @@ int snd_hdac_acomp_init(struct hdac_bus *bus,
devres_add(dev, acomp);

component_match_add_typed(dev, &match, match_master, bus);
- ret = component_master_add_with_match(dev, &hdac_component_master_ops,
- match);
+ ret = component_aggregate_register(dev, &hdac_aggregate_driver, match);
if (ret < 0)
goto out_err;

@@ -344,7 +349,7 @@ int snd_hdac_acomp_exit(struct hdac_bus *bus)
bus->display_power_active = 0;
bus->display_power_status = 0;

- component_master_del(dev, &hdac_component_master_ops);
+ component_aggregate_unregister(dev, &hdac_aggregate_driver);

bus->audio_component = NULL;
devres_destroy(dev, hdac_acomp_release, NULL, NULL);
--
https://chromeos.dev
\
 
 \ /
  Last update: 2022-01-27 21:03    [W:0.268 / U:0.484 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site