diff options
| author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2008-10-10 10:58:13 -0400 |
|---|---|---|
| committer | Liam Girdwood <lrg@slimlogic.co.uk> | 2008-10-13 16:51:56 -0400 |
| commit | bcdd4efc1b6b8b98f30e127115f4bc7bbcd6f7ce (patch) | |
| tree | 5f58a36bcfefb07cc9a44faf38c91b8bc7e3c1c1 | |
| parent | 0e7203933224cbe09b5a9125f55b177b8dd5b1bd (diff) | |
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>
| -rw-r--r-- | drivers/mfd/wm8350-core.c | 12 | ||||
| -rw-r--r-- | drivers/mfd/wm8350-i2c.c | 2 | ||||
| -rw-r--r-- | include/linux/mfd/wm8350/core.h | 14 |
3 files changed, 25 insertions, 3 deletions
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c index c7552c0b7797..071834ba6954 100644 --- a/drivers/mfd/wm8350-core.c +++ b/drivers/mfd/wm8350-core.c | |||
| @@ -388,7 +388,8 @@ out: | |||
| 388 | } | 388 | } |
| 389 | EXPORT_SYMBOL_GPL(wm8350_create_cache); | 389 | EXPORT_SYMBOL_GPL(wm8350_create_cache); |
| 390 | 390 | ||
| 391 | int wm8350_device_init(struct wm8350 *wm8350) | 391 | int wm8350_device_init(struct wm8350 *wm8350, |
| 392 | struct wm8350_platform_data *pdata) | ||
| 392 | { | 393 | { |
| 393 | int ret = -EINVAL; | 394 | int ret = -EINVAL; |
| 394 | u16 id1, id2, mask, mode; | 395 | u16 id1, id2, mask, mode; |
| @@ -439,6 +440,15 @@ int wm8350_device_init(struct wm8350 *wm8350) | |||
| 439 | return ret; | 440 | return ret; |
| 440 | } | 441 | } |
| 441 | 442 | ||
| 443 | if (pdata->init) { | ||
| 444 | ret = pdata->init(wm8350); | ||
| 445 | if (ret != 0) { | ||
| 446 | dev_err(wm8350->dev, "Platform init() failed: %d\n", | ||
| 447 | ret); | ||
| 448 | goto err; | ||
| 449 | } | ||
| 450 | } | ||
| 451 | |||
| 442 | return 0; | 452 | return 0; |
| 443 | 453 | ||
| 444 | err: | 454 | err: |
diff --git a/drivers/mfd/wm8350-i2c.c b/drivers/mfd/wm8350-i2c.c index 2b0569cf9512..245b790961aa 100644 --- a/drivers/mfd/wm8350-i2c.c +++ b/drivers/mfd/wm8350-i2c.c | |||
| @@ -65,7 +65,7 @@ static int wm8350_i2c_probe(struct i2c_client *i2c, | |||
| 65 | wm8350->read_dev = wm8350_i2c_read_device; | 65 | wm8350->read_dev = wm8350_i2c_read_device; |
| 66 | wm8350->write_dev = wm8350_i2c_write_device; | 66 | wm8350->write_dev = wm8350_i2c_write_device; |
| 67 | 67 | ||
| 68 | ret = wm8350_device_init(wm8350); | 68 | ret = wm8350_device_init(wm8350, i2c->dev.platform_data); |
| 69 | if (ret < 0) | 69 | if (ret < 0) |
| 70 | goto err; | 70 | goto err; |
| 71 | 71 | ||
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h index 94778c1669dc..8f2beae6278e 100644 --- a/include/linux/mfd/wm8350/core.h +++ b/include/linux/mfd/wm8350/core.h | |||
| @@ -564,10 +564,22 @@ struct wm8350 { | |||
| 564 | u16 *reg_cache; | 564 | u16 *reg_cache; |
| 565 | }; | 565 | }; |
| 566 | 566 | ||
| 567 | /** | ||
| 568 | * Data to be supplied by the platform to initialise the WM8350. | ||
| 569 | * | ||
| 570 | * @init: Function called during driver initialisation. Should be | ||
| 571 | * used by the platform to configure GPIO functions and similar. | ||
| 572 | */ | ||
| 573 | struct wm8350_platform_data { | ||
| 574 | int (*init)(struct wm8350 *wm8350); | ||
| 575 | }; | ||
| 576 | |||
| 577 | |||
| 567 | /* | 578 | /* |
| 568 | * WM8350 device initialisation and exit. | 579 | * WM8350 device initialisation and exit. |
| 569 | */ | 580 | */ |
| 570 | int wm8350_device_init(struct wm8350 *wm8350); | 581 | int wm8350_device_init(struct wm8350 *wm8350, |
| 582 | struct wm8350_platform_data *pdata); | ||
| 571 | void wm8350_device_exit(struct wm8350 *wm8350); | 583 | void wm8350_device_exit(struct wm8350 *wm8350); |
| 572 | 584 | ||
| 573 | /* | 585 | /* |
