At Thu, 29 May 2008 22:09:04 +0100, Mark Brown wrote: > > Currently very few systems provide information about jack status to user > space, even though many have hardware facilities to do detection. Those > systems that do use an input device with the existing SW_HEADPHONE_INSERT > switch type to do so, often independently of ALSA. > > This patch introduces a standard method for representing jacks to user > space into ALSA. It allows drivers to register jacks for a sound card with > the input subsystem, binding the input device to the card to help user > space associate the input devices with their sound cards. The created > input devices are named in the form "card longname jack" where jack is > provided by the driver when allocating a jack. > > The existing user space API with SW_HEADPHONE_INSERT is preserved. The implementation looks good, simple enough. > diff --git a/sound/core/Kconfig b/sound/core/Kconfig > index 829ca38..4e8e52d 100644 > --- a/sound/core/Kconfig > +++ b/sound/core/Kconfig > @@ -16,6 +16,11 @@ config SND_RAWMIDI > tristate > depends on SND > > +config SND_JACK > + tristate > + depends on SND > + depends on INPUT If you suppose to "select" SND_JACK, depends have no meaning. > diff --git a/sound/core/Makefile b/sound/core/Makefile > index 5a01c76..e1cb6d6 100644 > --- a/sound/core/Makefile > +++ b/sound/core/Makefile > @@ -20,9 +20,11 @@ snd-rawmidi-objs := rawmidi.o > snd-timer-objs := timer.o > snd-rtctimer-objs := rtctimer.o > snd-hwdep-objs := hwdep.o > +snd-jack-objs := jack.o > > obj-$(CONFIG_SND) += snd.o > obj-$(CONFIG_SND_HWDEP) += snd-hwdep.o > +obj-$(CONFIG_SND_JACK) += snd-jack.o The code is small, and I don't see a big merit to make it a module. > +static int snd_jack_dev_register(struct snd_device *device) > +{ > + struct snd_jack *jack = device->device_data; > + struct snd_card *card = device->card; > + int err; > + > + snprintf(jack->name, sizeof(jack->name), "%s %s", > + card->longname, jack->id); The longname field could be sometimes really too long and verbose. I guess shortname would match better. > +int snd_jack_new(struct snd_card *card, const char *id, int type, > + struct snd_jack **jjack) (snip) > + jack->input_dev->phys = "ALSA"; > + jack->input_dev->dev.parent = card->dev; The card->dev pointer might not be initialized always at this stage. You should check rather at register. Also, someone may want to pass a different device pointer for this. Passing struct device * to snd_jack_new would be an alternative. thanks, Takashi -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html