From: Dmitry Osipenko <digetx@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Sameer Pujar <spujar@nvidia.com>,
Peter Geis <pgwipeout@gmail.com>,
Nicolas Chauvet <kwizart@gmail.com>,
Takashi Iwai <tiwai@suse.com>,
Matt Merhar <mattmerhar@protonmail.com>,
Jaroslav Kysela <perex@perex.cz>
Cc: linux-tegra@vger.kernel.org, alsa-devel@alsa-project.org,
linux-kernel@vger.kernel.org
Subject: [PATCH v3 2/6] ALSA: hda/tegra: Reset hardware
Date: Wed, 20 Jan 2021 03:31:50 +0300 [thread overview]
Message-ID: <20210120003154.26749-3-digetx@gmail.com> (raw)
In-Reply-To: <20210120003154.26749-1-digetx@gmail.com>
Reset hardware on RPM-resume in order to bring it into a predictable
state.
Tested-by: Peter Geis <pgwipeout@gmail.com> # Ouya T30 audio works
Tested-by: Matt Merhar <mattmerhar@protonmail.com> # Ouya T30 boot-tested
Tested-by: Nicolas Chauvet <kwizart@gmail.com> # TK1 boot-tested
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
sound/pci/hda/hda_tegra.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/sound/pci/hda/hda_tegra.c b/sound/pci/hda/hda_tegra.c
index a25bf7083c28..04dcd4cdfd9e 100644
--- a/sound/pci/hda/hda_tegra.c
+++ b/sound/pci/hda/hda_tegra.c
@@ -17,6 +17,7 @@
#include <linux/moduleparam.h>
#include <linux/mutex.h>
#include <linux/of_device.h>
+#include <linux/reset.h>
#include <linux/slab.h>
#include <linux/time.h>
#include <linux/string.h>
@@ -70,6 +71,7 @@
struct hda_tegra {
struct azx chip;
struct device *dev;
+ struct reset_control *reset;
struct clk_bulk_data clocks[3];
unsigned int nclocks;
void __iomem *regs;
@@ -167,6 +169,12 @@ static int __maybe_unused hda_tegra_runtime_resume(struct device *dev)
struct hda_tegra *hda = container_of(chip, struct hda_tegra, chip);
int rc;
+ if (!chip->running) {
+ rc = reset_control_assert(hda->reset);
+ if (rc)
+ return rc;
+ }
+
rc = clk_bulk_prepare_enable(hda->nclocks, hda->clocks);
if (rc != 0)
return rc;
@@ -176,6 +184,12 @@ static int __maybe_unused hda_tegra_runtime_resume(struct device *dev)
/* disable controller wake up event*/
azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) &
~STATESTS_INT_MASK);
+ } else {
+ usleep_range(10, 100);
+
+ rc = reset_control_deassert(hda->reset);
+ if (rc)
+ return rc;
}
return 0;
@@ -441,6 +455,12 @@ static int hda_tegra_probe(struct platform_device *pdev)
return err;
}
+ hda->reset = devm_reset_control_array_get_exclusive(&pdev->dev);
+ if (IS_ERR(hda->reset)) {
+ err = PTR_ERR(hda->reset);
+ goto out_free;
+ }
+
hda->clocks[hda->nclocks++].id = "hda";
hda->clocks[hda->nclocks++].id = "hda2hdmi";
hda->clocks[hda->nclocks++].id = "hda2codec_2x";
--
2.29.2
WARNING: multiple messages have this Message-ID (diff)
From: Dmitry Osipenko <digetx@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Sameer Pujar <spujar@nvidia.com>,
Peter Geis <pgwipeout@gmail.com>,
Nicolas Chauvet <kwizart@gmail.com>,
Takashi Iwai <tiwai@suse.com>,
Matt Merhar <mattmerhar@protonmail.com>,
Jaroslav Kysela <perex@perex.cz>
Cc: alsa-devel@alsa-project.org, linux-tegra@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH v3 2/6] ALSA: hda/tegra: Reset hardware
Date: Wed, 20 Jan 2021 03:31:50 +0300 [thread overview]
Message-ID: <20210120003154.26749-3-digetx@gmail.com> (raw)
In-Reply-To: <20210120003154.26749-1-digetx@gmail.com>
Reset hardware on RPM-resume in order to bring it into a predictable
state.
Tested-by: Peter Geis <pgwipeout@gmail.com> # Ouya T30 audio works
Tested-by: Matt Merhar <mattmerhar@protonmail.com> # Ouya T30 boot-tested
Tested-by: Nicolas Chauvet <kwizart@gmail.com> # TK1 boot-tested
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
sound/pci/hda/hda_tegra.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/sound/pci/hda/hda_tegra.c b/sound/pci/hda/hda_tegra.c
index a25bf7083c28..04dcd4cdfd9e 100644
--- a/sound/pci/hda/hda_tegra.c
+++ b/sound/pci/hda/hda_tegra.c
@@ -17,6 +17,7 @@
#include <linux/moduleparam.h>
#include <linux/mutex.h>
#include <linux/of_device.h>
+#include <linux/reset.h>
#include <linux/slab.h>
#include <linux/time.h>
#include <linux/string.h>
@@ -70,6 +71,7 @@
struct hda_tegra {
struct azx chip;
struct device *dev;
+ struct reset_control *reset;
struct clk_bulk_data clocks[3];
unsigned int nclocks;
void __iomem *regs;
@@ -167,6 +169,12 @@ static int __maybe_unused hda_tegra_runtime_resume(struct device *dev)
struct hda_tegra *hda = container_of(chip, struct hda_tegra, chip);
int rc;
+ if (!chip->running) {
+ rc = reset_control_assert(hda->reset);
+ if (rc)
+ return rc;
+ }
+
rc = clk_bulk_prepare_enable(hda->nclocks, hda->clocks);
if (rc != 0)
return rc;
@@ -176,6 +184,12 @@ static int __maybe_unused hda_tegra_runtime_resume(struct device *dev)
/* disable controller wake up event*/
azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) &
~STATESTS_INT_MASK);
+ } else {
+ usleep_range(10, 100);
+
+ rc = reset_control_deassert(hda->reset);
+ if (rc)
+ return rc;
}
return 0;
@@ -441,6 +455,12 @@ static int hda_tegra_probe(struct platform_device *pdev)
return err;
}
+ hda->reset = devm_reset_control_array_get_exclusive(&pdev->dev);
+ if (IS_ERR(hda->reset)) {
+ err = PTR_ERR(hda->reset);
+ goto out_free;
+ }
+
hda->clocks[hda->nclocks++].id = "hda";
hda->clocks[hda->nclocks++].id = "hda2hdmi";
hda->clocks[hda->nclocks++].id = "hda2codec_2x";
--
2.29.2
next prev parent reply other threads:[~2021-01-20 0:34 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-20 0:31 [PATCH v3 0/6] Clock and reset improvements for Tegra ALSA drivers Dmitry Osipenko
2021-01-20 0:31 ` Dmitry Osipenko
2021-01-20 0:31 ` [PATCH v3 1/6] ALSA: hda/tegra: Use clk_bulk helpers Dmitry Osipenko
2021-01-20 0:31 ` Dmitry Osipenko
2021-01-26 6:33 ` Takashi Iwai
2021-01-26 6:33 ` Takashi Iwai
2021-01-20 0:31 ` Dmitry Osipenko [this message]
2021-01-20 0:31 ` [PATCH v3 2/6] ALSA: hda/tegra: Reset hardware Dmitry Osipenko
2021-01-25 15:18 ` Takashi Iwai
2021-01-25 15:18 ` Takashi Iwai
2021-01-25 15:27 ` Dmitry Osipenko
2021-01-25 15:27 ` Dmitry Osipenko
2021-01-26 6:33 ` Takashi Iwai
2021-01-26 6:33 ` Takashi Iwai
2021-01-20 0:31 ` [PATCH v3 3/6] ALSA: hda/tegra: Remove unnecessary null-check from hda_tegra_runtime_resume() Dmitry Osipenko
2021-01-20 0:31 ` Dmitry Osipenko
2021-01-26 6:34 ` Takashi Iwai
2021-01-26 6:34 ` Takashi Iwai
2021-01-20 0:31 ` [PATCH v3 4/6] ASoC: tegra: ahub: Add missing resets Dmitry Osipenko
2021-01-20 0:31 ` Dmitry Osipenko
2021-01-20 0:31 ` [PATCH v3 5/6] ASoC: tegra: ahub: Use clk_bulk helpers Dmitry Osipenko
2021-01-20 0:31 ` Dmitry Osipenko
2021-01-20 0:31 ` [PATCH v3 6/6] ASoC: tegra: ahub: Reset hardware properly Dmitry Osipenko
2021-01-20 0:31 ` Dmitry Osipenko
2021-01-25 15:18 ` [PATCH v3 0/6] Clock and reset improvements for Tegra ALSA drivers Takashi Iwai
2021-01-25 15:18 ` Takashi Iwai
2021-01-25 18:02 ` (subset) " Mark Brown
2021-01-25 18:02 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210120003154.26749-3-digetx@gmail.com \
--to=digetx@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=jonathanh@nvidia.com \
--cc=kwizart@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=mattmerhar@protonmail.com \
--cc=perex@perex.cz \
--cc=pgwipeout@gmail.com \
--cc=spujar@nvidia.com \
--cc=thierry.reding@gmail.com \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.