From bc55eb17b46668e70dfbd1a091159935d8f95eb9 Mon Sep 17 00:00:00 2001 From: Joerg Schambacher Date: Fri, 16 Oct 2020 15:17:07 +0200 Subject: [PATCH] Fixes a problem when module probes before i2c module is available The driver crashed while a NULL pointer returned by i2c_get_adapter() has been used to access the i2c bus functions. The headphone probing function hb_hp_probe() now returns -EPROBE_DEFER in case the i2c module has not been loaded yet. Signed-off-by: Joerg Schambacher --- sound/soc/bcm/hifiberry_dacplus.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --- a/sound/soc/bcm/hifiberry_dacplus.c +++ b/sound/soc/bcm/hifiberry_dacplus.c @@ -315,12 +315,14 @@ static int hb_hp_detect(void) { struct i2c_adapter *adap = i2c_get_adapter(1); int ret; - struct i2c_client tpa_i2c_client = { .addr = 0x60, .adapter = adap, }; + if (!adap) + return -EPROBE_DEFER; /* I2C module not yet available */ + ret = i2c_smbus_read_byte(&tpa_i2c_client) >= 0; i2c_put_adapter(adap); return ret; @@ -342,7 +344,10 @@ static int snd_rpi_hifiberry_dacplus_pro struct of_changeset ocs; /* probe for head phone amp */ - if (hb_hp_detect()) { + ret = hb_hp_detect(); + if (ret < 0) + return ret; + if (ret) { card->aux_dev = hifiberry_dacplus_aux_devs; card->num_aux_devs = ARRAY_SIZE(hifiberry_dacplus_aux_devs);