Skip to content

Commit

Permalink
mfd: wm8994: Store platform data in device
Browse files Browse the repository at this point in the history
This is better style as platform data is supposed to be discardable after
init (though hotplug usually prevents this) and will ease implementation
of device tree property bindings.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
  • Loading branch information
Mark Brown committed Nov 23, 2012
1 parent cd22000 commit a8a8fc2
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 16 deletions.
35 changes: 19 additions & 16 deletions drivers/mfd/wm8994-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -401,13 +401,19 @@ static const __devinitconst struct reg_default wm1811_reva_patch[] = {
*/
static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq)
{
struct wm8994_pdata *pdata = wm8994->dev->platform_data;
struct wm8994_pdata *pdata;
struct regmap_config *regmap_config;
const struct reg_default *regmap_patch = NULL;
const char *devname;
int ret, i, patch_regs;
int pulls = 0;

if (dev_get_platdata(wm8994->dev)) {
pdata = dev_get_platdata(wm8994->dev);
wm8994->pdata = *pdata;
}
pdata = &wm8994->pdata;

dev_set_drvdata(wm8994->dev, wm8994);

/* Add the on-chip regulators first for bootstrapping */
Expand Down Expand Up @@ -604,24 +610,21 @@ static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq)
}
}

if (pdata) {
wm8994->irq_base = pdata->irq_base;
wm8994->gpio_base = pdata->gpio_base;

/* GPIO configuration is only applied if it's non-zero */
for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
if (pdata->gpio_defaults[i]) {
wm8994_set_bits(wm8994, WM8994_GPIO_1 + i,
0xffff,
pdata->gpio_defaults[i]);
}
wm8994->irq_base = pdata->irq_base;
wm8994->gpio_base = pdata->gpio_base;

/* GPIO configuration is only applied if it's non-zero */
for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
if (pdata->gpio_defaults[i]) {
wm8994_set_bits(wm8994, WM8994_GPIO_1 + i,
0xffff, pdata->gpio_defaults[i]);
}
}

wm8994->ldo_ena_always_driven = pdata->ldo_ena_always_driven;
wm8994->ldo_ena_always_driven = pdata->ldo_ena_always_driven;

if (pdata->spkmode_pu)
pulls |= WM8994_SPKMODE_PU;
}
if (pdata->spkmode_pu)
pulls |= WM8994_SPKMODE_PU;

/* Disable unneeded pulls */
wm8994_set_bits(wm8994, WM8994_PULL_CONTROL_2,
Expand Down
4 changes: 4 additions & 0 deletions include/linux/mfd/wm8994/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include <linux/interrupt.h>
#include <linux/regmap.h>

#include <linux/mfd/wm8994/pdata.h>

enum wm8994_type {
WM8994 = 0,
WM8958 = 1,
Expand Down Expand Up @@ -55,6 +57,8 @@ struct regulator_bulk_data;
struct wm8994 {
struct mutex irq_lock;

struct wm8994_pdata pdata;

enum wm8994_type type;
int revision;
int cust_id;
Expand Down

0 comments on commit a8a8fc2

Please sign in to comment.