Thread (13 messages) 13 messages, 3 authors, 2008-07-01

Re: [PATCH/RFC 1/2] Add jack reporting API for ALSA

From: Takashi Iwai <hidden>
Date: 2008-05-30 08:15:46
Also in: alsa-devel

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.
quoted hunk ↗ jump to hunk
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.
quoted hunk ↗ jump to hunk
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help