| From 15f8c5f2415bfac73f33a14bcd83422bcbfb5298 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Mon, 13 Nov 2017 12:12:56 +0100 |
| Subject: ASoC: twl4030: fix child-node lookup |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit 15f8c5f2415bfac73f33a14bcd83422bcbfb5298 upstream. |
| |
| Fix child-node lookup during probe, which ended up searching the whole |
| device tree depth-first starting at the parent rather than just matching |
| on its children. |
| |
| To make things worse, the parent codec node was also prematurely freed, |
| while the child node was leaked. |
| |
| Fixes: 2d6d649a2e0f ("ASoC: twl4030: Support for DT booted kernel") |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/soc/codecs/twl4030.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/sound/soc/codecs/twl4030.c |
| +++ b/sound/soc/codecs/twl4030.c |
| @@ -232,7 +232,7 @@ static struct twl4030_codec_data *twl403 |
| struct twl4030_codec_data *pdata = dev_get_platdata(codec->dev); |
| struct device_node *twl4030_codec_node = NULL; |
| |
| - twl4030_codec_node = of_find_node_by_name(codec->dev->parent->of_node, |
| + twl4030_codec_node = of_get_child_by_name(codec->dev->parent->of_node, |
| "codec"); |
| |
| if (!pdata && twl4030_codec_node) { |
| @@ -241,9 +241,11 @@ static struct twl4030_codec_data *twl403 |
| GFP_KERNEL); |
| if (!pdata) { |
| dev_err(codec->dev, "Can not allocate memory\n"); |
| + of_node_put(twl4030_codec_node); |
| return NULL; |
| } |
| twl4030_setup_pdata_of(pdata, twl4030_codec_node); |
| + of_node_put(twl4030_codec_node); |
| } |
| |
| return pdata; |