* [PATCH] mfd: wm8994: Return error when device ID mismatch is detected
@ 2012-02-22 2:24 Axel Lin
2012-02-22 13:45 ` Mark Brown
0 siblings, 1 reply; 2+ messages in thread
From: Axel Lin @ 2012-02-22 2:24 UTC (permalink / raw)
To: linux-kernel; +Cc: Mark Brown, Ian Lartey, Dimitris Papastamos, Samuel Ortiz
We base on wm8994->type to set wm8994->supplies and wm8994->num_supplies.
But in current code, wm8994->type may be changed when device ID mismatch is
detected. If we change wm8994->type, then the wm8994->supplies and
wm8994->num_supplies settings are wrong.
Fix it by return error immediately when device ID mismatch is detected.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
---
drivers/mfd/wm8994-core.c | 32 +++++++-------------------------
1 files changed, 7 insertions(+), 25 deletions(-)
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index 1599bba..6e4612e 100644
--- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c
@@ -415,14 +415,17 @@ static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq)
switch (wm8994->type) {
case WM1811:
+ devname = "WM1811";
for (i = 0; i < ARRAY_SIZE(wm1811_main_supplies); i++)
wm8994->supplies[i].supply = wm1811_main_supplies[i];
break;
case WM8994:
+ devname = "WM8994";
for (i = 0; i < ARRAY_SIZE(wm8994_main_supplies); i++)
wm8994->supplies[i].supply = wm8994_main_supplies[i];
break;
case WM8958:
+ devname = "WM8958";
for (i = 0; i < ARRAY_SIZE(wm8958_main_supplies); i++)
wm8994->supplies[i].supply = wm8958_main_supplies[i];
break;
@@ -450,31 +453,10 @@ static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq)
dev_err(wm8994->dev, "Failed to read ID register\n");
goto err_enable;
}
- switch (ret) {
- case 0x1811:
- devname = "WM1811";
- if (wm8994->type != WM1811)
- dev_warn(wm8994->dev, "Device registered as type %d\n",
- wm8994->type);
- wm8994->type = WM1811;
- break;
- case 0x8994:
- devname = "WM8994";
- if (wm8994->type != WM8994)
- dev_warn(wm8994->dev, "Device registered as type %d\n",
- wm8994->type);
- wm8994->type = WM8994;
- break;
- case 0x8958:
- devname = "WM8958";
- if (wm8994->type != WM8958)
- dev_warn(wm8994->dev, "Device registered as type %d\n",
- wm8994->type);
- wm8994->type = WM8958;
- break;
- default:
- dev_err(wm8994->dev, "Device is not a WM8994, ID is %x\n",
- ret);
+
+ if (ret != wm8994->type) {
+ dev_err(wm8994->dev, "Device ID mismatch: expect %x but we got %x\n",
+ wm8994->type, ret);
ret = -EINVAL;
goto err_enable;
}
--
1.7.5.4
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] mfd: wm8994: Return error when device ID mismatch is detected
2012-02-22 2:24 [PATCH] mfd: wm8994: Return error when device ID mismatch is detected Axel Lin
@ 2012-02-22 13:45 ` Mark Brown
0 siblings, 0 replies; 2+ messages in thread
From: Mark Brown @ 2012-02-22 13:45 UTC (permalink / raw)
To: Axel Lin; +Cc: linux-kernel, Ian Lartey, Dimitris Papastamos, Samuel Ortiz
[-- Attachment #1: Type: text/plain, Size: 591 bytes --]
On Wed, Feb 22, 2012 at 10:24:44AM +0800, Axel Lin wrote:
> We base on wm8994->type to set wm8994->supplies and wm8994->num_supplies.
> But in current code, wm8994->type may be changed when device ID mismatch is
> detected. If we change wm8994->type, then the wm8994->supplies and
> wm8994->num_supplies settings are wrong.
>
> Fix it by return error immediately when device ID mismatch is detected.
No, there are valid use cases for registering as the wrong device. It's
not ideal to have the wrong supply set but it's going to cause more harm
than good to fail hard on this.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-02-22 13:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-22 2:24 [PATCH] mfd: wm8994: Return error when device ID mismatch is detected Axel Lin
2012-02-22 13:45 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox