* [PATCH v2 0/2] ASoC: codecs: Add support for Fortemedia FM34NE DSP
@ 2026-10-19 10:13 Svyatoslav Ryhel
2026-10-19 10:13 ` [PATCH v2 1/2] ASoC: dt-bindings: Document " Svyatoslav Ryhel
2026-10-19 10:13 ` [PATCH v2 2/2] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
0 siblings, 2 replies; 5+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-19 10:13 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Svyatoslav Ryhel
Cc: linux-sound, devicetree, linux-kernel
The Fortemedia FM34NE is digital sound processing chip used for
active noise suppression mainly on ASUS Transformers.
---
Changes in v2:
- remove ports from schema
- schema moved to dsp
- add return value check in fm34ne_dsp_set_config()
- dropped unused headers
---
Svyatoslav Ryhel (2):
ASoC: dt-bindings: Document FM34NE DSP
ASoC: codecs: Add support for Fortemedia FM34NE DSP
.../bindings/dsp/asus,tf201-dsp.yaml | 77 ++
sound/soc/codecs/Kconfig | 12 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/fm34ne-dsp.c | 390 +++++++
sound/soc/codecs/fm34ne-dsp.h | 1030 +++++++++++++++++
5 files changed, 1511 insertions(+)
create mode 100644 Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml
create mode 100644 sound/soc/codecs/fm34ne-dsp.c
create mode 100644 sound/soc/codecs/fm34ne-dsp.h
--
2.53.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] ASoC: dt-bindings: Document FM34NE DSP
2026-10-19 10:13 [PATCH v2 0/2] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
@ 2026-10-19 10:13 ` Svyatoslav Ryhel
2026-10-19 10:17 ` sashiko-bot
2026-10-19 10:13 ` [PATCH v2 2/2] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
1 sibling, 1 reply; 5+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-19 10:13 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Svyatoslav Ryhel
Cc: linux-sound, devicetree, linux-kernel
Document the FM34NE DSP based voice processor used in the ASUS Transformer
devices.
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
.../bindings/dsp/asus,tf201-dsp.yaml | 77 +++++++++++++++++++
1 file changed, 77 insertions(+)
create mode 100644 Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml
diff --git a/Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml b/Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml
new file mode 100644
index 0000000000000..46308a462af16
--- /dev/null
+++ b/Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml
@@ -0,0 +1,77 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dsp/asus,tf201-dsp.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Fortemedia FM34NE based voice processor
+
+description:
+ Fortemedia FM34NE is a hardware voice processor (DSP — Digital Signal
+ Processor) designed by Fortemedia. It specializes in real-time audio
+ processing, focusing on noise suppression and echo cancellation.
+
+maintainers:
+ - Svyatoslav Ryhel <clamor95@gmail.com>
+
+allOf:
+ - $ref: dai-common.yaml#
+
+properties:
+ compatible:
+ enum:
+ - asus,sl101-dsp
+ - asus,tf101-dsp
+ - asus,tf201-dsp
+ - asus,tf300t-dsp
+ - asus,tf700t-dsp
+ - pegatron,chagall-dsp
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ items:
+ - description: Master clock to the DSP
+
+ reset-gpios:
+ maxItems: 1
+
+ bypass-gpios:
+ maxItems: 1
+ description: Signal that switches DSP into programming mode.
+
+ vdd-supply: true
+
+ port:
+ $ref: audio-graph-port.yaml#
+ unevaluatedProperties: false
+
+required:
+ - compatible
+ - reg
+ - bypass-gpios
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ codec@60 {
+ compatible = "asus,tf201-dsp";
+ reg = <0x60>;
+
+ clocks = <&fm34ne_clk>;
+
+ bypass-gpios = <&gpio 222 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio 115 GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_dsp>;
+ };
+ };
+...
--
2.53.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] ASoC: codecs: Add support for Fortemedia FM34NE DSP
2026-10-19 10:13 [PATCH v2 0/2] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
2026-10-19 10:13 ` [PATCH v2 1/2] ASoC: dt-bindings: Document " Svyatoslav Ryhel
@ 2026-10-19 10:13 ` Svyatoslav Ryhel
2026-10-19 10:29 ` sashiko-bot
1 sibling, 1 reply; 5+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-19 10:13 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Svyatoslav Ryhel
Cc: linux-sound, devicetree, linux-kernel
The Fortemedia FM34NE is a digital sound processing chip used for active
noise suppression mainly on ASUS Transformers.
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
sound/soc/codecs/Kconfig | 12 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/fm34ne-dsp.c | 390 +++++++++++++
sound/soc/codecs/fm34ne-dsp.h | 1030 +++++++++++++++++++++++++++++++++
4 files changed, 1434 insertions(+)
create mode 100644 sound/soc/codecs/fm34ne-dsp.c
create mode 100644 sound/soc/codecs/fm34ne-dsp.h
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index ba59dabeeccde..c40e84f499671 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -127,6 +127,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_ES9356
imply SND_SOC_ES7134
imply SND_SOC_ES7241
+ imply SND_SOC_FM34NE_DSP
imply SND_SOC_FRAMER
imply SND_SOC_FS210X
imply SND_SOC_GTM601
@@ -1338,6 +1339,17 @@ config SND_SOC_ES9356
select REGMAP_SOUNDWIRE
select REGMAP_SOUNDWIRE_MBQ
+config SND_SOC_FM34NE_DSP
+ tristate "DSP FM34NE driver"
+ depends on I2C && GPIOLIB
+ help
+ Say Y here if you want to add support for Fortemedia FM34NE DSP
+ mainly used in ASUS T20/T30 Transformers for input noise
+ processing.
+
+ To compile this driver as a module, choose M here: the module
+ will be called snd-soc-fm34ne-dsp.
+
config SND_SOC_FRAMER
tristate "Framer codec"
depends on GENERIC_FRAMER
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 3826f9e4fce8a..2ddf08eae181e 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -142,6 +142,7 @@ snd-soc-es8375-y := es8375.o
snd-soc-es8389-y := es8389.o
snd-soc-es9039q2m-y := es9039q2m.o
snd-soc-es9356-y := es9356.o
+snd-soc-fm34ne-dsp-y := fm34ne-dsp.o
snd-soc-framer-y := framer-codec.o
snd-soc-fs-amp-lib-y := fs-amp-lib.o
snd-soc-fs210x-y := fs210x.o
@@ -590,6 +591,7 @@ obj-$(CONFIG_SND_SOC_ES8375) += snd-soc-es8375.o
obj-$(CONFIG_SND_SOC_ES8389) += snd-soc-es8389.o
obj-$(CONFIG_SND_SOC_ES9039Q2M) += snd-soc-es9039q2m.o
obj-$(CONFIG_SND_SOC_ES9356) += snd-soc-es9356.o
+obj-$(CONFIG_SND_SOC_FM34NE_DSP) += snd-soc-fm34ne-dsp.o
obj-$(CONFIG_SND_SOC_FRAMER) += snd-soc-framer.o
obj-$(CONFIG_SND_SOC_FS_AMP_LIB)+= snd-soc-fs-amp-lib.o
obj-$(CONFIG_SND_SOC_FS210X) += snd-soc-fs210x.o
diff --git a/sound/soc/codecs/fm34ne-dsp.c b/sound/soc/codecs/fm34ne-dsp.c
new file mode 100644
index 0000000000000..608b94e6ea0ca
--- /dev/null
+++ b/sound/soc/codecs/fm34ne-dsp.c
@@ -0,0 +1,390 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/property.h>
+#include <linux/regulator/consumer.h>
+
+#include <sound/core.h>
+#include <sound/soc.h>
+
+#include "fm34ne-dsp.h"
+
+struct fm34ne_dsp {
+ struct i2c_client *client;
+
+ struct gpio_desc *bypass_gpio;
+ struct gpio_desc *reset_gpio;
+
+ struct clk *dap_mclk;
+ struct regulator *vdd_supply;
+ struct mutex lock; /* prevent simultaneous parameter writing */
+
+ const struct fm34ne_dsp_info *info;
+};
+
+static int fm34ne_dsp_set_config(struct fm34ne_dsp *dsp, enum dsp_state state)
+{
+ struct device *dev = &dsp->client->dev;
+ int ret;
+
+ guard(mutex)(&dsp->lock);
+
+ gpiod_set_value_cansleep(dsp->bypass_gpio, 1);
+ msleep(20);
+
+ switch (state) {
+ case FM34NE_NS_ENABLE:
+ ret = i2c_master_send(dsp->client, dsp->info->enable_parameter,
+ dsp->info->enable_parameter_length);
+ if (ret < 0) {
+ dev_err(dev, "Failed to set DSP enable %d\n", ret);
+ goto exit;
+ }
+
+ ret = i2c_master_send(dsp->client, dsp->info->enable_noise_suppression,
+ dsp->info->enable_ns_length);
+ if (ret < 0) {
+ dev_err(dev, "Failed to enable DSP noise suppression %d\n", ret);
+ goto exit;
+ }
+
+ break;
+
+ case FM34NE_NS_DISABLE:
+ ret = i2c_master_send(dsp->client, dsp->info->enable_parameter,
+ dsp->info->enable_parameter_length);
+ if (ret < 0) {
+ dev_err(dev, "Failed to set DSP enable with %d\n", ret);
+ goto exit;
+ }
+
+ ret = i2c_master_send(dsp->client, dsp->info->disable_noise_suppression,
+ dsp->info->disable_ns_length);
+ if (ret < 0) {
+ dev_err(dev, "Failed to disable DSP noise suppression with %d\n", ret);
+ goto exit;
+ }
+
+ break;
+
+ case FM34NE_BYPASS:
+ default:
+ ret = i2c_master_send(dsp->client, bypass_parameter, sizeof(bypass_parameter));
+ if (ret < 0) {
+ dev_err(dev, "Failed to set DSP bypass with %d\n", ret);
+ goto exit;
+ }
+
+ break;
+ }
+
+exit:
+ if (ret < 0)
+ return ret;
+
+ gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
+
+ return 0;
+}
+
+static int fm34ne_dsp_ext_state_control(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event)
+{
+ struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
+ struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
+
+ switch (event) {
+ case SND_SOC_DAPM_POST_PMU:
+ return fm34ne_dsp_set_config(dsp, FM34NE_BYPASS);
+
+ default:
+ WARN(1, "Unexpected event");
+ return -EINVAL;
+ }
+}
+
+static int fm34ne_dsp_int_state_control(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event)
+{
+ struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
+ struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
+
+ switch (event) {
+ case SND_SOC_DAPM_POST_PMU:
+ return fm34ne_dsp_set_config(dsp, FM34NE_NS_ENABLE);
+
+ case SND_SOC_DAPM_PRE_PMD:
+ return fm34ne_dsp_set_config(dsp, FM34NE_NS_DISABLE);
+
+ default:
+ WARN(1, "Unexpected event");
+ return -EINVAL;
+ }
+}
+
+static const struct snd_soc_dapm_widget fm34ne_dsp_dapm_widgets[] = {
+ SND_SOC_DAPM_INPUT("DSP DMIC"),
+ SND_SOC_DAPM_INPUT("DSP AMIC"),
+
+ SND_SOC_DAPM_OUT_DRV_E("DSP Processing Engine INT", SND_SOC_NOPM,
+ 0, 0, NULL, 0, fm34ne_dsp_int_state_control,
+ SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_OUT_DRV_E("DSP Processing Engine EXT", SND_SOC_NOPM,
+ 0, 0, NULL, 0, fm34ne_dsp_ext_state_control,
+ SND_SOC_DAPM_POST_PMU),
+
+ SND_SOC_DAPM_OUTPUT("DSP Digital Mic"),
+ SND_SOC_DAPM_OUTPUT("DSP Analog Mic"),
+};
+
+static const struct snd_soc_dapm_route fm34ne_dsp_dapm_routes[] = {
+ { "DSP Processing Engine INT", NULL, "DSP DMIC" },
+ { "DSP Processing Engine EXT", NULL, "DSP AMIC" },
+ { "DSP Digital Mic", NULL, "DSP Processing Engine INT" },
+ { "DSP Analog Mic", NULL, "DSP Processing Engine EXT" },
+};
+
+static int fm34ne_dsp_enable_hw(struct fm34ne_dsp *dsp)
+{
+ struct device *dev = &dsp->client->dev;
+ int ret;
+
+ ret = clk_prepare_enable(dsp->dap_mclk);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to enable the DSP MCLK\n");
+
+ ret = regulator_enable(dsp->vdd_supply);
+ if (ret) {
+ clk_disable_unprepare(dsp->dap_mclk);
+ return dev_err_probe(dev, ret, "Failed to enable power supply\n");
+ }
+
+ return 0;
+}
+
+static void fm34ne_dsp_reset(struct fm34ne_dsp *dsp)
+{
+ gpiod_set_value_cansleep(dsp->reset_gpio, 1);
+ msleep(20);
+ gpiod_set_value_cansleep(dsp->reset_gpio, 0);
+ msleep(100);
+}
+
+static void fm34ne_dsp_disable_hw(struct fm34ne_dsp *dsp)
+{
+ gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
+ regulator_disable(dsp->vdd_supply);
+ clk_disable_unprepare(dsp->dap_mclk);
+}
+
+static int fm34ne_dsp_probe(struct snd_soc_component *component)
+{
+ struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
+ int ret;
+
+ ret = fm34ne_dsp_enable_hw(dsp);
+ if (ret)
+ return ret;
+
+ fm34ne_dsp_reset(dsp);
+
+ gpiod_set_value_cansleep(dsp->bypass_gpio, 1);
+ msleep(20);
+
+ ret = i2c_smbus_write_byte(dsp->client, FM34NE_BUF_ADDR);
+ if (ret < 0) {
+ dev_err(&dsp->client->dev, "Initial write failed, aborting\n");
+ msleep(50);
+ goto exit;
+ }
+
+ ret = i2c_master_send(dsp->client, dsp->info->input_parameter,
+ dsp->info->input_parameter_length);
+ if (ret < 0)
+ goto exit;
+
+ msleep(100);
+ gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
+
+ /* Init DSP to bypass mode */
+ ret = fm34ne_dsp_set_config(dsp, FM34NE_BYPASS);
+ if (ret < 0)
+ goto exit;
+
+ return 0;
+
+exit:
+ fm34ne_dsp_reset(dsp);
+ fm34ne_dsp_disable_hw(dsp);
+
+ return ret;
+}
+
+static void fm34ne_dsp_remove(struct snd_soc_component *component)
+{
+ struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
+
+ fm34ne_dsp_reset(dsp);
+ fm34ne_dsp_disable_hw(dsp);
+}
+
+static const struct snd_soc_component_driver soc_component_fm34ne_dsp = {
+ .name = "fm34ne-dsp",
+ .probe = fm34ne_dsp_probe,
+ .remove = fm34ne_dsp_remove,
+ .dapm_widgets = fm34ne_dsp_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(fm34ne_dsp_dapm_widgets),
+ .dapm_routes = fm34ne_dsp_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(fm34ne_dsp_dapm_routes),
+ .idle_bias_on = 1,
+ .use_pmdown_time = 1,
+};
+
+static int fm34ne_probe(struct i2c_client *client)
+{
+ struct device *dev = &client->dev;
+ struct fm34ne_dsp *dsp;
+
+ dsp = devm_kzalloc(dev, sizeof(*dsp), GFP_KERNEL);
+ if (!dsp)
+ return -ENOMEM;
+
+ i2c_set_clientdata(client, dsp);
+ dsp->client = client;
+
+ dsp->info = device_get_match_data(dev);
+ if (!dsp->info)
+ return -ENODEV;
+
+ dev_info(&dsp->client->dev, "%s detected\n", dsp->info->model);
+
+ dsp->dap_mclk = devm_clk_get_optional(dev, NULL);
+ if (IS_ERR(dsp->dap_mclk))
+ return dev_err_probe(dev, PTR_ERR(dsp->dap_mclk),
+ "Can't retrieve DSP mclk\n");
+
+ dsp->vdd_supply = devm_regulator_get(dev, "vdd");
+ if (IS_ERR(dsp->vdd_supply))
+ return dev_err_probe(dev, PTR_ERR(dsp->vdd_supply),
+ "Failed to get vdd regulator\n");
+
+ dsp->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
+ if (IS_ERR(dsp->reset_gpio))
+ return dev_err_probe(dev, PTR_ERR(dsp->reset_gpio),
+ "Failed to get reset GPIO\n");
+
+ /*
+ * Bypass gpio is used to set audio into bypass mode in relation to dsp
+ * to be able to program it. Once programming is done, bypass gpio has
+ * to be set to low to return dsp into audio processing.
+ */
+ dsp->bypass_gpio = devm_gpiod_get(dev, "bypass", GPIOD_OUT_LOW);
+ if (IS_ERR(dsp->bypass_gpio))
+ return dev_err_probe(dev, PTR_ERR(dsp->bypass_gpio),
+ "Failed to get bypass GPIO\n");
+
+ mutex_init(&dsp->lock);
+
+ return devm_snd_soc_register_component(dev, &soc_component_fm34ne_dsp,
+ NULL, 0);
+}
+
+static const struct fm34ne_dsp_info tf101_dsp_info = {
+ .model = "ASUS Eee Pad Transformer TF101",
+ .enable_parameter = enable_parameter,
+ .enable_parameter_length = sizeof(enable_parameter),
+ .input_parameter = tf101_input_parameter,
+ .input_parameter_length = sizeof(tf101_input_parameter),
+ .enable_noise_suppression = tf101_enable_ns,
+ .enable_ns_length = sizeof(tf101_enable_ns),
+ .disable_noise_suppression = tf101_disable_ns,
+ .disable_ns_length = sizeof(tf101_disable_ns),
+};
+
+static const struct fm34ne_dsp_info sl101_dsp_info = {
+ .model = "ASUS Eee Pad Slider SL101",
+ .enable_parameter = sl101_enable_parameter,
+ .enable_parameter_length = sizeof(sl101_enable_parameter),
+ .input_parameter = sl101_input_parameter,
+ .input_parameter_length = sizeof(sl101_input_parameter),
+ .enable_noise_suppression = tf101_enable_ns,
+ .enable_ns_length = sizeof(tf101_enable_ns),
+ .disable_noise_suppression = tf101_disable_ns,
+ .disable_ns_length = sizeof(tf101_disable_ns),
+};
+
+static const struct fm34ne_dsp_info tf201_dsp_info = {
+ .model = "ASUS Transformer Prime TF201",
+ .enable_parameter = enable_parameter,
+ .enable_parameter_length = sizeof(enable_parameter),
+ .input_parameter = tf201_input_parameter,
+ .input_parameter_length = sizeof(tf201_input_parameter),
+ .enable_noise_suppression = tf201_enable_ns,
+ .enable_ns_length = sizeof(tf201_enable_ns),
+ .disable_noise_suppression = tf101_disable_ns,
+ .disable_ns_length = sizeof(tf101_disable_ns),
+};
+
+static const struct fm34ne_dsp_info tf300t_dsp_info = {
+ .model = "ASUS Transformer PAD TF300T",
+ .enable_parameter = enable_parameter,
+ .enable_parameter_length = sizeof(enable_parameter),
+ .input_parameter = tf300t_input_parameter,
+ .input_parameter_length = sizeof(tf300t_input_parameter),
+ .enable_noise_suppression = tf201_enable_ns,
+ .enable_ns_length = sizeof(tf201_enable_ns),
+ .disable_noise_suppression = tf101_disable_ns,
+ .disable_ns_length = sizeof(tf101_disable_ns),
+};
+
+static const struct fm34ne_dsp_info tf700t_dsp_info = {
+ .model = "ASUS Transformer Infinity TF700T",
+ .enable_parameter = enable_parameter,
+ .enable_parameter_length = sizeof(enable_parameter),
+ .input_parameter = tf700t_input_parameter,
+ .input_parameter_length = sizeof(tf700t_input_parameter),
+ .enable_noise_suppression = tf700t_enable_ns,
+ .enable_ns_length = sizeof(tf700t_enable_ns),
+ .disable_noise_suppression = tf700t_disable_ns,
+ .disable_ns_length = sizeof(tf700t_disable_ns),
+};
+
+static const struct fm34ne_dsp_info chagall_dsp_info = {
+ .model = "Pegatron Chagall",
+ .enable_parameter = enable_parameter,
+ .enable_parameter_length = sizeof(enable_parameter),
+ .input_parameter = tf300t_input_parameter,
+ .input_parameter_length = sizeof(tf300t_input_parameter),
+ .enable_noise_suppression = tf201_enable_ns,
+ .enable_ns_length = sizeof(tf201_enable_ns),
+ .disable_noise_suppression = tf101_disable_ns,
+ .disable_ns_length = sizeof(tf101_disable_ns),
+};
+
+static const struct of_device_id fm34ne_dsp_match_ids[] = {
+ { .compatible = "asus,sl101-dsp", .data = &sl101_dsp_info },
+ { .compatible = "asus,tf101-dsp", .data = &tf101_dsp_info },
+ { .compatible = "asus,tf201-dsp", .data = &tf201_dsp_info },
+ { .compatible = "asus,tf300t-dsp", .data = &tf300t_dsp_info },
+ { .compatible = "asus,tf700t-dsp", .data = &tf700t_dsp_info },
+ { .compatible = "pegatron,chagall-dsp", .data = &chagall_dsp_info },
+ { }
+};
+MODULE_DEVICE_TABLE(of, fm34ne_dsp_match_ids);
+
+static struct i2c_driver fm34ne_dsp_driver = {
+ .driver = {
+ .name = "fm34ne-dsp",
+ .of_match_table = fm34ne_dsp_match_ids,
+ },
+ .probe = fm34ne_probe,
+};
+module_i2c_driver(fm34ne_dsp_driver);
+
+MODULE_AUTHOR("Svyatoslav Ryhel <clamor95@gmail.com>");
+MODULE_DESCRIPTION("Fortemedia FM34NE DSP driver");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/fm34ne-dsp.h b/sound/soc/codecs/fm34ne-dsp.h
new file mode 100644
index 0000000000000..f63cbbe754538
--- /dev/null
+++ b/sound/soc/codecs/fm34ne-dsp.h
@@ -0,0 +1,1030 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef __DSP_FM34NE_H__
+#define __DSP_FM34NE_H__
+
+#define FM34NE_BUF_ADDR 0xc0
+
+enum dsp_state {
+ FM34NE_BYPASS,
+ FM34NE_NS_ENABLE,
+ FM34NE_NS_DISABLE,
+ FM34NE_MAX,
+};
+
+struct fm34ne_dsp_info {
+ const char *model;
+
+ const u8 *enable_parameter;
+ unsigned int enable_parameter_length;
+
+ const u8 *input_parameter;
+ unsigned int input_parameter_length;
+
+ const u8 *enable_noise_suppression;
+ unsigned int enable_ns_length;
+
+ const u8 *disable_noise_suppression;
+ unsigned int disable_ns_length;
+};
+
+static const u8 bypass_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x04
+};
+
+static const u8 enable_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x00
+};
+
+static const u8 sl101_enable_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x07, 0xf0, 0xf0,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x0e, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x00
+};
+
+static const u8 tf101_enable_ns[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10
+};
+
+static const u8 tf201_enable_ns[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x01
+};
+
+static const u8 tf700t_enable_ns[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x08, 0x00
+};
+
+static const u8 tf101_disable_ns[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x00, 0x10
+};
+
+static const u8 tf700t_disable_ns[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x00, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x15, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x7f, 0xff,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xcf, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd0, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd5, 0x10, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfb, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x84, 0x00, 0x03
+};
+
+static const u8 sl101_input_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x68, 0x64, 0x04,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x00, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x01, 0x82, 0x30, 0x50,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x02, 0x27, 0x90, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x03, 0x19, 0x00, 0xa0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x04, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x05, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x06, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x07, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x08, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x09, 0x19, 0x01, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0a, 0x27, 0x90, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0b, 0x19, 0x01, 0x10,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0c, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0d, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0e, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0f, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x10, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x11, 0x82, 0x2d, 0x20,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x12, 0x27, 0x98, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x13, 0x19, 0x01, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x14, 0x80, 0x50, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x15, 0x90, 0x50, 0x3a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x16, 0x80, 0x50, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x17, 0x90, 0x50, 0x4f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x18, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x19, 0x19, 0x00, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1a, 0x80, 0x00, 0xac,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1b, 0x26, 0x7c, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1d, 0x19, 0x1d, 0x82,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1e, 0x19, 0x1c, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1f, 0x80, 0x53, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x20, 0x93, 0xe2, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x21, 0x80, 0x4f, 0xba,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x22, 0x22, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x23, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x24, 0x18, 0x2f, 0xd0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x25, 0x94, 0x4f, 0xb6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x26, 0x80, 0x4f, 0x6a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x27, 0x26, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x28, 0x18, 0x2f, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x29, 0x18, 0x2b, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2a, 0x95, 0x62, 0x06,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2b, 0x95, 0x61, 0x46,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2c, 0x40, 0xfa, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2d, 0x40, 0xe5, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2e, 0x82, 0x30, 0x14,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2f, 0x27, 0x00, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x30, 0x22, 0x78, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x31, 0x83, 0xfd, 0x44,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x32, 0x26, 0xe2, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x33, 0x19, 0x03, 0x90,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x34, 0x93, 0xfd, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x35, 0x83, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x36, 0x23, 0xa2, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x37, 0x93, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x38, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x39, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3a, 0x18, 0x3f, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3b, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3c, 0x19, 0x6c, 0xa4,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3d, 0x19, 0x66, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3e, 0x80, 0x79, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3f, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x40, 0x27, 0x97, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x41, 0x19, 0x04, 0x40,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x42, 0x94, 0x7b, 0xd6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x43, 0x80, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x44, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x45, 0x18, 0x48, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x46, 0x38, 0x00, 0x87,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x47, 0x09, 0x00, 0x1b,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x48, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x49, 0x18, 0x2d, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4a, 0x18, 0x21, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4b, 0x88, 0x4f, 0x47,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4c, 0x82, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4d, 0x22, 0x62, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4e, 0x26, 0x62, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4f, 0x19, 0x05, 0x25,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x50, 0x3b, 0xff, 0xc7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x51, 0x19, 0x05, 0x3f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x52, 0x0d, 0x01, 0xa6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x53, 0x92, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x54, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x55, 0x18, 0x23, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x56, 0x96, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x57, 0x96, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x58, 0x9a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x59, 0x9a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5a, 0x96, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5b, 0x38, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5c, 0x83, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5d, 0x3b, 0x20, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5e, 0x36, 0x2b, 0x01,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5f, 0x36, 0x2b, 0x60,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x60, 0x1c, 0x72, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x61, 0x93, 0xff, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x62, 0x93, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x63, 0x86, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x64, 0x86, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x65, 0x8a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x66, 0x8a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x67, 0x86, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x68, 0x0d, 0x08, 0x28,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x69, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6a, 0x18, 0x24, 0x0f,
+ 0xfc, 0xf3, 0x68, 0x64, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa0, 0x90, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb0, 0x50, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa1, 0x91, 0xcb,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb1, 0x50, 0x1a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa2, 0x82, 0xf3,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb2, 0x02, 0xf5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa3, 0x82, 0xb5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb3, 0x50, 0x1f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa4, 0x83, 0xf4,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb4, 0x50, 0x2a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa5, 0x96, 0x66,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb5, 0x50, 0x3b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa6, 0x84, 0x8c,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb6, 0x50, 0x3e,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa7, 0xc4, 0x8c,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb7, 0x50, 0x3e,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa8, 0x82, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb8, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa9, 0xc2, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb9, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaa, 0xc2, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xba, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xab, 0x82, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbb, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xac, 0x82, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbc, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xad, 0xc2, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbd, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xae, 0x82, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbe, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaf, 0xc2, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbf, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf8, 0x80, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc8, 0x00, 0x09,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xee, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf9, 0x08, 0x5f,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfa, 0x24, 0x81,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x05, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x01, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x07, 0xf0, 0xf0,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x09, 0x08, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0d, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x0e, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf2, 0x00, 0x44,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf6, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc6, 0x00, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc7, 0x00, 0x50,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xd2, 0x82, 0x94,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x2f, 0x01, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x39, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xcf, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd0, 0x06, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd5, 0x3c, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x33, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb3, 0x00, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb4, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x70, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xd2, 0x00, 0x32,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfb, 0x00, 0x00
+};
+
+static const u8 tf101_input_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x68, 0x64, 0x04,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x00, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x01, 0x82, 0x30, 0x50,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x02, 0x27, 0x90, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x03, 0x19, 0x00, 0xa0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x04, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x05, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x06, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x07, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x08, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x09, 0x19, 0x01, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0a, 0x27, 0x90, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0b, 0x19, 0x01, 0x10,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0c, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0d, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0e, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0f, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x10, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x11, 0x82, 0x2d, 0x20,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x12, 0x27, 0x98, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x13, 0x19, 0x01, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x14, 0x80, 0x50, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x15, 0x90, 0x50, 0x3a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x16, 0x80, 0x50, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x17, 0x90, 0x50, 0x4f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x18, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x19, 0x19, 0x00, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1a, 0x80, 0x00, 0xac,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1b, 0x26, 0x7c, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1d, 0x19, 0x1d, 0x82,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1e, 0x19, 0x1c, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1f, 0x80, 0x53, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x20, 0x93, 0xe2, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x21, 0x80, 0x4f, 0xba,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x22, 0x22, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x23, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x24, 0x18, 0x2f, 0xd0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x25, 0x94, 0x4f, 0xb6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x26, 0x80, 0x4f, 0x6a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x27, 0x26, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x28, 0x18, 0x2f, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x29, 0x18, 0x2b, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2a, 0x95, 0x62, 0x06,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2b, 0x95, 0x61, 0x46,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2c, 0x40, 0xfa, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2d, 0x40, 0xe5, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2e, 0x82, 0x30, 0x14,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2f, 0x27, 0x00, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x30, 0x22, 0x78, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x31, 0x83, 0xfd, 0x44,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x32, 0x26, 0xe2, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x33, 0x19, 0x03, 0x90,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x34, 0x93, 0xfd, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x35, 0x83, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x36, 0x23, 0xa2, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x37, 0x93, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x38, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x39, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3a, 0x18, 0x3f, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3b, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3c, 0x19, 0x6c, 0xa4,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3d, 0x19, 0x66, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3e, 0x80, 0x79, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3f, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x40, 0x27, 0x97, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x41, 0x19, 0x04, 0x40,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x42, 0x94, 0x7b, 0xd6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x43, 0x80, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x44, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x45, 0x18, 0x48, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x46, 0x38, 0x00, 0x87,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x47, 0x09, 0x00, 0x1b,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x48, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x49, 0x18, 0x2d, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4a, 0x18, 0x21, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4b, 0x88, 0x4f, 0x47,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4c, 0x82, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4d, 0x22, 0x62, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4e, 0x26, 0x62, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4f, 0x19, 0x05, 0x25,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x50, 0x3b, 0xff, 0xc7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x51, 0x19, 0x05, 0x3f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x52, 0x0d, 0x01, 0xa6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x53, 0x92, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x54, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x55, 0x18, 0x23, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x56, 0x96, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x57, 0x96, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x58, 0x9a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x59, 0x9a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5a, 0x96, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5b, 0x38, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5c, 0x83, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5d, 0x3b, 0x20, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5e, 0x36, 0x2b, 0x01,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5f, 0x36, 0x2b, 0x60,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x60, 0x1c, 0x72, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x61, 0x93, 0xff, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x62, 0x93, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x63, 0x86, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x64, 0x86, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x65, 0x8a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x66, 0x8a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x67, 0x86, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x68, 0x0d, 0x08, 0x28,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x69, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6a, 0x18, 0x24, 0x0f,
+ 0xfc, 0xf3, 0x68, 0x64, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa0, 0x90, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb0, 0x50, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa1, 0x91, 0xcb,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb1, 0x50, 0x1a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa2, 0x82, 0xf3,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb2, 0x02, 0xf5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa3, 0x82, 0xb5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb3, 0x50, 0x1f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa4, 0x83, 0xf4,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb4, 0x50, 0x2a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa5, 0x96, 0x66,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb5, 0x50, 0x3b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa6, 0x84, 0x8c,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb6, 0x50, 0x3e,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa7, 0xc4, 0x8c,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb7, 0x50, 0x3e,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa8, 0x82, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb8, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa9, 0xc2, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb9, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaa, 0xc2, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xba, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xab, 0x82, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbb, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xac, 0x82, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbc, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xad, 0xc2, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbd, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xae, 0x82, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbe, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaf, 0xc2, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbf, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf8, 0x80, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc8, 0x00, 0x09,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xee, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf9, 0x08, 0x5f,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfa, 0x24, 0x81,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x05, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x01, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x07, 0xf0, 0xf0,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x09, 0x08, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0d, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x0e, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf2, 0x00, 0x44,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf6, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc6, 0x00, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc7, 0x00, 0x50,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xd2, 0x82, 0x94,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x2f, 0x01, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x39, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xcf, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd0, 0x06, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd5, 0x3c, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x20, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x33, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb3, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb4, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x70, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xd2, 0x00, 0x32,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfb, 0x00, 0x00
+};
+
+static const u8 tf201_input_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x68, 0x64, 0x04,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x00, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x01, 0x82, 0x30, 0x50,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x02, 0x27, 0x90, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x03, 0x19, 0x00, 0xa0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x04, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x05, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x06, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x07, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x08, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x09, 0x19, 0x01, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0a, 0x27, 0x90, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0b, 0x19, 0x01, 0x10,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0c, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0d, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0e, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0f, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x10, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x11, 0x82, 0x2d, 0x20,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x12, 0x27, 0x98, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x13, 0x19, 0x01, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x14, 0x80, 0x50, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x15, 0x90, 0x50, 0x3a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x16, 0x80, 0x50, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x17, 0x90, 0x50, 0x4f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x18, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x19, 0x19, 0x00, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1a, 0x80, 0x00, 0xac,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1b, 0x26, 0x7c, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1d, 0x19, 0x1d, 0x82,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1e, 0x19, 0x1c, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1f, 0x80, 0x53, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x20, 0x93, 0xe2, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x21, 0x80, 0x4f, 0xba,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x22, 0x22, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x23, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x24, 0x18, 0x2f, 0xd0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x25, 0x94, 0x4f, 0xb6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x26, 0x80, 0x4f, 0x6a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x27, 0x26, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x28, 0x18, 0x2f, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x29, 0x18, 0x2b, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2a, 0x95, 0x62, 0x06,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2b, 0x95, 0x61, 0x46,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2c, 0x40, 0xfa, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2d, 0x40, 0xe5, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2e, 0x82, 0x30, 0x14,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2f, 0x27, 0x00, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x30, 0x22, 0x78, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x31, 0x83, 0xfd, 0x44,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x32, 0x26, 0xe2, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x33, 0x19, 0x03, 0x90,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x34, 0x93, 0xfd, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x35, 0x83, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x36, 0x23, 0xa2, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x37, 0x93, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x38, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x39, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3a, 0x18, 0x3f, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3b, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3c, 0x19, 0x6c, 0xa4,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3d, 0x19, 0x66, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3e, 0x80, 0x79, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3f, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x40, 0x27, 0x97, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x41, 0x19, 0x04, 0x40,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x42, 0x94, 0x7b, 0xd6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x43, 0x80, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x44, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x45, 0x18, 0x48, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x46, 0x38, 0x00, 0x87,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x47, 0x09, 0x00, 0x1b,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x48, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x49, 0x18, 0x2d, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4a, 0x18, 0x21, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4b, 0x88, 0x4f, 0x47,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4c, 0x82, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4d, 0x22, 0x62, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4e, 0x26, 0x62, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4f, 0x19, 0x05, 0x25,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x50, 0x3b, 0xff, 0xc7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x51, 0x19, 0x05, 0x3f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x52, 0x0d, 0x01, 0xa6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x53, 0x92, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x54, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x55, 0x18, 0x23, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x56, 0x96, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x57, 0x96, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x58, 0x9a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x59, 0x9a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5a, 0x96, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5b, 0x38, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5c, 0x83, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5d, 0x3b, 0x20, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5e, 0x36, 0x2b, 0x01,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5f, 0x36, 0x2b, 0x60,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x60, 0x1c, 0x72, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x61, 0x93, 0xff, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x62, 0x93, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x63, 0x86, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x64, 0x86, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x65, 0x8a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x66, 0x8a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x67, 0x86, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x68, 0x0d, 0x08, 0x28,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x69, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6a, 0x18, 0x24, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6b, 0x83, 0xfc, 0xfa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6c, 0x23, 0x8a, 0xbf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6d, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6e, 0x27, 0x97, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6f, 0x23, 0xaa, 0x91,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x70, 0x93, 0xfc, 0xfa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x71, 0x83, 0x80, 0x30,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x72, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x73, 0x18, 0x3e, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x74, 0x80, 0x7a, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x75, 0x19, 0x07, 0xe2,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x76, 0x23, 0x3e, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x77, 0x0d, 0x00, 0xea,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x78, 0x80, 0x7b, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x79, 0x38, 0x7e, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7a, 0x1c, 0x76, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7b, 0x90, 0x7b, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7d, 0x19, 0x75, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7e, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7f, 0x19, 0x75, 0x9f,
+ 0xfc, 0xf3, 0x68, 0x64, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa0, 0x91, 0xcb,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb0, 0x50, 0x1a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa1, 0x82, 0xf3,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb1, 0x02, 0xf5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa2, 0x82, 0xb5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb2, 0x50, 0x1f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa3, 0x83, 0xf4,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb3, 0x50, 0x2a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa4, 0x96, 0x66,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb4, 0x50, 0x3b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa5, 0x82, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb5, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa6, 0xc2, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb6, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa7, 0xc2, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb7, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa8, 0x82, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb8, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa9, 0x82, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb9, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaa, 0xc2, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xba, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xab, 0x82, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbb, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xac, 0xc2, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbc, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xad, 0x83, 0xe8,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbd, 0x50, 0x6b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xae, 0x97, 0x58,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbe, 0x50, 0x74,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf8, 0x80, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc8, 0x00, 0x29,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xee, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf9, 0x08, 0x5f,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfa, 0x24, 0x81,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x05, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x01, 0x00, 0x02,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x07, 0xf0, 0xf0,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x09, 0x08, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0d, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x08, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf2, 0x00, 0x44,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf6, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc6, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc7, 0x00, 0x08,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xd2, 0x8a, 0x94,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x04,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x2f, 0x01, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x39, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xcf, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd0, 0x06, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd5, 0x3c, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x20, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x33, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb3, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb4, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x70, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xd2, 0x00, 0x32,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfb, 0x00, 0x00
+};
+
+static const u8 tf300t_input_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x68, 0x64, 0x04,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x00, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x01, 0x82, 0x30, 0x50,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x02, 0x27, 0x90, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x03, 0x19, 0x00, 0xa0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x04, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x05, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x06, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x07, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x08, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x09, 0x19, 0x01, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0a, 0x27, 0x90, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0b, 0x19, 0x01, 0x10,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0c, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0d, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0e, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0f, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x10, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x11, 0x82, 0x2d, 0x20,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x12, 0x27, 0x98, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x13, 0x19, 0x01, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x14, 0x80, 0x50, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x15, 0x90, 0x50, 0x3a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x16, 0x80, 0x50, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x17, 0x90, 0x50, 0x4f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x18, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x19, 0x19, 0x00, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1a, 0x80, 0x00, 0xac,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1b, 0x26, 0x7c, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1d, 0x19, 0x1d, 0x82,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1e, 0x19, 0x1c, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1f, 0x80, 0x53, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x20, 0x93, 0xe2, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x21, 0x80, 0x4f, 0xba,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x22, 0x22, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x23, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x24, 0x18, 0x2f, 0xd0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x25, 0x94, 0x4f, 0xb6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x26, 0x80, 0x4f, 0x6a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x27, 0x26, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x28, 0x18, 0x2f, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x29, 0x18, 0x2b, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2a, 0x95, 0x62, 0x06,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2b, 0x95, 0x61, 0x46,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2c, 0x40, 0xfa, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2d, 0x40, 0xe5, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2e, 0x82, 0x30, 0x14,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2f, 0x27, 0x00, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x30, 0x22, 0x78, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x31, 0x83, 0xfd, 0x44,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x32, 0x26, 0xe2, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x33, 0x19, 0x03, 0x90,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x34, 0x93, 0xfd, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x35, 0x83, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x36, 0x23, 0xa2, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x37, 0x93, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x38, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x39, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3a, 0x18, 0x3f, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3b, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3c, 0x19, 0x6c, 0xa4,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3d, 0x19, 0x66, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3e, 0x80, 0x79, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3f, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x40, 0x27, 0x97, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x41, 0x19, 0x04, 0x40,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x42, 0x94, 0x7b, 0xd6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x43, 0x80, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x44, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x45, 0x18, 0x48, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x46, 0x38, 0x00, 0x87,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x47, 0x09, 0x00, 0x1b,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x48, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x49, 0x18, 0x2d, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4a, 0x18, 0x21, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4b, 0x88, 0x4f, 0x47,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4c, 0x82, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4d, 0x22, 0x62, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4e, 0x26, 0x62, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4f, 0x19, 0x05, 0x25,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x50, 0x3b, 0xff, 0xc7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x51, 0x19, 0x05, 0x3f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x52, 0x0d, 0x01, 0xa6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x53, 0x92, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x54, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x55, 0x18, 0x23, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x56, 0x96, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x57, 0x96, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x58, 0x9a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x59, 0x9a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5a, 0x96, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5b, 0x38, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5c, 0x83, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5d, 0x3b, 0x20, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5e, 0x36, 0x2b, 0x01,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5f, 0x36, 0x2b, 0x60,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x60, 0x1c, 0x72, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x61, 0x93, 0xff, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x62, 0x93, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x63, 0x86, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x64, 0x86, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x65, 0x8a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x66, 0x8a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x67, 0x86, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x68, 0x0d, 0x08, 0x28,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x69, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6a, 0x18, 0x24, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6b, 0x83, 0xfc, 0xfa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6c, 0x23, 0x8a, 0xbf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6d, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6e, 0x27, 0x97, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6f, 0x23, 0xaa, 0x91,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x70, 0x93, 0xfc, 0xfa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x71, 0x83, 0x80, 0x30,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x72, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x73, 0x18, 0x3e, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x74, 0x80, 0x7a, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x75, 0x19, 0x07, 0xe2,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x76, 0x23, 0x3e, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x77, 0x0d, 0x00, 0xea,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x78, 0x80, 0x7b, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x79, 0x38, 0x7e, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7a, 0x1c, 0x76, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7b, 0x90, 0x7b, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7d, 0x19, 0x75, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7e, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7f, 0x19, 0x75, 0x9f,
+ 0xfc, 0xf3, 0x68, 0x64, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa0, 0x91, 0xcb,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb0, 0x50, 0x1a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa1, 0x82, 0xf3,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb1, 0x02, 0xf5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa2, 0x82, 0xb5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb2, 0x50, 0x1f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa3, 0x83, 0xf4,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb3, 0x50, 0x2a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa4, 0x96, 0x66,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb4, 0x50, 0x3b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa5, 0x82, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb5, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa6, 0xc2, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb6, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa7, 0xc2, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb7, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa8, 0x82, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb8, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa9, 0x82, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb9, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaa, 0xc2, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xba, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xab, 0x82, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbb, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xac, 0xc2, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbc, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xad, 0x83, 0xe8,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbd, 0x50, 0x6b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xae, 0x97, 0x58,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbe, 0x50, 0x74,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf8, 0x80, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc8, 0x00, 0x29,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xee, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf9, 0x08, 0x5f,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfa, 0x24, 0x81,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x05, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x01, 0x00, 0x02,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x07, 0xf0, 0xf0,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x09, 0x08, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0d, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x0e, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf2, 0x00, 0x44,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf6, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc6, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc7, 0x00, 0x08,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xd2, 0x8a, 0x94,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x04,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x2f, 0x01, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x39, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xcf, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd0, 0x06, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd5, 0x3c, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x20, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x33, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb3, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb4, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x70, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xd2, 0x00, 0x32,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfb, 0x00, 0x00
+};
+
+static const u8 tf700t_input_parameter[] = {
+ FM34NE_BUF_ADDR,
+ 0xfc, 0xf3, 0x68, 0x64, 0x04,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x00, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x01, 0x82, 0x30, 0x50,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x02, 0x27, 0x90, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x03, 0x19, 0x00, 0xa0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x04, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x05, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x06, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x07, 0x1c, 0x5a, 0xaf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x08, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x09, 0x19, 0x01, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0a, 0x27, 0x90, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0b, 0x19, 0x01, 0x10,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0c, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0d, 0x90, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0e, 0x80, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x0f, 0x1c, 0x58, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x10, 0x90, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x11, 0x82, 0x2d, 0x20,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x12, 0x27, 0x98, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x13, 0x19, 0x01, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x14, 0x80, 0x50, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x15, 0x90, 0x50, 0x3a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x16, 0x80, 0x50, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x17, 0x90, 0x50, 0x4f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x18, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x19, 0x19, 0x00, 0x6f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1a, 0x80, 0x00, 0xac,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1b, 0x26, 0x7c, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1d, 0x19, 0x1d, 0x82,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1e, 0x19, 0x1c, 0xef,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x1f, 0x80, 0x53, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x20, 0x93, 0xe2, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x21, 0x80, 0x4f, 0xba,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x22, 0x22, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x23, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x24, 0x18, 0x2f, 0xd0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x25, 0x94, 0x4f, 0xb6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x26, 0x80, 0x4f, 0x6a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x27, 0x26, 0x7a, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x28, 0x18, 0x2f, 0x80,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x29, 0x18, 0x2b, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2a, 0x95, 0x62, 0x06,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2b, 0x95, 0x61, 0x46,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2c, 0x40, 0xfa, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2d, 0x40, 0xe5, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2e, 0x82, 0x30, 0x14,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x2f, 0x27, 0x00, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x30, 0x22, 0x78, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x31, 0x83, 0xfd, 0x44,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x32, 0x26, 0xe2, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x33, 0x19, 0x03, 0x90,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x34, 0x93, 0xfd, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x35, 0x83, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x36, 0x23, 0xa2, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x37, 0x93, 0xfd, 0x5a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x38, 0x00, 0x00, 0x00,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x39, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3a, 0x18, 0x3f, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3b, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3c, 0x19, 0x6c, 0xa4,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3d, 0x19, 0x66, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3e, 0x80, 0x79, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x3f, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x40, 0x27, 0x97, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x41, 0x19, 0x04, 0x40,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x42, 0x94, 0x7b, 0xd6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x43, 0x80, 0x00, 0x1a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x44, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x45, 0x18, 0x48, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x46, 0x38, 0x00, 0x87,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x47, 0x09, 0x00, 0x1b,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x48, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x49, 0x18, 0x2d, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4a, 0x18, 0x21, 0x5f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4b, 0x88, 0x4f, 0x47,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4c, 0x82, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4d, 0x22, 0x62, 0x1f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4e, 0x26, 0x62, 0x7f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x4f, 0x19, 0x05, 0x25,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x50, 0x3b, 0xff, 0xc7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x51, 0x19, 0x05, 0x3f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x52, 0x0d, 0x01, 0xa6,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x53, 0x92, 0x2a, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x54, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x55, 0x18, 0x23, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x56, 0x96, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x57, 0x96, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x58, 0x9a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x59, 0x9a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5a, 0x96, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5b, 0x38, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5c, 0x83, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5d, 0x3b, 0x20, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5e, 0x36, 0x2b, 0x01,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x5f, 0x36, 0x2b, 0x60,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x60, 0x1c, 0x72, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x61, 0x93, 0xff, 0x9a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x62, 0x93, 0xff, 0xaa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x63, 0x86, 0x2a, 0xa1,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x64, 0x86, 0x2a, 0xb0,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x65, 0x8a, 0x2a, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x66, 0x8a, 0x2a, 0xd7,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x67, 0x86, 0x2a, 0xe8,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x68, 0x0d, 0x08, 0x28,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x69, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6a, 0x18, 0x24, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6b, 0x83, 0xfc, 0xfa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6c, 0x23, 0x8a, 0xbf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6d, 0x82, 0x2d, 0x2f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6e, 0x27, 0x97, 0xdf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x6f, 0x23, 0xaa, 0x91,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x70, 0x93, 0xfc, 0xfa,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x71, 0x83, 0x80, 0x30,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x72, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x73, 0x18, 0x3e, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x74, 0x80, 0x7a, 0x4a,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x75, 0x19, 0x07, 0xe2,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x76, 0x23, 0x3e, 0x0f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x77, 0x0d, 0x00, 0xea,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x78, 0x80, 0x7b, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x79, 0x38, 0x7e, 0x02,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7a, 0x1c, 0x76, 0x9f,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7b, 0x90, 0x7b, 0xca,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7c, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7d, 0x19, 0x75, 0xcf,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7e, 0x34, 0x00, 0x0e,
+ 0xfc, 0xf3, 0x0d, 0x10, 0x7f, 0x19, 0x75, 0x9f,
+ 0xfc, 0xf3, 0x68, 0x64, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa0, 0x91, 0xcb,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb0, 0x50, 0x1a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa1, 0x82, 0xf3,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb1, 0x02, 0xf5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa2, 0x82, 0xb5,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb2, 0x50, 0x1f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa3, 0x83, 0xf4,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb3, 0x50, 0x2a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa4, 0x96, 0x66,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb4, 0x50, 0x3b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa5, 0x82, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb5, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa6, 0xc2, 0xcc,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb6, 0x50, 0x46,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa7, 0xc2, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb7, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa8, 0x82, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb8, 0x50, 0x4a,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xa9, 0x82, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xb9, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xaa, 0xc2, 0x31,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xba, 0x50, 0x4b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xab, 0x82, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbb, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xac, 0xc2, 0x3f,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbc, 0x50, 0x56,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xad, 0x83, 0xe8,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbd, 0x50, 0x6b,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xae, 0x97, 0x58,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xbe, 0x50, 0x74,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf8, 0x80, 0x05,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc8, 0x00, 0x29,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xee, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf9, 0x08, 0x5f,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfa, 0x24, 0x81,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x05, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x01, 0x00, 0x02,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x07, 0xf0, 0xf0,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x09, 0x08, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0d, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x0c, 0x0e, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf2, 0x00, 0x44,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xf6, 0x00, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc6, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xc7, 0x00, 0x08,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xd2, 0x8a, 0x94,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x03, 0x00, 0x01,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x00, 0x00, 0x04,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x04, 0x23, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x2f, 0x01, 0x10,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x39, 0x00, 0x06,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xcf, 0x01, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd0, 0x06, 0x20,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xd5, 0x3c, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x6e, 0x20, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x33, 0x02, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb3, 0x00, 0x0a,
+ 0xfc, 0xf3, 0x3b, 0x23, 0xb4, 0x00, 0x02,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x70, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x91, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x92, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x93, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x94, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x23, 0x95, 0x40, 0x00,
+ 0xfc, 0xf3, 0x3b, 0x3f, 0xd2, 0x00, 0x32,
+ 0xfc, 0xf3, 0x3b, 0x22, 0xfb, 0x00, 0x00
+};
+#endif
--
2.53.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] ASoC: dt-bindings: Document FM34NE DSP
2026-10-19 10:13 ` [PATCH v2 1/2] ASoC: dt-bindings: Document " Svyatoslav Ryhel
@ 2026-10-19 10:17 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-10-19 10:17 UTC (permalink / raw)
To: Svyatoslav Ryhel; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] dt-bindings: dsp: relative $ref to sound schemas fails dt_binding_check
--
commit fb615b13d5875feacbe1263da737f849cd8294c6
Author: Svyatoslav Ryhel <clamor95@gmail.com>
ASoC: dt-bindings: Document FM34NE DSP
This commit adds a device tree binding schema for the Fortemedia FM34NE DSP
voice processor used in ASUS Transformer devices.
> diff --git a/Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml b/Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml
> new file mode 100644
> index 0000000000000..46308a462af16
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/dsp/asus,tf201-dsp.yaml
> @@ -0,0 +1,77 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/dsp/asus,tf201-dsp.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Fortemedia FM34NE based voice processor
> +
> +description:
> + Fortemedia FM34NE is a hardware voice processor (DSP — Digital Signal
> + Processor) designed by Fortemedia. It specializes in real-time audio
> + processing, focusing on noise suppression and echo cancellation.
> +
> +maintainers:
> + - Svyatoslav Ryhel <clamor95@gmail.com>
> +
> +allOf:
> + - $ref: dai-common.yaml#
> +
> +properties:
> + compatible:
> + enum:
> + - asus,sl101-dsp
> + - asus,tf101-dsp
> + - asus,tf201-dsp
> + - asus,tf300t-dsp
> + - asus,tf700t-dsp
> + - pegatron,chagall-dsp
> +
> + reg:
> + maxItems: 1
> +
> + clocks:
> + items:
> + - description: Master clock to the DSP
> +
> + reset-gpios:
> + maxItems: 1
> +
> + bypass-gpios:
> + maxItems: 1
> + description: Signal that switches DSP into programming mode.
> +
> + vdd-supply: true
> +
> + port:
> + $ref: audio-graph-port.yaml#
> + unevaluatedProperties: false
[Severity: Medium]
Since the $id for this schema is under /schemas/dsp/, relative $ref entries
resolve against http://devicetree.org/schemas/dsp/. Because dai-common.yaml
and audio-graph-port.yaml are located in Documentation/devicetree/bindings/sound/
rather than Documentation/devicetree/bindings/dsp/, won't these relative
references fail to resolve during dt_binding_check?
Should these references use /schemas/sound/dai-common.yaml# and
/schemas/sound/audio-graph-port.yaml# instead?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261019101357.117462-1-clamor95@gmail.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] ASoC: codecs: Add support for Fortemedia FM34NE DSP
2026-10-19 10:13 ` [PATCH v2 2/2] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
@ 2026-10-19 10:29 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-10-19 10:29 UTC (permalink / raw)
To: Svyatoslav Ryhel; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] ASoC: fm34ne-dsp: goto mixing and stuck bypass_gpio in fm34ne_dsp_set_config()
- [Medium] ASoC: fm34ne-dsp: conflicting DAPM widget events clobber DSP state
- [Low] ASoC: fm34ne-dsp: reset GPIO left deasserted when DSP is disabled
--
commit 44c3b6ffa34580e6c173c2874d0fa14d84f97af1
Author: Svyatoslav Ryhel <clamor95@gmail.com>
ASoC: codecs: Add support for Fortemedia FM34NE DSP
This commit adds an ASoC codec driver for the Fortemedia FM34NE digital
sound processing chip used for active noise suppression on ASUS
Transformer devices.
> diff --git a/sound/soc/codecs/fm34ne-dsp.c b/sound/soc/codecs/fm34ne-dsp.c
> new file mode 100644
> index 0000000000000..608b94e6ea0ca
> --- /dev/null
> +++ b/sound/soc/codecs/fm34ne-dsp.c
[ ... ]
> +static int fm34ne_dsp_set_config(struct fm34ne_dsp *dsp, enum dsp_state state)
> +{
> + struct device *dev = &dsp->client->dev;
> + int ret;
> +
> + guard(mutex)(&dsp->lock);
> +
> + gpiod_set_value_cansleep(dsp->bypass_gpio, 1);
> + msleep(20);
> +
> + switch (state) {
> + case FM34NE_NS_ENABLE:
> + ret = i2c_master_send(dsp->client, dsp->info->enable_parameter,
> + dsp->info->enable_parameter_length);
> + if (ret < 0) {
> + dev_err(dev, "Failed to set DSP enable %d\n", ret);
> + goto exit;
> + }
> +
> + ret = i2c_master_send(dsp->client, dsp->info->enable_noise_suppression,
> + dsp->info->enable_ns_length);
> + if (ret < 0) {
> + dev_err(dev, "Failed to enable DSP noise suppression %d\n", ret);
> + goto exit;
> + }
> +
> + break;
> +
> + case FM34NE_NS_DISABLE:
> + ret = i2c_master_send(dsp->client, dsp->info->enable_parameter,
> + dsp->info->enable_parameter_length);
> + if (ret < 0) {
> + dev_err(dev, "Failed to set DSP enable with %d\n", ret);
> + goto exit;
> + }
> +
> + ret = i2c_master_send(dsp->client, dsp->info->disable_noise_suppression,
> + dsp->info->disable_ns_length);
> + if (ret < 0) {
> + dev_err(dev, "Failed to disable DSP noise suppression with %d\n", ret);
> + goto exit;
> + }
> +
> + break;
> +
> + case FM34NE_BYPASS:
> + default:
> + ret = i2c_master_send(dsp->client, bypass_parameter, sizeof(bypass_parameter));
> + if (ret < 0) {
> + dev_err(dev, "Failed to set DSP bypass with %d\n", ret);
> + goto exit;
> + }
> +
> + break;
> + }
> +
> +exit:
> + if (ret < 0)
> + return ret;
> +
> + gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
> +
> + return 0;
> +}
[Severity: Medium]
In sound/soc/codecs/fm34ne-dsp.c, fm34ne_dsp_set_config() mixes
guard(mutex)(&dsp->lock) with goto exit labels, which goes against the
scope-based cleanup guidelines in include/linux/cleanup.h.
Also, if any i2c_master_send() call fails during a DAPM widget event
(via fm34ne_dsp_int_state_control() or fm34ne_dsp_ext_state_control()),
the exit label returns early when ret < 0 before resetting
dsp->bypass_gpio back to 0:
exit:
if (ret < 0)
return ret;
gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
Should fm34ne_dsp_set_config() deassert dsp->bypass_gpio before
returning on error so the DSP is not left stuck in programming mode, and
avoid mixing guard(mutex) with goto labels (as well as explicitly
including <linux/cleanup.h> and <linux/mutex.h>)?
> +static int fm34ne_dsp_ext_state_control(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *kcontrol, int event)
> +{
> + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> + struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
> +
> + switch (event) {
> + case SND_SOC_DAPM_POST_PMU:
> + return fm34ne_dsp_set_config(dsp, FM34NE_BYPASS);
> +
> + default:
> + WARN(1, "Unexpected event");
> + return -EINVAL;
> + }
> +}
> +
> +static int fm34ne_dsp_int_state_control(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *kcontrol, int event)
> +{
> + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> + struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
> +
> + switch (event) {
> + case SND_SOC_DAPM_POST_PMU:
> + return fm34ne_dsp_set_config(dsp, FM34NE_NS_ENABLE);
> +
> + case SND_SOC_DAPM_PRE_PMD:
> + return fm34ne_dsp_set_config(dsp, FM34NE_NS_DISABLE);
> +
> + default:
> + WARN(1, "Unexpected event");
> + return -EINVAL;
> + }
> +}
> +
> +static const struct snd_soc_dapm_widget fm34ne_dsp_dapm_widgets[] = {
> + SND_SOC_DAPM_INPUT("DSP DMIC"),
> + SND_SOC_DAPM_INPUT("DSP AMIC"),
> +
> + SND_SOC_DAPM_OUT_DRV_E("DSP Processing Engine INT", SND_SOC_NOPM,
> + 0, 0, NULL, 0, fm34ne_dsp_int_state_control,
> + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
> + SND_SOC_DAPM_OUT_DRV_E("DSP Processing Engine EXT", SND_SOC_NOPM,
> + 0, 0, NULL, 0, fm34ne_dsp_ext_state_control,
> + SND_SOC_DAPM_POST_PMU),
> +
> + SND_SOC_DAPM_OUTPUT("DSP Digital Mic"),
> + SND_SOC_DAPM_OUTPUT("DSP Analog Mic"),
> +};
[Severity: Medium]
Can transitions between "DSP Processing Engine INT" and
"DSP Processing Engine EXT" clobber the shared DSP state?
Both widgets call fm34ne_dsp_set_config() to update the global hardware
state without tracking which engine is active:
1. If "DSP Processing Engine EXT" powers up (SND_SOC_DAPM_POST_PMU ->
FM34NE_BYPASS) and "DSP Processing Engine INT" subsequently powers down
(SND_SOC_DAPM_PRE_PMD -> FM34NE_NS_DISABLE), fm34ne_dsp_int_state_control()
sends dsp->info->enable_parameter and dsp->info->disable_noise_suppression,
taking the DSP out of bypass mode while the external analog mic path is
still active.
2. Conversely, "DSP Processing Engine EXT" only handles
SND_SOC_DAPM_POST_PMU and has no PMD handler. If both paths are active
and "DSP Processing Engine EXT" powers down while
"DSP Processing Engine INT" remains powered on, the DSP stays in
FM34NE_BYPASS instead of restoring FM34NE_NS_ENABLE.
Should the driver coordinate state across these widgets (or model the
routing so the active path's configuration is preserved)?
[ ... ]
> +static void fm34ne_dsp_reset(struct fm34ne_dsp *dsp)
> +{
> + gpiod_set_value_cansleep(dsp->reset_gpio, 1);
> + msleep(20);
> + gpiod_set_value_cansleep(dsp->reset_gpio, 0);
> + msleep(100);
> +}
> +
> +static void fm34ne_dsp_disable_hw(struct fm34ne_dsp *dsp)
> +{
> + gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
> + regulator_disable(dsp->vdd_supply);
> + clk_disable_unprepare(dsp->dap_mclk);
> +}
> +
> +static int fm34ne_dsp_probe(struct snd_soc_component *component)
> +{
[ ... ]
> +exit:
> + fm34ne_dsp_reset(dsp);
> + fm34ne_dsp_disable_hw(dsp);
> +
> + return ret;
> +}
> +
> +static void fm34ne_dsp_remove(struct snd_soc_component *component)
> +{
> + struct fm34ne_dsp *dsp = snd_soc_component_get_drvdata(component);
> +
> + fm34ne_dsp_reset(dsp);
> + fm34ne_dsp_disable_hw(dsp);
> +}
[ ... ]
> +static int fm34ne_probe(struct i2c_client *client)
> +{
[ ... ]
> + dsp->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
> + if (IS_ERR(dsp->reset_gpio))
> + return dev_err_probe(dev, PTR_ERR(dsp->reset_gpio),
> + "Failed to get reset GPIO\n");
[Severity: Low]
Is the reset_gpio state inverted during probe and hardware disable?
In fm34ne_probe(), dsp->reset_gpio is requested with GPIOD_OUT_LOW
(deasserted) before vdd_supply and dap_mclk are enabled in
fm34ne_dsp_enable_hw().
In addition, both fm34ne_dsp_remove() and the error path in
fm34ne_dsp_probe() call fm34ne_dsp_reset() right before
fm34ne_dsp_disable_hw():
fm34ne_dsp_reset(dsp);
fm34ne_dsp_disable_hw(dsp);
fm34ne_dsp_reset() asserts reset_gpio (1) for 20 ms, then deasserts
reset_gpio (0) and sleeps 100 ms waiting for the chip to boot, only for
fm34ne_dsp_disable_hw() to immediately turn off vdd_supply and dap_mclk
with reset_gpio left deasserted.
Should fm34ne_probe() request reset_gpio with GPIOD_OUT_HIGH, and should
fm34ne_dsp_disable_hw() assert reset_gpio (1) instead of calling
fm34ne_dsp_reset() before power-down?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261019101357.117462-1-clamor95@gmail.com?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-19 10:29 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-19 10:13 [PATCH v2 0/2] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
2026-10-19 10:13 ` [PATCH v2 1/2] ASoC: dt-bindings: Document " Svyatoslav Ryhel
2026-10-19 10:17 ` sashiko-bot
2026-10-19 10:13 ` [PATCH v2 2/2] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
2026-10-19 10:29 ` sashiko-bot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.