Skip to content

Commit

Permalink
ASoC: fsl: Replace tasklet with work
Browse files Browse the repository at this point in the history
The tasklet is an old API that should be deprecated, usually can be
converted to another decent API.  In ASoC FSL ESAI CPU DAI driver, a
tasklet is still used for offloading the hardware reset function.
It can be achieved gracefully with a work queued, too.

This patch replaces the tasklet usage in fsl esai driver with a simple
work.  The conversion is fairly straightforward.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200903104749.21435-2-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Takashi Iwai authored and Mark Brown committed Sep 9, 2020
1 parent 05680cc commit a3d1f93
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions sound/soc/fsl/fsl_esai.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ struct fsl_esai_soc_data {
* @extalclk: esai clock source to derive HCK, SCK and FS
* @fsysclk: system clock source to derive HCK, SCK and FS
* @spbaclk: SPBA clock (optional, depending on SoC design)
* @task: tasklet to handle the reset operation
* @work: work to handle the reset operation
* @soc: soc specific data
* @lock: spin lock between hw_reset() and trigger()
* @fifo_depth: depth of tx/rx FIFO
Expand All @@ -67,7 +67,7 @@ struct fsl_esai {
struct clk *extalclk;
struct clk *fsysclk;
struct clk *spbaclk;
struct tasklet_struct task;
struct work_struct work;
const struct fsl_esai_soc_data *soc;
spinlock_t lock; /* Protect hw_reset and trigger */
u32 fifo_depth;
Expand Down Expand Up @@ -117,7 +117,7 @@ static irqreturn_t esai_isr(int irq, void *devid)
ESAI_xCR_xEIE_MASK, 0);
regmap_update_bits(esai_priv->regmap, REG_ESAI_RCR,
ESAI_xCR_xEIE_MASK, 0);
tasklet_schedule(&esai_priv->task);
schedule_work(&esai_priv->work);
}

if (esr & ESAI_ESR_TINIT_MASK)
Expand Down Expand Up @@ -708,9 +708,9 @@ static void fsl_esai_trigger_stop(struct fsl_esai *esai_priv, bool tx)
ESAI_xFCR_xFR, 0);
}

static void fsl_esai_hw_reset(struct tasklet_struct *t)
static void fsl_esai_hw_reset(struct work_struct *work)
{
struct fsl_esai *esai_priv = from_tasklet(esai_priv, t, task);
struct fsl_esai *esai_priv = container_of(work, struct fsl_esai, work);
bool tx = true, rx = false, enabled[2];
unsigned long lock_flags;
u32 tfcr, rfcr;
Expand Down Expand Up @@ -1070,7 +1070,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
return ret;
}

tasklet_setup(&esai_priv->task, fsl_esai_hw_reset);
INIT_WORK(&esai_priv->work, fsl_esai_hw_reset);

pm_runtime_enable(&pdev->dev);

Expand All @@ -1088,7 +1088,7 @@ static int fsl_esai_remove(struct platform_device *pdev)
struct fsl_esai *esai_priv = platform_get_drvdata(pdev);

pm_runtime_disable(&pdev->dev);
tasklet_kill(&esai_priv->task);
cancel_work_sync(&esai_priv->work);

return 0;
}
Expand Down

0 comments on commit a3d1f93

Please sign in to comment.