aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/sound/fsl,esai.yaml14
-rw-r--r--Documentation/devicetree/bindings/sound/mt6359.yaml10
-rw-r--r--Documentation/devicetree/bindings/sound/neofidelity,ntp8835.yaml73
-rw-r--r--Documentation/devicetree/bindings/sound/neofidelity,ntp8918.yaml70
-rw-r--r--Documentation/devicetree/bindings/sound/realtek,rt5640.yaml146
-rw-r--r--Documentation/devicetree/bindings/sound/rt5640.txt97
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.yaml2
-rw-r--r--sound/soc/amd/acp/acp-i2s.c38
-rw-r--r--sound/soc/amd/acp/acp-legacy-common.c24
-rw-r--r--sound/soc/amd/acp/acp-legacy-mach.c8
-rw-r--r--sound/soc/amd/acp/acp-mach-common.c38
-rw-r--r--sound/soc/amd/acp/acp-mach.h12
-rw-r--r--sound/soc/amd/acp/acp-pci.c7
-rw-r--r--sound/soc/amd/acp/acp-pdm.c2
-rw-r--r--sound/soc/amd/acp/acp-platform.c18
-rw-r--r--sound/soc/amd/acp/acp-rembrandt.c4
-rw-r--r--sound/soc/amd/acp/acp-renoir.c4
-rw-r--r--sound/soc/amd/acp/acp-sdw-sof-mach.c5
-rw-r--r--sound/soc/amd/acp/acp-sof-mach.c6
-rw-r--r--sound/soc/amd/acp/acp63.c4
-rw-r--r--sound/soc/amd/acp/acp70.c14
-rw-r--r--sound/soc/amd/acp/acp_common.h19
-rw-r--r--sound/soc/amd/acp/amd.h9
-rw-r--r--sound/soc/amd/yc/acp6x-mach.c7
-rw-r--r--sound/soc/atmel/atmel_ssc_dai.c5
-rw-r--r--sound/soc/atmel/mchp-pdmc.c3
-rw-r--r--sound/soc/atmel/mchp-spdifrx.c2
-rw-r--r--sound/soc/atmel/mchp-spdiftx.c2
-rw-r--r--sound/soc/au1x/dbdma2.c2
-rw-r--r--sound/soc/au1x/dma.c2
-rw-r--r--sound/soc/bcm/bcm2835-i2s.c2
-rw-r--r--sound/soc/bcm/cygnus-pcm.c2
-rw-r--r--sound/soc/codecs/Kconfig13
-rw-r--r--sound/soc/codecs/Makefile6
-rw-r--r--sound/soc/codecs/aw88395/aw88395_device.c2
-rw-r--r--sound/soc/codecs/aw88395/aw88395_lib.c2
-rw-r--r--sound/soc/codecs/aw88399.c2
-rw-r--r--sound/soc/codecs/cpcap.c2
-rw-r--r--sound/soc/codecs/cs35l45-tables.c2
-rw-r--r--sound/soc/codecs/cs35l45.h2
-rw-r--r--sound/soc/codecs/lpass-rx-macro.c2
-rw-r--r--sound/soc/codecs/ntp8835.c480
-rw-r--r--sound/soc/codecs/ntp8918.c397
-rw-r--r--sound/soc/codecs/ntpfw.c137
-rw-r--r--sound/soc/codecs/ntpfw.h23
-rw-r--r--sound/soc/codecs/pcm186x.c4
-rw-r--r--sound/soc/codecs/pcm5102a.c2
-rw-r--r--sound/soc/codecs/rt1320-sdw.c3347
-rw-r--r--sound/soc/codecs/rt1320-sdw.h2
-rw-r--r--sound/soc/codecs/spdif_receiver.c2
-rw-r--r--sound/soc/codecs/spdif_transmitter.c2
-rw-r--r--sound/soc/codecs/tas2781-i2c.c35
-rw-r--r--sound/soc/codecs/tas5805m.c2
-rw-r--r--sound/soc/codecs/tas6424.c2
-rw-r--r--sound/soc/codecs/tlv320adc3xxx.c2
-rw-r--r--sound/soc/codecs/twl4030.c12
-rw-r--r--sound/soc/codecs/wcd9335.c1
-rw-r--r--sound/soc/fsl/fsl_aud2htx.c2
-rw-r--r--sound/soc/fsl/fsl_easrc.c2
-rw-r--r--sound/soc/fsl/fsl_micfil.c51
-rw-r--r--sound/soc/fsl/fsl_qmc_audio.c2
-rw-r--r--sound/soc/meson/axg-tdm-interface.c12
-rw-r--r--sound/soc/meson/axg-tdm.h2
-rw-r--r--sound/soc/sh/rz-ssi.c6
-rw-r--r--sound/soc/soc-component.c14
-rw-r--r--sound/soc/soc-dai.c10
-rw-r--r--sound/soc/soc-link.c10
-rw-r--r--sound/soc/soc-topology.c4
-rw-r--r--sound/soc/sof/ipc3.c2
-rw-r--r--sound/soc/stm/stm32_adfsdm.c2
-rw-r--r--sound/soc/stm/stm32_sai_sub.c2
-rw-r--r--sound/soc/uniphier/aio-core.c15
-rw-r--r--sound/soc/uniphier/evea.c2
73 files changed, 1719 insertions, 3553 deletions
diff --git a/Documentation/devicetree/bindings/sound/fsl,esai.yaml b/Documentation/devicetree/bindings/sound/fsl,esai.yaml
index f99ed20fa684..d1b4e23f1c95 100644
--- a/Documentation/devicetree/bindings/sound/fsl,esai.yaml
+++ b/Documentation/devicetree/bindings/sound/fsl,esai.yaml
@@ -65,6 +65,9 @@ properties:
- const: rx
- const: tx
+ power-domains:
+ maxItems: 1
+
fsl,fifo-depth:
$ref: /schemas/types.yaml#/definitions/uint32
default: 64
@@ -101,6 +104,17 @@ unevaluatedProperties: false
allOf:
- $ref: dai-common.yaml#
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: fsl,imx8qm-esai
+ then:
+ required:
+ - power-domains
+ else:
+ properties:
+ power-domains: false
examples:
- |
diff --git a/Documentation/devicetree/bindings/sound/mt6359.yaml b/Documentation/devicetree/bindings/sound/mt6359.yaml
index 23d411fc4200..128698630c86 100644
--- a/Documentation/devicetree/bindings/sound/mt6359.yaml
+++ b/Documentation/devicetree/bindings/sound/mt6359.yaml
@@ -23,8 +23,8 @@ properties:
Indicates how many data pins are used to transmit two channels of PDM
signal. 0 means two wires, 1 means one wire. Default value is 0.
enum:
- - 0 # one wire
- - 1 # two wires
+ - 0 # two wires
+ - 1 # one wire
mediatek,mic-type-0:
$ref: /schemas/types.yaml#/definitions/uint32
@@ -53,9 +53,9 @@ additionalProperties: false
examples:
- |
- mt6359codec: mt6359codec {
- mediatek,dmic-mode = <0>;
- mediatek,mic-type-0 = <2>;
+ mt6359codec: audio-codec {
+ mediatek,dmic-mode = <0>;
+ mediatek,mic-type-0 = <2>;
};
...
diff --git a/Documentation/devicetree/bindings/sound/neofidelity,ntp8835.yaml b/Documentation/devicetree/bindings/sound/neofidelity,ntp8835.yaml
new file mode 100644
index 000000000000..44d72a2ddfc9
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/neofidelity,ntp8835.yaml
@@ -0,0 +1,73 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/neofidelity,ntp8835.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NeoFidelity NTP8835/NTP8835C Amplifiers
+
+maintainers:
+ - Igor Prusov <ivprusov@salutedevices.com>
+
+description: |
+ The NTP8835 is a single chip full digital audio amplifier
+ including power stages for stereo amplifier systems.
+ NTP8835 is integrated with versatile digital audio signal
+ processing functions, high-performance, high-fidelity fully
+ digital PWM modulator and two high-power full-bridge MOSFET
+ power stages. NTP8835C has identical programming interface,
+ but has different output signal characteristics.
+
+allOf:
+ - $ref: dai-common.yaml#
+
+properties:
+ compatible:
+ enum:
+ - neofidelity,ntp8835
+ - neofidelity,ntp8835c
+
+ reg:
+ enum:
+ - 0x2a
+ - 0x2b
+ - 0x2c
+ - 0x2d
+
+ reset-gpios:
+ maxItems: 1
+
+ '#sound-dai-cells':
+ const: 0
+
+ clocks:
+ maxItems: 4
+
+ clock-names:
+ items:
+ - const: wck
+ - const: bck
+ - const: scl
+ - const: mclk
+
+required:
+ - compatible
+ - reg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ audio-codec@2b {
+ compatible = "neofidelity,ntp8835";
+ #sound-dai-cells = <0>;
+ reg = <0x2b>;
+ reset-gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
+ clocks = <&clkc 551>, <&clkc 552>, <&clkc 553>, <&clkc 554>;
+ clock-names = "wck", "bck", "scl", "mclk";
+ };
+ };
diff --git a/Documentation/devicetree/bindings/sound/neofidelity,ntp8918.yaml b/Documentation/devicetree/bindings/sound/neofidelity,ntp8918.yaml
new file mode 100644
index 000000000000..952768b35902
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/neofidelity,ntp8918.yaml
@@ -0,0 +1,70 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/neofidelity,ntp8918.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NeoFidelity NTP8918 Amplifier
+
+maintainers:
+ - Igor Prusov <ivprusov@salutedevices.com>
+
+description:
+ The NTP8918 is a single chip full digital audio amplifier
+ including power stage for stereo amplifier system.
+ The NTP8918 is integrated with versatile digital audio signal
+ processing functions, high-performance, high-fidelity fully
+ digital PWM modulator and two high-power full-bridge MOSFET
+ power stages.
+
+allOf:
+ - $ref: dai-common.yaml#
+
+properties:
+ compatible:
+ enum:
+ - neofidelity,ntp8918
+
+ reg:
+ enum:
+ - 0x2a
+ - 0x2b
+ - 0x2c
+ - 0x2d
+
+ reset-gpios:
+ maxItems: 1
+
+ '#sound-dai-cells':
+ const: 0
+
+ clocks:
+ maxItems: 3
+
+ clock-names:
+ items:
+ - const: wck
+ - const: scl
+ - const: bck
+
+required:
+ - compatible
+ - reg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ audio-codec@2a {
+ compatible = "neofidelity,ntp8918";
+ #sound-dai-cells = <0>;
+ reg = <0x2a>;
+ clocks = <&clkc 150>, <&clkc 151>, <&clkc 152>;
+ clock-names = "wck", "scl", "bck";
+ reset-gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
+ };
+ };
diff --git a/Documentation/devicetree/bindings/sound/realtek,rt5640.yaml b/Documentation/devicetree/bindings/sound/realtek,rt5640.yaml
new file mode 100644
index 000000000000..3f4f59287c1c
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/realtek,rt5640.yaml
@@ -0,0 +1,146 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/realtek,rt5640.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: RT5640/RT5639 audio CODEC
+
+maintainers:
+ - Neil Armstrong <neil.armstrong@linaro.org>
+
+description: |
+ This device supports I2C only.
+
+ Pins on the device (for linking into audio routes) for RT5639/RT5640:
+ * DMIC1
+ * DMIC2
+ * MICBIAS1
+ * IN1P
+ * IN1N
+ * IN2P
+ * IN2N
+ * IN3P
+ * IN3N
+ * HPOL
+ * HPOR
+ * LOUTL
+ * LOUTR
+ * SPOLP
+ * SPOLN
+ * SPORP
+ * SPORN
+
+ Additional pins on the device for RT5640:
+ * MONOP
+ * MONON
+
+allOf:
+ - $ref: dai-common.yaml#
+
+properties:
+ compatible:
+ enum:
+ - realtek,rt5640
+ - realtek,rt5639
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+ description: The CODEC's interrupt output.
+
+ realtek,in1-differential:
+ description:
+ Indicate MIC1 input is differential, rather than single-ended.
+ type: boolean
+
+ realtek,in2-differential:
+ description:
+ Indicate MIC2 input is differential, rather than single-ended.
+ type: boolean
+
+ realtek,in3-differential:
+ description:
+ Indicate MIC3 input is differential, rather than single-ended.
+ type: boolean
+
+ realtek,lout-differential:
+ description:
+ Indicate LOUT output is differential, rather than single-ended.
+ type: boolean
+
+ realtek,dmic1-data-pin:
+ description: Specify which pin to be used as DMIC1 data pin.
+ $ref: /schemas/types.yaml#/definitions/uint32
+ enum:
+ - 0 # dmic1 is not used
+ - 1 # using IN2P pin as dmic1 data pin
+ - 2 # using GPIO3 pin as dmic1 data pin
+
+ realtek,dmic2-data-pin:
+ description: Specify which pin to be used as DMIC2 data pin.
+ $ref: /schemas/types.yaml#/definitions/uint32
+ enum:
+ - 0 # dmic2 is not used
+ - 1 # using IN2N pin as dmic2 data pin
+ - 2 # using GPIO4 pin as dmic2 data pin
+
+ realtek,jack-detect-source:
+ description: The Jack Detect source.
+ $ref: /schemas/types.yaml#/definitions/uint32
+ enum:
+ - 0 # Jack Detect function is not used
+ - 1 # Use GPIO1 for jack-detect
+ - 2 # Use JD1_IN4P for jack-detect
+ - 3 # Use JD2_IN4N for jack-detect
+ - 4 # Use GPIO2 for jack-detect
+ - 5 # Use GPIO3 for jack-detect
+ - 6 # Use GPIO4 for jack-detect
+
+ realtek,jack-detect-not-inverted:
+ description:
+ Normal jack-detect switches give an inverted signal, set this bool
+ in the rare case you've a jack-detect switch which is not inverted.
+ type: boolean
+
+ realtek,over-current-threshold-microamp:
+ description: micbias over-current detection threshold in µA
+ enum:
+ - 600
+ - 1500
+ - 2000
+
+ realtek,over-current-scale-factor:
+ description: micbias over-current detection scale-factor
+ $ref: /schemas/types.yaml#/definitions/uint32
+ enum:
+ - 0 # Scale current by 0.5
+ - 1 # Scale current by 0.75
+ - 2 # Scale current by 1.0
+ - 3 # Scale current by 1.5
+
+required:
+ - compatible
+ - reg
+ - interrupts
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ codec@1a {
+ compatible = "realtek,rt5640";
+ reg = <0x1a>;
+ interrupt-parent = <&gpio>;
+ interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
+ };
+ };
diff --git a/Documentation/devicetree/bindings/sound/rt5640.txt b/Documentation/devicetree/bindings/sound/rt5640.txt
deleted file mode 100644
index 0c398581d52b..000000000000
--- a/Documentation/devicetree/bindings/sound/rt5640.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-RT5640/RT5639 audio CODEC
-
-This device supports I2C only.
-
-Required properties:
-
-- compatible : One of "realtek,rt5640" or "realtek,rt5639".
-
-- reg : The I2C address of the device.
-
-- interrupts : The CODEC's interrupt output.
-
-Optional properties:
-
-- clocks: The phandle of the master clock to the CODEC
-- clock-names: Should be "mclk"
-
-- realtek,in1-differential
-- realtek,in2-differential
-- realtek,in3-differential
- Boolean. Indicate MIC1/2/3 input are differential, rather than single-ended.
-
-- realtek,lout-differential
- Boolean. Indicate LOUT output is differential, rather than stereo.
-
-- realtek,ldo1-en-gpios : The GPIO that controls the CODEC's LDO1_EN pin.
-
-- realtek,dmic1-data-pin
- 0: dmic1 is not used
- 1: using IN1P pin as dmic1 data pin
- 2: using GPIO3 pin as dmic1 data pin
-
-- realtek,dmic2-data-pin
- 0: dmic2 is not used
- 1: using IN1N pin as dmic2 data pin
- 2: using GPIO4 pin as dmic2 data pin
-
-- realtek,jack-detect-source
- u32. Valid values:
- 0: jack-detect is not used
- 1: Use GPIO1 for jack-detect
- 2: Use JD1_IN4P for jack-detect
- 3: Use JD2_IN4N for jack-detect
- 4: Use GPIO2 for jack-detect
- 5: Use GPIO3 for jack-detect
- 6: Use GPIO4 for jack-detect
-
-- realtek,jack-detect-not-inverted
- bool. Normal jack-detect switches give an inverted signal, set this bool
- in the rare case you've a jack-detect switch which is not inverted.
-
-- realtek,over-current-threshold-microamp
- u32, micbias over-current detection threshold in µA, valid values are
- 600, 1500 and 2000µA.
-
-- realtek,over-current-scale-factor
- u32, micbias over-current detection scale-factor, valid values are:
- 0: Scale current by 0.5
- 1: Scale current by 0.75
- 2: Scale current by 1.0
- 3: Scale current by 1.5
-
-Pins on the device (for linking into audio routes) for RT5639/RT5640:
-
- * DMIC1
- * DMIC2
- * MICBIAS1
- * IN1P
- * IN1N
- * IN2P
- * IN2N
- * IN3P
- * IN3N
- * HPOL
- * HPOR
- * LOUTL
- * LOUTR
- * SPOLP
- * SPOLN
- * SPORP
- * SPORN
-
-Additional pins on the device for RT5640:
-
- * MONOP
- * MONON
-
-Example:
-
-rt5640 {
- compatible = "realtek,rt5640";
- reg = <0x1c>;
- interrupt-parent = <&gpio>;
- interrupts = <TEGRA_GPIO(W, 3) IRQ_TYPE_LEVEL_HIGH>;
- realtek,ldo1-en-gpios =
- <&gpio TEGRA_GPIO(V, 3) GPIO_ACTIVE_HIGH>;
-};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index b320a39de7fe..fbfce9b4ae6b 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -1013,6 +1013,8 @@ patternProperties:
description: Shanghai Neardi Technology Co., Ltd.
"^nec,.*":
description: NEC LCD Technologies, Ltd.
+ "^neofidelity,.*":
+ description: Neofidelity Inc.
"^neonode,.*":
description: Neonode Inc.
"^netgear,.*":
diff --git a/sound/soc/amd/acp/acp-i2s.c b/sound/soc/amd/acp/acp-i2s.c
index 56ce9e4b6acc..515bf862deb5 100644
--- a/sound/soc/amd/acp/acp-i2s.c
+++ b/sound/soc/amd/acp/acp-i2s.c
@@ -59,9 +59,9 @@ static inline void acp_set_i2s_clk(struct acp_dev_data *adata, int dai_id)
val |= BIT(1);
switch (chip->acp_rev) {
- case ACP63_DEV:
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP63_PCI_ID:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
val |= FIELD_PREP(ACP63_LRCLK_DIV_FIELD, adata->lrclk_div);
val |= FIELD_PREP(ACP63_BCLK_DIV_FIELD, adata->bclk_div);
break;
@@ -121,8 +121,8 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
}
switch (chip->acp_rev) {
- case ACP3X_DEV:
- case ACP6X_DEV:
+ case ACP_RN_PCI_ID:
+ case ACP_RMB_PCI_ID:
switch (slots) {
case 1 ... 7:
no_of_slots = slots;
@@ -135,9 +135,9 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
return -EINVAL;
}
break;
- case ACP63_DEV:
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP63_PCI_ID:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
switch (slots) {
case 1 ... 31:
no_of_slots = slots;
@@ -160,8 +160,8 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
spin_lock_irq(&adata->acp_lock);
list_for_each_entry(stream, &adata->stream_list, list) {
switch (chip->acp_rev) {
- case ACP3X_DEV:
- case ACP6X_DEV:
+ case ACP_RN_PCI_ID:
+ case ACP_RMB_PCI_ID:
if (tx_mask && stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
adata->tdm_tx_fmt[stream->dai_id - 1] =
FRM_LEN | (slots << 15) | (slot_len << 18);
@@ -169,9 +169,9 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
adata->tdm_rx_fmt[stream->dai_id - 1] =
FRM_LEN | (slots << 15) | (slot_len << 18);
break;
- case ACP63_DEV:
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP63_PCI_ID:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
if (tx_mask && stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
adata->tdm_tx_fmt[stream->dai_id - 1] =
FRM_LEN | (slots << 13) | (slot_len << 18);
@@ -534,7 +534,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
reg_fifo_addr = ACP_I2S_TX_FIFOADDR(adata);
reg_fifo_size = ACP_I2S_TX_FIFOSIZE(adata);
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
phy_addr = ACP7x_I2S_SP_TX_MEM_WINDOW_START;
else
phy_addr = I2S_SP_TX_MEM_WINDOW_START + stream->reg_offset;
@@ -546,7 +546,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
reg_fifo_addr = ACP_I2S_RX_FIFOADDR(adata);
reg_fifo_size = ACP_I2S_RX_FIFOSIZE(adata);
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
phy_addr = ACP7x_I2S_SP_RX_MEM_WINDOW_START;
else
phy_addr = I2S_SP_RX_MEM_WINDOW_START + stream->reg_offset;
@@ -561,7 +561,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
reg_fifo_addr = ACP_BT_TX_FIFOADDR(adata);
reg_fifo_size = ACP_BT_TX_FIFOSIZE(adata);
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
phy_addr = ACP7x_I2S_BT_TX_MEM_WINDOW_START;
else
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
@@ -573,7 +573,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
reg_fifo_addr = ACP_BT_RX_FIFOADDR(adata);
reg_fifo_size = ACP_BT_RX_FIFOSIZE(adata);
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
phy_addr = ACP7x_I2S_BT_RX_MEM_WINDOW_START;
else
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
@@ -588,7 +588,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
reg_fifo_addr = ACP_HS_TX_FIFOADDR;
reg_fifo_size = ACP_HS_TX_FIFOSIZE;
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
phy_addr = ACP7x_I2S_HS_TX_MEM_WINDOW_START;
else
phy_addr = I2S_HS_TX_MEM_WINDOW_START + stream->reg_offset;
@@ -600,7 +600,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
reg_fifo_addr = ACP_HS_RX_FIFOADDR;
reg_fifo_size = ACP_HS_RX_FIFOSIZE;
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
phy_addr = ACP7x_I2S_HS_RX_MEM_WINDOW_START;
else
phy_addr = I2S_HS_RX_MEM_WINDOW_START + stream->reg_offset;
diff --git a/sound/soc/amd/acp/acp-legacy-common.c b/sound/soc/amd/acp/acp-legacy-common.c
index be01b178172e..3f76d1f0a9e7 100644
--- a/sound/soc/amd/acp/acp-legacy-common.c
+++ b/sound/soc/amd/acp/acp-legacy-common.c
@@ -257,20 +257,20 @@ static int acp_power_on(struct acp_chip_info *chip)
base = chip->base;
switch (chip->acp_rev) {
- case ACP3X_DEV:
+ case ACP_RN_PCI_ID:
acp_pgfsm_stat_reg = ACP_PGFSM_STATUS;
acp_pgfsm_ctrl_reg = ACP_PGFSM_CONTROL;
break;
- case ACP6X_DEV:
+ case ACP_RMB_PCI_ID:
acp_pgfsm_stat_reg = ACP6X_PGFSM_STATUS;
acp_pgfsm_ctrl_reg = ACP6X_PGFSM_CONTROL;
break;
- case ACP63_DEV:
+ case ACP63_PCI_ID:
acp_pgfsm_stat_reg = ACP63_PGFSM_STATUS;
acp_pgfsm_ctrl_reg = ACP63_PGFSM_CONTROL;
break;
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
acp_pgfsm_stat_reg = ACP70_PGFSM_STATUS;
acp_pgfsm_ctrl_reg = ACP70_PGFSM_CONTROL;
break;
@@ -322,7 +322,7 @@ int acp_init(struct acp_chip_info *chip)
pr_err("ACP reset failed\n");
return ret;
}
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
writel(0, chip->base + ACP_ZSC_DSP_CTRL);
return 0;
}
@@ -337,7 +337,7 @@ int acp_deinit(struct acp_chip_info *chip)
if (ret)
return ret;
- if (chip->acp_rev < ACP70_DEV)
+ if (chip->acp_rev < ACP70_PCI_ID)
writel(0, chip->base + ACP_CONTROL);
else
writel(0x01, chip->base + ACP_ZSC_DSP_CTRL);
@@ -448,20 +448,20 @@ void check_acp_config(struct pci_dev *pci, struct acp_chip_info *chip)
u32 pdm_addr;
switch (chip->acp_rev) {
- case ACP3X_DEV:
+ case ACP_RN_PCI_ID:
pdm_addr = ACP_RENOIR_PDM_ADDR;
check_acp3x_config(chip);
break;
- case ACP6X_DEV:
+ case ACP_RMB_PCI_ID:
pdm_addr = ACP_REMBRANDT_PDM_ADDR;
check_acp6x_config(chip);
break;
- case ACP63_DEV:
+ case ACP63_PCI_ID:
pdm_addr = ACP63_PDM_ADDR;
check_acp6x_config(chip);
break;
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
pdm_addr = ACP70_PDM_ADDR;
check_acp70_config(chip);
break;
diff --git a/sound/soc/amd/acp/acp-legacy-mach.c b/sound/soc/amd/acp/acp-legacy-mach.c
index d104f7e8fdcd..45613a865d2b 100644
--- a/sound/soc/amd/acp/acp-legacy-mach.c
+++ b/sound/soc/amd/acp/acp-legacy-mach.c
@@ -57,7 +57,6 @@ static struct acp_card_drvdata es83xx_rn_data = {
.dmic_cpu_id = DMIC,
.hs_codec_id = ES83XX,
.dmic_codec_id = DMIC,
- .platform = RENOIR,
};
static struct acp_card_drvdata max_nau8825_data = {
@@ -68,7 +67,6 @@ static struct acp_card_drvdata max_nau8825_data = {
.amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC,
.soc_mclk = true,
- .platform = REMBRANDT,
.tdm_mode = false,
};
@@ -80,7 +78,6 @@ static struct acp_card_drvdata rt5682s_rt1019_rmb_data = {
.amp_codec_id = RT1019,
.dmic_codec_id = DMIC,
.soc_mclk = true,
- .platform = REMBRANDT,
.tdm_mode = false,
};
@@ -126,6 +123,7 @@ static int acp_asoc_probe(struct platform_device *pdev)
{
struct snd_soc_card *card = NULL;
struct device *dev = &pdev->dev;
+ struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
const struct dmi_system_id *dmi_id;
struct acp_card_drvdata *acp_card_drvdata;
int ret;
@@ -171,7 +169,9 @@ static int acp_asoc_probe(struct platform_device *pdev)
goto out;
}
if (!strcmp(pdev->name, "acp-pdm-mach"))
- acp_card_drvdata->platform = *((int *)dev->platform_data);
+ acp_card_drvdata->acp_rev = *((int *)dev->platform_data);
+ else
+ acp_card_drvdata->acp_rev = mach->mach_params.subsystem_rev;
dmi_id = dmi_first_match(acp_quirk_table);
if (dmi_id && dmi_id->driver_data)
diff --git a/sound/soc/amd/acp/acp-mach-common.c b/sound/soc/amd/acp/acp-mach-common.c
index e9ff4815c12c..2394aa061265 100644
--- a/sound/soc/amd/acp/acp-mach-common.c
+++ b/sound/soc/amd/acp/acp-mach-common.c
@@ -1471,7 +1471,7 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
if (drv_data->amp_cpu_id == I2S_SP) {
links[i].name = "acp-amp-codec";
links[i].id = AMP_BE_ID;
- if (drv_data->platform == RENOIR) {
+ if (drv_data->acp_rev == ACP_RN_PCI_ID) {
links[i].cpus = sof_sp;
links[i].num_cpus = ARRAY_SIZE(sof_sp);
} else {
@@ -1647,16 +1647,21 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].id = HEADSET_BE_ID;
links[i].cpus = i2s_hs;
links[i].num_cpus = ARRAY_SIZE(i2s_hs);
- if (drv_data->platform == REMBRANDT) {
+ switch (drv_data->acp_rev) {
+ case ACP_RMB_PCI_ID:
links[i].platforms = platform_rmb_component;
links[i].num_platforms = ARRAY_SIZE(platform_rmb_component);
- } else if (drv_data->platform == ACP63) {
+ break;
+ case ACP63_PCI_ID:
links[i].platforms = platform_acp63_component;
links[i].num_platforms = ARRAY_SIZE(platform_acp63_component);
- } else {
+ break;
+ default:
links[i].platforms = platform_component;
links[i].num_platforms = ARRAY_SIZE(platform_component);
+ break;
}
+
links[i].dpcm_playback = 1;
links[i].dpcm_capture = 1;
if (!drv_data->hs_codec_id) {
@@ -1714,16 +1719,21 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].id = AMP_BE_ID;
links[i].cpus = i2s_hs;
links[i].num_cpus = ARRAY_SIZE(i2s_hs);
- if (drv_data->platform == REMBRANDT) {
+ switch (drv_data->acp_rev) {
+ case ACP_RMB_PCI_ID:
links[i].platforms = platform_rmb_component;
links[i].num_platforms = ARRAY_SIZE(platform_rmb_component);
- } else if (drv_data->platform == ACP63) {
+ break;
+ case ACP63_PCI_ID:
links[i].platforms = platform_acp63_component;
links[i].num_platforms = ARRAY_SIZE(platform_acp63_component);
- } else {
+ break;
+ default:
links[i].platforms = platform_component;
links[i].num_platforms = ARRAY_SIZE(platform_component);
+ break;
}
+
links[i].dpcm_playback = 1;
if (!drv_data->amp_codec_id) {
/* Use dummy codec if codec id not specified */
@@ -1760,18 +1770,24 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
}
links[i].cpus = pdm_dmic;
links[i].num_cpus = ARRAY_SIZE(pdm_dmic);
- if (drv_data->platform == REMBRANDT) {
+ switch (drv_data->acp_rev) {
+ case ACP_RMB_PCI_ID:
links[i].platforms = platform_rmb_component;
links[i].num_platforms = ARRAY_SIZE(platform_rmb_component);
- } else if (drv_data->platform == ACP63) {
+ break;
+ case ACP63_PCI_ID:
links[i].platforms = platform_acp63_component;
links[i].num_platforms = ARRAY_SIZE(platform_acp63_component);
- } else if ((drv_data->platform == ACP70) || (drv_data->platform == ACP71)) {
+ break;
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
links[i].platforms = platform_acp70_component;
links[i].num_platforms = ARRAY_SIZE(platform_acp70_component);
- } else {
+ break;
+ default:
links[i].platforms = platform_component;
links[i].num_platforms = ARRAY_SIZE(platform_component);
+ break;
}
links[i].ops = &acp_card_dmic_ops;
links[i].dpcm_capture = 1;
diff --git a/sound/soc/amd/acp/acp-mach.h b/sound/soc/amd/acp/acp-mach.h
index 93d9e3886b7e..f94c30c20f20 100644
--- a/sound/soc/amd/acp/acp-mach.h
+++ b/sound/soc/amd/acp/acp-mach.h
@@ -18,6 +18,8 @@
#include <linux/module.h>
#include <sound/soc.h>
+#include "acp_common.h"
+
#define TDM_CHANNELS 8
#define ACP_OPS(priv, cb) ((priv)->ops.cb)
@@ -51,14 +53,6 @@ enum codec_endpoints {
ES83XX,
};
-enum platform_end_point {
- RENOIR = 0,
- REMBRANDT,
- ACP63,
- ACP70,
- ACP71,
-};
-
struct acp_mach_ops {
int (*probe)(struct snd_soc_card *card);
int (*configure_link)(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link);
@@ -77,7 +71,7 @@ struct acp_card_drvdata {
unsigned int bt_codec_id;
unsigned int dmic_codec_id;
unsigned int dai_fmt;
- unsigned int platform;
+ unsigned int acp_rev;
struct clk *wclk;
struct clk *bclk;
struct acp_mach_ops ops;
diff --git a/sound/soc/amd/acp/acp-pci.c b/sound/soc/amd/acp/acp-pci.c
index f7450a5bd103..4b6ad7abc3ba 100644
--- a/sound/soc/amd/acp/acp-pci.c
+++ b/sound/soc/amd/acp/acp-pci.c
@@ -77,27 +77,22 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
res_acp = acp_res;
num_res = ARRAY_SIZE(acp_res);
-
+ chip->acp_rev = pci->revision;
switch (pci->revision) {
case 0x01:
chip->name = "acp_asoc_renoir";
- chip->acp_rev = ACP3X_DEV;
break;
case 0x6f:
chip->name = "acp_asoc_rembrandt";
- chip->acp_rev = ACP6X_DEV;
break;
case 0x63:
chip->name = "acp_asoc_acp63";
- chip->acp_rev = ACP63_DEV;
break;
case 0x70:
chip->name = "acp_asoc_acp70";
- chip->acp_rev = ACP70_DEV;
break;
case 0x71:
chip->name = "acp_asoc_acp70";
- chip->acp_rev = ACP71_DEV;
break;
default:
dev_err(dev, "Unsupported device revision:0x%x\n", pci->revision);
diff --git a/sound/soc/amd/acp/acp-pdm.c b/sound/soc/amd/acp/acp-pdm.c
index 22dd8988d005..48faafe724ed 100644
--- a/sound/soc/amd/acp/acp-pdm.c
+++ b/sound/soc/amd/acp/acp-pdm.c
@@ -47,7 +47,7 @@ static int acp_dmic_prepare(struct snd_pcm_substream *substream,
size_dmic = frames_to_bytes(substream->runtime,
substream->runtime->buffer_size);
- if (chip->acp_rev >= ACP70_DEV)
+ if (chip->acp_rev >= ACP70_PCI_ID)
physical_addr = ACP7x_DMIC_MEM_WINDOW_START;
else
physical_addr = stream->reg_offset + MEM_WINDOW_START;
diff --git a/sound/soc/amd/acp/acp-platform.c b/sound/soc/amd/acp/acp-platform.c
index 3a7a467b7063..1f352b2b3002 100644
--- a/sound/soc/amd/acp/acp-platform.c
+++ b/sound/soc/amd/acp/acp-platform.c
@@ -114,7 +114,7 @@ int acp_machine_select(struct acp_dev_data *adata)
int size, platform;
if (adata->flag == FLAG_AMD_LEGACY_ONLY_DMIC) {
- platform = adata->platform;
+ platform = adata->acp_rev;
adata->mach_dev = platform_device_register_data(adata->dev, "acp-pdm-mach",
PLATFORM_DEVID_NONE, &platform,
sizeof(platform));
@@ -125,6 +125,7 @@ int acp_machine_select(struct acp_dev_data *adata)
dev_err(adata->dev, "warning: No matching ASoC machine driver found\n");
return -EINVAL;
}
+ mach->mach_params.subsystem_rev = adata->acp_rev;
adata->mach_dev = platform_device_register_data(adata->dev, mach->drv_name,
PLATFORM_DEVID_NONE, mach, size);
}
@@ -142,9 +143,6 @@ static irqreturn_t i2s_irq_handler(int irq, void *data)
u16 i2s_flag = 0;
u32 ext_intr_stat, ext_intr_stat1;
- if (!adata)
- return IRQ_NONE;
-
if (adata->rsrc->no_of_ctrls == 2)
ext_intr_stat1 = readl(ACP_EXTERNAL_INTR_STAT(adata, (rsrc->irqp_used - 1)));
@@ -204,9 +202,9 @@ void config_acp_dma(struct acp_dev_data *adata, struct acp_stream *stream, int s
u32 low, high, val;
u16 page_idx;
- switch (adata->platform) {
- case ACP70:
- case ACP71:
+ switch (adata->acp_rev) {
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
switch (stream->dai_id) {
case I2S_SP_INSTANCE:
if (stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
@@ -270,9 +268,9 @@ static int acp_dma_open(struct snd_soc_component *component, struct snd_pcm_subs
stream->substream = substream;
chip = dev_get_platdata(dev);
switch (chip->acp_rev) {
- case ACP63_DEV:
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP63_PCI_ID:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
runtime->hw = acp6x_pcm_hardware_playback;
else
diff --git a/sound/soc/amd/acp/acp-rembrandt.c b/sound/soc/amd/acp/acp-rembrandt.c
index 396434a45eea..008d97598b62 100644
--- a/sound/soc/amd/acp/acp-rembrandt.c
+++ b/sound/soc/amd/acp/acp-rembrandt.c
@@ -197,7 +197,7 @@ static int rembrandt_audio_probe(struct platform_device *pdev)
return -ENODEV;
}
- if (chip->acp_rev != ACP6X_DEV) {
+ if (chip->acp_rev != ACP_RMB_PCI_ID) {
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
return -ENODEV;
}
@@ -227,7 +227,7 @@ static int rembrandt_audio_probe(struct platform_device *pdev)
adata->dai_driver = acp_rmb_dai;
adata->num_dai = ARRAY_SIZE(acp_rmb_dai);
adata->rsrc = &rsrc;
- adata->platform = REMBRANDT;
+ adata->acp_rev = chip->acp_rev;
adata->flag = chip->flag;
adata->is_i2s_config = chip->is_i2s_config;
adata->machines = snd_soc_acpi_amd_rmb_acp_machines;
diff --git a/sound/soc/amd/acp/acp-renoir.c b/sound/soc/amd/acp/acp-renoir.c
index 5e3f730aa6bf..166f1efacf1d 100644
--- a/sound/soc/amd/acp/acp-renoir.c
+++ b/sound/soc/amd/acp/acp-renoir.c
@@ -157,7 +157,7 @@ static int renoir_audio_probe(struct platform_device *pdev)
return -ENODEV;
}
- if (chip->acp_rev != ACP3X_DEV) {
+ if (chip->acp_rev != ACP_RN_PCI_ID) {
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
return -ENODEV;
}
@@ -185,7 +185,7 @@ static int renoir_audio_probe(struct platform_device *pdev)
adata->dai_driver = acp_renoir_dai;
adata->num_dai = ARRAY_SIZE(acp_renoir_dai);
adata->rsrc = &rsrc;
- adata->platform = RENOIR;
+ adata->acp_rev = chip->acp_rev;
adata->flag = chip->flag;
adata->machines = snd_soc_acpi_amd_acp_machines;
diff --git a/sound/soc/amd/acp/acp-sdw-sof-mach.c b/sound/soc/amd/acp/acp-sdw-sof-mach.c
index 6c50c8276538..306854fb08e3 100644
--- a/sound/soc/amd/acp/acp-sdw-sof-mach.c
+++ b/sound/soc/amd/acp/acp-sdw-sof-mach.c
@@ -400,9 +400,6 @@ err_dai:
return ret;
}
-/* SoC card */
-static const char sdw_card_long_name[] = "AMD Soundwire SOF";
-
static int mc_probe(struct platform_device *pdev)
{
struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
@@ -463,8 +460,6 @@ static int mc_probe(struct platform_device *pdev)
if (!card->components)
return -ENOMEM;
- card->long_name = sdw_card_long_name;
-
/* Register the card */
ret = devm_snd_soc_register_card(card->dev, card);
if (ret) {
diff --git a/sound/soc/amd/acp/acp-sof-mach.c b/sound/soc/amd/acp/acp-sof-mach.c
index f36750167fa2..63a9621ede6d 100644
--- a/sound/soc/amd/acp/acp-sof-mach.c
+++ b/sound/soc/amd/acp/acp-sof-mach.c
@@ -46,7 +46,6 @@ static struct acp_card_drvdata sof_rt5682s_rt1019_data = {
.hs_codec_id = RT5682S,
.amp_codec_id = RT1019,
.dmic_codec_id = DMIC,
- .platform = RENOIR,
};
static struct acp_card_drvdata sof_rt5682s_max_data = {
@@ -56,7 +55,6 @@ static struct acp_card_drvdata sof_rt5682s_max_data = {
.hs_codec_id = RT5682S,
.amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC,
- .platform = RENOIR,
};
static struct acp_card_drvdata sof_nau8825_data = {
@@ -66,7 +64,6 @@ static struct acp_card_drvdata sof_nau8825_data = {
.hs_codec_id = NAU8825,
.amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC,
- .platform = REMBRANDT,
.soc_mclk = true,
};
@@ -77,7 +74,6 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {
.hs_codec_id = RT5682S,
.amp_codec_id = RT1019,
.dmic_codec_id = DMIC,
- .platform = REMBRANDT,
.soc_mclk = true,
};
@@ -94,6 +90,7 @@ static int acp_sof_probe(struct platform_device *pdev)
{
struct snd_soc_card *card = NULL;
struct device *dev = &pdev->dev;
+ struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
const struct dmi_system_id *dmi_id;
struct acp_card_drvdata *acp_card_drvdata;
int ret;
@@ -116,6 +113,7 @@ static int acp_sof_probe(struct platform_device *pdev)
if (dmi_id && dmi_id->driver_data)
acp_card_drvdata->tdm_mode = dmi_id->driver_data;
+ acp_card_drvdata->acp_rev = mach->mach_params.subsystem_rev;
ret = acp_sofdsp_dai_links_create(card);
if (ret)
return dev_err_probe(&pdev->dev, ret, "Failed to create DAI links\n");
diff --git a/sound/soc/amd/acp/acp63.c b/sound/soc/amd/acp/acp63.c
index f325c374f228..e0b86132eb95 100644
--- a/sound/soc/amd/acp/acp63.c
+++ b/sound/soc/amd/acp/acp63.c
@@ -207,7 +207,7 @@ static int acp63_audio_probe(struct platform_device *pdev)
return -ENODEV;
}
- if (chip->acp_rev != ACP63_DEV) {
+ if (chip->acp_rev != ACP63_PCI_ID) {
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
return -ENODEV;
}
@@ -237,7 +237,7 @@ static int acp63_audio_probe(struct platform_device *pdev)
adata->dai_driver = acp63_dai;
adata->num_dai = ARRAY_SIZE(acp63_dai);
adata->rsrc = &rsrc;
- adata->platform = ACP63;
+ adata->acp_rev = chip->acp_rev;
adata->flag = chip->flag;
adata->is_i2s_config = chip->is_i2s_config;
adata->machines = snd_soc_acpi_amd_acp63_acp_machines;
diff --git a/sound/soc/amd/acp/acp70.c b/sound/soc/amd/acp/acp70.c
index 68d2590e1a4e..3e4fd113a8a4 100644
--- a/sound/soc/amd/acp/acp70.c
+++ b/sound/soc/amd/acp/acp70.c
@@ -142,9 +142,9 @@ static int acp70_i2s_master_clock_generate(struct acp_dev_data *adata)
struct pci_dev *smn_dev;
u32 device_id;
- if (adata->platform == ACP70)
+ if (adata->acp_rev == ACP70_PCI_ID)
device_id = 0x1507;
- else if (adata->platform == ACP71)
+ else if (adata->acp_rev == ACP71_PCI_ID)
device_id = 0x1122;
else
return -ENODEV;
@@ -175,8 +175,8 @@ static int acp_acp70_audio_probe(struct platform_device *pdev)
}
switch (chip->acp_rev) {
- case ACP70_DEV:
- case ACP71_DEV:
+ case ACP70_PCI_ID:
+ case ACP71_PCI_ID:
break;
default:
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
@@ -209,11 +209,7 @@ static int acp_acp70_audio_probe(struct platform_device *pdev)
adata->num_dai = ARRAY_SIZE(acp70_dai);
adata->rsrc = &rsrc;
adata->machines = snd_soc_acpi_amd_acp70_acp_machines;
- if (chip->acp_rev == ACP70_DEV)
- adata->platform = ACP70;
- else
- adata->platform = ACP71;
-
+ adata->acp_rev = chip->acp_rev;
adata->flag = chip->flag;
acp_machine_select(adata);
diff --git a/sound/soc/amd/acp/acp_common.h b/sound/soc/amd/acp/acp_common.h
new file mode 100644
index 000000000000..f1ae88013f62
--- /dev/null
+++ b/sound/soc/amd/acp/acp_common.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0-only
+ * Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved
+ */
+
+/*
+ * acp_common.h - acp common header file
+ */
+
+#ifndef __ACP_COMMON_H
+#define __ACP_COMMON_H
+
+#define ACP_RN_PCI_ID 0x01
+#define ACP_VANGOGH_PCI_ID 0x50
+#define ACP_RMB_PCI_ID 0x6F
+#define ACP63_PCI_ID 0x63
+#define ACP70_PCI_ID 0x70
+#define ACP71_PCI_ID 0x71
+
+#endif
diff --git a/sound/soc/amd/acp/amd.h b/sound/soc/amd/acp/amd.h
index 854269fea875..ee69dfb10cb8 100644
--- a/sound/soc/amd/acp/amd.h
+++ b/sound/soc/amd/acp/amd.h
@@ -16,14 +16,9 @@
#include <sound/soc-acpi.h>
#include <sound/soc-dai.h>
+#include "acp_common.h"
#include "chip_offset_byte.h"
-#define ACP3X_DEV 3
-#define ACP6X_DEV 6
-#define ACP63_DEV 0x63
-#define ACP70_DEV 0x70
-#define ACP71_DEV 0x71
-
#define DMIC_INSTANCE 0x00
#define I2S_SP_INSTANCE 0x01
#define I2S_BT_INSTANCE 0x02
@@ -182,6 +177,7 @@ struct acp_dev_data {
struct device *dev;
void __iomem *acp_base;
unsigned int i2s_irq;
+ unsigned int acp_rev; /* ACP Revision id */
bool tdm_mode;
bool is_i2s_config;
@@ -205,7 +201,6 @@ struct acp_dev_data {
u32 xfer_tx_resolution[3];
u32 xfer_rx_resolution[3];
unsigned int flag;
- unsigned int platform;
};
enum acp_config {
diff --git a/sound/soc/amd/yc/acp6x-mach.c b/sound/soc/amd/yc/acp6x-mach.c
index 06349bf0b658..ace6328e91e3 100644
--- a/sound/soc/amd/yc/acp6x-mach.c
+++ b/sound/soc/amd/yc/acp6x-mach.c
@@ -448,6 +448,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
.driver_data = &acp6x_card,
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8A7F"),
+ }
+ },
+ {
+ .driver_data = &acp6x_card,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
DMI_MATCH(DMI_BOARD_NAME, "8B27"),
}
},
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index 3763454436c1..89098f41679c 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -821,8 +821,9 @@ static int atmel_ssc_resume(struct snd_soc_component *component)
return 0;
}
+/* S24_LE is not supported if more than 2 channels (of TDM slots) are used. */
#define ATMEL_SSC_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE |\
- SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+ SNDRV_PCM_FMTBIT_S32_LE)
static const struct snd_soc_dai_ops atmel_ssc_dai_ops = {
.startup = atmel_ssc_startup,
@@ -836,6 +837,7 @@ static const struct snd_soc_dai_ops atmel_ssc_dai_ops = {
static struct snd_soc_dai_driver atmel_ssc_dai = {
.playback = {
+ .stream_name = "Playback",
.channels_min = 1,
.channels_max = 2,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
@@ -843,6 +845,7 @@ static struct snd_soc_dai_driver atmel_ssc_dai = {
.rate_max = 384000,
.formats = ATMEL_SSC_FORMATS,},
.capture = {
+ .stream_name = "Capture",
.channels_min = 1,
.channels_max = 2,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
diff --git a/sound/soc/atmel/mchp-pdmc.c b/sound/soc/atmel/mchp-pdmc.c
index 939cd44ebc8a..06dc3c48e7e8 100644
--- a/sound/soc/atmel/mchp-pdmc.c
+++ b/sound/soc/atmel/mchp-pdmc.c
@@ -302,6 +302,9 @@ static int mchp_pdmc_chmap_ctl_put(struct snd_kcontrol *kcontrol,
if (!substream)
return -ENODEV;
+ if (!substream->runtime)
+ return 0; /* just for avoiding error from alsactl restore */
+
map = mchp_pdmc_chmap_get(substream, info);
if (!map)
return -EINVAL;
diff --git a/sound/soc/atmel/mchp-spdifrx.c b/sound/soc/atmel/mchp-spdifrx.c
index b2507a1491b7..fb820609c043 100644
--- a/sound/soc/atmel/mchp-spdifrx.c
+++ b/sound/soc/atmel/mchp-spdifrx.c
@@ -1014,7 +1014,7 @@ static const struct snd_soc_dai_ops mchp_spdifrx_dai_ops = {
static struct snd_soc_dai_driver mchp_spdifrx_dai = {
.name = "mchp-spdifrx",
.capture = {
- .stream_name = "S/PDIF Capture",
+ .stream_name = "Capture",
.channels_min = SPDIFRX_CHANNELS,
.channels_max = SPDIFRX_CHANNELS,
.rates = MCHP_SPDIF_RATES,
diff --git a/sound/soc/atmel/mchp-spdiftx.c b/sound/soc/atmel/mchp-spdiftx.c
index 4c60ea652896..245c0352c141 100644
--- a/sound/soc/atmel/mchp-spdiftx.c
+++ b/sound/soc/atmel/mchp-spdiftx.c
@@ -707,7 +707,7 @@ static const struct snd_soc_dai_ops mchp_spdiftx_dai_ops = {
static struct snd_soc_dai_driver mchp_spdiftx_dai = {
.name = "mchp-spdiftx",
.playback = {
- .stream_name = "S/PDIF Playback",
+ .stream_name = "Playback",
.channels_min = 1,
.channels_max = 2,
.rates = MCHP_SPDIFTX_RATES,
diff --git a/sound/soc/au1x/dbdma2.c b/sound/soc/au1x/dbdma2.c
index ea01d6490cec..3392693faeb9 100644
--- a/sound/soc/au1x/dbdma2.c
+++ b/sound/soc/au1x/dbdma2.c
@@ -311,7 +311,7 @@ static int au1xpsc_pcm_new(struct snd_soc_component *component,
}
/* au1xpsc audio platform */
-static struct snd_soc_component_driver au1xpsc_soc_component = {
+static const struct snd_soc_component_driver au1xpsc_soc_component = {
.name = DRV_NAME,
.open = au1xpsc_pcm_open,
.close = au1xpsc_pcm_close,
diff --git a/sound/soc/au1x/dma.c b/sound/soc/au1x/dma.c
index d2fdebd8881b..c9c2b1e71d55 100644
--- a/sound/soc/au1x/dma.c
+++ b/sound/soc/au1x/dma.c
@@ -289,7 +289,7 @@ static int alchemy_pcm_new(struct snd_soc_component *component,
return 0;
}
-static struct snd_soc_component_driver alchemy_pcm_soc_component = {
+static const struct snd_soc_component_driver alchemy_pcm_soc_component = {
.name = DRV_NAME,
.open = alchemy_pcm_open,
.close = alchemy_pcm_close,
diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c
index 9bda6499e66e..87d2f06c2f53 100644
--- a/sound/soc/bcm/bcm2835-i2s.c
+++ b/sound/soc/bcm/bcm2835-i2s.c
@@ -817,7 +817,7 @@ static const struct regmap_config bcm2835_regmap_config = {
.max_register = BCM2835_I2S_GRAY_REG,
.precious_reg = bcm2835_i2s_precious_reg,
.volatile_reg = bcm2835_i2s_volatile_reg,
- .cache_type = REGCACHE_RBTREE,
+ .cache_type = REGCACHE_MAPLE,
};
static const struct snd_soc_component_driver bcm2835_i2s_component = {
diff --git a/sound/soc/bcm/cygnus-pcm.c b/sound/soc/bcm/cygnus-pcm.c
index 2d1e241d8367..4cb2fe10bcdc 100644
--- a/sound/soc/bcm/cygnus-pcm.c
+++ b/sound/soc/bcm/cygnus-pcm.c
@@ -707,7 +707,7 @@ static int cygnus_dma_new(struct snd_soc_component *component,
return 0;
}
-static struct snd_soc_component_driver cygnus_soc_platform = {
+static const struct snd_soc_component_driver cygnus_soc_platform = {
.open = cygnus_pcm_open,
.close = cygnus_pcm_close,
.prepare = cygnus_pcm_prepare,
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 7092842480ef..c6c4c7481b4c 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -2565,6 +2565,19 @@ config SND_SOC_NAU8825
tristate
depends on I2C
+config SND_SOC_NTPFW
+ tristate
+
+config SND_SOC_NTP8918
+ select SND_SOC_NTPFW
+ tristate "NeoFidelity NTP8918 amplifier"
+ depends on I2C
+
+config SND_SOC_NTP8835
+ select SND_SOC_NTPFW
+ tristate "NeoFidelity NTP8835 and NTP8835C amplifiers"
+ depends on I2C
+
config SND_SOC_TPA6130A2
tristate "Texas Instruments TPA6130A2 headphone amplifier"
depends on I2C
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 54cbc3feae32..850c6249e3df 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -189,6 +189,9 @@ snd-soc-nau8821-y := nau8821.o
snd-soc-nau8822-y := nau8822.o
snd-soc-nau8824-y := nau8824.o
snd-soc-nau8825-y := nau8825.o
+snd-soc-ntp8835-y := ntp8835.o
+snd-soc-ntp8918-y := ntp8918.o
+snd-soc-ntpfw-y := ntpfw.o
snd-soc-hdmi-codec-y := hdmi-codec.o
snd-soc-pcm1681-y := pcm1681.o
snd-soc-pcm1789-codec-y := pcm1789.o
@@ -591,6 +594,9 @@ obj-$(CONFIG_SND_SOC_NAU8821) += snd-soc-nau8821.o
obj-$(CONFIG_SND_SOC_NAU8822) += snd-soc-nau8822.o
obj-$(CONFIG_SND_SOC_NAU8824) += snd-soc-nau8824.o
obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o
+obj-$(CONFIG_SND_SOC_NTP8835) += snd-soc-ntp8835.o
+obj-$(CONFIG_SND_SOC_NTP8918) += snd-soc-ntp8918.o
+obj-$(CONFIG_SND_SOC_NTPFW) += snd-soc-ntpfw.o
obj-$(CONFIG_SND_SOC_HDMI_CODEC) += snd-soc-hdmi-codec.o
obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o
obj-$(CONFIG_SND_SOC_PCM179X) += snd-soc-pcm179x-codec.o
diff --git a/sound/soc/codecs/aw88395/aw88395_device.c b/sound/soc/codecs/aw88395/aw88395_device.c
index fd1f67d5f22f..6b333d1c6e94 100644
--- a/sound/soc/codecs/aw88395/aw88395_device.c
+++ b/sound/soc/codecs/aw88395/aw88395_device.c
@@ -703,7 +703,7 @@ static int aw_dev_set_vcalb(struct aw_device *aw_dev)
AW88395_VSCAL_FACTOR_DAC, icalk, vcalk);
break;
default:
- dev_err(aw_dev->dev, "unsupport vsense status");
+ dev_err(aw_dev->dev, "unsupported vsense status");
return -EINVAL;
}
diff --git a/sound/soc/codecs/aw88395/aw88395_lib.c b/sound/soc/codecs/aw88395/aw88395_lib.c
index 769ca32a5c8e..ceb7fc43d018 100644
--- a/sound/soc/codecs/aw88395/aw88395_lib.c
+++ b/sound/soc/codecs/aw88395/aw88395_lib.c
@@ -688,7 +688,7 @@ static int aw_dev_load_cfg_by_hdr(struct aw_device *aw_dev,
ret = aw_dev_cfg_get_reg_valid_prof(aw_dev, all_prof_info);
break;
default:
- dev_err(aw_dev->dev, "unsupport data type\n");
+ dev_err(aw_dev->dev, "unsupported data type\n");
ret = -EINVAL;
break;
}
diff --git a/sound/soc/codecs/aw88399.c b/sound/soc/codecs/aw88399.c
index 8dc2b8aa6832..f3d4f13e6aed 100644
--- a/sound/soc/codecs/aw88399.c
+++ b/sound/soc/codecs/aw88399.c
@@ -462,7 +462,7 @@ static int aw_dev_set_vcalb(struct aw88399 *aw88399)
vcal_k * aw88399->vcalb_init_val;
break;
default:
- dev_err(aw_dev->dev, "%s: unsupport vsense\n", __func__);
+ dev_err(aw_dev->dev, "%s: unsupported vsense\n", __func__);
ret = -EINVAL;
break;
}
diff --git a/sound/soc/codecs/cpcap.c b/sound/soc/codecs/cpcap.c
index 4f9dabd9d78a..04304a7ad915 100644
--- a/sound/soc/codecs/cpcap.c
+++ b/sound/soc/codecs/cpcap.c
@@ -1649,7 +1649,7 @@ static int cpcap_soc_probe(struct snd_soc_component *component)
return cpcap_audio_reset(component, false);
}
-static struct snd_soc_component_driver soc_codec_dev_cpcap = {
+static const struct snd_soc_component_driver soc_codec_dev_cpcap = {
.probe = cpcap_soc_probe,
.controls = cpcap_snd_controls,
.num_controls = ARRAY_SIZE(cpcap_snd_controls),
diff --git a/sound/soc/codecs/cs35l45-tables.c b/sound/soc/codecs/cs35l45-tables.c
index e1cebb9e4dc6..405dab137b3b 100644
--- a/sound/soc/codecs/cs35l45-tables.c
+++ b/sound/soc/codecs/cs35l45-tables.c
@@ -315,7 +315,7 @@ static const struct {
{ 0x3B, 24576000 },
};
-unsigned int cs35l45_get_clk_freq_id(unsigned int freq)
+int cs35l45_get_clk_freq_id(unsigned int freq)
{
int i;
diff --git a/sound/soc/codecs/cs35l45.h b/sound/soc/codecs/cs35l45.h
index e2ebcf58d7e0..7a790d2acac7 100644
--- a/sound/soc/codecs/cs35l45.h
+++ b/sound/soc/codecs/cs35l45.h
@@ -507,7 +507,7 @@ extern const struct dev_pm_ops cs35l45_pm_ops;
extern const struct regmap_config cs35l45_i2c_regmap;
extern const struct regmap_config cs35l45_spi_regmap;
int cs35l45_apply_patch(struct cs35l45_private *cs35l45);
-unsigned int cs35l45_get_clk_freq_id(unsigned int freq);
+int cs35l45_get_clk_freq_id(unsigned int freq);
int cs35l45_probe(struct cs35l45_private *cs35l45);
void cs35l45_remove(struct cs35l45_private *cs35l45);
diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 71e0d3bffd3f..ef7a70fa6966 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -958,7 +958,7 @@ static const struct reg_default rx_defaults[] = {
{ CDC_RX_BCL_VBAT_PK_EST2, 0x01 },
{ CDC_RX_BCL_VBAT_PK_EST3, 0x40 },
{ CDC_RX_BCL_VBAT_RF_PROC1, 0x2A },
- { CDC_RX_BCL_VBAT_RF_PROC1, 0x00 },
+ { CDC_RX_BCL_VBAT_RF_PROC2, 0x00 },
{ CDC_RX_BCL_VBAT_TAC1, 0x00 },
{ CDC_RX_BCL_VBAT_TAC2, 0x18 },
{ CDC_RX_BCL_VBAT_TAC3, 0x18 },
diff --git a/sound/soc/codecs/ntp8835.c b/sound/soc/codecs/ntp8835.c
new file mode 100644
index 000000000000..97056d8de2bb
--- /dev/null
+++ b/sound/soc/codecs/ntp8835.c
@@ -0,0 +1,480 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Driver for the NTP8835/NTP8835C Audio Amplifiers
+ *
+ * Copyright (c) 2024, SaluteDevices. All Rights Reserved.
+ *
+ * Author: Igor Prusov <ivprusov@salutedevices.com>
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk.h>
+#include <linux/bits.h>
+#include <linux/reset.h>
+#include <linux/init.h>
+#include <linux/i2c.h>
+#include <linux/regmap.h>
+
+#include <sound/initval.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-component.h>
+#include <sound/tlv.h>
+
+#include "ntpfw.h"
+
+#define NTP8835_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
+ SNDRV_PCM_FMTBIT_S20_3LE | \
+ SNDRV_PCM_FMTBIT_S24_LE | \
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+#define NTP8835_INPUT_FMT 0x0
+#define NTP8835_INPUT_FMT_MASTER_MODE BIT(0)
+#define NTP8835_INPUT_FMT_GSA_MODE BIT(1)
+#define NTP8835_GSA_FMT 0x1
+#define NTP8835_GSA_BS_MASK GENMASK(3, 2)
+#define NTP8835_GSA_BS(x) ((x) << 2)
+#define NTP8835_GSA_RIGHT_J BIT(0)
+#define NTP8835_GSA_LSB BIT(1)
+#define NTP8835_MCLK_FREQ_CTRL 0x2
+#define NTP8835_MCLK_FREQ_MCF GENMASK(1, 0)
+#define NTP8835_SOFT_MUTE 0x26
+#define NTP8835_SOFT_MUTE_SM1 BIT(0)
+#define NTP8835_SOFT_MUTE_SM2 BIT(1)
+#define NTP8835_SOFT_MUTE_SM3 BIT(2)
+#define NTP8835_PWM_SWITCH 0x27
+#define NTP8835_PWM_SWITCH_POF1 BIT(0)
+#define NTP8835_PWM_SWITCH_POF2 BIT(1)
+#define NTP8835_PWM_SWITCH_POF3 BIT(2)
+#define NTP8835_PWM_MASK_CTRL0 0x28
+#define NTP8835_PWM_MASK_CTRL0_OUT_LOW BIT(1)
+#define NTP8835_PWM_MASK_CTRL0_FPMLD BIT(2)
+#define NTP8835_MASTER_VOL 0x2e
+#define NTP8835_CHNL_A_VOL 0x2f
+#define NTP8835_CHNL_B_VOL 0x30
+#define NTP8835_CHNL_C_VOL 0x31
+#define REG_MAX NTP8835_CHNL_C_VOL
+
+#define NTP8835_FW_NAME "eq_8835.bin"
+#define NTP8835_FW_MAGIC 0x38383335 /* "8835" */
+
+struct ntp8835_priv {
+ struct i2c_client *i2c;
+ struct reset_control *reset;
+ unsigned int format;
+ struct clk *mclk;
+ unsigned int mclk_rate;
+};
+
+static const DECLARE_TLV_DB_RANGE(ntp8835_vol_scale,
+ 0, 1, TLV_DB_SCALE_ITEM(-15000, 0, 0),
+ 2, 6, TLV_DB_SCALE_ITEM(-15000, 1000, 0),
+ 7, 0xff, TLV_DB_SCALE_ITEM(-10000, 50, 0),
+);
+
+static int ntp8835_mute_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+ uinfo->access =
+ (SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE);
+ uinfo->count = 1;
+
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = 1;
+ uinfo->value.integer.step = 1;
+
+ return 0;
+}
+
+static int ntp8835_mute_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+ unsigned int val;
+
+ val = snd_soc_component_read(component, NTP8835_SOFT_MUTE);
+
+ ucontrol->value.integer.value[0] = val ? 0 : 1;
+ return 0;
+}
+
+static int ntp8835_mute_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+ unsigned int val;
+
+ val = ucontrol->value.integer.value[0] ? 0 : 7;
+
+ snd_soc_component_write(component, NTP8835_SOFT_MUTE, val);
+
+ return 0;
+}
+
+static const struct snd_kcontrol_new ntp8835_vol_control[] = {
+ SOC_SINGLE_TLV("Playback Volume", NTP8835_MASTER_VOL, 0,
+ 0xff, 0, ntp8835_vol_scale),
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .name = "Playback Switch",
+ .info = ntp8835_mute_info,
+ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE,
+ .get = ntp8835_mute_get,
+ .put = ntp8835_mute_put,
+ },
+};
+
+static void ntp8835_reset_gpio(struct ntp8835_priv *ntp8835)
+{
+ /*
+ * Proper initialization sequence for NTP835 amplifier requires driving
+ * /RESET signal low during power up for at least 0.1us. The sequence is,
+ * according to NTP8835 datasheet, 6.2 Timing Sequence (recommended):
+ * Deassert for T2 >= 1ms...
+ */
+ reset_control_deassert(ntp8835->reset);
+ fsleep(1000);
+
+ /* ...Assert for T3 >= 0.1us... */
+ reset_control_assert(ntp8835->reset);
+ fsleep(1);
+
+ /* ...Deassert, and wait for T4 >= 0.5ms before sound on sequence. */
+ reset_control_deassert(ntp8835->reset);
+ fsleep(500);
+}
+
+static const struct reg_sequence ntp8835_sound_on[] = {
+ { NTP8835_PWM_MASK_CTRL0, NTP8835_PWM_MASK_CTRL0_FPMLD },
+ { NTP8835_PWM_SWITCH, 0x00 },
+ { NTP8835_SOFT_MUTE, 0x00 },
+};
+
+static const struct reg_sequence ntp8835_sound_off[] = {
+ { NTP8835_SOFT_MUTE, NTP8835_SOFT_MUTE_SM1 |
+ NTP8835_SOFT_MUTE_SM2 |
+ NTP8835_SOFT_MUTE_SM3 },
+
+ { NTP8835_PWM_SWITCH, NTP8835_PWM_SWITCH_POF1 |
+ NTP8835_PWM_SWITCH_POF2 |
+ NTP8835_PWM_SWITCH_POF3 },
+
+ { NTP8835_PWM_MASK_CTRL0, NTP8835_PWM_MASK_CTRL0_OUT_LOW |
+ NTP8835_PWM_MASK_CTRL0_FPMLD },
+};
+
+static int ntp8835_load_firmware(struct ntp8835_priv *ntp8835)
+{
+ int ret;
+
+ ret = ntpfw_load(ntp8835->i2c, NTP8835_FW_NAME, NTP8835_FW_MAGIC);
+ if (ret == -ENOENT) {
+ dev_warn_once(&ntp8835->i2c->dev,
+ "Could not find firmware %s\n", NTP8835_FW_NAME);
+ return 0;
+ }
+
+ return ret;
+}
+
+static int ntp8835_snd_suspend(struct snd_soc_component *component)
+{
+ struct ntp8835_priv *ntp8835 = snd_soc_component_get_drvdata(component);
+
+ regcache_cache_only(component->regmap, true);
+
+ regmap_multi_reg_write_bypassed(component->regmap,
+ ntp8835_sound_off,
+ ARRAY_SIZE(ntp8835_sound_off));
+
+ /*
+ * According to NTP8835 datasheet, 6.2 Timing Sequence (recommended):
+ * wait after sound off for T6 >= 0.5ms
+ */
+ fsleep(500);
+ reset_control_assert(ntp8835->reset);
+
+ regcache_mark_dirty(component->regmap);
+ clk_disable_unprepare(ntp8835->mclk);
+
+ return 0;
+}
+
+static int ntp8835_snd_resume(struct snd_soc_component *component)
+{
+ struct ntp8835_priv *ntp8835 = snd_soc_component_get_drvdata(component);
+ int ret;
+
+ ntp8835_reset_gpio(ntp8835);
+ ret = clk_prepare_enable(ntp8835->mclk);
+ if (ret)
+ return ret;
+
+ regmap_multi_reg_write_bypassed(component->regmap,
+ ntp8835_sound_on,
+ ARRAY_SIZE(ntp8835_sound_on));
+
+ ret = ntp8835_load_firmware(ntp8835);
+ if (ret) {
+ dev_err(&ntp8835->i2c->dev, "Failed to load firmware\n");
+ return ret;
+ }
+
+ regcache_cache_only(component->regmap, false);
+ snd_soc_component_cache_sync(component);
+
+ return 0;
+}
+
+static int ntp8835_probe(struct snd_soc_component *component)
+{
+ int ret;
+ struct ntp8835_priv *ntp8835 = snd_soc_component_get_drvdata(component);
+ struct device *dev = component->dev;
+
+ ret = snd_soc_add_component_controls(component, ntp8835_vol_control,
+ ARRAY_SIZE(ntp8835_vol_control));
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to add controls\n");
+
+ ret = ntp8835_load_firmware(ntp8835);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to load firmware\n");
+
+ return 0;
+}
+
+static const struct snd_soc_dapm_widget ntp8835_dapm_widgets[] = {
+ SND_SOC_DAPM_DAC("AIFIN", "Playback", SND_SOC_NOPM, 0, 0),
+
+ SND_SOC_DAPM_OUTPUT("OUT1"),
+ SND_SOC_DAPM_OUTPUT("OUT2"),
+ SND_SOC_DAPM_OUTPUT("OUT3"),
+};
+
+static const struct snd_soc_dapm_route ntp8835_dapm_routes[] = {
+ { "OUT1", NULL, "AIFIN" },
+ { "OUT2", NULL, "AIFIN" },
+ { "OUT3", NULL, "AIFIN" },
+};
+
+static int ntp8835_set_component_sysclk(struct snd_soc_component *component,
+ int clk_id, int source,
+ unsigned int freq, int dir)
+{
+ struct ntp8835_priv *ntp8835 = snd_soc_component_get_drvdata(component);
+
+ switch (freq) {
+ case 12288000:
+ case 24576000:
+ case 18432000:
+ ntp8835->mclk_rate = freq;
+ break;
+ default:
+ ntp8835->mclk_rate = 0;
+ dev_err(component->dev, "Unsupported MCLK value: %u", freq);
+ return -EINVAL;
+ };
+
+ return 0;
+}
+
+static const struct snd_soc_component_driver soc_component_ntp8835 = {
+ .probe = ntp8835_probe,
+ .suspend = ntp8835_snd_suspend,
+ .resume = ntp8835_snd_resume,
+ .dapm_widgets = ntp8835_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(ntp8835_dapm_widgets),
+ .dapm_routes = ntp8835_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(ntp8835_dapm_routes),
+ .set_sysclk = ntp8835_set_component_sysclk,
+};
+
+static int ntp8835_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_component *component = dai->component;
+ struct ntp8835_priv *ntp8835 = snd_soc_component_get_drvdata(component);
+ unsigned int input_fmt = 0;
+ unsigned int gsa_fmt = 0;
+ unsigned int gsa_fmt_mask;
+ unsigned int mcf;
+ int ret;
+
+ switch (ntp8835->mclk_rate) {
+ case 12288000:
+ mcf = 0;
+ break;
+ case 24576000:
+ mcf = 1;
+ break;
+ case 18432000:
+ mcf = 2;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ ret = snd_soc_component_update_bits(component, NTP8835_MCLK_FREQ_CTRL,
+ NTP8835_MCLK_FREQ_MCF, mcf);
+ if (ret)
+ return ret;
+
+ switch (ntp8835->format) {
+ case SND_SOC_DAIFMT_I2S:
+ break;
+ case SND_SOC_DAIFMT_RIGHT_J:
+ input_fmt |= NTP8835_INPUT_FMT_GSA_MODE;
+ gsa_fmt |= NTP8835_GSA_RIGHT_J;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ input_fmt |= NTP8835_INPUT_FMT_GSA_MODE;
+ break;
+ }
+
+ ret = snd_soc_component_update_bits(component, NTP8835_INPUT_FMT,
+ NTP8835_INPUT_FMT_MASTER_MODE |
+ NTP8835_INPUT_FMT_GSA_MODE,
+ input_fmt);
+
+ if (!(input_fmt & NTP8835_INPUT_FMT_GSA_MODE) || ret < 0)
+ return ret;
+
+ switch (params_width(params)) {
+ case 24:
+ gsa_fmt |= NTP8835_GSA_BS(0);
+ break;
+ case 20:
+ gsa_fmt |= NTP8835_GSA_BS(1);
+ break;
+ case 18:
+ gsa_fmt |= NTP8835_GSA_BS(2);
+ break;
+ case 16:
+ gsa_fmt |= NTP8835_GSA_BS(3);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ gsa_fmt_mask = NTP8835_GSA_BS_MASK |
+ NTP8835_GSA_RIGHT_J |
+ NTP8835_GSA_LSB;
+ return snd_soc_component_update_bits(component, NTP8835_GSA_FMT,
+ gsa_fmt_mask, gsa_fmt);
+}
+
+static int ntp8835_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+ struct snd_soc_component *component = dai->component;
+ struct ntp8835_priv *ntp8835 = snd_soc_component_get_drvdata(component);
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ case SND_SOC_DAIFMT_RIGHT_J:
+ case SND_SOC_DAIFMT_LEFT_J:
+ ntp8835->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK;
+ break;
+ default:
+ return -EINVAL;
+ }
+ return 0;
+};
+
+static const struct snd_soc_dai_ops ntp8835_dai_ops = {
+ .hw_params = ntp8835_hw_params,
+ .set_fmt = ntp8835_set_fmt,
+};
+
+static struct snd_soc_dai_driver ntp8835_dai = {
+ .name = "ntp8835-amplifier",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 1,
+ .channels_max = 3,
+ .rates = SNDRV_PCM_RATE_8000_192000,
+ .formats = NTP8835_FORMATS,
+ },
+ .ops = &ntp8835_dai_ops,
+};
+
+static const struct regmap_config ntp8835_regmap = {
+ .reg_bits = 8,
+ .val_bits = 8,
+ .max_register = REG_MAX,
+ .cache_type = REGCACHE_MAPLE,
+};
+
+static int ntp8835_i2c_probe(struct i2c_client *i2c)
+{
+ struct ntp8835_priv *ntp8835;
+ struct regmap *regmap;
+ int ret;
+
+ ntp8835 = devm_kzalloc(&i2c->dev, sizeof(*ntp8835), GFP_KERNEL);
+ if (!ntp8835)
+ return -ENOMEM;
+
+ ntp8835->i2c = i2c;
+
+ ntp8835->reset = devm_reset_control_get_shared(&i2c->dev, NULL);
+ if (IS_ERR(ntp8835->reset))
+ return dev_err_probe(&i2c->dev, PTR_ERR(ntp8835->reset),
+ "Failed to get reset\n");
+
+ ret = reset_control_deassert(ntp8835->reset);
+ if (ret)
+ return dev_err_probe(&i2c->dev, PTR_ERR(ntp8835->reset),
+ "Failed to deassert reset\n");
+
+ dev_set_drvdata(&i2c->dev, ntp8835);
+
+ ntp8835_reset_gpio(ntp8835);
+
+ regmap = devm_regmap_init_i2c(i2c, &ntp8835_regmap);
+ if (IS_ERR(regmap))
+ return dev_err_probe(&i2c->dev, PTR_ERR(regmap),
+ "Failed to allocate regmap\n");
+
+ ret = devm_snd_soc_register_component(&i2c->dev, &soc_component_ntp8835,
+ &ntp8835_dai, 1);
+ if (ret)
+ return dev_err_probe(&i2c->dev, ret,
+ "Failed to register component\n");
+
+ ntp8835->mclk = devm_clk_get_enabled(&i2c->dev, "mclk");
+ if (IS_ERR(ntp8835->mclk))
+ return dev_err_probe(&i2c->dev, PTR_ERR(ntp8835->mclk), "failed to get mclk\n");
+
+ return 0;
+}
+
+static const struct i2c_device_id ntp8835_i2c_id[] = {
+ { "ntp8835", 0 },
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, ntp8835_i2c_id);
+
+static const struct of_device_id ntp8835_of_match[] = {
+ {.compatible = "neofidelity,ntp8835",},
+ {}
+};
+MODULE_DEVICE_TABLE(of, ntp8835_of_match);
+
+static struct i2c_driver ntp8835_i2c_driver = {
+ .probe = ntp8835_i2c_probe,
+ .id_table = ntp8835_i2c_id,
+ .driver = {
+ .name = "ntp8835",
+ .of_match_table = ntp8835_of_match,
+ },
+};
+module_i2c_driver(ntp8835_i2c_driver);
+
+MODULE_AUTHOR("Igor Prusov <ivprusov@salutedevices.com>");
+MODULE_DESCRIPTION("NTP8835 Audio Amplifier Driver");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/ntp8918.c b/sound/soc/codecs/ntp8918.c
new file mode 100644
index 000000000000..0493ab6acbe4
--- /dev/null
+++ b/sound/soc/codecs/ntp8918.c
@@ -0,0 +1,397 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Driver for the NTP8918 Audio Amplifier
+ *
+ * Copyright (c) 2024, SaluteDevices. All Rights Reserved.
+ *
+ * Author: Igor Prusov <ivprusov@salutedevices.com>
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk.h>
+#include <linux/reset.h>
+#include <linux/i2c.h>
+#include <linux/regmap.h>
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+
+#include <sound/initval.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-component.h>
+#include <sound/tlv.h>
+
+#include "ntpfw.h"
+
+#define NTP8918_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000)
+
+#define NTP8918_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
+ SNDRV_PCM_FMTBIT_S20_3LE | \
+ SNDRV_PCM_FMTBIT_S24_LE | \
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+#define NTP8918_INPUT_FMT 0x0
+#define NTP8918_INPUT_FMT_MASTER_MODE BIT(0)
+#define NTP8918_INPUT_FMT_GSA_MODE BIT(1)
+#define NTP8918_GSA_FMT 0x1
+#define NTP8918_GSA_BS_MASK GENMASK(3, 2)
+#define NTP8918_GSA_BS(x) ((x) << 2)
+#define NTP8918_GSA_RIGHT_J BIT(0)
+#define NTP8918_GSA_LSB BIT(1)
+#define NTP8918_MCLK_FREQ_CTRL 0x2
+#define NTP8918_MCLK_FREQ_MCF GENMASK(1, 0)
+#define NTP8918_MASTER_VOL 0x0C
+#define NTP8918_CHNL_A_VOL 0x17
+#define NTP8918_CHNL_B_VOL 0x18
+#define NTP8918_SOFT_MUTE 0x33
+#define NTP8918_SOFT_MUTE_SM1 BIT(0)
+#define NTP8918_SOFT_MUTE_SM2 BIT(1)
+#define NTP8918_PWM_SWITCH 0x34
+#define NTP8918_PWM_MASK_CTRL0 0x35
+#define REG_MAX NTP8918_PWM_MASK_CTRL0
+
+#define NTP8918_FW_NAME "eq_8918.bin"
+#define NTP8918_FW_MAGIC 0x38393138 /* "8918" */
+
+struct ntp8918_priv {
+ struct i2c_client *i2c;
+ struct clk *bck;
+ struct reset_control *reset;
+ unsigned int format;
+};
+
+static const DECLARE_TLV_DB_SCALE(ntp8918_master_vol_scale, -12550, 50, 0);
+
+static const struct snd_kcontrol_new ntp8918_vol_control[] = {
+ SOC_SINGLE_RANGE_TLV("Playback Volume", NTP8918_MASTER_VOL, 0,
+ 0x04, 0xff, 0, ntp8918_master_vol_scale),
+ SOC_SINGLE("Playback Switch", NTP8918_PWM_MASK_CTRL0, 1, 1, 1),
+};
+
+static void ntp8918_reset_gpio(struct ntp8918_priv *ntp8918)
+{
+ /*
+ * Proper initialization sequence for NTP8918 amplifier requires driving
+ * /RESET signal low during power up for at least 0.1us. The sequence is,
+ * according to NTP8918 datasheet, 6.2 Timing Sequence 1:
+ * Deassert for T2 >= 1ms...
+ */
+ reset_control_deassert(ntp8918->reset);
+ fsleep(1000);
+
+ /* ...Assert for T3 >= 0.1us... */
+ reset_control_assert(ntp8918->reset);
+ fsleep(1);
+
+ /* ...Deassert, and wait for T4 >= 0.5ms before sound on sequence. */
+ reset_control_deassert(ntp8918->reset);
+ fsleep(500);
+}
+
+static const struct reg_sequence ntp8918_sound_off[] = {
+ { NTP8918_MASTER_VOL, 0 },
+};
+
+static const struct reg_sequence ntp8918_sound_on[] = {
+ { NTP8918_MASTER_VOL, 0b11 },
+};
+
+static int ntp8918_load_firmware(struct ntp8918_priv *ntp8918)
+{
+ int ret;
+
+ ret = ntpfw_load(ntp8918->i2c, NTP8918_FW_NAME, NTP8918_FW_MAGIC);
+ if (ret == -ENOENT) {
+ dev_warn_once(&ntp8918->i2c->dev, "Could not find firmware %s\n",
+ NTP8918_FW_NAME);
+ return 0;
+ }
+
+ return ret;
+}
+
+static int ntp8918_snd_suspend(struct snd_soc_component *component)
+{
+ struct ntp8918_priv *ntp8918 = snd_soc_component_get_drvdata(component);
+
+ regcache_cache_only(component->regmap, true);
+
+ regmap_multi_reg_write_bypassed(component->regmap,
+ ntp8918_sound_off,
+ ARRAY_SIZE(ntp8918_sound_off));
+
+ /*
+ * According to NTP8918 datasheet, 6.2 Timing Sequence 1:
+ * wait after sound off for T6 >= 0.5ms
+ */
+ fsleep(500);
+ reset_control_assert(ntp8918->reset);
+
+ regcache_mark_dirty(component->regmap);
+ clk_disable_unprepare(ntp8918->bck);
+
+ return 0;
+}
+
+static int ntp8918_snd_resume(struct snd_soc_component *component)
+{
+ struct ntp8918_priv *ntp8918 = snd_soc_component_get_drvdata(component);
+ int ret;
+
+ ret = clk_prepare_enable(ntp8918->bck);
+ if (ret)
+ return ret;
+
+ ntp8918_reset_gpio(ntp8918);
+
+ regmap_multi_reg_write_bypassed(component->regmap,
+ ntp8918_sound_on,
+ ARRAY_SIZE(ntp8918_sound_on));
+
+ ret = ntp8918_load_firmware(ntp8918);
+ if (ret) {
+ dev_err(&ntp8918->i2c->dev, "Failed to load firmware\n");
+ return ret;
+ }
+
+ regcache_cache_only(component->regmap, false);
+ snd_soc_component_cache_sync(component);
+
+ return 0;
+}
+
+static int ntp8918_probe(struct snd_soc_component *component)
+{
+ int ret;
+ struct ntp8918_priv *ntp8918 = snd_soc_component_get_drvdata(component);
+ struct device *dev = component->dev;
+
+ ret = snd_soc_add_component_controls(component, ntp8918_vol_control,
+ ARRAY_SIZE(ntp8918_vol_control));
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to add controls\n");
+
+ ret = ntp8918_load_firmware(ntp8918);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to load firmware\n");
+
+ return 0;
+}
+
+static const struct snd_soc_dapm_widget ntp8918_dapm_widgets[] = {
+ SND_SOC_DAPM_DAC("AIFIN", "Playback", SND_SOC_NOPM, 0, 0),
+
+ SND_SOC_DAPM_OUTPUT("OUT1"),
+ SND_SOC_DAPM_OUTPUT("OUT2"),
+};
+
+static const struct snd_soc_dapm_route ntp8918_dapm_routes[] = {
+ { "OUT1", NULL, "AIFIN" },
+ { "OUT2", NULL, "AIFIN" },
+};
+
+static const struct snd_soc_component_driver soc_component_ntp8918 = {
+ .probe = ntp8918_probe,
+ .suspend = ntp8918_snd_suspend,
+ .resume = ntp8918_snd_resume,
+ .dapm_widgets = ntp8918_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(ntp8918_dapm_widgets),
+ .dapm_routes = ntp8918_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(ntp8918_dapm_routes),
+};
+
+static int ntp8918_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_component *component = dai->component;
+ struct ntp8918_priv *ntp8918 = snd_soc_component_get_drvdata(component);
+ unsigned int input_fmt = 0;
+ unsigned int gsa_fmt = 0;
+ unsigned int gsa_fmt_mask;
+ unsigned int mcf;
+ int bclk;
+ int ret;
+
+ bclk = snd_soc_params_to_bclk(params);
+ switch (bclk) {
+ case 3072000:
+ case 2822400:
+ mcf = 0;
+ break;
+ case 6144000:
+ mcf = 1;
+ break;
+ case 2048000:
+ mcf = 2;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ ret = snd_soc_component_update_bits(component, NTP8918_MCLK_FREQ_CTRL,
+ NTP8918_MCLK_FREQ_MCF, mcf);
+ if (ret)
+ return ret;
+
+ switch (ntp8918->format) {
+ case SND_SOC_DAIFMT_I2S:
+ break;
+ case SND_SOC_DAIFMT_RIGHT_J:
+ input_fmt |= NTP8918_INPUT_FMT_GSA_MODE;
+ gsa_fmt |= NTP8918_GSA_RIGHT_J;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ input_fmt |= NTP8918_INPUT_FMT_GSA_MODE;
+ break;
+ }
+
+ ret = snd_soc_component_update_bits(component, NTP8918_INPUT_FMT,
+ NTP8918_INPUT_FMT_MASTER_MODE |
+ NTP8918_INPUT_FMT_GSA_MODE,
+ input_fmt);
+
+ if (!(input_fmt & NTP8918_INPUT_FMT_GSA_MODE) || ret < 0)
+ return ret;
+
+ switch (params_width(params)) {
+ case 24:
+ gsa_fmt |= NTP8918_GSA_BS(0);
+ break;
+ case 20:
+ gsa_fmt |= NTP8918_GSA_BS(1);
+ break;
+ case 18:
+ gsa_fmt |= NTP8918_GSA_BS(2);
+ break;
+ case 16:
+ gsa_fmt |= NTP8918_GSA_BS(3);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ gsa_fmt_mask = NTP8918_GSA_BS_MASK |
+ NTP8918_GSA_RIGHT_J |
+ NTP8918_GSA_LSB;
+ return snd_soc_component_update_bits(component, NTP8918_GSA_FMT,
+ gsa_fmt_mask, gsa_fmt);
+}
+
+static int ntp8918_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+ struct snd_soc_component *component = dai->component;
+ struct ntp8918_priv *ntp8918 = snd_soc_component_get_drvdata(component);
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ case SND_SOC_DAIFMT_RIGHT_J:
+ case SND_SOC_DAIFMT_LEFT_J:
+ ntp8918->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK;
+ break;
+ default:
+ return -EINVAL;
+ }
+ return 0;
+}
+
+static int ntp8918_digital_mute(struct snd_soc_dai *dai, int mute, int stream)
+{
+ unsigned int mute_mask = NTP8918_SOFT_MUTE_SM1 |
+ NTP8918_SOFT_MUTE_SM2;
+
+ return snd_soc_component_update_bits(dai->component, NTP8918_SOFT_MUTE,
+ mute_mask, mute ? mute_mask : 0);
+}
+
+static const struct snd_soc_dai_ops ntp8918_dai_ops = {
+ .hw_params = ntp8918_hw_params,
+ .set_fmt = ntp8918_set_fmt,
+ .mute_stream = ntp8918_digital_mute,
+};
+
+static struct snd_soc_dai_driver ntp8918_dai = {
+ .name = "ntp8918-amplifier",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = NTP8918_RATES,
+ .formats = NTP8918_FORMATS,
+ },
+ .ops = &ntp8918_dai_ops,
+};
+
+static const struct regmap_config ntp8918_regmap = {
+ .reg_bits = 8,
+ .val_bits = 8,
+ .max_register = REG_MAX,
+ .cache_type = REGCACHE_MAPLE,
+};
+
+static int ntp8918_i2c_probe(struct i2c_client *i2c)
+{
+ struct ntp8918_priv *ntp8918;
+ int ret;
+ struct regmap *regmap;
+
+ ntp8918 = devm_kzalloc(&i2c->dev, sizeof(*ntp8918), GFP_KERNEL);
+ if (!ntp8918)
+ return -ENOMEM;
+
+ ntp8918->i2c = i2c;
+
+ ntp8918->reset = devm_reset_control_get_shared(&i2c->dev, NULL);
+ if (IS_ERR(ntp8918->reset))
+ return dev_err_probe(&i2c->dev, PTR_ERR(ntp8918->reset), "Failed to get reset\n");
+
+ dev_set_drvdata(&i2c->dev, ntp8918);
+
+ ntp8918_reset_gpio(ntp8918);
+
+ regmap = devm_regmap_init_i2c(i2c, &ntp8918_regmap);
+ if (IS_ERR(regmap))
+ return dev_err_probe(&i2c->dev, PTR_ERR(regmap),
+ "Failed to allocate regmap\n");
+
+ ret = devm_snd_soc_register_component(&i2c->dev, &soc_component_ntp8918,
+ &ntp8918_dai, 1);
+ if (ret)
+ return dev_err_probe(&i2c->dev, ret,
+ "Failed to register component\n");
+
+ ntp8918->bck = devm_clk_get_enabled(&i2c->dev, "bck");
+ if (IS_ERR(ntp8918->bck))
+ return dev_err_probe(&i2c->dev, PTR_ERR(ntp8918->bck), "failed to get bck clock\n");
+
+ return 0;
+}
+
+static const struct i2c_device_id ntp8918_i2c_id[] = {
+ { "ntp8918", 0 },
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, ntp8918_i2c_id);
+
+static const struct of_device_id ntp8918_of_match[] = {
+ {.compatible = "neofidelity,ntp8918"},
+ {}
+};
+MODULE_DEVICE_TABLE(of, ntp8918_of_match);
+
+static struct i2c_driver ntp8918_i2c_driver = {
+ .probe = ntp8918_i2c_probe,
+ .id_table = ntp8918_i2c_id,
+ .driver = {
+ .name = "ntp8918",
+ .of_match_table = ntp8918_of_match,
+ },
+};
+module_i2c_driver(ntp8918_i2c_driver);
+
+MODULE_AUTHOR("Igor Prusov <ivprusov@salutedevices.com>");
+MODULE_DESCRIPTION("NTP8918 Audio Amplifier Driver");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/ntpfw.c b/sound/soc/codecs/ntpfw.c
new file mode 100644
index 000000000000..5ced2e966ab7
--- /dev/null
+++ b/sound/soc/codecs/ntpfw.c
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * ntpfw.c - Firmware helper functions for Neofidelity codecs
+ *
+ * Copyright (c) 2024, SaluteDevices. All Rights Reserved.
+ */
+
+#include <linux/i2c.h>
+#include <linux/firmware.h>
+#include <linux/module.h>
+
+#include "ntpfw.h"
+
+struct ntpfw_chunk {
+ __be16 length;
+ u8 step;
+ u8 data[];
+} __packed;
+
+struct ntpfw_header {
+ __be32 magic;
+} __packed;
+
+static bool ntpfw_verify(struct device *dev, const u8 *buf, size_t buf_size, u32 magic)
+{
+ const struct ntpfw_header *header = (struct ntpfw_header *)buf;
+ u32 buf_magic;
+
+ if (buf_size <= sizeof(*header)) {
+ dev_err(dev, "Failed to load firmware: image too small\n");
+ return false;
+ }
+
+ buf_magic = be32_to_cpu(header->magic);
+ if (buf_magic != magic) {
+ dev_err(dev, "Failed to load firmware: invalid magic 0x%x:\n", buf_magic);
+ return false;
+ }
+
+ return true;
+}
+
+static bool ntpfw_verify_chunk(struct device *dev, const struct ntpfw_chunk *chunk, size_t buf_size)
+{
+ size_t chunk_size;
+
+ if (buf_size <= sizeof(*chunk)) {
+ dev_err(dev, "Failed to load firmware: chunk size too big\n");
+ return false;
+ }
+
+ if (chunk->step != 2 && chunk->step != 5) {
+ dev_err(dev, "Failed to load firmware: invalid chunk step: %d\n", chunk->step);
+ return false;
+ }
+
+ chunk_size = be16_to_cpu(chunk->length);
+ if (chunk_size > buf_size) {
+ dev_err(dev, "Failed to load firmware: invalid chunk length\n");
+ return false;
+ }
+
+ if (chunk_size % chunk->step) {
+ dev_err(dev, "Failed to load firmware: chunk length and step mismatch\n");
+ return false;
+ }
+
+ return true;
+}
+
+static int ntpfw_send_chunk(struct i2c_client *i2c, const struct ntpfw_chunk *chunk)
+{
+ int ret;
+ size_t i;
+ size_t length = be16_to_cpu(chunk->length);
+
+ for (i = 0; i < length; i += chunk->step) {
+ ret = i2c_master_send(i2c, &chunk->data[i], chunk->step);
+ if (ret != chunk->step) {
+ dev_err(&i2c->dev, "I2C send failed: %d\n", ret);
+ return ret < 0 ? ret : -EIO;
+ }
+ }
+
+ return 0;
+}
+
+int ntpfw_load(struct i2c_client *i2c, const char *name, u32 magic)
+{
+ struct device *dev = &i2c->dev;
+ const struct ntpfw_chunk *chunk;
+ const struct firmware *fw;
+ const u8 *data;
+ size_t leftover;
+ int ret;
+
+ ret = request_firmware(&fw, name, dev);
+ if (ret) {
+ dev_warn(dev, "request_firmware '%s' failed with %d\n",
+ name, ret);
+ return ret;
+ }
+
+ if (!ntpfw_verify(dev, fw->data, fw->size, magic)) {
+ ret = -EINVAL;
+ goto done;
+ }
+
+ data = fw->data + sizeof(struct ntpfw_header);
+ leftover = fw->size - sizeof(struct ntpfw_header);
+
+ while (leftover) {
+ chunk = (struct ntpfw_chunk *)data;
+
+ if (!ntpfw_verify_chunk(dev, chunk, leftover)) {
+ ret = -EINVAL;
+ goto done;
+ }
+
+ ret = ntpfw_send_chunk(i2c, chunk);
+ if (ret)
+ goto done;
+
+ data += be16_to_cpu(chunk->length) + sizeof(*chunk);
+ leftover -= be16_to_cpu(chunk->length) + sizeof(*chunk);
+ }
+
+done:
+ release_firmware(fw);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(ntpfw_load);
+
+MODULE_AUTHOR("Igor Prusov <ivprusov@salutedevices.com>");
+MODULE_DESCRIPTION("Helper for loading Neofidelity amplifiers firmware");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/ntpfw.h b/sound/soc/codecs/ntpfw.h
new file mode 100644
index 000000000000..1cf10d5480ee
--- /dev/null
+++ b/sound/soc/codecs/ntpfw.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/**
+ * ntpfw.h - Firmware helper functions for Neofidelity codecs
+ *
+ * Copyright (c) 2024, SaluteDevices. All Rights Reserved.
+ */
+
+#ifndef __NTPFW_H__
+#define __NTPFW_H__
+#include <linux/i2c.h>
+#include <linux/firmware.h>
+
+/**
+ * ntpfw_load - load firmware to amplifier over i2c interface.
+ *
+ * @i2c Pointer to amplifier's I2C client.
+ * @name Firmware file name.
+ * @magic Magic number to validate firmware.
+ * @return 0 or error code upon error.
+ */
+int ntpfw_load(struct i2c_client *i2c, const char *name, const u32 magic);
+
+#endif /* __NTPFW_H__ */
diff --git a/sound/soc/codecs/pcm186x.c b/sound/soc/codecs/pcm186x.c
index 451a8fd8fac5..13443f569ddb 100644
--- a/sound/soc/codecs/pcm186x.c
+++ b/sound/soc/codecs/pcm186x.c
@@ -566,7 +566,7 @@ static int pcm186x_set_bias_level(struct snd_soc_component *component,
return 0;
}
-static struct snd_soc_component_driver soc_codec_dev_pcm1863 = {
+static const struct snd_soc_component_driver soc_codec_dev_pcm1863 = {
.set_bias_level = pcm186x_set_bias_level,
.controls = pcm1863_snd_controls,
.num_controls = ARRAY_SIZE(pcm1863_snd_controls),
@@ -579,7 +579,7 @@ static struct snd_soc_component_driver soc_codec_dev_pcm1863 = {
.endianness = 1,
};
-static struct snd_soc_component_driver soc_codec_dev_pcm1865 = {
+static const struct snd_soc_component_driver soc_codec_dev_pcm1865 = {
.set_bias_level = pcm186x_set_bias_level,
.controls = pcm1865_snd_controls,
.num_controls = ARRAY_SIZE(pcm1865_snd_controls),
diff --git a/sound/soc/codecs/pcm5102a.c b/sound/soc/codecs/pcm5102a.c
index 3401a25341e6..9bca53de2475 100644
--- a/sound/soc/codecs/pcm5102a.c
+++ b/sound/soc/codecs/pcm5102a.c
@@ -24,7 +24,7 @@ static struct snd_soc_dai_driver pcm5102a_dai = {
},
};
-static struct snd_soc_component_driver soc_component_dev_pcm5102a = {
+static const struct snd_soc_component_driver soc_component_dev_pcm5102a = {
.idle_bias_on = 1,
.use_pmdown_time = 1,
.endianness = 1,
diff --git a/sound/soc/codecs/rt1320-sdw.c b/sound/soc/codecs/rt1320-sdw.c
index f4e1ea29c265..ebd6f09bd990 100644
--- a/sound/soc/codecs/rt1320-sdw.c
+++ b/sound/soc/codecs/rt1320-sdw.c
@@ -89,6 +89,23 @@ static const struct reg_sequence rt1320_blind_write[] = {
{ 0xc019, 0x10 },
{ 0xd487, 0x3f },
{ 0xd486, 0xc3 },
+ { 0x3fc2bfc7, 0x00 },
+ { 0x3fc2bfc6, 0x00 },
+ { 0x3fc2bfc5, 0x00 },
+ { 0x3fc2bfc4, 0x01 },
+ { 0x0000d486, 0x43 },
+ { 0x1000db00, 0x02 },
+ { 0x1000db01, 0x00 },
+ { 0x1000db02, 0x11 },
+ { 0x1000db03, 0x00 },
+ { 0x1000db04, 0x00 },
+ { 0x1000db05, 0x82 },
+ { 0x1000db06, 0x04 },
+ { 0x1000db07, 0xf1 },
+ { 0x1000db08, 0x00 },
+ { 0x1000db09, 0x00 },
+ { 0x1000db0a, 0x40 },
+ { 0x0000d540, 0x01 },
};
static const struct reg_sequence rt1320_vc_blind_write[] = {
@@ -148,6 +165,12 @@ static const struct reg_sequence rt1320_vc_blind_write[] = {
{ 0xd487, 0x3b },
{ 0xd486, 0xc3 },
{ 0xc598, 0x04 },
+ { 0xdb03, 0xf0 },
+ { 0xdb09, 0x00 },
+ { 0xdb08, 0x7a },
+ { 0xdb19, 0x02 },
+ { 0xdb07, 0x5a },
+ { 0xdb05, 0x45 },
{ 0xd500, 0x00 },
{ 0xd500, 0x17 },
{ 0xd600, 0x01 },
@@ -164,1913 +187,6 @@ static const struct reg_sequence rt1320_vc_blind_write[] = {
{ 0xd610, 0x01 },
{ 0xd608, 0x03 },
{ 0xd609, 0x00 },
-};
-
-static const struct reg_sequence rt1320_vc_patch_code_write[] = {
- { 0x10007000, 0x37 },
- { 0x10007001, 0x77 },
- { 0x10007002, 0x00 },
- { 0x10007003, 0x10 },
- { 0x10007004, 0xb7 },
- { 0x10007005, 0xe7 },
- { 0x10007006, 0x00 },
- { 0x10007007, 0x10 },
- { 0x10007008, 0x13 },
- { 0x10007009, 0x07 },
- { 0x1000700a, 0x87 },
- { 0x1000700b, 0x48 },
- { 0x1000700c, 0x23 },
- { 0x1000700d, 0xa6 },
- { 0x1000700e, 0xe7 },
- { 0x1000700f, 0xee },
- { 0x10007010, 0x37 },
- { 0x10007011, 0x77 },
- { 0x10007012, 0x00 },
- { 0x10007013, 0x10 },
- { 0x10007014, 0x13 },
- { 0x10007015, 0x07 },
- { 0x10007016, 0x87 },
- { 0x10007017, 0x56 },
- { 0x10007018, 0x23 },
- { 0x10007019, 0xac },
- { 0x1000701a, 0xe7 },
- { 0x1000701b, 0xde },
- { 0x1000701c, 0x37 },
- { 0x1000701d, 0x77 },
- { 0x1000701e, 0x00 },
- { 0x1000701f, 0x10 },
- { 0x10007020, 0x13 },
- { 0x10007021, 0x07 },
- { 0x10007022, 0xc7 },
- { 0x10007023, 0x5f },
- { 0x10007024, 0x23 },
- { 0x10007025, 0xae },
- { 0x10007026, 0xe7 },
- { 0x10007027, 0xdc },
- { 0x10007028, 0x37 },
- { 0x10007029, 0x87 },
- { 0x1000702a, 0x00 },
- { 0x1000702b, 0x10 },
- { 0x1000702c, 0x13 },
- { 0x1000702d, 0x07 },
- { 0x1000702e, 0xc7 },
- { 0x1000702f, 0x86 },
- { 0x10007030, 0x23 },
- { 0x10007031, 0xae },
- { 0x10007032, 0xe7 },
- { 0x10007033, 0xe6 },
- { 0x10007034, 0x37 },
- { 0x10007035, 0x77 },
- { 0x10007036, 0x00 },
- { 0x10007037, 0x10 },
- { 0x10007038, 0x13 },
- { 0x10007039, 0x07 },
- { 0x1000703a, 0x07 },
- { 0x1000703b, 0x40 },
- { 0x1000703c, 0x23 },
- { 0x1000703d, 0xa6 },
- { 0x1000703e, 0xe7 },
- { 0x1000703f, 0xe8 },
- { 0x10007040, 0x37 },
- { 0x10007041, 0x77 },
- { 0x10007042, 0x00 },
- { 0x10007043, 0x10 },
- { 0x10007044, 0x13 },
- { 0x10007045, 0x07 },
- { 0x10007046, 0xc7 },
- { 0x10007047, 0x63 },
- { 0x10007048, 0x23 },
- { 0x10007049, 0xa2 },
- { 0x1000704a, 0xe7 },
- { 0x1000704b, 0xec },
- { 0x1000704c, 0x37 },
- { 0x1000704d, 0x77 },
- { 0x1000704e, 0x00 },
- { 0x1000704f, 0x10 },
- { 0x10007050, 0x13 },
- { 0x10007051, 0x07 },
- { 0x10007052, 0x47 },
- { 0x10007053, 0x6f },
- { 0x10007054, 0x23 },
- { 0x10007055, 0xa6 },
- { 0x10007056, 0xe7 },
- { 0x10007057, 0xec },
- { 0x10007058, 0x37 },
- { 0x10007059, 0x77 },
- { 0x1000705a, 0x00 },
- { 0x1000705b, 0x10 },
- { 0x1000705c, 0x13 },
- { 0x1000705d, 0x07 },
- { 0x1000705e, 0x07 },
- { 0x1000705f, 0x44 },
- { 0x10007060, 0x23 },
- { 0x10007061, 0xa8 },
- { 0x10007062, 0xe7 },
- { 0x10007063, 0xec },
- { 0x10007064, 0x37 },
- { 0x10007065, 0x87 },
- { 0x10007066, 0x00 },
- { 0x10007067, 0x10 },
- { 0x10007068, 0x13 },
- { 0x10007069, 0x07 },
- { 0x1000706a, 0x87 },
- { 0x1000706b, 0x84 },
- { 0x1000706c, 0x23 },
- { 0x1000706d, 0xa8 },
- { 0x1000706e, 0xe7 },
- { 0x1000706f, 0xee },
- { 0x10007070, 0x37 },
- { 0x10007071, 0x87 },
- { 0x10007072, 0x00 },
- { 0x10007073, 0x10 },
- { 0x10007074, 0x13 },
- { 0x10007075, 0x07 },
- { 0x10007076, 0x47 },
- { 0x10007077, 0x97 },
- { 0x10007078, 0x23 },
- { 0x10007079, 0xaa },
- { 0x1000707a, 0xe7 },
- { 0x1000707b, 0xee },
- { 0x1000707c, 0x67 },
- { 0x1000707d, 0x80 },
- { 0x1000707e, 0x00 },
- { 0x1000707f, 0x00 },
- { 0x10007400, 0xb7 },
- { 0x10007401, 0xd6 },
- { 0x10007402, 0x00 },
- { 0x10007403, 0x00 },
- { 0x10007404, 0x83 },
- { 0x10007405, 0xc7 },
- { 0x10007406, 0x06 },
- { 0x10007407, 0x47 },
- { 0x10007408, 0x93 },
- { 0x10007409, 0xf7 },
- { 0x1000740a, 0x87 },
- { 0x1000740b, 0x00 },
- { 0x1000740c, 0x63 },
- { 0x1000740d, 0x88 },
- { 0x1000740e, 0x07 },
- { 0x1000740f, 0x02 },
- { 0x10007410, 0x03 },
- { 0x10007411, 0xc7 },
- { 0x10007412, 0x31 },
- { 0x10007413, 0x43 },
- { 0x10007414, 0x63 },
- { 0x10007415, 0x14 },
- { 0x10007416, 0x07 },
- { 0x10007417, 0x02 },
- { 0x10007418, 0x13 },
- { 0x10007419, 0x07 },
- { 0x1000741a, 0x10 },
- { 0x1000741b, 0x00 },
- { 0x1000741c, 0xa3 },
- { 0x1000741d, 0x89 },
- { 0x1000741e, 0xe1 },
- { 0x1000741f, 0x42 },
- { 0x10007420, 0x37 },
- { 0x10007421, 0xc7 },
- { 0x10007422, 0x00 },
- { 0x10007423, 0x00 },
- { 0x10007424, 0x03 },
- { 0x10007425, 0x46 },
- { 0x10007426, 0x07 },
- { 0x10007427, 0x06 },
- { 0x10007428, 0x23 },
- { 0x10007429, 0x8a },
- { 0x1000742a, 0xc1 },
- { 0x1000742b, 0x42 },
- { 0x1000742c, 0x83 },
- { 0x1000742d, 0xc7 },
- { 0x1000742e, 0x46 },
- { 0x1000742f, 0x47 },
- { 0x10007430, 0x93 },
- { 0x10007431, 0xf7 },
- { 0x10007432, 0xf7 },
- { 0x10007433, 0x0f },
- { 0x10007434, 0x23 },
- { 0x10007435, 0x00 },
- { 0x10007436, 0xf7 },
- { 0x10007437, 0x06 },
- { 0x10007438, 0x23 },
- { 0x10007439, 0x89 },
- { 0x1000743a, 0x01 },
- { 0x1000743b, 0x42 },
- { 0x1000743c, 0x67 },
- { 0x1000743d, 0x80 },
- { 0x1000743e, 0x00 },
- { 0x1000743f, 0x00 },
- { 0x10007440, 0x37 },
- { 0x10007441, 0xc7 },
- { 0x10007442, 0x00 },
- { 0x10007443, 0x00 },
- { 0x10007444, 0x83 },
- { 0x10007445, 0x27 },
- { 0x10007446, 0xc7 },
- { 0x10007447, 0x5f },
- { 0x10007448, 0x13 },
- { 0x10007449, 0x05 },
- { 0x1000744a, 0x00 },
- { 0x1000744b, 0x00 },
- { 0x1000744c, 0x23 },
- { 0x1000744d, 0xa2 },
- { 0x1000744e, 0xf1 },
- { 0x1000744f, 0x42 },
- { 0x10007450, 0xb7 },
- { 0x10007451, 0x06 },
- { 0x10007452, 0x00 },
- { 0x10007453, 0x10 },
- { 0x10007454, 0xb3 },
- { 0x10007455, 0xf7 },
- { 0x10007456, 0xd7 },
- { 0x10007457, 0x00 },
- { 0x10007458, 0x63 },
- { 0x10007459, 0x86 },
- { 0x1000745a, 0x07 },
- { 0x1000745b, 0x02 },
- { 0x1000745c, 0x83 },
- { 0x1000745d, 0x47 },
- { 0x1000745e, 0x07 },
- { 0x1000745f, 0x56 },
- { 0x10007460, 0x93 },
- { 0x10007461, 0xf7 },
- { 0x10007462, 0x87 },
- { 0x10007463, 0x01 },
- { 0x10007464, 0x63 },
- { 0x10007465, 0x80 },
- { 0x10007466, 0x07 },
- { 0x10007467, 0x02 },
- { 0x10007468, 0x83 },
- { 0x10007469, 0x47 },
- { 0x1000746a, 0x17 },
- { 0x1000746b, 0x08 },
- { 0x1000746c, 0x93 },
- { 0x1000746d, 0xf7 },
- { 0x1000746e, 0x47 },
- { 0x1000746f, 0x00 },
- { 0x10007470, 0x63 },
- { 0x10007471, 0x8a },
- { 0x10007472, 0x07 },
- { 0x10007473, 0x00 },
- { 0x10007474, 0xb7 },
- { 0x10007475, 0xc7 },
- { 0x10007476, 0xc2 },
- { 0x10007477, 0x3f },
- { 0x10007478, 0x03 },
- { 0x10007479, 0xa5 },
- { 0x1000747a, 0x47 },
- { 0x1000747b, 0xfc },
- { 0x1000747c, 0x13 },
- { 0x1000747d, 0x55 },
- { 0x1000747e, 0x25 },
- { 0x1000747f, 0x00 },
- { 0x10007480, 0x13 },
- { 0x10007481, 0x75 },
- { 0x10007482, 0x15 },
- { 0x10007483, 0x00 },
- { 0x10007484, 0x67 },
- { 0x10007485, 0x80 },
- { 0x10007486, 0x00 },
- { 0x10007487, 0x00 },
- { 0x10007488, 0x03 },
- { 0x10007489, 0xa7 },
- { 0x1000748a, 0x81 },
- { 0x1000748b, 0x57 },
- { 0x1000748c, 0x13 },
- { 0x1000748d, 0x01 },
- { 0x1000748e, 0x01 },
- { 0x1000748f, 0xff },
- { 0x10007490, 0x23 },
- { 0x10007491, 0x26 },
- { 0x10007492, 0x11 },
- { 0x10007493, 0x00 },
- { 0x10007494, 0x23 },
- { 0x10007495, 0x24 },
- { 0x10007496, 0x81 },
- { 0x10007497, 0x00 },
- { 0x10007498, 0x23 },
- { 0x10007499, 0x22 },
- { 0x1000749a, 0x91 },
- { 0x1000749b, 0x00 },
- { 0x1000749c, 0x93 },
- { 0x1000749d, 0x07 },
- { 0x1000749e, 0xa0 },
- { 0x1000749f, 0x05 },
- { 0x100074a0, 0x63 },
- { 0x100074a1, 0x14 },
- { 0x100074a2, 0xf7 },
- { 0x100074a3, 0x04 },
- { 0x100074a4, 0x37 },
- { 0x100074a5, 0x07 },
- { 0x100074a6, 0x00 },
- { 0x100074a7, 0x11 },
- { 0x100074a8, 0x83 },
- { 0x100074a9, 0x47 },
- { 0x100074aa, 0x07 },
- { 0x100074ab, 0x01 },
- { 0x100074ac, 0x13 },
- { 0x100074ad, 0x06 },
- { 0x100074ae, 0x30 },
- { 0x100074af, 0x00 },
- { 0x100074b0, 0x93 },
- { 0x100074b1, 0xf7 },
- { 0x100074b2, 0xf7 },
- { 0x100074b3, 0x0f },
- { 0x100074b4, 0x63 },
- { 0x100074b5, 0x9a },
- { 0x100074b6, 0xc7 },
- { 0x100074b7, 0x02 },
- { 0x100074b8, 0x03 },
- { 0x100074b9, 0x47 },
- { 0x100074ba, 0x87 },
- { 0x100074bb, 0x01 },
- { 0x100074bc, 0x13 },
- { 0x100074bd, 0x77 },
- { 0x100074be, 0xf7 },
- { 0x100074bf, 0x0f },
- { 0x100074c0, 0x63 },
- { 0x100074c1, 0x14 },
- { 0x100074c2, 0xf7 },
- { 0x100074c3, 0x02 },
- { 0x100074c4, 0x37 },
- { 0x100074c5, 0xd7 },
- { 0x100074c6, 0x00 },
- { 0x100074c7, 0x00 },
- { 0x100074c8, 0x83 },
- { 0x100074c9, 0x47 },
- { 0x100074ca, 0x37 },
- { 0x100074cb, 0x54 },
- { 0x100074cc, 0x93 },
- { 0x100074cd, 0xf7 },
- { 0x100074ce, 0xf7 },
- { 0x100074cf, 0x0f },
- { 0x100074d0, 0x93 },
- { 0x100074d1, 0xe7 },
- { 0x100074d2, 0x07 },
- { 0x100074d3, 0x02 },
- { 0x100074d4, 0xa3 },
- { 0x100074d5, 0x01 },
- { 0x100074d6, 0xf7 },
- { 0x100074d7, 0x54 },
- { 0x100074d8, 0x83 },
- { 0x100074d9, 0x47 },
- { 0x100074da, 0x37 },
- { 0x100074db, 0x54 },
- { 0x100074dc, 0x93 },
- { 0x100074dd, 0xf7 },
- { 0x100074de, 0xf7 },
- { 0x100074df, 0x0d },
- { 0x100074e0, 0xa3 },
- { 0x100074e1, 0x01 },
- { 0x100074e2, 0xf7 },
- { 0x100074e3, 0x54 },
- { 0x100074e4, 0x23 },
- { 0x100074e5, 0xac },
- { 0x100074e6, 0x01 },
- { 0x100074e7, 0x56 },
- { 0x100074e8, 0x37 },
- { 0x100074e9, 0xd4 },
- { 0x100074ea, 0x00 },
- { 0x100074eb, 0x00 },
- { 0x100074ec, 0x83 },
- { 0x100074ed, 0x47 },
- { 0x100074ee, 0xd4 },
- { 0x100074ef, 0x47 },
- { 0x100074f0, 0x93 },
- { 0x100074f1, 0xf7 },
- { 0x100074f2, 0x17 },
- { 0x100074f3, 0x00 },
- { 0x100074f4, 0x63 },
- { 0x100074f5, 0x80 },
- { 0x100074f6, 0x07 },
- { 0x100074f7, 0x06 },
- { 0x100074f8, 0x37 },
- { 0x100074f9, 0xd7 },
- { 0x100074fa, 0x00 },
- { 0x100074fb, 0x10 },
- { 0x100074fc, 0x83 },
- { 0x100074fd, 0x47 },
- { 0x100074fe, 0x77 },
- { 0x100074ff, 0xd9 },
- { 0x10007500, 0x93 },
- { 0x10007501, 0x87 },
- { 0x10007502, 0x17 },
- { 0x10007503, 0x00 },
- { 0x10007504, 0x93 },
- { 0x10007505, 0xf7 },
- { 0x10007506, 0xf7 },
- { 0x10007507, 0x0f },
- { 0x10007508, 0xa3 },
- { 0x10007509, 0x0b },
- { 0x1000750a, 0xf7 },
- { 0x1000750b, 0xd8 },
- { 0x1000750c, 0x03 },
- { 0x1000750d, 0x47 },
- { 0x1000750e, 0x77 },
- { 0x1000750f, 0xd9 },
- { 0x10007510, 0x83 },
- { 0x10007511, 0x47 },
- { 0x10007512, 0xc4 },
- { 0x10007513, 0x47 },
- { 0x10007514, 0x13 },
- { 0x10007515, 0x77 },
- { 0x10007516, 0xf7 },
- { 0x10007517, 0x0f },
- { 0x10007518, 0x93 },
- { 0x10007519, 0xf7 },
- { 0x1000751a, 0xf7 },
- { 0x1000751b, 0x0f },
- { 0x1000751c, 0x63 },
- { 0x1000751d, 0x6c },
- { 0x1000751e, 0xf7 },
- { 0x1000751f, 0x02 },
- { 0x10007520, 0xb7 },
- { 0x10007521, 0xf4 },
- { 0x10007522, 0x00 },
- { 0x10007523, 0x00 },
- { 0x10007524, 0x93 },
- { 0x10007525, 0x05 },
- { 0x10007526, 0x00 },
- { 0x10007527, 0x01 },
- { 0x10007528, 0x13 },
- { 0x10007529, 0x85 },
- { 0x1000752a, 0x34 },
- { 0x1000752b, 0x52 },
- { 0x1000752c, 0xef },
- { 0x1000752d, 0xa0 },
- { 0x1000752e, 0x8f },
- { 0x1000752f, 0xc6 },
- { 0x10007530, 0x93 },
- { 0x10007531, 0x05 },
- { 0x10007532, 0x00 },
- { 0x10007533, 0x00 },
- { 0x10007534, 0x13 },
- { 0x10007535, 0x85 },
- { 0x10007536, 0x54 },
- { 0x10007537, 0x10 },
- { 0x10007538, 0xef },
- { 0x10007539, 0xa0 },
- { 0x1000753a, 0xcf },
- { 0x1000753b, 0xc5 },
- { 0x1000753c, 0x93 },
- { 0x1000753d, 0x05 },
- { 0x1000753e, 0x00 },
- { 0x1000753f, 0x00 },
- { 0x10007540, 0x13 },
- { 0x10007541, 0x85 },
- { 0x10007542, 0x74 },
- { 0x10007543, 0x10 },
- { 0x10007544, 0xef },
- { 0x10007545, 0xa0 },
- { 0x10007546, 0x0f },
- { 0x10007547, 0xc5 },
- { 0x10007548, 0x83 },
- { 0x10007549, 0x47 },
- { 0x1000754a, 0xd4 },
- { 0x1000754b, 0x47 },
- { 0x1000754c, 0x93 },
- { 0x1000754d, 0xf7 },
- { 0x1000754e, 0xe7 },
- { 0x1000754f, 0x0f },
- { 0x10007550, 0xa3 },
- { 0x10007551, 0x0e },
- { 0x10007552, 0xf4 },
- { 0x10007553, 0x46 },
- { 0x10007554, 0x83 },
- { 0x10007555, 0x20 },
- { 0x10007556, 0xc1 },
- { 0x10007557, 0x00 },
- { 0x10007558, 0x03 },
- { 0x10007559, 0x24 },
- { 0x1000755a, 0x81 },
- { 0x1000755b, 0x00 },
- { 0x1000755c, 0x83 },
- { 0x1000755d, 0x24 },
- { 0x1000755e, 0x41 },
- { 0x1000755f, 0x00 },
- { 0x10007560, 0x13 },
- { 0x10007561, 0x01 },
- { 0x10007562, 0x01 },
- { 0x10007563, 0x01 },
- { 0x10007564, 0x67 },
- { 0x10007565, 0x80 },
- { 0x10007566, 0x00 },
- { 0x10007567, 0x00 },
- { 0x10007568, 0x13 },
- { 0x10007569, 0x01 },
- { 0x1000756a, 0x01 },
- { 0x1000756b, 0xff },
- { 0x1000756c, 0x23 },
- { 0x1000756d, 0x24 },
- { 0x1000756e, 0x81 },
- { 0x1000756f, 0x00 },
- { 0x10007570, 0x23 },
- { 0x10007571, 0x26 },
- { 0x10007572, 0x11 },
- { 0x10007573, 0x00 },
- { 0x10007574, 0x23 },
- { 0x10007575, 0x22 },
- { 0x10007576, 0x91 },
- { 0x10007577, 0x00 },
- { 0x10007578, 0x37 },
- { 0x10007579, 0xd4 },
- { 0x1000757a, 0x00 },
- { 0x1000757b, 0x00 },
- { 0x1000757c, 0x83 },
- { 0x1000757d, 0x47 },
- { 0x1000757e, 0x04 },
- { 0x1000757f, 0x54 },
- { 0x10007580, 0x93 },
- { 0x10007581, 0x97 },
- { 0x10007582, 0x87 },
- { 0x10007583, 0x01 },
- { 0x10007584, 0x93 },
- { 0x10007585, 0xd7 },
- { 0x10007586, 0x87 },
- { 0x10007587, 0x41 },
- { 0x10007588, 0x63 },
- { 0x10007589, 0xd0 },
- { 0x1000758a, 0x07 },
- { 0x1000758b, 0x06 },
- { 0x1000758c, 0xb7 },
- { 0x1000758d, 0xf4 },
- { 0x1000758e, 0x00 },
- { 0x1000758f, 0x00 },
- { 0x10007590, 0x93 },
- { 0x10007591, 0x05 },
- { 0x10007592, 0x60 },
- { 0x10007593, 0x01 },
- { 0x10007594, 0x13 },
- { 0x10007595, 0x85 },
- { 0x10007596, 0x34 },
- { 0x10007597, 0x52 },
- { 0x10007598, 0xef },
- { 0x10007599, 0xa0 },
- { 0x1000759a, 0xcf },
- { 0x1000759b, 0xbf },
- { 0x1000759c, 0x93 },
- { 0x1000759d, 0x05 },
- { 0x1000759e, 0x00 },
- { 0x1000759f, 0x04 },
- { 0x100075a0, 0x13 },
- { 0x100075a1, 0x85 },
- { 0x100075a2, 0x54 },
- { 0x100075a3, 0x10 },
- { 0x100075a4, 0xef },
- { 0x100075a5, 0xa0 },
- { 0x100075a6, 0x0f },
- { 0x100075a7, 0xbf },
- { 0x100075a8, 0x93 },
- { 0x100075a9, 0x05 },
- { 0x100075aa, 0x00 },
- { 0x100075ab, 0x04 },
- { 0x100075ac, 0x13 },
- { 0x100075ad, 0x85 },
- { 0x100075ae, 0x74 },
- { 0x100075af, 0x10 },
- { 0x100075b0, 0xef },
- { 0x100075b1, 0xa0 },
- { 0x100075b2, 0x4f },
- { 0x100075b3, 0xbe },
- { 0x100075b4, 0x83 },
- { 0x100075b5, 0x47 },
- { 0x100075b6, 0xd4 },
- { 0x100075b7, 0x47 },
- { 0x100075b8, 0x37 },
- { 0x100075b9, 0xd7 },
- { 0x100075ba, 0x00 },
- { 0x100075bb, 0x10 },
- { 0x100075bc, 0x93 },
- { 0x100075bd, 0xf7 },
- { 0x100075be, 0xf7 },
- { 0x100075bf, 0x0f },
- { 0x100075c0, 0x93 },
- { 0x100075c1, 0xe7 },
- { 0x100075c2, 0x17 },
- { 0x100075c3, 0x00 },
- { 0x100075c4, 0xa3 },
- { 0x100075c5, 0x0e },
- { 0x100075c6, 0xf4 },
- { 0x100075c7, 0x46 },
- { 0x100075c8, 0xa3 },
- { 0x100075c9, 0x0b },
- { 0x100075ca, 0x07 },
- { 0x100075cb, 0xd8 },
- { 0x100075cc, 0x83 },
- { 0x100075cd, 0x47 },
- { 0x100075ce, 0x87 },
- { 0x100075cf, 0xd9 },
- { 0x100075d0, 0x93 },
- { 0x100075d1, 0x87 },
- { 0x100075d2, 0x17 },
- { 0x100075d3, 0x00 },
- { 0x100075d4, 0x93 },
- { 0x100075d5, 0xf7 },
- { 0x100075d6, 0xf7 },
- { 0x100075d7, 0x0f },
- { 0x100075d8, 0x23 },
- { 0x100075d9, 0x0c },
- { 0x100075da, 0xf7 },
- { 0x100075db, 0xd8 },
- { 0x100075dc, 0x83 },
- { 0x100075dd, 0x47 },
- { 0x100075de, 0x04 },
- { 0x100075df, 0x54 },
- { 0x100075e0, 0x93 },
- { 0x100075e1, 0xf7 },
- { 0x100075e2, 0xf7 },
- { 0x100075e3, 0x07 },
- { 0x100075e4, 0x23 },
- { 0x100075e5, 0x00 },
- { 0x100075e6, 0xf4 },
- { 0x100075e7, 0x54 },
- { 0x100075e8, 0x83 },
- { 0x100075e9, 0x20 },
- { 0x100075ea, 0xc1 },
- { 0x100075eb, 0x00 },
- { 0x100075ec, 0x03 },
- { 0x100075ed, 0x24 },
- { 0x100075ee, 0x81 },
- { 0x100075ef, 0x00 },
- { 0x100075f0, 0x83 },
- { 0x100075f1, 0x24 },
- { 0x100075f2, 0x41 },
- { 0x100075f3, 0x00 },
- { 0x100075f4, 0x13 },
- { 0x100075f5, 0x01 },
- { 0x100075f6, 0x01 },
- { 0x100075f7, 0x01 },
- { 0x100075f8, 0x67 },
- { 0x100075f9, 0x80 },
- { 0x100075fa, 0x00 },
- { 0x100075fb, 0x00 },
- { 0x100075fc, 0x13 },
- { 0x100075fd, 0x01 },
- { 0x100075fe, 0x01 },
- { 0x100075ff, 0xff },
- { 0x10007600, 0x23 },
- { 0x10007601, 0x24 },
- { 0x10007602, 0x81 },
- { 0x10007603, 0x00 },
- { 0x10007604, 0x37 },
- { 0x10007605, 0xd4 },
- { 0x10007606, 0x00 },
- { 0x10007607, 0x00 },
- { 0x10007608, 0x83 },
- { 0x10007609, 0x27 },
- { 0x1000760a, 0x04 },
- { 0x1000760b, 0x53 },
- { 0x1000760c, 0x23 },
- { 0x1000760d, 0x22 },
- { 0x1000760e, 0x91 },
- { 0x1000760f, 0x00 },
- { 0x10007610, 0xb7 },
- { 0x10007611, 0x04 },
- { 0x10007612, 0x00 },
- { 0x10007613, 0x40 },
- { 0x10007614, 0x23 },
- { 0x10007615, 0x26 },
- { 0x10007616, 0x11 },
- { 0x10007617, 0x00 },
- { 0x10007618, 0xb3 },
- { 0x10007619, 0xf7 },
- { 0x1000761a, 0x97 },
- { 0x1000761b, 0x00 },
- { 0x1000761c, 0x63 },
- { 0x1000761d, 0x86 },
- { 0x1000761e, 0x07 },
- { 0x1000761f, 0x00 },
- { 0x10007620, 0xef },
- { 0x10007621, 0xd0 },
- { 0x10007622, 0x5f },
- { 0x10007623, 0xc2 },
- { 0x10007624, 0x23 },
- { 0x10007625, 0x28 },
- { 0x10007626, 0x94 },
- { 0x10007627, 0x52 },
- { 0x10007628, 0x83 },
- { 0x10007629, 0x20 },
- { 0x1000762a, 0xc1 },
- { 0x1000762b, 0x00 },
- { 0x1000762c, 0x03 },
- { 0x1000762d, 0x24 },
- { 0x1000762e, 0x81 },
- { 0x1000762f, 0x00 },
- { 0x10007630, 0x83 },
- { 0x10007631, 0x24 },
- { 0x10007632, 0x41 },
- { 0x10007633, 0x00 },
- { 0x10007634, 0x13 },
- { 0x10007635, 0x01 },
- { 0x10007636, 0x01 },
- { 0x10007637, 0x01 },
- { 0x10007638, 0x67 },
- { 0x10007639, 0x80 },
- { 0x1000763a, 0x00 },
- { 0x1000763b, 0x00 },
- { 0x1000763c, 0x37 },
- { 0x1000763d, 0xc7 },
- { 0x1000763e, 0x00 },
- { 0x1000763f, 0x00 },
- { 0x10007640, 0x83 },
- { 0x10007641, 0x27 },
- { 0x10007642, 0xc7 },
- { 0x10007643, 0x5f },
- { 0x10007644, 0x23 },
- { 0x10007645, 0xa2 },
- { 0x10007646, 0xf1 },
- { 0x10007647, 0x42 },
- { 0x10007648, 0xb7 },
- { 0x10007649, 0x06 },
- { 0x1000764a, 0x00 },
- { 0x1000764b, 0x10 },
- { 0x1000764c, 0xb3 },
- { 0x1000764d, 0xf7 },
- { 0x1000764e, 0xd7 },
- { 0x1000764f, 0x00 },
- { 0x10007650, 0x63 },
- { 0x10007651, 0x80 },
- { 0x10007652, 0x07 },
- { 0x10007653, 0x0a },
- { 0x10007654, 0x83 },
- { 0x10007655, 0x47 },
- { 0x10007656, 0x07 },
- { 0x10007657, 0x56 },
- { 0x10007658, 0x93 },
- { 0x10007659, 0xf7 },
- { 0x1000765a, 0x87 },
- { 0x1000765b, 0x01 },
- { 0x1000765c, 0x63 },
- { 0x1000765d, 0x8a },
- { 0x1000765e, 0x07 },
- { 0x1000765f, 0x08 },
- { 0x10007660, 0x83 },
- { 0x10007661, 0x47 },
- { 0x10007662, 0x17 },
- { 0x10007663, 0x08 },
- { 0x10007664, 0x93 },
- { 0x10007665, 0xf7 },
- { 0x10007666, 0x47 },
- { 0x10007667, 0x00 },
- { 0x10007668, 0x63 },
- { 0x10007669, 0x84 },
- { 0x1000766a, 0x07 },
- { 0x1000766b, 0x08 },
- { 0x1000766c, 0x13 },
- { 0x1000766d, 0x01 },
- { 0x1000766e, 0x01 },
- { 0x1000766f, 0xff },
- { 0x10007670, 0x23 },
- { 0x10007671, 0x26 },
- { 0x10007672, 0x11 },
- { 0x10007673, 0x00 },
- { 0x10007674, 0xb7 },
- { 0x10007675, 0xc7 },
- { 0x10007676, 0xc2 },
- { 0x10007677, 0x3f },
- { 0x10007678, 0x03 },
- { 0x10007679, 0xa7 },
- { 0x1000767a, 0x07 },
- { 0x1000767b, 0xfc },
- { 0x1000767c, 0x63 },
- { 0x1000767d, 0x10 },
- { 0x1000767e, 0x05 },
- { 0x1000767f, 0x06 },
- { 0x10007680, 0x13 },
- { 0x10007681, 0x67 },
- { 0x10007682, 0x07 },
- { 0x10007683, 0x20 },
- { 0x10007684, 0x23 },
- { 0x10007685, 0xa0 },
- { 0x10007686, 0xe7 },
- { 0x10007687, 0xfc },
- { 0x10007688, 0x03 },
- { 0x10007689, 0xa7 },
- { 0x1000768a, 0x07 },
- { 0x1000768b, 0xfc },
- { 0x1000768c, 0x13 },
- { 0x1000768d, 0x67 },
- { 0x1000768e, 0x07 },
- { 0x1000768f, 0x40 },
- { 0x10007690, 0x23 },
- { 0x10007691, 0xa0 },
- { 0x10007692, 0xe7 },
- { 0x10007693, 0xfc },
- { 0x10007694, 0x37 },
- { 0x10007695, 0xc7 },
- { 0x10007696, 0xc2 },
- { 0x10007697, 0x3f },
- { 0x10007698, 0x83 },
- { 0x10007699, 0x27 },
- { 0x1000769a, 0x07 },
- { 0x1000769b, 0xfc },
- { 0x1000769c, 0x13 },
- { 0x1000769d, 0x75 },
- { 0x1000769e, 0x15 },
- { 0x1000769f, 0x00 },
- { 0x100076a0, 0x13 },
- { 0x100076a1, 0x15 },
- { 0x100076a2, 0x85 },
- { 0x100076a3, 0x00 },
- { 0x100076a4, 0x93 },
- { 0x100076a5, 0xf7 },
- { 0x100076a6, 0xf7 },
- { 0x100076a7, 0xef },
- { 0x100076a8, 0x33 },
- { 0x100076a9, 0xe5 },
- { 0x100076aa, 0xa7 },
- { 0x100076ab, 0x00 },
- { 0x100076ac, 0x23 },
- { 0x100076ad, 0x20 },
- { 0x100076ae, 0xa7 },
- { 0x100076af, 0xfc },
- { 0x100076b0, 0x93 },
- { 0x100076b1, 0x05 },
- { 0x100076b2, 0x00 },
- { 0x100076b3, 0x00 },
- { 0x100076b4, 0x13 },
- { 0x100076b5, 0x05 },
- { 0x100076b6, 0xa0 },
- { 0x100076b7, 0x00 },
- { 0x100076b8, 0xef },
- { 0x100076b9, 0xe0 },
- { 0x100076ba, 0xcf },
- { 0x100076bb, 0xb6 },
- { 0x100076bc, 0x37 },
- { 0x100076bd, 0xf7 },
- { 0x100076be, 0x00 },
- { 0x100076bf, 0x00 },
- { 0x100076c0, 0x83 },
- { 0x100076c1, 0x47 },
- { 0x100076c2, 0x57 },
- { 0x100076c3, 0x01 },
- { 0x100076c4, 0x93 },
- { 0x100076c5, 0xf7 },
- { 0x100076c6, 0xf7 },
- { 0x100076c7, 0x0f },
- { 0x100076c8, 0x93 },
- { 0x100076c9, 0xe7 },
- { 0x100076ca, 0x47 },
- { 0x100076cb, 0x00 },
- { 0x100076cc, 0xa3 },
- { 0x100076cd, 0x0a },
- { 0x100076ce, 0xf7 },
- { 0x100076cf, 0x00 },
- { 0x100076d0, 0x83 },
- { 0x100076d1, 0x20 },
- { 0x100076d2, 0xc1 },
- { 0x100076d3, 0x00 },
- { 0x100076d4, 0x13 },
- { 0x100076d5, 0x01 },
- { 0x100076d6, 0x01 },
- { 0x100076d7, 0x01 },
- { 0x100076d8, 0x67 },
- { 0x100076d9, 0x80 },
- { 0x100076da, 0x00 },
- { 0x100076db, 0x00 },
- { 0x100076dc, 0x13 },
- { 0x100076dd, 0x77 },
- { 0x100076de, 0xf7 },
- { 0x100076df, 0xdf },
- { 0x100076e0, 0x23 },
- { 0x100076e1, 0xa0 },
- { 0x100076e2, 0xe7 },
- { 0x100076e3, 0xfc },
- { 0x100076e4, 0x03 },
- { 0x100076e5, 0xa7 },
- { 0x100076e6, 0x07 },
- { 0x100076e7, 0xfc },
- { 0x100076e8, 0x13 },
- { 0x100076e9, 0x77 },
- { 0x100076ea, 0xf7 },
- { 0x100076eb, 0xbf },
- { 0x100076ec, 0x6f },
- { 0x100076ed, 0xf0 },
- { 0x100076ee, 0x5f },
- { 0x100076ef, 0xfa },
- { 0x100076f0, 0x67 },
- { 0x100076f1, 0x80 },
- { 0x100076f2, 0x00 },
- { 0x100076f3, 0x00 },
- { 0x100076f4, 0xb7 },
- { 0x100076f5, 0xc7 },
- { 0x100076f6, 0x00 },
- { 0x100076f7, 0x00 },
- { 0x100076f8, 0x03 },
- { 0x100076f9, 0xc7 },
- { 0x100076fa, 0x87 },
- { 0x100076fb, 0x59 },
- { 0x100076fc, 0x13 },
- { 0x100076fd, 0x77 },
- { 0x100076fe, 0xf7 },
- { 0x100076ff, 0x0f },
- { 0x10007700, 0x13 },
- { 0x10007701, 0x67 },
- { 0x10007702, 0x17 },
- { 0x10007703, 0x00 },
- { 0x10007704, 0x23 },
- { 0x10007705, 0x8c },
- { 0x10007706, 0xe7 },
- { 0x10007707, 0x58 },
- { 0x10007708, 0x03 },
- { 0x10007709, 0xc7 },
- { 0x1000770a, 0x77 },
- { 0x1000770b, 0x04 },
- { 0x1000770c, 0x13 },
- { 0x1000770d, 0x17 },
- { 0x1000770e, 0x87 },
- { 0x1000770f, 0x01 },
- { 0x10007710, 0x13 },
- { 0x10007711, 0x57 },
- { 0x10007712, 0x87 },
- { 0x10007713, 0x41 },
- { 0x10007714, 0x63 },
- { 0x10007715, 0x58 },
- { 0x10007716, 0x07 },
- { 0x10007717, 0x12 },
- { 0x10007718, 0x37 },
- { 0x10007719, 0xd7 },
- { 0x1000771a, 0x00 },
- { 0x1000771b, 0x00 },
- { 0x1000771c, 0x83 },
- { 0x1000771d, 0x26 },
- { 0x1000771e, 0x87 },
- { 0x1000771f, 0x53 },
- { 0x10007720, 0x37 },
- { 0x10007721, 0x06 },
- { 0x10007722, 0x00 },
- { 0x10007723, 0x40 },
- { 0x10007724, 0x93 },
- { 0x10007725, 0x05 },
- { 0x10007726, 0x80 },
- { 0x10007727, 0x01 },
- { 0x10007728, 0xb3 },
- { 0x10007729, 0xe6 },
- { 0x1000772a, 0xc6 },
- { 0x1000772b, 0x00 },
- { 0x1000772c, 0x23 },
- { 0x1000772d, 0x2c },
- { 0x1000772e, 0xd7 },
- { 0x1000772f, 0x52 },
- { 0x10007730, 0x83 },
- { 0x10007731, 0xc6 },
- { 0x10007732, 0x07 },
- { 0x10007733, 0x56 },
- { 0x10007734, 0x93 },
- { 0x10007735, 0xf6 },
- { 0x10007736, 0xf6 },
- { 0x10007737, 0x0f },
- { 0x10007738, 0x63 },
- { 0x10007739, 0x9c },
- { 0x1000773a, 0xb6 },
- { 0x1000773b, 0x0e },
- { 0x1000773c, 0x83 },
- { 0x1000773d, 0x27 },
- { 0x1000773e, 0x87 },
- { 0x1000773f, 0x53 },
- { 0x10007740, 0xb3 },
- { 0x10007741, 0xf7 },
- { 0x10007742, 0xc7 },
- { 0x10007743, 0x00 },
- { 0x10007744, 0x63 },
- { 0x10007745, 0x80 },
- { 0x10007746, 0x07 },
- { 0x10007747, 0x10 },
- { 0x10007748, 0x13 },
- { 0x10007749, 0x01 },
- { 0x1000774a, 0x01 },
- { 0x1000774b, 0xff },
- { 0x1000774c, 0x23 },
- { 0x1000774d, 0x24 },
- { 0x1000774e, 0x81 },
- { 0x1000774f, 0x00 },
- { 0x10007750, 0x83 },
- { 0x10007751, 0xa7 },
- { 0x10007752, 0x41 },
- { 0x10007753, 0x58 },
- { 0x10007754, 0x23 },
- { 0x10007755, 0x26 },
- { 0x10007756, 0x11 },
- { 0x10007757, 0x00 },
- { 0x10007758, 0x63 },
- { 0x10007759, 0x94 },
- { 0x1000775a, 0x07 },
- { 0x1000775b, 0x0c },
- { 0x1000775c, 0x83 },
- { 0x1000775d, 0x27 },
- { 0x1000775e, 0x07 },
- { 0x1000775f, 0x53 },
- { 0x10007760, 0x03 },
- { 0x10007761, 0xc6 },
- { 0x10007762, 0xb1 },
- { 0x10007763, 0x42 },
- { 0x10007764, 0x93 },
- { 0x10007765, 0xd7 },
- { 0x10007766, 0xe7 },
- { 0x10007767, 0x01 },
- { 0x10007768, 0x93 },
- { 0x10007769, 0xf7 },
- { 0x1000776a, 0x17 },
- { 0x1000776b, 0x00 },
- { 0x1000776c, 0x93 },
- { 0x1000776d, 0x06 },
- { 0x1000776e, 0x10 },
- { 0x1000776f, 0x00 },
- { 0x10007770, 0x63 },
- { 0x10007771, 0x14 },
- { 0x10007772, 0x06 },
- { 0x10007773, 0x00 },
- { 0x10007774, 0xb3 },
- { 0x10007775, 0x86 },
- { 0x10007776, 0xf6 },
- { 0x10007777, 0x40 },
- { 0x10007778, 0xa3 },
- { 0x10007779, 0x85 },
- { 0x1000777a, 0xd1 },
- { 0x1000777b, 0x42 },
- { 0x1000777c, 0x03 },
- { 0x1000777d, 0xc6 },
- { 0x1000777e, 0xa1 },
- { 0x1000777f, 0x42 },
- { 0x10007780, 0x93 },
- { 0x10007781, 0x06 },
- { 0x10007782, 0x10 },
- { 0x10007783, 0x00 },
- { 0x10007784, 0x63 },
- { 0x10007785, 0x14 },
- { 0x10007786, 0x06 },
- { 0x10007787, 0x00 },
- { 0x10007788, 0xb3 },
- { 0x10007789, 0x86 },
- { 0x1000778a, 0xf6 },
- { 0x1000778b, 0x40 },
- { 0x1000778c, 0x23 },
- { 0x1000778d, 0x85 },
- { 0x1000778e, 0xd1 },
- { 0x1000778f, 0x42 },
- { 0x10007790, 0x03 },
- { 0x10007791, 0xc6 },
- { 0x10007792, 0x91 },
- { 0x10007793, 0x42 },
- { 0x10007794, 0x93 },
- { 0x10007795, 0x06 },
- { 0x10007796, 0x10 },
- { 0x10007797, 0x00 },
- { 0x10007798, 0x63 },
- { 0x10007799, 0x14 },
- { 0x1000779a, 0x06 },
- { 0x1000779b, 0x00 },
- { 0x1000779c, 0xb3 },
- { 0x1000779d, 0x86 },
- { 0x1000779e, 0xf6 },
- { 0x1000779f, 0x40 },
- { 0x100077a0, 0xa3 },
- { 0x100077a1, 0x84 },
- { 0x100077a2, 0xd1 },
- { 0x100077a3, 0x42 },
- { 0x100077a4, 0x03 },
- { 0x100077a5, 0xc6 },
- { 0x100077a6, 0x81 },
- { 0x100077a7, 0x42 },
- { 0x100077a8, 0x93 },
- { 0x100077a9, 0x06 },
- { 0x100077aa, 0x10 },
- { 0x100077ab, 0x00 },
- { 0x100077ac, 0x63 },
- { 0x100077ad, 0x14 },
- { 0x100077ae, 0x06 },
- { 0x100077af, 0x00 },
- { 0x100077b0, 0xb3 },
- { 0x100077b1, 0x86 },
- { 0x100077b2, 0xf6 },
- { 0x100077b3, 0x40 },
- { 0x100077b4, 0x23 },
- { 0x100077b5, 0x84 },
- { 0x100077b6, 0xd1 },
- { 0x100077b7, 0x42 },
- { 0x100077b8, 0xb7 },
- { 0x100077b9, 0xd7 },
- { 0x100077ba, 0x00 },
- { 0x100077bb, 0x00 },
- { 0x100077bc, 0x83 },
- { 0x100077bd, 0xa7 },
- { 0x100077be, 0x07 },
- { 0x100077bf, 0x53 },
- { 0x100077c0, 0x37 },
- { 0x100077c1, 0x07 },
- { 0x100077c2, 0x00 },
- { 0x100077c3, 0x40 },
- { 0x100077c4, 0xb3 },
- { 0x100077c5, 0xf7 },
- { 0x100077c6, 0xe7 },
- { 0x100077c7, 0x00 },
- { 0x100077c8, 0x63 },
- { 0x100077c9, 0x8c },
- { 0x100077ca, 0x07 },
- { 0x100077cb, 0x04 },
- { 0x100077cc, 0xb7 },
- { 0x100077cd, 0x47 },
- { 0x100077ce, 0x0f },
- { 0x100077cf, 0x00 },
- { 0x100077d0, 0x93 },
- { 0x100077d1, 0x87 },
- { 0x100077d2, 0x17 },
- { 0x100077d3, 0x24 },
- { 0x100077d4, 0xb7 },
- { 0x100077d5, 0xf6 },
- { 0x100077d6, 0x00 },
- { 0x100077d7, 0x00 },
- { 0x100077d8, 0x03 },
- { 0x100077d9, 0xc7 },
- { 0x100077da, 0xf6 },
- { 0x100077db, 0x83 },
- { 0x100077dc, 0x13 },
- { 0x100077dd, 0x77 },
- { 0x100077de, 0x07 },
- { 0x100077df, 0x04 },
- { 0x100077e0, 0x63 },
- { 0x100077e1, 0x16 },
- { 0x100077e2, 0x07 },
- { 0x100077e3, 0x00 },
- { 0x100077e4, 0x93 },
- { 0x100077e5, 0x87 },
- { 0x100077e6, 0xf7 },
- { 0x100077e7, 0xff },
- { 0x100077e8, 0xe3 },
- { 0x100077e9, 0x98 },
- { 0x100077ea, 0x07 },
- { 0x100077eb, 0xfe },
- { 0x100077ec, 0x13 },
- { 0x100077ed, 0x05 },
- { 0x100077ee, 0x80 },
- { 0x100077ef, 0x3e },
- { 0x100077f0, 0x93 },
- { 0x100077f1, 0x05 },
- { 0x100077f2, 0x00 },
- { 0x100077f3, 0x00 },
- { 0x100077f4, 0xef },
- { 0x100077f5, 0xe0 },
- { 0x100077f6, 0x0f },
- { 0x100077f7, 0xa3 },
- { 0x100077f8, 0x37 },
- { 0x100077f9, 0xf7 },
- { 0x100077fa, 0x00 },
- { 0x100077fb, 0x00 },
- { 0x100077fc, 0x83 },
- { 0x100077fd, 0x47 },
- { 0x100077fe, 0xb7 },
- { 0x100077ff, 0x80 },
- { 0x10007800, 0x93 },
- { 0x10007801, 0xe7 },
- { 0x10007802, 0x07 },
- { 0x10007803, 0xf8 },
- { 0x10007804, 0x93 },
- { 0x10007805, 0xf7 },
- { 0x10007806, 0xf7 },
- { 0x10007807, 0x0f },
- { 0x10007808, 0xa3 },
- { 0x10007809, 0x05 },
- { 0x1000780a, 0xf7 },
- { 0x1000780b, 0x80 },
- { 0x1000780c, 0xb7 },
- { 0x1000780d, 0xd7 },
- { 0x1000780e, 0x00 },
- { 0x1000780f, 0x00 },
- { 0x10007810, 0x37 },
- { 0x10007811, 0x07 },
- { 0x10007812, 0x00 },
- { 0x10007813, 0x40 },
- { 0x10007814, 0x23 },
- { 0x10007815, 0xa8 },
- { 0x10007816, 0xe7 },
- { 0x10007817, 0x52 },
- { 0x10007818, 0x93 },
- { 0x10007819, 0x07 },
- { 0x1000781a, 0x10 },
- { 0x1000781b, 0x00 },
- { 0x1000781c, 0x23 },
- { 0x1000781d, 0xa2 },
- { 0x1000781e, 0xf1 },
- { 0x1000781f, 0x58 },
- { 0x10007820, 0x83 },
- { 0x10007821, 0x20 },
- { 0x10007822, 0xc1 },
- { 0x10007823, 0x00 },
- { 0x10007824, 0x03 },
- { 0x10007825, 0x24 },
- { 0x10007826, 0x81 },
- { 0x10007827, 0x00 },
- { 0x10007828, 0x13 },
- { 0x10007829, 0x01 },
- { 0x1000782a, 0x01 },
- { 0x1000782b, 0x01 },
- { 0x1000782c, 0x67 },
- { 0x1000782d, 0x80 },
- { 0x1000782e, 0x00 },
- { 0x1000782f, 0x00 },
- { 0x10007830, 0x83 },
- { 0x10007831, 0xc7 },
- { 0x10007832, 0x07 },
- { 0x10007833, 0x56 },
- { 0x10007834, 0x93 },
- { 0x10007835, 0xf7 },
- { 0x10007836, 0xf7 },
- { 0x10007837, 0x0f },
- { 0x10007838, 0x63 },
- { 0x10007839, 0x96 },
- { 0x1000783a, 0x07 },
- { 0x1000783b, 0x00 },
- { 0x1000783c, 0x23 },
- { 0x1000783d, 0xa2 },
- { 0x1000783e, 0x01 },
- { 0x1000783f, 0x58 },
- { 0x10007840, 0x67 },
- { 0x10007841, 0x80 },
- { 0x10007842, 0x00 },
- { 0x10007843, 0x00 },
- { 0x10007844, 0x67 },
- { 0x10007845, 0x80 },
- { 0x10007846, 0x00 },
- { 0x10007847, 0x00 },
- { 0x10007848, 0xb7 },
- { 0x10007849, 0xc7 },
- { 0x1000784a, 0x00 },
- { 0x1000784b, 0x00 },
- { 0x1000784c, 0x83 },
- { 0x1000784d, 0xc7 },
- { 0x1000784e, 0x07 },
- { 0x1000784f, 0x56 },
- { 0x10007850, 0x13 },
- { 0x10007851, 0x07 },
- { 0x10007852, 0x80 },
- { 0x10007853, 0x01 },
- { 0x10007854, 0x93 },
- { 0x10007855, 0xf7 },
- { 0x10007856, 0xf7 },
- { 0x10007857, 0x0f },
- { 0x10007858, 0x63 },
- { 0x10007859, 0x98 },
- { 0x1000785a, 0xe7 },
- { 0x1000785b, 0x00 },
- { 0x1000785c, 0x13 },
- { 0x1000785d, 0x05 },
- { 0x1000785e, 0x00 },
- { 0x1000785f, 0x7d },
- { 0x10007860, 0x93 },
- { 0x10007861, 0x05 },
- { 0x10007862, 0x00 },
- { 0x10007863, 0x00 },
- { 0x10007864, 0x6f },
- { 0x10007865, 0xe0 },
- { 0x10007866, 0x0f },
- { 0x10007867, 0x9c },
- { 0x10007868, 0x67 },
- { 0x10007869, 0x80 },
- { 0x1000786a, 0x00 },
- { 0x1000786b, 0x00 },
- { 0x1000786c, 0x13 },
- { 0x1000786d, 0x01 },
- { 0x1000786e, 0x01 },
- { 0x1000786f, 0xff },
- { 0x10007870, 0x23 },
- { 0x10007871, 0x26 },
- { 0x10007872, 0x11 },
- { 0x10007873, 0x00 },
- { 0x10007874, 0x23 },
- { 0x10007875, 0x24 },
- { 0x10007876, 0x81 },
- { 0x10007877, 0x00 },
- { 0x10007878, 0xef },
- { 0x10007879, 0xd0 },
- { 0x1000787a, 0x4f },
- { 0x1000787b, 0x91 },
- { 0x1000787c, 0x83 },
- { 0x1000787d, 0xc7 },
- { 0x1000787e, 0x81 },
- { 0x1000787f, 0x41 },
- { 0x10007880, 0x63 },
- { 0x10007881, 0x84 },
- { 0x10007882, 0x07 },
- { 0x10007883, 0x08 },
- { 0x10007884, 0xb7 },
- { 0x10007885, 0xd7 },
- { 0x10007886, 0x00 },
- { 0x10007887, 0x00 },
- { 0x10007888, 0x83 },
- { 0x10007889, 0xc7 },
- { 0x1000788a, 0x07 },
- { 0x1000788b, 0x47 },
- { 0x1000788c, 0x93 },
- { 0x1000788d, 0xf7 },
- { 0x1000788e, 0x07 },
- { 0x1000788f, 0x02 },
- { 0x10007890, 0x63 },
- { 0x10007891, 0x8a },
- { 0x10007892, 0x07 },
- { 0x10007893, 0x04 },
- { 0x10007894, 0x83 },
- { 0x10007895, 0xc7 },
- { 0x10007896, 0x11 },
- { 0x10007897, 0x44 },
- { 0x10007898, 0x93 },
- { 0x10007899, 0xf7 },
- { 0x1000789a, 0xd7 },
- { 0x1000789b, 0x0f },
- { 0x1000789c, 0x63 },
- { 0x1000789d, 0x90 },
- { 0x1000789e, 0x07 },
- { 0x1000789f, 0x02 },
- { 0x100078a0, 0x03 },
- { 0x100078a1, 0xc7 },
- { 0x100078a2, 0xd1 },
- { 0x100078a3, 0x58 },
- { 0x100078a4, 0xb7 },
- { 0x100078a5, 0x07 },
- { 0x100078a6, 0x00 },
- { 0x100078a7, 0x11 },
- { 0x100078a8, 0x23 },
- { 0x100078a9, 0x88 },
- { 0x100078aa, 0xe7 },
- { 0x100078ab, 0x00 },
- { 0x100078ac, 0x23 },
- { 0x100078ad, 0x88 },
- { 0x100078ae, 0xe7 },
- { 0x100078af, 0x20 },
- { 0x100078b0, 0x03 },
- { 0x100078b1, 0xc7 },
- { 0x100078b2, 0xc1 },
- { 0x100078b3, 0x58 },
- { 0x100078b4, 0x23 },
- { 0x100078b5, 0x8c },
- { 0x100078b6, 0xe7 },
- { 0x100078b7, 0x00 },
- { 0x100078b8, 0x6f },
- { 0x100078b9, 0x00 },
- { 0x100078ba, 0x80 },
- { 0x100078bb, 0x04 },
- { 0x100078bc, 0xb7 },
- { 0x100078bd, 0x07 },
- { 0x100078be, 0x00 },
- { 0x100078bf, 0x11 },
- { 0x100078c0, 0x23 },
- { 0x100078c1, 0x88 },
- { 0x100078c2, 0x07 },
- { 0x100078c3, 0x00 },
- { 0x100078c4, 0x23 },
- { 0x100078c5, 0x88 },
- { 0x100078c6, 0x07 },
- { 0x100078c7, 0x20 },
- { 0x100078c8, 0x23 },
- { 0x100078c9, 0x8c },
- { 0x100078ca, 0x07 },
- { 0x100078cb, 0x00 },
- { 0x100078cc, 0x23 },
- { 0x100078cd, 0x8c },
- { 0x100078ce, 0x07 },
- { 0x100078cf, 0x20 },
- { 0x100078d0, 0xef },
- { 0x100078d1, 0xb0 },
- { 0x100078d2, 0xcf },
- { 0x100078d3, 0xc4 },
- { 0x100078d4, 0x03 },
- { 0x100078d5, 0x24 },
- { 0x100078d6, 0x81 },
- { 0x100078d7, 0x00 },
- { 0x100078d8, 0x83 },
- { 0x100078d9, 0x20 },
- { 0x100078da, 0xc1 },
- { 0x100078db, 0x00 },
- { 0x100078dc, 0x13 },
- { 0x100078dd, 0x01 },
- { 0x100078de, 0x01 },
- { 0x100078df, 0x01 },
- { 0x100078e0, 0x6f },
- { 0x100078e1, 0xb0 },
- { 0x100078e2, 0xcf },
- { 0x100078e3, 0xcd },
- { 0x100078e4, 0x03 },
- { 0x100078e5, 0xc7 },
- { 0x100078e6, 0xd1 },
- { 0x100078e7, 0x58 },
- { 0x100078e8, 0xb7 },
- { 0x100078e9, 0x07 },
- { 0x100078ea, 0x00 },
- { 0x100078eb, 0x11 },
- { 0x100078ec, 0x23 },
- { 0x100078ed, 0x88 },
- { 0x100078ee, 0xe7 },
- { 0x100078ef, 0x00 },
- { 0x100078f0, 0x83 },
- { 0x100078f1, 0xc6 },
- { 0x100078f2, 0xc1 },
- { 0x100078f3, 0x58 },
- { 0x100078f4, 0x23 },
- { 0x100078f5, 0x88 },
- { 0x100078f6, 0xd7 },
- { 0x100078f7, 0x20 },
- { 0x100078f8, 0x23 },
- { 0x100078f9, 0x8c },
- { 0x100078fa, 0xd7 },
- { 0x100078fb, 0x00 },
- { 0x100078fc, 0x03 },
- { 0x100078fd, 0xc7 },
- { 0x100078fe, 0xc1 },
- { 0x100078ff, 0x58 },
- { 0x10007900, 0x23 },
- { 0x10007901, 0x8c },
- { 0x10007902, 0xe7 },
- { 0x10007903, 0x20 },
- { 0x10007904, 0x6f },
- { 0x10007905, 0xf0 },
- { 0x10007906, 0xdf },
- { 0x10007907, 0xfc },
- { 0x10007908, 0xb7 },
- { 0x10007909, 0x06 },
- { 0x1000790a, 0x00 },
- { 0x1000790b, 0x11 },
- { 0x1000790c, 0x03 },
- { 0x1000790d, 0xc7 },
- { 0x1000790e, 0x06 },
- { 0x1000790f, 0x21 },
- { 0x10007910, 0x03 },
- { 0x10007911, 0xc6 },
- { 0x10007912, 0xd1 },
- { 0x10007913, 0x58 },
- { 0x10007914, 0x13 },
- { 0x10007915, 0x84 },
- { 0x10007916, 0x07 },
- { 0x10007917, 0x00 },
- { 0x10007918, 0x13 },
- { 0x10007919, 0x77 },
- { 0x1000791a, 0xf7 },
- { 0x1000791b, 0x0f },
- { 0x1000791c, 0x63 },
- { 0x1000791d, 0x1a },
- { 0x1000791e, 0xe6 },
- { 0x1000791f, 0x00 },
- { 0x10007920, 0x83 },
- { 0x10007921, 0xc7 },
- { 0x10007922, 0x86 },
- { 0x10007923, 0x21 },
- { 0x10007924, 0x03 },
- { 0x10007925, 0xc7 },
- { 0x10007926, 0xc1 },
- { 0x10007927, 0x58 },
- { 0x10007928, 0x93 },
- { 0x10007929, 0xf7 },
- { 0x1000792a, 0xf7 },
- { 0x1000792b, 0x0f },
- { 0x1000792c, 0xe3 },
- { 0x1000792d, 0x02 },
- { 0x1000792e, 0xf7 },
- { 0x1000792f, 0xfa },
- { 0x10007930, 0xb7 },
- { 0x10007931, 0xc7 },
- { 0x10007932, 0x00 },
- { 0x10007933, 0x00 },
- { 0x10007934, 0x83 },
- { 0x10007935, 0xc7 },
- { 0x10007936, 0x07 },
- { 0x10007937, 0x56 },
- { 0x10007938, 0x13 },
- { 0x10007939, 0x07 },
- { 0x1000793a, 0xf0 },
- { 0x1000793b, 0x00 },
- { 0x1000793c, 0x93 },
- { 0x1000793d, 0xf7 },
- { 0x1000793e, 0xf7 },
- { 0x1000793f, 0x0f },
- { 0x10007940, 0xe3 },
- { 0x10007941, 0x78 },
- { 0x10007942, 0xf7 },
- { 0x10007943, 0xf8 },
- { 0x10007944, 0xb7 },
- { 0x10007945, 0xd7 },
- { 0x10007946, 0x00 },
- { 0x10007947, 0x00 },
- { 0x10007948, 0x83 },
- { 0x10007949, 0xc5 },
- { 0x1000794a, 0xa7 },
- { 0x1000794b, 0x47 },
- { 0x1000794c, 0x93 },
- { 0x1000794d, 0xf7 },
- { 0x1000794e, 0xf5 },
- { 0x1000794f, 0x0f },
- { 0x10007950, 0x93 },
- { 0x10007951, 0x95 },
- { 0x10007952, 0x57 },
- { 0x10007953, 0x00 },
- { 0x10007954, 0xb3 },
- { 0x10007955, 0x85 },
- { 0x10007956, 0xf5 },
- { 0x10007957, 0x40 },
- { 0x10007958, 0x93 },
- { 0x10007959, 0x95 },
- { 0x1000795a, 0x25 },
- { 0x1000795b, 0x00 },
- { 0x1000795c, 0xb3 },
- { 0x1000795d, 0x85 },
- { 0x1000795e, 0xf5 },
- { 0x1000795f, 0x00 },
- { 0x10007960, 0x13 },
- { 0x10007961, 0x95 },
- { 0x10007962, 0x35 },
- { 0x10007963, 0x00 },
- { 0x10007964, 0x93 },
- { 0x10007965, 0xd5 },
- { 0x10007966, 0xf5 },
- { 0x10007967, 0x41 },
- { 0x10007968, 0xef },
- { 0x10007969, 0xe0 },
- { 0x1000796a, 0xcf },
- { 0x1000796b, 0x8b },
- { 0x1000796c, 0x03 },
- { 0x1000796d, 0xc7 },
- { 0x1000796e, 0xd1 },
- { 0x1000796f, 0x58 },
- { 0x10007970, 0x6f },
- { 0x10007971, 0xf0 },
- { 0x10007972, 0x5f },
- { 0x10007973, 0xf3 },
- { 0x10007974, 0x13 },
- { 0x10007975, 0x01 },
- { 0x10007976, 0x01 },
- { 0x10007977, 0xfe },
- { 0x10007978, 0x23 },
- { 0x10007979, 0x2c },
- { 0x1000797a, 0x81 },
- { 0x1000797b, 0x00 },
- { 0x1000797c, 0x83 },
- { 0x1000797d, 0xc7 },
- { 0x1000797e, 0x21 },
- { 0x1000797f, 0x41 },
- { 0x10007980, 0x23 },
- { 0x10007981, 0x2e },
- { 0x10007982, 0x11 },
- { 0x10007983, 0x00 },
- { 0x10007984, 0x23 },
- { 0x10007985, 0x2a },
- { 0x10007986, 0x91 },
- { 0x10007987, 0x00 },
- { 0x10007988, 0x23 },
- { 0x10007989, 0x28 },
- { 0x1000798a, 0x21 },
- { 0x1000798b, 0x01 },
- { 0x1000798c, 0x23 },
- { 0x1000798d, 0x26 },
- { 0x1000798e, 0x31 },
- { 0x1000798f, 0x01 },
- { 0x10007990, 0x13 },
- { 0x10007991, 0x07 },
- { 0x10007992, 0x10 },
- { 0x10007993, 0x00 },
- { 0x10007994, 0x63 },
- { 0x10007995, 0x92 },
- { 0x10007996, 0xe7 },
- { 0x10007997, 0x02 },
- { 0x10007998, 0xa3 },
- { 0x10007999, 0x81 },
- { 0x1000799a, 0xf1 },
- { 0x1000799b, 0x40 },
- { 0x1000799c, 0x83 },
- { 0x1000799d, 0x20 },
- { 0x1000799e, 0xc1 },
- { 0x1000799f, 0x01 },
- { 0x100079a0, 0x03 },
- { 0x100079a1, 0x24 },
- { 0x100079a2, 0x81 },
- { 0x100079a3, 0x01 },
- { 0x100079a4, 0x83 },
- { 0x100079a5, 0x24 },
- { 0x100079a6, 0x41 },
- { 0x100079a7, 0x01 },
- { 0x100079a8, 0x03 },
- { 0x100079a9, 0x29 },
- { 0x100079aa, 0x01 },
- { 0x100079ab, 0x01 },
- { 0x100079ac, 0x83 },
- { 0x100079ad, 0x29 },
- { 0x100079ae, 0xc1 },
- { 0x100079af, 0x00 },
- { 0x100079b0, 0x13 },
- { 0x100079b1, 0x01 },
- { 0x100079b2, 0x01 },
- { 0x100079b3, 0x02 },
- { 0x100079b4, 0x67 },
- { 0x100079b5, 0x80 },
- { 0x100079b6, 0x00 },
- { 0x100079b7, 0x00 },
- { 0x100079b8, 0xe3 },
- { 0x100079b9, 0x92 },
- { 0x100079ba, 0x07 },
- { 0x100079bb, 0xfe },
- { 0x100079bc, 0x37 },
- { 0x100079bd, 0xc9 },
- { 0x100079be, 0x00 },
- { 0x100079bf, 0x00 },
- { 0x100079c0, 0x83 },
- { 0x100079c1, 0x47 },
- { 0x100079c2, 0x09 },
- { 0x100079c3, 0x56 },
- { 0x100079c4, 0x13 },
- { 0x100079c5, 0x07 },
- { 0x100079c6, 0x80 },
- { 0x100079c7, 0x01 },
- { 0x100079c8, 0x93 },
- { 0x100079c9, 0xf7 },
- { 0x100079ca, 0xf7 },
- { 0x100079cb, 0x0f },
- { 0x100079cc, 0xe3 },
- { 0x100079cd, 0x78 },
- { 0x100079ce, 0xf7 },
- { 0x100079cf, 0xfc },
- { 0x100079d0, 0x83 },
- { 0x100079d1, 0xc7 },
- { 0x100079d2, 0x31 },
- { 0x100079d3, 0x40 },
- { 0x100079d4, 0xe3 },
- { 0x100079d5, 0x84 },
- { 0x100079d6, 0x07 },
- { 0x100079d7, 0xfc },
- { 0x100079d8, 0xb7 },
- { 0x100079d9, 0xd4 },
- { 0x100079da, 0x00 },
- { 0x100079db, 0x00 },
- { 0x100079dc, 0x03 },
- { 0x100079dd, 0xc5 },
- { 0x100079de, 0x94 },
- { 0x100079df, 0x47 },
- { 0x100079e0, 0xb7 },
- { 0x100079e1, 0x15 },
- { 0x100079e2, 0x00 },
- { 0x100079e3, 0x00 },
- { 0x100079e4, 0x93 },
- { 0x100079e5, 0x85 },
- { 0x100079e6, 0x85 },
- { 0x100079e7, 0x38 },
- { 0x100079e8, 0x13 },
- { 0x100079e9, 0x75 },
- { 0x100079ea, 0xf5 },
- { 0x100079eb, 0x0f },
- { 0x100079ec, 0xef },
- { 0x100079ed, 0xe0 },
- { 0x100079ee, 0x5f },
- { 0x100079ef, 0xe0 },
- { 0x100079f0, 0x93 },
- { 0x100079f1, 0x55 },
- { 0x100079f2, 0xf5 },
- { 0x100079f3, 0x41 },
- { 0x100079f4, 0xef },
- { 0x100079f5, 0xe0 },
- { 0x100079f6, 0x0f },
- { 0x100079f7, 0x83 },
- { 0x100079f8, 0xa3 },
- { 0x100079f9, 0x81 },
- { 0x100079fa, 0x01 },
- { 0x100079fb, 0x40 },
- { 0x100079fc, 0x83 },
- { 0x100079fd, 0x27 },
- { 0x100079fe, 0xc9 },
- { 0x100079ff, 0x5f },
- { 0x10007a00, 0x37 },
- { 0x10007a01, 0x07 },
- { 0x10007a02, 0x00 },
- { 0x10007a03, 0x02 },
- { 0x10007a04, 0xb3 },
- { 0x10007a05, 0xf7 },
- { 0x10007a06, 0xe7 },
- { 0x10007a07, 0x00 },
- { 0x10007a08, 0xe3 },
- { 0x10007a09, 0x8a },
- { 0x10007a0a, 0x07 },
- { 0x10007a0b, 0xf8 },
- { 0x10007a0c, 0x03 },
- { 0x10007a0d, 0xc7 },
- { 0x10007a0e, 0x04 },
- { 0x10007a0f, 0x90 },
- { 0x10007a10, 0x93 },
- { 0x10007a11, 0x07 },
- { 0x10007a12, 0x10 },
- { 0x10007a13, 0x00 },
- { 0x10007a14, 0x13 },
- { 0x10007a15, 0x77 },
- { 0x10007a16, 0x17 },
- { 0x10007a17, 0x00 },
- { 0x10007a18, 0x63 },
- { 0x10007a19, 0x1c },
- { 0x10007a1a, 0x07 },
- { 0x10007a1b, 0x00 },
- { 0x10007a1c, 0x83 },
- { 0x10007a1d, 0xc7 },
- { 0x10007a1e, 0x34 },
- { 0x10007a1f, 0x54 },
- { 0x10007a20, 0x93 },
- { 0x10007a21, 0xf7 },
- { 0x10007a22, 0xf7 },
- { 0x10007a23, 0x0f },
- { 0x10007a24, 0x93 },
- { 0x10007a25, 0xd7 },
- { 0x10007a26, 0x17 },
- { 0x10007a27, 0x00 },
- { 0x10007a28, 0x93 },
- { 0x10007a29, 0xc7 },
- { 0x10007a2a, 0x17 },
- { 0x10007a2b, 0x00 },
- { 0x10007a2c, 0x93 },
- { 0x10007a2d, 0xf7 },
- { 0x10007a2e, 0x17 },
- { 0x10007a2f, 0x00 },
- { 0x10007a30, 0xa3 },
- { 0x10007a31, 0x85 },
- { 0x10007a32, 0xf1 },
- { 0x10007a33, 0x42 },
- { 0x10007a34, 0x37 },
- { 0x10007a35, 0xd6 },
- { 0x10007a36, 0x00 },
- { 0x10007a37, 0x00 },
- { 0x10007a38, 0x03 },
- { 0x10007a39, 0x47 },
- { 0x10007a3a, 0x06 },
- { 0x10007a3b, 0x90 },
- { 0x10007a3c, 0x93 },
- { 0x10007a3d, 0x06 },
- { 0x10007a3e, 0x10 },
- { 0x10007a3f, 0x00 },
- { 0x10007a40, 0x13 },
- { 0x10007a41, 0x77 },
- { 0x10007a42, 0x27 },
- { 0x10007a43, 0x00 },
- { 0x10007a44, 0x63 },
- { 0x10007a45, 0x18 },
- { 0x10007a46, 0x07 },
- { 0x10007a47, 0x00 },
- { 0x10007a48, 0x03 },
- { 0x10007a49, 0x47 },
- { 0x10007a4a, 0x36 },
- { 0x10007a4b, 0x54 },
- { 0x10007a4c, 0x13 },
- { 0x10007a4d, 0x77 },
- { 0x10007a4e, 0x17 },
- { 0x10007a4f, 0x00 },
- { 0x10007a50, 0xb3 },
- { 0x10007a51, 0x86 },
- { 0x10007a52, 0xe6 },
- { 0x10007a53, 0x40 },
- { 0x10007a54, 0x23 },
- { 0x10007a55, 0x85 },
- { 0x10007a56, 0xd1 },
- { 0x10007a57, 0x42 },
- { 0x10007a58, 0xb7 },
- { 0x10007a59, 0xd5 },
- { 0x10007a5a, 0x00 },
- { 0x10007a5b, 0x00 },
- { 0x10007a5c, 0x03 },
- { 0x10007a5d, 0xc6 },
- { 0x10007a5e, 0x05 },
- { 0x10007a5f, 0x92 },
- { 0x10007a60, 0x13 },
- { 0x10007a61, 0x07 },
- { 0x10007a62, 0x10 },
- { 0x10007a63, 0x00 },
- { 0x10007a64, 0x13 },
- { 0x10007a65, 0x76 },
- { 0x10007a66, 0x16 },
- { 0x10007a67, 0x00 },
- { 0x10007a68, 0x63 },
- { 0x10007a69, 0x1c },
- { 0x10007a6a, 0x06 },
- { 0x10007a6b, 0x00 },
- { 0x10007a6c, 0x03 },
- { 0x10007a6d, 0xc7 },
- { 0x10007a6e, 0x35 },
- { 0x10007a6f, 0x54 },
- { 0x10007a70, 0x13 },
- { 0x10007a71, 0x77 },
- { 0x10007a72, 0xf7 },
- { 0x10007a73, 0x0f },
- { 0x10007a74, 0x13 },
- { 0x10007a75, 0x57 },
- { 0x10007a76, 0x37 },
- { 0x10007a77, 0x00 },
- { 0x10007a78, 0x13 },
- { 0x10007a79, 0x47 },
- { 0x10007a7a, 0x17 },
- { 0x10007a7b, 0x00 },
- { 0x10007a7c, 0x13 },
- { 0x10007a7d, 0x77 },
- { 0x10007a7e, 0x17 },
- { 0x10007a7f, 0x00 },
- { 0x10007a80, 0xa3 },
- { 0x10007a81, 0x84 },
- { 0x10007a82, 0xe1 },
- { 0x10007a83, 0x42 },
- { 0x10007a84, 0xb7 },
- { 0x10007a85, 0xd5 },
- { 0x10007a86, 0x00 },
- { 0x10007a87, 0x00 },
- { 0x10007a88, 0x03 },
- { 0x10007a89, 0xc6 },
- { 0x10007a8a, 0x05 },
- { 0x10007a8b, 0x92 },
- { 0x10007a8c, 0x13 },
- { 0x10007a8d, 0x07 },
- { 0x10007a8e, 0x10 },
- { 0x10007a8f, 0x00 },
- { 0x10007a90, 0x13 },
- { 0x10007a91, 0x76 },
- { 0x10007a92, 0x26 },
- { 0x10007a93, 0x00 },
- { 0x10007a94, 0x63 },
- { 0x10007a95, 0x1c },
- { 0x10007a96, 0x06 },
- { 0x10007a97, 0x00 },
- { 0x10007a98, 0x03 },
- { 0x10007a99, 0xc7 },
- { 0x10007a9a, 0x35 },
- { 0x10007a9b, 0x54 },
- { 0x10007a9c, 0x13 },
- { 0x10007a9d, 0x77 },
- { 0x10007a9e, 0xf7 },
- { 0x10007a9f, 0x0f },
- { 0x10007aa0, 0x13 },
- { 0x10007aa1, 0x57 },
- { 0x10007aa2, 0x27 },
- { 0x10007aa3, 0x00 },
- { 0x10007aa4, 0x13 },
- { 0x10007aa5, 0x47 },
- { 0x10007aa6, 0x17 },
- { 0x10007aa7, 0x00 },
- { 0x10007aa8, 0x13 },
- { 0x10007aa9, 0x77 },
- { 0x10007aaa, 0x17 },
- { 0x10007aab, 0x00 },
- { 0x10007aac, 0x23 },
- { 0x10007aad, 0x84 },
- { 0x10007aae, 0xe1 },
- { 0x10007aaf, 0x42 },
- { 0x10007ab0, 0x63 },
- { 0x10007ab1, 0x84 },
- { 0x10007ab2, 0x07 },
- { 0x10007ab3, 0x00 },
- { 0x10007ab4, 0xe3 },
- { 0x10007ab5, 0x94 },
- { 0x10007ab6, 0x06 },
- { 0x10007ab7, 0xee },
- { 0x10007ab8, 0xef },
- { 0x10007ab9, 0x90 },
- { 0x10007aba, 0x0f },
- { 0x10007abb, 0x86 },
- { 0x10007abc, 0xef },
- { 0x10007abd, 0xd0 },
- { 0x10007abe, 0x0f },
- { 0x10007abf, 0x97 },
- { 0x10007ac0, 0x37 },
- { 0x10007ac1, 0x15 },
- { 0x10007ac2, 0x00 },
- { 0x10007ac3, 0x00 },
- { 0x10007ac4, 0x13 },
- { 0x10007ac5, 0x05 },
- { 0x10007ac6, 0x85 },
- { 0x10007ac7, 0xbb },
- { 0x10007ac8, 0x93 },
- { 0x10007ac9, 0x05 },
- { 0x10007aca, 0x00 },
- { 0x10007acb, 0x00 },
- { 0x10007acc, 0xef },
- { 0x10007acd, 0xd0 },
- { 0x10007ace, 0x9f },
- { 0x10007acf, 0xf5 },
- { 0x10007ad0, 0xb7 },
- { 0x10007ad1, 0xd7 },
- { 0x10007ad2, 0x00 },
- { 0x10007ad3, 0x00 },
- { 0x10007ad4, 0x83 },
- { 0x10007ad5, 0xc7 },
- { 0x10007ad6, 0x07 },
- { 0x10007ad7, 0x47 },
- { 0x10007ad8, 0x93 },
- { 0x10007ad9, 0xf7 },
- { 0x10007ada, 0x47 },
- { 0x10007adb, 0x00 },
- { 0x10007adc, 0xe3 },
- { 0x10007add, 0x80 },
- { 0x10007ade, 0x07 },
- { 0x10007adf, 0xec },
- { 0x10007ae0, 0xef },
- { 0x10007ae1, 0x80 },
- { 0x10007ae2, 0xdf },
- { 0x10007ae3, 0xf4 },
- { 0x10007ae4, 0x23 },
- { 0x10007ae5, 0x89 },
- { 0x10007ae6, 0xa1 },
- { 0x10007ae7, 0x40 },
- { 0x10007ae8, 0x6f },
- { 0x10007ae9, 0xf0 },
- { 0x10007aea, 0x5f },
- { 0x10007aeb, 0xeb },
- { 0x10007aec, 0x00 },
- { 0x10007aed, 0x00 },
- { 0x10007aee, 0x00 },
- { 0x10007aef, 0x00 },
{ 0x3fc2bf83, 0x00 },
{ 0x3fc2bf82, 0x00 },
{ 0x3fc2bf81, 0x00 },
@@ -2112,1330 +228,6 @@ static const struct reg_sequence rt1320_vc_patch_code_write[] = {
{ SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0x03 },
};
-/*
- * The 'patch code' is written to the patch code area.
- * The patch code area is used for SDCA register expansion flexibility.
- */
-static const struct reg_sequence rt1320_patch_code_write[] = {
- { 0x10007000, 0x37 },
- { 0x10007001, 0x77 },
- { 0x10007002, 0x00 },
- { 0x10007003, 0x10 },
- { 0x10007004, 0xb7 },
- { 0x10007005, 0xe7 },
- { 0x10007006, 0x00 },
- { 0x10007007, 0x10 },
- { 0x10007008, 0x13 },
- { 0x10007009, 0x07 },
- { 0x1000700a, 0x07 },
- { 0x1000700b, 0x40 },
- { 0x1000700c, 0x23 },
- { 0x1000700d, 0xae },
- { 0x1000700e, 0xe7 },
- { 0x1000700f, 0xda },
- { 0x10007010, 0x37 },
- { 0x10007011, 0x77 },
- { 0x10007012, 0x00 },
- { 0x10007013, 0x10 },
- { 0x10007014, 0x13 },
- { 0x10007015, 0x07 },
- { 0x10007016, 0x47 },
- { 0x10007017, 0x61 },
- { 0x10007018, 0x23 },
- { 0x10007019, 0xa4 },
- { 0x1000701a, 0xe7 },
- { 0x1000701b, 0xde },
- { 0x1000701c, 0x37 },
- { 0x1000701d, 0x77 },
- { 0x1000701e, 0x00 },
- { 0x1000701f, 0x10 },
- { 0x10007020, 0x13 },
- { 0x10007021, 0x07 },
- { 0x10007022, 0x07 },
- { 0x10007023, 0x52 },
- { 0x10007024, 0x23 },
- { 0x10007025, 0xae },
- { 0x10007026, 0xe7 },
- { 0x10007027, 0xde },
- { 0x10007028, 0x37 },
- { 0x10007029, 0x77 },
- { 0x1000702a, 0x00 },
- { 0x1000702b, 0x10 },
- { 0x1000702c, 0x13 },
- { 0x1000702d, 0x07 },
- { 0x1000702e, 0x47 },
- { 0x1000702f, 0x54 },
- { 0x10007030, 0x23 },
- { 0x10007031, 0xaa },
- { 0x10007032, 0xe7 },
- { 0x10007033, 0xe4 },
- { 0x10007034, 0x37 },
- { 0x10007035, 0x87 },
- { 0x10007036, 0x00 },
- { 0x10007037, 0x10 },
- { 0x10007038, 0x13 },
- { 0x10007039, 0x07 },
- { 0x1000703a, 0x47 },
- { 0x1000703b, 0x81 },
- { 0x1000703c, 0x23 },
- { 0x1000703d, 0xa2 },
- { 0x1000703e, 0xe7 },
- { 0x1000703f, 0xe8 },
- { 0x10007040, 0x23 },
- { 0x10007041, 0xa4 },
- { 0x10007042, 0xe7 },
- { 0x10007043, 0xe8 },
- { 0x10007044, 0x37 },
- { 0x10007045, 0x77 },
- { 0x10007046, 0x00 },
- { 0x10007047, 0x10 },
- { 0x10007048, 0x13 },
- { 0x10007049, 0x07 },
- { 0x1000704a, 0x07 },
- { 0x1000704b, 0x59 },
- { 0x1000704c, 0x23 },
- { 0x1000704d, 0xa8 },
- { 0x1000704e, 0xe7 },
- { 0x1000704f, 0xea },
- { 0x10007050, 0x37 },
- { 0x10007051, 0x77 },
- { 0x10007052, 0x00 },
- { 0x10007053, 0x10 },
- { 0x10007054, 0x13 },
- { 0x10007055, 0x07 },
- { 0x10007056, 0x07 },
- { 0x10007057, 0x78 },
- { 0x10007058, 0x23 },
- { 0x10007059, 0xa6 },
- { 0x1000705a, 0xe7 },
- { 0x1000705b, 0xec },
- { 0x1000705c, 0x67 },
- { 0x1000705d, 0x80 },
- { 0x1000705e, 0x00 },
- { 0x1000705f, 0x00 },
- { 0x10007400, 0x37 },
- { 0x10007401, 0xd7 },
- { 0x10007402, 0x00 },
- { 0x10007403, 0x00 },
- { 0x10007404, 0x83 },
- { 0x10007405, 0x27 },
- { 0x10007406, 0x47 },
- { 0x10007407, 0x56 },
- { 0x10007408, 0xb7 },
- { 0x10007409, 0x06 },
- { 0x1000740a, 0x00 },
- { 0x1000740b, 0x02 },
- { 0x1000740c, 0xb3 },
- { 0x1000740d, 0xf7 },
- { 0x1000740e, 0xd7 },
- { 0x1000740f, 0x00 },
- { 0x10007410, 0x63 },
- { 0x10007411, 0x8a },
- { 0x10007412, 0x07 },
- { 0x10007413, 0x00 },
- { 0x10007414, 0x93 },
- { 0x10007415, 0x06 },
- { 0x10007416, 0x10 },
- { 0x10007417, 0x00 },
- { 0x10007418, 0x23 },
- { 0x10007419, 0x83 },
- { 0x1000741a, 0xd1 },
- { 0x1000741b, 0x44 },
- { 0x1000741c, 0x93 },
- { 0x1000741d, 0x07 },
- { 0x1000741e, 0xf0 },
- { 0x1000741f, 0xff },
- { 0x10007420, 0x23 },
- { 0x10007421, 0x22 },
- { 0x10007422, 0xf7 },
- { 0x10007423, 0x56 },
- { 0x10007424, 0x37 },
- { 0x10007425, 0xd7 },
- { 0x10007426, 0x00 },
- { 0x10007427, 0x00 },
- { 0x10007428, 0x83 },
- { 0x10007429, 0x27 },
- { 0x1000742a, 0x47 },
- { 0x1000742b, 0x58 },
- { 0x1000742c, 0x93 },
- { 0x1000742d, 0xf7 },
- { 0x1000742e, 0x17 },
- { 0x1000742f, 0x00 },
- { 0x10007430, 0x63 },
- { 0x10007431, 0x86 },
- { 0x10007432, 0x07 },
- { 0x10007433, 0x00 },
- { 0x10007434, 0x93 },
- { 0x10007435, 0x07 },
- { 0x10007436, 0x10 },
- { 0x10007437, 0x00 },
- { 0x10007438, 0x23 },
- { 0x10007439, 0x22 },
- { 0x1000743a, 0xf7 },
- { 0x1000743b, 0x58 },
- { 0x1000743c, 0xb7 },
- { 0x1000743d, 0xd7 },
- { 0x1000743e, 0x00 },
- { 0x1000743f, 0x00 },
- { 0x10007440, 0x03 },
- { 0x10007441, 0xa7 },
- { 0x10007442, 0x47 },
- { 0x10007443, 0x58 },
- { 0x10007444, 0xb7 },
- { 0x10007445, 0x07 },
- { 0x10007446, 0x00 },
- { 0x10007447, 0x04 },
- { 0x10007448, 0x33 },
- { 0x10007449, 0x77 },
- { 0x1000744a, 0xf7 },
- { 0x1000744b, 0x00 },
- { 0x1000744c, 0x93 },
- { 0x1000744d, 0x07 },
- { 0x1000744e, 0x00 },
- { 0x1000744f, 0x00 },
- { 0x10007450, 0x63 },
- { 0x10007451, 0x0e },
- { 0x10007452, 0x07 },
- { 0x10007453, 0x04 },
- { 0x10007454, 0x37 },
- { 0x10007455, 0x07 },
- { 0x10007456, 0x00 },
- { 0x10007457, 0x11 },
- { 0x10007458, 0x03 },
- { 0x10007459, 0x47 },
- { 0x1000745a, 0x87 },
- { 0x1000745b, 0x0e },
- { 0x1000745c, 0x93 },
- { 0x1000745d, 0x06 },
- { 0x1000745e, 0x40 },
- { 0x1000745f, 0x00 },
- { 0x10007460, 0x13 },
- { 0x10007461, 0x77 },
- { 0x10007462, 0xf7 },
- { 0x10007463, 0x0f },
- { 0x10007464, 0x63 },
- { 0x10007465, 0x02 },
- { 0x10007466, 0xd7 },
- { 0x10007467, 0x0a },
- { 0x10007468, 0x93 },
- { 0x10007469, 0x06 },
- { 0x1000746a, 0x70 },
- { 0x1000746b, 0x00 },
- { 0x1000746c, 0x63 },
- { 0x1000746d, 0x10 },
- { 0x1000746e, 0xd7 },
- { 0x1000746f, 0x04 },
- { 0x10007470, 0x93 },
- { 0x10007471, 0x07 },
- { 0x10007472, 0x60 },
- { 0x10007473, 0x06 },
- { 0x10007474, 0x37 },
- { 0x10007475, 0xd7 },
- { 0x10007476, 0x00 },
- { 0x10007477, 0x00 },
- { 0x10007478, 0x83 },
- { 0x10007479, 0x46 },
- { 0x1000747a, 0x77 },
- { 0x1000747b, 0xa6 },
- { 0x1000747c, 0x93 },
- { 0x1000747d, 0xe6 },
- { 0x1000747e, 0x06 },
- { 0x1000747f, 0xf8 },
- { 0x10007480, 0x93 },
- { 0x10007481, 0xf6 },
- { 0x10007482, 0xf6 },
- { 0x10007483, 0x0f },
- { 0x10007484, 0xa3 },
- { 0x10007485, 0x03 },
- { 0x10007486, 0xd7 },
- { 0x10007487, 0xa6 },
- { 0x10007488, 0x83 },
- { 0x10007489, 0x46 },
- { 0x1000748a, 0x77 },
- { 0x1000748b, 0xa8 },
- { 0x1000748c, 0x93 },
- { 0x1000748d, 0xe6 },
- { 0x1000748e, 0x06 },
- { 0x1000748f, 0xf8 },
- { 0x10007490, 0x93 },
- { 0x10007491, 0xf6 },
- { 0x10007492, 0xf6 },
- { 0x10007493, 0x0f },
- { 0x10007494, 0xa3 },
- { 0x10007495, 0x03 },
- { 0x10007496, 0xd7 },
- { 0x10007497, 0xa8 },
- { 0x10007498, 0xb7 },
- { 0x10007499, 0xc6 },
- { 0x1000749a, 0x00 },
- { 0x1000749b, 0x00 },
- { 0x1000749c, 0x23 },
- { 0x1000749d, 0x84 },
- { 0x1000749e, 0xf6 },
- { 0x1000749f, 0x06 },
- { 0x100074a0, 0xa3 },
- { 0x100074a1, 0x84 },
- { 0x100074a2, 0xf6 },
- { 0x100074a3, 0x06 },
- { 0x100074a4, 0xb7 },
- { 0x100074a5, 0x06 },
- { 0x100074a6, 0x00 },
- { 0x100074a7, 0x04 },
- { 0x100074a8, 0x23 },
- { 0x100074a9, 0x22 },
- { 0x100074aa, 0xd7 },
- { 0x100074ab, 0x58 },
- { 0x100074ac, 0x37 },
- { 0x100074ad, 0xd7 },
- { 0x100074ae, 0x00 },
- { 0x100074af, 0x00 },
- { 0x100074b0, 0x03 },
- { 0x100074b1, 0x27 },
- { 0x100074b2, 0x47 },
- { 0x100074b3, 0x58 },
- { 0x100074b4, 0xb7 },
- { 0x100074b5, 0x06 },
- { 0x100074b6, 0x00 },
- { 0x100074b7, 0x08 },
- { 0x100074b8, 0x33 },
- { 0x100074b9, 0x77 },
- { 0x100074ba, 0xd7 },
- { 0x100074bb, 0x00 },
- { 0x100074bc, 0x63 },
- { 0x100074bd, 0x04 },
- { 0x100074be, 0x07 },
- { 0x100074bf, 0x04 },
- { 0x100074c0, 0x37 },
- { 0x100074c1, 0x07 },
- { 0x100074c2, 0x00 },
- { 0x100074c3, 0x11 },
- { 0x100074c4, 0x03 },
- { 0x100074c5, 0x47 },
- { 0x100074c6, 0xc7 },
- { 0x100074c7, 0x0e },
- { 0x100074c8, 0x93 },
- { 0x100074c9, 0x06 },
- { 0x100074ca, 0x40 },
- { 0x100074cb, 0x00 },
- { 0x100074cc, 0x13 },
- { 0x100074cd, 0x77 },
- { 0x100074ce, 0xf7 },
- { 0x100074cf, 0x0f },
- { 0x100074d0, 0x63 },
- { 0x100074d1, 0x00 },
- { 0x100074d2, 0xd7 },
- { 0x100074d3, 0x04 },
- { 0x100074d4, 0x93 },
- { 0x100074d5, 0x06 },
- { 0x100074d6, 0x70 },
- { 0x100074d7, 0x00 },
- { 0x100074d8, 0x63 },
- { 0x100074d9, 0x00 },
- { 0x100074da, 0xd7 },
- { 0x100074db, 0x04 },
- { 0x100074dc, 0x63 },
- { 0x100074dd, 0x84 },
- { 0x100074de, 0x07 },
- { 0x100074df, 0x02 },
- { 0x100074e0, 0xb7 },
- { 0x100074e1, 0xd6 },
- { 0x100074e2, 0x00 },
- { 0x100074e3, 0x00 },
- { 0x100074e4, 0x03 },
- { 0x100074e5, 0xc7 },
- { 0x100074e6, 0x56 },
- { 0x100074e7, 0xa4 },
- { 0x100074e8, 0x13 },
- { 0x100074e9, 0x67 },
- { 0x100074ea, 0x07 },
- { 0x100074eb, 0xf8 },
- { 0x100074ec, 0x13 },
- { 0x100074ed, 0x77 },
- { 0x100074ee, 0xf7 },
- { 0x100074ef, 0x0f },
- { 0x100074f0, 0xa3 },
- { 0x100074f1, 0x82 },
- { 0x100074f2, 0xe6 },
- { 0x100074f3, 0xa4 },
- { 0x100074f4, 0x37 },
- { 0x100074f5, 0xc7 },
- { 0x100074f6, 0x00 },
- { 0x100074f7, 0x00 },
- { 0x100074f8, 0x23 },
- { 0x100074f9, 0x02 },
- { 0x100074fa, 0xf7 },
- { 0x100074fb, 0x06 },
- { 0x100074fc, 0xb7 },
- { 0x100074fd, 0x07 },
- { 0x100074fe, 0x00 },
- { 0x100074ff, 0x08 },
- { 0x10007500, 0x23 },
- { 0x10007501, 0xa2 },
- { 0x10007502, 0xf6 },
- { 0x10007503, 0x58 },
- { 0x10007504, 0x67 },
- { 0x10007505, 0x80 },
- { 0x10007506, 0x00 },
- { 0x10007507, 0x00 },
- { 0x10007508, 0x93 },
- { 0x10007509, 0x07 },
- { 0x1000750a, 0x80 },
- { 0x1000750b, 0x08 },
- { 0x1000750c, 0x6f },
- { 0x1000750d, 0xf0 },
- { 0x1000750e, 0x9f },
- { 0x1000750f, 0xf6 },
- { 0x10007510, 0x93 },
- { 0x10007511, 0x07 },
- { 0x10007512, 0x80 },
- { 0x10007513, 0x08 },
- { 0x10007514, 0x6f },
- { 0x10007515, 0xf0 },
- { 0x10007516, 0xdf },
- { 0x10007517, 0xfc },
- { 0x10007518, 0x93 },
- { 0x10007519, 0x07 },
- { 0x1000751a, 0x60 },
- { 0x1000751b, 0x06 },
- { 0x1000751c, 0x6f },
- { 0x1000751d, 0xf0 },
- { 0x1000751e, 0x5f },
- { 0x1000751f, 0xfc },
- { 0x10007520, 0x37 },
- { 0x10007521, 0xd7 },
- { 0x10007522, 0x00 },
- { 0x10007523, 0x00 },
- { 0x10007524, 0x83 },
- { 0x10007525, 0x27 },
- { 0x10007526, 0x07 },
- { 0x10007527, 0x53 },
- { 0x10007528, 0xb7 },
- { 0x10007529, 0x06 },
- { 0x1000752a, 0x02 },
- { 0x1000752b, 0x00 },
- { 0x1000752c, 0xb3 },
- { 0x1000752d, 0xf7 },
- { 0x1000752e, 0xd7 },
- { 0x1000752f, 0x00 },
- { 0x10007530, 0x63 },
- { 0x10007531, 0x88 },
- { 0x10007532, 0x07 },
- { 0x10007533, 0x00 },
- { 0x10007534, 0x13 },
- { 0x10007535, 0x06 },
- { 0x10007536, 0xa0 },
- { 0x10007537, 0x05 },
- { 0x10007538, 0x23 },
- { 0x10007539, 0xa8 },
- { 0x1000753a, 0xc1 },
- { 0x1000753b, 0x56 },
- { 0x1000753c, 0x23 },
- { 0x1000753d, 0x28 },
- { 0x1000753e, 0xd7 },
- { 0x1000753f, 0x52 },
- { 0x10007540, 0x67 },
- { 0x10007541, 0x80 },
- { 0x10007542, 0x00 },
- { 0x10007543, 0x00 },
- { 0x10007544, 0x37 },
- { 0x10007545, 0xd7 },
- { 0x10007546, 0x00 },
- { 0x10007547, 0x10 },
- { 0x10007548, 0x83 },
- { 0x10007549, 0x47 },
- { 0x1000754a, 0x07 },
- { 0x1000754b, 0xd9 },
- { 0x1000754c, 0x93 },
- { 0x1000754d, 0x06 },
- { 0x1000754e, 0x20 },
- { 0x1000754f, 0x00 },
- { 0x10007550, 0x93 },
- { 0x10007551, 0xf7 },
- { 0x10007552, 0xf7 },
- { 0x10007553, 0x0f },
- { 0x10007554, 0x63 },
- { 0x10007555, 0x9c },
- { 0x10007556, 0xd7 },
- { 0x10007557, 0x02 },
- { 0x10007558, 0xb7 },
- { 0x10007559, 0xc6 },
- { 0x1000755a, 0x00 },
- { 0x1000755b, 0x00 },
- { 0x1000755c, 0x83 },
- { 0x1000755d, 0xc7 },
- { 0x1000755e, 0x26 },
- { 0x1000755f, 0x04 },
- { 0x10007560, 0x93 },
- { 0x10007561, 0xf7 },
- { 0x10007562, 0xf7 },
- { 0x10007563, 0x07 },
- { 0x10007564, 0x23 },
- { 0x10007565, 0x81 },
- { 0x10007566, 0xf6 },
- { 0x10007567, 0x04 },
- { 0x10007568, 0xb7 },
- { 0x10007569, 0xd6 },
- { 0x1000756a, 0x00 },
- { 0x1000756b, 0x00 },
- { 0x1000756c, 0x83 },
- { 0x1000756d, 0xc7 },
- { 0x1000756e, 0xa6 },
- { 0x1000756f, 0xe1 },
- { 0x10007570, 0x93 },
- { 0x10007571, 0xf7 },
- { 0x10007572, 0xf7 },
- { 0x10007573, 0x07 },
- { 0x10007574, 0x23 },
- { 0x10007575, 0x8d },
- { 0x10007576, 0xf6 },
- { 0x10007577, 0xe0 },
- { 0x10007578, 0x23 },
- { 0x10007579, 0x08 },
- { 0x1000757a, 0x07 },
- { 0x1000757b, 0xd8 },
- { 0x1000757c, 0x83 },
- { 0x1000757d, 0x47 },
- { 0x1000757e, 0x47 },
- { 0x1000757f, 0xd9 },
- { 0x10007580, 0x93 },
- { 0x10007581, 0x87 },
- { 0x10007582, 0x17 },
- { 0x10007583, 0x00 },
- { 0x10007584, 0x93 },
- { 0x10007585, 0xf7 },
- { 0x10007586, 0xf7 },
- { 0x10007587, 0x0f },
- { 0x10007588, 0x23 },
- { 0x10007589, 0x0a },
- { 0x1000758a, 0xf7 },
- { 0x1000758b, 0xd8 },
- { 0x1000758c, 0x67 },
- { 0x1000758d, 0x80 },
- { 0x1000758e, 0x00 },
- { 0x1000758f, 0x00 },
- { 0x10007590, 0xb7 },
- { 0x10007591, 0xd7 },
- { 0x10007592, 0x00 },
- { 0x10007593, 0x00 },
- { 0x10007594, 0x83 },
- { 0x10007595, 0xc7 },
- { 0x10007596, 0x07 },
- { 0x10007597, 0x47 },
- { 0x10007598, 0x93 },
- { 0x10007599, 0xf7 },
- { 0x1000759a, 0x07 },
- { 0x1000759b, 0x01 },
- { 0x1000759c, 0x63 },
- { 0x1000759d, 0x8a },
- { 0x1000759e, 0x07 },
- { 0x1000759f, 0x06 },
- { 0x100075a0, 0x63 },
- { 0x100075a1, 0x02 },
- { 0x100075a2, 0x05 },
- { 0x100075a3, 0x06 },
- { 0x100075a4, 0x37 },
- { 0x100075a5, 0xc7 },
- { 0x100075a6, 0x00 },
- { 0x100075a7, 0x00 },
- { 0x100075a8, 0x83 },
- { 0x100075a9, 0x27 },
- { 0x100075aa, 0xc7 },
- { 0x100075ab, 0x5f },
- { 0x100075ac, 0x23 },
- { 0x100075ad, 0xae },
- { 0x100075ae, 0xf1 },
- { 0x100075af, 0x40 },
- { 0x100075b0, 0xb7 },
- { 0x100075b1, 0x06 },
- { 0x100075b2, 0x00 },
- { 0x100075b3, 0x10 },
- { 0x100075b4, 0xb3 },
- { 0x100075b5, 0xf7 },
- { 0x100075b6, 0xd7 },
- { 0x100075b7, 0x00 },
- { 0x100075b8, 0x63 },
- { 0x100075b9, 0x8c },
- { 0x100075ba, 0x07 },
- { 0x100075bb, 0x04 },
- { 0x100075bc, 0x83 },
- { 0x100075bd, 0x47 },
- { 0x100075be, 0x07 },
- { 0x100075bf, 0x56 },
- { 0x100075c0, 0x93 },
- { 0x100075c1, 0xf7 },
- { 0x100075c2, 0x87 },
- { 0x100075c3, 0x01 },
- { 0x100075c4, 0x63 },
- { 0x100075c5, 0x86 },
- { 0x100075c6, 0x07 },
- { 0x100075c7, 0x04 },
- { 0x100075c8, 0x83 },
- { 0x100075c9, 0x47 },
- { 0x100075ca, 0x17 },
- { 0x100075cb, 0x08 },
- { 0x100075cc, 0x93 },
- { 0x100075cd, 0xf7 },
- { 0x100075ce, 0x47 },
- { 0x100075cf, 0x00 },
- { 0x100075d0, 0x63 },
- { 0x100075d1, 0x80 },
- { 0x100075d2, 0x07 },
- { 0x100075d3, 0x04 },
- { 0x100075d4, 0xb7 },
- { 0x100075d5, 0xc7 },
- { 0x100075d6, 0xc2 },
- { 0x100075d7, 0x3f },
- { 0x100075d8, 0x93 },
- { 0x100075d9, 0x87 },
- { 0x100075da, 0x07 },
- { 0x100075db, 0xfc },
- { 0x100075dc, 0x83 },
- { 0x100075dd, 0xa7 },
- { 0x100075de, 0x47 },
- { 0x100075df, 0x00 },
- { 0x100075e0, 0x93 },
- { 0x100075e1, 0xd7 },
- { 0x100075e2, 0x17 },
- { 0x100075e3, 0x00 },
- { 0x100075e4, 0x93 },
- { 0x100075e5, 0xf7 },
- { 0x100075e6, 0x17 },
- { 0x100075e7, 0x00 },
- { 0x100075e8, 0x63 },
- { 0x100075e9, 0x84 },
- { 0x100075ea, 0x07 },
- { 0x100075eb, 0x02 },
- { 0x100075ec, 0x23 },
- { 0x100075ed, 0x8a },
- { 0x100075ee, 0xf1 },
- { 0x100075ef, 0x40 },
- { 0x100075f0, 0xb7 },
- { 0x100075f1, 0x07 },
- { 0x100075f2, 0x00 },
- { 0x100075f3, 0xc0 },
- { 0x100075f4, 0x37 },
- { 0x100075f5, 0xf7 },
- { 0x100075f6, 0x00 },
- { 0x100075f7, 0x00 },
- { 0x100075f8, 0x93 },
- { 0x100075f9, 0x87 },
- { 0x100075fa, 0xf7 },
- { 0x100075fb, 0xff },
- { 0x100075fc, 0x23 },
- { 0x100075fd, 0x2c },
- { 0x100075fe, 0xf7 },
- { 0x100075ff, 0x06 },
- { 0x10007600, 0x67 },
- { 0x10007601, 0x80 },
- { 0x10007602, 0x00 },
- { 0x10007603, 0x00 },
- { 0x10007604, 0x23 },
- { 0x10007605, 0x8a },
- { 0x10007606, 0x01 },
- { 0x10007607, 0x40 },
- { 0x10007608, 0xb7 },
- { 0x10007609, 0xf7 },
- { 0x1000760a, 0x00 },
- { 0x1000760b, 0x00 },
- { 0x1000760c, 0x23 },
- { 0x1000760d, 0xac },
- { 0x1000760e, 0x07 },
- { 0x1000760f, 0x06 },
- { 0x10007610, 0x67 },
- { 0x10007611, 0x80 },
- { 0x10007612, 0x00 },
- { 0x10007613, 0x00 },
- { 0x10007614, 0x13 },
- { 0x10007615, 0x01 },
- { 0x10007616, 0x01 },
- { 0x10007617, 0xff },
- { 0x10007618, 0x23 },
- { 0x10007619, 0x26 },
- { 0x1000761a, 0x11 },
- { 0x1000761b, 0x00 },
- { 0x1000761c, 0x23 },
- { 0x1000761d, 0x24 },
- { 0x1000761e, 0x81 },
- { 0x1000761f, 0x00 },
- { 0x10007620, 0x37 },
- { 0x10007621, 0xc7 },
- { 0x10007622, 0x00 },
- { 0x10007623, 0x00 },
- { 0x10007624, 0x83 },
- { 0x10007625, 0x47 },
- { 0x10007626, 0x07 },
- { 0x10007627, 0x56 },
- { 0x10007628, 0x93 },
- { 0x10007629, 0xf7 },
- { 0x1000762a, 0x17 },
- { 0x1000762b, 0x00 },
- { 0x1000762c, 0x63 },
- { 0x1000762d, 0x98 },
- { 0x1000762e, 0x07 },
- { 0x1000762f, 0x00 },
- { 0x10007630, 0x83 },
- { 0x10007631, 0x47 },
- { 0x10007632, 0x07 },
- { 0x10007633, 0x56 },
- { 0x10007634, 0x93 },
- { 0x10007635, 0xf7 },
- { 0x10007636, 0x27 },
- { 0x10007637, 0x00 },
- { 0x10007638, 0x63 },
- { 0x10007639, 0x82 },
- { 0x1000763a, 0x07 },
- { 0x1000763b, 0x08 },
- { 0x1000763c, 0x37 },
- { 0x1000763d, 0xd4 },
- { 0x1000763e, 0x00 },
- { 0x1000763f, 0x00 },
- { 0x10007640, 0x83 },
- { 0x10007641, 0x47 },
- { 0x10007642, 0x14 },
- { 0x10007643, 0x47 },
- { 0x10007644, 0x93 },
- { 0x10007645, 0xf7 },
- { 0x10007646, 0x27 },
- { 0x10007647, 0x00 },
- { 0x10007648, 0x63 },
- { 0x10007649, 0x8a },
- { 0x1000764a, 0x07 },
- { 0x1000764b, 0x06 },
- { 0x1000764c, 0x93 },
- { 0x1000764d, 0x05 },
- { 0x1000764e, 0x10 },
- { 0x1000764f, 0x00 },
- { 0x10007650, 0x13 },
- { 0x10007651, 0x05 },
- { 0x10007652, 0x20 },
- { 0x10007653, 0x10 },
- { 0x10007654, 0xef },
- { 0x10007655, 0xa0 },
- { 0x10007656, 0x8f },
- { 0x10007657, 0x9a },
- { 0x10007658, 0x37 },
- { 0x10007659, 0x05 },
- { 0x1000765a, 0x01 },
- { 0x1000765b, 0x00 },
- { 0x1000765c, 0x93 },
- { 0x1000765d, 0x05 },
- { 0x1000765e, 0x00 },
- { 0x1000765f, 0x01 },
- { 0x10007660, 0x13 },
- { 0x10007661, 0x05 },
- { 0x10007662, 0xb5 },
- { 0x10007663, 0xa0 },
- { 0x10007664, 0xef },
- { 0x10007665, 0xa0 },
- { 0x10007666, 0x8f },
- { 0x10007667, 0x99 },
- { 0x10007668, 0x83 },
- { 0x10007669, 0x47 },
- { 0x1000766a, 0x24 },
- { 0x1000766b, 0xe0 },
- { 0x1000766c, 0x13 },
- { 0x1000766d, 0x05 },
- { 0x1000766e, 0x80 },
- { 0x1000766f, 0x3e },
- { 0x10007670, 0x93 },
- { 0x10007671, 0x05 },
- { 0x10007672, 0x00 },
- { 0x10007673, 0x00 },
- { 0x10007674, 0x93 },
- { 0x10007675, 0xe7 },
- { 0x10007676, 0x07 },
- { 0x10007677, 0xf8 },
- { 0x10007678, 0x93 },
- { 0x10007679, 0xf7 },
- { 0x1000767a, 0xf7 },
- { 0x1000767b, 0x0f },
- { 0x1000767c, 0x23 },
- { 0x1000767d, 0x01 },
- { 0x1000767e, 0xf4 },
- { 0x1000767f, 0xe0 },
- { 0x10007680, 0x83 },
- { 0x10007681, 0x47 },
- { 0x10007682, 0x24 },
- { 0x10007683, 0xe0 },
- { 0x10007684, 0x93 },
- { 0x10007685, 0xf7 },
- { 0x10007686, 0xf7 },
- { 0x10007687, 0x0f },
- { 0x10007688, 0x93 },
- { 0x10007689, 0xe7 },
- { 0x1000768a, 0x07 },
- { 0x1000768b, 0x04 },
- { 0x1000768c, 0x23 },
- { 0x1000768d, 0x01 },
- { 0x1000768e, 0xf4 },
- { 0x1000768f, 0xe0 },
- { 0x10007690, 0xef },
- { 0x10007691, 0xe0 },
- { 0x10007692, 0x8f },
- { 0x10007693, 0xb9 },
- { 0x10007694, 0x83 },
- { 0x10007695, 0x47 },
- { 0x10007696, 0x34 },
- { 0x10007697, 0xe0 },
- { 0x10007698, 0x93 },
- { 0x10007699, 0xf7 },
- { 0x1000769a, 0x07 },
- { 0x1000769b, 0x02 },
- { 0x1000769c, 0xe3 },
- { 0x1000769d, 0x9c },
- { 0x1000769e, 0x07 },
- { 0x1000769f, 0xfe },
- { 0x100076a0, 0x37 },
- { 0x100076a1, 0x05 },
- { 0x100076a2, 0x01 },
- { 0x100076a3, 0x00 },
- { 0x100076a4, 0x93 },
- { 0x100076a5, 0x05 },
- { 0x100076a6, 0x00 },
- { 0x100076a7, 0x00 },
- { 0x100076a8, 0x13 },
- { 0x100076a9, 0x05 },
- { 0x100076aa, 0xb5 },
- { 0x100076ab, 0xa0 },
- { 0x100076ac, 0xef },
- { 0x100076ad, 0xa0 },
- { 0x100076ae, 0x0f },
- { 0x100076af, 0x95 },
- { 0x100076b0, 0x83 },
- { 0x100076b1, 0x47 },
- { 0x100076b2, 0x14 },
- { 0x100076b3, 0x47 },
- { 0x100076b4, 0x93 },
- { 0x100076b5, 0xf7 },
- { 0x100076b6, 0xd7 },
- { 0x100076b7, 0x0f },
- { 0x100076b8, 0xa3 },
- { 0x100076b9, 0x08 },
- { 0x100076ba, 0xf4 },
- { 0x100076bb, 0x46 },
- { 0x100076bc, 0x03 },
- { 0x100076bd, 0xa7 },
- { 0x100076be, 0x01 },
- { 0x100076bf, 0x57 },
- { 0x100076c0, 0x93 },
- { 0x100076c1, 0x07 },
- { 0x100076c2, 0xa0 },
- { 0x100076c3, 0x05 },
- { 0x100076c4, 0x63 },
- { 0x100076c5, 0x14 },
- { 0x100076c6, 0xf7 },
- { 0x100076c7, 0x04 },
- { 0x100076c8, 0x37 },
- { 0x100076c9, 0x07 },
- { 0x100076ca, 0x00 },
- { 0x100076cb, 0x11 },
- { 0x100076cc, 0x83 },
- { 0x100076cd, 0x47 },
- { 0x100076ce, 0x07 },
- { 0x100076cf, 0x01 },
- { 0x100076d0, 0x13 },
- { 0x100076d1, 0x06 },
- { 0x100076d2, 0x30 },
- { 0x100076d3, 0x00 },
- { 0x100076d4, 0x93 },
- { 0x100076d5, 0xf7 },
- { 0x100076d6, 0xf7 },
- { 0x100076d7, 0x0f },
- { 0x100076d8, 0x63 },
- { 0x100076d9, 0x9a },
- { 0x100076da, 0xc7 },
- { 0x100076db, 0x02 },
- { 0x100076dc, 0x03 },
- { 0x100076dd, 0x47 },
- { 0x100076de, 0x87 },
- { 0x100076df, 0x01 },
- { 0x100076e0, 0x13 },
- { 0x100076e1, 0x77 },
- { 0x100076e2, 0xf7 },
- { 0x100076e3, 0x0f },
- { 0x100076e4, 0x63 },
- { 0x100076e5, 0x14 },
- { 0x100076e6, 0xf7 },
- { 0x100076e7, 0x02 },
- { 0x100076e8, 0x37 },
- { 0x100076e9, 0xd7 },
- { 0x100076ea, 0x00 },
- { 0x100076eb, 0x00 },
- { 0x100076ec, 0x83 },
- { 0x100076ed, 0x47 },
- { 0x100076ee, 0x37 },
- { 0x100076ef, 0x54 },
- { 0x100076f0, 0x93 },
- { 0x100076f1, 0xf7 },
- { 0x100076f2, 0xf7 },
- { 0x100076f3, 0x0f },
- { 0x100076f4, 0x93 },
- { 0x100076f5, 0xe7 },
- { 0x100076f6, 0x07 },
- { 0x100076f7, 0x02 },
- { 0x100076f8, 0xa3 },
- { 0x100076f9, 0x01 },
- { 0x100076fa, 0xf7 },
- { 0x100076fb, 0x54 },
- { 0x100076fc, 0x83 },
- { 0x100076fd, 0x47 },
- { 0x100076fe, 0x37 },
- { 0x100076ff, 0x54 },
- { 0x10007700, 0x93 },
- { 0x10007701, 0xf7 },
- { 0x10007702, 0xf7 },
- { 0x10007703, 0x0d },
- { 0x10007704, 0xa3 },
- { 0x10007705, 0x01 },
- { 0x10007706, 0xf7 },
- { 0x10007707, 0x54 },
- { 0x10007708, 0x23 },
- { 0x10007709, 0xa8 },
- { 0x1000770a, 0x01 },
- { 0x1000770b, 0x56 },
- { 0x1000770c, 0xb7 },
- { 0x1000770d, 0xd7 },
- { 0x1000770e, 0x00 },
- { 0x1000770f, 0x10 },
- { 0x10007710, 0x03 },
- { 0x10007711, 0xc7 },
- { 0x10007712, 0x07 },
- { 0x10007713, 0xd9 },
- { 0x10007714, 0x93 },
- { 0x10007715, 0x06 },
- { 0x10007716, 0x10 },
- { 0x10007717, 0x00 },
- { 0x10007718, 0x13 },
- { 0x10007719, 0x77 },
- { 0x1000771a, 0xf7 },
- { 0x1000771b, 0x0f },
- { 0x1000771c, 0x63 },
- { 0x1000771d, 0x1a },
- { 0x1000771e, 0xd7 },
- { 0x1000771f, 0x04 },
- { 0x10007720, 0x03 },
- { 0x10007721, 0xc7 },
- { 0x10007722, 0x27 },
- { 0x10007723, 0xd9 },
- { 0x10007724, 0x13 },
- { 0x10007725, 0x07 },
- { 0x10007726, 0x17 },
- { 0x10007727, 0x00 },
- { 0x10007728, 0x13 },
- { 0x10007729, 0x77 },
- { 0x1000772a, 0xf7 },
- { 0x1000772b, 0x0f },
- { 0x1000772c, 0x23 },
- { 0x1000772d, 0x89 },
- { 0x1000772e, 0xe7 },
- { 0x1000772f, 0xd8 },
- { 0x10007730, 0x83 },
- { 0x10007731, 0xc6 },
- { 0x10007732, 0x27 },
- { 0x10007733, 0xd9 },
- { 0x10007734, 0x03 },
- { 0x10007735, 0xc7 },
- { 0x10007736, 0x17 },
- { 0x10007737, 0xd9 },
- { 0x10007738, 0x93 },
- { 0x10007739, 0xf6 },
- { 0x1000773a, 0xf6 },
- { 0x1000773b, 0x0f },
- { 0x1000773c, 0x13 },
- { 0x1000773d, 0x77 },
- { 0x1000773e, 0xf7 },
- { 0x1000773f, 0x0f },
- { 0x10007740, 0x63 },
- { 0x10007741, 0xe8 },
- { 0x10007742, 0xe6 },
- { 0x10007743, 0x02 },
- { 0x10007744, 0xb7 },
- { 0x10007745, 0xd6 },
- { 0x10007746, 0x00 },
- { 0x10007747, 0x00 },
- { 0x10007748, 0x03 },
- { 0x10007749, 0xc7 },
- { 0x1000774a, 0xa6 },
- { 0x1000774b, 0xe1 },
- { 0x1000774c, 0x13 },
- { 0x1000774d, 0x67 },
- { 0x1000774e, 0x07 },
- { 0x1000774f, 0xf8 },
- { 0x10007750, 0x13 },
- { 0x10007751, 0x77 },
- { 0x10007752, 0xf7 },
- { 0x10007753, 0x0f },
- { 0x10007754, 0x23 },
- { 0x10007755, 0x8d },
- { 0x10007756, 0xe6 },
- { 0x10007757, 0xe0 },
- { 0x10007758, 0x03 },
- { 0x10007759, 0xc7 },
- { 0x1000775a, 0x37 },
- { 0x1000775b, 0xd9 },
- { 0x1000775c, 0x13 },
- { 0x1000775d, 0x07 },
- { 0x1000775e, 0x17 },
- { 0x1000775f, 0x00 },
- { 0x10007760, 0x13 },
- { 0x10007761, 0x77 },
- { 0x10007762, 0xf7 },
- { 0x10007763, 0x0f },
- { 0x10007764, 0xa3 },
- { 0x10007765, 0x89 },
- { 0x10007766, 0xe7 },
- { 0x10007767, 0xd8 },
- { 0x10007768, 0x13 },
- { 0x10007769, 0x07 },
- { 0x1000776a, 0x20 },
- { 0x1000776b, 0x00 },
- { 0x1000776c, 0x23 },
- { 0x1000776d, 0x88 },
- { 0x1000776e, 0xe7 },
- { 0x1000776f, 0xd8 },
- { 0x10007770, 0x83 },
- { 0x10007771, 0x20 },
- { 0x10007772, 0xc1 },
- { 0x10007773, 0x00 },
- { 0x10007774, 0x03 },
- { 0x10007775, 0x24 },
- { 0x10007776, 0x81 },
- { 0x10007777, 0x00 },
- { 0x10007778, 0x13 },
- { 0x10007779, 0x01 },
- { 0x1000777a, 0x01 },
- { 0x1000777b, 0x01 },
- { 0x1000777c, 0x67 },
- { 0x1000777d, 0x80 },
- { 0x1000777e, 0x00 },
- { 0x1000777f, 0x00 },
- { 0x10007780, 0x03 },
- { 0x10007781, 0xc7 },
- { 0x10007782, 0xa1 },
- { 0x10007783, 0x40 },
- { 0x10007784, 0x93 },
- { 0x10007785, 0x06 },
- { 0x10007786, 0x10 },
- { 0x10007787, 0x00 },
- { 0x10007788, 0x63 },
- { 0x10007789, 0x16 },
- { 0x1000778a, 0xd7 },
- { 0x1000778b, 0x00 },
- { 0x1000778c, 0xb7 },
- { 0x1000778d, 0xd6 },
- { 0x1000778e, 0x00 },
- { 0x1000778f, 0x10 },
- { 0x10007790, 0xa3 },
- { 0x10007791, 0x8a },
- { 0x10007792, 0xe6 },
- { 0x10007793, 0xd8 },
- { 0x10007794, 0x83 },
- { 0x10007795, 0xc7 },
- { 0x10007796, 0xa1 },
- { 0x10007797, 0x40 },
- { 0x10007798, 0x63 },
- { 0x10007799, 0x9c },
- { 0x1000779a, 0x07 },
- { 0x1000779b, 0x06 },
- { 0x1000779c, 0x13 },
- { 0x1000779d, 0x01 },
- { 0x1000779e, 0x01 },
- { 0x1000779f, 0xff },
- { 0x100077a0, 0x23 },
- { 0x100077a1, 0x22 },
- { 0x100077a2, 0x91 },
- { 0x100077a3, 0x00 },
- { 0x100077a4, 0x23 },
- { 0x100077a5, 0x26 },
- { 0x100077a6, 0x11 },
- { 0x100077a7, 0x00 },
- { 0x100077a8, 0x23 },
- { 0x100077a9, 0x24 },
- { 0x100077aa, 0x81 },
- { 0x100077ab, 0x00 },
- { 0x100077ac, 0xb7 },
- { 0x100077ad, 0xc4 },
- { 0x100077ae, 0x00 },
- { 0x100077af, 0x00 },
- { 0x100077b0, 0x83 },
- { 0x100077b1, 0xc7 },
- { 0x100077b2, 0x04 },
- { 0x100077b3, 0x56 },
- { 0x100077b4, 0x13 },
- { 0x100077b5, 0x07 },
- { 0x100077b6, 0x80 },
- { 0x100077b7, 0x01 },
- { 0x100077b8, 0x93 },
- { 0x100077b9, 0xf7 },
- { 0x100077ba, 0xf7 },
- { 0x100077bb, 0x0f },
- { 0x100077bc, 0x63 },
- { 0x100077bd, 0x70 },
- { 0x100077be, 0xf7 },
- { 0x100077bf, 0x04 },
- { 0x100077c0, 0x37 },
- { 0x100077c1, 0xd4 },
- { 0x100077c2, 0x00 },
- { 0x100077c3, 0x10 },
- { 0x100077c4, 0x83 },
- { 0x100077c5, 0x47 },
- { 0x100077c6, 0x54 },
- { 0x100077c7, 0xd9 },
- { 0x100077c8, 0x93 },
- { 0x100077c9, 0xf7 },
- { 0x100077ca, 0xf7 },
- { 0x100077cb, 0x0f },
- { 0x100077cc, 0x63 },
- { 0x100077cd, 0x88 },
- { 0x100077ce, 0x07 },
- { 0x100077cf, 0x02 },
- { 0x100077d0, 0x93 },
- { 0x100077d1, 0x07 },
- { 0x100077d2, 0x10 },
- { 0x100077d3, 0x00 },
- { 0x100077d4, 0x23 },
- { 0x100077d5, 0x82 },
- { 0x100077d6, 0xf4 },
- { 0x100077d7, 0x58 },
- { 0x100077d8, 0x03 },
- { 0x100077d9, 0x45 },
- { 0x100077da, 0x64 },
- { 0x100077db, 0xd9 },
- { 0x100077dc, 0xb7 },
- { 0x100077dd, 0x15 },
- { 0x100077de, 0x00 },
- { 0x100077df, 0x00 },
- { 0x100077e0, 0x93 },
- { 0x100077e1, 0x85 },
- { 0x100077e2, 0x85 },
- { 0x100077e3, 0x38 },
- { 0x100077e4, 0x13 },
- { 0x100077e5, 0x75 },
- { 0x100077e6, 0xf5 },
- { 0x100077e7, 0x0f },
- { 0x100077e8, 0xef },
- { 0x100077e9, 0xe0 },
- { 0x100077ea, 0x9f },
- { 0x100077eb, 0xd0 },
- { 0x100077ec, 0x93 },
- { 0x100077ed, 0x55 },
- { 0x100077ee, 0xf5 },
- { 0x100077ef, 0x41 },
- { 0x100077f0, 0xef },
- { 0x100077f1, 0xe0 },
- { 0x100077f2, 0x8f },
- { 0x100077f3, 0xa3 },
- { 0x100077f4, 0x23 },
- { 0x100077f5, 0x82 },
- { 0x100077f6, 0x04 },
- { 0x100077f7, 0x58 },
- { 0x100077f8, 0xa3 },
- { 0x100077f9, 0x0a },
- { 0x100077fa, 0x04 },
- { 0x100077fb, 0xd8 },
- { 0x100077fc, 0x83 },
- { 0x100077fd, 0x20 },
- { 0x100077fe, 0xc1 },
- { 0x100077ff, 0x00 },
- { 0x10007800, 0x03 },
- { 0x10007801, 0x24 },
- { 0x10007802, 0x81 },
- { 0x10007803, 0x00 },
- { 0x10007804, 0x83 },
- { 0x10007805, 0x24 },
- { 0x10007806, 0x41 },
- { 0x10007807, 0x00 },
- { 0x10007808, 0x13 },
- { 0x10007809, 0x01 },
- { 0x1000780a, 0x01 },
- { 0x1000780b, 0x01 },
- { 0x1000780c, 0x67 },
- { 0x1000780d, 0x80 },
- { 0x1000780e, 0x00 },
- { 0x1000780f, 0x00 },
- { 0x10007810, 0x67 },
- { 0x10007811, 0x80 },
- { 0x10007812, 0x00 },
- { 0x10007813, 0x00 },
- { 0x10007814, 0x13 },
- { 0x10007815, 0x01 },
- { 0x10007816, 0x01 },
- { 0x10007817, 0xff },
- { 0x10007818, 0x23 },
- { 0x10007819, 0x26 },
- { 0x1000781a, 0x11 },
- { 0x1000781b, 0x00 },
- { 0x1000781c, 0xef },
- { 0x1000781d, 0xd0 },
- { 0x1000781e, 0x8f },
- { 0x1000781f, 0x86 },
- { 0x10007820, 0x83 },
- { 0x10007821, 0xc7 },
- { 0x10007822, 0x11 },
- { 0x10007823, 0x42 },
- { 0x10007824, 0x63 },
- { 0x10007825, 0x86 },
- { 0x10007826, 0x07 },
- { 0x10007827, 0x00 },
- { 0x10007828, 0x03 },
- { 0x10007829, 0xc7 },
- { 0x1000782a, 0x01 },
- { 0x1000782b, 0x42 },
- { 0x1000782c, 0x63 },
- { 0x1000782d, 0x10 },
- { 0x1000782e, 0x07 },
- { 0x1000782f, 0x02 },
- { 0x10007830, 0x83 },
- { 0x10007831, 0xc6 },
- { 0x10007832, 0x21 },
- { 0x10007833, 0x41 },
- { 0x10007834, 0x13 },
- { 0x10007835, 0x07 },
- { 0x10007836, 0xf0 },
- { 0x10007837, 0x01 },
- { 0x10007838, 0x13 },
- { 0x10007839, 0x05 },
- { 0x1000783a, 0xf0 },
- { 0x1000783b, 0x01 },
- { 0x1000783c, 0x63 },
- { 0x1000783d, 0x98 },
- { 0x1000783e, 0xe6 },
- { 0x1000783f, 0x02 },
- { 0x10007840, 0x63 },
- { 0x10007841, 0x8a },
- { 0x10007842, 0x07 },
- { 0x10007843, 0x02 },
- { 0x10007844, 0x83 },
- { 0x10007845, 0xc7 },
- { 0x10007846, 0x01 },
- { 0x10007847, 0x42 },
- { 0x10007848, 0x63 },
- { 0x10007849, 0x86 },
- { 0x1000784a, 0x07 },
- { 0x1000784b, 0x02 },
- { 0x1000784c, 0x83 },
- { 0x1000784d, 0xc7 },
- { 0x1000784e, 0x31 },
- { 0x1000784f, 0x42 },
- { 0x10007850, 0x63 },
- { 0x10007851, 0x86 },
- { 0x10007852, 0x07 },
- { 0x10007853, 0x00 },
- { 0x10007854, 0x83 },
- { 0x10007855, 0xc7 },
- { 0x10007856, 0x21 },
- { 0x10007857, 0x42 },
- { 0x10007858, 0x63 },
- { 0x10007859, 0x9e },
- { 0x1000785a, 0x07 },
- { 0x1000785b, 0x00 },
- { 0x1000785c, 0x03 },
- { 0x1000785d, 0xc7 },
- { 0x1000785e, 0x21 },
- { 0x1000785f, 0x41 },
- { 0x10007860, 0x93 },
- { 0x10007861, 0x07 },
- { 0x10007862, 0xb0 },
- { 0x10007863, 0x01 },
- { 0x10007864, 0x63 },
- { 0x10007865, 0x08 },
- { 0x10007866, 0xf7 },
- { 0x10007867, 0x00 },
- { 0x10007868, 0x13 },
- { 0x10007869, 0x05 },
- { 0x1000786a, 0xb0 },
- { 0x1000786b, 0x01 },
- { 0x1000786c, 0xef },
- { 0x1000786d, 0xd0 },
- { 0x1000786e, 0x0f },
- { 0x1000786f, 0xcf },
- { 0x10007870, 0xef },
- { 0x10007871, 0xd0 },
- { 0x10007872, 0x8f },
- { 0x10007873, 0xa4 },
- { 0x10007874, 0x93 },
- { 0x10007875, 0x06 },
- { 0x10007876, 0x10 },
- { 0x10007877, 0x00 },
- { 0x10007878, 0xa3 },
- { 0x10007879, 0x89 },
- { 0x1000787a, 0xd1 },
- { 0x1000787b, 0x40 },
- { 0x1000787c, 0x37 },
- { 0x1000787d, 0xd7 },
- { 0x1000787e, 0x00 },
- { 0x1000787f, 0x10 },
- { 0x10007880, 0x83 },
- { 0x10007881, 0x47 },
- { 0x10007882, 0x07 },
- { 0x10007883, 0xd9 },
- { 0x10007884, 0x93 },
- { 0x10007885, 0xf7 },
- { 0x10007886, 0xf7 },
- { 0x10007887, 0x0f },
- { 0x10007888, 0x63 },
- { 0x10007889, 0x90 },
- { 0x1000788a, 0x07 },
- { 0x1000788b, 0x02 },
- { 0x1000788c, 0x37 },
- { 0x1000788d, 0xc6 },
- { 0x1000788e, 0x00 },
- { 0x1000788f, 0x00 },
- { 0x10007890, 0x83 },
- { 0x10007891, 0x47 },
- { 0x10007892, 0x26 },
- { 0x10007893, 0x04 },
- { 0x10007894, 0x93 },
- { 0x10007895, 0xe7 },
- { 0x10007896, 0x07 },
- { 0x10007897, 0xf8 },
- { 0x10007898, 0x93 },
- { 0x10007899, 0xf7 },
- { 0x1000789a, 0xf7 },
- { 0x1000789b, 0x0f },
- { 0x1000789c, 0x23 },
- { 0x1000789d, 0x01 },
- { 0x1000789e, 0xf6 },
- { 0x1000789f, 0x04 },
- { 0x100078a0, 0x23 },
- { 0x100078a1, 0x08 },
- { 0x100078a2, 0xd7 },
- { 0x100078a3, 0xd8 },
- { 0x100078a4, 0x23 },
- { 0x100078a5, 0x09 },
- { 0x100078a6, 0x07 },
- { 0x100078a7, 0xd8 },
- { 0x100078a8, 0x83 },
- { 0x100078a9, 0x20 },
- { 0x100078aa, 0xc1 },
- { 0x100078ab, 0x00 },
- { 0x100078ac, 0x13 },
- { 0x100078ad, 0x01 },
- { 0x100078ae, 0x01 },
- { 0x100078af, 0x01 },
- { 0x100078b0, 0x67 },
- { 0x100078b1, 0x80 },
- { 0x100078b2, 0x00 },
- { 0x100078b3, 0x00 },
- { 0x3fc2bfc7, 0x00 },
- { 0x3fc2bfc6, 0x00 },
- { 0x3fc2bfc5, 0x00 },
- { 0x3fc2bfc4, 0x01 },
- { 0x0000d486, 0x43 },
- { 0x1000db00, 0x02 },
- { 0x1000db01, 0x00 },
- { 0x1000db02, 0x11 },
- { 0x1000db03, 0x00 },
- { 0x1000db04, 0x00 },
- { 0x1000db05, 0x82 },
- { 0x1000db06, 0x04 },
- { 0x1000db07, 0xf1 },
- { 0x1000db08, 0x00 },
- { 0x1000db09, 0x00 },
- { 0x1000db0a, 0x40 },
- { 0x0000d540, 0x01 },
-};
-
static const struct reg_default rt1320_reg_defaults[] = {
{ SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_01), 0x01 },
{ SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_02), 0x01 },
@@ -3733,17 +525,88 @@ static int rt1320_pde_transition_delay(struct rt1320_sdw_priv *rt1320, unsigned
return 0;
}
+/*
+ * The 'patch code' is written to the patch code area.
+ * The patch code area is used for SDCA register expansion flexibility.
+ */
+static void rt1320_load_mcu_patch(struct rt1320_sdw_priv *rt1320)
+{
+ struct sdw_slave *slave = rt1320->sdw_slave;
+ const struct firmware *patch;
+ const char *filename;
+ unsigned int addr, val;
+ const unsigned char *ptr;
+ int ret, i;
+
+ if (rt1320->version_id <= RT1320_VB)
+ filename = RT1320_VAB_MCU_PATCH;
+ else
+ filename = RT1320_VC_MCU_PATCH;
+
+ /* load the patch code here */
+ ret = request_firmware(&patch, filename, &slave->dev);
+ if (ret) {
+ dev_err(&slave->dev, "%s: Failed to load %s firmware", __func__, filename);
+ regmap_write(rt1320->regmap, 0xc598, 0x00);
+ regmap_write(rt1320->regmap, 0x10007000, 0x67);
+ regmap_write(rt1320->regmap, 0x10007001, 0x80);
+ regmap_write(rt1320->regmap, 0x10007002, 0x00);
+ regmap_write(rt1320->regmap, 0x10007003, 0x00);
+ } else {
+ ptr = (const unsigned char *)patch->data;
+ if ((patch->size % 8) == 0) {
+ for (i = 0; i < patch->size; i += 8) {
+ addr = (ptr[i] & 0xff) | (ptr[i + 1] & 0xff) << 8 |
+ (ptr[i + 2] & 0xff) << 16 | (ptr[i + 3] & 0xff) << 24;
+ val = (ptr[i + 4] & 0xff) | (ptr[i + 5] & 0xff) << 8 |
+ (ptr[i + 6] & 0xff) << 16 | (ptr[i + 7] & 0xff) << 24;
+
+ if (addr > 0x10007fff || addr < 0x10007000) {
+ dev_err(&slave->dev, "%s: the address 0x%x is wrong", __func__, addr);
+ goto _exit_;
+ }
+ if (val > 0xff) {
+ dev_err(&slave->dev, "%s: the value 0x%x is wrong", __func__, val);
+ goto _exit_;
+ }
+ regmap_write(rt1320->regmap, addr, val);
+ }
+ }
+_exit_:
+ release_firmware(patch);
+ }
+}
+
+static void rt1320_vab_preset(struct rt1320_sdw_priv *rt1320)
+{
+ unsigned int i, reg, val, delay;
+
+ for (i = 0; i < ARRAY_SIZE(rt1320_blind_write); i++) {
+ reg = rt1320_blind_write[i].reg;
+ val = rt1320_blind_write[i].def;
+ delay = rt1320_blind_write[i].delay_us;
+
+ if (reg == 0x3fc2bfc7)
+ rt1320_load_mcu_patch(rt1320);
+
+ regmap_write(rt1320->regmap, reg, val);
+ if (delay)
+ usleep_range(delay, delay + 1000);
+ }
+}
+
static void rt1320_vc_preset(struct rt1320_sdw_priv *rt1320)
{
struct sdw_slave *slave = rt1320->sdw_slave;
unsigned int i, reg, val, delay, retry, tmp;
- regmap_multi_reg_write(rt1320->regmap, rt1320_vc_blind_write, ARRAY_SIZE(rt1320_vc_blind_write));
+ for (i = 0; i < ARRAY_SIZE(rt1320_vc_blind_write); i++) {
+ reg = rt1320_vc_blind_write[i].reg;
+ val = rt1320_vc_blind_write[i].def;
+ delay = rt1320_vc_blind_write[i].delay_us;
- for (i = 0; i < ARRAY_SIZE(rt1320_vc_patch_code_write); i++) {
- reg = rt1320_vc_patch_code_write[i].reg;
- val = rt1320_vc_patch_code_write[i].def;
- delay = rt1320_vc_patch_code_write[i].delay_us;
+ if (reg == 0x3fc2bf83)
+ rt1320_load_mcu_patch(rt1320);
if ((reg == SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0)) &&
(val == 0x00)) {
@@ -3762,6 +625,9 @@ static void rt1320_vc_preset(struct rt1320_sdw_priv *rt1320)
regmap_write(rt1320->regmap, reg, val);
if (delay)
usleep_range(delay, delay + 1000);
+
+ if (reg == SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0))
+ rt1320_pde_transition_delay(rt1320, val);
}
}
@@ -3799,13 +665,10 @@ static int rt1320_io_init(struct device *dev, struct sdw_slave *slave)
/* initialization write */
if ((amp_func_status & FUNCTION_NEEDS_INITIALIZATION)) {
- if (rt1320->version_id < RT1320_VC) {
- regmap_multi_reg_write(rt1320->regmap, rt1320_blind_write, ARRAY_SIZE(rt1320_blind_write));
- regmap_multi_reg_write(rt1320->regmap, rt1320_patch_code_write,
- ARRAY_SIZE(rt1320_patch_code_write));
- } else if (rt1320->version_id == RT1320_VC) {
+ if (rt1320->version_id < RT1320_VC)
+ rt1320_vab_preset(rt1320);
+ else
rt1320_vc_preset(rt1320);
- }
regmap_write(rt1320->regmap,
SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT0, RT1320_SDCA_CTL_FUNC_STATUS, 0),
diff --git a/sound/soc/codecs/rt1320-sdw.h b/sound/soc/codecs/rt1320-sdw.h
index 1fbc1fcd71cf..95ef9d37c6db 100644
--- a/sound/soc/codecs/rt1320-sdw.h
+++ b/sound/soc/codecs/rt1320-sdw.h
@@ -82,6 +82,8 @@ enum rt1320_version_id {
};
#define RT1320_VER_B_ID 0x07392238
+#define RT1320_VAB_MCU_PATCH "realtek/rt1320/rt1320-patch-code-vab.bin"
+#define RT1320_VC_MCU_PATCH "realtek/rt1320/rt1320-patch-code-vc.bin"
struct rt1320_sdw_priv {
struct snd_soc_component *component;
diff --git a/sound/soc/codecs/spdif_receiver.c b/sound/soc/codecs/spdif_receiver.c
index 310123d2bb5f..c9766979b1d7 100644
--- a/sound/soc/codecs/spdif_receiver.c
+++ b/sound/soc/codecs/spdif_receiver.c
@@ -36,7 +36,7 @@ static const struct snd_soc_dapm_route dir_routes[] = {
SNDRV_PCM_FMTBIT_S32_LE | \
SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE)
-static struct snd_soc_component_driver soc_codec_spdif_dir = {
+static const struct snd_soc_component_driver soc_codec_spdif_dir = {
.dapm_widgets = dir_widgets,
.num_dapm_widgets = ARRAY_SIZE(dir_widgets),
.dapm_routes = dir_routes,
diff --git a/sound/soc/codecs/spdif_transmitter.c b/sound/soc/codecs/spdif_transmitter.c
index db51a46e689d..2409fd834f84 100644
--- a/sound/soc/codecs/spdif_transmitter.c
+++ b/sound/soc/codecs/spdif_transmitter.c
@@ -36,7 +36,7 @@ static const struct snd_soc_dapm_route dit_routes[] = {
{ "spdif-out", NULL, "Playback" },
};
-static struct snd_soc_component_driver soc_codec_spdif_dit = {
+static const struct snd_soc_component_driver soc_codec_spdif_dit = {
.dapm_widgets = dit_widgets,
.num_dapm_widgets = ARRAY_SIZE(dit_widgets),
.dapm_routes = dit_routes,
diff --git a/sound/soc/codecs/tas2781-i2c.c b/sound/soc/codecs/tas2781-i2c.c
index d0ba7cbe03a8..4b04a076f510 100644
--- a/sound/soc/codecs/tas2781-i2c.c
+++ b/sound/soc/codecs/tas2781-i2c.c
@@ -650,7 +650,6 @@ static int tasdev_tf_data_get(struct snd_kcontrol *kcontrol,
(struct soc_bytes_ext *) kcontrol->private_value;
unsigned char *dst = ucontrol->value.bytes.data;
unsigned int reg;
- int rc = -1;
if (tas_priv->chip_id == TAS2781)
reg = TAS2781_RUNTIME_RE_REG_TF;
@@ -659,9 +658,7 @@ static int tasdev_tf_data_get(struct snd_kcontrol *kcontrol,
guard(mutex)(&tas_priv->codec_lock);
dst[0] = bytes_ext->max;
- rc = calib_data_get(tas_priv, reg, &dst[1]);
-
- return rc;
+ return calib_data_get(tas_priv, reg, &dst[1]);
}
static int tasdev_re_data_get(struct snd_kcontrol *kcontrol,
@@ -673,7 +670,6 @@ static int tasdev_re_data_get(struct snd_kcontrol *kcontrol,
(struct soc_bytes_ext *) kcontrol->private_value;
unsigned char *dst = ucontrol->value.bytes.data;
unsigned int reg;
- int rc = -1;
if (tas_priv->chip_id == TAS2781)
reg = TAS2781_RUNTIME_RE_REG;
@@ -681,9 +677,7 @@ static int tasdev_re_data_get(struct snd_kcontrol *kcontrol,
reg = TAS2563_RUNTIME_RE_REG;
guard(mutex)(&tas_priv->codec_lock);
dst[0] = bytes_ext->max;
- rc = calib_data_get(tas_priv, reg, &dst[1]);
-
- return rc;
+ return calib_data_get(tas_priv, reg, &dst[1]);
}
static int tasdev_r0_data_get(struct snd_kcontrol *kcontrol,
@@ -696,7 +690,6 @@ static int tasdev_r0_data_get(struct snd_kcontrol *kcontrol,
(struct soc_bytes_ext *) kcontrol->private_value;
unsigned char *dst = ucontrol->value.bytes.data;
unsigned int reg;
- int rc = -1;
guard(mutex)(&tas_priv->codec_lock);
@@ -707,9 +700,7 @@ static int tasdev_r0_data_get(struct snd_kcontrol *kcontrol,
else
return -1;
dst[0] = bytes_ext->max;
- rc = calib_data_get(tas_priv, reg, &dst[1]);
-
- return rc;
+ return calib_data_get(tas_priv, reg, &dst[1]);
}
static int tasdev_XMA1_data_get(struct snd_kcontrol *kcontrol,
@@ -721,13 +712,10 @@ static int tasdev_XMA1_data_get(struct snd_kcontrol *kcontrol,
(struct soc_bytes_ext *) kcontrol->private_value;
unsigned char *dst = ucontrol->value.bytes.data;
unsigned int reg = TASDEVICE_XM_A1_REG;
- int rc = -1;
guard(mutex)(&tas_priv->codec_lock);
dst[0] = bytes_ext->max;
- rc = calib_data_get(tas_priv, reg, &dst[1]);
-
- return rc;
+ return calib_data_get(tas_priv, reg, &dst[1]);
}
static int tasdev_XMA2_data_get(struct snd_kcontrol *kcontrol,
@@ -739,13 +727,10 @@ static int tasdev_XMA2_data_get(struct snd_kcontrol *kcontrol,
(struct soc_bytes_ext *) kcontrol->private_value;
unsigned char *dst = ucontrol->value.bytes.data;
unsigned int reg = TASDEVICE_XM_A2_REG;
- int rc = -1;
guard(mutex)(&tas_priv->codec_lock);
dst[0] = bytes_ext->max;
- rc = calib_data_get(tas_priv, reg, &dst[1]);
-
- return rc;
+ return calib_data_get(tas_priv, reg, &dst[1]);
}
static int tasdev_nop_get(
@@ -1115,14 +1100,12 @@ static int tasdevice_active_num_put(struct snd_kcontrol *kcontrol,
struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol);
struct tasdevice_priv *tas_priv = snd_soc_component_get_drvdata(codec);
int dev_id = ucontrol->value.integer.value[0];
- int max = tas_priv->ndev - 1, rc;
+ int max = tas_priv->ndev - 1;
dev_id = clamp(dev_id, 0, max);
guard(mutex)(&tas_priv->codec_lock);
- rc = tasdev_chn_switch(tas_priv, dev_id);
-
- return rc;
+ return tasdev_chn_switch(tas_priv, dev_id);
}
static int tasdevice_dsp_create_ctrls(struct tasdevice_priv *tas_priv)
@@ -1339,10 +1322,8 @@ static int tasdevice_create_cali_ctrls(struct tasdevice_priv *priv)
i++;
}
- rc = snd_soc_add_component_controls(priv->codec, cali_ctrls,
+ return snd_soc_add_component_controls(priv->codec, cali_ctrls,
nctrls < i ? nctrls : i);
-
- return rc;
}
static void tasdevice_fw_ready(const struct firmware *fmw,
diff --git a/sound/soc/codecs/tas5805m.c b/sound/soc/codecs/tas5805m.c
index 3b53eba38a0b..4c32500eef3e 100644
--- a/sound/soc/codecs/tas5805m.c
+++ b/sound/soc/codecs/tas5805m.c
@@ -474,7 +474,7 @@ static int tas5805m_i2c_probe(struct i2c_client *i2c)
return ret;
}
- tas5805m = devm_kzalloc(dev, sizeof(struct tas5805m_priv), GFP_KERNEL);
+ tas5805m = devm_kzalloc(dev, sizeof(*tas5805m), GFP_KERNEL);
if (!tas5805m)
return -ENOMEM;
diff --git a/sound/soc/codecs/tas6424.c b/sound/soc/codecs/tas6424.c
index bb0500e9d3ea..9be054837f68 100644
--- a/sound/soc/codecs/tas6424.c
+++ b/sound/soc/codecs/tas6424.c
@@ -364,7 +364,7 @@ static int tas6424_set_bias_level(struct snd_soc_component *component,
return 0;
}
-static struct snd_soc_component_driver soc_codec_dev_tas6424 = {
+static const struct snd_soc_component_driver soc_codec_dev_tas6424 = {
.set_bias_level = tas6424_set_bias_level,
.controls = tas6424_snd_controls,
.num_controls = ARRAY_SIZE(tas6424_snd_controls),
diff --git a/sound/soc/codecs/tlv320adc3xxx.c b/sound/soc/codecs/tlv320adc3xxx.c
index 7073b9d1cda8..868e8a91e05b 100644
--- a/sound/soc/codecs/tlv320adc3xxx.c
+++ b/sound/soc/codecs/tlv320adc3xxx.c
@@ -961,7 +961,7 @@ static int adc3xxx_gpio_request(struct gpio_chip *chip, unsigned int offset)
if (offset >= ADC3XXX_GPIOS_MAX)
return -EINVAL;
- if (offset >= 0 && offset < ADC3XXX_GPIO_PINS) {
+ if (offset < ADC3XXX_GPIO_PINS) {
/* GPIO1 is offset 0, GPIO2 is offset 1 */
/* We check here that the GPIO pins are either not configured
* in the DT, or that they purposely are set as outputs.
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index 9c50ac356c89..e3782762139f 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -555,7 +555,7 @@ static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control =
* On unmute: restore the register content from the reg_cache
* Outputs handled in this way: Earpiece, PreDrivL/R, CarkitL/R
*/
-#define TWL4030_OUTPUT_PGA(pin_name, reg, mask) \
+#define TWL4030_OUTPUT_PGA(pin_name, reg) \
static int pin_name##pga_event(struct snd_soc_dapm_widget *w, \
struct snd_kcontrol *kcontrol, int event) \
{ \
@@ -575,11 +575,11 @@ static int pin_name##pga_event(struct snd_soc_dapm_widget *w, \
return 0; \
}
-TWL4030_OUTPUT_PGA(earpiece, TWL4030_REG_EAR_CTL, TWL4030_EAR_GAIN);
-TWL4030_OUTPUT_PGA(predrivel, TWL4030_REG_PREDL_CTL, TWL4030_PREDL_GAIN);
-TWL4030_OUTPUT_PGA(predriver, TWL4030_REG_PREDR_CTL, TWL4030_PREDR_GAIN);
-TWL4030_OUTPUT_PGA(carkitl, TWL4030_REG_PRECKL_CTL, TWL4030_PRECKL_GAIN);
-TWL4030_OUTPUT_PGA(carkitr, TWL4030_REG_PRECKR_CTL, TWL4030_PRECKR_GAIN);
+TWL4030_OUTPUT_PGA(earpiece, TWL4030_REG_EAR_CTL);
+TWL4030_OUTPUT_PGA(predrivel, TWL4030_REG_PREDL_CTL);
+TWL4030_OUTPUT_PGA(predriver, TWL4030_REG_PREDR_CTL);
+TWL4030_OUTPUT_PGA(carkitl, TWL4030_REG_PRECKL_CTL);
+TWL4030_OUTPUT_PGA(carkitr, TWL4030_REG_PRECKR_CTL);
static void handsfree_ramp(struct snd_soc_component *component, int reg, int ramp)
{
diff --git a/sound/soc/codecs/wcd9335.c b/sound/soc/codecs/wcd9335.c
index 373a31ddccb2..a2521e16c099 100644
--- a/sound/soc/codecs/wcd9335.c
+++ b/sound/soc/codecs/wcd9335.c
@@ -5177,4 +5177,3 @@ static struct slim_driver wcd9335_slim_driver = {
module_slim_driver(wcd9335_slim_driver);
MODULE_DESCRIPTION("WCD9335 slim driver");
MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("slim:217:1a0:*");
diff --git a/sound/soc/fsl/fsl_aud2htx.c b/sound/soc/fsl/fsl_aud2htx.c
index 021d73e409aa..bde642318835 100644
--- a/sound/soc/fsl/fsl_aud2htx.c
+++ b/sound/soc/fsl/fsl_aud2htx.c
@@ -169,7 +169,7 @@ static const struct regmap_config fsl_aud2htx_regmap_config = {
.readable_reg = fsl_aud2htx_readable_reg,
.volatile_reg = fsl_aud2htx_volatile_reg,
.writeable_reg = fsl_aud2htx_writeable_reg,
- .cache_type = REGCACHE_RBTREE,
+ .cache_type = REGCACHE_MAPLE,
};
static const struct of_device_id fsl_aud2htx_dt_ids[] = {
diff --git a/sound/soc/fsl/fsl_easrc.c b/sound/soc/fsl/fsl_easrc.c
index 82359edd6a8b..d22f0621c465 100644
--- a/sound/soc/fsl/fsl_easrc.c
+++ b/sound/soc/fsl/fsl_easrc.c
@@ -1748,7 +1748,7 @@ static const struct regmap_config fsl_easrc_regmap_config = {
.rd_table = &fsl_easrc_readable_table,
.wr_table = &fsl_easrc_writeable_table,
.volatile_table = &fsl_easrc_volatileable_table,
- .cache_type = REGCACHE_RBTREE,
+ .cache_type = REGCACHE_MAPLE,
};
#ifdef DEBUG
diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c
index 193be098fa5e..4e65966d54fc 100644
--- a/sound/soc/fsl/fsl_micfil.c
+++ b/sound/soc/fsl/fsl_micfil.c
@@ -58,6 +58,7 @@ struct fsl_micfil {
int vad_detected;
struct fsl_micfil_verid verid;
struct fsl_micfil_param param;
+ bool mclk_flag; /* mclk enable flag */
};
struct fsl_micfil_soc_data {
@@ -650,7 +651,7 @@ static int fsl_micfil_trigger(struct snd_pcm_substream *substream, int cmd,
/* Enable the module */
ret = regmap_set_bits(micfil->regmap, REG_MICFIL_CTRL1,
- MICFIL_CTRL1_PDMIEN);
+ MICFIL_CTRL1_PDMIEN | MICFIL_CTRL1_ERREN);
if (ret)
return ret;
@@ -666,7 +667,7 @@ static int fsl_micfil_trigger(struct snd_pcm_substream *substream, int cmd,
/* Disable the module */
ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1,
- MICFIL_CTRL1_PDMIEN);
+ MICFIL_CTRL1_PDMIEN | MICFIL_CTRL1_ERREN);
if (ret)
return ret;
@@ -693,7 +694,6 @@ static int fsl_micfil_reparent_rootclk(struct fsl_micfil *micfil, unsigned int s
clk = micfil->mclk;
/* Disable clock first, for it was enabled by pm_runtime */
- clk_disable_unprepare(clk);
fsl_asoc_reparent_pll_clocks(dev, clk, micfil->pll8k_clk,
micfil->pll11k_clk, ratio);
ret = clk_prepare_enable(clk);
@@ -730,6 +730,8 @@ static int fsl_micfil_hw_params(struct snd_pcm_substream *substream,
if (ret)
return ret;
+ micfil->mclk_flag = true;
+
ret = clk_set_rate(micfil->mclk, rate * clk_div * osr * 8);
if (ret)
return ret;
@@ -764,6 +766,17 @@ static int fsl_micfil_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static int fsl_micfil_hw_free(struct snd_pcm_substream *substream,
+ struct snd_soc_dai *dai)
+{
+ struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai);
+
+ clk_disable_unprepare(micfil->mclk);
+ micfil->mclk_flag = false;
+
+ return 0;
+}
+
static int fsl_micfil_dai_probe(struct snd_soc_dai *cpu_dai)
{
struct fsl_micfil *micfil = dev_get_drvdata(cpu_dai->dev);
@@ -806,6 +819,7 @@ static const struct snd_soc_dai_ops fsl_micfil_dai_ops = {
.startup = fsl_micfil_startup,
.trigger = fsl_micfil_trigger,
.hw_params = fsl_micfil_hw_params,
+ .hw_free = fsl_micfil_hw_free,
};
static struct snd_soc_dai_driver fsl_micfil_dai = {
@@ -926,6 +940,7 @@ static bool fsl_micfil_volatile_reg(struct device *dev, unsigned int reg)
{
switch (reg) {
case REG_MICFIL_STAT:
+ case REG_MICFIL_FIFO_STAT:
case REG_MICFIL_DATACH0:
case REG_MICFIL_DATACH1:
case REG_MICFIL_DATACH2:
@@ -934,6 +949,7 @@ static bool fsl_micfil_volatile_reg(struct device *dev, unsigned int reg)
case REG_MICFIL_DATACH5:
case REG_MICFIL_DATACH6:
case REG_MICFIL_DATACH7:
+ case REG_MICFIL_OUT_STAT:
case REG_MICFIL_VERID:
case REG_MICFIL_PARAM:
case REG_MICFIL_VAD0_STAT:
@@ -955,7 +971,7 @@ static const struct regmap_config fsl_micfil_regmap_config = {
.readable_reg = fsl_micfil_readable_reg,
.volatile_reg = fsl_micfil_volatile_reg,
.writeable_reg = fsl_micfil_writeable_reg,
- .cache_type = REGCACHE_RBTREE,
+ .cache_type = REGCACHE_MAPLE,
};
/* END OF REGMAP */
@@ -988,7 +1004,7 @@ static irqreturn_t micfil_isr(int irq, void *devid)
regmap_write_bits(micfil->regmap,
REG_MICFIL_STAT,
MICFIL_STAT_CHXF(i),
- 1);
+ MICFIL_STAT_CHXF(i));
}
for (i = 0; i < MICFIL_FIFO_NUM; i++) {
@@ -1010,6 +1026,8 @@ static irqreturn_t micfil_err_isr(int irq, void *devid)
{
struct fsl_micfil *micfil = (struct fsl_micfil *)devid;
struct platform_device *pdev = micfil->pdev;
+ u32 fifo_stat_reg;
+ u32 out_stat_reg;
u32 stat_reg;
regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg);
@@ -1023,9 +1041,17 @@ static irqreturn_t micfil_err_isr(int irq, void *devid)
if (stat_reg & MICFIL_STAT_LOWFREQF) {
dev_dbg(&pdev->dev, "isr: ipg_clk_app is too low\n");
regmap_write_bits(micfil->regmap, REG_MICFIL_STAT,
- MICFIL_STAT_LOWFREQF, 1);
+ MICFIL_STAT_LOWFREQF, MICFIL_STAT_LOWFREQF);
}
+ regmap_read(micfil->regmap, REG_MICFIL_FIFO_STAT, &fifo_stat_reg);
+ regmap_write_bits(micfil->regmap, REG_MICFIL_FIFO_STAT,
+ fifo_stat_reg, fifo_stat_reg);
+
+ regmap_read(micfil->regmap, REG_MICFIL_OUT_STAT, &out_stat_reg);
+ regmap_write_bits(micfil->regmap, REG_MICFIL_OUT_STAT,
+ out_stat_reg, out_stat_reg);
+
return IRQ_HANDLED;
}
@@ -1279,7 +1305,8 @@ static int fsl_micfil_runtime_suspend(struct device *dev)
regcache_cache_only(micfil->regmap, true);
- clk_disable_unprepare(micfil->mclk);
+ if (micfil->mclk_flag)
+ clk_disable_unprepare(micfil->mclk);
clk_disable_unprepare(micfil->busclk);
return 0;
@@ -1294,10 +1321,12 @@ static int fsl_micfil_runtime_resume(struct device *dev)
if (ret < 0)
return ret;
- ret = clk_prepare_enable(micfil->mclk);
- if (ret < 0) {
- clk_disable_unprepare(micfil->busclk);
- return ret;
+ if (micfil->mclk_flag) {
+ ret = clk_prepare_enable(micfil->mclk);
+ if (ret < 0) {
+ clk_disable_unprepare(micfil->busclk);
+ return ret;
+ }
}
regcache_cache_only(micfil->regmap, false);
diff --git a/sound/soc/fsl/fsl_qmc_audio.c b/sound/soc/fsl/fsl_qmc_audio.c
index 8668abd35208..e257b8adafe0 100644
--- a/sound/soc/fsl/fsl_qmc_audio.c
+++ b/sound/soc/fsl/fsl_qmc_audio.c
@@ -838,8 +838,6 @@ static int qmc_audio_dai_parse(struct qmc_audio *qmc_audio, struct device_node *
qmc_dai->id, i, ret);
return ret;
}
- dev_info(qmc_audio->dev, "dai %d QMC channel %d mode %d, nb_tx_ts %u, nb_rx_ts %u\n",
- qmc_dai->id, i, info.mode, info.nb_tx_ts, info.nb_rx_ts);
if (info.mode != QMC_TRANSPARENT) {
dev_err(qmc_audio->dev, "dai %d QMC chan %d mode %d is not QMC_TRANSPARENT\n",
diff --git a/sound/soc/meson/axg-tdm-interface.c b/sound/soc/meson/axg-tdm-interface.c
index 62057c71f742..09103eef2a97 100644
--- a/sound/soc/meson/axg-tdm-interface.c
+++ b/sound/soc/meson/axg-tdm-interface.c
@@ -442,14 +442,18 @@ static const struct snd_soc_dai_driver axg_tdm_iface_dai_drv[] = {
.stream_name = "Playback",
.channels_min = 1,
.channels_max = AXG_TDM_CHANNEL_MAX,
- .rates = AXG_TDM_RATES,
+ .rates = SNDRV_PCM_RATE_CONTINUOUS,
+ .rate_min = 5512,
+ .rate_max = 768000,
.formats = AXG_TDM_FORMATS,
},
.capture = {
.stream_name = "Capture",
.channels_min = 1,
.channels_max = AXG_TDM_CHANNEL_MAX,
- .rates = AXG_TDM_RATES,
+ .rates = SNDRV_PCM_RATE_CONTINUOUS,
+ .rate_min = 5512,
+ .rate_max = 768000,
.formats = AXG_TDM_FORMATS,
},
.id = TDM_IFACE_PAD,
@@ -461,7 +465,9 @@ static const struct snd_soc_dai_driver axg_tdm_iface_dai_drv[] = {
.stream_name = "Loopback",
.channels_min = 1,
.channels_max = AXG_TDM_CHANNEL_MAX,
- .rates = AXG_TDM_RATES,
+ .rates = SNDRV_PCM_RATE_CONTINUOUS,
+ .rate_min = 5512,
+ .rate_max = 768000,
.formats = AXG_TDM_FORMATS,
},
.id = TDM_IFACE_LOOPBACK,
diff --git a/sound/soc/meson/axg-tdm.h b/sound/soc/meson/axg-tdm.h
index 1a17f546ce6e..acfcd48f8a00 100644
--- a/sound/soc/meson/axg-tdm.h
+++ b/sound/soc/meson/axg-tdm.h
@@ -15,8 +15,6 @@
#define AXG_TDM_NUM_LANES 4
#define AXG_TDM_CHANNEL_MAX 128
-#define AXG_TDM_RATES (SNDRV_PCM_RATE_5512 | \
- SNDRV_PCM_RATE_8000_768000)
#define AXG_TDM_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S20_LE | \
diff --git a/sound/soc/sh/rz-ssi.c b/sound/soc/sh/rz-ssi.c
index 040ce0431fd2..6efd017aaa7f 100644
--- a/sound/soc/sh/rz-ssi.c
+++ b/sound/soc/sh/rz-ssi.c
@@ -311,8 +311,7 @@ static int rz_ssi_clk_setup(struct rz_ssi_priv *ssi, unsigned int rate,
ssicr |= SSICR_CKDV(clk_ckdv);
ssicr |= SSICR_DWL(1) | SSICR_SWL(3);
rz_ssi_reg_writel(ssi, SSICR, ssicr);
- rz_ssi_reg_writel(ssi, SSIFCR,
- (SSIFCR_AUCKE | SSIFCR_TFRST | SSIFCR_RFRST));
+ rz_ssi_reg_writel(ssi, SSIFCR, SSIFCR_AUCKE | SSIFCR_FIFO_RST);
return 0;
}
@@ -343,8 +342,7 @@ static void rz_ssi_set_idle(struct rz_ssi_priv *ssi)
dev_info(ssi->dev, "timeout waiting for SSI idle\n");
/* Hold FIFOs in reset */
- rz_ssi_reg_mask_setl(ssi, SSIFCR, 0,
- SSIFCR_TFRST | SSIFCR_RFRST);
+ rz_ssi_reg_mask_setl(ssi, SSIFCR, 0, SSIFCR_FIFO_RST);
}
static int rz_ssi_start(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c
index b3d7bb91e294..b67ef78f405c 100644
--- a/sound/soc/soc-component.c
+++ b/sound/soc/soc-component.c
@@ -58,7 +58,7 @@ static inline int soc_component_field_shift(struct snd_soc_component *component,
* In such case, we can update these macros.
*/
#define soc_component_mark_push(component, substream, tgt) ((component)->mark_##tgt = substream)
-#define soc_component_mark_pop(component, substream, tgt) ((component)->mark_##tgt = NULL)
+#define soc_component_mark_pop(component, tgt) ((component)->mark_##tgt = NULL)
#define soc_component_mark_match(component, substream, tgt) ((component)->mark_##tgt == substream)
void snd_soc_component_set_aux(struct snd_soc_component *component,
@@ -339,7 +339,7 @@ void snd_soc_component_module_put(struct snd_soc_component *component,
module_put(component->dev->driver->owner);
/* remove the mark from module */
- soc_component_mark_pop(component, mark, module);
+ soc_component_mark_pop(component, module);
}
int snd_soc_component_open(struct snd_soc_component *component,
@@ -370,7 +370,7 @@ int snd_soc_component_close(struct snd_soc_component *component,
ret = component->driver->close(component, substream);
/* remove marked substream */
- soc_component_mark_pop(component, substream, open);
+ soc_component_mark_pop(component, open);
return soc_component_ret(component, ret);
}
@@ -515,7 +515,7 @@ void snd_soc_component_compr_free(struct snd_soc_component *component,
component->driver->compress_ops->free(component, cstream);
/* remove marked substream */
- soc_component_mark_pop(component, cstream, compr_open);
+ soc_component_mark_pop(component, compr_open);
}
EXPORT_SYMBOL_GPL(snd_soc_component_compr_free);
@@ -1210,7 +1210,7 @@ void snd_soc_pcm_component_hw_free(struct snd_pcm_substream *substream,
}
/* remove marked substream */
- soc_component_mark_pop(component, substream, hw_params);
+ soc_component_mark_pop(component, hw_params);
}
}
@@ -1254,7 +1254,7 @@ int snd_soc_pcm_component_trigger(struct snd_pcm_substream *substream,
r = soc_component_trigger(component, substream, cmd);
if (r < 0)
ret = r; /* use last ret */
- soc_component_mark_pop(component, substream, trigger);
+ soc_component_mark_pop(component, trigger);
}
}
@@ -1294,7 +1294,7 @@ void snd_soc_pcm_component_pm_runtime_put(struct snd_soc_pcm_runtime *rtd,
pm_runtime_put_autosuspend(component->dev);
/* remove marked stream */
- soc_component_mark_pop(component, stream, pm);
+ soc_component_mark_pop(component, pm);
}
}
diff --git a/sound/soc/soc-dai.c b/sound/soc/soc-dai.c
index 4e08892d24c6..4a1c85ad5a8d 100644
--- a/sound/soc/soc-dai.c
+++ b/sound/soc/soc-dai.c
@@ -37,7 +37,7 @@ static inline int _soc_dai_ret(const struct snd_soc_dai *dai,
* In such case, we can update these macros.
*/
#define soc_dai_mark_push(dai, substream, tgt) ((dai)->mark_##tgt = substream)
-#define soc_dai_mark_pop(dai, substream, tgt) ((dai)->mark_##tgt = NULL)
+#define soc_dai_mark_pop(dai, tgt) ((dai)->mark_##tgt = NULL)
#define soc_dai_mark_match(dai, substream, tgt) ((dai)->mark_##tgt == substream)
/**
@@ -416,7 +416,7 @@ void snd_soc_dai_hw_free(struct snd_soc_dai *dai,
dai->driver->ops->hw_free(substream, dai);
/* remove marked substream */
- soc_dai_mark_pop(dai, substream, hw_params);
+ soc_dai_mark_pop(dai, hw_params);
}
int snd_soc_dai_startup(struct snd_soc_dai *dai,
@@ -453,7 +453,7 @@ void snd_soc_dai_shutdown(struct snd_soc_dai *dai,
dai->driver->ops->shutdown(substream, dai);
/* remove marked substream */
- soc_dai_mark_pop(dai, substream, startup);
+ soc_dai_mark_pop(dai, startup);
}
int snd_soc_dai_compress_new(struct snd_soc_dai *dai,
@@ -640,7 +640,7 @@ int snd_soc_pcm_dai_trigger(struct snd_pcm_substream *substream,
r = soc_dai_trigger(dai, substream, cmd);
if (r < 0)
ret = r; /* use last ret */
- soc_dai_mark_pop(dai, substream, trigger);
+ soc_dai_mark_pop(dai, trigger);
}
}
@@ -704,7 +704,7 @@ void snd_soc_dai_compr_shutdown(struct snd_soc_dai *dai,
dai->driver->cops->shutdown(cstream, dai);
/* remove marked cstream */
- soc_dai_mark_pop(dai, cstream, compr_startup);
+ soc_dai_mark_pop(dai, compr_startup);
}
EXPORT_SYMBOL_GPL(snd_soc_dai_compr_shutdown);
diff --git a/sound/soc/soc-link.c b/sound/soc/soc-link.c
index fee4022708bc..7f1f1bc717e2 100644
--- a/sound/soc/soc-link.c
+++ b/sound/soc/soc-link.c
@@ -35,7 +35,7 @@ static inline int _soc_link_ret(struct snd_soc_pcm_runtime *rtd,
* In such case, we can update these macros.
*/
#define soc_link_mark_push(rtd, substream, tgt) ((rtd)->mark_##tgt = substream)
-#define soc_link_mark_pop(rtd, substream, tgt) ((rtd)->mark_##tgt = NULL)
+#define soc_link_mark_pop(rtd, tgt) ((rtd)->mark_##tgt = NULL)
#define soc_link_mark_match(rtd, substream, tgt) ((rtd)->mark_##tgt == substream)
int snd_soc_link_init(struct snd_soc_pcm_runtime *rtd)
@@ -94,7 +94,7 @@ void snd_soc_link_shutdown(struct snd_pcm_substream *substream,
rtd->dai_link->ops->shutdown(substream);
/* remove marked substream */
- soc_link_mark_pop(rtd, substream, startup);
+ soc_link_mark_pop(rtd, startup);
}
int snd_soc_link_prepare(struct snd_pcm_substream *substream)
@@ -138,7 +138,7 @@ void snd_soc_link_hw_free(struct snd_pcm_substream *substream, int rollback)
rtd->dai_link->ops->hw_free(substream);
/* remove marked substream */
- soc_link_mark_pop(rtd, substream, hw_params);
+ soc_link_mark_pop(rtd, hw_params);
}
static int soc_link_trigger(struct snd_pcm_substream *substream, int cmd)
@@ -175,7 +175,7 @@ int snd_soc_link_trigger(struct snd_pcm_substream *substream, int cmd,
break;
ret = soc_link_trigger(substream, cmd);
- soc_link_mark_pop(rtd, substream, startup);
+ soc_link_mark_pop(rtd, startup);
}
return ret;
@@ -209,7 +209,7 @@ void snd_soc_link_compr_shutdown(struct snd_compr_stream *cstream,
rtd->dai_link->compr_ops->shutdown)
rtd->dai_link->compr_ops->shutdown(cstream);
- soc_link_mark_pop(rtd, cstream, compr_startup);
+ soc_link_mark_pop(rtd, compr_startup);
}
EXPORT_SYMBOL_GPL(snd_soc_link_compr_shutdown);
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index af3158cdc8d5..97517423d1f0 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -889,7 +889,7 @@ static int soc_tplg_dbytes_create(struct soc_tplg *tplg, size_t size)
return ret;
/* register dynamic object */
- sbe = (struct soc_bytes_ext *)&kc.private_value;
+ sbe = (struct soc_bytes_ext *)kc.private_value;
INIT_LIST_HEAD(&sbe->dobj.list);
sbe->dobj.type = SND_SOC_DOBJ_BYTES;
@@ -923,7 +923,7 @@ static int soc_tplg_dmixer_create(struct soc_tplg *tplg, size_t size)
return ret;
/* register dynamic object */
- sm = (struct soc_mixer_control *)&kc.private_value;
+ sm = (struct soc_mixer_control *)kc.private_value;
INIT_LIST_HEAD(&sm->dobj.list);
sm->dobj.type = SND_SOC_DOBJ_MIXER;
diff --git a/sound/soc/sof/ipc3.c b/sound/soc/sof/ipc3.c
index 83c22d4a4830..7de5e3d285e7 100644
--- a/sound/soc/sof/ipc3.c
+++ b/sound/soc/sof/ipc3.c
@@ -226,7 +226,7 @@ static inline void ipc3_log_header(struct device *dev, u8 *text, u32 cmd)
static void sof_ipc3_dump_payload(struct snd_sof_dev *sdev,
void *ipc_data, size_t size)
{
- printk(KERN_DEBUG "Size of payload following the header: %zu\n", size);
+ dev_dbg(sdev->dev, "Size of payload following the header: %zu\n", size);
print_hex_dump_debug("Message payload: ", DUMP_PREFIX_OFFSET,
16, 4, ipc_data, size, false);
}
diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c
index 9351727dce1a..78bd817af839 100644
--- a/sound/soc/stm/stm32_adfsdm.c
+++ b/sound/soc/stm/stm32_adfsdm.c
@@ -309,7 +309,7 @@ static void stm32_adfsdm_cleanup(void *data)
iio_channel_release_all_cb(data);
}
-static struct snd_soc_component_driver stm32_adfsdm_soc_platform = {
+static const struct snd_soc_component_driver stm32_adfsdm_soc_platform = {
.open = stm32_adfsdm_pcm_open,
.close = stm32_adfsdm_pcm_close,
.hw_params = stm32_adfsdm_pcm_hw_params,
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c
index 7bc4a96b7503..a772bc8ea7be 100644
--- a/sound/soc/stm/stm32_sai_sub.c
+++ b/sound/soc/stm/stm32_sai_sub.c
@@ -53,7 +53,7 @@
#define STM_SAI_PROTOCOL_IS_SPDIF(ip) ((ip)->spdif)
#define STM_SAI_HAS_SPDIF(x) ((x)->pdata->conf.has_spdif_pdm)
#define STM_SAI_HAS_PDM(x) ((x)->pdata->conf.has_spdif_pdm)
-#define STM_SAI_HAS_EXT_SYNC(x) (!STM_SAI_IS_F4(sai->pdata))
+#define STM_SAI_HAS_EXT_SYNC(x) (!STM_SAI_IS_F4((x)->pdata))
#define SAI_IEC60958_BLOCK_FRAMES 192
#define SAI_IEC60958_STATUS_BYTES 24
diff --git a/sound/soc/uniphier/aio-core.c b/sound/soc/uniphier/aio-core.c
index 0eba60758134..2c4e8b873253 100644
--- a/sound/soc/uniphier/aio-core.c
+++ b/sound/soc/uniphier/aio-core.c
@@ -921,16 +921,19 @@ int aio_src_set_param(struct uniphier_aio_sub *sub,
{
struct regmap *r = sub->aio->chip->regmap;
u32 v;
+ int ret;
if (sub->swm->dir != PORT_DIR_OUTPUT)
return 0;
- regmap_write(r, OPORTMXSRC1CTR(sub->swm->oport.map),
+ ret = regmap_write(r, OPORTMXSRC1CTR(sub->swm->oport.map),
OPORTMXSRC1CTR_THMODE_SRC |
OPORTMXSRC1CTR_SRCPATH_CALC |
OPORTMXSRC1CTR_SYNC_ASYNC |
OPORTMXSRC1CTR_FSIIPSEL_INNER |
OPORTMXSRC1CTR_FSISEL_ACLK);
+ if (ret)
+ return ret;
switch (params_rate(params)) {
default:
@@ -951,12 +954,18 @@ int aio_src_set_param(struct uniphier_aio_sub *sub,
break;
}
- regmap_write(r, OPORTMXRATE_I(sub->swm->oport.map),
+
+ ret = regmap_write(r, OPORTMXRATE_I(sub->swm->oport.map),
v | OPORTMXRATE_I_ACLKSRC_APLL |
OPORTMXRATE_I_LRCKSTP_STOP);
- regmap_update_bits(r, OPORTMXRATE_I(sub->swm->oport.map),
+ if (ret)
+ return ret;
+
+ ret = regmap_update_bits(r, OPORTMXRATE_I(sub->swm->oport.map),
OPORTMXRATE_I_LRCKSTP_MASK,
OPORTMXRATE_I_LRCKSTP_START);
+ if (ret)
+ return ret;
return 0;
}
diff --git a/sound/soc/uniphier/evea.c b/sound/soc/uniphier/evea.c
index 662e45882c90..f6c6eb95262a 100644
--- a/sound/soc/uniphier/evea.c
+++ b/sound/soc/uniphier/evea.c
@@ -384,7 +384,7 @@ err_out_clock:
return ret;
}
-static struct snd_soc_component_driver soc_codec_evea = {
+static const struct snd_soc_component_driver soc_codec_evea = {
.probe = evea_codec_probe,
.suspend = evea_codec_suspend,
.resume = evea_codec_resume,