Skip to content

Commit 2bbe95f

Browse files
TE-N-ShengjiuWangDong Aisheng
authored andcommitted
ASoC: fsl_esai: Remove the tasklet
Remove tasklet for it may cause the xrun interrupt not be handled immediately, that will be endless interrupt. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
1 parent ff66736 commit 2bbe95f

File tree

1 file changed

+4
-11
lines changed

1 file changed

+4
-11
lines changed

sound/soc/fsl/fsl_esai.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
* @extalclk: esai clock source to derive HCK, SCK and FS
3434
* @fsysclk: system clock source to derive HCK, SCK and FS
3535
* @spbaclk: SPBA clock (optional, depending on SoC design)
36-
* @task: tasklet to handle the reset operation
3736
* @lock: spin lock between hw_reset() and trigger()
3837
* @fifo_depth: depth of tx/rx FIFO
3938
* @slot_width: width of each DAI slot
@@ -57,7 +56,6 @@ struct fsl_esai {
5756
struct clk *extalclk;
5857
struct clk *fsysclk;
5958
struct clk *spbaclk;
60-
struct tasklet_struct task;
6159
spinlock_t lock; /* Protect hw_reset and trigger */
6260
u32 fifo_depth;
6361
u32 slot_width;
@@ -75,6 +73,8 @@ struct fsl_esai {
7573
char name[32];
7674
};
7775

76+
static void fsl_esai_hw_reset(struct fsl_esai *esai_priv);
77+
7878
static irqreturn_t esai_isr(int irq, void *devid)
7979
{
8080
struct fsl_esai *esai_priv = (struct fsl_esai *)devid;
@@ -88,7 +88,7 @@ static irqreturn_t esai_isr(int irq, void *devid)
8888
if ((saisr & (ESAI_SAISR_TUE | ESAI_SAISR_ROE)) &&
8989
esai_priv->reset_at_xrun) {
9090
dev_dbg(&pdev->dev, "reset module for xrun\n");
91-
tasklet_schedule(&esai_priv->task);
91+
fsl_esai_hw_reset(esai_priv);
9292
}
9393

9494
if (esr & ESAI_ESR_TINIT_MASK)
@@ -702,9 +702,8 @@ static void fsl_esai_trigger_stop(struct fsl_esai *esai_priv, bool tx)
702702
ESAI_xFCR_xFR, 0);
703703
}
704704

705-
static void fsl_esai_hw_reset(unsigned long arg)
705+
static void fsl_esai_hw_reset(struct fsl_esai *esai_priv)
706706
{
707-
struct fsl_esai *esai_priv = (struct fsl_esai *)arg;
708707
bool tx = true, rx = false, enabled[2];
709708
unsigned long lock_flags;
710709
u32 tfcr, rfcr;
@@ -1097,9 +1096,6 @@ static int fsl_esai_probe(struct platform_device *pdev)
10971096
return ret;
10981097
}
10991098

1100-
tasklet_init(&esai_priv->task, fsl_esai_hw_reset,
1101-
(unsigned long)esai_priv);
1102-
11031099
pm_runtime_enable(&pdev->dev);
11041100

11051101
regcache_cache_only(esai_priv->regmap, true);
@@ -1113,10 +1109,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
11131109

11141110
static int fsl_esai_remove(struct platform_device *pdev)
11151111
{
1116-
struct fsl_esai *esai_priv = platform_get_drvdata(pdev);
1117-
11181112
pm_runtime_disable(&pdev->dev);
1119-
tasklet_kill(&esai_priv->task);
11201113

11211114
return 0;
11221115
}

0 commit comments

Comments
 (0)