| 1 |
|
| 2 | #ifndef __SOUND_JACK_H
|
| 3 | #define __SOUND_JACK_H
|
| 4 |
|
| 5 | |
| 6 | * Jack abstraction layer
|
| 7 | *
|
| 8 | * Copyright 2008 Wolfson Microelectronics plc
|
| 9 |
|
| 10 |
|
| 11 | #include <sound/core.h>
|
| 12 |
|
| 13 | struct input_dev;
|
| 14 |
|
| 15 | |
| 16 | * enum snd_jack_types - Jack types which can be reported
|
| 17 | * @SND_JACK_HEADPHONE: Headphone
|
| 18 | * @SND_JACK_MICROPHONE: Microphone
|
| 19 | * @SND_JACK_HEADSET: Headset
|
| 20 | * @SND_JACK_LINEOUT: Line out
|
| 21 | * @SND_JACK_MECHANICAL: Mechanical switch
|
| 22 | * @SND_JACK_VIDEOOUT: Video out
|
| 23 | * @SND_JACK_AVOUT: AV (Audio Video) out
|
| 24 | * @SND_JACK_LINEIN: Line in
|
| 25 | * @SND_JACK_USB: USB audio device
|
| 26 | * @SND_JACK_BTN_0: Button 0
|
| 27 | * @SND_JACK_BTN_1: Button 1
|
| 28 | * @SND_JACK_BTN_2: Button 2
|
| 29 | * @SND_JACK_BTN_3: Button 3
|
| 30 | * @SND_JACK_BTN_4: Button 4
|
| 31 | * @SND_JACK_BTN_5: Button 5
|
| 32 | *
|
| 33 | * These values are used as a bitmask.
|
| 34 | *
|
| 35 | * Note that this must be kept in sync with the lookup table in
|
| 36 | * sound/core/jack.c.
|
| 37 |
|
| 38 | enum snd_jack_types {
|
| 39 | SND_JACK_HEADPHONE = 0x0001,
|
| 40 | SND_JACK_MICROPHONE = 0x0002,
|
| 41 | SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE,
|
| 42 | SND_JACK_LINEOUT = 0x0004,
|
| 43 | SND_JACK_MECHANICAL = 0x0008,
|
| 44 | SND_JACK_VIDEOOUT = 0x0010,
|
| 45 | SND_JACK_AVOUT = SND_JACK_LINEOUT | SND_JACK_VIDEOOUT,
|
| 46 | SND_JACK_LINEIN = 0x0020,
|
| 47 | SND_JACK_USB = 0x0040,
|
| 48 |
|
| 49 |
|
| 50 | SND_JACK_BTN_0 = 0x4000,
|
| 51 | SND_JACK_BTN_1 = 0x2000,
|
| 52 | SND_JACK_BTN_2 = 0x1000,
|
| 53 | SND_JACK_BTN_3 = 0x0800,
|
| 54 | SND_JACK_BTN_4 = 0x0400,
|
| 55 | SND_JACK_BTN_5 = 0x0200,
|
| 56 | };
|
| 57 |
|
| 58 |
|
| 59 | #define SND_JACK_SWITCH_TYPES 7
|
| 60 |
|
| 61 | struct snd_jack {
|
| 62 | struct list_head kctl_list;
|
| 63 | struct snd_card *card;
|
| 64 | const char *id;
|
| 65 | #ifdef CONFIG_SND_JACK_INPUT_DEV
|
| 66 | struct input_dev *input_dev;
|
| 67 | struct mutex input_dev_lock;
|
| 68 | int registered;
|
| 69 | int type;
|
| 70 | char name[100];
|
| 71 | unsigned int key[6];
|
| 72 | #endif
|
| 73 | int hw_status_cache;
|
| 74 | void *private_data;
|
| 75 | void (*private_free)(struct snd_jack *);
|
| 76 | };
|
| 77 |
|
| 78 | #ifdef CONFIG_SND_JACK
|
| 79 |
|
| 80 | int snd_jack_new(struct snd_card *card, const char *id, int type,
|
| 81 | struct snd_jack **jack, bool initial_kctl, bool phantom_jack);
|
| 82 | int snd_jack_add_new_kctl(struct snd_jack *jack, const char * name, int mask);
|
| 83 | #ifdef CONFIG_SND_JACK_INPUT_DEV
|
| 84 | int snd_jack_set_key(struct snd_jack *jack, enum snd_jack_types type,
|
| 85 | int keytype);
|
| 86 | #endif
|
| 87 | void snd_jack_report(struct snd_jack *jack, int status);
|
| 88 |
|
| 89 | #else
|
| 90 | static inline int snd_jack_new(struct snd_card *card, const char *id, int type,
|
| 91 | struct snd_jack **jack, bool initial_kctl, bool phantom_jack)
|
| 92 | {
|
| 93 | return 0;
|
| 94 | }
|
| 95 |
|
| 96 | static inline int snd_jack_add_new_kctl(struct snd_jack *jack, const char * name, int mask)
|
| 97 | {
|
| 98 | return 0;
|
| 99 | }
|
| 100 |
|
| 101 | static inline void snd_jack_report(struct snd_jack *jack, int status)
|
| 102 | {
|
| 103 | }
|
| 104 |
|
| 105 | #endif
|
| 106 |
|
| 107 | #if !defined(CONFIG_SND_JACK) || !defined(CONFIG_SND_JACK_INPUT_DEV)
|
| 108 | static inline int snd_jack_set_key(struct snd_jack *jack,
|
| 109 | enum snd_jack_types type,
|
| 110 | int keytype)
|
| 111 | {
|
| 112 | return 0;
|
| 113 | }
|
| 114 | #endif
|
| 115 |
|
| 116 | #endif
|