The following changes since commit 1fbf1b714ea8ca685f024e91f0cfa83a40b8604f:
Mark Brown (1):
mfd: Add WM8350 subdevice registration helper
are available in the git repository at:
git://opensource.wolfsonmicro.com/linux-2.6-audioplus for-lrg
Mark Brown (2):
mfd: Add placeholders for WM8350 client devices
mfd: Fix warning in WM8350
drivers/mfd/wm8350-core.c | 21 ++++++++++++++++++++-
include/linux/mfd/wm8350/audio.h | 6 ++++++
include/linux/mfd/wm8350/core.h | 10 ++++++++++
include/linux/mfd/wm8350/gpio.h | 6 ++++++
include/linux/mfd/wm8350/rtc.h | 6 ++++++
include/linux/mfd/wm8350/supply.h | 6 ++++++
include/linux/mfd/wm8350/wdt.h | 8 +++++++-
7 files changed, 61 insertions(+), 2 deletions(-)
Signed-off-by: Mark Brown <[email protected]>
---
drivers/mfd/wm8350-core.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index 8554855..35f4557 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -1161,7 +1161,6 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
{
int ret = -EINVAL;
u16 id1, id2, mask, mode;
- int i;
/* get WM8350 revision and config mode */
wm8350->read_dev(wm8350, WM8350_RESET_ID, sizeof(id1), &id1);
--
1.5.6.5
In order to avoid merge problems further down the line add placeholders
for several of the WM8350 client devices and register them, otherwise
the patches adding the client devices will all try to update the same
code.
Signed-off-by: Mark Brown <[email protected]>
---
drivers/mfd/wm8350-core.c | 20 ++++++++++++++++++++
include/linux/mfd/wm8350/audio.h | 6 ++++++
include/linux/mfd/wm8350/core.h | 10 ++++++++++
include/linux/mfd/wm8350/gpio.h | 6 ++++++
include/linux/mfd/wm8350/rtc.h | 6 ++++++
include/linux/mfd/wm8350/supply.h | 6 ++++++
include/linux/mfd/wm8350/wdt.h | 8 +++++++-
7 files changed, 61 insertions(+), 1 deletions(-)
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index cd1f76e..8554855 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -1234,6 +1234,15 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0);
+ wm8350_client_dev_register(wm8350, "wm8350-codec",
+ &(wm8350->codec.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-gpio",
+ &(wm8350->gpio.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-power",
+ &(wm8350->power.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-rtc", &(wm8350->rtc.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-wdt", &(wm8350->wdt.pdev));
+
return 0;
err:
@@ -1250,6 +1259,17 @@ void wm8350_device_exit(struct wm8350 *wm8350)
if (wm8350->pmic.pdev[i] != NULL)
platform_device_unregister(wm8350->pmic.pdev[i]);
+ if (wm8350->wdt.pdev)
+ platform_device_unregister(wm8350->wdt.pdev);
+ if (wm8350->rtc.pdev)
+ platform_device_unregister(wm8350->rtc.pdev);
+ if (wm8350->power.pdev)
+ platform_device_unregister(wm8350->power.pdev);
+ if (wm8350->gpio.pdev)
+ platform_device_unregister(wm8350->gpio.pdev);
+ if (wm8350->codec.pdev)
+ platform_device_unregister(wm8350->codec.pdev);
+
free_irq(wm8350->chip_irq, wm8350);
flush_work(&wm8350->irq_work);
kfree(wm8350->reg_cache);
diff --git a/include/linux/mfd/wm8350/audio.h b/include/linux/mfd/wm8350/audio.h
index 43342f7..217bb22 100644
--- a/include/linux/mfd/wm8350/audio.h
+++ b/include/linux/mfd/wm8350/audio.h
@@ -13,6 +13,8 @@
#ifndef __LINUX_MFD_WM8350_AUDIO_H_
#define __LINUX_MFD_WM8350_AUDIO_H_
+#include <linux/platform_device.h>
+
#define WM8350_CLOCK_CONTROL_1 0x28
#define WM8350_CLOCK_CONTROL_2 0x29
#define WM8350_FLL_CONTROL_1 0x2A
@@ -589,4 +591,8 @@
#define WM8350_IRQ_CODEC_MICSCD 41
#define WM8350_IRQ_CODEC_MICD 42
+struct wm8350_codec {
+ struct platform_device *pdev;
+};
+
#endif
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h
index 348101c..6ebf97f 100644
--- a/include/linux/mfd/wm8350/core.h
+++ b/include/linux/mfd/wm8350/core.h
@@ -17,7 +17,12 @@
#include <linux/mutex.h>
#include <linux/workqueue.h>
+#include <linux/mfd/wm8350/audio.h>
+#include <linux/mfd/wm8350/gpio.h>
#include <linux/mfd/wm8350/pmic.h>
+#include <linux/mfd/wm8350/rtc.h>
+#include <linux/mfd/wm8350/supply.h>
+#include <linux/mfd/wm8350/wdt.h>
/*
* Register values.
@@ -574,7 +579,12 @@ struct wm8350 {
int chip_irq;
/* Client devices */
+ struct wm8350_codec codec;
+ struct wm8350_gpio gpio;
struct wm8350_pmic pmic;
+ struct wm8350_power power;
+ struct wm8350_rtc rtc;
+ struct wm8350_wdt wdt;
};
/**
diff --git a/include/linux/mfd/wm8350/gpio.h b/include/linux/mfd/wm8350/gpio.h
index c6cd2ca..ed91e8f 100644
--- a/include/linux/mfd/wm8350/gpio.h
+++ b/include/linux/mfd/wm8350/gpio.h
@@ -13,6 +13,8 @@
#ifndef __LINUX_MFD_WM8350_GPIO_H_
#define __LINUX_MFD_WM8350_GPIO_H_
+#include <linux/platform_device.h>
+
/*
* GPIO Registers.
*/
@@ -328,6 +330,10 @@ struct wm8350;
int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
int pol, int pull, int invert, int debounce);
+struct wm8350_gpio {
+ struct platform_device *pdev;
+};
+
/*
* GPIO Interrupts
*/
diff --git a/include/linux/mfd/wm8350/rtc.h b/include/linux/mfd/wm8350/rtc.h
index cb337ea..dfda69e 100644
--- a/include/linux/mfd/wm8350/rtc.h
+++ b/include/linux/mfd/wm8350/rtc.h
@@ -12,6 +12,8 @@
#ifndef __LINUX_MFD_WM8350_RTC_H
#define __LINUX_MFD_WM8350_RTC_H
+#include <linux/platform_device.h>
+
/*
* Register values.
*/
@@ -257,4 +259,8 @@
#define WM8350_IRQ_RTC_SEC 8
#define WM8350_IRQ_RTC_ALM 9
+struct wm8350_rtc {
+ struct platform_device *pdev;
+};
+
#endif
diff --git a/include/linux/mfd/wm8350/supply.h b/include/linux/mfd/wm8350/supply.h
index f1d4317..1c8f3cd 100644
--- a/include/linux/mfd/wm8350/supply.h
+++ b/include/linux/mfd/wm8350/supply.h
@@ -13,6 +13,8 @@
#ifndef __LINUX_MFD_WM8350_SUPPLY_H_
#define __LINUX_MFD_WM8350_SUPPLY_H_
+#include <linux/platform_device.h>
+
/*
* Charger registers
*/
@@ -102,4 +104,8 @@
#define WM8350_IRQ_EXT_WALL_FB 37
#define WM8350_IRQ_EXT_BAT_FB 38
+struct wm8350_power {
+ struct platform_device *pdev;
+};
+
#endif
diff --git a/include/linux/mfd/wm8350/wdt.h b/include/linux/mfd/wm8350/wdt.h
index 72fc9f5..f6135b5 100644
--- a/include/linux/mfd/wm8350/wdt.h
+++ b/include/linux/mfd/wm8350/wdt.h
@@ -1,7 +1,7 @@
/*
* wdt.h -- Watchdog Driver for Wolfson WM8350 PMIC
*
- * Copyright 2007 Wolfson Microelectronics PLC
+ * Copyright 2007, 2008 Wolfson Microelectronics PLC
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -12,6 +12,8 @@
#ifndef __LINUX_MFD_WM8350_WDT_H_
#define __LINUX_MFD_WM8350_WDT_H_
+#include <linux/platform_device.h>
+
#define WM8350_WDOG_HIB_MODE 0x0080
#define WM8350_WDOG_DEBUG 0x0040
#define WM8350_WDOG_MODE_MASK 0x0030
@@ -19,4 +21,8 @@
#define WM8350_IRQ_SYS_WDOG_TO 24
+struct wm8350_wdt {
+ struct platform_device *pdev;
+};
+
#endif
--
1.5.6.5
Hi Mark,
Hi Mark,
a few comments:
On Mon, Oct 13, 2008 at 12:36:31PM +0100, Mark Brown wrote:
> In order to avoid merge problems further down the line add placeholders
> for several of the WM8350 client devices and register them, otherwise
> the patches adding the client devices will all try to update the same
> code.
>
> Signed-off-by: Mark Brown <[email protected]>
> ---
> drivers/mfd/wm8350-core.c | 20 ++++++++++++++++++++
> include/linux/mfd/wm8350/audio.h | 6 ++++++
> include/linux/mfd/wm8350/core.h | 10 ++++++++++
> include/linux/mfd/wm8350/gpio.h | 6 ++++++
> include/linux/mfd/wm8350/rtc.h | 6 ++++++
> include/linux/mfd/wm8350/supply.h | 6 ++++++
> include/linux/mfd/wm8350/wdt.h | 8 +++++++-
> 7 files changed, 61 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
> index cd1f76e..8554855 100644
> --- a/drivers/mfd/wm8350-core.c
> +++ b/drivers/mfd/wm8350-core.c
> @@ -1234,6 +1234,15 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
>
> wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0);
>
> + wm8350_client_dev_register(wm8350, "wm8350-codec",
> + &(wm8350->codec.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-gpio",
> + &(wm8350->gpio.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-power",
> + &(wm8350->power.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-rtc", &(wm8350->rtc.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-wdt", &(wm8350->wdt.pdev));
> +
> return 0;
>
> err:
> @@ -1250,6 +1259,17 @@ void wm8350_device_exit(struct wm8350 *wm8350)
> if (wm8350->pmic.pdev[i] != NULL)
> platform_device_unregister(wm8350->pmic.pdev[i]);
>
> + if (wm8350->wdt.pdev)
> + platform_device_unregister(wm8350->wdt.pdev);
> + if (wm8350->rtc.pdev)
> + platform_device_unregister(wm8350->rtc.pdev);
> + if (wm8350->power.pdev)
> + platform_device_unregister(wm8350->power.pdev);
> + if (wm8350->gpio.pdev)
> + platform_device_unregister(wm8350->gpio.pdev);
> + if (wm8350->codec.pdev)
> + platform_device_unregister(wm8350->codec.pdev);
You don't need to check for pdev here, platform_device_unregister does
that for you.
> free_irq(wm8350->chip_irq, wm8350);
> flush_work(&wm8350->irq_work);
> kfree(wm8350->reg_cache);
> diff --git a/include/linux/mfd/wm8350/audio.h b/include/linux/mfd/wm8350/audio.h
> index 43342f7..217bb22 100644
> --- a/include/linux/mfd/wm8350/audio.h
> +++ b/include/linux/mfd/wm8350/audio.h
> @@ -13,6 +13,8 @@
> #ifndef __LINUX_MFD_WM8350_AUDIO_H_
> #define __LINUX_MFD_WM8350_AUDIO_H_
>
> +#include <linux/platform_device.h>
> +
> #define WM8350_CLOCK_CONTROL_1 0x28
> #define WM8350_CLOCK_CONTROL_2 0x29
> #define WM8350_FLL_CONTROL_1 0x2A
> @@ -589,4 +591,8 @@
> #define WM8350_IRQ_CODEC_MICSCD 41
> #define WM8350_IRQ_CODEC_MICD 42
>
> +struct wm8350_codec {
> + struct platform_device *pdev;
> +};
> +
> #endif
> diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h
> index 348101c..6ebf97f 100644
> --- a/include/linux/mfd/wm8350/core.h
> +++ b/include/linux/mfd/wm8350/core.h
> @@ -17,7 +17,12 @@
> #include <linux/mutex.h>
> #include <linux/workqueue.h>
>
> +#include <linux/mfd/wm8350/audio.h>
> +#include <linux/mfd/wm8350/gpio.h>
> #include <linux/mfd/wm8350/pmic.h>
> +#include <linux/mfd/wm8350/rtc.h>
> +#include <linux/mfd/wm8350/supply.h>
> +#include <linux/mfd/wm8350/wdt.h>
>
> /*
> * Register values.
> @@ -574,7 +579,12 @@ struct wm8350 {
> int chip_irq;
>
> /* Client devices */
> + struct wm8350_codec codec;
> + struct wm8350_gpio gpio;
> struct wm8350_pmic pmic;
> + struct wm8350_power power;
> + struct wm8350_rtc rtc;
> + struct wm8350_wdt wdt;
> };
>
> /**
> diff --git a/include/linux/mfd/wm8350/gpio.h b/include/linux/mfd/wm8350/gpio.h
> index c6cd2ca..ed91e8f 100644
> --- a/include/linux/mfd/wm8350/gpio.h
> +++ b/include/linux/mfd/wm8350/gpio.h
> @@ -13,6 +13,8 @@
> #ifndef __LINUX_MFD_WM8350_GPIO_H_
> #define __LINUX_MFD_WM8350_GPIO_H_
>
> +#include <linux/platform_device.h>
> +
> /*
> * GPIO Registers.
> */
> @@ -328,6 +330,10 @@ struct wm8350;
> int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
> int pol, int pull, int invert, int debounce);
>
> +struct wm8350_gpio {
> + struct platform_device *pdev;
> +};
I guess you're planning to add more stuff to those structures at some point ?
Cheers,
Samuel.
--
Intel Open Source Technology Centre
http://oss.intel.com/
On Mon, Oct 13, 2008 at 12:36:32PM +0100, Mark Brown wrote:
> Signed-off-by: Mark Brown <[email protected]>
Acked-by: Samuel Ortiz <[email protected]>
> ---
> drivers/mfd/wm8350-core.c | 1 -
> 1 files changed, 0 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
> index 8554855..35f4557 100644
> --- a/drivers/mfd/wm8350-core.c
> +++ b/drivers/mfd/wm8350-core.c
> @@ -1161,7 +1161,6 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
> {
> int ret = -EINVAL;
> u16 id1, id2, mask, mode;
> - int i;
>
> /* get WM8350 revision and config mode */
> wm8350->read_dev(wm8350, WM8350_RESET_ID, sizeof(id1), &id1);
> --
> 1.5.6.5
>
--
Intel Open Source Technology Centre
http://oss.intel.com/
On Mon, Oct 13, 2008 at 03:37:08PM +0200, Samuel Ortiz wrote:
> > +struct wm8350_gpio {
> > + struct platform_device *pdev;
> > +};
> I guess you're planning to add more stuff to those structures at some point ?
Yes - I'll the needed stuff along with the drivers to make the reviews a
bit clearer. At the minute these structures are just placeholders to
avoid merge conflicts when the actual drivers are contributed.
Liam, I'll push out an updated version of this patch shortly which
removes the conditionals from the remove path.
Signed-off-by: Mark Brown <[email protected]>
Acked-by: Samuel Ortiz <[email protected]>
---
drivers/mfd/wm8350-core.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index 382e38c..25a7a5d 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -1161,7 +1161,6 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
{
int ret = -EINVAL;
u16 id1, id2, mask, mode;
- int i;
/* get WM8350 revision and config mode */
wm8350->read_dev(wm8350, WM8350_RESET_ID, sizeof(id1), &id1);
--
1.5.6.5
In order to avoid merge problems further down the line add placeholders
for several of the WM8350 client devices and register them, otherwise
the patches adding the client devices will all try to update the same
code.
Also remove redundant checks for null regulator platform devices while
we're at it.
Signed-off-by: Mark Brown <[email protected]>
---
drivers/mfd/wm8350-core.c | 18 ++++++++++++++++--
include/linux/mfd/wm8350/audio.h | 6 ++++++
include/linux/mfd/wm8350/core.h | 10 ++++++++++
include/linux/mfd/wm8350/gpio.h | 6 ++++++
include/linux/mfd/wm8350/rtc.h | 6 ++++++
include/linux/mfd/wm8350/supply.h | 6 ++++++
include/linux/mfd/wm8350/wdt.h | 8 +++++++-
7 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index cd1f76e..382e38c 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -1234,6 +1234,15 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0);
+ wm8350_client_dev_register(wm8350, "wm8350-codec",
+ &(wm8350->codec.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-gpio",
+ &(wm8350->gpio.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-power",
+ &(wm8350->power.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-rtc", &(wm8350->rtc.pdev));
+ wm8350_client_dev_register(wm8350, "wm8350-wdt", &(wm8350->wdt.pdev));
+
return 0;
err:
@@ -1247,8 +1256,13 @@ void wm8350_device_exit(struct wm8350 *wm8350)
int i;
for (i = 0; i < ARRAY_SIZE(wm8350->pmic.pdev); i++)
- if (wm8350->pmic.pdev[i] != NULL)
- platform_device_unregister(wm8350->pmic.pdev[i]);
+ platform_device_unregister(wm8350->pmic.pdev[i]);
+
+ platform_device_unregister(wm8350->wdt.pdev);
+ platform_device_unregister(wm8350->rtc.pdev);
+ platform_device_unregister(wm8350->power.pdev);
+ platform_device_unregister(wm8350->gpio.pdev);
+ platform_device_unregister(wm8350->codec.pdev);
free_irq(wm8350->chip_irq, wm8350);
flush_work(&wm8350->irq_work);
diff --git a/include/linux/mfd/wm8350/audio.h b/include/linux/mfd/wm8350/audio.h
index 43342f7..217bb22 100644
--- a/include/linux/mfd/wm8350/audio.h
+++ b/include/linux/mfd/wm8350/audio.h
@@ -13,6 +13,8 @@
#ifndef __LINUX_MFD_WM8350_AUDIO_H_
#define __LINUX_MFD_WM8350_AUDIO_H_
+#include <linux/platform_device.h>
+
#define WM8350_CLOCK_CONTROL_1 0x28
#define WM8350_CLOCK_CONTROL_2 0x29
#define WM8350_FLL_CONTROL_1 0x2A
@@ -589,4 +591,8 @@
#define WM8350_IRQ_CODEC_MICSCD 41
#define WM8350_IRQ_CODEC_MICD 42
+struct wm8350_codec {
+ struct platform_device *pdev;
+};
+
#endif
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h
index 348101c..6ebf97f 100644
--- a/include/linux/mfd/wm8350/core.h
+++ b/include/linux/mfd/wm8350/core.h
@@ -17,7 +17,12 @@
#include <linux/mutex.h>
#include <linux/workqueue.h>
+#include <linux/mfd/wm8350/audio.h>
+#include <linux/mfd/wm8350/gpio.h>
#include <linux/mfd/wm8350/pmic.h>
+#include <linux/mfd/wm8350/rtc.h>
+#include <linux/mfd/wm8350/supply.h>
+#include <linux/mfd/wm8350/wdt.h>
/*
* Register values.
@@ -574,7 +579,12 @@ struct wm8350 {
int chip_irq;
/* Client devices */
+ struct wm8350_codec codec;
+ struct wm8350_gpio gpio;
struct wm8350_pmic pmic;
+ struct wm8350_power power;
+ struct wm8350_rtc rtc;
+ struct wm8350_wdt wdt;
};
/**
diff --git a/include/linux/mfd/wm8350/gpio.h b/include/linux/mfd/wm8350/gpio.h
index c6cd2ca..ed91e8f 100644
--- a/include/linux/mfd/wm8350/gpio.h
+++ b/include/linux/mfd/wm8350/gpio.h
@@ -13,6 +13,8 @@
#ifndef __LINUX_MFD_WM8350_GPIO_H_
#define __LINUX_MFD_WM8350_GPIO_H_
+#include <linux/platform_device.h>
+
/*
* GPIO Registers.
*/
@@ -328,6 +330,10 @@ struct wm8350;
int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
int pol, int pull, int invert, int debounce);
+struct wm8350_gpio {
+ struct platform_device *pdev;
+};
+
/*
* GPIO Interrupts
*/
diff --git a/include/linux/mfd/wm8350/rtc.h b/include/linux/mfd/wm8350/rtc.h
index cb337ea..dfda69e 100644
--- a/include/linux/mfd/wm8350/rtc.h
+++ b/include/linux/mfd/wm8350/rtc.h
@@ -12,6 +12,8 @@
#ifndef __LINUX_MFD_WM8350_RTC_H
#define __LINUX_MFD_WM8350_RTC_H
+#include <linux/platform_device.h>
+
/*
* Register values.
*/
@@ -257,4 +259,8 @@
#define WM8350_IRQ_RTC_SEC 8
#define WM8350_IRQ_RTC_ALM 9
+struct wm8350_rtc {
+ struct platform_device *pdev;
+};
+
#endif
diff --git a/include/linux/mfd/wm8350/supply.h b/include/linux/mfd/wm8350/supply.h
index f1d4317..1c8f3cd 100644
--- a/include/linux/mfd/wm8350/supply.h
+++ b/include/linux/mfd/wm8350/supply.h
@@ -13,6 +13,8 @@
#ifndef __LINUX_MFD_WM8350_SUPPLY_H_
#define __LINUX_MFD_WM8350_SUPPLY_H_
+#include <linux/platform_device.h>
+
/*
* Charger registers
*/
@@ -102,4 +104,8 @@
#define WM8350_IRQ_EXT_WALL_FB 37
#define WM8350_IRQ_EXT_BAT_FB 38
+struct wm8350_power {
+ struct platform_device *pdev;
+};
+
#endif
diff --git a/include/linux/mfd/wm8350/wdt.h b/include/linux/mfd/wm8350/wdt.h
index 72fc9f5..f6135b5 100644
--- a/include/linux/mfd/wm8350/wdt.h
+++ b/include/linux/mfd/wm8350/wdt.h
@@ -1,7 +1,7 @@
/*
* wdt.h -- Watchdog Driver for Wolfson WM8350 PMIC
*
- * Copyright 2007 Wolfson Microelectronics PLC
+ * Copyright 2007, 2008 Wolfson Microelectronics PLC
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -12,6 +12,8 @@
#ifndef __LINUX_MFD_WM8350_WDT_H_
#define __LINUX_MFD_WM8350_WDT_H_
+#include <linux/platform_device.h>
+
#define WM8350_WDOG_HIB_MODE 0x0080
#define WM8350_WDOG_DEBUG 0x0040
#define WM8350_WDOG_MODE_MASK 0x0030
@@ -19,4 +21,8 @@
#define WM8350_IRQ_SYS_WDOG_TO 24
+struct wm8350_wdt {
+ struct platform_device *pdev;
+};
+
#endif
--
1.5.6.5
On Mon, Oct 13, 2008 at 03:45:22PM +0100, Mark Brown wrote:
> In order to avoid merge problems further down the line add placeholders
> for several of the WM8350 client devices and register them, otherwise
> the patches adding the client devices will all try to update the same
> code.
>
> Also remove redundant checks for null regulator platform devices while
> we're at it.
>
> Signed-off-by: Mark Brown <[email protected]>
Acked-by: Samuel Ortiz <[email protected]>
Thanks Mark.
Cheers,
Samuel.
> ---
> drivers/mfd/wm8350-core.c | 18 ++++++++++++++++--
> include/linux/mfd/wm8350/audio.h | 6 ++++++
> include/linux/mfd/wm8350/core.h | 10 ++++++++++
> include/linux/mfd/wm8350/gpio.h | 6 ++++++
> include/linux/mfd/wm8350/rtc.h | 6 ++++++
> include/linux/mfd/wm8350/supply.h | 6 ++++++
> include/linux/mfd/wm8350/wdt.h | 8 +++++++-
> 7 files changed, 57 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
> index cd1f76e..382e38c 100644
> --- a/drivers/mfd/wm8350-core.c
> +++ b/drivers/mfd/wm8350-core.c
> @@ -1234,6 +1234,15 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
>
> wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0);
>
> + wm8350_client_dev_register(wm8350, "wm8350-codec",
> + &(wm8350->codec.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-gpio",
> + &(wm8350->gpio.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-power",
> + &(wm8350->power.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-rtc", &(wm8350->rtc.pdev));
> + wm8350_client_dev_register(wm8350, "wm8350-wdt", &(wm8350->wdt.pdev));
> +
> return 0;
>
> err:
> @@ -1247,8 +1256,13 @@ void wm8350_device_exit(struct wm8350 *wm8350)
> int i;
>
> for (i = 0; i < ARRAY_SIZE(wm8350->pmic.pdev); i++)
> - if (wm8350->pmic.pdev[i] != NULL)
> - platform_device_unregister(wm8350->pmic.pdev[i]);
> + platform_device_unregister(wm8350->pmic.pdev[i]);
> +
> + platform_device_unregister(wm8350->wdt.pdev);
> + platform_device_unregister(wm8350->rtc.pdev);
> + platform_device_unregister(wm8350->power.pdev);
> + platform_device_unregister(wm8350->gpio.pdev);
> + platform_device_unregister(wm8350->codec.pdev);
>
> free_irq(wm8350->chip_irq, wm8350);
> flush_work(&wm8350->irq_work);
> diff --git a/include/linux/mfd/wm8350/audio.h b/include/linux/mfd/wm8350/audio.h
> index 43342f7..217bb22 100644
> --- a/include/linux/mfd/wm8350/audio.h
> +++ b/include/linux/mfd/wm8350/audio.h
> @@ -13,6 +13,8 @@
> #ifndef __LINUX_MFD_WM8350_AUDIO_H_
> #define __LINUX_MFD_WM8350_AUDIO_H_
>
> +#include <linux/platform_device.h>
> +
> #define WM8350_CLOCK_CONTROL_1 0x28
> #define WM8350_CLOCK_CONTROL_2 0x29
> #define WM8350_FLL_CONTROL_1 0x2A
> @@ -589,4 +591,8 @@
> #define WM8350_IRQ_CODEC_MICSCD 41
> #define WM8350_IRQ_CODEC_MICD 42
>
> +struct wm8350_codec {
> + struct platform_device *pdev;
> +};
> +
> #endif
> diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h
> index 348101c..6ebf97f 100644
> --- a/include/linux/mfd/wm8350/core.h
> +++ b/include/linux/mfd/wm8350/core.h
> @@ -17,7 +17,12 @@
> #include <linux/mutex.h>
> #include <linux/workqueue.h>
>
> +#include <linux/mfd/wm8350/audio.h>
> +#include <linux/mfd/wm8350/gpio.h>
> #include <linux/mfd/wm8350/pmic.h>
> +#include <linux/mfd/wm8350/rtc.h>
> +#include <linux/mfd/wm8350/supply.h>
> +#include <linux/mfd/wm8350/wdt.h>
>
> /*
> * Register values.
> @@ -574,7 +579,12 @@ struct wm8350 {
> int chip_irq;
>
> /* Client devices */
> + struct wm8350_codec codec;
> + struct wm8350_gpio gpio;
> struct wm8350_pmic pmic;
> + struct wm8350_power power;
> + struct wm8350_rtc rtc;
> + struct wm8350_wdt wdt;
> };
>
> /**
> diff --git a/include/linux/mfd/wm8350/gpio.h b/include/linux/mfd/wm8350/gpio.h
> index c6cd2ca..ed91e8f 100644
> --- a/include/linux/mfd/wm8350/gpio.h
> +++ b/include/linux/mfd/wm8350/gpio.h
> @@ -13,6 +13,8 @@
> #ifndef __LINUX_MFD_WM8350_GPIO_H_
> #define __LINUX_MFD_WM8350_GPIO_H_
>
> +#include <linux/platform_device.h>
> +
> /*
> * GPIO Registers.
> */
> @@ -328,6 +330,10 @@ struct wm8350;
> int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
> int pol, int pull, int invert, int debounce);
>
> +struct wm8350_gpio {
> + struct platform_device *pdev;
> +};
> +
> /*
> * GPIO Interrupts
> */
> diff --git a/include/linux/mfd/wm8350/rtc.h b/include/linux/mfd/wm8350/rtc.h
> index cb337ea..dfda69e 100644
> --- a/include/linux/mfd/wm8350/rtc.h
> +++ b/include/linux/mfd/wm8350/rtc.h
> @@ -12,6 +12,8 @@
> #ifndef __LINUX_MFD_WM8350_RTC_H
> #define __LINUX_MFD_WM8350_RTC_H
>
> +#include <linux/platform_device.h>
> +
> /*
> * Register values.
> */
> @@ -257,4 +259,8 @@
> #define WM8350_IRQ_RTC_SEC 8
> #define WM8350_IRQ_RTC_ALM 9
>
> +struct wm8350_rtc {
> + struct platform_device *pdev;
> +};
> +
> #endif
> diff --git a/include/linux/mfd/wm8350/supply.h b/include/linux/mfd/wm8350/supply.h
> index f1d4317..1c8f3cd 100644
> --- a/include/linux/mfd/wm8350/supply.h
> +++ b/include/linux/mfd/wm8350/supply.h
> @@ -13,6 +13,8 @@
> #ifndef __LINUX_MFD_WM8350_SUPPLY_H_
> #define __LINUX_MFD_WM8350_SUPPLY_H_
>
> +#include <linux/platform_device.h>
> +
> /*
> * Charger registers
> */
> @@ -102,4 +104,8 @@
> #define WM8350_IRQ_EXT_WALL_FB 37
> #define WM8350_IRQ_EXT_BAT_FB 38
>
> +struct wm8350_power {
> + struct platform_device *pdev;
> +};
> +
> #endif
> diff --git a/include/linux/mfd/wm8350/wdt.h b/include/linux/mfd/wm8350/wdt.h
> index 72fc9f5..f6135b5 100644
> --- a/include/linux/mfd/wm8350/wdt.h
> +++ b/include/linux/mfd/wm8350/wdt.h
> @@ -1,7 +1,7 @@
> /*
> * wdt.h -- Watchdog Driver for Wolfson WM8350 PMIC
> *
> - * Copyright 2007 Wolfson Microelectronics PLC
> + * Copyright 2007, 2008 Wolfson Microelectronics PLC
> *
> * This program is free software; you can redistribute it and/or modify it
> * under the terms of the GNU General Public License as published by the
> @@ -12,6 +12,8 @@
> #ifndef __LINUX_MFD_WM8350_WDT_H_
> #define __LINUX_MFD_WM8350_WDT_H_
>
> +#include <linux/platform_device.h>
> +
> #define WM8350_WDOG_HIB_MODE 0x0080
> #define WM8350_WDOG_DEBUG 0x0040
> #define WM8350_WDOG_MODE_MASK 0x0030
> @@ -19,4 +21,8 @@
>
> #define WM8350_IRQ_SYS_WDOG_TO 24
>
> +struct wm8350_wdt {
> + struct platform_device *pdev;
> +};
> +
> #endif
> --
> 1.5.6.5
>
--
Intel Open Source Technology Centre
http://oss.intel.com/