regmap: fix NULL pointer dereference in regmap_get_val_endian
Recents commits for getting reg endianness causing NULL pointer dereference if dev is passed NULL in regmap_init_mmio. This patch fixes this issue, and allows to parse reg endianness only if dev and dev->of_node exist. Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
cf673fbc63
commit
6e64b6ccc1
|
@ -477,7 +477,7 @@ static enum regmap_endian regmap_get_val_endian(struct device *dev,
|
||||||
const struct regmap_bus *bus,
|
const struct regmap_bus *bus,
|
||||||
const struct regmap_config *config)
|
const struct regmap_config *config)
|
||||||
{
|
{
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np;
|
||||||
enum regmap_endian endian;
|
enum regmap_endian endian;
|
||||||
|
|
||||||
/* Retrieve the endianness specification from the regmap config */
|
/* Retrieve the endianness specification from the regmap config */
|
||||||
|
@ -487,15 +487,20 @@ static enum regmap_endian regmap_get_val_endian(struct device *dev,
|
||||||
if (endian != REGMAP_ENDIAN_DEFAULT)
|
if (endian != REGMAP_ENDIAN_DEFAULT)
|
||||||
return endian;
|
return endian;
|
||||||
|
|
||||||
/* Parse the device's DT node for an endianness specification */
|
/* If the dev and dev->of_node exist try to get endianness from DT */
|
||||||
if (of_property_read_bool(np, "big-endian"))
|
if (dev && dev->of_node) {
|
||||||
endian = REGMAP_ENDIAN_BIG;
|
np = dev->of_node;
|
||||||
else if (of_property_read_bool(np, "little-endian"))
|
|
||||||
endian = REGMAP_ENDIAN_LITTLE;
|
|
||||||
|
|
||||||
/* If the endianness was specified in DT, use that */
|
/* Parse the device's DT node for an endianness specification */
|
||||||
if (endian != REGMAP_ENDIAN_DEFAULT)
|
if (of_property_read_bool(np, "big-endian"))
|
||||||
return endian;
|
endian = REGMAP_ENDIAN_BIG;
|
||||||
|
else if (of_property_read_bool(np, "little-endian"))
|
||||||
|
endian = REGMAP_ENDIAN_LITTLE;
|
||||||
|
|
||||||
|
/* If the endianness was specified in DT, use that */
|
||||||
|
if (endian != REGMAP_ENDIAN_DEFAULT)
|
||||||
|
return endian;
|
||||||
|
}
|
||||||
|
|
||||||
/* Retrieve the endianness specification from the bus config */
|
/* Retrieve the endianness specification from the bus config */
|
||||||
if (bus && bus->val_format_endian_default)
|
if (bus && bus->val_format_endian_default)
|
||||||
|
|
Loading…
Reference in New Issue