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+
7878static 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
11141110static 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