Loading include/sound/info.h +57 −49 Original line number Diff line number Diff line Loading @@ -40,8 +40,10 @@ struct snd_info_buffer { struct snd_info_entry; struct snd_info_entry_text { void (*read) (struct snd_info_entry *entry, struct snd_info_buffer *buffer); void (*write) (struct snd_info_entry *entry, struct snd_info_buffer *buffer); void (*read)(struct snd_info_entry *entry, struct snd_info_buffer *buffer); void (*write)(struct snd_info_entry *entry, struct snd_info_buffer *buffer); }; struct snd_info_entry_ops { Loading @@ -55,10 +57,12 @@ struct snd_info_entry_ops { long (*write)(struct snd_info_entry *entry, void *file_private_data, struct file *file, const char __user *buf, unsigned long count, unsigned long pos); long long (*llseek) (struct snd_info_entry *entry, void *file_private_data, struct file * file, long long offset, int orig); unsigned int (*poll) (struct snd_info_entry *entry, void *file_private_data, struct file * file, poll_table * wait); long long (*llseek)(struct snd_info_entry *entry, void *file_private_data, struct file *file, long long offset, int orig); unsigned int(*poll)(struct snd_info_entry *entry, void *file_private_data, struct file *file, poll_table *wait); int (*ioctl)(struct snd_info_entry *entry, void *file_private_data, struct file *file, unsigned int cmd, unsigned long arg); int (*mmap)(struct snd_info_entry *entry, void *file_private_data, Loading Loading @@ -106,7 +110,8 @@ void snd_card_info_read_oss(struct snd_info_buffer *buffer); static inline void snd_card_info_read_oss(struct snd_info_buffer *buffer) {} #endif int snd_iprintf(struct snd_info_buffer * buffer, char *fmt,...) __attribute__ ((format (printf, 2, 3))); int snd_iprintf(struct snd_info_buffer *buffer, char *fmt, ...) \ __attribute__ ((format (printf, 2, 3))); int snd_info_init(void); int snd_info_done(void); Loading @@ -126,10 +131,12 @@ int snd_info_card_create(struct snd_card * card); int snd_info_card_register(struct snd_card *card); int snd_info_card_free(struct snd_card *card); void snd_info_card_disconnect(struct snd_card *card); void snd_info_card_id_change(struct snd_card *card); int snd_info_register(struct snd_info_entry *entry); /* for card drivers */ int snd_card_proc_new(struct snd_card *card, const char *name, struct snd_info_entry **entryp); int snd_card_proc_new(struct snd_card *card, const char *name, struct snd_info_entry **entryp); static inline void snd_info_set_text_ops(struct snd_info_entry *entry, void *private_data, Loading Loading @@ -160,6 +167,7 @@ static inline int snd_info_card_create(struct snd_card * card) { return 0; } static inline int snd_info_card_register(struct snd_card *card) { return 0; } static inline int snd_info_card_free(struct snd_card *card) { return 0; } static inline void snd_info_card_disconnect(struct snd_card *card) { } static inline void snd_info_card_id_change(struct snd_card *card) { } static inline int snd_info_register(struct snd_info_entry *entry) { return 0; } static inline int snd_card_proc_new(struct snd_card *card, const char *name, Loading sound/core/info.c +17 −0 Original line number Diff line number Diff line Loading @@ -652,6 +652,23 @@ int snd_info_card_register(struct snd_card *card) return 0; } /* * called on card->id change */ void snd_info_card_id_change(struct snd_card *card) { mutex_lock(&info_mutex); if (card->proc_root_link) { snd_remove_proc_entry(snd_proc_root, card->proc_root_link); card->proc_root_link = NULL; } if (strcmp(card->id, card->proc_root->name)) card->proc_root_link = proc_symlink(card->id, snd_proc_root, card->proc_root->name); mutex_unlock(&info_mutex); } /* * de-register the card proc file * called from init.c Loading sound/core/init.c +70 −1 Original line number Diff line number Diff line Loading @@ -533,6 +533,65 @@ static void choose_default_id(struct snd_card *card) } } #ifndef CONFIG_SYSFS_DEPRECATED static ssize_t card_id_show_attr(struct device *dev, struct device_attribute *attr, char *buf) { struct snd_card *card = dev_get_drvdata(dev); return snprintf(buf, PAGE_SIZE, "%s\n", card ? card->id : "(null)"); } static ssize_t card_id_store_attr(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct snd_card *card = dev_get_drvdata(dev); char buf1[sizeof(card->id)]; size_t copy = count > sizeof(card->id) - 1 ? sizeof(card->id) - 1 : count; size_t idx; int c; for (idx = 0; idx < copy; idx++) { c = buf[idx]; if (!isalnum(c) && c != '_' && c != '-') return -EINVAL; } memcpy(buf1, buf, copy); buf1[copy] = '\0'; mutex_lock(&snd_card_mutex); if (!snd_info_check_reserved_words(buf1)) { __exist: mutex_unlock(&snd_card_mutex); return -EEXIST; } for (idx = 0; idx < snd_ecards_limit; idx++) { if (snd_cards[idx] && !strcmp(snd_cards[idx]->id, buf1)) goto __exist; } strcpy(card->id, buf1); snd_info_card_id_change(card); mutex_unlock(&snd_card_mutex); return count; } static struct device_attribute card_id_attrs = __ATTR(id, S_IRUGO | S_IWUSR, card_id_show_attr, card_id_store_attr); static ssize_t card_number_show_attr(struct device *dev, struct device_attribute *attr, char *buf) { struct snd_card *card = dev_get_drvdata(dev); return snprintf(buf, PAGE_SIZE, "%i\n", card ? card->number : -1); } static struct device_attribute card_number_attrs = __ATTR(number, S_IRUGO, card_number_show_attr, NULL); #endif /* CONFIG_SYSFS_DEPRECATED */ /** * snd_card_register - register the soundcard * @card: soundcard structure Loading @@ -553,7 +612,7 @@ int snd_card_register(struct snd_card *card) #ifndef CONFIG_SYSFS_DEPRECATED if (!card->card_dev) { card->card_dev = device_create(sound_class, card->dev, MKDEV(0, 0), NULL, MKDEV(0, 0), card, "card%i", card->number); if (IS_ERR(card->card_dev)) card->card_dev = NULL; Loading @@ -575,6 +634,16 @@ int snd_card_register(struct snd_card *card) #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) if (snd_mixer_oss_notify_callback) snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_REGISTER); #endif #ifndef CONFIG_SYSFS_DEPRECATED if (card->card_dev) { err = device_create_file(card->card_dev, &card_id_attrs); if (err < 0) return err; err = device_create_file(card->card_dev, &card_number_attrs); if (err < 0) return err; } #endif return 0; } Loading sound/pci/rme9652/hdsp.c +1 −1 Original line number Diff line number Diff line Loading @@ -1452,7 +1452,7 @@ static int snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int i if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0) return -1; sprintf (hdsp->midi[id].rmidi->name, "%s MIDI %d", card->id, id+1); sprintf(hdsp->midi[id].rmidi->name, "HDSP MIDI %d", id+1); hdsp->midi[id].rmidi->private_data = &hdsp->midi[id]; snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output); Loading sound/pci/rme9652/hdspm.c +1 −1 Original line number Diff line number Diff line Loading @@ -1293,7 +1293,7 @@ static int __devinit snd_hdspm_create_midi (struct snd_card *card, if (err < 0) return err; sprintf (hdspm->midi[id].rmidi->name, "%s MIDI %d", card->id, id+1); sprintf(hdspm->midi[id].rmidi->name, "HDSPM MIDI %d", id+1); hdspm->midi[id].rmidi->private_data = &hdspm->midi[id]; snd_rawmidi_set_ops(hdspm->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, Loading Loading
include/sound/info.h +57 −49 Original line number Diff line number Diff line Loading @@ -40,8 +40,10 @@ struct snd_info_buffer { struct snd_info_entry; struct snd_info_entry_text { void (*read) (struct snd_info_entry *entry, struct snd_info_buffer *buffer); void (*write) (struct snd_info_entry *entry, struct snd_info_buffer *buffer); void (*read)(struct snd_info_entry *entry, struct snd_info_buffer *buffer); void (*write)(struct snd_info_entry *entry, struct snd_info_buffer *buffer); }; struct snd_info_entry_ops { Loading @@ -55,10 +57,12 @@ struct snd_info_entry_ops { long (*write)(struct snd_info_entry *entry, void *file_private_data, struct file *file, const char __user *buf, unsigned long count, unsigned long pos); long long (*llseek) (struct snd_info_entry *entry, void *file_private_data, struct file * file, long long offset, int orig); unsigned int (*poll) (struct snd_info_entry *entry, void *file_private_data, struct file * file, poll_table * wait); long long (*llseek)(struct snd_info_entry *entry, void *file_private_data, struct file *file, long long offset, int orig); unsigned int(*poll)(struct snd_info_entry *entry, void *file_private_data, struct file *file, poll_table *wait); int (*ioctl)(struct snd_info_entry *entry, void *file_private_data, struct file *file, unsigned int cmd, unsigned long arg); int (*mmap)(struct snd_info_entry *entry, void *file_private_data, Loading Loading @@ -106,7 +110,8 @@ void snd_card_info_read_oss(struct snd_info_buffer *buffer); static inline void snd_card_info_read_oss(struct snd_info_buffer *buffer) {} #endif int snd_iprintf(struct snd_info_buffer * buffer, char *fmt,...) __attribute__ ((format (printf, 2, 3))); int snd_iprintf(struct snd_info_buffer *buffer, char *fmt, ...) \ __attribute__ ((format (printf, 2, 3))); int snd_info_init(void); int snd_info_done(void); Loading @@ -126,10 +131,12 @@ int snd_info_card_create(struct snd_card * card); int snd_info_card_register(struct snd_card *card); int snd_info_card_free(struct snd_card *card); void snd_info_card_disconnect(struct snd_card *card); void snd_info_card_id_change(struct snd_card *card); int snd_info_register(struct snd_info_entry *entry); /* for card drivers */ int snd_card_proc_new(struct snd_card *card, const char *name, struct snd_info_entry **entryp); int snd_card_proc_new(struct snd_card *card, const char *name, struct snd_info_entry **entryp); static inline void snd_info_set_text_ops(struct snd_info_entry *entry, void *private_data, Loading Loading @@ -160,6 +167,7 @@ static inline int snd_info_card_create(struct snd_card * card) { return 0; } static inline int snd_info_card_register(struct snd_card *card) { return 0; } static inline int snd_info_card_free(struct snd_card *card) { return 0; } static inline void snd_info_card_disconnect(struct snd_card *card) { } static inline void snd_info_card_id_change(struct snd_card *card) { } static inline int snd_info_register(struct snd_info_entry *entry) { return 0; } static inline int snd_card_proc_new(struct snd_card *card, const char *name, Loading
sound/core/info.c +17 −0 Original line number Diff line number Diff line Loading @@ -652,6 +652,23 @@ int snd_info_card_register(struct snd_card *card) return 0; } /* * called on card->id change */ void snd_info_card_id_change(struct snd_card *card) { mutex_lock(&info_mutex); if (card->proc_root_link) { snd_remove_proc_entry(snd_proc_root, card->proc_root_link); card->proc_root_link = NULL; } if (strcmp(card->id, card->proc_root->name)) card->proc_root_link = proc_symlink(card->id, snd_proc_root, card->proc_root->name); mutex_unlock(&info_mutex); } /* * de-register the card proc file * called from init.c Loading
sound/core/init.c +70 −1 Original line number Diff line number Diff line Loading @@ -533,6 +533,65 @@ static void choose_default_id(struct snd_card *card) } } #ifndef CONFIG_SYSFS_DEPRECATED static ssize_t card_id_show_attr(struct device *dev, struct device_attribute *attr, char *buf) { struct snd_card *card = dev_get_drvdata(dev); return snprintf(buf, PAGE_SIZE, "%s\n", card ? card->id : "(null)"); } static ssize_t card_id_store_attr(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct snd_card *card = dev_get_drvdata(dev); char buf1[sizeof(card->id)]; size_t copy = count > sizeof(card->id) - 1 ? sizeof(card->id) - 1 : count; size_t idx; int c; for (idx = 0; idx < copy; idx++) { c = buf[idx]; if (!isalnum(c) && c != '_' && c != '-') return -EINVAL; } memcpy(buf1, buf, copy); buf1[copy] = '\0'; mutex_lock(&snd_card_mutex); if (!snd_info_check_reserved_words(buf1)) { __exist: mutex_unlock(&snd_card_mutex); return -EEXIST; } for (idx = 0; idx < snd_ecards_limit; idx++) { if (snd_cards[idx] && !strcmp(snd_cards[idx]->id, buf1)) goto __exist; } strcpy(card->id, buf1); snd_info_card_id_change(card); mutex_unlock(&snd_card_mutex); return count; } static struct device_attribute card_id_attrs = __ATTR(id, S_IRUGO | S_IWUSR, card_id_show_attr, card_id_store_attr); static ssize_t card_number_show_attr(struct device *dev, struct device_attribute *attr, char *buf) { struct snd_card *card = dev_get_drvdata(dev); return snprintf(buf, PAGE_SIZE, "%i\n", card ? card->number : -1); } static struct device_attribute card_number_attrs = __ATTR(number, S_IRUGO, card_number_show_attr, NULL); #endif /* CONFIG_SYSFS_DEPRECATED */ /** * snd_card_register - register the soundcard * @card: soundcard structure Loading @@ -553,7 +612,7 @@ int snd_card_register(struct snd_card *card) #ifndef CONFIG_SYSFS_DEPRECATED if (!card->card_dev) { card->card_dev = device_create(sound_class, card->dev, MKDEV(0, 0), NULL, MKDEV(0, 0), card, "card%i", card->number); if (IS_ERR(card->card_dev)) card->card_dev = NULL; Loading @@ -575,6 +634,16 @@ int snd_card_register(struct snd_card *card) #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) if (snd_mixer_oss_notify_callback) snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_REGISTER); #endif #ifndef CONFIG_SYSFS_DEPRECATED if (card->card_dev) { err = device_create_file(card->card_dev, &card_id_attrs); if (err < 0) return err; err = device_create_file(card->card_dev, &card_number_attrs); if (err < 0) return err; } #endif return 0; } Loading
sound/pci/rme9652/hdsp.c +1 −1 Original line number Diff line number Diff line Loading @@ -1452,7 +1452,7 @@ static int snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int i if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0) return -1; sprintf (hdsp->midi[id].rmidi->name, "%s MIDI %d", card->id, id+1); sprintf(hdsp->midi[id].rmidi->name, "HDSP MIDI %d", id+1); hdsp->midi[id].rmidi->private_data = &hdsp->midi[id]; snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output); Loading
sound/pci/rme9652/hdspm.c +1 −1 Original line number Diff line number Diff line Loading @@ -1293,7 +1293,7 @@ static int __devinit snd_hdspm_create_midi (struct snd_card *card, if (err < 0) return err; sprintf (hdspm->midi[id].rmidi->name, "%s MIDI %d", card->id, id+1); sprintf(hdspm->midi[id].rmidi->name, "HDSPM MIDI %d", id+1); hdspm->midi[id].rmidi->private_data = &hdspm->midi[id]; snd_rawmidi_set_ops(hdspm->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, Loading