[alsa-devel] [PATCH v4] ASoC: rt5645: Check if codec is initialized in workqueue handler

Nicolas Boichat drinkcat at chromium.org
Fri Jul 17 04:36:57 CEST 2015


This fixes kernel panic on boot, if rt5645->codec is NULL when
rt5645_jack_detect_work is first called.

rt5645_jack_detect_work needs rt5645->codec to be initialized to setup
dapm pins. Also, reporting jack events is useless, as the jacks cannot
be set before the codec is ready.

Since we manually call the interrupt handler in
rt5645_set_jack_detect, the initial jack state will be reported
correctly, and dapm pins will be setup at that time.

Signed-off-by: Nicolas Boichat <drinkcat at chromium.org>
---
This replaces 3c2234569cfff83718792f810a9bb855b78c2473, and applies on top of
Linux 4.2-rc1, so that this patch can be applied in its own branch, without
triggering a compile warning.

Also, reworded the message to make it more obvious this can cause a kernel
panic.

Thanks!

 sound/soc/codecs/rt5645.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 9ce311e..e9cc3aa 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -2943,6 +2943,9 @@ static int rt5645_irq_detection(struct rt5645_priv *rt5645)
 {
 	int val, btn_type, gpio_state = 0, report = 0;
 
+	if (!rt5645->codec)
+		return -EINVAL;
+
 	switch (rt5645->pdata.jd_mode) {
 	case 0: /* Not using rt5645 JD */
 		if (rt5645->gpiod_hp_det) {
-- 
2.4.3.573.g4eafbef



More information about the Alsa-devel mailing list