diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-11-25 14:36:35 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-11-25 14:36:35 -0500 |
| commit | f2051f8f9d30f5bae693863dca3416a1ef69064c (patch) | |
| tree | c94d158064a00797135e2cf23c117f94b1a0a661 | |
| parent | ea9ea6c6f595ec774e957834d5485949c469ed0e (diff) | |
| parent | 1a41741fd60b0a2d1102c3d1ff9d58cb324a8d29 (diff) | |
Merge tag 'mfd-fixes-4.9.1' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
Pull MFD fixes from Lee Jones:
"Received a copule of last minute fixes for v4.9.
The patches from Viresh are fixing issues displayed in KernelCI"
* tag 'mfd-fixes-4.9.1' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd:
mfd: wm8994-core: Don't use managed regulator bulk get API
mfd: wm8994-core: Disable regulators before removing them
mfd: syscon: Support native-endian regmaps
| -rw-r--r-- | drivers/mfd/syscon.c | 4 | ||||
| -rw-r--r-- | drivers/mfd/wm8994-core.c | 16 |
2 files changed, 15 insertions, 5 deletions
diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c index 2f2225e845ef..b93fe4c4957a 100644 --- a/drivers/mfd/syscon.c +++ b/drivers/mfd/syscon.c | |||
| @@ -73,8 +73,10 @@ static struct syscon *of_syscon_register(struct device_node *np) | |||
| 73 | /* Parse the device's DT node for an endianness specification */ | 73 | /* Parse the device's DT node for an endianness specification */ |
| 74 | if (of_property_read_bool(np, "big-endian")) | 74 | if (of_property_read_bool(np, "big-endian")) |
| 75 | syscon_config.val_format_endian = REGMAP_ENDIAN_BIG; | 75 | syscon_config.val_format_endian = REGMAP_ENDIAN_BIG; |
| 76 | else if (of_property_read_bool(np, "little-endian")) | 76 | else if (of_property_read_bool(np, "little-endian")) |
| 77 | syscon_config.val_format_endian = REGMAP_ENDIAN_LITTLE; | 77 | syscon_config.val_format_endian = REGMAP_ENDIAN_LITTLE; |
| 78 | else if (of_property_read_bool(np, "native-endian")) | ||
| 79 | syscon_config.val_format_endian = REGMAP_ENDIAN_NATIVE; | ||
| 78 | 80 | ||
| 79 | /* | 81 | /* |
| 80 | * search for reg-io-width property in DT. If it is not provided, | 82 | * search for reg-io-width property in DT. If it is not provided, |
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c index 7eec619a6023..8588dbad3301 100644 --- a/drivers/mfd/wm8994-core.c +++ b/drivers/mfd/wm8994-core.c | |||
| @@ -393,8 +393,13 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq) | |||
| 393 | BUG(); | 393 | BUG(); |
| 394 | goto err; | 394 | goto err; |
| 395 | } | 395 | } |
| 396 | 396 | ||
| 397 | ret = devm_regulator_bulk_get(wm8994->dev, wm8994->num_supplies, | 397 | /* |
| 398 | * Can't use devres helper here as some of the supplies are provided by | ||
| 399 | * wm8994->dev's children (regulators) and those regulators are | ||
| 400 | * unregistered by the devres core before the supplies are freed. | ||
| 401 | */ | ||
| 402 | ret = regulator_bulk_get(wm8994->dev, wm8994->num_supplies, | ||
| 398 | wm8994->supplies); | 403 | wm8994->supplies); |
| 399 | if (ret != 0) { | 404 | if (ret != 0) { |
| 400 | dev_err(wm8994->dev, "Failed to get supplies: %d\n", ret); | 405 | dev_err(wm8994->dev, "Failed to get supplies: %d\n", ret); |
| @@ -405,7 +410,7 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq) | |||
| 405 | wm8994->supplies); | 410 | wm8994->supplies); |
| 406 | if (ret != 0) { | 411 | if (ret != 0) { |
| 407 | dev_err(wm8994->dev, "Failed to enable supplies: %d\n", ret); | 412 | dev_err(wm8994->dev, "Failed to enable supplies: %d\n", ret); |
| 408 | goto err; | 413 | goto err_regulator_free; |
| 409 | } | 414 | } |
| 410 | 415 | ||
| 411 | ret = wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET); | 416 | ret = wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET); |
| @@ -596,6 +601,8 @@ err_irq: | |||
| 596 | err_enable: | 601 | err_enable: |
| 597 | regulator_bulk_disable(wm8994->num_supplies, | 602 | regulator_bulk_disable(wm8994->num_supplies, |
| 598 | wm8994->supplies); | 603 | wm8994->supplies); |
| 604 | err_regulator_free: | ||
| 605 | regulator_bulk_free(wm8994->num_supplies, wm8994->supplies); | ||
| 599 | err: | 606 | err: |
| 600 | mfd_remove_devices(wm8994->dev); | 607 | mfd_remove_devices(wm8994->dev); |
| 601 | return ret; | 608 | return ret; |
| @@ -604,10 +611,11 @@ err: | |||
| 604 | static void wm8994_device_exit(struct wm8994 *wm8994) | 611 | static void wm8994_device_exit(struct wm8994 *wm8994) |
| 605 | { | 612 | { |
| 606 | pm_runtime_disable(wm8994->dev); | 613 | pm_runtime_disable(wm8994->dev); |
| 607 | mfd_remove_devices(wm8994->dev); | ||
| 608 | wm8994_irq_exit(wm8994); | 614 | wm8994_irq_exit(wm8994); |
| 609 | regulator_bulk_disable(wm8994->num_supplies, | 615 | regulator_bulk_disable(wm8994->num_supplies, |
| 610 | wm8994->supplies); | 616 | wm8994->supplies); |
| 617 | regulator_bulk_free(wm8994->num_supplies, wm8994->supplies); | ||
| 618 | mfd_remove_devices(wm8994->dev); | ||
| 611 | } | 619 | } |
| 612 | 620 | ||
| 613 | static const struct of_device_id wm8994_of_match[] = { | 621 | static const struct of_device_id wm8994_of_match[] = { |
