diff mbox

[v2] snd-cs8427: separate HW initialization

Message ID 201404030913.40921.linux@rainbow-software.org (mailing list archive)
State Accepted
Headers show

Commit Message

Ondrej Zary April 3, 2014, 7:13 a.m. UTC
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(-)

 	  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;
 }

Comments

Takashi Iwai April 3, 2014, 9:32 a.m. UTC | #1
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
>
diff mbox

Patch

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[] = {