lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 24 Feb 2020 14:51:22 +0100
From:   Marek Szyprowski <m.szyprowski@...sung.com>
To:     alsa-devel@...a-project.org, linux-kernel@...r.kernel.org
Cc:     Marek Szyprowski <m.szyprowski@...sung.com>,
        Mark Brown <broonie@...nel.org>,
        Sylwester Nawrocki <s.nawrocki@...sung.com>,
        Lee Jones <lee.jones@...aro.org>,
        Bartlomiej Zolnierkiewicz <b.zolnierkie@...sung.com>
Subject: [PATCH 1/2] mfd: wm8994: Fix driver operation if loaded as modules

WM8994 chip has built-in regulators, which might be used for chip
operation. They are controlled by a separate wm8994-regulator driver,
which should be loaded before this driver calls regulator_get(), because
that driver also provides consumer-supply mapping for the them. If that
driver is not yet loaded, regulator core substitute them with dummy
regulator, what breaks chip operation, because the built-in regulators are
never enabled. Fix this by adding a comment and a call to module_request()
helper.

Signed-off-by: Marek Szyprowski <m.szyprowski@...sung.com>
---
 drivers/mfd/wm8994-core.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index 1e9fe7d92597..f15f12d8bccc 100644
--- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c
@@ -321,6 +321,13 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq)
 	int ret, i, patch_regs = 0;
 	int pulls = 0;
 
+	/*
+	 * Request a driver for built-in regulators first, because they are
+	 * default supplies for "AVDD1" and "DCVDD". Otherwise, getting them
+	 * fails due to lack of consumer mapping defined by that driver.
+	 */
+	request_module("wm8994_regulator");
+
 	if (dev_get_platdata(wm8994->dev)) {
 		pdata = dev_get_platdata(wm8994->dev);
 		wm8994->pdata = *pdata;
-- 
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ