sound: make all 'class' structures const
Now that the driver core allows for struct class to be in read-only memory, making all 'class' structures to be declared at build time placing them into read-only memory, instead of having to be dynamically allocated at load time. Cc: Jaroslav Kysela <perex@perex.cz> Cc: Takashi Iwai <tiwai@suse.com> Cc: Ivan Orlov <ivan.orlov0322@gmail.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Geoff Levand <geoff@infradead.org> Cc: Thierry Reding <treding@nvidia.com> Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> Cc: alsa-devel@alsa-project.org Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://lore.kernel.org/r/20230620175633.641141-2-gregkh@linuxfoundation.org Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7ea9ee0064
commit
8d0cf150d2
|
@ -232,7 +232,7 @@ static inline struct device *snd_card_get_device_link(struct snd_card *card)
|
||||||
|
|
||||||
extern int snd_major;
|
extern int snd_major;
|
||||||
extern int snd_ecards_limit;
|
extern int snd_ecards_limit;
|
||||||
extern struct class *sound_class;
|
extern const struct class sound_class;
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_DEBUG
|
||||||
extern struct dentry *sound_debugfs_root;
|
extern struct dentry *sound_debugfs_root;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -737,7 +737,7 @@ static int __init snd_ctl_led_init(void)
|
||||||
unsigned int group;
|
unsigned int group;
|
||||||
|
|
||||||
device_initialize(&snd_ctl_led_dev);
|
device_initialize(&snd_ctl_led_dev);
|
||||||
snd_ctl_led_dev.class = sound_class;
|
snd_ctl_led_dev.class = &sound_class;
|
||||||
snd_ctl_led_dev.release = snd_ctl_led_dev_release;
|
snd_ctl_led_dev.release = snd_ctl_led_dev_release;
|
||||||
dev_set_name(&snd_ctl_led_dev, "ctl-led");
|
dev_set_name(&snd_ctl_led_dev, "ctl-led");
|
||||||
if (device_add(&snd_ctl_led_dev)) {
|
if (device_add(&snd_ctl_led_dev)) {
|
||||||
|
|
|
@ -129,7 +129,7 @@ void snd_device_initialize(struct device *dev, struct snd_card *card)
|
||||||
device_initialize(dev);
|
device_initialize(dev);
|
||||||
if (card)
|
if (card)
|
||||||
dev->parent = &card->card_dev;
|
dev->parent = &card->card_dev;
|
||||||
dev->class = sound_class;
|
dev->class = &sound_class;
|
||||||
dev->release = default_release;
|
dev->release = default_release;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_device_initialize);
|
EXPORT_SYMBOL_GPL(snd_device_initialize);
|
||||||
|
@ -331,7 +331,7 @@ static int snd_card_init(struct snd_card *card, struct device *parent,
|
||||||
|
|
||||||
device_initialize(&card->card_dev);
|
device_initialize(&card->card_dev);
|
||||||
card->card_dev.parent = parent;
|
card->card_dev.parent = parent;
|
||||||
card->card_dev.class = sound_class;
|
card->card_dev.class = &sound_class;
|
||||||
card->card_dev.release = release_card_device;
|
card->card_dev.release = release_card_device;
|
||||||
card->card_dev.groups = card->dev_groups;
|
card->card_dev.groups = card->dev_groups;
|
||||||
card->dev_groups[0] = &card_dev_attr_group;
|
card->dev_groups[0] = &card_dev_attr_group;
|
||||||
|
|
|
@ -23,9 +23,6 @@ static inline int init_oss_soundcore(void) { return 0; }
|
||||||
static inline void cleanup_oss_soundcore(void) { }
|
static inline void cleanup_oss_soundcore(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct class *sound_class;
|
|
||||||
EXPORT_SYMBOL(sound_class);
|
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Core sound module");
|
MODULE_DESCRIPTION("Core sound module");
|
||||||
MODULE_AUTHOR("Alan Cox");
|
MODULE_AUTHOR("Alan Cox");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
@ -37,6 +34,12 @@ static char *sound_devnode(const struct device *dev, umode_t *mode)
|
||||||
return kasprintf(GFP_KERNEL, "snd/%s", dev_name(dev));
|
return kasprintf(GFP_KERNEL, "snd/%s", dev_name(dev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct class sound_class = {
|
||||||
|
.name = "sound",
|
||||||
|
.devnode = sound_devnode,
|
||||||
|
};
|
||||||
|
EXPORT_SYMBOL(sound_class);
|
||||||
|
|
||||||
static int __init init_soundcore(void)
|
static int __init init_soundcore(void)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -45,21 +48,19 @@ static int __init init_soundcore(void)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
sound_class = class_create("sound");
|
rc = class_register(&sound_class);
|
||||||
if (IS_ERR(sound_class)) {
|
if (rc) {
|
||||||
cleanup_oss_soundcore();
|
cleanup_oss_soundcore();
|
||||||
return PTR_ERR(sound_class);
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
sound_class->devnode = sound_devnode;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit cleanup_soundcore(void)
|
static void __exit cleanup_soundcore(void)
|
||||||
{
|
{
|
||||||
cleanup_oss_soundcore();
|
cleanup_oss_soundcore();
|
||||||
class_destroy(sound_class);
|
class_unregister(&sound_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
subsys_initcall(init_soundcore);
|
subsys_initcall(init_soundcore);
|
||||||
|
@ -276,7 +277,7 @@ retry:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
device_create(sound_class, dev, MKDEV(SOUND_MAJOR, s->unit_minor),
|
device_create(&sound_class, dev, MKDEV(SOUND_MAJOR, s->unit_minor),
|
||||||
NULL, "%s", s->name+6);
|
NULL, "%s", s->name+6);
|
||||||
return s->unit_minor;
|
return s->unit_minor;
|
||||||
|
|
||||||
|
@ -302,7 +303,7 @@ static void sound_remove_unit(struct sound_unit **list, int unit)
|
||||||
if (!preclaim_oss)
|
if (!preclaim_oss)
|
||||||
__unregister_chrdev(SOUND_MAJOR, p->unit_minor, 1,
|
__unregister_chrdev(SOUND_MAJOR, p->unit_minor, 1,
|
||||||
p->name);
|
p->name);
|
||||||
device_destroy(sound_class, MKDEV(SOUND_MAJOR, p->unit_minor));
|
device_destroy(&sound_class, MKDEV(SOUND_MAJOR, p->unit_minor));
|
||||||
kfree(p);
|
kfree(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue