| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * cs47l24.h -- ALSA SoC Audio driver for Cirrus Logic CS47L24 |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright 2015 Cirrus Logic Inc. |
|---|
| 5 | 6 | * |
|---|
| 6 | 7 | * Author: Richard Fitzgerald <rf@opensource.wolfsonmicro.com> |
|---|
| 7 | | - * |
|---|
| 8 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 9 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 10 | | - * published by the Free Software Foundation. |
|---|
| 11 | 8 | */ |
|---|
| 12 | 9 | |
|---|
| 13 | 10 | #include <linux/module.h> |
|---|
| .. | .. |
|---|
| 75 | 72 | |
|---|
| 76 | 73 | v = (v & ARIZONA_SYSCLK_FREQ_MASK) >> ARIZONA_SYSCLK_FREQ_SHIFT; |
|---|
| 77 | 74 | |
|---|
| 78 | | - return wm_adsp2_early_event(w, kcontrol, event, v); |
|---|
| 75 | + wm_adsp2_set_dspclk(w, v); |
|---|
| 76 | + |
|---|
| 77 | + return wm_adsp_early_event(w, kcontrol, event); |
|---|
| 79 | 78 | } |
|---|
| 80 | 79 | |
|---|
| 81 | 80 | static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); |
|---|
| .. | .. |
|---|
| 500 | 499 | |
|---|
| 501 | 500 | SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0, |
|---|
| 502 | 501 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX1_ENA_SHIFT, 0), |
|---|
| 503 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 0, |
|---|
| 502 | +SND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 1, |
|---|
| 504 | 503 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX2_ENA_SHIFT, 0), |
|---|
| 505 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 0, |
|---|
| 504 | +SND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 2, |
|---|
| 506 | 505 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX3_ENA_SHIFT, 0), |
|---|
| 507 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 0, |
|---|
| 506 | +SND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 3, |
|---|
| 508 | 507 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX4_ENA_SHIFT, 0), |
|---|
| 509 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 0, |
|---|
| 508 | +SND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 4, |
|---|
| 510 | 509 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX5_ENA_SHIFT, 0), |
|---|
| 511 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 0, |
|---|
| 510 | +SND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 5, |
|---|
| 512 | 511 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX6_ENA_SHIFT, 0), |
|---|
| 513 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 0, |
|---|
| 512 | +SND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 6, |
|---|
| 514 | 513 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX7_ENA_SHIFT, 0), |
|---|
| 515 | | -SND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 0, |
|---|
| 514 | +SND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 7, |
|---|
| 516 | 515 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX8_ENA_SHIFT, 0), |
|---|
| 517 | 516 | |
|---|
| 518 | 517 | SND_SOC_DAPM_AIF_IN("AIF1RX1", NULL, 0, |
|---|
| 519 | 518 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX1_ENA_SHIFT, 0), |
|---|
| 520 | | -SND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 0, |
|---|
| 519 | +SND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 1, |
|---|
| 521 | 520 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX2_ENA_SHIFT, 0), |
|---|
| 522 | | -SND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 0, |
|---|
| 521 | +SND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 2, |
|---|
| 523 | 522 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX3_ENA_SHIFT, 0), |
|---|
| 524 | | -SND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 0, |
|---|
| 523 | +SND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 3, |
|---|
| 525 | 524 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX4_ENA_SHIFT, 0), |
|---|
| 526 | | -SND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 0, |
|---|
| 525 | +SND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 4, |
|---|
| 527 | 526 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX5_ENA_SHIFT, 0), |
|---|
| 528 | | -SND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 0, |
|---|
| 527 | +SND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 5, |
|---|
| 529 | 528 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX6_ENA_SHIFT, 0), |
|---|
| 530 | | -SND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 0, |
|---|
| 529 | +SND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 6, |
|---|
| 531 | 530 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX7_ENA_SHIFT, 0), |
|---|
| 532 | | -SND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 0, |
|---|
| 531 | +SND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 7, |
|---|
| 533 | 532 | ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX8_ENA_SHIFT, 0), |
|---|
| 534 | 533 | |
|---|
| 535 | 534 | SND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0, |
|---|
| 536 | 535 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX1_ENA_SHIFT, 0), |
|---|
| 537 | | -SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 0, |
|---|
| 536 | +SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 1, |
|---|
| 538 | 537 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX2_ENA_SHIFT, 0), |
|---|
| 539 | | -SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 0, |
|---|
| 538 | +SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 2, |
|---|
| 540 | 539 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX3_ENA_SHIFT, 0), |
|---|
| 541 | | -SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 0, |
|---|
| 540 | +SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 3, |
|---|
| 542 | 541 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX4_ENA_SHIFT, 0), |
|---|
| 543 | | -SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 0, |
|---|
| 542 | +SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 4, |
|---|
| 544 | 543 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX5_ENA_SHIFT, 0), |
|---|
| 545 | | -SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 0, |
|---|
| 544 | +SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 5, |
|---|
| 546 | 545 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX6_ENA_SHIFT, 0), |
|---|
| 547 | 546 | |
|---|
| 548 | 547 | SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0, |
|---|
| 549 | 548 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX1_ENA_SHIFT, 0), |
|---|
| 550 | | -SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, |
|---|
| 549 | +SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 1, |
|---|
| 551 | 550 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0), |
|---|
| 552 | | -SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 0, |
|---|
| 551 | +SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 2, |
|---|
| 553 | 552 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX3_ENA_SHIFT, 0), |
|---|
| 554 | | -SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 0, |
|---|
| 553 | +SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 3, |
|---|
| 555 | 554 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX4_ENA_SHIFT, 0), |
|---|
| 556 | | -SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 0, |
|---|
| 555 | +SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 4, |
|---|
| 557 | 556 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX5_ENA_SHIFT, 0), |
|---|
| 558 | | -SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 0, |
|---|
| 557 | +SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 5, |
|---|
| 559 | 558 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX6_ENA_SHIFT, 0), |
|---|
| 560 | 559 | |
|---|
| 561 | 560 | SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0, |
|---|
| 562 | 561 | ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX1_ENA_SHIFT, 0), |
|---|
| 563 | | -SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 0, |
|---|
| 562 | +SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 1, |
|---|
| 564 | 563 | ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX2_ENA_SHIFT, 0), |
|---|
| 565 | 564 | |
|---|
| 566 | 565 | SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0, |
|---|
| 567 | 566 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX1_ENA_SHIFT, 0), |
|---|
| 568 | | -SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, |
|---|
| 567 | +SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 1, |
|---|
| 569 | 568 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), |
|---|
| 570 | 569 | |
|---|
| 571 | 570 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, |
|---|
| .. | .. |
|---|
| 1069 | 1068 | }, |
|---|
| 1070 | 1069 | }; |
|---|
| 1071 | 1070 | |
|---|
| 1072 | | -static int cs47l24_open(struct snd_compr_stream *stream) |
|---|
| 1071 | +static int cs47l24_open(struct snd_soc_component *component, |
|---|
| 1072 | + struct snd_compr_stream *stream) |
|---|
| 1073 | 1073 | { |
|---|
| 1074 | 1074 | struct snd_soc_pcm_runtime *rtd = stream->private_data; |
|---|
| 1075 | | - struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME); |
|---|
| 1076 | 1075 | struct cs47l24_priv *priv = snd_soc_component_get_drvdata(component); |
|---|
| 1077 | 1076 | struct arizona *arizona = priv->core.arizona; |
|---|
| 1078 | 1077 | int n_adsp; |
|---|
| 1079 | 1078 | |
|---|
| 1080 | | - if (strcmp(rtd->codec_dai->name, "cs47l24-dsp-voicectrl") == 0) { |
|---|
| 1079 | + if (strcmp(asoc_rtd_to_codec(rtd, 0)->name, "cs47l24-dsp-voicectrl") == 0) { |
|---|
| 1081 | 1080 | n_adsp = 2; |
|---|
| 1082 | | - } else if (strcmp(rtd->codec_dai->name, "cs47l24-dsp-trace") == 0) { |
|---|
| 1081 | + } else if (strcmp(asoc_rtd_to_codec(rtd, 0)->name, "cs47l24-dsp-trace") == 0) { |
|---|
| 1083 | 1082 | n_adsp = 1; |
|---|
| 1084 | 1083 | } else { |
|---|
| 1085 | 1084 | dev_err(arizona->dev, |
|---|
| 1086 | 1085 | "No suitable compressed stream for DAI '%s'\n", |
|---|
| 1087 | | - rtd->codec_dai->name); |
|---|
| 1086 | + asoc_rtd_to_codec(rtd, 0)->name); |
|---|
| 1088 | 1087 | return -EINVAL; |
|---|
| 1089 | 1088 | } |
|---|
| 1090 | 1089 | |
|---|
| .. | .. |
|---|
| 1179 | 1178 | ARIZONA_DAC_DIGITAL_VOLUME_4L, |
|---|
| 1180 | 1179 | }; |
|---|
| 1181 | 1180 | |
|---|
| 1182 | | -static struct snd_compr_ops cs47l24_compr_ops = { |
|---|
| 1181 | +static struct snd_compress_ops cs47l24_compress_ops = { |
|---|
| 1183 | 1182 | .open = cs47l24_open, |
|---|
| 1184 | 1183 | .free = wm_adsp_compr_free, |
|---|
| 1185 | 1184 | .set_params = wm_adsp_compr_set_params, |
|---|
| .. | .. |
|---|
| 1195 | 1194 | .set_sysclk = arizona_set_sysclk, |
|---|
| 1196 | 1195 | .set_pll = cs47l24_set_fll, |
|---|
| 1197 | 1196 | .name = DRV_NAME, |
|---|
| 1198 | | - .compr_ops = &cs47l24_compr_ops, |
|---|
| 1197 | + .compress_ops = &cs47l24_compress_ops, |
|---|
| 1199 | 1198 | .controls = cs47l24_snd_controls, |
|---|
| 1200 | 1199 | .num_controls = ARRAY_SIZE(cs47l24_snd_controls), |
|---|
| 1201 | 1200 | .dapm_widgets = cs47l24_dapm_widgets, |
|---|