ASoC: max98373: check for device node before parsing

Below Oops is caused in a system which uses ACPI instead of device node:

of_get_named_gpiod_flags: can't parse 'maxim,reset-gpio' property of node '(null)[0]'
BUG: kernel NULL pointer dereference, address: 0000000000000010

This patch avoids NULL pointer deferencing by adding a check before parsing
and initializes to make reset-gpio pin as invalid.

Signed-off-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
Signed-off-by: Jairaj Arava <jairaj.arava@intel.com>
Link: https://lore.kernel.org/r/1569702150-11976-1-git-send-email-sathyanarayana.nujella@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Sathyanarayana Nujella 2019-09-28 13:22:30 -07:00 committed by Mark Brown
parent 752c938a5c
commit 4bb41984bf
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 12 additions and 8 deletions

View File

@ -901,16 +901,20 @@ static void max98373_slot_config(struct i2c_client *i2c,
max98373->i_slot = value & 0xF; max98373->i_slot = value & 0xF;
else else
max98373->i_slot = 1; max98373->i_slot = 1;
if (dev->of_node) {
max98373->reset_gpio = of_get_named_gpio(dev->of_node, max98373->reset_gpio = of_get_named_gpio(dev->of_node,
"maxim,reset-gpio", 0); "maxim,reset-gpio", 0);
if (!gpio_is_valid(max98373->reset_gpio)) { if (!gpio_is_valid(max98373->reset_gpio)) {
dev_err(dev, "Looking up %s property in node %s failed %d\n", dev_err(dev, "Looking up %s property in node %s failed %d\n",
"maxim,reset-gpio", dev->of_node->full_name, "maxim,reset-gpio", dev->of_node->full_name,
max98373->reset_gpio); max98373->reset_gpio);
} else {
dev_dbg(dev, "maxim,reset-gpio=%d",
max98373->reset_gpio);
}
} else { } else {
dev_dbg(dev, "maxim,reset-gpio=%d", /* this makes reset_gpio as invalid */
max98373->reset_gpio); max98373->reset_gpio = -1;
} }
if (!device_property_read_u32(dev, "maxim,spkfb-slot-no", &value)) if (!device_property_read_u32(dev, "maxim,spkfb-slot-no", &value))