summaryrefslogtreecommitdiff
path: root/sound/core/sound_oss.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2005-11-20 14:03:48 +0100
committerJaroslav Kysela <perex@suse.cz>2006-01-03 12:29:14 +0100
commit2af677fc884fc6dc79e65c99050ea607ac8bab9b (patch)
tree4291d36c2f116d5887b88da5f0213b68933a1201 /sound/core/sound_oss.c
parenta106cd3d9e88c8761bd0eac2ce402cc82bd11fea (diff)
[ALSA] dynamic minors (1/6): store device type in struct snd_minor
Instead of a comment string, store the device type in the snd_minor structure. This makes snd_minor more flexible, and has the nice side effect that we don't need anymore to create a separate snd_minor template for registering a device but can pass the file_operations directly to snd_register_device(). Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'sound/core/sound_oss.c')
-rw-r--r--sound/core/sound_oss.c35
1 files changed, 28 insertions, 7 deletions
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c
index ec37604ffb68..4d189ffaa764 100644
--- a/sound/core/sound_oss.c
+++ b/sound/core/sound_oss.c
@@ -91,7 +91,7 @@ static int snd_oss_kernel_minor(int type, struct snd_card *card, int dev)
}
int snd_register_oss_device(int type, struct snd_card *card, int dev,
- struct snd_minor * reg, const char *name)
+ struct file_operations *f_ops, const char *name)
{
int minor = snd_oss_kernel_minor(type, card, dev);
int minor_unit;
@@ -103,12 +103,13 @@ int snd_register_oss_device(int type, struct snd_card *card, int dev,
if (minor < 0)
return minor;
- preg = (struct snd_minor *)kmalloc(sizeof(struct snd_minor), GFP_KERNEL);
+ preg = kzalloc(sizeof(struct snd_minor), GFP_KERNEL);
if (preg == NULL)
return -ENOMEM;
- *preg = *reg;
preg->number = minor;
+ preg->type = type;
preg->device = dev;
+ preg->f_ops = f_ops;
down(&sound_oss_mutex);
list_add_tail(&preg->list, &snd_oss_minors_hash[cidx]);
minor_unit = SNDRV_MINOR_OSS_DEVICE(minor);
@@ -125,11 +126,12 @@ int snd_register_oss_device(int type, struct snd_card *card, int dev,
}
if (card)
carddev = card->dev;
- register1 = register_sound_special_device(reg->f_ops, minor, carddev);
+ register1 = register_sound_special_device(f_ops, minor, carddev);
if (register1 != minor)
goto __end;
if (track2 >= 0) {
- register2 = register_sound_special_device(reg->f_ops, track2, carddev);
+ register2 = register_sound_special_device(f_ops, track2,
+ carddev);
if (register2 != track2)
goto __end;
}
@@ -190,6 +192,25 @@ int snd_unregister_oss_device(int type, struct snd_card *card, int dev)
static struct snd_info_entry *snd_minor_info_oss_entry = NULL;
+static const char *snd_oss_device_type_name(int type)
+{
+ switch (type) {
+ case SNDRV_OSS_DEVICE_TYPE_MIXER:
+ return "mixer";
+ case SNDRV_OSS_DEVICE_TYPE_SEQUENCER:
+ case SNDRV_OSS_DEVICE_TYPE_MUSIC:
+ return "sequencer";
+ case SNDRV_OSS_DEVICE_TYPE_PCM:
+ return "digital audio";
+ case SNDRV_OSS_DEVICE_TYPE_MIDI:
+ return "raw midi";
+ case SNDRV_OSS_DEVICE_TYPE_DMFM:
+ return "hardware dependent";
+ default:
+ return "?";
+ }
+}
+
static void snd_minor_info_oss_read(struct snd_info_entry *entry,
struct snd_info_buffer *buffer)
{
@@ -205,9 +226,9 @@ static void snd_minor_info_oss_read(struct snd_info_entry *entry,
if (dev != SNDRV_MINOR_OSS_SNDSTAT &&
dev != SNDRV_MINOR_OSS_SEQUENCER &&
dev != SNDRV_MINOR_OSS_MUSIC)
- snd_iprintf(buffer, "%3i: [%i-%2i]: %s\n", mptr->number, card, dev, mptr->comment);
+ snd_iprintf(buffer, "%3i: [%i-%2i]: %s\n", mptr->number, card, dev, snd_oss_device_type_name(mptr->type));
else
- snd_iprintf(buffer, "%3i: : %s\n", mptr->number, mptr->comment);
+ snd_iprintf(buffer, "%3i: : %s\n", mptr->number, snd_oss_device_type_name(mptr->type));
}
}
up(&sound_oss_mutex);