hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/sound/spi/at73c213.c
....@@ -1,11 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Driver for AT73C213 16-bit stereo DAC connected to Atmel SSC
34 *
45 * Copyright (C) 2006-2007 Atmel Norway
5
- *
6
- * This program is free software; you can redistribute it and/or modify it
7
- * under the terms of the GNU General Public License version 2 as published by
8
- * the Free Software Foundation.
96 */
107
118 /*#define DEBUG*/
....@@ -39,7 +36,7 @@
3936 #define BITRATE_MAX 50000 /* Hardware limit. */
4037
4138 /* Initial (hardware reset) AT73C213 register values. */
42
-static u8 snd_at73c213_original_image[18] =
39
+static const u8 snd_at73c213_original_image[18] =
4340 {
4441 0x00, /* 00 - CTRL */
4542 0x05, /* 01 - LLIG */
....@@ -221,7 +218,9 @@
221218 runtime->hw = snd_at73c213_playback_hw;
222219 chip->substream = substream;
223220
224
- clk_enable(chip->ssc->clk);
221
+ err = clk_enable(chip->ssc->clk);
222
+ if (err)
223
+ return err;
225224
226225 return 0;
227226 }
....@@ -245,13 +244,7 @@
245244 val = SSC_BFINS(TFMR_DATNB, channels - 1, val);
246245 ssc_writel(chip->ssc->regs, TFMR, val);
247246
248
- return snd_pcm_lib_malloc_pages(substream,
249
- params_buffer_bytes(hw_params));
250
-}
251
-
252
-static int snd_at73c213_pcm_hw_free(struct snd_pcm_substream *substream)
253
-{
254
- return snd_pcm_lib_free_pages(substream);
247
+ return 0;
255248 }
256249
257250 static int snd_at73c213_pcm_prepare(struct snd_pcm_substream *substream)
....@@ -325,9 +318,7 @@
325318 static const struct snd_pcm_ops at73c213_playback_ops = {
326319 .open = snd_at73c213_pcm_open,
327320 .close = snd_at73c213_pcm_close,
328
- .ioctl = snd_pcm_lib_ioctl,
329321 .hw_params = snd_at73c213_pcm_hw_params,
330
- .hw_free = snd_at73c213_pcm_hw_free,
331322 .prepare = snd_at73c213_pcm_prepare,
332323 .trigger = snd_at73c213_pcm_trigger,
333324 .pointer = snd_at73c213_pcm_pointer,
....@@ -350,7 +341,7 @@
350341
351342 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &at73c213_playback_ops);
352343
353
- retval = snd_pcm_lib_preallocate_pages_for_all(chip->pcm,
344
+ snd_pcm_set_managed_buffer_all(chip->pcm,
354345 SNDRV_DMA_TYPE_DEV, &chip->ssc->pdev->dev,
355346 64 * 1024, 64 * 1024);
356347 out:
....@@ -668,7 +659,7 @@
668659 | (mask << 24) | (invert << 22)) \
669660 }
670661
671
-static struct snd_kcontrol_new snd_at73c213_controls[] = {
662
+static const struct snd_kcontrol_new snd_at73c213_controls[] = {
672663 AT73C213_STEREO("Master Playback Volume", 0, DAC_LMPG, DAC_RMPG, 0, 0, 0x1f, 1),
673664 AT73C213_STEREO("Master Playback Switch", 0, DAC_LMPG, DAC_RMPG, 5, 5, 1, 1),
674665 AT73C213_STEREO("PCM Playback Volume", 0, DAC_LLOG, DAC_RLOG, 0, 0, 0x1f, 1),
....@@ -787,7 +778,9 @@
787778 goto out;
788779
789780 /* Enable DAC master clock. */
790
- clk_enable(chip->board->dac_clk);
781
+ retval = clk_enable(chip->board->dac_clk);
782
+ if (retval)
783
+ goto out;
791784
792785 /* Initialize at73c213 on SPI bus. */
793786 retval = snd_at73c213_write_reg(chip, DAC_RST, 0x04);
....@@ -885,7 +878,7 @@
885878 static int snd_at73c213_dev_init(struct snd_card *card,
886879 struct spi_device *spi)
887880 {
888
- static struct snd_device_ops ops = {
881
+ static const struct snd_device_ops ops = {
889882 .dev_free = snd_at73c213_dev_free,
890883 };
891884 struct snd_at73c213 *chip = get_chip(card);
....@@ -900,7 +893,9 @@
900893 chip->card = card;
901894 chip->irq = -1;
902895
903
- clk_enable(chip->ssc->clk);
896
+ retval = clk_enable(chip->ssc->clk);
897
+ if (retval)
898
+ return retval;
904899
905900 retval = request_irq(irq, snd_at73c213_interrupt, 0, "at73c213", chip);
906901 if (retval) {
....@@ -1019,7 +1014,9 @@
10191014 int retval;
10201015
10211016 /* Stop playback. */
1022
- clk_enable(chip->ssc->clk);
1017
+ retval = clk_enable(chip->ssc->clk);
1018
+ if (retval)
1019
+ goto out;
10231020 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS));
10241021 clk_disable(chip->ssc->clk);
10251022
....@@ -1099,9 +1096,16 @@
10991096 {
11001097 struct snd_card *card = dev_get_drvdata(dev);
11011098 struct snd_at73c213 *chip = card->private_data;
1099
+ int retval;
11021100
1103
- clk_enable(chip->board->dac_clk);
1104
- clk_enable(chip->ssc->clk);
1101
+ retval = clk_enable(chip->board->dac_clk);
1102
+ if (retval)
1103
+ return retval;
1104
+ retval = clk_enable(chip->ssc->clk);
1105
+ if (retval) {
1106
+ clk_disable(chip->board->dac_clk);
1107
+ return retval;
1108
+ }
11051109 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN));
11061110
11071111 return 0;