Skip to content

Commit 3fc6c76

Browse files
tombasuperna9999
authored andcommitted
drm/bridge: sii902x: Fix audio codec unregistration
The driver never unregisters the audio codec platform device, which can lead to a crash on module reloading, nor does it handle the return value from sii902x_audio_codec_init(). Signed-off-by: Tomi Valkeinen <[email protected]> Fixes: ff57816 ("drm/bridge: sii902x: Implement HDMI audio support") Cc: Jyri Sarha <[email protected]> Acked-by: Linus Walleij <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Neil Armstrong <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 08ac6f1 commit 3fc6c76

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

drivers/gpu/drm/bridge/sii902x.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,21 +1080,25 @@ static int sii902x_init(struct sii902x *sii902x)
10801080
return ret;
10811081
}
10821082

1083-
sii902x_audio_codec_init(sii902x, dev);
1083+
ret = sii902x_audio_codec_init(sii902x, dev);
1084+
if (ret)
1085+
return ret;
10841086

10851087
i2c_set_clientdata(sii902x->i2c, sii902x);
10861088

10871089
sii902x->i2cmux = i2c_mux_alloc(sii902x->i2c->adapter, dev,
10881090
1, 0, I2C_MUX_GATE,
10891091
sii902x_i2c_bypass_select,
10901092
sii902x_i2c_bypass_deselect);
1091-
if (!sii902x->i2cmux)
1092-
return -ENOMEM;
1093+
if (!sii902x->i2cmux) {
1094+
ret = -ENOMEM;
1095+
goto err_unreg_audio;
1096+
}
10931097

10941098
sii902x->i2cmux->priv = sii902x;
10951099
ret = i2c_mux_add_adapter(sii902x->i2cmux, 0, 0, 0);
10961100
if (ret)
1097-
return ret;
1101+
goto err_unreg_audio;
10981102

10991103
sii902x->bridge.funcs = &sii902x_bridge_funcs;
11001104
sii902x->bridge.of_node = dev->of_node;
@@ -1107,6 +1111,12 @@ static int sii902x_init(struct sii902x *sii902x)
11071111
drm_bridge_add(&sii902x->bridge);
11081112

11091113
return 0;
1114+
1115+
err_unreg_audio:
1116+
if (!PTR_ERR_OR_ZERO(sii902x->audio.pdev))
1117+
platform_device_unregister(sii902x->audio.pdev);
1118+
1119+
return ret;
11101120
}
11111121

11121122
static int sii902x_probe(struct i2c_client *client)
@@ -1179,6 +1189,9 @@ static void sii902x_remove(struct i2c_client *client)
11791189

11801190
drm_bridge_remove(&sii902x->bridge);
11811191
i2c_mux_del_adapters(sii902x->i2cmux);
1192+
1193+
if (!PTR_ERR_OR_ZERO(sii902x->audio.pdev))
1194+
platform_device_unregister(sii902x->audio.pdev);
11821195
}
11831196

11841197
static const struct of_device_id sii902x_dt_ids[] = {

0 commit comments

Comments
 (0)