[alsa-devel] [PATCH] ALSA: jack: fix a randconfig build issue
Jie Yang
yang.jie at intel.com
Fri May 1 05:10:29 CEST 2015
There may be no input_dev for jack(e.g. phantom jack), when
CONFIG_INPUT is not selected, building errors such as:
undefined reference to `input_xxx'...
Here add #ifdef judgement to fix the issue.
Signed-off-by: Jie Yang <yang.jie at intel.com>
---
include/sound/jack.h | 2 ++
sound/core/jack.c | 40 ++++++++++++++++++++++++++--------------
2 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/include/sound/jack.h b/include/sound/jack.h
index 23bede1..c1010f9 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -72,7 +72,9 @@ enum snd_jack_types {
#define SND_JACK_SWITCH_TYPES 6
struct snd_jack {
+#ifdef CONFIG_INPUT
struct input_dev *input_dev;
+#endif
struct list_head kctl_list;
struct snd_card *card;
int registered;
diff --git a/sound/core/jack.c b/sound/core/jack.c
index eb66327..3a1901e 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -32,6 +32,7 @@ struct snd_jack_kctl {
unsigned int mask_bits; /* only masked status bits are reported via kctl */
};
+#ifdef CONFIG_INPUT
static int jack_switch_types[SND_JACK_SWITCH_TYPES] = {
SW_HEADPHONE_INSERT,
SW_MICROPHONE_INSERT,
@@ -40,9 +41,11 @@ static int jack_switch_types[SND_JACK_SWITCH_TYPES] = {
SW_VIDEOOUT_INSERT,
SW_LINEIN_INSERT,
};
+#endif
static int snd_jack_dev_disconnect(struct snd_device *device)
{
+#ifdef CONFIG_INPUT
struct snd_jack *jack = device->device_data;
if (!jack->input_dev)
@@ -54,7 +57,9 @@ static int snd_jack_dev_disconnect(struct snd_device *device)
input_unregister_device(jack->input_dev);
else
input_free_device(jack->input_dev);
+
jack->input_dev = NULL;
+#endif
return 0;
}
@@ -83,11 +88,12 @@ 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, i;
+ int err = 0;
snprintf(jack->name, sizeof(jack->name), "%s %s",
card->shortname, jack->id);
+#ifdef CONFIG_INPUT
if (!jack->input_dev)
return 0;
@@ -98,7 +104,7 @@ static int snd_jack_dev_register(struct snd_device *device)
jack->input_dev->dev.parent = snd_card_get_device_link(card);
/* Add capabilities for any keys that are enabled */
- for (i = 0; i < ARRAY_SIZE(jack->key); i++) {
+ for (int i = 0; i < ARRAY_SIZE(jack->key); i++) {
int testbit = SND_JACK_BTN_0 >> i;
if (!(jack->type & testbit))
@@ -113,6 +119,7 @@ static int snd_jack_dev_register(struct snd_device *device)
err = input_register_device(jack->input_dev);
if (err == 0)
jack->registered = 1;
+#endif
return err;
}
@@ -209,7 +216,6 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
struct snd_jack *jack;
struct snd_jack_kctl *jack_kctl = NULL;
int err;
- int i;
static struct snd_device_ops ops = {
.dev_free = snd_jack_dev_free,
.dev_register = snd_jack_dev_register,
@@ -230,26 +236,31 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
/* don't creat input device for phantom jack */
if (!phantom_jack) {
+#ifdef CONFIG_INPUT
jack->input_dev = input_allocate_device();
if (jack->input_dev == NULL) {
err = -ENOMEM;
- goto fail_input;
+ goto error;
}
jack->input_dev->phys = "ALSA";
- jack->type = type;
-
- for (i = 0; i < SND_JACK_SWITCH_TYPES; i++)
+ for (int i = 0; i < SND_JACK_SWITCH_TYPES; i++)
if (type & (1 << i))
input_set_capability(jack->input_dev, EV_SW,
jack_switch_types[i]);
+#endif
+ jack->type = type;
}
err = snd_device_new(card, SNDRV_DEV_JACK, jack, &ops);
- if (err < 0)
- goto fail_input;
+ if (err < 0) {
+#ifdef CONFIG_INPUT
+ input_free_device(jack->input_dev);
+#endif
+ goto error;
+ }
jack->card = card;
INIT_LIST_HEAD(&jack->kctl_list);
@@ -261,8 +272,7 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
return 0;
-fail_input:
- input_free_device(jack->input_dev);
+error:
kfree(jack->id);
kfree(jack);
return err;
@@ -281,11 +291,13 @@ EXPORT_SYMBOL(snd_jack_new);
*/
void snd_jack_set_parent(struct snd_jack *jack, struct device *parent)
{
+#ifdef CONFIG_INPUT
WARN_ON(jack->registered);
if (!jack->input_dev)
return;
jack->input_dev->dev.parent = parent;
+#endif
}
EXPORT_SYMBOL(snd_jack_set_parent);
@@ -340,7 +352,6 @@ EXPORT_SYMBOL(snd_jack_set_key);
void snd_jack_report(struct snd_jack *jack, int status)
{
struct snd_jack_kctl *jack_kctl;
- int i;
if (!jack)
return;
@@ -349,10 +360,11 @@ void snd_jack_report(struct snd_jack *jack, int status)
snd_kctl_jack_report(jack->card, jack_kctl->kctl,
status & jack_kctl->mask_bits);
+#ifdef CONFIG_INPUT
if (!jack->input_dev)
return;
- for (i = 0; i < ARRAY_SIZE(jack->key); i++) {
+ for (int i = 0; i < ARRAY_SIZE(jack->key); i++) {
int testbit = SND_JACK_BTN_0 >> i;
if (jack->type & testbit)
@@ -369,7 +381,7 @@ void snd_jack_report(struct snd_jack *jack, int status)
}
input_sync(jack->input_dev);
-
+#endif
}
EXPORT_SYMBOL(snd_jack_report);
--
1.9.1
More information about the Alsa-devel
mailing list