| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Driver for Atmel AC97C |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (C) 2005-2009 Atmel Corporation |
|---|
| 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. |
|---|
| 9 | 6 | */ |
|---|
| 10 | 7 | #include <linux/clk.h> |
|---|
| 11 | 8 | #include <linux/delay.h> |
|---|
| .. | .. |
|---|
| 162 | 159 | struct snd_pcm_hw_params *hw_params) |
|---|
| 163 | 160 | { |
|---|
| 164 | 161 | struct atmel_ac97c *chip = snd_pcm_substream_chip(substream); |
|---|
| 165 | | - int retval; |
|---|
| 166 | | - |
|---|
| 167 | | - retval = snd_pcm_lib_malloc_pages(substream, |
|---|
| 168 | | - params_buffer_bytes(hw_params)); |
|---|
| 169 | | - if (retval < 0) |
|---|
| 170 | | - return retval; |
|---|
| 171 | 162 | |
|---|
| 172 | 163 | /* Set restrictions to params. */ |
|---|
| 173 | 164 | mutex_lock(&opened_mutex); |
|---|
| .. | .. |
|---|
| 175 | 166 | chip->cur_format = params_format(hw_params); |
|---|
| 176 | 167 | mutex_unlock(&opened_mutex); |
|---|
| 177 | 168 | |
|---|
| 178 | | - return retval; |
|---|
| 169 | + return 0; |
|---|
| 179 | 170 | } |
|---|
| 180 | 171 | |
|---|
| 181 | 172 | static int atmel_ac97c_capture_hw_params(struct snd_pcm_substream *substream, |
|---|
| 182 | 173 | struct snd_pcm_hw_params *hw_params) |
|---|
| 183 | 174 | { |
|---|
| 184 | 175 | struct atmel_ac97c *chip = snd_pcm_substream_chip(substream); |
|---|
| 185 | | - int retval; |
|---|
| 186 | | - |
|---|
| 187 | | - retval = snd_pcm_lib_malloc_pages(substream, |
|---|
| 188 | | - params_buffer_bytes(hw_params)); |
|---|
| 189 | | - if (retval < 0) |
|---|
| 190 | | - return retval; |
|---|
| 191 | 176 | |
|---|
| 192 | 177 | /* Set restrictions to params. */ |
|---|
| 193 | 178 | mutex_lock(&opened_mutex); |
|---|
| .. | .. |
|---|
| 195 | 180 | chip->cur_format = params_format(hw_params); |
|---|
| 196 | 181 | mutex_unlock(&opened_mutex); |
|---|
| 197 | 182 | |
|---|
| 198 | | - return retval; |
|---|
| 183 | + return 0; |
|---|
| 199 | 184 | } |
|---|
| 200 | 185 | |
|---|
| 201 | 186 | static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream) |
|---|
| .. | .. |
|---|
| 234 | 219 | switch (runtime->format) { |
|---|
| 235 | 220 | case SNDRV_PCM_FORMAT_S16_LE: |
|---|
| 236 | 221 | break; |
|---|
| 237 | | - case SNDRV_PCM_FORMAT_S16_BE: /* fall through */ |
|---|
| 222 | + case SNDRV_PCM_FORMAT_S16_BE: |
|---|
| 238 | 223 | word &= ~(AC97C_CMR_CEM_LITTLE); |
|---|
| 239 | 224 | break; |
|---|
| 240 | 225 | default: |
|---|
| .. | .. |
|---|
| 316 | 301 | switch (runtime->format) { |
|---|
| 317 | 302 | case SNDRV_PCM_FORMAT_S16_LE: |
|---|
| 318 | 303 | break; |
|---|
| 319 | | - case SNDRV_PCM_FORMAT_S16_BE: /* fall through */ |
|---|
| 304 | + case SNDRV_PCM_FORMAT_S16_BE: |
|---|
| 320 | 305 | word &= ~(AC97C_CMR_CEM_LITTLE); |
|---|
| 321 | 306 | break; |
|---|
| 322 | 307 | default: |
|---|
| .. | .. |
|---|
| 371 | 356 | camr = ac97c_readl(chip, CAMR); |
|---|
| 372 | 357 | |
|---|
| 373 | 358 | switch (cmd) { |
|---|
| 374 | | - case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: /* fall through */ |
|---|
| 375 | | - case SNDRV_PCM_TRIGGER_RESUME: /* fall through */ |
|---|
| 359 | + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
|---|
| 360 | + case SNDRV_PCM_TRIGGER_RESUME: |
|---|
| 376 | 361 | case SNDRV_PCM_TRIGGER_START: |
|---|
| 377 | 362 | ptcr = ATMEL_PDC_TXTEN; |
|---|
| 378 | 363 | camr |= AC97C_CMR_CENA | AC97C_CSR_ENDTX; |
|---|
| 379 | 364 | break; |
|---|
| 380 | | - case SNDRV_PCM_TRIGGER_PAUSE_PUSH: /* fall through */ |
|---|
| 381 | | - case SNDRV_PCM_TRIGGER_SUSPEND: /* fall through */ |
|---|
| 365 | + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: |
|---|
| 366 | + case SNDRV_PCM_TRIGGER_SUSPEND: |
|---|
| 382 | 367 | case SNDRV_PCM_TRIGGER_STOP: |
|---|
| 383 | 368 | ptcr |= ATMEL_PDC_TXTDIS; |
|---|
| 384 | 369 | if (chip->opened <= 1) |
|---|
| .. | .. |
|---|
| 403 | 388 | ptcr = readl(chip->regs + ATMEL_PDC_PTSR); |
|---|
| 404 | 389 | |
|---|
| 405 | 390 | switch (cmd) { |
|---|
| 406 | | - case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: /* fall through */ |
|---|
| 407 | | - case SNDRV_PCM_TRIGGER_RESUME: /* fall through */ |
|---|
| 391 | + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
|---|
| 392 | + case SNDRV_PCM_TRIGGER_RESUME: |
|---|
| 408 | 393 | case SNDRV_PCM_TRIGGER_START: |
|---|
| 409 | 394 | ptcr = ATMEL_PDC_RXTEN; |
|---|
| 410 | 395 | camr |= AC97C_CMR_CENA | AC97C_CSR_ENDRX; |
|---|
| 411 | 396 | break; |
|---|
| 412 | | - case SNDRV_PCM_TRIGGER_PAUSE_PUSH: /* fall through */ |
|---|
| 413 | | - case SNDRV_PCM_TRIGGER_SUSPEND: /* fall through */ |
|---|
| 397 | + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: |
|---|
| 398 | + case SNDRV_PCM_TRIGGER_SUSPEND: |
|---|
| 414 | 399 | case SNDRV_PCM_TRIGGER_STOP: |
|---|
| 415 | 400 | ptcr |= ATMEL_PDC_RXTDIS; |
|---|
| 416 | 401 | if (chip->opened <= 1) |
|---|
| .. | .. |
|---|
| 462 | 447 | static const struct snd_pcm_ops atmel_ac97_playback_ops = { |
|---|
| 463 | 448 | .open = atmel_ac97c_playback_open, |
|---|
| 464 | 449 | .close = atmel_ac97c_playback_close, |
|---|
| 465 | | - .ioctl = snd_pcm_lib_ioctl, |
|---|
| 466 | 450 | .hw_params = atmel_ac97c_playback_hw_params, |
|---|
| 467 | | - .hw_free = snd_pcm_lib_free_pages, |
|---|
| 468 | 451 | .prepare = atmel_ac97c_playback_prepare, |
|---|
| 469 | 452 | .trigger = atmel_ac97c_playback_trigger, |
|---|
| 470 | 453 | .pointer = atmel_ac97c_playback_pointer, |
|---|
| .. | .. |
|---|
| 473 | 456 | static const struct snd_pcm_ops atmel_ac97_capture_ops = { |
|---|
| 474 | 457 | .open = atmel_ac97c_capture_open, |
|---|
| 475 | 458 | .close = atmel_ac97c_capture_close, |
|---|
| 476 | | - .ioctl = snd_pcm_lib_ioctl, |
|---|
| 477 | 459 | .hw_params = atmel_ac97c_capture_hw_params, |
|---|
| 478 | | - .hw_free = snd_pcm_lib_free_pages, |
|---|
| 479 | 460 | .prepare = atmel_ac97c_capture_prepare, |
|---|
| 480 | 461 | .trigger = atmel_ac97c_capture_trigger, |
|---|
| 481 | 462 | .pointer = atmel_ac97c_capture_pointer, |
|---|
| .. | .. |
|---|
| 494 | 475 | struct snd_pcm_runtime *runtime; |
|---|
| 495 | 476 | int offset, next_period, block_size; |
|---|
| 496 | 477 | dev_dbg(&chip->pdev->dev, "channel A event%s%s%s%s%s%s\n", |
|---|
| 497 | | - casr & AC97C_CSR_OVRUN ? " OVRUN" : "", |
|---|
| 498 | | - casr & AC97C_CSR_RXRDY ? " RXRDY" : "", |
|---|
| 499 | | - casr & AC97C_CSR_UNRUN ? " UNRUN" : "", |
|---|
| 500 | | - casr & AC97C_CSR_TXEMPTY ? " TXEMPTY" : "", |
|---|
| 501 | | - casr & AC97C_CSR_TXRDY ? " TXRDY" : "", |
|---|
| 502 | | - !casr ? " NONE" : ""); |
|---|
| 478 | + (casr & AC97C_CSR_OVRUN) ? " OVRUN" : "", |
|---|
| 479 | + (casr & AC97C_CSR_RXRDY) ? " RXRDY" : "", |
|---|
| 480 | + (casr & AC97C_CSR_UNRUN) ? " UNRUN" : "", |
|---|
| 481 | + (casr & AC97C_CSR_TXEMPTY) ? " TXEMPTY" : "", |
|---|
| 482 | + (casr & AC97C_CSR_TXRDY) ? " TXRDY" : "", |
|---|
| 483 | + !casr ? " NONE" : ""); |
|---|
| 503 | 484 | if ((casr & camr) & AC97C_CSR_ENDTX) { |
|---|
| 504 | 485 | runtime = chip->playback_substream->runtime; |
|---|
| 505 | 486 | block_size = frames_to_bytes(runtime, runtime->period_size); |
|---|
| .. | .. |
|---|
| 540 | 521 | |
|---|
| 541 | 522 | if (sr & AC97C_SR_COEVT) { |
|---|
| 542 | 523 | dev_info(&chip->pdev->dev, "codec channel event%s%s%s%s%s\n", |
|---|
| 543 | | - cosr & AC97C_CSR_OVRUN ? " OVRUN" : "", |
|---|
| 544 | | - cosr & AC97C_CSR_RXRDY ? " RXRDY" : "", |
|---|
| 545 | | - cosr & AC97C_CSR_TXEMPTY ? " TXEMPTY" : "", |
|---|
| 546 | | - cosr & AC97C_CSR_TXRDY ? " TXRDY" : "", |
|---|
| 547 | | - !cosr ? " NONE" : ""); |
|---|
| 524 | + (cosr & AC97C_CSR_OVRUN) ? " OVRUN" : "", |
|---|
| 525 | + (cosr & AC97C_CSR_RXRDY) ? " RXRDY" : "", |
|---|
| 526 | + (cosr & AC97C_CSR_TXEMPTY) ? " TXEMPTY" : "", |
|---|
| 527 | + (cosr & AC97C_CSR_TXRDY) ? " TXRDY" : "", |
|---|
| 528 | + !cosr ? " NONE" : ""); |
|---|
| 548 | 529 | retval = IRQ_HANDLED; |
|---|
| 549 | 530 | } |
|---|
| 550 | 531 | |
|---|
| .. | .. |
|---|
| 603 | 584 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &atmel_ac97_capture_ops); |
|---|
| 604 | 585 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &atmel_ac97_playback_ops); |
|---|
| 605 | 586 | |
|---|
| 606 | | - retval = snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, |
|---|
| 587 | + snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, |
|---|
| 607 | 588 | &chip->pdev->dev, hw.periods_min * hw.period_bytes_min, |
|---|
| 608 | 589 | hw.buffer_bytes_max); |
|---|
| 609 | | - if (retval) |
|---|
| 610 | | - return retval; |
|---|
| 611 | 590 | |
|---|
| 612 | 591 | pcm->private_data = chip; |
|---|
| 613 | 592 | pcm->info_flags = 0; |
|---|
| .. | .. |
|---|
| 723 | 702 | struct atmel_ac97c *chip; |
|---|
| 724 | 703 | struct resource *regs; |
|---|
| 725 | 704 | struct clk *pclk; |
|---|
| 726 | | - static struct snd_ac97_bus_ops ops = { |
|---|
| 705 | + static const struct snd_ac97_bus_ops ops = { |
|---|
| 727 | 706 | .write = atmel_ac97c_write, |
|---|
| 728 | 707 | .read = atmel_ac97c_read, |
|---|
| 729 | 708 | }; |
|---|