ASoC: max98090: add shutdown callback for max98090
diff mbox

Message ID 1428483128-23498-2-git-send-email-wxt@rock-chips.com
State New, archived
Headers show

Commit Message

Caesar Wang April 8, 2015, 8:52 a.m. UTC
To fix pop noise when shutdown,the pop noise during shutdown
is the pmic cutoff power of codec without any notice.

Signed-off-by: jay.xu <xjq@rock-chips.com>
Signed-off-by: zhengxing <zhengxing@rock-chips.com>
Signed-off-by: Caesar Wang <wxt@rock-chips.com>

Serien-cc: linux-kernel@vger.kernel.org
Serien-cc: devicetree@vger.kernel.org
Serien-cc: dianders@chromium.org

---

 sound/soc/codecs/max98090.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

Heiko Stuebner April 8, 2015, 9:25 a.m. UTC | #1
Hi Caesar,

Am Mittwoch, 8. April 2015, 16:52:08 schrieb Caesar Wang:
> To fix pop noise when shutdown,the pop noise during shutdown
> is the pmic cutoff power of codec without any notice.
> 
> Signed-off-by: jay.xu <xjq@rock-chips.com>
> Signed-off-by: zhengxing <zhengxing@rock-chips.com>
> Signed-off-by: Caesar Wang <wxt@rock-chips.com>
> 
> Serien-cc: linux-kernel@vger.kernel.org
> Serien-cc: devicetree@vger.kernel.org
> Serien-cc: dianders@chromium.org
> 
> ---
> 
>  sound/soc/codecs/max98090.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
> index b112b1c..066954a0 100644
> --- a/sound/soc/codecs/max98090.c
> +++ b/sound/soc/codecs/max98090.c
> @@ -2611,6 +2611,22 @@ static int max98090_i2c_remove(struct i2c_client
> *client) return 0;
>  }
> 
> +static void max98090_i2c_shutdown(struct i2c_client *i2c)
> +{
> +	struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
> +
> +	dev_info(&i2c->dev, "shut down device\n");

is this dev_info really necessary? dev_dbg might be better, or leave it out 
completely, as it doesn't really provide any additional benefit.


> +
> +	/* Enable volume smoothing, disable zero cross.  This will cause
> +	 * a quick 40ms ramp to mute on shutdown.
> +	 */

Comment style is off ... should be

/*
 * Enable volume smoothing, disable zero cross.  This will cause
 * a quick 40ms ramp to mute on shutdown.
 */


> +	regmap_write(max98090->regmap,
> +		M98090_REG_LEVEL_CONTROL, M98090_VSENN_MASK);
> +	regmap_write(max98090->regmap,
> +		M98090_REG_DEVICE_SHUTDOWN, 0x00);
> +	msleep(40);
> +}
> +
>  #ifdef CONFIG_PM
>  static int max98090_runtime_resume(struct device *dev)
>  {
> @@ -2697,6 +2713,7 @@ static struct i2c_driver max98090_i2c_driver = {
>  	},
>  	.probe  = max98090_i2c_probe,
>  	.remove = max98090_i2c_remove,
> +	.shutdown = max98090_i2c_shutdown,
>  	.id_table = max98090_i2c_id,
>  };
Mark Brown April 8, 2015, 9:50 a.m. UTC | #2
On Wed, Apr 08, 2015 at 04:52:08PM +0800, Caesar Wang wrote:

> +static void max98090_i2c_shutdown(struct i2c_client *i2c)
> +{
> +	struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
> +
> +	dev_info(&i2c->dev, "shut down device\n");

Remove this, it's adding noise.

> +
> +	/* Enable volume smoothing, disable zero cross.  This will cause
> +	 * a quick 40ms ramp to mute on shutdown.
> +	 */
> +	regmap_write(max98090->regmap,
> +		M98090_REG_LEVEL_CONTROL, M98090_VSENN_MASK);
> +	regmap_write(max98090->regmap,
> +		M98090_REG_DEVICE_SHUTDOWN, 0x00);
> +	msleep(40);
> +}

This is OK but equivalent code should be being added to the driver
remove path as the same thing should be happening there.
Caesar Wang April 8, 2015, 10:14 a.m. UTC | #3
Heiko,

? 2015?04?08? 17:25, Heiko Stübner ??:
> Hi Caesar,
>
> Am Mittwoch, 8. April 2015, 16:52:08 schrieb Caesar Wang:
>> To fix pop noise when shutdown,the pop noise during shutdown
>> is the pmic cutoff power of codec without any notice.
>>
>> Signed-off-by: jay.xu <xjq@rock-chips.com>
>> Signed-off-by: zhengxing <zhengxing@rock-chips.com>
>> Signed-off-by: Caesar Wang <wxt@rock-chips.com>
>>
>> Serien-cc: linux-kernel@vger.kernel.org
>> Serien-cc: devicetree@vger.kernel.org
>> Serien-cc: dianders@chromium.org
>>
>> ---
>>
>>   sound/soc/codecs/max98090.c | 17 +++++++++++++++++
>>   1 file changed, 17 insertions(+)
>>
>> diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
>> index b112b1c..066954a0 100644
>> --- a/sound/soc/codecs/max98090.c
>> +++ b/sound/soc/codecs/max98090.c
>> @@ -2611,6 +2611,22 @@ static int max98090_i2c_remove(struct i2c_client
>> *client) return 0;
>>   }
>>
>> +static void max98090_i2c_shutdown(struct i2c_client *i2c)
>> +{
>> +	struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
>> +
>> +	dev_info(&i2c->dev, "shut down device\n");
> is this dev_info really necessary? dev_dbg might be better, or leave it out
> completely, as it doesn't really provide any additional benefit.
>

As Mark suggestion, I will remove it.
>> +
>> +	/* Enable volume smoothing, disable zero cross.  This will cause
>> +	 * a quick 40ms ramp to mute on shutdown.
>> +	 */
> Comment style is off ... should be
>
> /*
>   * Enable volume smoothing, disable zero cross.  This will cause
>   * a quick 40ms ramp to mute on shutdown.
>   */
>

Done
>> +	regmap_write(max98090->regmap,
>> +		M98090_REG_LEVEL_CONTROL, M98090_VSENN_MASK);
>> +	regmap_write(max98090->regmap,
>> +		M98090_REG_DEVICE_SHUTDOWN, 0x00);
>> +	msleep(40);
>> +}
>> +
>>   #ifdef CONFIG_PM
>>   static int max98090_runtime_resume(struct device *dev)
>>   {
>> @@ -2697,6 +2713,7 @@ static struct i2c_driver max98090_i2c_driver = {
>>   	},
>>   	.probe  = max98090_i2c_probe,
>>   	.remove = max98090_i2c_remove,
>> +	.shutdown = max98090_i2c_shutdown,
>>   	.id_table = max98090_i2c_id,
>>   };
>
>
>
Caesar Wang April 8, 2015, 10:15 a.m. UTC | #4
Mark,


? 2015?04?08? 17:50, Mark Brown ??:
> On Wed, Apr 08, 2015 at 04:52:08PM +0800, Caesar Wang wrote:
>
>> +static void max98090_i2c_shutdown(struct i2c_client *i2c)
>> +{
>> +	struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
>> +
>> +	dev_info(&i2c->dev, "shut down device\n");
> Remove this, it's adding noise.

Done
>> +
>> +	/* Enable volume smoothing, disable zero cross.  This will cause
>> +	 * a quick 40ms ramp to mute on shutdown.
>> +	 */
>> +	regmap_write(max98090->regmap,
>> +		M98090_REG_LEVEL_CONTROL, M98090_VSENN_MASK);
>> +	regmap_write(max98090->regmap,
>> +		M98090_REG_DEVICE_SHUTDOWN, 0x00);
>> +	msleep(40);
>> +}
> This is OK but equivalent code should be being added to the driver
> remove path as the same thing should be happening there.
Yeah.I will fix it in v2 patch.

Thanks!

Patch
diff mbox

diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
index b112b1c..066954a0 100644
--- a/sound/soc/codecs/max98090.c
+++ b/sound/soc/codecs/max98090.c
@@ -2611,6 +2611,22 @@  static int max98090_i2c_remove(struct i2c_client *client)
 	return 0;
 }
 
+static void max98090_i2c_shutdown(struct i2c_client *i2c)
+{
+	struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
+
+	dev_info(&i2c->dev, "shut down device\n");
+
+	/* Enable volume smoothing, disable zero cross.  This will cause
+	 * a quick 40ms ramp to mute on shutdown.
+	 */
+	regmap_write(max98090->regmap,
+		M98090_REG_LEVEL_CONTROL, M98090_VSENN_MASK);
+	regmap_write(max98090->regmap,
+		M98090_REG_DEVICE_SHUTDOWN, 0x00);
+	msleep(40);
+}
+
 #ifdef CONFIG_PM
 static int max98090_runtime_resume(struct device *dev)
 {
@@ -2697,6 +2713,7 @@  static struct i2c_driver max98090_i2c_driver = {
 	},
 	.probe  = max98090_i2c_probe,
 	.remove = max98090_i2c_remove,
+	.shutdown = max98090_i2c_shutdown,
 	.id_table = max98090_i2c_id,
 };