* [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode @ 2019-01-02 17:06 b-ak 2019-01-03 12:45 ` Mark Brown 0 siblings, 1 reply; 8+ messages in thread From: b-ak @ 2019-01-02 17:06 UTC (permalink / raw) To: Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel During the bootup of the kernel, as soon as the DAPM framework kicks in it pushes the codec into standy mode. The existing TVL320AIC32x4 codec driver doesn't prepare the clock in the probe function. This leads to an OOPS when the DAPM tries to put it into standy by calling clk_disable_unprepare() This patch fixes that problem. Signed-off-by: b-ak <anur.bhargav@gmail.com> --- sound/soc/codecs/tlv320aic32x4.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c index e2b5a11b16d1..7cf363595abd 100644 --- a/sound/soc/codecs/tlv320aic32x4.c +++ b/sound/soc/codecs/tlv320aic32x4.c @@ -1167,6 +1167,12 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap) if (IS_ERR(aic32x4->mclk)) { dev_err(dev, "Failed getting the mclk. The current implementation does not support the usage of this codec without mclk\n"); return PTR_ERR(aic32x4->mclk); + } else { + ret = clk_prepare_enable(aic32x4->mclk); + if (ret != 0) { + dev_err(dev, "Failed to enable MCLK: %d\n", ret); + return ret; + } } if (gpio_is_valid(aic32x4->rstn_gpio)) { -- 2.19.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-02 17:06 [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode b-ak @ 2019-01-03 12:45 ` Mark Brown 2019-01-03 19:34 ` b-ak 0 siblings, 1 reply; 8+ messages in thread From: Mark Brown @ 2019-01-03 12:45 UTC (permalink / raw) To: b-ak; +Cc: Liam Girdwood, Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel [-- Attachment #1: Type: text/plain, Size: 741 bytes --] On Wed, Jan 02, 2019 at 10:36:33PM +0530, b-ak wrote: > During the bootup of the kernel, as soon as the DAPM framework kicks in > it pushes the codec into standy mode. > > The existing TVL320AIC32x4 codec driver doesn't prepare the clock in > the probe function. > This leads to an OOPS when the DAPM tries to put it into standy by calling > clk_disable_unprepare() > > This patch fixes that problem. This isn't the best way of fixing this because it makes it look like there's a missing disable in the removal process. What would be better would be to do what other drivers do and check to see what state we're transitioning from before we disable the clock in set_bias_level(). See drivers like wm8903.c for examples. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-03 12:45 ` Mark Brown @ 2019-01-03 19:34 ` b-ak 2019-01-04 16:40 ` b-ak 0 siblings, 1 reply; 8+ messages in thread From: b-ak @ 2019-01-03 19:34 UTC (permalink / raw) To: Mark Brown, linux-kernel On Thu, Jan 03, 2019 at 12:45:54PM +0000, Mark Brown wrote: > On Wed, Jan 02, 2019 at 10:36:33PM +0530, b-ak wrote: > > During the bootup of the kernel, as soon as the DAPM framework kicks in > > it pushes the codec into standy mode. > > > > The existing TVL320AIC32x4 codec driver doesn't prepare the clock in > > the probe function. > > This leads to an OOPS when the DAPM tries to put it into standy by calling > > clk_disable_unprepare() > > > > This patch fixes that problem. > > This isn't the best way of fixing this because it makes it look like > there's a missing disable in the removal process. What would be better > would be to do what other drivers do and check to see what state we're > transitioning from before we disable the clock in set_bias_level(). See > drivers like wm8903.c for examples. Hello Mark, I will test the change and update the patch. Thanks, Bhargav ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-03 19:34 ` b-ak @ 2019-01-04 16:40 ` b-ak 2019-01-05 4:46 ` b-ak 0 siblings, 1 reply; 8+ messages in thread From: b-ak @ 2019-01-04 16:40 UTC (permalink / raw) To: Mark Brown, linux-kernel [-- Attachment #1: Type: text/plain, Size: 1071 bytes --] On Fri, Jan 04, 2019 at 01:04:21AM +0530, b-ak wrote: > On Thu, Jan 03, 2019 at 12:45:54PM +0000, Mark Brown wrote: > > On Wed, Jan 02, 2019 at 10:36:33PM +0530, b-ak wrote: > > > During the bootup of the kernel, as soon as the DAPM framework kicks in > > > it pushes the codec into standy mode. > > > > > > The existing TVL320AIC32x4 codec driver doesn't prepare the clock in > > > the probe function. > > > This leads to an OOPS when the DAPM tries to put it into standy by calling > > > clk_disable_unprepare() > > > > > > This patch fixes that problem. > > > > This isn't the best way of fixing this because it makes it look like > > there's a missing disable in the removal process. What would be better > > would be to do what other drivers do and check to see what state we're > > transitioning from before we disable the clock in set_bias_level(). See > > drivers like wm8903.c for examples. > > Hello Mark, > > I will test the change and update the patch. > > Thanks, > Bhargav > Hi Mark, I have updated the patch with the changes. Regards, Bhargav [-- Attachment #2: 0001-ASoC-tlv320aic32x4-Kernel-OOPS-while-entering-DAPM-s.patch --] [-- Type: text/x-diff, Size: 1341 bytes --] From 5c0530506bd6d167db4f40d5af5bb82b14debad5 Mon Sep 17 00:00:00 2001 From: b-ak <anur.bhargav@gmail.com> Date: Tue, 1 Jan 2019 22:52:40 +0530 Subject: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode During the bootup of the kernel, the DAPM bias level is in the OFF state. As soon as the DAPM framework kicks in it pushes the codec into STANDBY state. The probe function doesn't prepare the clock, and STANDBY state does a clk_disable_unprepare() without checking the previous state. This leads to an OOPS. Not transitioning from an OFF state to the STANDBY state fixes the problem. Signed-off-by: b-ak <anur.bhargav@gmail.com> --- sound/soc/codecs/tlv320aic32x4.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c index e2b5a11b16d1..395f892776cd 100644 --- a/sound/soc/codecs/tlv320aic32x4.c +++ b/sound/soc/codecs/tlv320aic32x4.c @@ -822,6 +822,10 @@ static int aic32x4_set_bias_level(struct snd_soc_component *component, case SND_SOC_BIAS_PREPARE: break; case SND_SOC_BIAS_STANDBY: + /* Initial cold start */ + if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) + break; + /* Switch off BCLK_N Divider */ snd_soc_component_update_bits(component, AIC32X4_BCLKN, AIC32X4_BCLKEN, 0); -- 2.19.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-04 16:40 ` b-ak @ 2019-01-05 4:46 ` b-ak 2019-01-07 12:59 ` Mark Brown 0 siblings, 1 reply; 8+ messages in thread From: b-ak @ 2019-01-05 4:46 UTC (permalink / raw) To: Mark Brown, linux-kernel [-- Attachment #1: Type: text/plain, Size: 1245 bytes --] On Fri, Jan 04, 2019 at 10:10:40PM +0530, b-ak wrote: > On Fri, Jan 04, 2019 at 01:04:21AM +0530, b-ak wrote: > > On Thu, Jan 03, 2019 at 12:45:54PM +0000, Mark Brown wrote: > > > On Wed, Jan 02, 2019 at 10:36:33PM +0530, b-ak wrote: > > > > During the bootup of the kernel, as soon as the DAPM framework kicks in > > > > it pushes the codec into standy mode. > > > > > > > > The existing TVL320AIC32x4 codec driver doesn't prepare the clock in > > > > the probe function. > > > > This leads to an OOPS when the DAPM tries to put it into standy by calling > > > > clk_disable_unprepare() > > > > > > > > This patch fixes that problem. > > > > > > This isn't the best way of fixing this because it makes it look like > > > there's a missing disable in the removal process. What would be better > > > would be to do what other drivers do and check to see what state we're > > > transitioning from before we disable the clock in set_bias_level(). See > > > drivers like wm8903.c for examples. > > > > Hello Mark, > > > > I will test the change and update the patch. > > > > Thanks, > > Bhargav > > > > Hi Mark, > > I have updated the patch with the changes. > > Regards, > Bhargav > Hi Mark, Fixed the build error. Thanks, Bhargav [-- Attachment #2: 0001-ASoC-tlv320aic32x4-Kernel-OOPS-while-entering-DAPM-s.patch --] [-- Type: text/x-diff, Size: 1349 bytes --] From 5854c8b48e6c2367d391cc760939538ac8f624f7 Mon Sep 17 00:00:00 2001 From: b-ak <anur.bhargav@gmail.com> Date: Tue, 1 Jan 2019 22:52:40 +0530 Subject: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode During the bootup of the kernel, the DAPM bias level is in the OFF state. As soon as the DAPM framework kicks in it pushes the codec into STANDBY state. The probe function doesn't prepare the clock, and STANDBY state does a clk_disable_unprepare() without checking the previous state. This leads to an OOPS. Not transitioning from an OFF state to the STANDBY state fixes the problem. Signed-off-by: b-ak <anur.bhargav@gmail.com> --- sound/soc/codecs/tlv320aic32x4.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c index e2b5a11b16d1..f03195d2ab2e 100644 --- a/sound/soc/codecs/tlv320aic32x4.c +++ b/sound/soc/codecs/tlv320aic32x4.c @@ -822,6 +822,10 @@ static int aic32x4_set_bias_level(struct snd_soc_component *component, case SND_SOC_BIAS_PREPARE: break; case SND_SOC_BIAS_STANDBY: + /* Initial cold start */ + if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) + break; + /* Switch off BCLK_N Divider */ snd_soc_component_update_bits(component, AIC32X4_BCLKN, AIC32X4_BCLKEN, 0); -- 2.19.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-05 4:46 ` b-ak @ 2019-01-07 12:59 ` Mark Brown 2019-01-07 17:40 ` b-ak 2019-01-07 17:45 ` [PATCH v2] " b-ak 0 siblings, 2 replies; 8+ messages in thread From: Mark Brown @ 2019-01-07 12:59 UTC (permalink / raw) To: b-ak; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 345 bytes --] On Sat, Jan 05, 2019 at 10:16:22AM +0530, b-ak wrote: > > Hi Mark, > > Fixed the build error. > > Thanks, > Bhargav > Please submit patches following the process covered in submitting-patches.rst, don't send them as attachments to replies in the middle of threads. Doing that confuses all the tooling for handling patches. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-07 12:59 ` Mark Brown @ 2019-01-07 17:40 ` b-ak 2019-01-07 17:45 ` [PATCH v2] " b-ak 1 sibling, 0 replies; 8+ messages in thread From: b-ak @ 2019-01-07 17:40 UTC (permalink / raw) To: Mark Brown; +Cc: linux-kernel On Mon, Jan 07, 2019 at 12:59:07PM +0000, Mark Brown wrote: > On Sat, Jan 05, 2019 at 10:16:22AM +0530, b-ak wrote: > > > > > Hi Mark, > > > > Fixed the build error. > > > > Thanks, > > Bhargav > > > > Please submit patches following the process covered in > submitting-patches.rst, don't send them as attachments to replies in the > middle of threads. Doing that confuses all the tooling for handling > patches. Ok. I made a mistake while sending it with Mutt. Will be sending it inline now. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode 2019-01-07 12:59 ` Mark Brown 2019-01-07 17:40 ` b-ak @ 2019-01-07 17:45 ` b-ak 1 sibling, 0 replies; 8+ messages in thread From: b-ak @ 2019-01-07 17:45 UTC (permalink / raw) To: Mark Brown, linux-kernel; +Cc: b-ak During the bootup of the kernel, the DAPM bias level is in the OFF state. As soon as the DAPM framework kicks in it pushes the codec into STANDBY state. The probe function doesn't prepare the clock, and STANDBY state does a clk_disable_unprepare() without checking the previous state. This leads to an OOPS. Not transitioning from an OFF state to the STANDBY state fixes the problem. Signed-off-by: b-ak <anur.bhargav@gmail.com> --- sound/soc/codecs/tlv320aic32x4.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c index e2b5a11b16d1..f03195d2ab2e 100644 --- a/sound/soc/codecs/tlv320aic32x4.c +++ b/sound/soc/codecs/tlv320aic32x4.c @@ -822,6 +822,10 @@ static int aic32x4_set_bias_level(struct snd_soc_component *component, case SND_SOC_BIAS_PREPARE: break; case SND_SOC_BIAS_STANDBY: + /* Initial cold start */ + if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) + break; + /* Switch off BCLK_N Divider */ snd_soc_component_update_bits(component, AIC32X4_BCLKN, AIC32X4_BCLKEN, 0); -- 2.19.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-01-07 17:45 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-01-02 17:06 [PATCH] ASoC: tlv320aic32x4: Kernel OOPS while entering DAPM standby mode b-ak 2019-01-03 12:45 ` Mark Brown 2019-01-03 19:34 ` b-ak 2019-01-04 16:40 ` b-ak 2019-01-05 4:46 ` b-ak 2019-01-07 12:59 ` Mark Brown 2019-01-07 17:40 ` b-ak 2019-01-07 17:45 ` [PATCH v2] " b-ak
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox