Skip to content

Commit

Permalink
ALSA: Add support for mechanical jack insertion
Browse files Browse the repository at this point in the history
Some systems support both mechanical and electrical jack detection,
allowing them to report that a jack is physically present but does
not have any functioning connections. Add a new jack type for these,
allowing user space to report faulty connections.

Thanks to Guillem Jover for the suggestion.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
broonie authored and tiwai committed Dec 10, 2008
1 parent a53ccab commit cdc6936
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/linux/input.h
Original file line number Diff line number Diff line change
Expand Up @@ -645,6 +645,7 @@ struct input_absinfo {
#define SW_MICROPHONE_INSERT 0x04 /* set = inserted */
#define SW_DOCK 0x05 /* set = plugged into dock */
#define SW_LINEOUT_INSERT 0x06 /* set = inserted */
#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */
#define SW_MAX 0x0f
#define SW_CNT (SW_MAX+1)

Expand Down
1 change: 1 addition & 0 deletions include/sound/jack.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ enum snd_jack_types {
SND_JACK_MICROPHONE = 0x0002,
SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE,
SND_JACK_LINEOUT = 0x0004,
SND_JACK_MECHANICAL = 0x0008, /* If detected separately */
};

struct snd_jack {
Expand Down
6 changes: 6 additions & 0 deletions sound/core/jack.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
if (type & SND_JACK_MICROPHONE)
input_set_capability(jack->input_dev, EV_SW,
SW_MICROPHONE_INSERT);
if (type & SND_JACK_MECHANICAL)
input_set_capability(jack->input_dev, EV_SW,
SW_JACK_PHYSICAL_INSERT);

err = snd_device_new(card, SNDRV_DEV_JACK, jack, &ops);
if (err < 0)
Expand Down Expand Up @@ -159,6 +162,9 @@ void snd_jack_report(struct snd_jack *jack, int status)
if (jack->type & SND_JACK_MICROPHONE)
input_report_switch(jack->input_dev, SW_MICROPHONE_INSERT,
status & SND_JACK_MICROPHONE);
if (jack->type & SND_JACK_MECHANICAL)
input_report_switch(jack->input_dev, SW_JACK_PHYSICAL_INSERT,
status & SND_JACK_MECHANICAL);

input_sync(jack->input_dev);
}
Expand Down

0 comments on commit cdc6936

Please sign in to comment.