alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] snd-cs8427: separate HW initialization
@ 2014-04-02 20:35 Ondrej Zary
  2014-04-02 20:35 ` [PATCH 2/2] snd-ice1712: Add S/PDIF suspend support for ICE1712-based M-Audio cards Ondrej Zary
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Ondrej Zary @ 2014-04-02 20:35 UTC (permalink / raw)
  To: alsa-devel

Separate HW initialization from device creation.
This is needed for suspend/resume support.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 include/sound/cs8427.h |    1 +
 sound/i2c/cs8427.c     |   57 ++++++++++++++++++++++++++++++++----------------
 2 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/include/sound/cs8427.h b/include/sound/cs8427.h
index f862cff..0b6a187 100644
--- a/include/sound/cs8427.h
+++ b/include/sound/cs8427.h
@@ -188,6 +188,7 @@
 
 struct snd_pcm_substream;
 
+int snd_cs8427_init(struct snd_i2c_bus *bus, struct snd_i2c_device *device);
 int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr,
 		      unsigned int reset_timeout, struct snd_i2c_device **r_cs8427);
 int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg,
diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
index 6c2dc38..d9c15d9 100644
--- a/sound/i2c/cs8427.c
+++ b/sound/i2c/cs8427.c
@@ -150,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device *device)
 	kfree(device->private_data);
 }
 
-int snd_cs8427_create(struct snd_i2c_bus *bus,
-		      unsigned char addr,
-		      unsigned int reset_timeout,
-		      struct snd_i2c_device **r_cs8427)
+int snd_cs8427_init(struct snd_i2c_bus *bus,
+		    struct snd_i2c_device *device)
 {
 	static unsigned char initvals1[] = {
 	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC,
@@ -200,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	     Inhibit E->F transfers. */
 	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,
 	};
+	struct cs8427 *chip = device->private_data;
 	int err;
-	struct cs8427 *chip;
-	struct snd_i2c_device *device;
 	unsigned char buf[24];
 
-	if ((err = snd_i2c_device_create(bus, "CS8427",
-					 CS8427_ADDR | (addr & 7),
-					 &device)) < 0)
-		return err;
-	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
-	if (chip == NULL) {
-	      	snd_i2c_device_free(device);
-		return -ENOMEM;
-	}
-	device->private_free = snd_cs8427_free;
-	
 	snd_i2c_lock(bus);
 	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
 	if (err != CS8427_VER8427A) {
@@ -264,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	snd_i2c_unlock(bus);
 
 	/* turn on run bit and rock'n'roll */
+	snd_cs8427_reset(device);
+
+	return 0;
+
+      __fail:
+	snd_i2c_unlock(bus);
+
+	return err;
+}
+
+EXPORT_SYMBOL(snd_cs8427_init);
+
+int snd_cs8427_create(struct snd_i2c_bus *bus,
+		      unsigned char addr,
+		      unsigned int reset_timeout,
+		      struct snd_i2c_device **r_cs8427)
+{
+	int err;
+	struct cs8427 *chip;
+	struct snd_i2c_device *device;
+
+	if ((err = snd_i2c_device_create(bus, "CS8427",
+					 CS8427_ADDR | (addr & 7),
+					 &device)) < 0)
+		return err;
+	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
+	if (chip == NULL) {
+		snd_i2c_device_free(device);
+		return -ENOMEM;
+	}
+	device->private_free = snd_cs8427_free;
+
 	if (reset_timeout < 1)
 		reset_timeout = 1;
 	chip->reset_timeout = reset_timeout;
-	snd_cs8427_reset(device);
+
+	if ((err = snd_cs8427_init(bus, device)))
+		goto __fail;
 
 #if 0	// it's nice for read tests
 	{
@@ -286,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	return 0;
 
       __fail:
-      	snd_i2c_unlock(bus);
       	snd_i2c_device_free(device);
       	return err < 0 ? err : -EIO;
 }
-- 
Ondrej Zary

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] snd-ice1712: Add S/PDIF suspend support for ICE1712-based M-Audio cards
  2014-04-02 20:35 [PATCH 1/2] snd-cs8427: separate HW initialization Ondrej Zary
@ 2014-04-02 20:35 ` Ondrej Zary
  2014-04-03  6:22 ` [PATCH 1/2] snd-cs8427: separate HW initialization Takashi Iwai
  2014-04-03  7:13 ` [PATCH v2] " Ondrej Zary
  2 siblings, 0 replies; 7+ messages in thread
From: Ondrej Zary @ 2014-04-02 20:35 UTC (permalink / raw)
  To: alsa-devel

Add S/PDIF suspend support for M-Audio cards based on ICE1712 chip.
Tested (playback only) on Audiophile 24/96. Capture will probably not work.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 sound/pci/ice1712/delta.c |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/sound/pci/ice1712/delta.c b/sound/pci/ice1712/delta.c
index c19ae72..3764a27 100644
--- a/sound/pci/ice1712/delta.c
+++ b/sound/pci/ice1712/delta.c
@@ -579,6 +579,28 @@ static struct snd_ak4xxx_private akm_vx442_priv = {
 static int snd_ice1712_delta_resume(struct snd_ice1712 *ice)
 {
 	unsigned char akm_backup[AK4XXX_IMAGE_SIZE];
+
+	/* init spdif */
+	switch (ice->eeprom.subvendor) {
+	case ICE1712_SUBDEVICE_AUDIOPHILE:
+	case ICE1712_SUBDEVICE_DELTA410:
+	case ICE1712_SUBDEVICE_DELTA1010E:
+	case ICE1712_SUBDEVICE_DELTA1010LT:
+	case ICE1712_SUBDEVICE_VX442:
+	case ICE1712_SUBDEVICE_DELTA66E:
+		snd_cs8427_init(ice->i2c, ice->cs8427);
+		break;
+	case ICE1712_SUBDEVICE_DELTA1010:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
+		/* nothing */
+		break;
+	case ICE1712_SUBDEVICE_DELTADIO2496:
+	case ICE1712_SUBDEVICE_DELTA66:
+		/* Set spdif defaults */
+		snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits);
+		break;
+	}
+
 	/* init codec and restore registers */
 	if (ice->akm_codecs) {
 		memcpy(akm_backup, ice->akm->images, sizeof(akm_backup));
-- 
Ondrej Zary

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] snd-cs8427: separate HW initialization
  2014-04-02 20:35 [PATCH 1/2] snd-cs8427: separate HW initialization Ondrej Zary
  2014-04-02 20:35 ` [PATCH 2/2] snd-ice1712: Add S/PDIF suspend support for ICE1712-based M-Audio cards Ondrej Zary
@ 2014-04-03  6:22 ` Takashi Iwai
  2014-04-03  7:13 ` [PATCH v2] " Ondrej Zary
  2 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2014-04-03  6:22 UTC (permalink / raw)
  To: Ondrej Zary; +Cc: alsa-devel

At Wed,  2 Apr 2014 22:35:32 +0200,
Ondrej Zary wrote:
> 
> Separate HW initialization from device creation.
> This is needed for suspend/resume support.
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

Could you make your patch checkpatch-clean?


thanks,

Takashi

> ---
>  include/sound/cs8427.h |    1 +
>  sound/i2c/cs8427.c     |   57 ++++++++++++++++++++++++++++++++--------------
--
>  2 files changed, 39 insertions(+), 19 deletions(-)
> 
> diff --git a/include/sound/cs8427.h b/include/sound/cs8427.h
> index f862cff..0b6a187 100644
> --- a/include/sound/cs8427.h
> +++ b/include/sound/cs8427.h
> @@ -188,6 +188,7 @@
>  
>  struct snd_pcm_substream;
>  
> +int snd_cs8427_init(struct snd_i2c_bus *bus, struct snd_i2c_device *device);
>  int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr,
>  		      unsigned int reset_timeout, struct snd_i2c_device **r_cs8427);
>  int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg,
> diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
> index 6c2dc38..d9c15d9 100644
> --- a/sound/i2c/cs8427.c
> +++ b/sound/i2c/cs8427.c
> @@ -150,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device *device)
>  	kfree(device->private_data);
>  }
>  
> -int snd_cs8427_create(struct snd_i2c_bus *bus,
> -		      unsigned char addr,
> -		      unsigned int reset_timeout,
> -		      struct snd_i2c_device **r_cs8427)
> +int snd_cs8427_init(struct snd_i2c_bus *bus,
> +		    struct snd_i2c_device *device)
>  {
>  	static unsigned char initvals1[] = {
>  	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC,
> @@ -200,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	     Inhibit E->F transfers. */
>  	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,
>  	};
> +	struct cs8427 *chip = device->private_data;
>  	int err;
> -	struct cs8427 *chip;
> -	struct snd_i2c_device *device;
>  	unsigned char buf[24];
>  
> -	if ((err = snd_i2c_device_create(bus, "CS8427",
> -					 CS8427_ADDR | (addr & 7),
> -					 &device)) < 0)
> -		return err;
> -	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
> -	if (chip == NULL) {
> -	      	snd_i2c_device_free(device);
> -		return -ENOMEM;
> -	}
> -	device->private_free = snd_cs8427_free;
> -	
>  	snd_i2c_lock(bus);
>  	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
>  	if (err != CS8427_VER8427A) {
> @@ -264,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	snd_i2c_unlock(bus);
>  
>  	/* turn on run bit and rock'n'roll */
> +	snd_cs8427_reset(device);
> +
> +	return 0;
> +
> +      __fail:
> +	snd_i2c_unlock(bus);
> +
> +	return err;
> +}
> +
> +EXPORT_SYMBOL(snd_cs8427_init);
> +
> +int snd_cs8427_create(struct snd_i2c_bus *bus,
> +		      unsigned char addr,
> +		      unsigned int reset_timeout,
> +		      struct snd_i2c_device **r_cs8427)
> +{
> +	int err;
> +	struct cs8427 *chip;
> +	struct snd_i2c_device *device;
> +
> +	if ((err = snd_i2c_device_create(bus, "CS8427",
> +					 CS8427_ADDR | (addr & 7),
> +					 &device)) < 0)
> +		return err;
> +	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
> +	if (chip == NULL) {
> +		snd_i2c_device_free(device);
> +		return -ENOMEM;
> +	}
> +	device->private_free = snd_cs8427_free;
> +
>  	if (reset_timeout < 1)
>  		reset_timeout = 1;
>  	chip->reset_timeout = reset_timeout;
> -	snd_cs8427_reset(device);
> +
> +	if ((err = snd_cs8427_init(bus, device)))
> +		goto __fail;
>  
>  #if 0	// it's nice for read tests
>  	{
> @@ -286,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	return 0;
>  
>        __fail:
> -      	snd_i2c_unlock(bus);
>        	snd_i2c_device_free(device);
>        	return err < 0 ? err : -EIO;
>  }
> -- 
> Ondrej Zary
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] snd-cs8427: separate HW initialization
  2014-04-02 20:35 [PATCH 1/2] snd-cs8427: separate HW initialization Ondrej Zary
  2014-04-02 20:35 ` [PATCH 2/2] snd-ice1712: Add S/PDIF suspend support for ICE1712-based M-Audio cards Ondrej Zary
  2014-04-03  6:22 ` [PATCH 1/2] snd-cs8427: separate HW initialization Takashi Iwai
@ 2014-04-03  7:13 ` Ondrej Zary
  2014-04-03  9:32   ` Takashi Iwai
  2 siblings, 1 reply; 7+ messages in thread
From: Ondrej Zary @ 2014-04-03  7:13 UTC (permalink / raw)
  To: alsa-devel

Separate HW initialization from device creation.
This is needed for suspend/resume support.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 include/sound/cs8427.h |    1 +
 sound/i2c/cs8427.c     |   57 
++++++++++++++++++++++++++++++++----------------
 2 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/include/sound/cs8427.h b/include/sound/cs8427.h
index f862cff..0b6a187 100644
--- a/include/sound/cs8427.h
+++ b/include/sound/cs8427.h
@@ -188,6 +188,7 @@
 
 struct snd_pcm_substream;
 
+int snd_cs8427_init(struct snd_i2c_bus *bus, struct snd_i2c_device *device);
 int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr,
 		      unsigned int reset_timeout, struct snd_i2c_device **r_cs8427);
 int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg,
diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
index 6c2dc38..7e21621 100644
--- a/sound/i2c/cs8427.c
+++ b/sound/i2c/cs8427.c
@@ -150,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device 
*device)
 	kfree(device->private_data);
 }
 
-int snd_cs8427_create(struct snd_i2c_bus *bus,
-		      unsigned char addr,
-		      unsigned int reset_timeout,
-		      struct snd_i2c_device **r_cs8427)
+int snd_cs8427_init(struct snd_i2c_bus *bus,
+		    struct snd_i2c_device *device)
 {
 	static unsigned char initvals1[] = {
 	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC,
@@ -200,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	     Inhibit E->F transfers. */
 	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,
 	};
+	struct cs8427 *chip = device->private_data;
 	int err;
-	struct cs8427 *chip;
-	struct snd_i2c_device *device;
 	unsigned char buf[24];
 
-	if ((err = snd_i2c_device_create(bus, "CS8427",
-					 CS8427_ADDR | (addr & 7),
-					 &device)) < 0)
-		return err;
-	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
-	if (chip == NULL) {
-	      	snd_i2c_device_free(device);
-		return -ENOMEM;
-	}
-	device->private_free = snd_cs8427_free;
-	
 	snd_i2c_lock(bus);
 	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
 	if (err != CS8427_VER8427A) {
@@ -264,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	snd_i2c_unlock(bus);
 
 	/* turn on run bit and rock'n'roll */
+	snd_cs8427_reset(device);
+
+	return 0;
+
+__fail:
+	snd_i2c_unlock(bus);
+
+	return err;
+}
+EXPORT_SYMBOL(snd_cs8427_init);
+
+int snd_cs8427_create(struct snd_i2c_bus *bus,
+		      unsigned char addr,
+		      unsigned int reset_timeout,
+		      struct snd_i2c_device **r_cs8427)
+{
+	int err;
+	struct cs8427 *chip;
+	struct snd_i2c_device *device;
+
+	err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7),
+				    &device);
+	if (err < 0)
+		return err;
+	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
+	if (chip == NULL) {
+		snd_i2c_device_free(device);
+		return -ENOMEM;
+	}
+	device->private_free = snd_cs8427_free;
+
 	if (reset_timeout < 1)
 		reset_timeout = 1;
 	chip->reset_timeout = reset_timeout;
-	snd_cs8427_reset(device);
+
+	err = snd_cs8427_init(bus, device);
+	if (err)
+		goto __fail;
 
 #if 0	// it's nice for read tests
 	{
@@ -286,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	return 0;
 
       __fail:
-      	snd_i2c_unlock(bus);
       	snd_i2c_device_free(device);
       	return err < 0 ? err : -EIO;
 }
-- 
Ondrej Zary

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] snd-cs8427: separate HW initialization
  2014-04-03  7:13 ` [PATCH v2] " Ondrej Zary
@ 2014-04-03  9:32   ` Takashi Iwai
  2014-04-03 12:49     ` Ondrej Zary
  0 siblings, 1 reply; 7+ messages in thread
From: Takashi Iwai @ 2014-04-03  9:32 UTC (permalink / raw)
  To: Ondrej Zary; +Cc: alsa-devel

At Thu, 3 Apr 2014 09:13:40 +0200,
Ondrej Zary wrote:
> 
> Separate HW initialization from device creation.
> This is needed for suspend/resume support.
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

The patch isn't applicable due to broken lines.  Please fix your MUA
and resubmit the patch series.

Also, put maintainers to Cc if you want your patches to be merged.
Sending only to ML might miss my inbox accidentally.


thanks,

Takashi

> ---
>  include/sound/cs8427.h |    1 +
>  sound/i2c/cs8427.c     |   57 
> ++++++++++++++++++++++++++++++++----------------
>  2 files changed, 39 insertions(+), 19 deletions(-)
> 
> diff --git a/include/sound/cs8427.h b/include/sound/cs8427.h
> index f862cff..0b6a187 100644
> --- a/include/sound/cs8427.h
> +++ b/include/sound/cs8427.h
> @@ -188,6 +188,7 @@
>  
>  struct snd_pcm_substream;
>  
> +int snd_cs8427_init(struct snd_i2c_bus *bus, struct snd_i2c_device *device);
>  int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr,
>  		      unsigned int reset_timeout, struct snd_i2c_device **r_cs8427);
>  int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg,
> diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
> index 6c2dc38..7e21621 100644
> --- a/sound/i2c/cs8427.c
> +++ b/sound/i2c/cs8427.c
> @@ -150,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device 
> *device)
>  	kfree(device->private_data);
>  }
>  
> -int snd_cs8427_create(struct snd_i2c_bus *bus,
> -		      unsigned char addr,
> -		      unsigned int reset_timeout,
> -		      struct snd_i2c_device **r_cs8427)
> +int snd_cs8427_init(struct snd_i2c_bus *bus,
> +		    struct snd_i2c_device *device)
>  {
>  	static unsigned char initvals1[] = {
>  	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC,
> @@ -200,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	     Inhibit E->F transfers. */
>  	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,
>  	};
> +	struct cs8427 *chip = device->private_data;
>  	int err;
> -	struct cs8427 *chip;
> -	struct snd_i2c_device *device;
>  	unsigned char buf[24];
>  
> -	if ((err = snd_i2c_device_create(bus, "CS8427",
> -					 CS8427_ADDR | (addr & 7),
> -					 &device)) < 0)
> -		return err;
> -	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
> -	if (chip == NULL) {
> -	      	snd_i2c_device_free(device);
> -		return -ENOMEM;
> -	}
> -	device->private_free = snd_cs8427_free;
> -	
>  	snd_i2c_lock(bus);
>  	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
>  	if (err != CS8427_VER8427A) {
> @@ -264,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	snd_i2c_unlock(bus);
>  
>  	/* turn on run bit and rock'n'roll */
> +	snd_cs8427_reset(device);
> +
> +	return 0;
> +
> +__fail:
> +	snd_i2c_unlock(bus);
> +
> +	return err;
> +}
> +EXPORT_SYMBOL(snd_cs8427_init);
> +
> +int snd_cs8427_create(struct snd_i2c_bus *bus,
> +		      unsigned char addr,
> +		      unsigned int reset_timeout,
> +		      struct snd_i2c_device **r_cs8427)
> +{
> +	int err;
> +	struct cs8427 *chip;
> +	struct snd_i2c_device *device;
> +
> +	err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7),
> +				    &device);
> +	if (err < 0)
> +		return err;
> +	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
> +	if (chip == NULL) {
> +		snd_i2c_device_free(device);
> +		return -ENOMEM;
> +	}
> +	device->private_free = snd_cs8427_free;
> +
>  	if (reset_timeout < 1)
>  		reset_timeout = 1;
>  	chip->reset_timeout = reset_timeout;
> -	snd_cs8427_reset(device);
> +
> +	err = snd_cs8427_init(bus, device);
> +	if (err)
> +		goto __fail;
>  
>  #if 0	// it's nice for read tests
>  	{
> @@ -286,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	return 0;
>  
>        __fail:
> -      	snd_i2c_unlock(bus);
>        	snd_i2c_device_free(device);
>        	return err < 0 ? err : -EIO;
>  }
> -- 
> Ondrej Zary
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] snd-cs8427: separate HW initialization
  2014-04-03  9:32   ` Takashi Iwai
@ 2014-04-03 12:49     ` Ondrej Zary
  2014-04-03 13:00       ` Takashi Iwai
  0 siblings, 1 reply; 7+ messages in thread
From: Ondrej Zary @ 2014-04-03 12:49 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

Separate HW initialization from device creation.
This is needed for suspend/resume support.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 include/sound/cs8427.h |    1 +
 sound/i2c/cs8427.c     |   57 ++++++++++++++++++++++++++++++++----------------
 2 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/include/sound/cs8427.h b/include/sound/cs8427.h
index f862cff..0b6a187 100644
--- a/include/sound/cs8427.h
+++ b/include/sound/cs8427.h
@@ -188,6 +188,7 @@
 
 struct snd_pcm_substream;
 
+int snd_cs8427_init(struct snd_i2c_bus *bus, struct snd_i2c_device *device);
 int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr,
 		      unsigned int reset_timeout, struct snd_i2c_device **r_cs8427);
 int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg,
diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
index 6c2dc38..7e21621 100644
--- a/sound/i2c/cs8427.c
+++ b/sound/i2c/cs8427.c
@@ -150,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device *device)
 	kfree(device->private_data);
 }
 
-int snd_cs8427_create(struct snd_i2c_bus *bus,
-		      unsigned char addr,
-		      unsigned int reset_timeout,
-		      struct snd_i2c_device **r_cs8427)
+int snd_cs8427_init(struct snd_i2c_bus *bus,
+		    struct snd_i2c_device *device)
 {
 	static unsigned char initvals1[] = {
 	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC,
@@ -200,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	     Inhibit E->F transfers. */
 	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,
 	};
+	struct cs8427 *chip = device->private_data;
 	int err;
-	struct cs8427 *chip;
-	struct snd_i2c_device *device;
 	unsigned char buf[24];
 
-	if ((err = snd_i2c_device_create(bus, "CS8427",
-					 CS8427_ADDR | (addr & 7),
-					 &device)) < 0)
-		return err;
-	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
-	if (chip == NULL) {
-	      	snd_i2c_device_free(device);
-		return -ENOMEM;
-	}
-	device->private_free = snd_cs8427_free;
-	
 	snd_i2c_lock(bus);
 	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
 	if (err != CS8427_VER8427A) {
@@ -264,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	snd_i2c_unlock(bus);
 
 	/* turn on run bit and rock'n'roll */
+	snd_cs8427_reset(device);
+
+	return 0;
+
+__fail:
+	snd_i2c_unlock(bus);
+
+	return err;
+}
+EXPORT_SYMBOL(snd_cs8427_init);
+
+int snd_cs8427_create(struct snd_i2c_bus *bus,
+		      unsigned char addr,
+		      unsigned int reset_timeout,
+		      struct snd_i2c_device **r_cs8427)
+{
+	int err;
+	struct cs8427 *chip;
+	struct snd_i2c_device *device;
+
+	err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7),
+				    &device);
+	if (err < 0)
+		return err;
+	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
+	if (chip == NULL) {
+		snd_i2c_device_free(device);
+		return -ENOMEM;
+	}
+	device->private_free = snd_cs8427_free;
+
 	if (reset_timeout < 1)
 		reset_timeout = 1;
 	chip->reset_timeout = reset_timeout;
-	snd_cs8427_reset(device);
+
+	err = snd_cs8427_init(bus, device);
+	if (err)
+		goto __fail;
 
 #if 0	// it's nice for read tests
 	{
@@ -286,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	return 0;
 
       __fail:
-      	snd_i2c_unlock(bus);
       	snd_i2c_device_free(device);
       	return err < 0 ? err : -EIO;
 }
-- 
Ondrej Zary

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] snd-cs8427: separate HW initialization
  2014-04-03 12:49     ` Ondrej Zary
@ 2014-04-03 13:00       ` Takashi Iwai
  0 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2014-04-03 13:00 UTC (permalink / raw)
  To: Ondrej Zary; +Cc: alsa-devel

At Thu, 3 Apr 2014 14:49:46 +0200,
Ondrej Zary wrote:
> 
> Separate HW initialization from device creation.
> This is needed for suspend/resume support.
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

Thanks, applied.


Takashi

> ---
>  include/sound/cs8427.h |    1 +
>  sound/i2c/cs8427.c     |   57 ++++++++++++++++++++++++++++++++----------------
>  2 files changed, 39 insertions(+), 19 deletions(-)
> 
> diff --git a/include/sound/cs8427.h b/include/sound/cs8427.h
> index f862cff..0b6a187 100644
> --- a/include/sound/cs8427.h
> +++ b/include/sound/cs8427.h
> @@ -188,6 +188,7 @@
>  
>  struct snd_pcm_substream;
>  
> +int snd_cs8427_init(struct snd_i2c_bus *bus, struct snd_i2c_device *device);
>  int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr,
>  		      unsigned int reset_timeout, struct snd_i2c_device **r_cs8427);
>  int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg,
> diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
> index 6c2dc38..7e21621 100644
> --- a/sound/i2c/cs8427.c
> +++ b/sound/i2c/cs8427.c
> @@ -150,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device *device)
>  	kfree(device->private_data);
>  }
>  
> -int snd_cs8427_create(struct snd_i2c_bus *bus,
> -		      unsigned char addr,
> -		      unsigned int reset_timeout,
> -		      struct snd_i2c_device **r_cs8427)
> +int snd_cs8427_init(struct snd_i2c_bus *bus,
> +		    struct snd_i2c_device *device)
>  {
>  	static unsigned char initvals1[] = {
>  	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC,
> @@ -200,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	     Inhibit E->F transfers. */
>  	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,
>  	};
> +	struct cs8427 *chip = device->private_data;
>  	int err;
> -	struct cs8427 *chip;
> -	struct snd_i2c_device *device;
>  	unsigned char buf[24];
>  
> -	if ((err = snd_i2c_device_create(bus, "CS8427",
> -					 CS8427_ADDR | (addr & 7),
> -					 &device)) < 0)
> -		return err;
> -	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
> -	if (chip == NULL) {
> -	      	snd_i2c_device_free(device);
> -		return -ENOMEM;
> -	}
> -	device->private_free = snd_cs8427_free;
> -	
>  	snd_i2c_lock(bus);
>  	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
>  	if (err != CS8427_VER8427A) {
> @@ -264,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	snd_i2c_unlock(bus);
>  
>  	/* turn on run bit and rock'n'roll */
> +	snd_cs8427_reset(device);
> +
> +	return 0;
> +
> +__fail:
> +	snd_i2c_unlock(bus);
> +
> +	return err;
> +}
> +EXPORT_SYMBOL(snd_cs8427_init);
> +
> +int snd_cs8427_create(struct snd_i2c_bus *bus,
> +		      unsigned char addr,
> +		      unsigned int reset_timeout,
> +		      struct snd_i2c_device **r_cs8427)
> +{
> +	int err;
> +	struct cs8427 *chip;
> +	struct snd_i2c_device *device;
> +
> +	err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7),
> +				    &device);
> +	if (err < 0)
> +		return err;
> +	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
> +	if (chip == NULL) {
> +		snd_i2c_device_free(device);
> +		return -ENOMEM;
> +	}
> +	device->private_free = snd_cs8427_free;
> +
>  	if (reset_timeout < 1)
>  		reset_timeout = 1;
>  	chip->reset_timeout = reset_timeout;
> -	snd_cs8427_reset(device);
> +
> +	err = snd_cs8427_init(bus, device);
> +	if (err)
> +		goto __fail;
>  
>  #if 0	// it's nice for read tests
>  	{
> @@ -286,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
>  	return 0;
>  
>        __fail:
> -      	snd_i2c_unlock(bus);
>        	snd_i2c_device_free(device);
>        	return err < 0 ? err : -EIO;
>  }
> -- 
> Ondrej Zary
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-04-03 13:00 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-02 20:35 [PATCH 1/2] snd-cs8427: separate HW initialization Ondrej Zary
2014-04-02 20:35 ` [PATCH 2/2] snd-ice1712: Add S/PDIF suspend support for ICE1712-based M-Audio cards Ondrej Zary
2014-04-03  6:22 ` [PATCH 1/2] snd-cs8427: separate HW initialization Takashi Iwai
2014-04-03  7:13 ` [PATCH v2] " Ondrej Zary
2014-04-03  9:32   ` Takashi Iwai
2014-04-03 12:49     ` Ondrej Zary
2014-04-03 13:00       ` Takashi Iwai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).