From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752803AbbGNMrq (ORCPT ); Tue, 14 Jul 2015 08:47:46 -0400 Received: from mail-wg0-f48.google.com ([74.125.82.48]:36422 "EHLO mail-wg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752671AbbGNMr0 (ORCPT ); Tue, 14 Jul 2015 08:47:26 -0400 MIME-Version: 1.0 In-Reply-To: <20150714110713.GT11162@sirena.org.uk> References: <1435743667-11987-1-git-send-email-tomeu.vizoso@collabora.com> <1435743667-11987-12-git-send-email-tomeu.vizoso@collabora.com> <20150701173802.GW11162@sirena.org.uk> <20150713154254.GH11162@sirena.org.uk> <20150714110713.GT11162@sirena.org.uk> From: Tomeu Vizoso Date: Tue, 14 Jul 2015 14:47:04 +0200 X-Google-Sender-Auth: 4z4x8peEhZCH__UlDS5QjzJrmeI Message-ID: Subject: Re: [alsa-devel] [PATCH v2 11/12] ASoC: tegra: register dependency parser for firmware nodes To: Mark Brown Cc: "devicetree@vger.kernel.org" , linux-fbdev@vger.kernel.org, linux-acpi@vger.kernel.org, alsa-devel@alsa-project.org, Stephen Warren , Takashi Iwai , "Rafael J. Wysocki" , Liam Girdwood , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , linux-gpio@vger.kernel.org, Thierry Reding , Linux PWM List , "linux-tegra@vger.kernel.org" , Alexandre Courbot Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 14 July 2015 at 13:07, Mark Brown wrote: > On Tue, Jul 14, 2015 at 09:34:22AM +0200, Tomeu Vizoso wrote: >> On 13 July 2015 at 17:42, Mark Brown wrote: > >> > No, I'm looking at how we already have all the "did all my dependencies >> > appear" logic in the core based on data provided by the drivers. > >> Sorry, but I still don't get what you mean. > > I'm not sure how I can be clearer here... you're replacing something > that is currently pure data with open coding in each device. That seems > like a step back in terms of ease of use. I could understand that if snd_soc_dai_link had a field with the property name, and the core called of_parse_phandle on it, but currently what I'm duplicating is: tegra_max98090_dai.cpu_of_node = of_parse_phandle(np, "nvidia,i2s-controller", 0); with: add_dependency(fwnode, "nvidia,i2s-controller", deps); Admittedly, we could add a cpu_fw_property field to snd_soc_dai_link and have the core call of_parse_phandle itself. But even then, the core doesn't know about a device's snd_soc_dai_link until probe() is called and then it's too late for the purposes of this series. That's why I mentioned devm_probe, as it would add a common way to specify the data needed to acquire resources in each driver, which could be made available before probe() is called. >>From the proof of concept that Arnd sent in https://lkml.kernel.org/g/4742258.TBitC3hVuO@wuerfel : struct foo_priv { spinlock_t lock; void __iomem *regs; int irq; struct gpio_desc *gpio; struct dma_chan *rxdma; struct dma_chan *txdma; bool oldstyle_dma; }; /* * this lists all properties we access from the driver. The list * is interpreted by devm_probe() and can be programmatically * verified to match the binding. */ static const struct devm_probe foo_probe_list[] = { DEVM_ALLOC(foo_priv), DEVM_IOMAP(foo_priv, regs, 0, 0), DEVM_PROP_BOOL(foo_priv, oldstyle_dma, "foo,oldstyle-dma"), DEVM_DMA_SLAVE(foo_priv, rxdma, "rx"); DEVM_DMA_SLAVE(foo_priv, txdma, "tx"); DEVM_GPIO(foo_priv, gpio, 0); DEVM_IRQ_NAMED(foo_priv, irq, foo_irq_handler, "fifo", IRQF_SHARED), {}, }; Thanks, Tomeu >> Information about dependencies is currently available only after >> probe() starts executing, and used to decide whether we want to defer >> the probe. > >> The goal of this series is to eliminate most or all of the deferred >> probes by checking that all dependencies are available before probe() >> is called. > > Right, but the way it does this is by moving code out of the core into > the drivers - currently drivers just tell the core what resources to > look up and the core then makes sure that they're all present. > >> I thought you were pointing out that the property names would be >> duplicated, once in the probe() implementation and also in the >> implementation of the get_dependencies callback. > > Yes, that is another part of issue with this approach - drivers now have > to specify things twice, once for this new interface and once for > actually looking things up. That doesn't seem awesome and adding the > code into the individual drivers and then having to pull it out again > when the redundancy is removed is going to be an enormous amount of > churn. > >> A way to consolidate the code and remove that duplication would be >> having a declarative API for expressing dependencies, which could be >> used for both fetching dependencies and for preventing deferred >> probes. That's why I mentioned devm_probe. > > Part of what I'm saying here is that in ASoC we already have (at least > as far as the individual drivers are concerned) a declarative way of > specifying dependencies. This new code should be able to make use of > that, if it can't and especially if none of the code can be shared > between drivers then that seems like the interface needs another spin. > > I've not seen this devm_probe() code but the name sounds worryingly like > it might be fixing the wrong problem :/ From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomeu Vizoso Subject: Re: [alsa-devel] [PATCH v2 11/12] ASoC: tegra: register dependency parser for firmware nodes Date: Tue, 14 Jul 2015 14:47:04 +0200 Message-ID: References: <1435743667-11987-1-git-send-email-tomeu.vizoso@collabora.com> <1435743667-11987-12-git-send-email-tomeu.vizoso@collabora.com> <20150701173802.GW11162@sirena.org.uk> <20150713154254.GH11162@sirena.org.uk> <20150714110713.GT11162@sirena.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20150714110713.GT11162@sirena.org.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Brown Cc: "devicetree@vger.kernel.org" , linux-fbdev@vger.kernel.org, Stephen Warren , "linux-kernel@vger.kernel.org" , linux-gpio@vger.kernel.org, "Rafael J. Wysocki" , alsa-devel@alsa-project.org, "dri-devel@lists.freedesktop.org" , Liam Girdwood , linux-acpi@vger.kernel.org, Linux PWM List , "linux-tegra@vger.kernel.org" , Alexandre Courbot List-Id: linux-acpi@vger.kernel.org T24gMTQgSnVseSAyMDE1IGF0IDEzOjA3LCBNYXJrIEJyb3duIDxicm9vbmllQGtlcm5lbC5vcmc+ IHdyb3RlOgo+IE9uIFR1ZSwgSnVsIDE0LCAyMDE1IGF0IDA5OjM0OjIyQU0gKzAyMDAsIFRvbWV1 IFZpem9zbyB3cm90ZToKPj4gT24gMTMgSnVseSAyMDE1IGF0IDE3OjQyLCBNYXJrIEJyb3duIDxi cm9vbmllQGtlcm5lbC5vcmc+IHdyb3RlOgo+Cj4+ID4gTm8sIEknbSBsb29raW5nIGF0IGhvdyB3 ZSBhbHJlYWR5IGhhdmUgYWxsIHRoZSAiZGlkIGFsbCBteSBkZXBlbmRlbmNpZXMKPj4gPiBhcHBl YXIiIGxvZ2ljIGluIHRoZSBjb3JlIGJhc2VkIG9uIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGRyaXZl cnMuCj4KPj4gU29ycnksIGJ1dCBJIHN0aWxsIGRvbid0IGdldCB3aGF0IHlvdSBtZWFuLgo+Cj4g SSdtIG5vdCBzdXJlIGhvdyBJIGNhbiBiZSBjbGVhcmVyIGhlcmUuLi4gIHlvdSdyZSByZXBsYWNp bmcgc29tZXRoaW5nCj4gdGhhdCBpcyBjdXJyZW50bHkgcHVyZSBkYXRhIHdpdGggb3BlbiBjb2Rp bmcgaW4gZWFjaCBkZXZpY2UuICBUaGF0IHNlZW1zCj4gbGlrZSBhIHN0ZXAgYmFjayBpbiB0ZXJt cyBvZiBlYXNlIG9mIHVzZS4KCkkgY291bGQgdW5kZXJzdGFuZCB0aGF0IGlmIHNuZF9zb2NfZGFp X2xpbmsgaGFkIGEgZmllbGQgd2l0aCB0aGUKcHJvcGVydHkgbmFtZSwgYW5kIHRoZSBjb3JlIGNh bGxlZCBvZl9wYXJzZV9waGFuZGxlIG9uIGl0LCBidXQKY3VycmVudGx5IHdoYXQgSSdtIGR1cGxp Y2F0aW5nIGlzOgoKICAgIHRlZ3JhX21heDk4MDkwX2RhaS5jcHVfb2Zfbm9kZSA9IG9mX3BhcnNl X3BoYW5kbGUobnAsCiAgICAgICAgICAgICJudmlkaWEsaTJzLWNvbnRyb2xsZXIiLCAwKTsKCndp dGg6CgogICAgYWRkX2RlcGVuZGVuY3koZndub2RlLCAibnZpZGlhLGkycy1jb250cm9sbGVyIiwg ZGVwcyk7CgpBZG1pdHRlZGx5LCB3ZSBjb3VsZCBhZGQgYSBjcHVfZndfcHJvcGVydHkgZmllbGQg dG8gc25kX3NvY19kYWlfbGluawphbmQgaGF2ZSB0aGUgY29yZSBjYWxsIG9mX3BhcnNlX3BoYW5k bGUgaXRzZWxmLgoKQnV0IGV2ZW4gdGhlbiwgdGhlIGNvcmUgZG9lc24ndCBrbm93IGFib3V0IGEg ZGV2aWNlJ3Mgc25kX3NvY19kYWlfbGluawp1bnRpbCBwcm9iZSgpIGlzIGNhbGxlZCBhbmQgdGhl biBpdCdzIHRvbyBsYXRlIGZvciB0aGUgcHVycG9zZXMgb2YKdGhpcyBzZXJpZXMuCgpUaGF0J3Mg d2h5IEkgbWVudGlvbmVkIGRldm1fcHJvYmUsIGFzIGl0IHdvdWxkIGFkZCBhIGNvbW1vbiB3YXkg dG8Kc3BlY2lmeSB0aGUgZGF0YSBuZWVkZWQgdG8gYWNxdWlyZSByZXNvdXJjZXMgaW4gZWFjaCBk cml2ZXIsIHdoaWNoCmNvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIGJlZm9yZSBwcm9iZSgpIGlzIGNh bGxlZC4KCkZyb20gdGhlIHByb29mIG9mIGNvbmNlcHQgdGhhdCBBcm5kIHNlbnQgaW4KaHR0cHM6 Ly9sa21sLmtlcm5lbC5vcmcvZy80NzQyMjU4LlRCaXRDM2hWdU9Ad3VlcmZlbCA6CgpzdHJ1Y3Qg Zm9vX3ByaXYgewogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICB2b2lkIF9faW9tZW0g KnJlZ3M7CiAgICAgICAgaW50IGlycTsKICAgICAgICBzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvOwog ICAgICAgIHN0cnVjdCBkbWFfY2hhbiAqcnhkbWE7CiAgICAgICAgc3RydWN0IGRtYV9jaGFuICp0 eGRtYTsKICAgICAgICBib29sIG9sZHN0eWxlX2RtYTsKfTsKCi8qCiAqIHRoaXMgbGlzdHMgYWxs IHByb3BlcnRpZXMgd2UgYWNjZXNzIGZyb20gdGhlIGRyaXZlci4gVGhlIGxpc3QKICogaXMgaW50 ZXJwcmV0ZWQgYnkgZGV2bV9wcm9iZSgpIGFuZCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseQogKiB2 ZXJpZmllZCB0byBtYXRjaCB0aGUgYmluZGluZy4KICovCnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2 bV9wcm9iZSBmb29fcHJvYmVfbGlzdFtdID0gewogICAgICAgIERFVk1fQUxMT0MoZm9vX3ByaXYp LAogICAgICAgIERFVk1fSU9NQVAoZm9vX3ByaXYsIHJlZ3MsIDAsIDApLAogICAgICAgIERFVk1f UFJPUF9CT09MKGZvb19wcml2LCBvbGRzdHlsZV9kbWEsICJmb28sb2xkc3R5bGUtZG1hIiksCiAg ICAgICAgREVWTV9ETUFfU0xBVkUoZm9vX3ByaXYsIHJ4ZG1hLCAicngiKTsKICAgICAgICBERVZN X0RNQV9TTEFWRShmb29fcHJpdiwgdHhkbWEsICJ0eCIpOwogICAgICAgIERFVk1fR1BJTyhmb29f cHJpdiwgZ3BpbywgMCk7CiAgICAgICAgREVWTV9JUlFfTkFNRUQoZm9vX3ByaXYsIGlycSwgZm9v X2lycV9oYW5kbGVyLCAiZmlmbyIsIElSUUZfU0hBUkVEKSwKICAgICAgICB7fSwKfTsKClRoYW5r cywKClRvbWV1Cgo+PiBJbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNpZXMgaXMgY3VycmVudGx5 IGF2YWlsYWJsZSBvbmx5IGFmdGVyCj4+IHByb2JlKCkgc3RhcnRzIGV4ZWN1dGluZywgYW5kIHVz ZWQgdG8gZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkZWZlcgo+PiB0aGUgcHJvYmUuCj4KPj4g VGhlIGdvYWwgb2YgdGhpcyBzZXJpZXMgaXMgdG8gZWxpbWluYXRlIG1vc3Qgb3IgYWxsIG9mIHRo ZSBkZWZlcnJlZAo+PiBwcm9iZXMgYnkgY2hlY2tpbmcgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFy ZSBhdmFpbGFibGUgYmVmb3JlIHByb2JlKCkKPj4gaXMgY2FsbGVkLgo+Cj4gUmlnaHQsIGJ1dCB0 aGUgd2F5IGl0IGRvZXMgdGhpcyBpcyBieSBtb3ZpbmcgY29kZSBvdXQgb2YgdGhlIGNvcmUgaW50 bwo+IHRoZSBkcml2ZXJzIC0gY3VycmVudGx5IGRyaXZlcnMganVzdCB0ZWxsIHRoZSBjb3JlIHdo YXQgcmVzb3VyY2VzIHRvCj4gbG9vayB1cCBhbmQgdGhlIGNvcmUgdGhlbiBtYWtlcyBzdXJlIHRo YXQgdGhleSdyZSBhbGwgcHJlc2VudC4KPgo+PiBJIHRob3VnaHQgeW91IHdlcmUgcG9pbnRpbmcg b3V0IHRoYXQgdGhlIHByb3BlcnR5IG5hbWVzIHdvdWxkIGJlCj4+IGR1cGxpY2F0ZWQsIG9uY2Ug aW4gdGhlIHByb2JlKCkgaW1wbGVtZW50YXRpb24gYW5kIGFsc28gaW4gdGhlCj4+IGltcGxlbWVu dGF0aW9uIG9mIHRoZSBnZXRfZGVwZW5kZW5jaWVzIGNhbGxiYWNrLgo+Cj4gWWVzLCB0aGF0IGlz IGFub3RoZXIgcGFydCBvZiBpc3N1ZSB3aXRoIHRoaXMgYXBwcm9hY2ggLSBkcml2ZXJzIG5vdyBo YXZlCj4gdG8gc3BlY2lmeSB0aGluZ3MgdHdpY2UsIG9uY2UgZm9yIHRoaXMgbmV3IGludGVyZmFj ZSBhbmQgb25jZSBmb3IKPiBhY3R1YWxseSBsb29raW5nIHRoaW5ncyB1cC4gIFRoYXQgZG9lc24n dCBzZWVtIGF3ZXNvbWUgYW5kIGFkZGluZyB0aGUKPiBjb2RlIGludG8gdGhlIGluZGl2aWR1YWwg ZHJpdmVycyBhbmQgdGhlbiBoYXZpbmcgdG8gcHVsbCBpdCBvdXQgYWdhaW4KPiB3aGVuIHRoZSBy ZWR1bmRhbmN5IGlzIHJlbW92ZWQgaXMgZ29pbmcgdG8gYmUgYW4gZW5vcm1vdXMgYW1vdW50IG9m Cj4gY2h1cm4uCj4KPj4gQSB3YXkgdG8gY29uc29saWRhdGUgdGhlIGNvZGUgYW5kIHJlbW92ZSB0 aGF0IGR1cGxpY2F0aW9uIHdvdWxkIGJlCj4+IGhhdmluZyBhIGRlY2xhcmF0aXZlIEFQSSBmb3Ig ZXhwcmVzc2luZyBkZXBlbmRlbmNpZXMsIHdoaWNoIGNvdWxkIGJlCj4+IHVzZWQgZm9yIGJvdGgg ZmV0Y2hpbmcgZGVwZW5kZW5jaWVzIGFuZCBmb3IgcHJldmVudGluZyBkZWZlcnJlZAo+PiBwcm9i ZXMuIFRoYXQncyB3aHkgSSBtZW50aW9uZWQgZGV2bV9wcm9iZS4KPgo+IFBhcnQgb2Ygd2hhdCBJ J20gc2F5aW5nIGhlcmUgaXMgdGhhdCBpbiBBU29DIHdlIGFscmVhZHkgaGF2ZSAoYXQgbGVhc3QK PiBhcyBmYXIgYXMgdGhlIGluZGl2aWR1YWwgZHJpdmVycyBhcmUgY29uY2VybmVkKSBhIGRlY2xh cmF0aXZlIHdheSBvZgo+IHNwZWNpZnlpbmcgZGVwZW5kZW5jaWVzLiAgVGhpcyBuZXcgY29kZSBz aG91bGQgYmUgYWJsZSB0byBtYWtlIHVzZSBvZgo+IHRoYXQsIGlmIGl0IGNhbid0IGFuZCBlc3Bl Y2lhbGx5IGlmIG5vbmUgb2YgdGhlIGNvZGUgY2FuIGJlIHNoYXJlZAo+IGJldHdlZW4gZHJpdmVy cyB0aGVuIHRoYXQgc2VlbXMgbGlrZSB0aGUgaW50ZXJmYWNlIG5lZWRzIGFub3RoZXIgc3Bpbi4K Pgo+IEkndmUgbm90IHNlZW4gdGhpcyBkZXZtX3Byb2JlKCkgY29kZSBidXQgdGhlIG5hbWUgc291 bmRzIHdvcnJ5aW5nbHkgbGlrZQo+IGl0IG1pZ2h0IGJlIGZpeGluZyB0aGUgd3JvbmcgcHJvYmxl bSA6LwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomeu Vizoso Date: Tue, 14 Jul 2015 12:47:04 +0000 Subject: Re: [alsa-devel] [PATCH v2 11/12] ASoC: tegra: register dependency parser for firmware nodes Message-Id: List-Id: References: <1435743667-11987-1-git-send-email-tomeu.vizoso@collabora.com> <1435743667-11987-12-git-send-email-tomeu.vizoso@collabora.com> <20150701173802.GW11162@sirena.org.uk> <20150713154254.GH11162@sirena.org.uk> <20150714110713.GT11162@sirena.org.uk> In-Reply-To: <20150714110713.GT11162@sirena.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Mark Brown Cc: "devicetree@vger.kernel.org" , linux-fbdev@vger.kernel.org, Stephen Warren , "linux-kernel@vger.kernel.org" , linux-gpio@vger.kernel.org, "Rafael J. Wysocki" , alsa-devel@alsa-project.org, "dri-devel@lists.freedesktop.org" , Liam Girdwood , linux-acpi@vger.kernel.org, Linux PWM List , "linux-tegra@vger.kernel.org" , Alexandre Courbot On 14 July 2015 at 13:07, Mark Brown wrote: > On Tue, Jul 14, 2015 at 09:34:22AM +0200, Tomeu Vizoso wrote: >> On 13 July 2015 at 17:42, Mark Brown wrote: > >> > No, I'm looking at how we already have all the "did all my dependencies >> > appear" logic in the core based on data provided by the drivers. > >> Sorry, but I still don't get what you mean. > > I'm not sure how I can be clearer here... you're replacing something > that is currently pure data with open coding in each device. That seems > like a step back in terms of ease of use. I could understand that if snd_soc_dai_link had a field with the property name, and the core called of_parse_phandle on it, but currently what I'm duplicating is: tegra_max98090_dai.cpu_of_node = of_parse_phandle(np, "nvidia,i2s-controller", 0); with: add_dependency(fwnode, "nvidia,i2s-controller", deps); Admittedly, we could add a cpu_fw_property field to snd_soc_dai_link and have the core call of_parse_phandle itself. But even then, the core doesn't know about a device's snd_soc_dai_link until probe() is called and then it's too late for the purposes of this series. That's why I mentioned devm_probe, as it would add a common way to specify the data needed to acquire resources in each driver, which could be made available before probe() is called. >From the proof of concept that Arnd sent in https://lkml.kernel.org/g/4742258.TBitC3hVuO@wuerfel : struct foo_priv { spinlock_t lock; void __iomem *regs; int irq; struct gpio_desc *gpio; struct dma_chan *rxdma; struct dma_chan *txdma; bool oldstyle_dma; }; /* * this lists all properties we access from the driver. The list * is interpreted by devm_probe() and can be programmatically * verified to match the binding. */ static const struct devm_probe foo_probe_list[] = { DEVM_ALLOC(foo_priv), DEVM_IOMAP(foo_priv, regs, 0, 0), DEVM_PROP_BOOL(foo_priv, oldstyle_dma, "foo,oldstyle-dma"), DEVM_DMA_SLAVE(foo_priv, rxdma, "rx"); DEVM_DMA_SLAVE(foo_priv, txdma, "tx"); DEVM_GPIO(foo_priv, gpio, 0); DEVM_IRQ_NAMED(foo_priv, irq, foo_irq_handler, "fifo", IRQF_SHARED), {}, }; Thanks, Tomeu >> Information about dependencies is currently available only after >> probe() starts executing, and used to decide whether we want to defer >> the probe. > >> The goal of this series is to eliminate most or all of the deferred >> probes by checking that all dependencies are available before probe() >> is called. > > Right, but the way it does this is by moving code out of the core into > the drivers - currently drivers just tell the core what resources to > look up and the core then makes sure that they're all present. > >> I thought you were pointing out that the property names would be >> duplicated, once in the probe() implementation and also in the >> implementation of the get_dependencies callback. > > Yes, that is another part of issue with this approach - drivers now have > to specify things twice, once for this new interface and once for > actually looking things up. That doesn't seem awesome and adding the > code into the individual drivers and then having to pull it out again > when the redundancy is removed is going to be an enormous amount of > churn. > >> A way to consolidate the code and remove that duplication would be >> having a declarative API for expressing dependencies, which could be >> used for both fetching dependencies and for preventing deferred >> probes. That's why I mentioned devm_probe. > > Part of what I'm saying here is that in ASoC we already have (at least > as far as the individual drivers are concerned) a declarative way of > specifying dependencies. This new code should be able to make use of > that, if it can't and especially if none of the code can be shared > between drivers then that seems like the interface needs another spin. > > I've not seen this devm_probe() code but the name sounds worryingly like > it might be fixing the wrong problem :/