On Wed, 13 Sep 2023 22:07:42 +0200, cujomalainey@xxxxxxxxxxxx wrote: > > From: Curtis Malainey <cujomalainey@xxxxxxxxxxxx> > > Begin allowing refactored modules to allocate their own device but use a > common initialization procedure for their devices. > > Signed-off-by: Curtis Malainey <cujomalainey@xxxxxxxxxxxx> > --- > include/sound/core.h | 1 + > sound/core/init.c | 19 ++++++++++++++++--- > 2 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/include/sound/core.h b/include/sound/core.h > index dfef0c9d4b9f7..a4744e142c7e3 100644 > --- a/include/sound/core.h > +++ b/include/sound/core.h > @@ -240,6 +240,7 @@ extern struct dentry *sound_debugfs_root; > void snd_request_card(int card); > > int snd_device_alloc(struct device **dev_p, struct snd_card *card); > +void snd_device_init(struct device *dev, struct snd_card *card); > > int snd_register_device(int type, struct snd_card *card, int dev, > const struct file_operations *f_ops, > diff --git a/sound/core/init.c b/sound/core/init.c > index 22c0d217b8608..87b5368d20350 100644 > --- a/sound/core/init.c > +++ b/sound/core/init.c > @@ -132,15 +132,28 @@ int snd_device_alloc(struct device **dev_p, struct snd_card *card) > dev = kzalloc(sizeof(*dev), GFP_KERNEL); > if (!dev) > return -ENOMEM; > + snd_device_init(dev, card); > + *dev_p = dev; > + return 0; > +} > +EXPORT_SYMBOL_GPL(snd_device_alloc); > + > +/** > + * snd_device_init - Initialize struct device for sound devices > + * @dev_p: pointer to store the allocated device > + * @card: card to assign, optional > + * > + * For releasing the allocated device, call put_device(). > + */ > +void snd_device_init(struct device *dev, struct snd_card *card) > +{ > device_initialize(dev); > if (card) > dev->parent = &card->card_dev; > dev->class = &sound_class; > dev->release = default_release_alloc; I'd rather leave release unset here and mention in the function description to set release in each caller side. default_release_alloc() calls kfree(), and certainly it doesn't match with this call. thanks, Takashi