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);
|
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;
|
int ret = -EINVAL;
|
||||||
u16 id1, id2, mask, mode;
|
u16 id1, id2, mask, mode;
|
||||||
@ -439,6 +440,15 @@ int wm8350_device_init(struct wm8350 *wm8350)
|
|||||||
return ret;
|
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;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
@ -65,7 +65,7 @@ static int wm8350_i2c_probe(struct i2c_client *i2c,
|
|||||||
wm8350->read_dev = wm8350_i2c_read_device;
|
wm8350->read_dev = wm8350_i2c_read_device;
|
||||||
wm8350->write_dev = wm8350_i2c_write_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)
|
if (ret < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
@ -564,10 +564,22 @@ struct wm8350 {
|
|||||||
u16 *reg_cache;
|
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.
|
* 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);
|
void wm8350_device_exit(struct wm8350 *wm8350);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user