Message ID | 20230707075058.3402832-2-u.kleine-koenig@pengutronix.de (mailing list archive) |
---|---|
State | Accepted |
Commit | 35bc3efb3157cc5a9c3b5853591c4dcef40f6029 |
Headers | show |
Series | [1/2] ALSA: pcmtest: Convert to platform remove callback returning void | expand |
On 7/7/23 11:50, Uwe Kleine-König wrote: > While there is probably only ever a single instance of such a pcmtst > device, it's still bad style to use a static variable to store per > device data. Make use of platform_get_drvdata() and > platform_set_drvdata() which fixes a data corruption if there should be > two or more such devices (or this driver is used as a template for > another driver). > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > --- > sound/drivers/pcmtest.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/sound/drivers/pcmtest.c b/sound/drivers/pcmtest.c > index 1fff85feaf82..291e7fe47893 100644 > --- a/sound/drivers/pcmtest.c > +++ b/sound/drivers/pcmtest.c > @@ -110,8 +110,6 @@ struct pcmtst_buf_iter { > struct timer_list timer_instance; > }; > > -static struct pcmtst *pcmtst; > - > static struct snd_pcm_hardware snd_pcmtst_hw = { > .info = (SNDRV_PCM_INFO_INTERLEAVED | > SNDRV_PCM_INFO_BLOCK_TRANSFER | > @@ -552,6 +550,7 @@ static int snd_pcmtst_create(struct snd_card *card, struct platform_device *pdev > static int pcmtst_probe(struct platform_device *pdev) > { > struct snd_card *card; > + struct pcmtst *pcmtst; > int err; > > err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); > @@ -573,11 +572,15 @@ static int pcmtst_probe(struct platform_device *pdev) > if (err < 0) > return err; > > + platform_set_drvdata(pdev, pcmtst); > + > return 0; > } > > -static void pdev_remove(struct platform_device *dev) > +static void pdev_remove(struct platform_device *pdev) > { > + struct pcmtst *pcmtst = platform_get_drvdata(pdev); > + > snd_pcmtst_free(pcmtst); > } > Also looks good. Acked-by: Ivan Orlov <ivan.orlov0322@gmail.com>
diff --git a/sound/drivers/pcmtest.c b/sound/drivers/pcmtest.c index 1fff85feaf82..291e7fe47893 100644 --- a/sound/drivers/pcmtest.c +++ b/sound/drivers/pcmtest.c @@ -110,8 +110,6 @@ struct pcmtst_buf_iter { struct timer_list timer_instance; }; -static struct pcmtst *pcmtst; - static struct snd_pcm_hardware snd_pcmtst_hw = { .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -552,6 +550,7 @@ static int snd_pcmtst_create(struct snd_card *card, struct platform_device *pdev static int pcmtst_probe(struct platform_device *pdev) { struct snd_card *card; + struct pcmtst *pcmtst; int err; err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); @@ -573,11 +572,15 @@ static int pcmtst_probe(struct platform_device *pdev) if (err < 0) return err; + platform_set_drvdata(pdev, pcmtst); + return 0; } -static void pdev_remove(struct platform_device *dev) +static void pdev_remove(struct platform_device *pdev) { + struct pcmtst *pcmtst = platform_get_drvdata(pdev); + snd_pcmtst_free(pcmtst); }
While there is probably only ever a single instance of such a pcmtst device, it's still bad style to use a static variable to store per device data. Make use of platform_get_drvdata() and platform_set_drvdata() which fixes a data corruption if there should be two or more such devices (or this driver is used as a template for another driver). Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- sound/drivers/pcmtest.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)