All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.