Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ctljack.c
Go to the documentation of this file.
1 /*
2  * Helper functions for jack-detection kcontrols
3  *
4  * Copyright (c) 2011 Takashi Iwai <[email protected]>
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the Free
8  * Software Foundation; either version 2 of the License, or (at your option)
9  * any later version.
10  */
11 
12 #include <linux/kernel.h>
13 #include <linux/export.h>
14 #include <sound/core.h>
15 #include <sound/control.h>
16 
17 #define jack_detect_kctl_info snd_ctl_boolean_mono_info
18 
19 static int jack_detect_kctl_get(struct snd_kcontrol *kcontrol,
20  struct snd_ctl_elem_value *ucontrol)
21 {
22  ucontrol->value.integer.value[0] = kcontrol->private_value;
23  return 0;
24 }
25 
26 static struct snd_kcontrol_new jack_detect_kctl = {
27  /* name is filled later */
30  .info = jack_detect_kctl_info,
31  .get = jack_detect_kctl_get,
32 };
33 
34 struct snd_kcontrol *
35 snd_kctl_jack_new(const char *name, int idx, void *private_data)
36 {
37  struct snd_kcontrol *kctl;
38  kctl = snd_ctl_new1(&jack_detect_kctl, private_data);
39  if (!kctl)
40  return NULL;
41  snprintf(kctl->id.name, sizeof(kctl->id.name), "%s Jack", name);
42  kctl->id.index = idx;
43  kctl->private_value = 0;
44  return kctl;
45 }
47 
49  struct snd_kcontrol *kctl, bool status)
50 {
51  if (kctl->private_value == status)
52  return;
53  kctl->private_value = status;
55 }