* [PATCH 1/2] ASoC: Refactor WM8741 regulator handling into CODEC generic code
@ 2011-08-03 8:47 Mark Brown
2011-08-03 8:47 ` [PATCH 2/2] ASoC: Add SPI support for WM8741 Mark Brown
0 siblings, 1 reply; 5+ messages in thread
From: Mark Brown @ 2011-08-03 8:47 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
No meaningful runtime impact but is more in line with other CODECs and
will support further work.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8741.c | 74 ++++++++++++++++++++++++++------------------
1 files changed, 44 insertions(+), 30 deletions(-)
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index 3def27c..d4bfffd 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -422,17 +422,35 @@ static int wm8741_probe(struct snd_soc_codec *codec)
{
struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
int ret = 0;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(wm8741->supplies); i++)
+ wm8741->supplies[i].supply = wm8741_supply_names[i];
+
+ ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8741->supplies),
+ wm8741->supplies);
+ if (ret != 0) {
+ dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
+ goto err;
+ }
+
+ ret = regulator_bulk_enable(ARRAY_SIZE(wm8741->supplies),
+ wm8741->supplies);
+ if (ret != 0) {
+ dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
+ goto err_get;
+ }
ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8741->control_type);
if (ret != 0) {
dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
- return ret;
+ goto err_enable;
}
ret = wm8741_reset(codec);
if (ret < 0) {
dev_err(codec->dev, "Failed to issue reset\n");
- return ret;
+ goto err_enable;
}
/* Change some default settings - latch VU */
@@ -451,10 +469,28 @@ static int wm8741_probe(struct snd_soc_codec *codec)
dev_dbg(codec->dev, "Successful registration\n");
return ret;
+
+err_enable:
+ regulator_bulk_disable(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
+err_get:
+ regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
+err:
+ return ret;
+}
+
+static int wm8741_remove(struct snd_soc_codec *codec)
+{
+ struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
+
+ regulator_bulk_disable(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
+ regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
+
+ return 0;
}
static struct snd_soc_codec_driver soc_codec_dev_wm8741 = {
.probe = wm8741_probe,
+ .remove = wm8741_remove,
.resume = wm8741_resume,
.reg_cache_size = ARRAY_SIZE(wm8741_reg_defaults),
.reg_word_size = sizeof(u16),
@@ -466,43 +502,22 @@ static int wm8741_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id)
{
struct wm8741_priv *wm8741;
- int ret, i;
+ int ret;
wm8741 = kzalloc(sizeof(struct wm8741_priv), GFP_KERNEL);
if (wm8741 == NULL)
return -ENOMEM;
- for (i = 0; i < ARRAY_SIZE(wm8741->supplies); i++)
- wm8741->supplies[i].supply = wm8741_supply_names[i];
-
- ret = regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8741->supplies),
- wm8741->supplies);
- if (ret != 0) {
- dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
- goto err;
- }
-
- ret = regulator_bulk_enable(ARRAY_SIZE(wm8741->supplies),
- wm8741->supplies);
- if (ret != 0) {
- dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
- goto err_get;
- }
-
i2c_set_clientdata(i2c, wm8741);
wm8741->control_type = SND_SOC_I2C;
- ret = snd_soc_register_codec(&i2c->dev,
- &soc_codec_dev_wm8741, &wm8741_dai, 1);
- if (ret < 0)
- goto err_enable;
- return ret;
+ ret = snd_soc_register_codec(&i2c->dev,
+ &soc_codec_dev_wm8741, &wm8741_dai, 1);
+ if (ret != 0)
+ goto err;
-err_enable:
- regulator_bulk_disable(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
+ return ret;
-err_get:
- regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
err:
kfree(wm8741);
return ret;
@@ -513,7 +528,6 @@ static int wm8741_i2c_remove(struct i2c_client *client)
struct wm8741_priv *wm8741 = i2c_get_clientdata(client);
snd_soc_unregister_codec(&client->dev);
- regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
kfree(i2c_get_clientdata(client));
return 0;
}
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] ASoC: Add SPI support for WM8741
2011-08-03 8:47 [PATCH 1/2] ASoC: Refactor WM8741 regulator handling into CODEC generic code Mark Brown
@ 2011-08-03 8:47 ` Mark Brown
2011-08-09 12:28 ` Liam Girdwood
0 siblings, 1 reply; 5+ messages in thread
From: Mark Brown @ 2011-08-03 8:47 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8741.c | 48 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index d4bfffd..c1b6e91 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -17,6 +17,7 @@
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/i2c.h>
+#include <linux/spi/spi.h>
#include <linux/platform_device.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
@@ -549,6 +550,43 @@ static struct i2c_driver wm8741_i2c_driver = {
};
#endif
+#if defined(CONFIG_SPI_MASTER)
+static int __devinit wm8741_spi_probe(struct spi_device *spi)
+{
+ struct wm8741_priv *wm8741;
+ int ret;
+
+ wm8741 = kzalloc(sizeof(struct wm8741_priv), GFP_KERNEL);
+ if (wm8741 == NULL)
+ return -ENOMEM;
+
+ wm8741->control_type = SND_SOC_SPI;
+ spi_set_drvdata(spi, wm8741);
+
+ ret = snd_soc_register_codec(&spi->dev,
+ &soc_codec_dev_wm8741, &wm8741_dai, 1);
+ if (ret < 0)
+ kfree(wm8741);
+ return ret;
+}
+
+static int __devexit wm8741_spi_remove(struct spi_device *spi)
+{
+ snd_soc_unregister_codec(&spi->dev);
+ kfree(spi_get_drvdata(spi));
+ return 0;
+}
+
+static struct spi_driver wm8741_spi_driver = {
+ .driver = {
+ .name = "wm8741",
+ .owner = THIS_MODULE,
+ },
+ .probe = wm8741_spi_probe,
+ .remove = __devexit_p(wm8741_spi_remove),
+};
+#endif /* CONFIG_SPI_MASTER */
+
static int __init wm8741_modinit(void)
{
int ret = 0;
@@ -558,6 +596,13 @@ static int __init wm8741_modinit(void)
if (ret != 0)
pr_err("Failed to register WM8741 I2C driver: %d\n", ret);
#endif
+#if defined(CONFIG_SPI_MASTER)
+ ret = spi_register_driver(&wm8741_spi_driver);
+ if (ret != 0) {
+ printk(KERN_ERR "Failed to register wm8741 SPI driver: %d\n",
+ ret);
+ }
+#endif
return ret;
}
@@ -565,6 +610,9 @@ module_init(wm8741_modinit);
static void __exit wm8741_exit(void)
{
+#if defined(CONFIG_SPI_MASTER)
+ spi_unregister_driver(&wm8741_spi_driver);
+#endif
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
i2c_del_driver(&wm8741_i2c_driver);
#endif
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] ASoC: Add SPI support for WM8741
2011-08-03 8:47 ` [PATCH 2/2] ASoC: Add SPI support for WM8741 Mark Brown
@ 2011-08-09 12:28 ` Liam Girdwood
2011-08-09 15:08 ` Mark Brown
0 siblings, 1 reply; 5+ messages in thread
From: Liam Girdwood @ 2011-08-09 12:28 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, patches
On 03/08/11 09:47, Mark Brown wrote:
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
Could not see 1/2
but 2/2
Acked-by: Liam Girdwood <lrg@ti.com>
> sound/soc/codecs/wm8741.c | 48 +++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 48 insertions(+), 0 deletions(-)
>
> diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
> index d4bfffd..c1b6e91 100644
> --- a/sound/soc/codecs/wm8741.c
> +++ b/sound/soc/codecs/wm8741.c
> @@ -17,6 +17,7 @@
> #include <linux/delay.h>
> #include <linux/pm.h>
> #include <linux/i2c.h>
> +#include <linux/spi/spi.h>
> #include <linux/platform_device.h>
> #include <linux/regulator/consumer.h>
> #include <linux/slab.h>
> @@ -549,6 +550,43 @@ static struct i2c_driver wm8741_i2c_driver = {
> };
> #endif
>
> +#if defined(CONFIG_SPI_MASTER)
> +static int __devinit wm8741_spi_probe(struct spi_device *spi)
> +{
> + struct wm8741_priv *wm8741;
> + int ret;
> +
> + wm8741 = kzalloc(sizeof(struct wm8741_priv), GFP_KERNEL);
> + if (wm8741 == NULL)
> + return -ENOMEM;
> +
> + wm8741->control_type = SND_SOC_SPI;
> + spi_set_drvdata(spi, wm8741);
> +
> + ret = snd_soc_register_codec(&spi->dev,
> + &soc_codec_dev_wm8741, &wm8741_dai, 1);
> + if (ret < 0)
> + kfree(wm8741);
> + return ret;
> +}
> +
> +static int __devexit wm8741_spi_remove(struct spi_device *spi)
> +{
> + snd_soc_unregister_codec(&spi->dev);
> + kfree(spi_get_drvdata(spi));
> + return 0;
> +}
> +
> +static struct spi_driver wm8741_spi_driver = {
> + .driver = {
> + .name = "wm8741",
> + .owner = THIS_MODULE,
> + },
> + .probe = wm8741_spi_probe,
> + .remove = __devexit_p(wm8741_spi_remove),
> +};
> +#endif /* CONFIG_SPI_MASTER */
> +
> static int __init wm8741_modinit(void)
> {
> int ret = 0;
> @@ -558,6 +596,13 @@ static int __init wm8741_modinit(void)
> if (ret != 0)
> pr_err("Failed to register WM8741 I2C driver: %d\n", ret);
> #endif
> +#if defined(CONFIG_SPI_MASTER)
> + ret = spi_register_driver(&wm8741_spi_driver);
> + if (ret != 0) {
> + printk(KERN_ERR "Failed to register wm8741 SPI driver: %d\n",
> + ret);
> + }
> +#endif
>
> return ret;
> }
> @@ -565,6 +610,9 @@ module_init(wm8741_modinit);
>
> static void __exit wm8741_exit(void)
> {
> +#if defined(CONFIG_SPI_MASTER)
> + spi_unregister_driver(&wm8741_spi_driver);
> +#endif
> #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
> i2c_del_driver(&wm8741_i2c_driver);
> #endif
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] ASoC: Add SPI support for WM8741
2011-08-09 12:28 ` Liam Girdwood
@ 2011-08-09 15:08 ` Mark Brown
2011-08-09 15:29 ` Liam Girdwood
0 siblings, 1 reply; 5+ messages in thread
From: Mark Brown @ 2011-08-09 15:08 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches
On Tue, Aug 09, 2011 at 01:28:58PM +0100, Liam Girdwood wrote:
> On 03/08/11 09:47, Mark Brown wrote:
> > Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> > ---
> Could not see 1/2
> but 2/2
> Acked-by: Liam Girdwood <lrg@ti.com>
They're both visible on the list:
http://permalink.gmane.org/gmane.linux.alsa.devel/87750
Better get your IT guys to check their setup...
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] ASoC: Add SPI support for WM8741
2011-08-09 15:08 ` Mark Brown
@ 2011-08-09 15:29 ` Liam Girdwood
0 siblings, 0 replies; 5+ messages in thread
From: Liam Girdwood @ 2011-08-09 15:29 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, patches
On 09/08/11 16:08, Mark Brown wrote:
> On Tue, Aug 09, 2011 at 01:28:58PM +0100, Liam Girdwood wrote:
>> On 03/08/11 09:47, Mark Brown wrote:
>>> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
>>> ---
>
>> Could not see 1/2
>
>> but 2/2
>
>> Acked-by: Liam Girdwood <lrg@ti.com>
>
> They're both visible on the list:
>
> http://permalink.gmane.org/gmane.linux.alsa.devel/87750
>
> Better get your IT guys to check their setup...
Ah, or maybe my eyesight ;)
Both Acked.
Liam
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-08-09 15:29 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-03 8:47 [PATCH 1/2] ASoC: Refactor WM8741 regulator handling into CODEC generic code Mark Brown
2011-08-03 8:47 ` [PATCH 2/2] ASoC: Add SPI support for WM8741 Mark Brown
2011-08-09 12:28 ` Liam Girdwood
2011-08-09 15:08 ` Mark Brown
2011-08-09 15:29 ` Liam Girdwood
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.