forked from luck/tmp_suning_uos_patched
mfd: Add initialisation callback for WM8350
Some functions of the WM8350 require board-specific initialisation on startup. Provide a callback to the WM8350 driver in platform data for platforms to use to configure the chip. Use of a callback allows platforms to control the ordering of initialisation which can be important. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Samuel Ortiz <sameo@openedhand.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
This commit is contained in:
parent
0e72039332
commit
bcdd4efc1b
@ -388,7 +388,8 @@ static int wm8350_create_cache(struct wm8350 *wm8350, int mode)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wm8350_create_cache);
|
||||
|
||||
int wm8350_device_init(struct wm8350 *wm8350)
|
||||
int wm8350_device_init(struct wm8350 *wm8350,
|
||||
struct wm8350_platform_data *pdata)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
u16 id1, id2, mask, mode;
|
||||
@ -439,6 +440,15 @@ int wm8350_device_init(struct wm8350 *wm8350)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pdata->init) {
|
||||
ret = pdata->init(wm8350);
|
||||
if (ret != 0) {
|
||||
dev_err(wm8350->dev, "Platform init() failed: %d\n",
|
||||
ret);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
@ -65,7 +65,7 @@ static int wm8350_i2c_probe(struct i2c_client *i2c,
|
||||
wm8350->read_dev = wm8350_i2c_read_device;
|
||||
wm8350->write_dev = wm8350_i2c_write_device;
|
||||
|
||||
ret = wm8350_device_init(wm8350);
|
||||
ret = wm8350_device_init(wm8350, i2c->dev.platform_data);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
|
@ -564,10 +564,22 @@ struct wm8350 {
|
||||
u16 *reg_cache;
|
||||
};
|
||||
|
||||
/**
|
||||
* Data to be supplied by the platform to initialise the WM8350.
|
||||
*
|
||||
* @init: Function called during driver initialisation. Should be
|
||||
* used by the platform to configure GPIO functions and similar.
|
||||
*/
|
||||
struct wm8350_platform_data {
|
||||
int (*init)(struct wm8350 *wm8350);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* WM8350 device initialisation and exit.
|
||||
*/
|
||||
int wm8350_device_init(struct wm8350 *wm8350);
|
||||
int wm8350_device_init(struct wm8350 *wm8350,
|
||||
struct wm8350_platform_data *pdata);
|
||||
void wm8350_device_exit(struct wm8350 *wm8350);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user