mbox series

[0/3] ASoC: core: Two step component registration

Message ID 20200731144146.6678-1-cezary.rojewski@intel.com (mailing list archive)
Headers show
Series ASoC: core: Two step component registration | expand

Message

Cezary Rojewski July 31, 2020, 2:41 p.m. UTC
Provide a mechanism for true two-step component registration. This
mimics device registration flow where initialization is the first step
while addition goes as second in line. Drivers may choose to modify
component's fields before registering component to ASoC subsystem via
snd_soc_add_component.

Patchset achieves status quo - behavior of snd_soc_register_component
remains unchanged.

Cezary Rojewski (3):
  ASoC: core: Relocate and expose snd_soc_component_initialize
  ASoC: core: Simplify snd_soc_component_initialize declaration
  ASoC: core: Two step component registration

 include/sound/soc-component.h         |  3 --
 include/sound/soc.h                   | 11 +++---
 sound/soc/soc-component.c             | 16 ---------
 sound/soc/soc-core.c                  | 52 +++++++++++++++++----------
 sound/soc/soc-generic-dmaengine-pcm.c | 14 +++++---
 sound/soc/stm/stm32_adfsdm.c          |  9 +++--
 6 files changed, 55 insertions(+), 50 deletions(-)

Comments

Pierre-Louis Bossart July 31, 2020, 3:07 p.m. UTC | #1
On 7/31/20 9:41 AM, Cezary Rojewski wrote:
> Provide a mechanism for true two-step component registration. This
> mimics device registration flow where initialization is the first step
> while addition goes as second in line. Drivers may choose to modify
> component's fields before registering component to ASoC subsystem via
> snd_soc_add_component.

I must admit I don't see where this might be used for Intel platforms, 
we've been happily using snd_soc_register_component() without hitting 
limitations.

Also the only two uses of snd_soc_add_component() seem mainly driven by 
memory allocation - and avoiding a devm_kzalloc in 
snd_soc_register_component().

Out of curiosity, can you provide an example where this two-step would 
be required or beneficial? Thanks!

> Patchset achieves status quo - behavior of snd_soc_register_component
> remains unchanged.
> 
> Cezary Rojewski (3):
>    ASoC: core: Relocate and expose snd_soc_component_initialize
>    ASoC: core: Simplify snd_soc_component_initialize declaration
>    ASoC: core: Two step component registration
> 
>   include/sound/soc-component.h         |  3 --
>   include/sound/soc.h                   | 11 +++---
>   sound/soc/soc-component.c             | 16 ---------
>   sound/soc/soc-core.c                  | 52 +++++++++++++++++----------
>   sound/soc/soc-generic-dmaengine-pcm.c | 14 +++++---
>   sound/soc/stm/stm32_adfsdm.c          |  9 +++--
>   6 files changed, 55 insertions(+), 50 deletions(-)
>
Cezary Rojewski July 31, 2020, 3:47 p.m. UTC | #2
On 2020-07-31 5:07 PM, Pierre-Louis Bossart wrote:
> On 7/31/20 9:41 AM, Cezary Rojewski wrote:
>> Provide a mechanism for true two-step component registration. This
>> mimics device registration flow where initialization is the first step
>> while addition goes as second in line. Drivers may choose to modify
>> component's fields before registering component to ASoC subsystem via
>> snd_soc_add_component.
> 
> I must admit I don't see where this might be used for Intel platforms, 
> we've been happily using snd_soc_register_component() without hitting 
> limitations.

Patchset targets entire ASoC framework, not Intel catalog. As 
_initialize and _add are already in place, having a two-step 
registration is cohesive with other "frameworks" e.g. device one.

New to ASoC? Trying to learn soc-components? Guess what, 
creation/registration procedure is exactly the same as one you're used 
to already!

> Also the only two uses of snd_soc_add_component() seem mainly driven by 
> memory allocation - and avoiding a devm_kzalloc in 
> snd_soc_register_component().

In general, code quality and improvements to its flow should not require 
ton of usages. But hey, you got two already.

> Out of curiosity, can you provide an example where this two-step would 
> be required or beneficial? Thanks!

Overridding component->name which is currently always tied to 
fmt_single_name so you may choose a different name than the ->dev one.
Lars-Peter Clausen July 31, 2020, 3:58 p.m. UTC | #3
On 7/31/20 5:47 PM, Cezary Rojewski wrote:
> On 2020-07-31 5:07 PM, Pierre-Louis Bossart wrote:
>> On 7/31/20 9:41 AM, Cezary Rojewski wrote:
>>> Provide a mechanism for true two-step component registration. This
>>> mimics device registration flow where initialization is the first step
>>> while addition goes as second in line. Drivers may choose to modify
>>> component's fields before registering component to ASoC subsystem via
>>> snd_soc_add_component.
>>
>> I must admit I don't see where this might be used for Intel 
>> platforms, we've been happily using snd_soc_register_component() 
>> without hitting limitations.
>
> Patchset targets entire ASoC framework, not Intel catalog. As 
> _initialize and _add are already in place, having a two-step 
> registration is cohesive with other "frameworks" e.g. device one.
>
> New to ASoC? Trying to learn soc-components? Guess what, 
> creation/registration procedure is exactly the same as one you're used 
> to already!
>
>> Also the only two uses of snd_soc_add_component() seem mainly driven 
>> by memory allocation - and avoiding a devm_kzalloc in 
>> snd_soc_register_component().
>
> In general, code quality and improvements to its flow should not 
> require ton of usages. But hey, you got two already.
>
>> Out of curiosity, can you provide an example where this two-step 
>> would be required or beneficial? Thanks!
>
> Overridding component->name which is currently always tied to 
> fmt_single_name so you may choose a different name than the ->dev one.

For what it is worth, I think this is a sensible change for the outlined 
reasons. It's something I've always had in the back of my mind, but 
there was never enough of a need to actually do it.

One change I'd like to see is the addition of snd_soc_component_alloc(), 
which combines the step of kzalloc() and snd_soc_component_init() as 
these will be done pretty much always in lockstep. And it also matches 
the APIs that other frameworks offer.

- Lars
Cezary Rojewski July 31, 2020, 4:09 p.m. UTC | #4
On 2020-07-31 5:58 PM, Lars-Peter Clausen wrote:
> On 7/31/20 5:47 PM, Cezary Rojewski wrote:
>> On 2020-07-31 5:07 PM, Pierre-Louis Bossart wrote:
>>> On 7/31/20 9:41 AM, Cezary Rojewski wrote:
>>>> Provide a mechanism for true two-step component registration. This
>>>> mimics device registration flow where initialization is the first step
>>>> while addition goes as second in line. Drivers may choose to modify
>>>> component's fields before registering component to ASoC subsystem via
>>>> snd_soc_add_component.
>>>
>>> I must admit I don't see where this might be used for Intel 
>>> platforms, we've been happily using snd_soc_register_component() 
>>> without hitting limitations.
>>
>> Patchset targets entire ASoC framework, not Intel catalog. As 
>> _initialize and _add are already in place, having a two-step 
>> registration is cohesive with other "frameworks" e.g. device one.
>>
>> New to ASoC? Trying to learn soc-components? Guess what, 
>> creation/registration procedure is exactly the same as one you're used 
>> to already!
>>
>>> Also the only two uses of snd_soc_add_component() seem mainly driven 
>>> by memory allocation - and avoiding a devm_kzalloc in 
>>> snd_soc_register_component().
>>
>> In general, code quality and improvements to its flow should not 
>> require ton of usages. But hey, you got two already.
>>
>>> Out of curiosity, can you provide an example where this two-step 
>>> would be required or beneficial? Thanks!
>>
>> Overridding component->name which is currently always tied to 
>> fmt_single_name so you may choose a different name than the ->dev one.
> 
> For what it is worth, I think this is a sensible change for the outlined 
> reasons. It's something I've always had in the back of my mind, but 
> there was never enough of a need to actually do it.
> 
> One change I'd like to see is the addition of snd_soc_component_alloc(), 
> which combines the step of kzalloc() and snd_soc_component_init() as 
> these will be done pretty much always in lockstep. And it also matches 
> the APIs that other frameworks offer.
> 
> - Lars
> 

Nice, so it's not just me imagining things : D

In general granular registration is robust and scales well into the 
future. Components functionality will only grow in time so I bet 
usecases don't end on my example.

I'd suggest transition to _alloc/_init/other being separated from this 
patchset - let it serve as a middle step.

Czarek
Mark Brown July 31, 2020, 4:42 p.m. UTC | #5
On Fri, Jul 31, 2020 at 05:58:00PM +0200, Lars-Peter Clausen wrote:
> On 7/31/20 5:47 PM, Cezary Rojewski wrote:

> > Patchset targets entire ASoC framework, not Intel catalog. As
> > _initialize and _add are already in place, having a two-step
> > registration is cohesive with other "frameworks" e.g. device one.

> For what it is worth, I think this is a sensible change for the outlined
> reasons. It's something I've always had in the back of my mind, but there
> was never enough of a need to actually do it.

Yeah, it's a common pattern in the kernel and someone might want it so
there's no great reason not to do it.

> One change I'd like to see is the addition of snd_soc_component_alloc(),
> which combines the step of kzalloc() and snd_soc_component_init() as these
> will be done pretty much always in lockstep. And it also matches the APIs
> that other frameworks offer.

That'd be good.
Mark Brown July 31, 2020, 6:54 p.m. UTC | #6
On Fri, 31 Jul 2020 16:41:43 +0200, Cezary Rojewski wrote:
> Provide a mechanism for true two-step component registration. This
> mimics device registration flow where initialization is the first step
> while addition goes as second in line. Drivers may choose to modify
> component's fields before registering component to ASoC subsystem via
> snd_soc_add_component.
> 
> Patchset achieves status quo - behavior of snd_soc_register_component
> remains unchanged.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/3] ASoC: core: Relocate and expose snd_soc_component_initialize
      commit: 08ff7209faf21daa01bf66c91c321ce52d4b4bdb
[2/3] ASoC: core: Simplify snd_soc_component_initialize declaration
      commit: 7274d4cd8506bbff9bf2d7c2f73b2febff99abef
[3/3] ASoC: core: Two step component registration
      commit: ea029dd8d0124fcd5db1c7003e87a7bd4ddb3bad

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark