Devicetree
 help / color / mirror / Atom feed
* [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
@ 2026-10-13 18:47 Svyatoslav Ryhel
  2026-10-13 18:47 ` [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document " Svyatoslav Ryhel
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:47 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.

Resending since previous attempt seems to be malformed.

Svyatoslav Ryhel (2):
  ASoC: dt-bindings: Document FM34NE DSP
  ASoC: codecs: Add support for Fortemedia FM34NE DSP

 .../bindings/sound/asus,tf201-dsp.yaml        |   80 ++
 sound/soc/codecs/Kconfig                      |   12 +
 sound/soc/codecs/Makefile                     |    2 +
 sound/soc/codecs/fm34ne-dsp.c                 |  388 +++++++
 sound/soc/codecs/fm34ne-dsp.h                 | 1030 +++++++++++++++++
 5 files changed, 1512 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/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] 9+ messages in thread

* [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document FM34NE DSP
  2026-10-13 18:47 [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
@ 2026-10-13 18:47 ` Svyatoslav Ryhel
  2026-10-13 18:56   ` sashiko-bot
  2026-10-13 18:47 ` [PATCH v1 2/2 RESEND] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
  2026-10-13 18:49 ` [PATCH v1 0/2 " Mark Brown
  2 siblings, 1 reply; 9+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:47 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/sound/asus,tf201-dsp.yaml        | 80 +++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml

diff --git a/Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml b/Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml
new file mode 100644
index 0000000000000..6b1c478bd03cc
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml
@@ -0,0 +1,80 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/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
+
+  ports:
+    $ref: /schemas/graph.yaml#/properties/ports
+
+  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 = <&fn34ne_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] 9+ messages in thread

* [PATCH v1 2/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
  2026-10-13 18:47 [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
  2026-10-13 18:47 ` [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document " Svyatoslav Ryhel
@ 2026-10-13 18:47 ` Svyatoslav Ryhel
  2026-10-13 18:54   ` sashiko-bot
  2026-10-13 18:49 ` [PATCH v1 0/2 " Mark Brown
  2 siblings, 1 reply; 9+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:47 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

FM34NE is 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 |  388 +++++++++++++
 sound/soc/codecs/fm34ne-dsp.h | 1030 +++++++++++++++++++++++++++++++++
 4 files changed, 1432 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..7b1147b9315a9 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..74520e37c1d1a
--- /dev/null
+++ b/sound/soc/codecs/fm34ne-dsp.c
@@ -0,0 +1,388 @@
+// 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/mod_devicetable.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:
+	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] 9+ messages in thread

* Re: [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
  2026-10-13 18:47 [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
  2026-10-13 18:47 ` [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document " Svyatoslav Ryhel
  2026-10-13 18:47 ` [PATCH v1 2/2 RESEND] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
@ 2026-10-13 18:49 ` Mark Brown
  2026-10-13 18:51   ` Svyatoslav Ryhel
  2 siblings, 1 reply; 9+ messages in thread
From: Mark Brown @ 2026-10-13 18:49 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jaroslav Kysela, Takashi Iwai, linux-sound, devicetree,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 367 bytes --]

On Tue, Oct 13, 2026 at 09:47:51PM +0300, Svyatoslav Ryhel wrote:
> The Fortemedia FM34NE is digital sound processing chip used for
> active noise suppression mainly on ASUS Transformers.
> 
> Resending since previous attempt seems to be malformed.

Please send a new version if you have rebased, tooling gets very
confused about which v1 it's talking about.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
  2026-10-13 18:49 ` [PATCH v1 0/2 " Mark Brown
@ 2026-10-13 18:51   ` Svyatoslav Ryhel
  2026-10-13 18:55     ` Mark Brown
  0 siblings, 1 reply; 9+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:51 UTC (permalink / raw)
  To: Mark Brown
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jaroslav Kysela, Takashi Iwai, linux-sound, devicetree,
	linux-kernel

вт, 13 жовт. 2026 р. о 21:49 Mark Brown <broonie@kernel.org> пише:
>
> On Tue, Oct 13, 2026 at 09:47:51PM +0300, Svyatoslav Ryhel wrote:
> > The Fortemedia FM34NE is digital sound processing chip used for
> > active noise suppression mainly on ASUS Transformers.
> >
> > Resending since previous attempt seems to be malformed.
>
> Please send a new version if you have rebased, tooling gets very
> confused about which v1 it's talking about.

I have not rebased, it seems that format-patch malformed first
iteration. Both patchsets are made from the same commits with same
hash.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 2/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
  2026-10-13 18:47 ` [PATCH v1 2/2 RESEND] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
@ 2026-10-13 18:54   ` sashiko-bot
  0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-10-13 18:54 UTC (permalink / raw)
  To: Svyatoslav Ryhel; +Cc: devicetree, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] asoc: fm34ne-dsp: I2C transfer errors are silently masked by unconditional return 0
- [Low] asoc: fm34ne-dsp: mixing goto-based cleanup with guard() scope-based locking
--

commit c702ef2250bbc5a4eaf5b40b9bb43fc3e069825a
Author: Svyatoslav Ryhel <clamor95@gmail.com>

ASoC: codecs: Add support for Fortemedia FM34NE DSP

This commit introduces a new I2C-based ALSA SoC codec driver for the
Fortemedia FM34NE DSP. This chip is primarily used for active noise
suppression on devices like the ASUS Transformers.

> diff --git a/sound/soc/codecs/fm34ne-dsp.c b/sound/soc/codecs/fm34ne-dsp.c
> new file mode 100644
> index 0000000000000..74520e37c1d1a
> --- /dev/null
> +++ b/sound/soc/codecs/fm34ne-dsp.c
> @@ -0,0 +1,388 @@
[ ... ]
> +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;

[Severity: Low]
Does this mix goto-based error cleanup with scope-based locking?

According to the kernel's cleanup helpers documentation, the expectation
is that the usage of goto labels and scope-based cleanup helpers (like
guard) should not be mixed in the same function. This is to avoid confusing
ownership and lock release semantics. Could this be converted entirely to
scope-based cleanup, or stick to traditional locking?

> +		}
> +
> +		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;
[ ... ]
> +exit:
> +	gpiod_set_value_cansleep(dsp->bypass_gpio, 0);
> +
> +	return 0;

[Severity: Medium]
Does this unconditionally discard the error code returned by
i2c_master_send on the failure paths?

By returning 0 here after jumping to the exit label, callers like
fm34ne_dsp_probe will assume the hardware was successfully configured
even if the underlying I2C transfer failed. Should this propagate the
negative error code stored in ret instead?

> +}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261013184755.530392-1-clamor95@gmail.com?part=2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
  2026-10-13 18:51   ` Svyatoslav Ryhel
@ 2026-10-13 18:55     ` Mark Brown
  2026-10-13 18:56       ` Svyatoslav Ryhel
  0 siblings, 1 reply; 9+ messages in thread
From: Mark Brown @ 2026-10-13 18:55 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jaroslav Kysela, Takashi Iwai, linux-sound, devicetree,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 887 bytes --]

On Tue, Oct 13, 2026 at 09:51:56PM +0300, Svyatoslav Ryhel wrote:
> вт, 13 жовт. 2026 р. о 21:49 Mark Brown <broonie@kernel.org> пише:
> > On Tue, Oct 13, 2026 at 09:47:51PM +0300, Svyatoslav Ryhel wrote:

> > > The Fortemedia FM34NE is digital sound processing chip used for
> > > active noise suppression mainly on ASUS Transformers.

> > > Resending since previous attempt seems to be malformed.

> > Please send a new version if you have rebased, tooling gets very
> > confused about which v1 it's talking about.

> I have not rebased, it seems that format-patch malformed first
> iteration. Both patchsets are made from the same commits with same
> hash.

That sounds like a rebase to me, and in any case the same issue is going
to apply - if you are not sending *identical* patches the tooling will
get confused about what version it's looking at.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document FM34NE DSP
  2026-10-13 18:47 ` [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document " Svyatoslav Ryhel
@ 2026-10-13 18:56   ` sashiko-bot
  0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-10-13 18:56 UTC (permalink / raw)
  To: Svyatoslav Ryhel; +Cc: devicetree, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Low] dt-bindings: typo in example clock phandle fn34ne_clk
- [Low] dt-bindings: missing audio-graph-port validation on nested ports children
--

commit 7ea62b580d59721cf9be3722ba0f59686684d184
Author: Svyatoslav Ryhel <clamor95@gmail.com>

ASoC: dt-bindings: Document FM34NE DSP
    
Document the FM34NE DSP based voice processor used in the ASUS Transformer
devices.

> diff --git a/Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml b/Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml
> new file mode 100644
> index 0000000000000..6b1c478bd03cc
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/asus,tf201-dsp.yaml
> @@ -0,0 +1,80 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---

[ ... ]

> +  bypass-gpios:
> +    maxItems: 1
> +    description: Signal that switches DSP into programming mode.
> +
> +  vdd-supply: true
> +
> +  ports:
> +    $ref: /schemas/graph.yaml#/properties/ports

[Severity: Low]
Does this node lack audio-graph-port validation for its nested port children?

When a device tree configuration uses the ports container node, any properties
inside its nested port@X children will only be validated against the generic
graph.yaml schema, not audio-graph-port.yaml#. As a result, invalid or
misspelled audio-specific properties will silently pass schema validation.

Should this explicitly apply patternProperties with a reference to
audio-graph-port.yaml# for the children?

> +
> +  port:
> +    $ref: audio-graph-port.yaml#
> +    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 = <&fn34ne_clk>;

[Severity: Low]
This isn't a bug, but should this phandle name be &fm34ne_clk to match the
FM34NE chip name?

> +
> +            bypass-gpios = <&gpio 222 GPIO_ACTIVE_HIGH>;
> +            reset-gpios = <&gpio 115 GPIO_ACTIVE_LOW>;
> +
> +            vdd-supply = <&vdd_1v8_dsp>;
> +        };
> +    };
> +...

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261013184755.530392-1-clamor95@gmail.com?part=1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP
  2026-10-13 18:55     ` Mark Brown
@ 2026-10-13 18:56       ` Svyatoslav Ryhel
  0 siblings, 0 replies; 9+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:56 UTC (permalink / raw)
  To: Mark Brown
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jaroslav Kysela, Takashi Iwai, linux-sound, devicetree,
	linux-kernel

вт, 13 жовт. 2026 р. о 21:55 Mark Brown <broonie@kernel.org> пише:
>
> On Tue, Oct 13, 2026 at 09:51:56PM +0300, Svyatoslav Ryhel wrote:
> > вт, 13 жовт. 2026 р. о 21:49 Mark Brown <broonie@kernel.org> пише:
> > > On Tue, Oct 13, 2026 at 09:47:51PM +0300, Svyatoslav Ryhel wrote:
>
> > > > The Fortemedia FM34NE is digital sound processing chip used for
> > > > active noise suppression mainly on ASUS Transformers.
>
> > > > Resending since previous attempt seems to be malformed.
>
> > > Please send a new version if you have rebased, tooling gets very
> > > confused about which v1 it's talking about.
>
> > I have not rebased, it seems that format-patch malformed first
> > iteration. Both patchsets are made from the same commits with same
> > hash.
>
> That sounds like a rebase to me, and in any case the same issue is going
> to apply - if you are not sending *identical* patches the tooling will
> get confused about what version it's looking at.

Noted, thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-10-13 18:57 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-13 18:47 [PATCH v1 0/2 RESEND] ASoC: codecs: Add support for Fortemedia FM34NE DSP Svyatoslav Ryhel
2026-10-13 18:47 ` [PATCH v1 1/2 RESEND] ASoC: dt-bindings: Document " Svyatoslav Ryhel
2026-10-13 18:56   ` sashiko-bot
2026-10-13 18:47 ` [PATCH v1 2/2 RESEND] ASoC: codecs: Add support for Fortemedia " Svyatoslav Ryhel
2026-10-13 18:54   ` sashiko-bot
2026-10-13 18:49 ` [PATCH v1 0/2 " Mark Brown
2026-10-13 18:51   ` Svyatoslav Ryhel
2026-10-13 18:55     ` Mark Brown
2026-10-13 18:56       ` Svyatoslav Ryhel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox