162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * wm8998.c -- ALSA SoC Audio driver for WM8998 codecs
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright 2015 Cirrus Logic, Inc.
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Author: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/module.h>
1162306a36Sopenharmony_ci#include <linux/moduleparam.h>
1262306a36Sopenharmony_ci#include <linux/init.h>
1362306a36Sopenharmony_ci#include <linux/delay.h>
1462306a36Sopenharmony_ci#include <linux/pm.h>
1562306a36Sopenharmony_ci#include <linux/pm_runtime.h>
1662306a36Sopenharmony_ci#include <linux/regmap.h>
1762306a36Sopenharmony_ci#include <linux/slab.h>
1862306a36Sopenharmony_ci#include <sound/core.h>
1962306a36Sopenharmony_ci#include <sound/pcm.h>
2062306a36Sopenharmony_ci#include <sound/pcm_params.h>
2162306a36Sopenharmony_ci#include <sound/soc.h>
2262306a36Sopenharmony_ci#include <sound/jack.h>
2362306a36Sopenharmony_ci#include <sound/initval.h>
2462306a36Sopenharmony_ci#include <sound/tlv.h>
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#include <linux/mfd/arizona/core.h>
2762306a36Sopenharmony_ci#include <linux/mfd/arizona/registers.h>
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#include "arizona.h"
3062306a36Sopenharmony_ci#include "wm8998.h"
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct wm8998_priv {
3362306a36Sopenharmony_ci	struct arizona_priv core;
3462306a36Sopenharmony_ci	struct arizona_fll fll[2];
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistatic int wm8998_asrc_ev(struct snd_soc_dapm_widget *w,
3862306a36Sopenharmony_ci			  struct snd_kcontrol *kcontrol,
3962306a36Sopenharmony_ci			  int event)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
4262306a36Sopenharmony_ci	unsigned int val;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	switch (event) {
4562306a36Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
4662306a36Sopenharmony_ci		val = snd_soc_component_read(component, ARIZONA_ASRC_RATE1);
4762306a36Sopenharmony_ci		val &= ARIZONA_ASRC_RATE1_MASK;
4862306a36Sopenharmony_ci		val >>= ARIZONA_ASRC_RATE1_SHIFT;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci		switch (val) {
5162306a36Sopenharmony_ci		case 0:
5262306a36Sopenharmony_ci		case 1:
5362306a36Sopenharmony_ci		case 2:
5462306a36Sopenharmony_ci			val = snd_soc_component_read(component,
5562306a36Sopenharmony_ci					   ARIZONA_SAMPLE_RATE_1 + val);
5662306a36Sopenharmony_ci			if (val >= 0x11) {
5762306a36Sopenharmony_ci				dev_warn(component->dev,
5862306a36Sopenharmony_ci					 "Unsupported ASRC rate1 (%s)\n",
5962306a36Sopenharmony_ci					 arizona_sample_rate_val_to_name(val));
6062306a36Sopenharmony_ci				return -EINVAL;
6162306a36Sopenharmony_ci			}
6262306a36Sopenharmony_ci			break;
6362306a36Sopenharmony_ci		default:
6462306a36Sopenharmony_ci			dev_err(component->dev,
6562306a36Sopenharmony_ci				"Illegal ASRC rate1 selector (0x%x)\n",
6662306a36Sopenharmony_ci				val);
6762306a36Sopenharmony_ci			return -EINVAL;
6862306a36Sopenharmony_ci		}
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci		val = snd_soc_component_read(component, ARIZONA_ASRC_RATE2);
7162306a36Sopenharmony_ci		val &= ARIZONA_ASRC_RATE2_MASK;
7262306a36Sopenharmony_ci		val >>= ARIZONA_ASRC_RATE2_SHIFT;
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci		switch (val) {
7562306a36Sopenharmony_ci		case 8:
7662306a36Sopenharmony_ci		case 9:
7762306a36Sopenharmony_ci			val -= 0x8;
7862306a36Sopenharmony_ci			val = snd_soc_component_read(component,
7962306a36Sopenharmony_ci					   ARIZONA_ASYNC_SAMPLE_RATE_1 + val);
8062306a36Sopenharmony_ci			if (val >= 0x11) {
8162306a36Sopenharmony_ci				dev_warn(component->dev,
8262306a36Sopenharmony_ci					 "Unsupported ASRC rate2 (%s)\n",
8362306a36Sopenharmony_ci					 arizona_sample_rate_val_to_name(val));
8462306a36Sopenharmony_ci				return -EINVAL;
8562306a36Sopenharmony_ci			}
8662306a36Sopenharmony_ci			break;
8762306a36Sopenharmony_ci		default:
8862306a36Sopenharmony_ci			dev_err(component->dev,
8962306a36Sopenharmony_ci				"Illegal ASRC rate2 selector (0x%x)\n",
9062306a36Sopenharmony_ci				val);
9162306a36Sopenharmony_ci			return -EINVAL;
9262306a36Sopenharmony_ci		}
9362306a36Sopenharmony_ci		break;
9462306a36Sopenharmony_ci	default:
9562306a36Sopenharmony_ci		return -EINVAL;
9662306a36Sopenharmony_ci	}
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci	return 0;
9962306a36Sopenharmony_ci}
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_cistatic int wm8998_inmux_put(struct snd_kcontrol *kcontrol,
10262306a36Sopenharmony_ci			    struct snd_ctl_elem_value *ucontrol)
10362306a36Sopenharmony_ci{
10462306a36Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_kcontrol_component(kcontrol);
10562306a36Sopenharmony_ci	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
10662306a36Sopenharmony_ci	struct wm8998_priv *wm8998 = snd_soc_component_get_drvdata(component);
10762306a36Sopenharmony_ci	struct arizona *arizona = wm8998->core.arizona;
10862306a36Sopenharmony_ci	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
10962306a36Sopenharmony_ci	unsigned int mode_reg, mode_index;
11062306a36Sopenharmony_ci	unsigned int mux, inmode, src_val, mode_val;
11162306a36Sopenharmony_ci	int change, ret;
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci	mux = ucontrol->value.enumerated.item[0];
11462306a36Sopenharmony_ci	if (mux > 1)
11562306a36Sopenharmony_ci		return -EINVAL;
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci	switch (e->reg) {
11862306a36Sopenharmony_ci	case ARIZONA_ADC_DIGITAL_VOLUME_2L:
11962306a36Sopenharmony_ci		mode_reg = ARIZONA_IN2L_CONTROL;
12062306a36Sopenharmony_ci		mode_index = 1 + (2 * mux);
12162306a36Sopenharmony_ci		break;
12262306a36Sopenharmony_ci	default:
12362306a36Sopenharmony_ci		mode_reg = ARIZONA_IN1L_CONTROL;
12462306a36Sopenharmony_ci		mode_index = (2 * mux);
12562306a36Sopenharmony_ci		break;
12662306a36Sopenharmony_ci	}
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci	inmode = arizona->pdata.inmode[mode_index];
12962306a36Sopenharmony_ci	if (inmode & ARIZONA_INMODE_DMIC)
13062306a36Sopenharmony_ci		mode_val = 1 << ARIZONA_IN1_MODE_SHIFT;
13162306a36Sopenharmony_ci	else
13262306a36Sopenharmony_ci		mode_val = 0;
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci	src_val = mux << ARIZONA_IN1L_SRC_SHIFT;
13562306a36Sopenharmony_ci	if (inmode & ARIZONA_INMODE_SE)
13662306a36Sopenharmony_ci		src_val |= 1 << ARIZONA_IN1L_SRC_SE_SHIFT;
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci	snd_soc_component_update_bits(component, mode_reg,
13962306a36Sopenharmony_ci				      ARIZONA_IN1_MODE_MASK, mode_val);
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci	change = snd_soc_component_update_bits(component, e->reg,
14262306a36Sopenharmony_ci					       ARIZONA_IN1L_SRC_MASK |
14362306a36Sopenharmony_ci					       ARIZONA_IN1L_SRC_SE_MASK,
14462306a36Sopenharmony_ci					       src_val);
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	ret = snd_soc_dapm_mux_update_power(dapm, kcontrol,
14762306a36Sopenharmony_ci					    ucontrol->value.enumerated.item[0],
14862306a36Sopenharmony_ci					    e, NULL);
14962306a36Sopenharmony_ci	if (ret < 0) {
15062306a36Sopenharmony_ci		dev_err(arizona->dev, "Failed to update demux power state: %d\n", ret);
15162306a36Sopenharmony_ci		return ret;
15262306a36Sopenharmony_ci	}
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci	return change;
15562306a36Sopenharmony_ci}
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_cistatic const char * const wm8998_inmux_texts[] = {
15862306a36Sopenharmony_ci	"A",
15962306a36Sopenharmony_ci	"B",
16062306a36Sopenharmony_ci};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(wm8998_in1muxl_enum,
16362306a36Sopenharmony_ci			    ARIZONA_ADC_DIGITAL_VOLUME_1L,
16462306a36Sopenharmony_ci			    ARIZONA_IN1L_SRC_SHIFT,
16562306a36Sopenharmony_ci			    wm8998_inmux_texts);
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(wm8998_in1muxr_enum,
16862306a36Sopenharmony_ci			    ARIZONA_ADC_DIGITAL_VOLUME_1R,
16962306a36Sopenharmony_ci			    ARIZONA_IN1R_SRC_SHIFT,
17062306a36Sopenharmony_ci			    wm8998_inmux_texts);
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(wm8998_in2mux_enum,
17362306a36Sopenharmony_ci			    ARIZONA_ADC_DIGITAL_VOLUME_2L,
17462306a36Sopenharmony_ci			    ARIZONA_IN2L_SRC_SHIFT,
17562306a36Sopenharmony_ci			    wm8998_inmux_texts);
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_cistatic const struct snd_kcontrol_new wm8998_in1mux[2] = {
17862306a36Sopenharmony_ci	SOC_DAPM_ENUM_EXT("IN1L Mux", wm8998_in1muxl_enum,
17962306a36Sopenharmony_ci			  snd_soc_dapm_get_enum_double, wm8998_inmux_put),
18062306a36Sopenharmony_ci	SOC_DAPM_ENUM_EXT("IN1R Mux", wm8998_in1muxr_enum,
18162306a36Sopenharmony_ci			  snd_soc_dapm_get_enum_double, wm8998_inmux_put),
18262306a36Sopenharmony_ci};
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_cistatic const struct snd_kcontrol_new wm8998_in2mux =
18562306a36Sopenharmony_ci	SOC_DAPM_ENUM_EXT("IN2 Mux", wm8998_in2mux_enum,
18662306a36Sopenharmony_ci			  snd_soc_dapm_get_enum_double, wm8998_inmux_put);
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_cistatic DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
18962306a36Sopenharmony_cistatic DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
19062306a36Sopenharmony_cistatic DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
19162306a36Sopenharmony_cistatic DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci#define WM8998_NG_SRC(name, base) \
19462306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUTL Switch",  base,  0, 1, 0), \
19562306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUTR Switch",  base,  1, 1, 0), \
19662306a36Sopenharmony_ci	SOC_SINGLE(name " NG LINEOUTL Switch",  base,  2, 1, 0), \
19762306a36Sopenharmony_ci	SOC_SINGLE(name " NG LINEOUTR Switch",  base,  3, 1, 0), \
19862306a36Sopenharmony_ci	SOC_SINGLE(name " NG EPOUT Switch",   base,  4, 1, 0), \
19962306a36Sopenharmony_ci	SOC_SINGLE(name " NG SPKOUTL Switch",  base,  6, 1, 0), \
20062306a36Sopenharmony_ci	SOC_SINGLE(name " NG SPKOUTR Switch",  base,  7, 1, 0)
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_cistatic const struct snd_kcontrol_new wm8998_snd_controls[] = {
20362306a36Sopenharmony_ciSOC_ENUM("IN1 OSR", arizona_in_dmic_osr[0]),
20462306a36Sopenharmony_ciSOC_ENUM("IN2 OSR", arizona_in_dmic_osr[1]),
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN1L Volume", ARIZONA_IN1L_CONTROL,
20762306a36Sopenharmony_ci		     ARIZONA_IN1L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
20862306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN1R Volume", ARIZONA_IN1R_CONTROL,
20962306a36Sopenharmony_ci		     ARIZONA_IN1R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
21062306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN2 Volume", ARIZONA_IN2L_CONTROL,
21162306a36Sopenharmony_ci		     ARIZONA_IN2L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ciSOC_ENUM("IN HPF Cutoff Frequency", arizona_in_hpf_cut_enum),
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ciSOC_SINGLE("IN1L HPF Switch", ARIZONA_IN1L_CONTROL,
21662306a36Sopenharmony_ci	   ARIZONA_IN1L_HPF_SHIFT, 1, 0),
21762306a36Sopenharmony_ciSOC_SINGLE("IN1R HPF Switch", ARIZONA_IN1R_CONTROL,
21862306a36Sopenharmony_ci	   ARIZONA_IN1R_HPF_SHIFT, 1, 0),
21962306a36Sopenharmony_ciSOC_SINGLE("IN2 HPF Switch", ARIZONA_IN2L_CONTROL,
22062306a36Sopenharmony_ci	   ARIZONA_IN2L_HPF_SHIFT, 1, 0),
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ciSOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L,
22362306a36Sopenharmony_ci	       ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
22462306a36Sopenharmony_ciSOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
22562306a36Sopenharmony_ci	       ARIZONA_IN1R_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
22662306a36Sopenharmony_ciSOC_SINGLE_TLV("IN2 Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_2L,
22762306a36Sopenharmony_ci	       ARIZONA_IN2L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ciSOC_ENUM("Input Ramp Up", arizona_in_vi_ramp),
23062306a36Sopenharmony_ciSOC_ENUM("Input Ramp Down", arizona_in_vd_ramp),
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("EQ1", ARIZONA_EQ1MIX_INPUT_1_SOURCE),
23362306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("EQ2", ARIZONA_EQ2MIX_INPUT_1_SOURCE),
23462306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("EQ3", ARIZONA_EQ3MIX_INPUT_1_SOURCE),
23562306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("EQ4", ARIZONA_EQ4MIX_INPUT_1_SOURCE),
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ciSND_SOC_BYTES("EQ1 Coefficients", ARIZONA_EQ1_3, 19),
23862306a36Sopenharmony_ciSOC_SINGLE("EQ1 Mode Switch", ARIZONA_EQ1_2, ARIZONA_EQ1_B1_MODE_SHIFT, 1, 0),
23962306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B1 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B1_GAIN_SHIFT,
24062306a36Sopenharmony_ci	       24, 0, eq_tlv),
24162306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B2 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B2_GAIN_SHIFT,
24262306a36Sopenharmony_ci	       24, 0, eq_tlv),
24362306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B3 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B3_GAIN_SHIFT,
24462306a36Sopenharmony_ci	       24, 0, eq_tlv),
24562306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B4 Volume", ARIZONA_EQ1_2, ARIZONA_EQ1_B4_GAIN_SHIFT,
24662306a36Sopenharmony_ci	       24, 0, eq_tlv),
24762306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B5 Volume", ARIZONA_EQ1_2, ARIZONA_EQ1_B5_GAIN_SHIFT,
24862306a36Sopenharmony_ci	       24, 0, eq_tlv),
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_ciSND_SOC_BYTES("EQ2 Coefficients", ARIZONA_EQ2_3, 19),
25162306a36Sopenharmony_ciSOC_SINGLE("EQ2 Mode Switch", ARIZONA_EQ2_2, ARIZONA_EQ2_B1_MODE_SHIFT, 1, 0),
25262306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B1 Volume", ARIZONA_EQ2_1, ARIZONA_EQ2_B1_GAIN_SHIFT,
25362306a36Sopenharmony_ci	       24, 0, eq_tlv),
25462306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B2 Volume", ARIZONA_EQ2_1, ARIZONA_EQ2_B2_GAIN_SHIFT,
25562306a36Sopenharmony_ci	       24, 0, eq_tlv),
25662306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B3 Volume", ARIZONA_EQ2_1, ARIZONA_EQ2_B3_GAIN_SHIFT,
25762306a36Sopenharmony_ci	       24, 0, eq_tlv),
25862306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B4 Volume", ARIZONA_EQ2_2, ARIZONA_EQ2_B4_GAIN_SHIFT,
25962306a36Sopenharmony_ci	       24, 0, eq_tlv),
26062306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B5 Volume", ARIZONA_EQ2_2, ARIZONA_EQ2_B5_GAIN_SHIFT,
26162306a36Sopenharmony_ci	       24, 0, eq_tlv),
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ciSND_SOC_BYTES("EQ3 Coefficients", ARIZONA_EQ3_3, 19),
26462306a36Sopenharmony_ciSOC_SINGLE("EQ3 Mode Switch", ARIZONA_EQ3_2, ARIZONA_EQ3_B1_MODE_SHIFT, 1, 0),
26562306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B1 Volume", ARIZONA_EQ3_1, ARIZONA_EQ3_B1_GAIN_SHIFT,
26662306a36Sopenharmony_ci	       24, 0, eq_tlv),
26762306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B2 Volume", ARIZONA_EQ3_1, ARIZONA_EQ3_B2_GAIN_SHIFT,
26862306a36Sopenharmony_ci	       24, 0, eq_tlv),
26962306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B3 Volume", ARIZONA_EQ3_1, ARIZONA_EQ3_B3_GAIN_SHIFT,
27062306a36Sopenharmony_ci	       24, 0, eq_tlv),
27162306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B4 Volume", ARIZONA_EQ3_2, ARIZONA_EQ3_B4_GAIN_SHIFT,
27262306a36Sopenharmony_ci	       24, 0, eq_tlv),
27362306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B5 Volume", ARIZONA_EQ3_2, ARIZONA_EQ3_B5_GAIN_SHIFT,
27462306a36Sopenharmony_ci	       24, 0, eq_tlv),
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ciSND_SOC_BYTES("EQ4 Coefficients", ARIZONA_EQ4_3, 19),
27762306a36Sopenharmony_ciSOC_SINGLE("EQ4 Mode Switch", ARIZONA_EQ4_2, ARIZONA_EQ4_B1_MODE_SHIFT, 1, 0),
27862306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B1 Volume", ARIZONA_EQ4_1, ARIZONA_EQ4_B1_GAIN_SHIFT,
27962306a36Sopenharmony_ci	       24, 0, eq_tlv),
28062306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B2 Volume", ARIZONA_EQ4_1, ARIZONA_EQ4_B2_GAIN_SHIFT,
28162306a36Sopenharmony_ci	       24, 0, eq_tlv),
28262306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B3 Volume", ARIZONA_EQ4_1, ARIZONA_EQ4_B3_GAIN_SHIFT,
28362306a36Sopenharmony_ci	       24, 0, eq_tlv),
28462306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B4 Volume", ARIZONA_EQ4_2, ARIZONA_EQ4_B4_GAIN_SHIFT,
28562306a36Sopenharmony_ci	       24, 0, eq_tlv),
28662306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B5 Volume", ARIZONA_EQ4_2, ARIZONA_EQ4_B5_GAIN_SHIFT,
28762306a36Sopenharmony_ci	       24, 0, eq_tlv),
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("DRC1L", ARIZONA_DRC1LMIX_INPUT_1_SOURCE),
29062306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("DRC1R", ARIZONA_DRC1RMIX_INPUT_1_SOURCE),
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ciSND_SOC_BYTES_MASK("DRC1", ARIZONA_DRC1_CTRL1, 5,
29362306a36Sopenharmony_ci		   ARIZONA_DRC1R_ENA | ARIZONA_DRC1L_ENA),
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("LHPF1", ARIZONA_HPLP1MIX_INPUT_1_SOURCE),
29662306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("LHPF2", ARIZONA_HPLP2MIX_INPUT_1_SOURCE),
29762306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE),
29862306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE),
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ciSND_SOC_BYTES("LHPF1 Coefficients", ARIZONA_HPLPF1_2, 1),
30162306a36Sopenharmony_ciSND_SOC_BYTES("LHPF2 Coefficients", ARIZONA_HPLPF2_2, 1),
30262306a36Sopenharmony_ciSND_SOC_BYTES("LHPF3 Coefficients", ARIZONA_HPLPF3_2, 1),
30362306a36Sopenharmony_ciSND_SOC_BYTES("LHPF4 Coefficients", ARIZONA_HPLPF4_2, 1),
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ciSOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode),
30662306a36Sopenharmony_ciSOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode),
30762306a36Sopenharmony_ciSOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode),
30862306a36Sopenharmony_ciSOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode),
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ciSOC_ENUM("ISRC1 FSL", arizona_isrc_fsl[0]),
31162306a36Sopenharmony_ciSOC_ENUM("ISRC2 FSL", arizona_isrc_fsl[1]),
31262306a36Sopenharmony_ciSOC_ENUM("ISRC1 FSH", arizona_isrc_fsh[0]),
31362306a36Sopenharmony_ciSOC_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]),
31462306a36Sopenharmony_ciSOC_ENUM("ASRC RATE 1", arizona_asrc_rate1),
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("HPOUTL", ARIZONA_OUT1LMIX_INPUT_1_SOURCE),
31762306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("HPOUTR", ARIZONA_OUT1RMIX_INPUT_1_SOURCE),
31862306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("LINEOUTL", ARIZONA_OUT2LMIX_INPUT_1_SOURCE),
31962306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("LINEOUTR", ARIZONA_OUT2RMIX_INPUT_1_SOURCE),
32062306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("EPOUT", ARIZONA_OUT3LMIX_INPUT_1_SOURCE),
32162306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("SPKOUTL", ARIZONA_OUT4LMIX_INPUT_1_SOURCE),
32262306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("SPKOUTR", ARIZONA_OUT4RMIX_INPUT_1_SOURCE),
32362306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("SPKDATL", ARIZONA_OUT5LMIX_INPUT_1_SOURCE),
32462306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("SPKDATR", ARIZONA_OUT5RMIX_INPUT_1_SOURCE),
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ciSOC_DOUBLE_R("HPOUT Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L,
32762306a36Sopenharmony_ci	     ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1),
32862306a36Sopenharmony_ciSOC_DOUBLE_R("LINEOUT Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L,
32962306a36Sopenharmony_ci	     ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_MUTE_SHIFT, 1, 1),
33062306a36Sopenharmony_ciSOC_SINGLE("EPOUT Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L,
33162306a36Sopenharmony_ci	   ARIZONA_OUT3L_MUTE_SHIFT, 1, 1),
33262306a36Sopenharmony_ciSOC_DOUBLE_R("Speaker Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_4L,
33362306a36Sopenharmony_ci	     ARIZONA_DAC_DIGITAL_VOLUME_4R, ARIZONA_OUT4L_MUTE_SHIFT, 1, 1),
33462306a36Sopenharmony_ciSOC_DOUBLE_R("SPKDAT Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_5L,
33562306a36Sopenharmony_ci	     ARIZONA_DAC_DIGITAL_VOLUME_5R, ARIZONA_OUT5L_MUTE_SHIFT, 1, 1),
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("HPOUT Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_1L,
33862306a36Sopenharmony_ci		 ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_VOL_SHIFT,
33962306a36Sopenharmony_ci		 0xbf, 0, digital_tlv),
34062306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("LINEOUT Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L,
34162306a36Sopenharmony_ci		 ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_VOL_SHIFT,
34262306a36Sopenharmony_ci		 0xbf, 0, digital_tlv),
34362306a36Sopenharmony_ciSOC_SINGLE_TLV("EPOUT Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L,
34462306a36Sopenharmony_ci	       ARIZONA_OUT3L_VOL_SHIFT, 0xbf, 0, digital_tlv),
34562306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("Speaker Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_4L,
34662306a36Sopenharmony_ci		 ARIZONA_DAC_DIGITAL_VOLUME_4R, ARIZONA_OUT4L_VOL_SHIFT,
34762306a36Sopenharmony_ci		 0xbf, 0, digital_tlv),
34862306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("SPKDAT Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_5L,
34962306a36Sopenharmony_ci		 ARIZONA_DAC_DIGITAL_VOLUME_5R, ARIZONA_OUT5L_VOL_SHIFT,
35062306a36Sopenharmony_ci		 0xbf, 0, digital_tlv),
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ciSOC_DOUBLE("SPKDAT Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT,
35362306a36Sopenharmony_ci	   ARIZONA_SPK1R_MUTE_SHIFT, 1, 1),
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ciSOC_ENUM("Output Ramp Up", arizona_out_vi_ramp),
35662306a36Sopenharmony_ciSOC_ENUM("Output Ramp Down", arizona_out_vd_ramp),
35762306a36Sopenharmony_ci
35862306a36Sopenharmony_ciSOC_SINGLE("Noise Gate Switch", ARIZONA_NOISE_GATE_CONTROL,
35962306a36Sopenharmony_ci	   ARIZONA_NGATE_ENA_SHIFT, 1, 0),
36062306a36Sopenharmony_ciSOC_SINGLE_TLV("Noise Gate Threshold Volume", ARIZONA_NOISE_GATE_CONTROL,
36162306a36Sopenharmony_ci	       ARIZONA_NGATE_THR_SHIFT, 7, 1, ng_tlv),
36262306a36Sopenharmony_ciSOC_ENUM("Noise Gate Hold", arizona_ng_hold),
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ciWM8998_NG_SRC("HPOUTL", ARIZONA_NOISE_GATE_SELECT_1L),
36562306a36Sopenharmony_ciWM8998_NG_SRC("HPOUTR", ARIZONA_NOISE_GATE_SELECT_1R),
36662306a36Sopenharmony_ciWM8998_NG_SRC("LINEOUTL", ARIZONA_NOISE_GATE_SELECT_2L),
36762306a36Sopenharmony_ciWM8998_NG_SRC("LINEOUTR", ARIZONA_NOISE_GATE_SELECT_2R),
36862306a36Sopenharmony_ciWM8998_NG_SRC("EPOUT",  ARIZONA_NOISE_GATE_SELECT_3L),
36962306a36Sopenharmony_ciWM8998_NG_SRC("SPKOUTL", ARIZONA_NOISE_GATE_SELECT_4L),
37062306a36Sopenharmony_ciWM8998_NG_SRC("SPKOUTR", ARIZONA_NOISE_GATE_SELECT_4R),
37162306a36Sopenharmony_ciWM8998_NG_SRC("SPKDATL", ARIZONA_NOISE_GATE_SELECT_5L),
37262306a36Sopenharmony_ciWM8998_NG_SRC("SPKDATR", ARIZONA_NOISE_GATE_SELECT_5R),
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF1TX1", ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE),
37562306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF1TX2", ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE),
37662306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF1TX3", ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE),
37762306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF1TX4", ARIZONA_AIF1TX4MIX_INPUT_1_SOURCE),
37862306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF1TX5", ARIZONA_AIF1TX5MIX_INPUT_1_SOURCE),
37962306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF1TX6", ARIZONA_AIF1TX6MIX_INPUT_1_SOURCE),
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF2TX1", ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE),
38262306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE),
38362306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF2TX3", ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE),
38462306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF2TX4", ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE),
38562306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF2TX5", ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE),
38662306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF2TX6", ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE),
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
38962306a36Sopenharmony_ciARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SLIMTX1", ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE),
39262306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SLIMTX2", ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE),
39362306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SLIMTX3", ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE),
39462306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SLIMTX4", ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE),
39562306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE),
39662306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE),
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SPDIFTX1", ARIZONA_SPDIFTX1MIX_INPUT_1_SOURCE),
39962306a36Sopenharmony_ciARIZONA_GAINMUX_CONTROLS("SPDIFTX2", ARIZONA_SPDIFTX2MIX_INPUT_1_SOURCE),
40062306a36Sopenharmony_ci};
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ciARIZONA_MUX_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);
40362306a36Sopenharmony_ciARIZONA_MUX_ENUMS(EQ2, ARIZONA_EQ2MIX_INPUT_1_SOURCE);
40462306a36Sopenharmony_ciARIZONA_MUX_ENUMS(EQ3, ARIZONA_EQ3MIX_INPUT_1_SOURCE);
40562306a36Sopenharmony_ciARIZONA_MUX_ENUMS(EQ4, ARIZONA_EQ4MIX_INPUT_1_SOURCE);
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ciARIZONA_MUX_ENUMS(DRC1L, ARIZONA_DRC1LMIX_INPUT_1_SOURCE);
40862306a36Sopenharmony_ciARIZONA_MUX_ENUMS(DRC1R, ARIZONA_DRC1RMIX_INPUT_1_SOURCE);
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(LHPF1, ARIZONA_HPLP1MIX_INPUT_1_SOURCE);
41162306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(LHPF2, ARIZONA_HPLP2MIX_INPUT_1_SOURCE);
41262306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(LHPF3, ARIZONA_HPLP3MIX_INPUT_1_SOURCE);
41362306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(LHPF4, ARIZONA_HPLP4MIX_INPUT_1_SOURCE);
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(PWM1, ARIZONA_PWM1MIX_INPUT_1_SOURCE);
41662306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(PWM2, ARIZONA_PWM2MIX_INPUT_1_SOURCE);
41762306a36Sopenharmony_ci
41862306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(OUT1L, ARIZONA_OUT1LMIX_INPUT_1_SOURCE);
41962306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(OUT1R, ARIZONA_OUT1RMIX_INPUT_1_SOURCE);
42062306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(OUT2L, ARIZONA_OUT2LMIX_INPUT_1_SOURCE);
42162306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(OUT2R, ARIZONA_OUT2RMIX_INPUT_1_SOURCE);
42262306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(OUT3,  ARIZONA_OUT3LMIX_INPUT_1_SOURCE);
42362306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(SPKOUTL, ARIZONA_OUT4LMIX_INPUT_1_SOURCE);
42462306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(SPKOUTR, ARIZONA_OUT4RMIX_INPUT_1_SOURCE);
42562306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(SPKDATL, ARIZONA_OUT5LMIX_INPUT_1_SOURCE);
42662306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(SPKDATR, ARIZONA_OUT5RMIX_INPUT_1_SOURCE);
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF1TX1, ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE);
42962306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF1TX2, ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE);
43062306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF1TX3, ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE);
43162306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF1TX4, ARIZONA_AIF1TX4MIX_INPUT_1_SOURCE);
43262306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF1TX5, ARIZONA_AIF1TX5MIX_INPUT_1_SOURCE);
43362306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF1TX6, ARIZONA_AIF1TX6MIX_INPUT_1_SOURCE);
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF2TX1, ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE);
43662306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE);
43762306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF2TX3, ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE);
43862306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF2TX4, ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE);
43962306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF2TX5, ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE);
44062306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF2TX6, ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE);
44162306a36Sopenharmony_ci
44262306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE);
44362306a36Sopenharmony_ciARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE);
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SLIMTX1, ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE);
44662306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SLIMTX2, ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE);
44762306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SLIMTX3, ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE);
44862306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SLIMTX4, ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE);
44962306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SLIMTX5, ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE);
45062306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SLIMTX6, ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE);
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SPD1TX1, ARIZONA_SPDIFTX1MIX_INPUT_1_SOURCE);
45362306a36Sopenharmony_ciARIZONA_MUX_ENUMS(SPD1TX2, ARIZONA_SPDIFTX2MIX_INPUT_1_SOURCE);
45462306a36Sopenharmony_ci
45562306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE);
45662306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE);
45762306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE);
45862306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE);
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1INT1, ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE);
46162306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1INT2, ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE);
46262306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1INT3, ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE);
46362306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1INT4, ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE);
46462306a36Sopenharmony_ci
46562306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1DEC1, ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE);
46662306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1DEC2, ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE);
46762306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1DEC3, ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE);
46862306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC1DEC4, ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE);
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC2INT1, ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE);
47162306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC2INT2, ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE);
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC2DEC1, ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE);
47462306a36Sopenharmony_ciARIZONA_MUX_ENUMS(ISRC2DEC2, ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE);
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_cistatic const char * const wm8998_aec_loopback_texts[] = {
47762306a36Sopenharmony_ci	"HPOUTL", "HPOUTR", "LINEOUTL", "LINEOUTR", "EPOUT",
47862306a36Sopenharmony_ci	"SPKOUTL", "SPKOUTR", "SPKDATL", "SPKDATR",
47962306a36Sopenharmony_ci};
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_cistatic const unsigned int wm8998_aec_loopback_values[] = {
48262306a36Sopenharmony_ci	0, 1, 2, 3, 4, 6, 7, 8, 9,
48362306a36Sopenharmony_ci};
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(wm8998_aec1_loopback,
48662306a36Sopenharmony_ci				  ARIZONA_DAC_AEC_CONTROL_1,
48762306a36Sopenharmony_ci				  ARIZONA_AEC_LOOPBACK_SRC_SHIFT, 0xf,
48862306a36Sopenharmony_ci				  wm8998_aec_loopback_texts,
48962306a36Sopenharmony_ci				  wm8998_aec_loopback_values);
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(wm8998_aec2_loopback,
49262306a36Sopenharmony_ci				  ARIZONA_DAC_AEC_CONTROL_2,
49362306a36Sopenharmony_ci				  ARIZONA_AEC_LOOPBACK_SRC_SHIFT, 0xf,
49462306a36Sopenharmony_ci				  wm8998_aec_loopback_texts,
49562306a36Sopenharmony_ci				  wm8998_aec_loopback_values);
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_cistatic const struct snd_kcontrol_new wm8998_aec_loopback_mux[] = {
49862306a36Sopenharmony_ci	SOC_DAPM_ENUM("AEC1 Loopback", wm8998_aec1_loopback),
49962306a36Sopenharmony_ci	SOC_DAPM_ENUM("AEC2 Loopback", wm8998_aec2_loopback),
50062306a36Sopenharmony_ci};
50162306a36Sopenharmony_ci
50262306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget wm8998_dapm_widgets[] = {
50362306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1,
50462306a36Sopenharmony_ci		    ARIZONA_SYSCLK_ENA_SHIFT, 0, arizona_clk_ev,
50562306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
50662306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1,
50762306a36Sopenharmony_ci		    ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, arizona_clk_ev,
50862306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
50962306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,
51062306a36Sopenharmony_ci		    ARIZONA_OPCLK_ENA_SHIFT, 0, NULL, 0),
51162306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ASYNCOPCLK", ARIZONA_OUTPUT_ASYNC_CLOCK,
51262306a36Sopenharmony_ci		    ARIZONA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0),
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD2", 0, 0),
51562306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD3", 0, 0),
51662306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD", 20, 0),
51762306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS),
51862306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDL", 0, 0),
51962306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDR", 0, 0),
52062306a36Sopenharmony_ci
52162306a36Sopenharmony_ciSND_SOC_DAPM_SIGGEN("TONE"),
52262306a36Sopenharmony_ciSND_SOC_DAPM_SIGGEN("HAPTICS"),
52362306a36Sopenharmony_ci
52462306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1AL"),
52562306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1AR"),
52662306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1BL"),
52762306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1BR"),
52862306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2A"),
52962306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2B"),
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN1L Mux", SND_SOC_NOPM, 0, 0, &wm8998_in1mux[0]),
53262306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN1R Mux", SND_SOC_NOPM, 0, 0, &wm8998_in1mux[1]),
53362306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN2 Mux", SND_SOC_NOPM, 0, 0, &wm8998_in2mux),
53462306a36Sopenharmony_ci
53562306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("DRC1 Signal Activity"),
53662306a36Sopenharmony_ci
53762306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN1L PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN1L_ENA_SHIFT,
53862306a36Sopenharmony_ci		   0, NULL, 0, arizona_in_ev,
53962306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
54062306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
54162306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN1R PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN1R_ENA_SHIFT,
54262306a36Sopenharmony_ci		   0, NULL, 0, arizona_in_ev,
54362306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
54462306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
54562306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN2 PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN2L_ENA_SHIFT,
54662306a36Sopenharmony_ci		   0, NULL, 0, arizona_in_ev,
54762306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
54862306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS1", ARIZONA_MIC_BIAS_CTRL_1,
55162306a36Sopenharmony_ci		    ARIZONA_MICB1_ENA_SHIFT, 0, NULL, 0),
55262306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS2", ARIZONA_MIC_BIAS_CTRL_2,
55362306a36Sopenharmony_ci		    ARIZONA_MICB1_ENA_SHIFT, 0, NULL, 0),
55462306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS3", ARIZONA_MIC_BIAS_CTRL_3,
55562306a36Sopenharmony_ci		    ARIZONA_MICB1_ENA_SHIFT, 0, NULL, 0),
55662306a36Sopenharmony_ci
55762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("Tone Generator 1", ARIZONA_TONE_GENERATOR_1,
55862306a36Sopenharmony_ci		 ARIZONA_TONE1_ENA_SHIFT, 0, NULL, 0),
55962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("Tone Generator 2", ARIZONA_TONE_GENERATOR_1,
56062306a36Sopenharmony_ci		 ARIZONA_TONE2_ENA_SHIFT, 0, NULL, 0),
56162306a36Sopenharmony_ci
56262306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ1", ARIZONA_EQ1_1, ARIZONA_EQ1_ENA_SHIFT, 0, NULL, 0),
56362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ2", ARIZONA_EQ2_1, ARIZONA_EQ2_ENA_SHIFT, 0, NULL, 0),
56462306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ3", ARIZONA_EQ3_1, ARIZONA_EQ3_ENA_SHIFT, 0, NULL, 0),
56562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ4", ARIZONA_EQ4_1, ARIZONA_EQ4_ENA_SHIFT, 0, NULL, 0),
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DRC1L", ARIZONA_DRC1_CTRL1, ARIZONA_DRC1L_ENA_SHIFT, 0,
56862306a36Sopenharmony_ci		 NULL, 0),
56962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DRC1R", ARIZONA_DRC1_CTRL1, ARIZONA_DRC1R_ENA_SHIFT, 0,
57062306a36Sopenharmony_ci		 NULL, 0),
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF1", ARIZONA_HPLPF1_1, ARIZONA_LHPF1_ENA_SHIFT, 0,
57362306a36Sopenharmony_ci		 NULL, 0),
57462306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF2", ARIZONA_HPLPF2_1, ARIZONA_LHPF2_ENA_SHIFT, 0,
57562306a36Sopenharmony_ci		 NULL, 0),
57662306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF3", ARIZONA_HPLPF3_1, ARIZONA_LHPF3_ENA_SHIFT, 0,
57762306a36Sopenharmony_ci		 NULL, 0),
57862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF4", ARIZONA_HPLPF4_1, ARIZONA_LHPF4_ENA_SHIFT, 0,
57962306a36Sopenharmony_ci		 NULL, 0),
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_ciSND_SOC_DAPM_PGA("PWM1 Driver", ARIZONA_PWM_DRIVE_1, ARIZONA_PWM1_ENA_SHIFT,
58262306a36Sopenharmony_ci		 0, NULL, 0),
58362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("PWM2 Driver", ARIZONA_PWM_DRIVE_1, ARIZONA_PWM2_ENA_SHIFT,
58462306a36Sopenharmony_ci		 0, NULL, 0),
58562306a36Sopenharmony_ci
58662306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("ASRC1L", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC1L_ENA_SHIFT, 0,
58762306a36Sopenharmony_ci		   NULL, 0, wm8998_asrc_ev, SND_SOC_DAPM_PRE_PMU),
58862306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("ASRC1R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC1R_ENA_SHIFT, 0,
58962306a36Sopenharmony_ci		   NULL, 0, wm8998_asrc_ev, SND_SOC_DAPM_PRE_PMU),
59062306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("ASRC2L", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2L_ENA_SHIFT, 0,
59162306a36Sopenharmony_ci		   NULL, 0, wm8998_asrc_ev, SND_SOC_DAPM_PRE_PMU),
59262306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0,
59362306a36Sopenharmony_ci		   NULL, 0, wm8998_asrc_ev, SND_SOC_DAPM_PRE_PMU),
59462306a36Sopenharmony_ci
59562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1INT1", ARIZONA_ISRC_1_CTRL_3,
59662306a36Sopenharmony_ci		 ARIZONA_ISRC1_INT0_ENA_SHIFT, 0, NULL, 0),
59762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1INT2", ARIZONA_ISRC_1_CTRL_3,
59862306a36Sopenharmony_ci		 ARIZONA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0),
59962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1INT3", ARIZONA_ISRC_1_CTRL_3,
60062306a36Sopenharmony_ci		 ARIZONA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0),
60162306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1INT4", ARIZONA_ISRC_1_CTRL_3,
60262306a36Sopenharmony_ci		 ARIZONA_ISRC1_INT3_ENA_SHIFT, 0, NULL, 0),
60362306a36Sopenharmony_ci
60462306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1DEC1", ARIZONA_ISRC_1_CTRL_3,
60562306a36Sopenharmony_ci		 ARIZONA_ISRC1_DEC0_ENA_SHIFT, 0, NULL, 0),
60662306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1DEC2", ARIZONA_ISRC_1_CTRL_3,
60762306a36Sopenharmony_ci		 ARIZONA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0),
60862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1DEC3", ARIZONA_ISRC_1_CTRL_3,
60962306a36Sopenharmony_ci		 ARIZONA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0),
61062306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1DEC4", ARIZONA_ISRC_1_CTRL_3,
61162306a36Sopenharmony_ci		 ARIZONA_ISRC1_DEC3_ENA_SHIFT, 0, NULL, 0),
61262306a36Sopenharmony_ci
61362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2INT1", ARIZONA_ISRC_2_CTRL_3,
61462306a36Sopenharmony_ci		 ARIZONA_ISRC2_INT0_ENA_SHIFT, 0, NULL, 0),
61562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2INT2", ARIZONA_ISRC_2_CTRL_3,
61662306a36Sopenharmony_ci		 ARIZONA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0),
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2DEC1", ARIZONA_ISRC_2_CTRL_3,
61962306a36Sopenharmony_ci		 ARIZONA_ISRC2_DEC0_ENA_SHIFT, 0, NULL, 0),
62062306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2DEC2", ARIZONA_ISRC_2_CTRL_3,
62162306a36Sopenharmony_ci		 ARIZONA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0),
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_ciSND_SOC_DAPM_MUX("AEC1 Loopback", ARIZONA_DAC_AEC_CONTROL_1,
62462306a36Sopenharmony_ci		 ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0,
62562306a36Sopenharmony_ci		 &wm8998_aec_loopback_mux[0]),
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ciSND_SOC_DAPM_MUX("AEC2 Loopback", ARIZONA_DAC_AEC_CONTROL_2,
62862306a36Sopenharmony_ci		 ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0,
62962306a36Sopenharmony_ci		 &wm8998_aec_loopback_mux[1]),
63062306a36Sopenharmony_ci
63162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0,
63262306a36Sopenharmony_ci		     ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX1_ENA_SHIFT, 0),
63362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 1,
63462306a36Sopenharmony_ci		     ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX2_ENA_SHIFT, 0),
63562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 2,
63662306a36Sopenharmony_ci		     ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX3_ENA_SHIFT, 0),
63762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 3,
63862306a36Sopenharmony_ci		     ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX4_ENA_SHIFT, 0),
63962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 4,
64062306a36Sopenharmony_ci		     ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX5_ENA_SHIFT, 0),
64162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 5,
64262306a36Sopenharmony_ci		     ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX6_ENA_SHIFT, 0),
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX1", NULL, 0,
64562306a36Sopenharmony_ci		    ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX1_ENA_SHIFT, 0),
64662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 1,
64762306a36Sopenharmony_ci		    ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX2_ENA_SHIFT, 0),
64862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 2,
64962306a36Sopenharmony_ci		    ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX3_ENA_SHIFT, 0),
65062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 3,
65162306a36Sopenharmony_ci		    ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX4_ENA_SHIFT, 0),
65262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 4,
65362306a36Sopenharmony_ci		    ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX5_ENA_SHIFT, 0),
65462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 5,
65562306a36Sopenharmony_ci		    ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX6_ENA_SHIFT, 0),
65662306a36Sopenharmony_ci
65762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0,
65862306a36Sopenharmony_ci		     ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX1_ENA_SHIFT, 0),
65962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 1,
66062306a36Sopenharmony_ci		     ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX2_ENA_SHIFT, 0),
66162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 2,
66262306a36Sopenharmony_ci		     ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX3_ENA_SHIFT, 0),
66362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 3,
66462306a36Sopenharmony_ci		     ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX4_ENA_SHIFT, 0),
66562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 4,
66662306a36Sopenharmony_ci		     ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX5_ENA_SHIFT, 0),
66762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 5,
66862306a36Sopenharmony_ci		     ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX6_ENA_SHIFT, 0),
66962306a36Sopenharmony_ci
67062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0,
67162306a36Sopenharmony_ci		    ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX1_ENA_SHIFT, 0),
67262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 1,
67362306a36Sopenharmony_ci		    ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0),
67462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 2,
67562306a36Sopenharmony_ci		    ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX3_ENA_SHIFT, 0),
67662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 3,
67762306a36Sopenharmony_ci		    ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX4_ENA_SHIFT, 0),
67862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 4,
67962306a36Sopenharmony_ci		    ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX5_ENA_SHIFT, 0),
68062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 5,
68162306a36Sopenharmony_ci		    ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX6_ENA_SHIFT, 0),
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0,
68462306a36Sopenharmony_ci		    ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
68562306a36Sopenharmony_ci		    ARIZONA_SLIMRX1_ENA_SHIFT, 0),
68662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 1,
68762306a36Sopenharmony_ci		    ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
68862306a36Sopenharmony_ci		    ARIZONA_SLIMRX2_ENA_SHIFT, 0),
68962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 2,
69062306a36Sopenharmony_ci		    ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
69162306a36Sopenharmony_ci		    ARIZONA_SLIMRX3_ENA_SHIFT, 0),
69262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 3,
69362306a36Sopenharmony_ci		    ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
69462306a36Sopenharmony_ci		    ARIZONA_SLIMRX4_ENA_SHIFT, 0),
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,
69762306a36Sopenharmony_ci		     ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
69862306a36Sopenharmony_ci		     ARIZONA_SLIMTX1_ENA_SHIFT, 0),
69962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 1,
70062306a36Sopenharmony_ci		     ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
70162306a36Sopenharmony_ci		     ARIZONA_SLIMTX2_ENA_SHIFT, 0),
70262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 2,
70362306a36Sopenharmony_ci		     ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
70462306a36Sopenharmony_ci		     ARIZONA_SLIMTX3_ENA_SHIFT, 0),
70562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 3,
70662306a36Sopenharmony_ci		     ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
70762306a36Sopenharmony_ci		     ARIZONA_SLIMTX4_ENA_SHIFT, 0),
70862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 4,
70962306a36Sopenharmony_ci		     ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
71062306a36Sopenharmony_ci		     ARIZONA_SLIMTX5_ENA_SHIFT, 0),
71162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 5,
71262306a36Sopenharmony_ci		     ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
71362306a36Sopenharmony_ci		     ARIZONA_SLIMTX6_ENA_SHIFT, 0),
71462306a36Sopenharmony_ci
71562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0,
71662306a36Sopenharmony_ci		     ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX1_ENA_SHIFT, 0),
71762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 1,
71862306a36Sopenharmony_ci		     ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX2_ENA_SHIFT, 0),
71962306a36Sopenharmony_ci
72062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,
72162306a36Sopenharmony_ci		    ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX1_ENA_SHIFT, 0),
72262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 1,
72362306a36Sopenharmony_ci		    ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0),
72462306a36Sopenharmony_ci
72562306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
72662306a36Sopenharmony_ci		   ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
72762306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
72862306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
72962306a36Sopenharmony_ci		   ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
73062306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
73162306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1,
73262306a36Sopenharmony_ci		   ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
73362306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
73462306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
73562306a36Sopenharmony_ci		   ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
73662306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
73762306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT3", ARIZONA_OUTPUT_ENABLES_1,
73862306a36Sopenharmony_ci		   ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
73962306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
74062306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
74162306a36Sopenharmony_ci		   ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
74262306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
74362306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT5R", ARIZONA_OUTPUT_ENABLES_1,
74462306a36Sopenharmony_ci		   ARIZONA_OUT5R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
74562306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
74662306a36Sopenharmony_ci
74762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("SPD1TX1", ARIZONA_SPD1_TX_CONTROL,
74862306a36Sopenharmony_ci		 ARIZONA_SPD1_VAL1_SHIFT, 0, NULL, 0),
74962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("SPD1TX2", ARIZONA_SPD1_TX_CONTROL,
75062306a36Sopenharmony_ci		 ARIZONA_SPD1_VAL2_SHIFT, 0, NULL, 0),
75162306a36Sopenharmony_ciSND_SOC_DAPM_OUT_DRV("SPD1", ARIZONA_SPD1_TX_CONTROL,
75262306a36Sopenharmony_ci		     ARIZONA_SPD1_ENA_SHIFT, 0, NULL, 0),
75362306a36Sopenharmony_ci
75462306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(EQ1, "EQ1"),
75562306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(EQ2, "EQ2"),
75662306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(EQ3, "EQ3"),
75762306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(EQ4, "EQ4"),
75862306a36Sopenharmony_ci
75962306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(DRC1L, "DRC1L"),
76062306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(DRC1R, "DRC1R"),
76162306a36Sopenharmony_ci
76262306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(LHPF1, "LHPF1"),
76362306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(LHPF2, "LHPF2"),
76462306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(LHPF3, "LHPF3"),
76562306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(LHPF4, "LHPF4"),
76662306a36Sopenharmony_ci
76762306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(PWM1, "PWM1"),
76862306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(PWM2, "PWM2"),
76962306a36Sopenharmony_ci
77062306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(OUT1L, "HPOUTL"),
77162306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(OUT1R, "HPOUTR"),
77262306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(OUT2L, "LINEOUTL"),
77362306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(OUT2R, "LINEOUTR"),
77462306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(OUT3, "EPOUT"),
77562306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(SPKOUTL, "SPKOUTL"),
77662306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(SPKOUTR, "SPKOUTR"),
77762306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(SPKDATL, "SPKDATL"),
77862306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(SPKDATR, "SPKDATR"),
77962306a36Sopenharmony_ci
78062306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF1TX1, "AIF1TX1"),
78162306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF1TX2, "AIF1TX2"),
78262306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF1TX3, "AIF1TX3"),
78362306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF1TX4, "AIF1TX4"),
78462306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF1TX5, "AIF1TX5"),
78562306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF1TX6, "AIF1TX6"),
78662306a36Sopenharmony_ci
78762306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"),
78862306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),
78962306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"),
79062306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"),
79162306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"),
79262306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"),
79362306a36Sopenharmony_ci
79462306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),
79562306a36Sopenharmony_ciARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),
79662306a36Sopenharmony_ci
79762306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SLIMTX1, "SLIMTX1"),
79862306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SLIMTX2, "SLIMTX2"),
79962306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SLIMTX3, "SLIMTX3"),
80062306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SLIMTX4, "SLIMTX4"),
80162306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SLIMTX5, "SLIMTX5"),
80262306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SLIMTX6, "SLIMTX6"),
80362306a36Sopenharmony_ci
80462306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SPD1TX1, "SPDIFTX1"),
80562306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(SPD1TX2, "SPDIFTX2"),
80662306a36Sopenharmony_ci
80762306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"),
80862306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"),
80962306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"),
81062306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"),
81162306a36Sopenharmony_ci
81262306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"),
81362306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"),
81462306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1DEC3, "ISRC1DEC3"),
81562306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1DEC4, "ISRC1DEC4"),
81662306a36Sopenharmony_ci
81762306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"),
81862306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"),
81962306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1INT3, "ISRC1INT3"),
82062306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC1INT4, "ISRC1INT4"),
82162306a36Sopenharmony_ci
82262306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"),
82362306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"),
82462306a36Sopenharmony_ci
82562306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"),
82662306a36Sopenharmony_ciARIZONA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"),
82762306a36Sopenharmony_ci
82862306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUTL"),
82962306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUTR"),
83062306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("LINEOUTL"),
83162306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("LINEOUTR"),
83262306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("EPOUT"),
83362306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKOUTLN"),
83462306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKOUTLP"),
83562306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKOUTRN"),
83662306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKOUTRP"),
83762306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKDATL"),
83862306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKDATR"),
83962306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPDIF"),
84062306a36Sopenharmony_ci
84162306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("MICSUPP"),
84262306a36Sopenharmony_ci};
84362306a36Sopenharmony_ci
84462306a36Sopenharmony_ci#define ARIZONA_MIXER_INPUT_ROUTES(name)	\
84562306a36Sopenharmony_ci	{ name, "Tone Generator 1", "Tone Generator 1" }, \
84662306a36Sopenharmony_ci	{ name, "Tone Generator 2", "Tone Generator 2" }, \
84762306a36Sopenharmony_ci	{ name, "Haptics", "HAPTICS" }, \
84862306a36Sopenharmony_ci	{ name, "AEC", "AEC1 Loopback" }, \
84962306a36Sopenharmony_ci	{ name, "AEC2", "AEC2 Loopback" }, \
85062306a36Sopenharmony_ci	{ name, "IN1L", "IN1L PGA" }, \
85162306a36Sopenharmony_ci	{ name, "IN1R", "IN1R PGA" }, \
85262306a36Sopenharmony_ci	{ name, "IN2L", "IN2 PGA" }, \
85362306a36Sopenharmony_ci	{ name, "AIF1RX1", "AIF1RX1" }, \
85462306a36Sopenharmony_ci	{ name, "AIF1RX2", "AIF1RX2" }, \
85562306a36Sopenharmony_ci	{ name, "AIF1RX3", "AIF1RX3" }, \
85662306a36Sopenharmony_ci	{ name, "AIF1RX4", "AIF1RX4" }, \
85762306a36Sopenharmony_ci	{ name, "AIF1RX5", "AIF1RX5" }, \
85862306a36Sopenharmony_ci	{ name, "AIF1RX6", "AIF1RX6" }, \
85962306a36Sopenharmony_ci	{ name, "AIF2RX1", "AIF2RX1" }, \
86062306a36Sopenharmony_ci	{ name, "AIF2RX2", "AIF2RX2" }, \
86162306a36Sopenharmony_ci	{ name, "AIF2RX3", "AIF2RX3" }, \
86262306a36Sopenharmony_ci	{ name, "AIF2RX4", "AIF2RX4" }, \
86362306a36Sopenharmony_ci	{ name, "AIF2RX5", "AIF2RX5" }, \
86462306a36Sopenharmony_ci	{ name, "AIF2RX6", "AIF2RX6" }, \
86562306a36Sopenharmony_ci	{ name, "AIF3RX1", "AIF3RX1" }, \
86662306a36Sopenharmony_ci	{ name, "AIF3RX2", "AIF3RX2" }, \
86762306a36Sopenharmony_ci	{ name, "SLIMRX1", "SLIMRX1" }, \
86862306a36Sopenharmony_ci	{ name, "SLIMRX2", "SLIMRX2" }, \
86962306a36Sopenharmony_ci	{ name, "SLIMRX3", "SLIMRX3" }, \
87062306a36Sopenharmony_ci	{ name, "SLIMRX4", "SLIMRX4" }, \
87162306a36Sopenharmony_ci	{ name, "EQ1", "EQ1" }, \
87262306a36Sopenharmony_ci	{ name, "EQ2", "EQ2" }, \
87362306a36Sopenharmony_ci	{ name, "EQ3", "EQ3" }, \
87462306a36Sopenharmony_ci	{ name, "EQ4", "EQ4" }, \
87562306a36Sopenharmony_ci	{ name, "DRC1L", "DRC1L" }, \
87662306a36Sopenharmony_ci	{ name, "DRC1R", "DRC1R" }, \
87762306a36Sopenharmony_ci	{ name, "LHPF1", "LHPF1" }, \
87862306a36Sopenharmony_ci	{ name, "LHPF2", "LHPF2" }, \
87962306a36Sopenharmony_ci	{ name, "LHPF3", "LHPF3" }, \
88062306a36Sopenharmony_ci	{ name, "LHPF4", "LHPF4" }, \
88162306a36Sopenharmony_ci	{ name, "ASRC1L", "ASRC1L" }, \
88262306a36Sopenharmony_ci	{ name, "ASRC1R", "ASRC1R" }, \
88362306a36Sopenharmony_ci	{ name, "ASRC2L", "ASRC2L" }, \
88462306a36Sopenharmony_ci	{ name, "ASRC2R", "ASRC2R" }, \
88562306a36Sopenharmony_ci	{ name, "ISRC1DEC1", "ISRC1DEC1" }, \
88662306a36Sopenharmony_ci	{ name, "ISRC1DEC2", "ISRC1DEC2" }, \
88762306a36Sopenharmony_ci	{ name, "ISRC1DEC3", "ISRC1DEC3" }, \
88862306a36Sopenharmony_ci	{ name, "ISRC1DEC4", "ISRC1DEC4" }, \
88962306a36Sopenharmony_ci	{ name, "ISRC1INT1", "ISRC1INT1" }, \
89062306a36Sopenharmony_ci	{ name, "ISRC1INT2", "ISRC1INT2" }, \
89162306a36Sopenharmony_ci	{ name, "ISRC1INT3", "ISRC1INT3" }, \
89262306a36Sopenharmony_ci	{ name, "ISRC1INT4", "ISRC1INT4" }, \
89362306a36Sopenharmony_ci	{ name, "ISRC2DEC1", "ISRC2DEC1" }, \
89462306a36Sopenharmony_ci	{ name, "ISRC2DEC2", "ISRC2DEC2" }, \
89562306a36Sopenharmony_ci	{ name, "ISRC2INT1", "ISRC2INT1" }, \
89662306a36Sopenharmony_ci	{ name, "ISRC2INT2", "ISRC2INT2" }
89762306a36Sopenharmony_ci
89862306a36Sopenharmony_cistatic const struct snd_soc_dapm_route wm8998_dapm_routes[] = {
89962306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "DBVDD2" },
90062306a36Sopenharmony_ci	{ "AIF2 Playback", NULL, "DBVDD2" },
90162306a36Sopenharmony_ci
90262306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "DBVDD3" },
90362306a36Sopenharmony_ci	{ "AIF3 Playback", NULL, "DBVDD3" },
90462306a36Sopenharmony_ci
90562306a36Sopenharmony_ci	{ "OUT1L", NULL, "CPVDD" },
90662306a36Sopenharmony_ci	{ "OUT1R", NULL, "CPVDD" },
90762306a36Sopenharmony_ci	{ "OUT2L", NULL, "CPVDD" },
90862306a36Sopenharmony_ci	{ "OUT2R", NULL, "CPVDD" },
90962306a36Sopenharmony_ci	{ "OUT3",  NULL, "CPVDD" },
91062306a36Sopenharmony_ci
91162306a36Sopenharmony_ci	{ "OUT4L", NULL, "SPKVDDL" },
91262306a36Sopenharmony_ci	{ "OUT4R", NULL, "SPKVDDR" },
91362306a36Sopenharmony_ci
91462306a36Sopenharmony_ci	{ "OUT1L", NULL, "SYSCLK" },
91562306a36Sopenharmony_ci	{ "OUT1R", NULL, "SYSCLK" },
91662306a36Sopenharmony_ci	{ "OUT2L", NULL, "SYSCLK" },
91762306a36Sopenharmony_ci	{ "OUT2R", NULL, "SYSCLK" },
91862306a36Sopenharmony_ci	{ "OUT3",  NULL, "SYSCLK" },
91962306a36Sopenharmony_ci	{ "OUT4L", NULL, "SYSCLK" },
92062306a36Sopenharmony_ci	{ "OUT4R", NULL, "SYSCLK" },
92162306a36Sopenharmony_ci	{ "OUT5L", NULL, "SYSCLK" },
92262306a36Sopenharmony_ci	{ "OUT5R", NULL, "SYSCLK" },
92362306a36Sopenharmony_ci
92462306a36Sopenharmony_ci	{ "IN1AL", NULL, "SYSCLK" },
92562306a36Sopenharmony_ci	{ "IN1AR", NULL, "SYSCLK" },
92662306a36Sopenharmony_ci	{ "IN1BL", NULL, "SYSCLK" },
92762306a36Sopenharmony_ci	{ "IN1BR", NULL, "SYSCLK" },
92862306a36Sopenharmony_ci	{ "IN2A", NULL, "SYSCLK" },
92962306a36Sopenharmony_ci	{ "IN2B", NULL, "SYSCLK" },
93062306a36Sopenharmony_ci
93162306a36Sopenharmony_ci	{ "ASRC1L", NULL, "SYSCLK" },
93262306a36Sopenharmony_ci	{ "ASRC1R", NULL, "SYSCLK" },
93362306a36Sopenharmony_ci	{ "ASRC2L", NULL, "SYSCLK" },
93462306a36Sopenharmony_ci	{ "ASRC2R", NULL, "SYSCLK" },
93562306a36Sopenharmony_ci
93662306a36Sopenharmony_ci	{ "ASRC1L", NULL, "ASYNCCLK" },
93762306a36Sopenharmony_ci	{ "ASRC1R", NULL, "ASYNCCLK" },
93862306a36Sopenharmony_ci	{ "ASRC2L", NULL, "ASYNCCLK" },
93962306a36Sopenharmony_ci	{ "ASRC2R", NULL, "ASYNCCLK" },
94062306a36Sopenharmony_ci
94162306a36Sopenharmony_ci	{ "SPD1", NULL, "SYSCLK" },
94262306a36Sopenharmony_ci	{ "SPD1", NULL, "SPD1TX1" },
94362306a36Sopenharmony_ci	{ "SPD1", NULL, "SPD1TX2" },
94462306a36Sopenharmony_ci
94562306a36Sopenharmony_ci	{ "MICBIAS1", NULL, "MICVDD" },
94662306a36Sopenharmony_ci	{ "MICBIAS2", NULL, "MICVDD" },
94762306a36Sopenharmony_ci	{ "MICBIAS3", NULL, "MICVDD" },
94862306a36Sopenharmony_ci
94962306a36Sopenharmony_ci	{ "Tone Generator 1", NULL, "SYSCLK" },
95062306a36Sopenharmony_ci	{ "Tone Generator 2", NULL, "SYSCLK" },
95162306a36Sopenharmony_ci
95262306a36Sopenharmony_ci	{ "Tone Generator 1", NULL, "TONE" },
95362306a36Sopenharmony_ci	{ "Tone Generator 2", NULL, "TONE" },
95462306a36Sopenharmony_ci
95562306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX1" },
95662306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX2" },
95762306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX3" },
95862306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX4" },
95962306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX5" },
96062306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX6" },
96162306a36Sopenharmony_ci
96262306a36Sopenharmony_ci	{ "AIF1RX1", NULL, "AIF1 Playback" },
96362306a36Sopenharmony_ci	{ "AIF1RX2", NULL, "AIF1 Playback" },
96462306a36Sopenharmony_ci	{ "AIF1RX3", NULL, "AIF1 Playback" },
96562306a36Sopenharmony_ci	{ "AIF1RX4", NULL, "AIF1 Playback" },
96662306a36Sopenharmony_ci	{ "AIF1RX5", NULL, "AIF1 Playback" },
96762306a36Sopenharmony_ci	{ "AIF1RX6", NULL, "AIF1 Playback" },
96862306a36Sopenharmony_ci
96962306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX1" },
97062306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX2" },
97162306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX3" },
97262306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX4" },
97362306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX5" },
97462306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX6" },
97562306a36Sopenharmony_ci
97662306a36Sopenharmony_ci	{ "AIF2RX1", NULL, "AIF2 Playback" },
97762306a36Sopenharmony_ci	{ "AIF2RX2", NULL, "AIF2 Playback" },
97862306a36Sopenharmony_ci	{ "AIF2RX3", NULL, "AIF2 Playback" },
97962306a36Sopenharmony_ci	{ "AIF2RX4", NULL, "AIF2 Playback" },
98062306a36Sopenharmony_ci	{ "AIF2RX5", NULL, "AIF2 Playback" },
98162306a36Sopenharmony_ci	{ "AIF2RX6", NULL, "AIF2 Playback" },
98262306a36Sopenharmony_ci
98362306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "AIF3TX1" },
98462306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "AIF3TX2" },
98562306a36Sopenharmony_ci
98662306a36Sopenharmony_ci	{ "AIF3RX1", NULL, "AIF3 Playback" },
98762306a36Sopenharmony_ci	{ "AIF3RX2", NULL, "AIF3 Playback" },
98862306a36Sopenharmony_ci
98962306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX1" },
99062306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX2" },
99162306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX3" },
99262306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX4" },
99362306a36Sopenharmony_ci
99462306a36Sopenharmony_ci	{ "Slim2 Capture", NULL, "SLIMTX5" },
99562306a36Sopenharmony_ci	{ "Slim2 Capture", NULL, "SLIMTX6" },
99662306a36Sopenharmony_ci
99762306a36Sopenharmony_ci	{ "SLIMRX1", NULL, "Slim1 Playback" },
99862306a36Sopenharmony_ci	{ "SLIMRX2", NULL, "Slim1 Playback" },
99962306a36Sopenharmony_ci
100062306a36Sopenharmony_ci	{ "SLIMRX3", NULL, "Slim2 Playback" },
100162306a36Sopenharmony_ci	{ "SLIMRX4", NULL, "Slim2 Playback" },
100262306a36Sopenharmony_ci
100362306a36Sopenharmony_ci	{ "AIF1 Playback", NULL, "SYSCLK" },
100462306a36Sopenharmony_ci	{ "AIF2 Playback", NULL, "SYSCLK" },
100562306a36Sopenharmony_ci	{ "AIF3 Playback", NULL, "SYSCLK" },
100662306a36Sopenharmony_ci	{ "Slim1 Playback", NULL, "SYSCLK" },
100762306a36Sopenharmony_ci	{ "Slim2 Playback", NULL, "SYSCLK" },
100862306a36Sopenharmony_ci
100962306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "SYSCLK" },
101062306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "SYSCLK" },
101162306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "SYSCLK" },
101262306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SYSCLK" },
101362306a36Sopenharmony_ci	{ "Slim2 Capture", NULL, "SYSCLK" },
101462306a36Sopenharmony_ci
101562306a36Sopenharmony_ci	{ "IN1L Mux", "A", "IN1AL" },
101662306a36Sopenharmony_ci	{ "IN1R Mux", "A", "IN1AR" },
101762306a36Sopenharmony_ci	{ "IN1L Mux", "B", "IN1BL" },
101862306a36Sopenharmony_ci	{ "IN1R Mux", "B", "IN1BR" },
101962306a36Sopenharmony_ci
102062306a36Sopenharmony_ci	{ "IN2 Mux", "A", "IN2A" },
102162306a36Sopenharmony_ci	{ "IN2 Mux", "B", "IN2B" },
102262306a36Sopenharmony_ci
102362306a36Sopenharmony_ci	{ "IN1L PGA", NULL, "IN1L Mux" },
102462306a36Sopenharmony_ci	{ "IN1R PGA", NULL, "IN1R Mux" },
102562306a36Sopenharmony_ci	{ "IN2 PGA",  NULL, "IN2 Mux" },
102662306a36Sopenharmony_ci
102762306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT1L", "HPOUTL"),
102862306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT1R", "HPOUTR"),
102962306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT2L", "LINEOUTL"),
103062306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT2R", "LINEOUTR"),
103162306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT3",  "EPOUT"),
103262306a36Sopenharmony_ci
103362306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT4L", "SPKOUTL"),
103462306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT4R", "SPKOUTR"),
103562306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT5L", "SPKDATL"),
103662306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("OUT5R", "SPKDATR"),
103762306a36Sopenharmony_ci
103862306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("PWM1 Driver", "PWM1"),
103962306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("PWM2 Driver", "PWM2"),
104062306a36Sopenharmony_ci
104162306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF1TX1", "AIF1TX1"),
104262306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF1TX2", "AIF1TX2"),
104362306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF1TX3", "AIF1TX3"),
104462306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF1TX4", "AIF1TX4"),
104562306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF1TX5", "AIF1TX5"),
104662306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF1TX6", "AIF1TX6"),
104762306a36Sopenharmony_ci
104862306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"),
104962306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"),
105062306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF2TX3", "AIF2TX3"),
105162306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF2TX4", "AIF2TX4"),
105262306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF2TX5", "AIF2TX5"),
105362306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF2TX6", "AIF2TX6"),
105462306a36Sopenharmony_ci
105562306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"),
105662306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"),
105762306a36Sopenharmony_ci
105862306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SLIMTX1", "SLIMTX1"),
105962306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SLIMTX2", "SLIMTX2"),
106062306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SLIMTX3", "SLIMTX3"),
106162306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SLIMTX4", "SLIMTX4"),
106262306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SLIMTX5", "SLIMTX5"),
106362306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SLIMTX6", "SLIMTX6"),
106462306a36Sopenharmony_ci
106562306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SPD1TX1", "SPDIFTX1"),
106662306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("SPD1TX2", "SPDIFTX2"),
106762306a36Sopenharmony_ci
106862306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("EQ1", "EQ1"),
106962306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("EQ2", "EQ2"),
107062306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("EQ3", "EQ3"),
107162306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("EQ4", "EQ4"),
107262306a36Sopenharmony_ci
107362306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("DRC1L", "DRC1L"),
107462306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("DRC1R", "DRC1R"),
107562306a36Sopenharmony_ci
107662306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("LHPF1", "LHPF1"),
107762306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("LHPF2", "LHPF2"),
107862306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("LHPF3", "LHPF3"),
107962306a36Sopenharmony_ci	ARIZONA_MIXER_ROUTES("LHPF4", "LHPF4"),
108062306a36Sopenharmony_ci
108162306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ASRC1L", "ASRC1L"),
108262306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ASRC1R", "ASRC1R"),
108362306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ASRC2L", "ASRC2L"),
108462306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ASRC2R", "ASRC2R"),
108562306a36Sopenharmony_ci
108662306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"),
108762306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"),
108862306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1INT3", "ISRC1INT3"),
108962306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1INT4", "ISRC1INT4"),
109062306a36Sopenharmony_ci
109162306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"),
109262306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"),
109362306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1DEC3", "ISRC1DEC3"),
109462306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC1DEC4", "ISRC1DEC4"),
109562306a36Sopenharmony_ci
109662306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"),
109762306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"),
109862306a36Sopenharmony_ci
109962306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"),
110062306a36Sopenharmony_ci	ARIZONA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"),
110162306a36Sopenharmony_ci
110262306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUTL", "OUT1L" },
110362306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUTR", "OUT1R" },
110462306a36Sopenharmony_ci	{ "AEC2 Loopback", "HPOUTL", "OUT1L" },
110562306a36Sopenharmony_ci	{ "AEC2 Loopback", "HPOUTR", "OUT1R" },
110662306a36Sopenharmony_ci	{ "HPOUTL", NULL, "OUT1L" },
110762306a36Sopenharmony_ci	{ "HPOUTR", NULL, "OUT1R" },
110862306a36Sopenharmony_ci
110962306a36Sopenharmony_ci	{ "AEC1 Loopback", "LINEOUTL", "OUT2L" },
111062306a36Sopenharmony_ci	{ "AEC1 Loopback", "LINEOUTR", "OUT2R" },
111162306a36Sopenharmony_ci	{ "AEC2 Loopback", "LINEOUTL", "OUT2L" },
111262306a36Sopenharmony_ci	{ "AEC2 Loopback", "LINEOUTR", "OUT2R" },
111362306a36Sopenharmony_ci	{ "LINEOUTL", NULL, "OUT2L" },
111462306a36Sopenharmony_ci	{ "LINEOUTR", NULL, "OUT2R" },
111562306a36Sopenharmony_ci
111662306a36Sopenharmony_ci	{ "AEC1 Loopback", "EPOUT", "OUT3" },
111762306a36Sopenharmony_ci	{ "AEC2 Loopback", "EPOUT", "OUT3" },
111862306a36Sopenharmony_ci	{ "EPOUT", NULL, "OUT3" },
111962306a36Sopenharmony_ci
112062306a36Sopenharmony_ci	{ "AEC1 Loopback", "SPKOUTL", "OUT4L" },
112162306a36Sopenharmony_ci	{ "AEC2 Loopback", "SPKOUTL", "OUT4L" },
112262306a36Sopenharmony_ci	{ "SPKOUTLN", NULL, "OUT4L" },
112362306a36Sopenharmony_ci	{ "SPKOUTLP", NULL, "OUT4L" },
112462306a36Sopenharmony_ci
112562306a36Sopenharmony_ci	{ "AEC1 Loopback", "SPKOUTR", "OUT4R" },
112662306a36Sopenharmony_ci	{ "AEC2 Loopback", "SPKOUTR", "OUT4R" },
112762306a36Sopenharmony_ci	{ "SPKOUTRN", NULL, "OUT4R" },
112862306a36Sopenharmony_ci	{ "SPKOUTRP", NULL, "OUT4R" },
112962306a36Sopenharmony_ci
113062306a36Sopenharmony_ci	{ "SPDIF", NULL, "SPD1" },
113162306a36Sopenharmony_ci
113262306a36Sopenharmony_ci	{ "AEC1 Loopback", "SPKDATL", "OUT5L" },
113362306a36Sopenharmony_ci	{ "AEC1 Loopback", "SPKDATR", "OUT5R" },
113462306a36Sopenharmony_ci	{ "AEC2 Loopback", "SPKDATL", "OUT5L" },
113562306a36Sopenharmony_ci	{ "AEC2 Loopback", "SPKDATR", "OUT5R" },
113662306a36Sopenharmony_ci	{ "SPKDATL", NULL, "OUT5L" },
113762306a36Sopenharmony_ci	{ "SPKDATR", NULL, "OUT5R" },
113862306a36Sopenharmony_ci
113962306a36Sopenharmony_ci	{ "MICSUPP", NULL, "SYSCLK" },
114062306a36Sopenharmony_ci
114162306a36Sopenharmony_ci	{ "DRC1 Signal Activity", NULL, "SYSCLK" },
114262306a36Sopenharmony_ci	{ "DRC1 Signal Activity", NULL, "DRC1L" },
114362306a36Sopenharmony_ci	{ "DRC1 Signal Activity", NULL, "DRC1R" },
114462306a36Sopenharmony_ci};
114562306a36Sopenharmony_ci
114662306a36Sopenharmony_ci#define WM8998_RATES SNDRV_PCM_RATE_KNOT
114762306a36Sopenharmony_ci
114862306a36Sopenharmony_ci#define WM8998_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
114962306a36Sopenharmony_ci			SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
115062306a36Sopenharmony_ci
115162306a36Sopenharmony_cistatic struct snd_soc_dai_driver wm8998_dai[] = {
115262306a36Sopenharmony_ci	{
115362306a36Sopenharmony_ci		.name = "wm8998-aif1",
115462306a36Sopenharmony_ci		.id = 1,
115562306a36Sopenharmony_ci		.base = ARIZONA_AIF1_BCLK_CTRL,
115662306a36Sopenharmony_ci		.playback = {
115762306a36Sopenharmony_ci			.stream_name = "AIF1 Playback",
115862306a36Sopenharmony_ci			.channels_min = 1,
115962306a36Sopenharmony_ci			.channels_max = 6,
116062306a36Sopenharmony_ci			.rates = WM8998_RATES,
116162306a36Sopenharmony_ci			.formats = WM8998_FORMATS,
116262306a36Sopenharmony_ci		},
116362306a36Sopenharmony_ci		.capture = {
116462306a36Sopenharmony_ci			 .stream_name = "AIF1 Capture",
116562306a36Sopenharmony_ci			 .channels_min = 1,
116662306a36Sopenharmony_ci			 .channels_max = 6,
116762306a36Sopenharmony_ci			 .rates = WM8998_RATES,
116862306a36Sopenharmony_ci			 .formats = WM8998_FORMATS,
116962306a36Sopenharmony_ci		 },
117062306a36Sopenharmony_ci		.ops = &arizona_dai_ops,
117162306a36Sopenharmony_ci		.symmetric_rate = 1,
117262306a36Sopenharmony_ci		.symmetric_sample_bits = 1,
117362306a36Sopenharmony_ci	},
117462306a36Sopenharmony_ci	{
117562306a36Sopenharmony_ci		.name = "wm8998-aif2",
117662306a36Sopenharmony_ci		.id = 2,
117762306a36Sopenharmony_ci		.base = ARIZONA_AIF2_BCLK_CTRL,
117862306a36Sopenharmony_ci		.playback = {
117962306a36Sopenharmony_ci			.stream_name = "AIF2 Playback",
118062306a36Sopenharmony_ci			.channels_min = 1,
118162306a36Sopenharmony_ci			.channels_max = 6,
118262306a36Sopenharmony_ci			.rates = WM8998_RATES,
118362306a36Sopenharmony_ci			.formats = WM8998_FORMATS,
118462306a36Sopenharmony_ci		},
118562306a36Sopenharmony_ci		.capture = {
118662306a36Sopenharmony_ci			 .stream_name = "AIF2 Capture",
118762306a36Sopenharmony_ci			 .channels_min = 1,
118862306a36Sopenharmony_ci			 .channels_max = 6,
118962306a36Sopenharmony_ci			 .rates = WM8998_RATES,
119062306a36Sopenharmony_ci			 .formats = WM8998_FORMATS,
119162306a36Sopenharmony_ci		 },
119262306a36Sopenharmony_ci		.ops = &arizona_dai_ops,
119362306a36Sopenharmony_ci		.symmetric_rate = 1,
119462306a36Sopenharmony_ci		.symmetric_sample_bits = 1,
119562306a36Sopenharmony_ci	},
119662306a36Sopenharmony_ci	{
119762306a36Sopenharmony_ci		.name = "wm8998-aif3",
119862306a36Sopenharmony_ci		.id = 3,
119962306a36Sopenharmony_ci		.base = ARIZONA_AIF3_BCLK_CTRL,
120062306a36Sopenharmony_ci		.playback = {
120162306a36Sopenharmony_ci			.stream_name = "AIF3 Playback",
120262306a36Sopenharmony_ci			.channels_min = 1,
120362306a36Sopenharmony_ci			.channels_max = 2,
120462306a36Sopenharmony_ci			.rates = WM8998_RATES,
120562306a36Sopenharmony_ci			.formats = WM8998_FORMATS,
120662306a36Sopenharmony_ci		},
120762306a36Sopenharmony_ci		.capture = {
120862306a36Sopenharmony_ci			 .stream_name = "AIF3 Capture",
120962306a36Sopenharmony_ci			 .channels_min = 1,
121062306a36Sopenharmony_ci			 .channels_max = 2,
121162306a36Sopenharmony_ci			 .rates = WM8998_RATES,
121262306a36Sopenharmony_ci			 .formats = WM8998_FORMATS,
121362306a36Sopenharmony_ci		 },
121462306a36Sopenharmony_ci		.ops = &arizona_dai_ops,
121562306a36Sopenharmony_ci		.symmetric_rate = 1,
121662306a36Sopenharmony_ci		.symmetric_sample_bits = 1,
121762306a36Sopenharmony_ci	},
121862306a36Sopenharmony_ci	{
121962306a36Sopenharmony_ci		.name = "wm8998-slim1",
122062306a36Sopenharmony_ci		.id = 4,
122162306a36Sopenharmony_ci		.playback = {
122262306a36Sopenharmony_ci			.stream_name = "Slim1 Playback",
122362306a36Sopenharmony_ci			.channels_min = 1,
122462306a36Sopenharmony_ci			.channels_max = 2,
122562306a36Sopenharmony_ci			.rates = WM8998_RATES,
122662306a36Sopenharmony_ci			.formats = WM8998_FORMATS,
122762306a36Sopenharmony_ci		},
122862306a36Sopenharmony_ci		.capture = {
122962306a36Sopenharmony_ci			 .stream_name = "Slim1 Capture",
123062306a36Sopenharmony_ci			 .channels_min = 1,
123162306a36Sopenharmony_ci			 .channels_max = 4,
123262306a36Sopenharmony_ci			 .rates = WM8998_RATES,
123362306a36Sopenharmony_ci			 .formats = WM8998_FORMATS,
123462306a36Sopenharmony_ci		 },
123562306a36Sopenharmony_ci		.ops = &arizona_simple_dai_ops,
123662306a36Sopenharmony_ci	},
123762306a36Sopenharmony_ci	{
123862306a36Sopenharmony_ci		.name = "wm8998-slim2",
123962306a36Sopenharmony_ci		.id = 5,
124062306a36Sopenharmony_ci		.playback = {
124162306a36Sopenharmony_ci			.stream_name = "Slim2 Playback",
124262306a36Sopenharmony_ci			.channels_min = 1,
124362306a36Sopenharmony_ci			.channels_max = 2,
124462306a36Sopenharmony_ci			.rates = WM8998_RATES,
124562306a36Sopenharmony_ci			.formats = WM8998_FORMATS,
124662306a36Sopenharmony_ci		},
124762306a36Sopenharmony_ci		.capture = {
124862306a36Sopenharmony_ci			 .stream_name = "Slim2 Capture",
124962306a36Sopenharmony_ci			 .channels_min = 1,
125062306a36Sopenharmony_ci			 .channels_max = 2,
125162306a36Sopenharmony_ci			 .rates = WM8998_RATES,
125262306a36Sopenharmony_ci			 .formats = WM8998_FORMATS,
125362306a36Sopenharmony_ci		 },
125462306a36Sopenharmony_ci		.ops = &arizona_simple_dai_ops,
125562306a36Sopenharmony_ci	},
125662306a36Sopenharmony_ci};
125762306a36Sopenharmony_ci
125862306a36Sopenharmony_cistatic int wm8998_set_fll(struct snd_soc_component *component, int fll_id,
125962306a36Sopenharmony_ci			  int source, unsigned int Fref, unsigned int Fout)
126062306a36Sopenharmony_ci{
126162306a36Sopenharmony_ci	struct wm8998_priv *wm8998 = snd_soc_component_get_drvdata(component);
126262306a36Sopenharmony_ci
126362306a36Sopenharmony_ci	switch (fll_id) {
126462306a36Sopenharmony_ci	case WM8998_FLL1:
126562306a36Sopenharmony_ci		return arizona_set_fll(&wm8998->fll[0], source, Fref, Fout);
126662306a36Sopenharmony_ci	case WM8998_FLL2:
126762306a36Sopenharmony_ci		return arizona_set_fll(&wm8998->fll[1], source, Fref, Fout);
126862306a36Sopenharmony_ci	case WM8998_FLL1_REFCLK:
126962306a36Sopenharmony_ci		return arizona_set_fll_refclk(&wm8998->fll[0], source, Fref,
127062306a36Sopenharmony_ci					      Fout);
127162306a36Sopenharmony_ci	case WM8998_FLL2_REFCLK:
127262306a36Sopenharmony_ci		return arizona_set_fll_refclk(&wm8998->fll[1], source, Fref,
127362306a36Sopenharmony_ci					      Fout);
127462306a36Sopenharmony_ci	default:
127562306a36Sopenharmony_ci		return -EINVAL;
127662306a36Sopenharmony_ci	}
127762306a36Sopenharmony_ci}
127862306a36Sopenharmony_ci
127962306a36Sopenharmony_cistatic int wm8998_component_probe(struct snd_soc_component *component)
128062306a36Sopenharmony_ci{
128162306a36Sopenharmony_ci	struct wm8998_priv *priv = snd_soc_component_get_drvdata(component);
128262306a36Sopenharmony_ci	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
128362306a36Sopenharmony_ci	struct arizona *arizona = priv->core.arizona;
128462306a36Sopenharmony_ci	int ret;
128562306a36Sopenharmony_ci
128662306a36Sopenharmony_ci	arizona->dapm = dapm;
128762306a36Sopenharmony_ci	snd_soc_component_init_regmap(component, arizona->regmap);
128862306a36Sopenharmony_ci
128962306a36Sopenharmony_ci	ret = arizona_init_spk(component);
129062306a36Sopenharmony_ci	if (ret < 0)
129162306a36Sopenharmony_ci		return ret;
129262306a36Sopenharmony_ci
129362306a36Sopenharmony_ci	arizona_init_gpio(component);
129462306a36Sopenharmony_ci
129562306a36Sopenharmony_ci	snd_soc_component_disable_pin(component, "HAPTICS");
129662306a36Sopenharmony_ci
129762306a36Sopenharmony_ci	return 0;
129862306a36Sopenharmony_ci}
129962306a36Sopenharmony_ci
130062306a36Sopenharmony_cistatic void wm8998_component_remove(struct snd_soc_component *component)
130162306a36Sopenharmony_ci{
130262306a36Sopenharmony_ci	struct wm8998_priv *priv = snd_soc_component_get_drvdata(component);
130362306a36Sopenharmony_ci
130462306a36Sopenharmony_ci	priv->core.arizona->dapm = NULL;
130562306a36Sopenharmony_ci}
130662306a36Sopenharmony_ci
130762306a36Sopenharmony_ci#define WM8998_DIG_VU 0x0200
130862306a36Sopenharmony_ci
130962306a36Sopenharmony_cistatic unsigned int wm8998_digital_vu[] = {
131062306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_1L,
131162306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_1R,
131262306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_2L,
131362306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_2R,
131462306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_3L,
131562306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_4L,
131662306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_4R,
131762306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_5L,
131862306a36Sopenharmony_ci	ARIZONA_DAC_DIGITAL_VOLUME_5R,
131962306a36Sopenharmony_ci};
132062306a36Sopenharmony_ci
132162306a36Sopenharmony_cistatic const struct snd_soc_component_driver soc_component_dev_wm8998 = {
132262306a36Sopenharmony_ci	.probe			= wm8998_component_probe,
132362306a36Sopenharmony_ci	.remove			= wm8998_component_remove,
132462306a36Sopenharmony_ci	.set_sysclk		= arizona_set_sysclk,
132562306a36Sopenharmony_ci	.set_pll		= wm8998_set_fll,
132662306a36Sopenharmony_ci	.set_jack		= arizona_jack_set_jack,
132762306a36Sopenharmony_ci	.controls		= wm8998_snd_controls,
132862306a36Sopenharmony_ci	.num_controls		= ARRAY_SIZE(wm8998_snd_controls),
132962306a36Sopenharmony_ci	.dapm_widgets		= wm8998_dapm_widgets,
133062306a36Sopenharmony_ci	.num_dapm_widgets	= ARRAY_SIZE(wm8998_dapm_widgets),
133162306a36Sopenharmony_ci	.dapm_routes		= wm8998_dapm_routes,
133262306a36Sopenharmony_ci	.num_dapm_routes	= ARRAY_SIZE(wm8998_dapm_routes),
133362306a36Sopenharmony_ci	.use_pmdown_time	= 1,
133462306a36Sopenharmony_ci	.endianness		= 1,
133562306a36Sopenharmony_ci};
133662306a36Sopenharmony_ci
133762306a36Sopenharmony_cistatic int wm8998_probe(struct platform_device *pdev)
133862306a36Sopenharmony_ci{
133962306a36Sopenharmony_ci	struct arizona *arizona = dev_get_drvdata(pdev->dev.parent);
134062306a36Sopenharmony_ci	struct wm8998_priv *wm8998;
134162306a36Sopenharmony_ci	int i, ret;
134262306a36Sopenharmony_ci
134362306a36Sopenharmony_ci	wm8998 = devm_kzalloc(&pdev->dev, sizeof(struct wm8998_priv),
134462306a36Sopenharmony_ci			      GFP_KERNEL);
134562306a36Sopenharmony_ci	if (!wm8998)
134662306a36Sopenharmony_ci		return -ENOMEM;
134762306a36Sopenharmony_ci	platform_set_drvdata(pdev, wm8998);
134862306a36Sopenharmony_ci
134962306a36Sopenharmony_ci	if (IS_ENABLED(CONFIG_OF)) {
135062306a36Sopenharmony_ci		if (!dev_get_platdata(arizona->dev)) {
135162306a36Sopenharmony_ci			ret = arizona_of_get_audio_pdata(arizona);
135262306a36Sopenharmony_ci			if (ret < 0)
135362306a36Sopenharmony_ci				return ret;
135462306a36Sopenharmony_ci		}
135562306a36Sopenharmony_ci	}
135662306a36Sopenharmony_ci
135762306a36Sopenharmony_ci	wm8998->core.arizona = arizona;
135862306a36Sopenharmony_ci	wm8998->core.num_inputs = 3;	/* IN1L, IN1R, IN2 */
135962306a36Sopenharmony_ci
136062306a36Sopenharmony_ci	/* This may return -EPROBE_DEFER, so do this early on */
136162306a36Sopenharmony_ci	ret = arizona_jack_codec_dev_probe(&wm8998->core, &pdev->dev);
136262306a36Sopenharmony_ci	if (ret)
136362306a36Sopenharmony_ci		return ret;
136462306a36Sopenharmony_ci
136562306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(wm8998->fll); i++)
136662306a36Sopenharmony_ci		wm8998->fll[i].vco_mult = 1;
136762306a36Sopenharmony_ci
136862306a36Sopenharmony_ci	arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1,
136962306a36Sopenharmony_ci			 ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK,
137062306a36Sopenharmony_ci			 &wm8998->fll[0]);
137162306a36Sopenharmony_ci	arizona_init_fll(arizona, 2, ARIZONA_FLL2_CONTROL_1 - 1,
137262306a36Sopenharmony_ci			 ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK,
137362306a36Sopenharmony_ci			 &wm8998->fll[1]);
137462306a36Sopenharmony_ci
137562306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(wm8998_dai); i++)
137662306a36Sopenharmony_ci		arizona_init_dai(&wm8998->core, i);
137762306a36Sopenharmony_ci
137862306a36Sopenharmony_ci	/* Latch volume update bits */
137962306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(wm8998_digital_vu); i++)
138062306a36Sopenharmony_ci		regmap_update_bits(arizona->regmap, wm8998_digital_vu[i],
138162306a36Sopenharmony_ci				   WM8998_DIG_VU, WM8998_DIG_VU);
138262306a36Sopenharmony_ci
138362306a36Sopenharmony_ci	pm_runtime_enable(&pdev->dev);
138462306a36Sopenharmony_ci	pm_runtime_idle(&pdev->dev);
138562306a36Sopenharmony_ci
138662306a36Sopenharmony_ci	arizona_init_common(arizona);
138762306a36Sopenharmony_ci
138862306a36Sopenharmony_ci	ret = arizona_init_spk_irqs(arizona);
138962306a36Sopenharmony_ci	if (ret < 0)
139062306a36Sopenharmony_ci		goto err_pm_disable;
139162306a36Sopenharmony_ci
139262306a36Sopenharmony_ci	ret = devm_snd_soc_register_component(&pdev->dev,
139362306a36Sopenharmony_ci					      &soc_component_dev_wm8998,
139462306a36Sopenharmony_ci					      wm8998_dai,
139562306a36Sopenharmony_ci					      ARRAY_SIZE(wm8998_dai));
139662306a36Sopenharmony_ci	if (ret < 0) {
139762306a36Sopenharmony_ci		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
139862306a36Sopenharmony_ci		goto err_spk_irqs;
139962306a36Sopenharmony_ci	}
140062306a36Sopenharmony_ci
140162306a36Sopenharmony_ci	return ret;
140262306a36Sopenharmony_ci
140362306a36Sopenharmony_cierr_spk_irqs:
140462306a36Sopenharmony_ci	arizona_free_spk_irqs(arizona);
140562306a36Sopenharmony_cierr_pm_disable:
140662306a36Sopenharmony_ci	pm_runtime_disable(&pdev->dev);
140762306a36Sopenharmony_ci	arizona_jack_codec_dev_remove(&wm8998->core);
140862306a36Sopenharmony_ci
140962306a36Sopenharmony_ci	return ret;
141062306a36Sopenharmony_ci}
141162306a36Sopenharmony_ci
141262306a36Sopenharmony_cistatic void wm8998_remove(struct platform_device *pdev)
141362306a36Sopenharmony_ci{
141462306a36Sopenharmony_ci	struct wm8998_priv *wm8998 = platform_get_drvdata(pdev);
141562306a36Sopenharmony_ci	struct arizona *arizona = wm8998->core.arizona;
141662306a36Sopenharmony_ci
141762306a36Sopenharmony_ci	pm_runtime_disable(&pdev->dev);
141862306a36Sopenharmony_ci
141962306a36Sopenharmony_ci	arizona_free_spk_irqs(arizona);
142062306a36Sopenharmony_ci
142162306a36Sopenharmony_ci	arizona_jack_codec_dev_remove(&wm8998->core);
142262306a36Sopenharmony_ci}
142362306a36Sopenharmony_ci
142462306a36Sopenharmony_cistatic struct platform_driver wm8998_codec_driver = {
142562306a36Sopenharmony_ci	.driver = {
142662306a36Sopenharmony_ci		.name = "wm8998-codec",
142762306a36Sopenharmony_ci	},
142862306a36Sopenharmony_ci	.probe = wm8998_probe,
142962306a36Sopenharmony_ci	.remove_new = wm8998_remove,
143062306a36Sopenharmony_ci};
143162306a36Sopenharmony_ci
143262306a36Sopenharmony_cimodule_platform_driver(wm8998_codec_driver);
143362306a36Sopenharmony_ci
143462306a36Sopenharmony_ciMODULE_DESCRIPTION("ASoC WM8998 driver");
143562306a36Sopenharmony_ciMODULE_AUTHOR("Richard Fitzgerald <rf@opensource.wolfsonmicro.com>");
143662306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
143762306a36Sopenharmony_ciMODULE_ALIAS("platform:wm8998-codec");
1438