diff options
author | Takashi Iwai <tiwai@suse.de> | 2005-12-01 04:42:42 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2006-01-03 06:30:02 -0500 |
commit | e28563cceb9f258ebe3c50fc27d8f4ff0ac4bfa4 (patch) | |
tree | b69095abb998dedc2953368ba2c75978d80f644a /sound/core/init.c | |
parent | 7cd01dd840824e7c6023ad1dbfdb94a2183a7adb (diff) |
[ALSA] Optimize for config without PROC_FS
Modules: HWDEP Midlevel,ALSA Core,PCM Midlevel,Timer Midlevel
Optimize the code when compiled without CONFIG_PROC_FS.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/init.c')
-rw-r--r-- | sound/core/init.c | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/sound/core/init.c b/sound/core/init.c index 58e17d385f8d..75816688607c 100644 --- a/sound/core/init.c +++ b/sound/core/init.c | |||
@@ -46,12 +46,39 @@ DEFINE_RWLOCK(snd_card_rwlock); | |||
46 | int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int free_flag); | 46 | int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int free_flag); |
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | #ifdef CONFIG_PROC_FS | ||
49 | static void snd_card_id_read(struct snd_info_entry *entry, | 50 | static void snd_card_id_read(struct snd_info_entry *entry, |
50 | struct snd_info_buffer *buffer) | 51 | struct snd_info_buffer *buffer) |
51 | { | 52 | { |
52 | snd_iprintf(buffer, "%s\n", entry->card->id); | 53 | snd_iprintf(buffer, "%s\n", entry->card->id); |
53 | } | 54 | } |
54 | 55 | ||
56 | static inline int init_info_for_card(struct snd_card *card) | ||
57 | { | ||
58 | int err; | ||
59 | struct snd_info_entry *entry; | ||
60 | |||
61 | if ((err = snd_info_card_register(card)) < 0) { | ||
62 | snd_printd("unable to create card info\n"); | ||
63 | return err; | ||
64 | } | ||
65 | if ((entry = snd_info_create_card_entry(card, "id", card->proc_root)) == NULL) { | ||
66 | snd_printd("unable to create card entry\n"); | ||
67 | return err; | ||
68 | } | ||
69 | entry->c.text.read_size = PAGE_SIZE; | ||
70 | entry->c.text.read = snd_card_id_read; | ||
71 | if (snd_info_register(entry) < 0) { | ||
72 | snd_info_free_entry(entry); | ||
73 | entry = NULL; | ||
74 | } | ||
75 | card->proc_id = entry; | ||
76 | return 0; | ||
77 | } | ||
78 | #else /* !CONFIG_PROC_FS */ | ||
79 | #define init_info_for_card(card) | ||
80 | #endif | ||
81 | |||
55 | static void snd_card_free_thread(void * __card); | 82 | static void snd_card_free_thread(void * __card); |
56 | 83 | ||
57 | /** | 84 | /** |
@@ -273,8 +300,7 @@ int snd_card_free(struct snd_card *card) | |||
273 | } | 300 | } |
274 | if (card->private_free) | 301 | if (card->private_free) |
275 | card->private_free(card); | 302 | card->private_free(card); |
276 | if (card->proc_id) | 303 | snd_info_unregister(card->proc_id); |
277 | snd_info_unregister(card->proc_id); | ||
278 | if (snd_info_card_free(card) < 0) { | 304 | if (snd_info_card_free(card) < 0) { |
279 | snd_printk(KERN_WARNING "unable to free card info\n"); | 305 | snd_printk(KERN_WARNING "unable to free card info\n"); |
280 | /* Not fatal error */ | 306 | /* Not fatal error */ |
@@ -414,7 +440,6 @@ static void choose_default_id(struct snd_card *card) | |||
414 | int snd_card_register(struct snd_card *card) | 440 | int snd_card_register(struct snd_card *card) |
415 | { | 441 | { |
416 | int err; | 442 | int err; |
417 | struct snd_info_entry *entry; | ||
418 | 443 | ||
419 | snd_assert(card != NULL, return -EINVAL); | 444 | snd_assert(card != NULL, return -EINVAL); |
420 | if ((err = snd_device_register_all(card)) < 0) | 445 | if ((err = snd_device_register_all(card)) < 0) |
@@ -429,22 +454,7 @@ int snd_card_register(struct snd_card *card) | |||
429 | choose_default_id(card); | 454 | choose_default_id(card); |
430 | snd_cards[card->number] = card; | 455 | snd_cards[card->number] = card; |
431 | write_unlock(&snd_card_rwlock); | 456 | write_unlock(&snd_card_rwlock); |
432 | if ((err = snd_info_card_register(card)) < 0) { | 457 | init_info_for_card(card); |
433 | snd_printd("unable to create card info\n"); | ||
434 | goto __skip_info; | ||
435 | } | ||
436 | if ((entry = snd_info_create_card_entry(card, "id", card->proc_root)) == NULL) { | ||
437 | snd_printd("unable to create card entry\n"); | ||
438 | goto __skip_info; | ||
439 | } | ||
440 | entry->c.text.read_size = PAGE_SIZE; | ||
441 | entry->c.text.read = snd_card_id_read; | ||
442 | if (snd_info_register(entry) < 0) { | ||
443 | snd_info_free_entry(entry); | ||
444 | entry = NULL; | ||
445 | } | ||
446 | card->proc_id = entry; | ||
447 | __skip_info: | ||
448 | #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) | 458 | #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) |
449 | if (snd_mixer_oss_notify_callback) | 459 | if (snd_mixer_oss_notify_callback) |
450 | snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_REGISTER); | 460 | snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_REGISTER); |
@@ -452,6 +462,7 @@ int snd_card_register(struct snd_card *card) | |||
452 | return 0; | 462 | return 0; |
453 | } | 463 | } |
454 | 464 | ||
465 | #ifdef CONFIG_PROC_FS | ||
455 | static struct snd_info_entry *snd_card_info_entry = NULL; | 466 | static struct snd_info_entry *snd_card_info_entry = NULL; |
456 | 467 | ||
457 | static void snd_card_info_read(struct snd_info_entry *entry, | 468 | static void snd_card_info_read(struct snd_info_entry *entry, |
@@ -478,7 +489,7 @@ static void snd_card_info_read(struct snd_info_entry *entry, | |||
478 | snd_iprintf(buffer, "--- no soundcards ---\n"); | 489 | snd_iprintf(buffer, "--- no soundcards ---\n"); |
479 | } | 490 | } |
480 | 491 | ||
481 | #if defined(CONFIG_SND_OSSEMUL) && defined(CONFIG_PROC_FS) | 492 | #ifdef CONFIG_SND_OSSEMUL |
482 | 493 | ||
483 | void snd_card_info_read_oss(struct snd_info_buffer *buffer) | 494 | void snd_card_info_read_oss(struct snd_info_buffer *buffer) |
484 | { | 495 | { |
@@ -550,15 +561,15 @@ int __init snd_card_info_init(void) | |||
550 | 561 | ||
551 | int __exit snd_card_info_done(void) | 562 | int __exit snd_card_info_done(void) |
552 | { | 563 | { |
553 | if (snd_card_info_entry) | 564 | snd_info_unregister(snd_card_info_entry); |
554 | snd_info_unregister(snd_card_info_entry); | ||
555 | #ifdef MODULE | 565 | #ifdef MODULE |
556 | if (snd_card_module_info_entry) | 566 | snd_info_unregister(snd_card_module_info_entry); |
557 | snd_info_unregister(snd_card_module_info_entry); | ||
558 | #endif | 567 | #endif |
559 | return 0; | 568 | return 0; |
560 | } | 569 | } |
561 | 570 | ||
571 | #endif /* CONFIG_PROC_FS */ | ||
572 | |||
562 | /** | 573 | /** |
563 | * snd_component_add - add a component string | 574 | * snd_component_add - add a component string |
564 | * @card: soundcard structure | 575 | * @card: soundcard structure |