[Refactor and sync kernel from Openwrt]

[Description]
Refactor and sync kernel from Openwrt

[Release-log]
N/A

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch
index a23f450..1ba2315 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch
@@ -25,7 +25,7 @@
 
 --- a/drivers/net/dsa/mv88e6xxx/chip.c
 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -4926,6 +4926,80 @@ static int mv88e6xxx_port_mdb_del(struct
+@@ -4927,6 +4927,80 @@ static int mv88e6xxx_port_mdb_del(struct
  	return err;
  }
  
@@ -106,7 +106,7 @@
  static int mv88e6xxx_port_egress_floods(struct dsa_switch *ds, int port,
  					 bool unicast, bool multicast)
  {
-@@ -4980,6 +5054,8 @@ static const struct dsa_switch_ops mv88e
+@@ -4981,6 +5055,8 @@ static const struct dsa_switch_ops mv88e
  	.port_mdb_prepare       = mv88e6xxx_port_mdb_prepare,
  	.port_mdb_add           = mv88e6xxx_port_mdb_add,
  	.port_mdb_del           = mv88e6xxx_port_mdb_del,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch
index 37e7a7f..9999249 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch
@@ -19,7 +19,7 @@
 
 --- a/drivers/net/dsa/mv88e6xxx/chip.c
 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -4993,7 +4993,7 @@ static void mv88e6xxx_port_mirror_del(st
+@@ -4994,7 +4994,7 @@ static void mv88e6xxx_port_mirror_del(st
  		if (chip->info->ops->set_egress_port(chip,
  						     direction,
  						     dsa_upstream_port(ds,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/files-5.4/drivers/mtd/nmbm/nmbm-core.c b/recipes-kernel/linux/linux-mediatek-5.4/generic/files-5.4/drivers/mtd/nmbm/nmbm-core.c
index 18dfb6a..b80ea42 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/files-5.4/drivers/mtd/nmbm/nmbm-core.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/files-5.4/drivers/mtd/nmbm/nmbm-core.c
@@ -2189,7 +2189,7 @@
 		return false;
 	}
 
-	if (!nld->oobsize || !is_power_of_2(nld->oobsize)) {
+	if (!nld->oobsize) {
 		nmbm_log_lower(nld, NMBM_LOG_ERR,
 			       "Page spare size %u is not valid\n", nld->oobsize);
 		return false;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/hack-5.4/902-debloat_proc.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/hack-5.4/902-debloat_proc.patch
index 0309b3c..afde1e8 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/hack-5.4/902-debloat_proc.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/hack-5.4/902-debloat_proc.patch
@@ -246,7 +246,7 @@
  				&vmalloc_op,
 --- a/mm/vmstat.c
 +++ b/mm/vmstat.c
-@@ -1988,10 +1988,12 @@ void __init init_mm_internals(void)
+@@ -1984,10 +1984,12 @@ void __init init_mm_internals(void)
  	start_shepherd_timer();
  #endif
  #ifdef CONFIG_PROC_FS
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index b21daea..c670010 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
@@ -8,7 +8,7 @@
 
 --- a/drivers/mtd/ubi/build.c
 +++ b/drivers/mtd/ubi/build.c
-@@ -1168,6 +1168,73 @@ static struct mtd_info * __init open_mtd
+@@ -1161,6 +1161,73 @@ static struct mtd_info * __init open_mtd
  	return mtd;
  }
  
@@ -82,7 +82,7 @@
  static int __init ubi_init(void)
  {
  	int err, i, k;
-@@ -1251,6 +1318,12 @@ static int __init ubi_init(void)
+@@ -1244,6 +1311,12 @@ static int __init ubi_init(void)
  		}
  	}
  
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/532-jffs2_eofdetect.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/532-jffs2_eofdetect.patch
index df4ab9b..4cff181 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/532-jffs2_eofdetect.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/532-jffs2_eofdetect.patch
@@ -45,7 +45,7 @@
  
  		if (ret < 0)
  			goto out;
-@@ -564,6 +570,17 @@ full_scan:
+@@ -566,6 +572,17 @@ full_scan:
  			return err;
  	}
  
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
index 0735f8d..deed70e 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
@@ -28,7 +28,7 @@
  	/*
  	 * Get the required data from the packet.
  	 */
-@@ -1130,7 +1136,7 @@ int nf_conntrack_tcp_packet(struct nf_co
+@@ -1139,7 +1145,7 @@ int nf_conntrack_tcp_packet(struct nf_co
  		 IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED &&
  		 timeouts[new_state] > timeouts[TCP_CONNTRACK_UNACK])
  		timeout = timeouts[TCP_CONNTRACK_UNACK];
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/630-packet_socket_type.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/630-packet_socket_type.patch
index 0e6feec..54c087b 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/630-packet_socket_type.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/630-packet_socket_type.patch
@@ -87,7 +87,7 @@
  	if (!net_eq(dev_net(dev), sock_net(sk)))
  		goto drop;
  
-@@ -3296,6 +3298,7 @@ static int packet_create(struct net *net
+@@ -3301,6 +3303,7 @@ static int packet_create(struct net *net
  	mutex_init(&po->pg_vec_lock);
  	po->rollover = NULL;
  	po->prot_hook.func = packet_rcv;
@@ -95,7 +95,7 @@
  
  	if (sock->type == SOCK_PACKET)
  		po->prot_hook.func = packet_rcv_spkt;
-@@ -3939,6 +3942,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3944,6 +3947,16 @@ packet_setsockopt(struct socket *sock, i
  		po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
  		return 0;
  	}
@@ -112,7 +112,7 @@
  	default:
  		return -ENOPROTOOPT;
  	}
-@@ -3995,6 +4008,13 @@ static int packet_getsockopt(struct sock
+@@ -4000,6 +4013,13 @@ static int packet_getsockopt(struct sock
  	case PACKET_VNET_HDR:
  		val = po->has_vnet_hdr;
  		break;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/768-net-dsa-mv88e6xxx-Request-assisted-learning-on-CPU-port.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/768-net-dsa-mv88e6xxx-Request-assisted-learning-on-CPU-port.patch
index cb421f1..8e833ea 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/768-net-dsa-mv88e6xxx-Request-assisted-learning-on-CPU-port.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/768-net-dsa-mv88e6xxx-Request-assisted-learning-on-CPU-port.patch
@@ -17,7 +17,7 @@
 
 --- a/drivers/net/dsa/mv88e6xxx/chip.c
 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -5080,6 +5080,7 @@ static int mv88e6xxx_register_switch(str
+@@ -5081,6 +5081,7 @@ static int mv88e6xxx_register_switch(str
  	ds->ops = &mv88e6xxx_switch_ops;
  	ds->ageing_time_min = chip->info->age_time_coeff;
  	ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/834-ledtrig-libata.patch b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/834-ledtrig-libata.patch
index 2fbbb54..1c6eb8c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/834-ledtrig-libata.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/generic/pending-5.4/834-ledtrig-libata.patch
@@ -65,7 +65,7 @@
  /**
   *	ata_build_rw_tf - Build ATA taskfile for given read/write request
   *	@tf: Target ATA taskfile
-@@ -5152,6 +5165,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
+@@ -5155,6 +5168,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
  		if (tag < 0)
  			return NULL;
  	}
@@ -75,7 +75,7 @@
  
  	qc = __ata_qc_from_tag(ap, tag);
  	qc->tag = qc->hw_tag = tag;
-@@ -6088,6 +6104,9 @@ struct ata_port *ata_port_alloc(struct a
+@@ -6091,6 +6107,9 @@ struct ata_port *ata_port_alloc(struct a
  	ap->stats.unhandled_irq = 1;
  	ap->stats.idle_irq = 1;
  #endif
@@ -85,7 +85,7 @@
  	ata_sff_port_init(ap);
  
  	return ap;
-@@ -6123,6 +6142,12 @@ static void ata_host_release(struct kref
+@@ -6126,6 +6145,12 @@ static void ata_host_release(struct kref
  
  		kfree(ap->pmp_link);
  		kfree(ap->slave_link);
@@ -98,7 +98,7 @@
  		kfree(ap);
  		host->ports[i] = NULL;
  	}
-@@ -6586,7 +6611,23 @@ int ata_host_register(struct ata_host *h
+@@ -6589,7 +6614,23 @@ int ata_host_register(struct ata_host *h
  		host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
  		host->ports[i]->local_port_no = i + 1;
  	}
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi
index b148f6d..feef6a2 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi
@@ -99,10 +99,10 @@
 			<&clk40m>,
 			<&clk40m>,
 			<&infracfg_ao CK_INFRA_FRTC_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_HCK_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_133M_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_66M_CK>,
+			<&clk40m>,
+			<&clk40m>,
+			<&clk40m>,
+			<&clk40m>,
 			<&clk40m>,
 			<&clk40m>,
 			<&infracfg_ao CK_INFRA_FBIST2FPC_CK>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-emmc-rfb.dts
index c094abe..c12d50f 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-emmc-rfb.dts
@@ -120,6 +120,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts
index 6f2d966..47abc42 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -215,12 +216,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-sd-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-sd-rfb.dts
index 2a1d0dc..d22b90c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-sd-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-sd-rfb.dts
@@ -111,6 +111,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nand-rfb.dts
index 5504369..4235ce9 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nand-rfb.dts
@@ -102,6 +102,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -238,12 +239,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nor-rfb.dts
index c1f22d1..c5ca569 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-spim-nor-rfb.dts
@@ -102,6 +102,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -224,12 +225,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-emmc-rfb.dts
index b4ae0b0..f47e87d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-emmc-rfb.dts
@@ -127,6 +127,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-snfi-nand-rfb.dts
index 3164038..3fc699c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-snfi-nand-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nand-rfb.dts
index 203bc4a..a820237 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nand-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -240,12 +241,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nor-rfb.dts
index 275d48d..e56e5e0 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-spim-nor-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -227,12 +228,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a.dtsi
index 2b72991..9f86879 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a.dtsi
@@ -538,9 +538,11 @@
 			<0 0x11c20000 0 0x1000>;
 		interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&topckgen CK_TOP_EMMC_416M>,
-			<&topckgen CK_TOP_EMMC_250M>,
-			<&infracfg_ao CK_INFRA_MSDC_CK>;
-		clock-names = "source", "hclk", "source_cg";
+			<&infracfg_ao CK_INFRA_MSDC_HCK_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_66M_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_133M_CK>;
+		clock-names = "source", "hclk", "source_cg", "sys_cg", "axi_cg";
 		assigned-clocks = <&topckgen CK_TOP_EMMC_416M_SEL>,
 				  <&topckgen CK_TOP_EMMC_250M_SEL>;
 		assigned-clock-parents = <&topckgen CK_TOP_CB_M_416M>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-emmc-rfb.dts
index d768e45..be89622 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-emmc-rfb.dts
@@ -87,6 +87,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts
index d6eee2c..470e9f3 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts
@@ -85,6 +85,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -186,12 +187,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-sd-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-sd-rfb.dts
index 953cca1..a56da0d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-sd-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-sd-rfb.dts
@@ -87,6 +87,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-snfi-nand-rfb.dts
index ab72f6c..4fe4946 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-snfi-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nand-rfb.dts
index d2b3ba3..187a8a5 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -209,12 +210,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nor-rfb.dts
index 277eec2..f9fefa0 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-spim-nor-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -196,12 +197,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-emmc-rfb.dts
index 483c098..6ad8cd6 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-emmc-rfb.dts
@@ -87,6 +87,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts
index 06efb78..6524f3e 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nand-rfb.dts
index 6cecec9..3000914 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -192,12 +193,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nor-rfb.dts
index 443dbb5..e379691 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-spim-nor-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -179,12 +180,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b.dtsi
index 14e3640..523d585 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b.dtsi
@@ -504,9 +504,11 @@
 			<0 0x11c20000 0 0x1000>;
 		interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&topckgen CK_TOP_EMMC_416M>,
-			<&topckgen CK_TOP_EMMC_250M>,
-			<&infracfg_ao CK_INFRA_MSDC_CK>;
-		clock-names = "source", "hclk", "source_cg";
+			<&infracfg_ao CK_INFRA_MSDC_HCK_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_66M_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_133M_CK>;
+		clock-names = "source", "hclk", "source_cg", "sys_cg", "axi_cg";
 		assigned-clocks = <&topckgen CK_TOP_EMMC_416M_SEL>,
 				  <&topckgen CK_TOP_EMMC_250M_SEL>;
 		assigned-clock-parents = <&topckgen CK_TOP_CB_M_416M>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts
index ea663eb..7967ea8 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts
@@ -13,6 +13,21 @@
 		reg = <0 0x40000000 0 0x10000000>;
 	};
 
+	gpio-keys {
+			compatible = "gpio-keys";
+				reset {
+					label = "reset";
+					linux,code = <KEY_RESTART>;
+					gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+				};
+
+				wps {
+					label = "wps";
+					linux,code = <KEY_WPS_BUTTON>;
+					gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
+				};
+	};
+
 	nmbm_snfi {
 		compatible = "generic,nmbm";
 
@@ -88,6 +103,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 14 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts
index 0766648..745606f 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts
@@ -13,6 +13,21 @@
 		reg = <0 0x40000000 0 0x10000000>;
 	};
 
+	gpio-keys {
+			compatible = "gpio-keys";
+				reset {
+					label = "reset";
+					linux,code = <KEY_RESTART>;
+					gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+				};
+
+				wps {
+					label = "wps";
+					linux,code = <KEY_WPS_BUTTON>;
+					gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
+				};
+	};
+
 	nmbm_spim_nand {
 		compatible = "generic,nmbm";
 
@@ -99,6 +114,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 14 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-gsw.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-gsw.dts
index cd59f6d..0fb2e5a 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-gsw.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-gsw.dts
@@ -13,6 +13,21 @@
 		reg = <0 0x40000000 0 0x10000000>;
 	};
 
+	gpio-keys {
+			compatible = "gpio-keys";
+				reset {
+					label = "reset";
+					linux,code = <KEY_RESTART>;
+					gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+				};
+
+				wps {
+					label = "wps";
+					linux,code = <KEY_WPS_BUTTON>;
+					gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
+				};
+	};
+
 	nmbm_spim_nand {
 		compatible = "generic,nmbm";
 
@@ -249,13 +264,13 @@
 		conf-pu {
 			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 		conf-pd {
 			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-rfb.dts
index 86c3629..8ffdb44 100755
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-rfb.dts
@@ -13,6 +13,21 @@
 		reg = <0 0x40000000 0 0x10000000>;
 	};
 
+	gpio-keys {
+			compatible = "gpio-keys";
+				reset {
+					label = "reset";
+					linux,code = <KEY_RESTART>;
+					gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+				};
+
+				wps {
+					label = "wps";
+					linux,code = <KEY_WPS_BUTTON>;
+					gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
+				};
+	};
+
 	nmbm_spim_nand {
 		compatible = "generic,nmbm";
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nor-rfb.dts
index ee0382d..abd7fd3 100755
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nor-rfb.dts
@@ -168,13 +168,13 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981.dtsi
index 1374f2e..e99ef83 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981.dtsi
@@ -18,6 +18,9 @@
 #include <dt-bindings/reset/ti-syscon.h>
 #include <dt-bindings/clock/mt7981-clk.h>
 #include <dt-bindings/pinctrl/mt65xx.h>
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/gpio/gpio.h>
+
 / {
 	compatible = "mediatek,mt7981-rfb";
 	interrupt-parent = <&gic>;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi
index b148f6d..feef6a2 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi
@@ -99,10 +99,10 @@
 			<&clk40m>,
 			<&clk40m>,
 			<&infracfg_ao CK_INFRA_FRTC_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_HCK_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_133M_CK>,
-			<&infracfg_ao CK_INFRA_MSDC_66M_CK>,
+			<&clk40m>,
+			<&clk40m>,
+			<&clk40m>,
+			<&clk40m>,
 			<&clk40m>,
 			<&clk40m>,
 			<&infracfg_ao CK_INFRA_FBIST2FPC_CK>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-emmc-rfb.dts
index c094abe..c12d50f 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-emmc-rfb.dts
@@ -120,6 +120,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts
index 6f2d966..47abc42 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -215,12 +216,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-sd-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-sd-rfb.dts
index 2a1d0dc..d22b90c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-sd-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-sd-rfb.dts
@@ -111,6 +111,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nand-rfb.dts
index 5504369..4235ce9 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nand-rfb.dts
@@ -102,6 +102,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -238,12 +239,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nor-rfb.dts
index c1f22d1..c5ca569 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-spim-nor-rfb.dts
@@ -102,6 +102,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -224,12 +225,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-emmc-rfb.dts
index b4ae0b0..f47e87d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-emmc-rfb.dts
@@ -127,6 +127,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-snfi-nand-rfb.dts
index 3164038..3fc699c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-snfi-nand-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nand-rfb.dts
index 203bc4a..a820237 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nand-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -240,12 +241,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nor-rfb.dts
index 275d48d..e56e5e0 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-spim-nor-rfb.dts
@@ -109,6 +109,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -227,12 +228,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 	};
 };
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
index 2b72991..9f86879 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
@@ -538,9 +538,11 @@
 			<0 0x11c20000 0 0x1000>;
 		interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&topckgen CK_TOP_EMMC_416M>,
-			<&topckgen CK_TOP_EMMC_250M>,
-			<&infracfg_ao CK_INFRA_MSDC_CK>;
-		clock-names = "source", "hclk", "source_cg";
+			<&infracfg_ao CK_INFRA_MSDC_HCK_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_66M_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_133M_CK>;
+		clock-names = "source", "hclk", "source_cg", "sys_cg", "axi_cg";
 		assigned-clocks = <&topckgen CK_TOP_EMMC_416M_SEL>,
 				  <&topckgen CK_TOP_EMMC_250M_SEL>;
 		assigned-clock-parents = <&topckgen CK_TOP_CB_M_416M>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-emmc-rfb.dts
index d768e45..be89622 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-emmc-rfb.dts
@@ -87,6 +87,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts
index d6eee2c..470e9f3 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts
@@ -85,6 +85,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -186,12 +187,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-sd-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-sd-rfb.dts
index 953cca1..a56da0d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-sd-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-sd-rfb.dts
@@ -87,6 +87,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-snfi-nand-rfb.dts
index ab72f6c..4fe4946 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-snfi-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nand-rfb.dts
index d2b3ba3..187a8a5 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -209,12 +210,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nor-rfb.dts
index 277eec2..f9fefa0 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-spim-nor-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -196,12 +197,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-emmc-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-emmc-rfb.dts
index 483c098..6ad8cd6 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-emmc-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-emmc-rfb.dts
@@ -87,6 +87,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts
index 06efb78..6524f3e 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nand-rfb.dts
index 6cecec9..3000914 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nand-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -192,12 +193,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nor-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nor-rfb.dts
index 443dbb5..e379691 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nor-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-spim-nor-rfb.dts
@@ -78,6 +78,7 @@
 			compatible = "ethernet-phy-id67c9.de0a";
 			reg = <5>;
 			reset-gpios = <&pio 6 1>;
+			reset-assert-us = <600>;
 			reset-deassert-us = <20000>;
 			phy-mode = "2500base-x";
 		};
@@ -179,12 +180,12 @@
 		conf-pu {
 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-up-adv = <0>;	/* bias-disable */
+			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
 		};
 		conf-pd {
 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
 			drive-strength = <MTK_DRIVE_8mA>;
-			mediatek,pull-down-adv = <0>;	/* bias-disable */
+			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
 		};
 
 	};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b.dtsi
index 14e3640..523d585 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b.dtsi
@@ -504,9 +504,11 @@
 			<0 0x11c20000 0 0x1000>;
 		interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&topckgen CK_TOP_EMMC_416M>,
-			<&topckgen CK_TOP_EMMC_250M>,
-			<&infracfg_ao CK_INFRA_MSDC_CK>;
-		clock-names = "source", "hclk", "source_cg";
+			<&infracfg_ao CK_INFRA_MSDC_HCK_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_66M_CK>,
+			<&infracfg_ao CK_INFRA_MSDC_133M_CK>;
+		clock-names = "source", "hclk", "source_cg", "sys_cg", "axi_cg";
 		assigned-clocks = <&topckgen CK_TOP_EMMC_416M_SEL>,
 				  <&topckgen CK_TOP_EMMC_250M_SEL>;
 		assigned-clock-parents = <&topckgen CK_TOP_CB_M_416M>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c
index 1cd12bf..391cc1d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c
@@ -22,6 +22,9 @@
 	[MTK_EVENT_RFIFO_UF]	= "RFIFO UF",
 };
 
+static int mtk_wifi_num = 0;
+static int mtk_rest_cnt = 0;
+
 void mtk_reset_event_update(struct mtk_eth *eth, u32 id)
 {
 	struct mtk_reset_event *reset_event = &eth->reset_event;
@@ -144,8 +147,7 @@
 		val = ffs((unsigned int)status) - 1;
 		status &= ~(1 << val);
 
-		if ((val == MTK_EVENT_FQ_EMPTY) ||
-		    (val == MTK_EVENT_TSO_FAIL) ||
+		if ((val == MTK_EVENT_TSO_FAIL) ||
 		    (val == MTK_EVENT_TSO_ILLEGAL) ||
 		    (val == MTK_EVENT_TSO_ALIGN) ||
 		    (val == MTK_EVENT_RFIFO_OV) ||
@@ -205,7 +207,7 @@
 	u32 is_cdm1_busy = (mtk_r32(eth, MTK_FE_CDM1_FSM) & 0xFFFF0000) != 0;
 	u32 is_adma_busy = ((mtk_r32(eth, MTK_ADMA_RX_DBG0) & 0x1F) == 0) &&
 			   ((mtk_r32(eth, MTK_ADMA_RX_DBG1) & 0x3F0000) == 0) &&
-			   ((mtk_r32(eth, MTK_ADMA_RX_DBG1) & 0xFF) == 0);
+			   ((mtk_r32(eth, MTK_ADMA_RX_DBG0) & 0x40) == 0);
 
 	if (cur_wdidx == prev_wdidx && is_wtx_busy &&
 	    is_oq_free && is_cdm_full) {
@@ -321,12 +323,14 @@
 	mtk_w32(eth, val & ~(MTK_TX_DMA_EN), MTK_QDMA_GLO_CFG);
 
 	/* Power down sgmii */
-	regmap_read(eth->sgmii->regmap[0], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
-	val |= SGMII_PHYA_PWD;
-	regmap_write(eth->sgmii->regmap[0], SGMSYS_QPHY_PWR_STATE_CTRL, val);
-	regmap_read(eth->sgmii->regmap[1], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
-	val |= SGMII_PHYA_PWD;
-	regmap_write(eth->sgmii->regmap[1], SGMSYS_QPHY_PWR_STATE_CTRL, val);
+	for (i = 0; i < MTK_MAX_DEVS; i++) {
+		if (!eth->sgmii->regmap[i])
+			continue;
+
+		regmap_read(eth->sgmii->regmap[i], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
+		val |= SGMII_PHYA_PWD;
+		regmap_write(eth->sgmii->regmap[i], SGMSYS_QPHY_PWR_STATE_CTRL, val);
+	}
 
 	/* Force link down GMAC */
 	val = mtk_r32(eth, MTK_MAC_MCR(0));
@@ -391,7 +395,19 @@
 {
 	switch (event) {
 	case MTK_WIFI_RESET_DONE:
-		complete(&wait_ser_done);
+		mtk_rest_cnt--;
+		if(!mtk_rest_cnt) {
+			complete(&wait_ser_done);
+			mtk_rest_cnt = mtk_wifi_num;
+		}
+		break;
+	case MTK_WIFI_CHIP_ONLINE:
+		mtk_wifi_num++;
+		mtk_rest_cnt = mtk_wifi_num;
+		break;
+	case MTK_WIFI_CHIP_OFFLINE:
+		mtk_wifi_num--;
+		mtk_rest_cnt = mtk_wifi_num;
 		break;
 	default:
 		break;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h
index 9abd2f5..547d48f 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h
@@ -11,7 +11,8 @@
 #define MTK_FE_START_RESET	0x2000
 #define MTK_FE_RESET_DONE	0x2001
 #define MTK_WIFI_RESET_DONE	0x2002
-#define MTK_NAT_DISABLE		0x3000
+#define MTK_WIFI_CHIP_ONLINE 	0x2003
+#define MTK_WIFI_CHIP_OFFLINE 	0x2004
 #define MTK_FE_RESET_NAT_DONE	0x4001
 
 /* ADMA Rx Debug Monitor */
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 7149a69..40d840e 100755
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2686,7 +2686,7 @@
 	phylink_start(mac->phylink);
 	netif_start_queue(dev);
 	phy_node = of_parse_phandle(mac->of_node, "phy-handle", 0);
-	if (!phy_node) {
+	if (!phy_node && eth->sgmii->regmap[mac->id]) {
 		regmap_write(eth->sgmii->regmap[mac->id], SGMSYS_QPHY_PWR_STATE_CTRL, 0);
 	}
 	return 0;
@@ -2730,7 +2730,7 @@
 		val = _mtk_mdio_read(eth, 0, 0);
 		val |= BMCR_PDOWN;
 		_mtk_mdio_write(eth, 0, 0, val);
-	}else {
+	} else if (eth->sgmii->regmap[mac->id]) {
 		regmap_read(eth->sgmii->regmap[mac->id], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
 		val |= SGMII_PHYA_PWD;
 		regmap_write(eth->sgmii->regmap[mac->id], SGMSYS_QPHY_PWR_STATE_CTRL, val);
@@ -2927,7 +2927,7 @@
 	mtk_w32(eth, MTK_TX_DONE_INT, MTK_QDMA_INT_GRP1);
 	mtk_w32(eth, MTK_RX_DONE_INT(0), MTK_QDMA_INT_GRP2);
 	mtk_w32(eth, 0x21021003, MTK_FE_INT_GRP);
-	mtk_w32(eth, MTK_FE_INT_FQ_EMPTY | MTK_FE_INT_TSO_FAIL |
+	mtk_w32(eth, MTK_FE_INT_TSO_FAIL |
 		MTK_FE_INT_TSO_ILLEGAL | MTK_FE_INT_TSO_ALIGN |
 		MTK_FE_INT_RFIFO_OV | MTK_FE_INT_RFIFO_UF, MTK_FE_INT_ENABLE);
 
@@ -3128,7 +3128,7 @@
 	for (i = 0; i < MTK_MAC_COUNT; i++) {
 		mac = netdev_priv(eth->netdev[i]);
 		phy_node = of_parse_phandle(mac->of_node, "phy-handle", 0);
-		if (!phy_node) {
+		if (!phy_node && eth->sgmii->regmap[i]) {
 			mtk_gmac_sgmii_path_setup(eth, i);
 			regmap_write(eth->sgmii->regmap[i], SGMSYS_QPHY_PWR_STATE_CTRL, 0);
 		}
@@ -3647,22 +3647,24 @@
 		if (err)
 			goto err_free_dev;
 
-		if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSS)) {
-			for (i = 1; i < MTK_RX_NAPI_NUM; i++) {
-				err = devm_request_irq(eth->dev,
-						eth->irq[2 + i],
-						mtk_handle_irq_rx, 0,
-						dev_name(eth->dev),
-						&eth->rx_napi[i]);
+		if (MTK_MAX_IRQ_NUM > 3) {
+			if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSS)) {
+				for (i = 1; i < MTK_RX_NAPI_NUM; i++) {
+					err = devm_request_irq(eth->dev,
+							       eth->irq[2 + i],
+							       mtk_handle_irq_rx, 0,
+							       dev_name(eth->dev),
+							       &eth->rx_napi[i]);
+					if (err)
+						goto err_free_dev;
+				}
+			} else {
+				err = devm_request_irq(eth->dev, eth->irq[3],
+						       mtk_handle_fe_irq, 0,
+						       dev_name(eth->dev), eth);
 				if (err)
 					goto err_free_dev;
 			}
-		} else {
-			err = devm_request_irq(eth->dev, eth->irq[3],
-					       mtk_handle_fe_irq, 0,
-					       dev_name(eth->dev), eth);
-			if (err)
-				goto err_free_dev;
 		}
 	}
 
@@ -3711,9 +3713,11 @@
 	platform_set_drvdata(pdev, eth);
 
 	register_netdevice_notifier(&mtk_eth_netdevice_nb);
+#if defined(CONFIG_MEDIATEK_NETSYS_V2)
 	timer_setup(&eth->mtk_dma_monitor_timer, mtk_dma_monitor, 0);
 	eth->mtk_dma_monitor_timer.expires = jiffies;
 	add_timer(&eth->mtk_dma_monitor_timer);
+#endif
 
 	return 0;
 
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c
index 69f1c21..d4b9b63 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c
@@ -1950,20 +1950,35 @@
 				      size_t count, loff_t *data)
 {
 	char buf = 0;
-	int len = count;
-
-	if (copy_from_user(&buf, buffer, len))
+	int i;
+	u32 ppe_cfg;
+	
+	if ((count < 1) || copy_from_user(&buf, buffer, sizeof(buf)))
 		return -EFAULT;
 
-	if (buf == '1' && !mape_toggle) {
+	if (buf == '1') {
 		pr_info("mape is going to be enabled, ds-lite is going to be disabled !\n");
 		mape_toggle = 1;
-	} else if (buf == '0' && mape_toggle) {
+	} else if (buf == '0') {
 		pr_info("ds-lite is going to be enabled, mape is going to be disabled !\n");
 		mape_toggle = 0;
+	} else {
+		pr_info("Invalid parameter.\n");
+		return -EFAULT;
+	}
+
+	for (i = 0; i < CFG_PPE_NUM; i++) {
+		ppe_cfg = readl(hnat_priv->ppe_base[i] + PPE_FLOW_CFG);
+
+		if (mape_toggle)
+			ppe_cfg &= ~BIT_IPV4_DSL_EN;
+		else
+			ppe_cfg |= BIT_IPV4_DSL_EN;
+
+		writel(ppe_cfg, hnat_priv->ppe_base[i] + PPE_FLOW_CFG);
 	}
 
-	return len;
+	return count;
 }
 
 static const struct file_operations hnat_mape_toggle_fops = {
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
index 2df6d14..ccb4525 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
@@ -608,6 +608,13 @@
 	}
 }
 
+static void ppe_fill_flow_lbl(struct foe_entry *entry, struct ipv6hdr *ip6h)
+{
+	entry->ipv4_dslite.flow_lbl[0] = ip6h->flow_lbl[2];
+	entry->ipv4_dslite.flow_lbl[1] = ip6h->flow_lbl[1];
+	entry->ipv4_dslite.flow_lbl[2] = ip6h->flow_lbl[0];
+}
+
 unsigned int do_hnat_mape_w2l_fast(struct sk_buff *skb, const struct net_device *in,
 				   const char *func)
 {
@@ -659,6 +666,75 @@
 	}
 	return -1;
 }
+
+#if defined(CONFIG_MEDIATEK_NETSYS_V2)
+unsigned int do_hnat_mape_w2l(struct sk_buff *skb, const struct net_device *in,
+				   const char *func)
+{
+	struct ipv6hdr *ip6h = ipv6_hdr(skb);
+	struct iphdr _iphdr;
+	struct iphdr *iph;
+	struct foe_entry *entry;
+	struct tcpudphdr _ports;
+	const struct tcpudphdr *pptr;
+	int udp = 0;
+
+	/* WAN -> LAN/WLAN MapE learn info(include innner IPv4 header info). */
+	if (ip6h->nexthdr == NEXTHDR_IPIP) {
+		entry = &hnat_priv->foe_table_cpu[skb_hnat_ppe(skb)][skb_hnat_entry(skb)];
+
+		entry->ipv4_dslite.tunnel_sipv6_0 =
+			ntohl(ip6h->saddr.s6_addr32[0]);
+		entry->ipv4_dslite.tunnel_sipv6_1 =
+			ntohl(ip6h->saddr.s6_addr32[1]);
+		entry->ipv4_dslite.tunnel_sipv6_2 =
+			ntohl(ip6h->saddr.s6_addr32[2]);
+		entry->ipv4_dslite.tunnel_sipv6_3 =
+			ntohl(ip6h->saddr.s6_addr32[3]);
+
+		entry->ipv4_dslite.tunnel_dipv6_0 =
+			ntohl(ip6h->daddr.s6_addr32[0]);
+		entry->ipv4_dslite.tunnel_dipv6_1 =
+			ntohl(ip6h->daddr.s6_addr32[1]);
+		entry->ipv4_dslite.tunnel_dipv6_2 =
+			ntohl(ip6h->daddr.s6_addr32[2]);
+		entry->ipv4_dslite.tunnel_dipv6_3 =
+			ntohl(ip6h->daddr.s6_addr32[3]);
+
+		ppe_fill_flow_lbl(entry, ip6h);
+
+		iph = skb_header_pointer(skb, IPV6_HDR_LEN,
+					 sizeof(_iphdr), &_iphdr);
+		if (unlikely(!iph))
+			return NF_ACCEPT;
+
+		switch (iph->protocol) {
+		case IPPROTO_UDP:
+			udp = 1;
+		case IPPROTO_TCP:
+		break;
+
+		default:
+			return NF_ACCEPT;
+		}
+
+		pptr = skb_header_pointer(skb, IPV6_HDR_LEN + iph->ihl * 4,
+					  sizeof(_ports), &_ports);
+		if (unlikely(!pptr))
+			return NF_ACCEPT;
+
+		entry->bfib1.udp = udp;
+
+		entry->ipv4_dslite.new_sip = ntohl(iph->saddr);
+		entry->ipv4_dslite.new_dip = ntohl(iph->daddr);
+		entry->ipv4_dslite.new_sport = ntohs(pptr->src);
+		entry->ipv4_dslite.new_dport = ntohs(pptr->dst);
+
+		return 0;
+	}
+	return -1;
+}
+#endif
 
 static unsigned int is_ppe_support_type(struct sk_buff *skb)
 {
@@ -744,10 +820,15 @@
 
 	/* MapE need remove ipv6 header and pingpong. */
 	if (do_mape_w2l_fast(state->in, skb)) {
+#if defined(CONFIG_MEDIATEK_NETSYS_V2)
+		if (mape_toggle && do_hnat_mape_w2l(skb, state->in, __func__))
+			return NF_ACCEPT;
+#else
 		if (!do_hnat_mape_w2l_fast(skb, state->in, __func__))
 			return NF_STOLEN;
 		else
 			return NF_ACCEPT;
+#endif
 	}
 
 	if (is_from_mape(skb))
@@ -1033,7 +1114,6 @@
 	entry.bfib1.psn = (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) ? 1 : 0;
 	entry.bfib1.vlan_layer += (hw_path->flags & FLOW_OFFLOAD_PATH_VLAN) ? 1 : 0;
 	entry.bfib1.vpm = (entry.bfib1.vlan_layer) ? 1 : 0;
-	entry.bfib1.ttl = 1;
 	entry.bfib1.cah = 1;
 	entry.bfib1.time_stamp = (hnat_priv->data->version == MTK_HNAT_V4) ?
 		readl(hnat_priv->fe_base + 0x0010) & (0xFF) :
@@ -1079,13 +1159,6 @@
 	return entry;
 }
 
-static void ppe_fill_flow_lbl(struct foe_entry *entry, struct ipv6hdr *ip6h)
-{
-	entry->ipv4_dslite.flow_lbl[0] = ip6h->flow_lbl[2];
-	entry->ipv4_dslite.flow_lbl[1] = ip6h->flow_lbl[1];
-	entry->ipv4_dslite.flow_lbl[2] = ip6h->flow_lbl[0];
-}
-
 static unsigned int skb_to_hnat_info(struct sk_buff *skb,
 				     const struct net_device *dev,
 				     struct foe_entry *foe,
@@ -1341,6 +1414,16 @@
 				entry.ipv4_dslite.vlan1 = hw_path->vlan_id;
 				if (hnat_priv->data->per_flow_accounting)
 					entry.ipv4_dslite.iblk2.mibf = 1;
+				/* Map-E LAN->WAN record inner IPv4 header info. */
+#if defined(CONFIG_MEDIATEK_NETSYS_V2)
+				if (mape_toggle) {
+					entry.ipv4_dslite.iblk2.dscp = foe->ipv4_dslite.iblk2.dscp;
+					entry.ipv4_dslite.new_sip = foe->ipv4_dslite.new_sip;
+					entry.ipv4_dslite.new_dip = foe->ipv4_dslite.new_dip;
+					entry.ipv4_dslite.new_sport = foe->ipv4_dslite.new_sport;
+					entry.ipv4_dslite.new_dport = foe->ipv4_dslite.new_dport;
+				}
+#endif
 			} else if (mape_toggle &&
 				   entry.bfib1.pkt_type == IPV4_HNAPT) {
 				/* MapE LAN -> WAN */
@@ -1564,8 +1647,10 @@
 	 * by Wi-Fi whnat engine. These data and INFO2.dp will be updated and
 	 * the entry is set to BIND state in mtk_sw_nat_hook_tx().
 	 */
-	if (!whnat)
+	if (!whnat) {
+		entry.bfib1.ttl = 1;
 		entry.bfib1.state = BIND;
+	}
 
 	wmb();
 	memcpy(foe, &entry, sizeof(entry));
@@ -1738,6 +1823,7 @@
 		entry->ipv6_5t_route.iblk2.dp = gmac_no;
 	}
 
+	bfib1_tx.ttl = 1;
 	bfib1_tx.state = BIND;
 	wmb();
 	memcpy(&entry->bfib1, &bfib1_tx, sizeof(bfib1_tx));
@@ -2025,6 +2111,7 @@
 
 				entry->bfib1.udp = udp;
 
+				/* Map-E LAN->WAN record inner IPv4 header info. */
 #if defined(CONFIG_MEDIATEK_NETSYS_V2)
 				entry->bfib1.pkt_type = IPV4_MAP_E;
 				entry->ipv4_dslite.iblk2.dscp = iph->tos;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_stag.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_stag.c
index 73de3e9..75c3a75 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_stag.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_stag.c
@@ -40,7 +40,8 @@
 
 	switch (eth_proto) {
 	case ETH_P_IP:
-		if (entry->ipv4_hnapt.bfib1.pkt_type == IPV4_DSLITE)
+		if (entry->ipv4_hnapt.bfib1.pkt_type == IPV4_DSLITE
+			|| (entry->ipv4_hnapt.bfib1.pkt_type == IPV4_MAP_E))
 			entry->ipv4_dslite.etype = sp_tag;
 		else
 			entry->ipv4_hnapt.etype = sp_tag;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_sgmii.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_sgmii.c
index 50bdbd8..dacdf3c 100755
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_sgmii.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_sgmii.c
@@ -60,9 +60,8 @@
 		regmap_update_bits(ss->regmap[id], SGMSYS_QPHY_WRAP_CTRL,
 				   SGMII_PN_SWAP_MASK, SGMII_PN_SWAP_TX_RX);
 
-	regmap_read(ss->regmap[id], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
-	val &= ~SGMII_PHYA_PWD;
-	regmap_write(ss->regmap[id], SGMSYS_QPHY_PWR_STATE_CTRL, val);
+	/* Release PHYA power down state */
+	regmap_write(ss->regmap[id], SGMSYS_QPHY_PWR_STATE_CTRL, 0);
 
 	return 0;
 }
@@ -111,10 +110,9 @@
 	if(MTK_HAS_FLAGS(ss->flags[id],MTK_SGMII_PN_SWAP))
 		regmap_update_bits(ss->regmap[id], SGMSYS_QPHY_WRAP_CTRL,
 				   SGMII_PN_SWAP_MASK, SGMII_PN_SWAP_TX_RX);
+
 	/* Release PHYA power down state */
-	regmap_read(ss->regmap[id], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
-	val &= ~SGMII_PHYA_PWD;
-	regmap_write(ss->regmap[id], SGMSYS_QPHY_PWR_STATE_CTRL, val);
+	regmap_write(ss->regmap[id], SGMSYS_QPHY_PWR_STATE_CTRL, 0);
 
 	return 0;
 }
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x-spi.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x-spi.c
deleted file mode 100644
index 0708def..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x-spi.c
+++ /dev/null
@@ -1,86 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/err.h>
-#include <linux/spi/spi.h>
-
-/* alsa sound header */
-#include <sound/soc.h>
-#include <sound/pcm_params.h>
-
-#include "si3218x/si3218x.h"
-
-enum si3218x_spi_type {
-	MTK_EXT_PROSLIC = 0,
-	MTK_EXT_TYPE_NUM
-};
-
-struct mtk_ext_spi_ctrl {
-	int (*spi_probe)(struct spi_device *spi, struct spi_driver *spi_drv);
-	int (*spi_remove)(struct spi_device *spi);
-	const char *stream_name;
-	const char *codec_dai_name;
-	const char *codec_name;
-};
-
-static struct mtk_ext_spi_ctrl mtk_ext_list[MTK_EXT_TYPE_NUM] = {
-	[MTK_EXT_PROSLIC] = {
-		.spi_probe = si3218x_spi_probe,
-		.spi_remove = si3218x_spi_remove,
-	},
-};
-
-static unsigned int mtk_ext_type;
-
-static int mtk_ext_spi_probe(struct spi_device *spi);
-static int mtk_ext_spi_remove(struct spi_device *spi)
-{
-	dev_info(&spi->dev, "%s()\n", __func__);
-
-	if (mtk_ext_list[mtk_ext_type].spi_remove)
-		mtk_ext_list[mtk_ext_type].spi_remove(spi);
-
-	return 0;
-}
-
-static const struct of_device_id mtk_ext_match_table[] = {
-	{.compatible = "silabs,proslic_spi",},
-	{},
-};
-MODULE_DEVICE_TABLE(of, mtk_ext_match_table);
-
-static struct spi_driver mtk_ext_spi_driver = {
-	.driver = {
-		.name = "proslic_spi",
-		.owner = THIS_MODULE,
-		.of_match_table = of_match_ptr(mtk_ext_match_table),
-	},
-	.probe = mtk_ext_spi_probe,
-	.remove = mtk_ext_spi_remove,
-};
-
-module_spi_driver(mtk_ext_spi_driver);
-
-static int mtk_ext_spi_probe(struct spi_device *spi)
-{
-	int i, ret = 0;
-
-	dev_err(&spi->dev, "%s()\n", __func__);
-
-	mtk_ext_type = MTK_EXT_PROSLIC;
-	for (i = 0; i < MTK_EXT_TYPE_NUM; i++) {
-		if (!mtk_ext_list[i].spi_probe)
-			continue;
-
-		ret = mtk_ext_list[i].spi_probe(spi, &mtk_ext_spi_driver);
-		if (ret)
-			continue;
-
-		mtk_ext_type = i;
-		break;
-	}
-
-	return ret;
-}
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/Makefile b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/Makefile
deleted file mode 100644
index 907bb61..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-# Release Version 1.0.4
-# Add config define "CONFIG_SND_SOC_PROSLIC" to "y"
-# Add to Makefile of prented folder: obj-$(CONFIG_SND_SOC_PROSLIC) += proslic/
-
-# Platform
-subdir-ccflags-y += -DSI3218X
-subdir-ccflags-y += -DPROSLIC_LINUX_KERNEL
-subdir-ccflags-y += -Iinc
-subdir-ccflags-y += -Iconfig_inc
-
-
-# Basic
-snd-soc-si3218x-objs := proslic_sys_main.o proslic_sys_spi.o proslic_sys_timer.o si3218x.o proslic_spi_api.o proslic_timer_intf_linux.o
-
-obj-$(CONFIG_SND_SOC_SI3218X) += src/proslic.o src/proslic_tstin.o src/si_voice.o src/si_voice_version.o src/si3218x_intf.o src/vdaa.o src/vdaa_constants.o src/si3218x_LCCB_constants.o
-obj-$(CONFIG_SND_SOC_SI3218X) += patch_files/si3218x_patch_A_2017MAY25.o
-obj-$(CONFIG_SND_SOC_SI3218X) += snd-soc-si3218x.o
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/proslic_api_config.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/proslic_api_config.h
deleted file mode 100644
index d75a2ef..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/proslic_api_config.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * Author(s): 

- * laj

- *

- * Distributed by: 

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.	 

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- *

- */

-#ifndef PROSLIC_API_CFG

-#define PROSLIC_API_CFG

-

-/** @defgroup PROSLIC_CFG ProSLIC Configuration Options

- * @{

- */

-

-/** @defgroup PROSLIC_DRIVER_SEL ProSLIC Driver Selection

-* Define device driver to be compiled. 

-* @{

-*/

-#ifdef PROSLIC_DOXYGEN

-#define SI3217X /**< Define to support Si3217x chipset family in the build */

-#undef SI3217X 

-#define SI3217X_REVC_ONLY /**< Define to ONLY have Si3217x Rev C support (drop Rev B support) */

-#undef SI3217X_REVC_ONLY 

-#define SI3217X_REVB_ONLY /**< Define to ONLY have Si3217x Rev B support (drop Rev C support) */

-#undef SI3217X_REVB_ONLY 

-#define SI3218X /**< Define to support Si3218x chipset family in the build */

-#undef SI3218X 

-#define SI3219X /**< Define to support Si3219x chipset family in the build */

-#undef SI3219X 

-#define SI3226X /**< Define to support Si3226x chipset family in the build */

-#undef SI3226X 

-#define SI3228X /**< Define to support Si3228x chipset family in the build */

-#undef SI3228X 

-#error DO NOT BUILD WITH PROSLIC_DOXYGEN ENABLED

-#endif

-

-/** @} PROSLIC_DRIVER_SEL*/

-

-/** @defgroup CODE_OPTS Code feature options 

- * Select which options NOT to build - just uncomment out the undef to disable feature.

- * @{

- */

-#define DISABLE_VERIFY_PATCH      /**< Disable patch load verification */

-#undef DISABLE_VERIFY_PATCH 

-#define DISABLE_FSK_SETUP         /**< Disable the FSK setup & associated functions */

-#undef DISABLE_FSK_SETUP 

-#define DISABLE_TONE_SETUP        /**< Disable Tone setup API */

-#undef DISABLE_TONE_SETUP 

-#define DISABLE_RING_SETUP        /**< Disable Ring setup API */

-#undef DISABLE_RING_SETUP  

-#define DISABLE_DCFEED_SETUP      /**< Disable DC FEED setup API */

-#undef DISABLE_DCFEED_SETUP 

-#define DISABLE_GPIO_SETUP        /**< Disable GPIO setup API */

-#undef DISABLE_GPIO_SETUP 

-#define DISABLE_PCM_SETUP         /**< Disable PCM setup API */

-#undef DISABLE_PCM_SETUP 

-#define ENABLE_DEBUG              /**< Enable debug messages - function entry, etc. */

-/* #undef ENABLE_DEBUG */

-#define DISABLE_CI_SETUP          /**< Disable CI Setup */

-#undef DISABLE_CI_SETUP 

-#define DISABLE_ZSYNTH_SETUP      /**< Disable Zsyth/impedance setup */

-#undef DISABLE_ZSYNTH_SETUP  

-#define DISABLE_MALLOC            /**< Don't use MALLOC/FREE, instead assume user will statically allocate */

-#undef DISABLE_MALLOC 

-#define DISABLE_HPF_WIDEBAND      /**< Disable RX and TX HPF when in WIDEBAND mode */

-#undef DISABLE_HPF_WIDEBAND

-#define PROSLIC_OPTIMIZE_INTERRUPTS /**< Enable optimization for interrupts for dual channel devices.  This

-                                         optimization assumes channel number is on even boundaries - that is

-                                         0,2,4, are the first channel for each dual channel devices.

-                                     */

-#define ENABLE_TRACES /**< Enable this to see major API calls during software execution. NOT recommended for production code since it does add code space + can generate compiler warnings. */

-#undef ENABLE_TRACES

-

-#define SI_ENABLE_LOGGING  /**< This will enable the ability to log to a file - this assumes the application supports this.  See api_demo for example implementation */

-#undef SI_ENABLE_LOGGING 

-

-#define DISABLE_HOOKCHANGE /**< Disable ProSLIC_HookChangeDetect() and associated functions */

-#undef DISABLE_HOOKCHANGE

-

-#define DISABLE_PULSEMETERING /**< Disable pulse metering functions */

-#undef  DISABLE_PULSEMETERING

-

-/**@} */

-

-

-#define SIVOICE_NEON_MWI_SUPPORT /**< Enable NEON Message Waiting Indicator support */

-#undef SIVOICE_NEON_MWI_SUPPORT

-

-#define GCI_MODE  /**< Set if GCI vs. SPI/PCM mode is to be used */

-#undef GCI_MODE  

-

-#define ENABLE_HIRES_GAIN         /**<  Set for zsynth preset gains in dB*10 rather than dB */

-#undef  ENABLE_HIRES_GAIN         

-

-#define PRINT_TO_STRING 0         /**< Set this to 1 if printing to a string buffer vs. console - you may change/remove this*/

-

-

-/** @defgroup MULTI_BOM Multiple Device/BOM Option Support

- * Assign patch structure names to macros used in device drivers

-* @{ */

-#define SIVOICE_MULTI_BOM_SUPPORT     /**< Enable Multiple General Configuration Support */

-#undef SIVOICE_MULTI_BOM_SUPPORT 

-

-#ifdef SIVOICE_MULTI_BOM_SUPPORT

-#define SI3217X_PATCH_B_FLBK       si3217xPatchRevBFlbk  /**< Si3217x B Flyback DCDC Converter patch */

-#define SI3217X_PATCH_B_BKBT       si3217xPatchRevBBkbt  /**< Si3217x B Buck-boost DCDC Converter patch */

-#define SI3217X_PATCH_B_PBB        si3217xPatchRevBBkbt  /**< Si3217x B PMOS Buck-boost DCDC Converter patch */

-#define SI3217X_PATCH_B_LCQCUK     si3217xPatchRevBFlbk  /**< Si3217x C Quasi-CUK DCDC Converter patch */

-#define SI3217X_PATCH_C_FLBK       si3217xPatchRevCFlbk  /**< Si3217x C Flyback DCDC Converter patch */

-#define SI3217X_PATCH_C_BKBT       si3217xPatchRevCFlbk  /**< Si3217x C Buck-boost DCDC Converter patch */

-#define SI3217X_PATCH_C_PBB        si3217xPatchRevCFlbk  /**< Si3217x C PMOS Buck-boost DCDC Converter patch */

-#define SI3217X_PATCH_C_LCQCUK     si3217xPatchRevCFlbk  /**< Si3217x C Quasi-CUK DCDC Converter patch */

-

-#define SI3218X_PATCH_A            si3218xPatchRevALCQC  /**< Si3218x LCQC 5W DCDC Converter patch */

-

-#define SI3219X_PATCH_A            si3219xPatchRevALCQC  /**< SI3219x patch */

-

-#define SI3226X_PATCH_C_FLBK       si3226xPatchRevCFlbk    /**< Si3226x RevC Flyback DCDC Converter Patch */

-#define SI3226X_PATCH_C_CUK        si3226xPatchRevCFlbk    /**< Si3226x RevC Full CUK DCDC Converter Patch */

-#define SI3226X_PATCH_C_QCUK       si3226xPatchRevCFlbk    /**< Si3226x RevC Quasi-CUK DCDC Converter Patch */

-#define SI3226X_PATCH_C_LCQCUK     si3226xPatchRevCFlbk    /**< Si3226x RevC Low-cost QCUK DCDC Converter Patch */

-#define SI3226X_PATCH_C_TSS        si3226xPatchRevCTss     /**< Si3226x RevC TSS DCDC Converter Patch */

-#define SI3226X_PATCH_C_TSS_ISO    si3226xPatchRevCTssIso  /**< Si3226x RevC TSS (isolated) DCDC Converter Patch */

-#define SI3226X_PATCH_C_PBB        si3226xPatchRevCFlbk    /**< Si3226x PMOS Buck-boost DCDC Converter patch */   

-#define SI3226x_PATCH_C_FIXRL      SI3226X_PATCH_C_TSS

-#define SI3226X_PATCH_C_QSS        si3226xPatchRevCTss     /**< Si3226x RevC QSS DCDC Converter Patch */

-#define SI3226X_PATCH_C_BB         si3226xPatchRevCFlbk    /**< Si3226x BJT Buck-boost DCDC Converter patch */   

-

-#define SI3228X_PATCH_A            si3228xPatchRevALCQC  /**< Si3228x LCQC 5W DCDC Converter patch */

-

-#endif

-

-/* Default patch names for backwards compatibility */

-#define SI3217X_PATCH_B_DEFAULT    RevBPatch

-#define SI3217X_PATCH_C_DEFAULT    RevCPatch

-#define SI3218X_PATCH_A_DEFAULT    RevAPatch

-#define SI3219X_PATCH_A_DEFAULT    RevAPatch

-#define SI3226X_PATCH_C_DEFAULT    RevCPatch

-#define SI3228X_PATCH_A_DEFAULT    RevAPatch

-

-/** @} MULTI_BOM */

-

-

-#include <linux/module.h>

-#define LOGPRINT(...) printk(KERN_ERR __VA_ARGS__)

-#ifdef SI_ENABLE_LOGGING

-

-#ifdef PROSLIC_LINUX_KERNEL

-#error "Logging currently implemented only for userspace programs."

-#endif

-

-extern FILE *SILABS_LOG_FP; /* This global variable would need to be initialized by the user's program - see the api demo for example */

-#endif /* SI_ENABLE_LOGGING */

-

-#ifdef ENABLE_DEBUG

-#define DEBUG_ENABLED(X) ((X)->debugMode & 1)

-

-#ifdef SI_ENABLE_LOGGING

-#define DEBUG_PRINT(CHPTR,...) if( DEBUG_ENABLED(CHPTR) ){ fprintf(SILABS_LOG_FP, __VA_ARGS__); fflush(SILABS_LOG_FP);}

-#else

-#define DEBUG_PRINT(CHPTR,...) if( DEBUG_ENABLED(CHPTR) ) LOGPRINT(__VA_ARGS__)

-#endif /* Logging */

-

-#else /* No Debug */

-/* Handled in si_voice.h */

-#endif

-#define SI_ENABLE_LOGGING

-#ifdef ENABLE_TRACES

-#define TRACE_ENABLED(X) ((X)->debugMode & 2)

-

-#ifdef SI_ENABLE_LOGGING

-#define TRACEPRINT(CHPTR,FMT,...) if(TRACE_ENABLED(CHPTR)) {fprintf(SILABS_LOG_FP, "#TRC:%s channel: %d "FMT,__FUNCTION__, (CHPTR)->channel,__VA_ARGS__); fflush(SILABS_LOG_FP); }

-#define TRACEPRINT_NOCHAN(FMT,...) fprintf(SILABS_LOG_FP, "#TRC:%s "FMT,__FUNCTION__, __VA_ARGS__); fflush(SILABS_LOG_FP)

-#else

-#define TRACEPRINT(CHPTR,FMT,...) if(TRACE_ENABLED(CHPTR)) LOGPRINT("TRC:%s channel: %d "FMT,__FUNCTION__, (CHPTR)->channel,__VA_ARGS__)

-#define TRACEPRINT_NOCHAN(FMT,...) LOGPRINT("TRC:%s "FMT,__FUNCTION__, __VA_ARGS__)

-

-#endif /* SI_ENABLE_LOGGING */

-#else

-/* Handled in si_voice.h */

-#endif

-

-

-/** @defgroup PSTN_CFG PSTN Detection Options

-* @{ */

-#define PSTN_DET_ENABLE                  /**< Define to include Differential PSTN detection code */

-#undef PSTN_DET_ENABLE

-

-#define PSTN_DET_OPEN_FEMF_SETTLE   1500     /**< OPEN foreign voltage measurement settle time */

-#define PSTN_DET_DIFF_SAMPLES       4        /**< Number of I/V samples averaged [1 to 16] */

-#define PSTN_DET_MIN_ILOOP          700      /**< Minimum acceptable loop current */

-#define PSTN_DET_MAX_FEMF           10000    /**< Maximum OPEN state foreign voltage */

-#define PSTN_DET_POLL_RATE          10       /**< Rate of re-entrant code in ms */

-#define PSTN_DET_DIFF_IV1_SETTLE    1000     /**< Settle time before first I/V measurment in ms */

-#define PSTN_DET_DIFF_IV2_SETTLE    1000     /**< Settle time before first I/V measurment in ms */

-

-/** @} PSTN_CFG */

-#define SIVOICE_CFG_NEWTYPES_ONLY  1 /**< Set if not supporting Legacy types */

-

-

-/**@} */

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/si3218x_LCCB_constants.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/si3218x_LCCB_constants.h
deleted file mode 100644
index 94bdac1..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/si3218x_LCCB_constants.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- *

- * Si3218x ProSLIC API Configuration Tool Version 4.2.1

- * Last Updated in API Release: 9.2.0

- * source XML file: si3218x_LCCB_constants.xml

- *

- * Auto generated file from configuration tool.

- */

-

-

-#ifndef SI3218X_CONSTANTS_H

-#define SI3218X_CONSTANTS_H

-

-/** Ringing Presets */

-enum {

-	DEFAULT_RINGING,

-	RING_F20_45VRMS_0VDC_LPR,

-	RINGING_LAST_ENUM

-};

-

-/** DC_Feed Presets */

-enum {

-	DCFEED_48V_20MA,

-	DCFEED_48V_25MA,

-	DCFEED_PSTN_DET_1,

-	DCFEED_PSTN_DET_2,

-	DC_FEED_LAST_ENUM

-};

-

-/** Impedance Presets */

-enum {

-	ZSYN_600_0_0_30_0,

-	ZSYN_270_750_150_30_0,

-	ZSYN_370_620_310_30_0,

-	ZSYN_220_820_120_30_0,

-	ZSYN_600_0_1000_30_0,

-	ZSYN_200_680_100_30_0,

-	ZSYN_220_820_115_30_0,

-	WB_ZSYN_600_0_0_20_0,

-	IMPEDANCE_LAST_ENUM

-};

-

-/** FSK Presets */

-enum {

-	DEFAULT_FSK,

-	ETSI_FSK,

-	FSK_LAST_ENUM

-};

-

-/** Pulse_Metering Presets */

-enum {

-	DEFAULT_PULSE_METERING,

-	PULSE_METERING_LAST_ENUM

-};

-

-/** Tone Presets */

-enum {

-	TONEGEN_FCC_DIAL,

-	TONEGEN_FCC_BUSY,

-	TONEGEN_FCC_RINGBACK,

-	TONEGEN_FCC_REORDER,

-	TONEGEN_FCC_CONGESTION,

-	TONEGEN_FCC_CAS,

-	TONEGEN_FCC_SAS,

-	TONEGEN_ETSI_DTAS,

-	TONEGEN_1004,

-	TONE_LAST_ENUM

-};

-

-/** PCM Presets */

-enum {

-	PCM_8ULAW,

-	PCM_8ALAW,

-	PCM_16LIN,

-	PCM_16LIN_WB,

-	PCM_LAST_ENUM

-};

-

-

-

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/si_voice_datatypes.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/si_voice_datatypes.h
deleted file mode 100644
index 520a79d..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/si_voice_datatypes.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * si_voice_datatypes.h

- * ProSLIC datatypes file

- *

- * Author(s): 

- * laj

- *

- * Distributed by: 

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.	 

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- * File Description:

- * This is the header file that contains

- * type definitions for the data types

- * used in the demonstration code.

- *

- */

-#ifndef DATATYPES_H

-#define DATATYPES_H

-#include "proslic_api_config.h"

-

-#ifndef TRUE

-#define TRUE (1)

-#endif

-#ifndef FALSE

-#define FALSE (0)

-#endif

-

-#ifndef NULL

-#define NULL ((void *) 0)

-#endif

-

-#include <linux/types.h>

-typedef u_int8_t            BOOLEAN;

-typedef int8_t              int8;

-typedef u_int8_t            uInt8;

-typedef uInt8               uChar;

-typedef int16_t             int16;

-typedef u_int16_t           uInt16;

-typedef int32_t             int32;

-typedef u_int32_t           uInt32;

-typedef u_int32_t           ramData;

-

-

-#include <linux/slab.h>

-#include <linux/kernel.h> /* for abs() */

-/* NOTE: kcalloc was introduced in ~2.6.14, otherwise use kzalloc() with (X)*(Y) for the block size */

-#define SIVOICE_CALLOC(X,Y)   kcalloc((X),(Y), GFP_KERNEL)

-#define SIVOICE_FREE(X)       kfree((X))

-#define SIVOICE_MALLOC(X)     kmalloc((X), GFP_KERNEL)

-#define SIVOICE_STRCPY        strcpy

-#define SIVOICE_STRNCPY       strncpy

-#define SIVOICE_MEMSET        memset

-#define SIVOICE_ABS           abs

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/vdaa_api_config.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/vdaa_api_config.h
deleted file mode 100644
index 4967170..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/vdaa_api_config.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * vdaa_api_config.h

- * VoiceDAA header config file

- *

- * Author(s): 

- * naqamar, laj

- *

- * Distributed by: 

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.	 

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- * File Description:

- * This file is used 

- * in the VoiceDAA demonstration code. 

- *

- *

- */

-

-#ifndef VDAA_API_CFG_H

-#define VDAA_API_CFG_H

-

-/* #define DISABLE_MALLOC */

-/* #define DISABLE_VDAA_RING_DETECT_SETUP */

-/* #define DISABLE_VDAA_AUDIO_GAIN_SETUP */

-/* #define DISABLE_VDAA_PCM_SETUP */

-/* #define DISABLE_VDAA_COUNTRY_SETUP */

-/* #define DISABLE_VDAA_HYBRID_SETUP */

-#define DISABLE_VDAA_LOOPBACK_SETUP

-#define DISABLE_VDAA_IMPEDANCE_SETUP

-

-#ifndef ENABLE_DEBUG

-#define ENABLE_DEBUG

-#endif

-//#include "stdio.h"

-#include <linux/kernel.h>

-//#define LOGPRINT printf

-

-#endif

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/vdaa_constants.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/vdaa_constants.h
deleted file mode 100644
index 11940a6..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/config_inc/vdaa_constants.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * Si3217x ProSLIC API Configuration Tool Version 4.2.1

- * Last Updated in API Release: 9.2.0

- * source XML file: si3217x_FLBK_GDRV_constants.xml

- *

- * Auto generated file from configuration tool.

-*/

-

-

-#ifndef VDAA_CONSTANTS_H

-#define VDAA_CONSTANTS_H

-

-/** Vdaa_Country Presets */

-enum {

-	COU_USA,

-	COU_GERMANY,

-	COU_CHINA,

-	COU_AUSTRALIA,

-	VDAA_COUNTRY_LAST_ENUM

-};

-

-/** Vdaa_Audio_Gain Presets */

-enum {

-	AUDIO_GAIN_0DB,

-	AUDIO_ATTEN_4DB,

-	AUDIO_ATTEN_6DB,

-	AUDIO_ATTEN_11DB,

-	VDAA_AUDIO_GAIN_LAST_ENUM

-};

-

-/** Vdaa_Ring_Validation Presets */

-enum {

-	RING_DET_NOVAL_LOWV,

-	RING_DET_VAL_HIGHV,

-	VDAA_RING_VALIDATION_LAST_ENUM

-};

-

-/** Vdaa_PCM Presets */

-enum {

-	DAA_PCM_8ULAW,

-	DAA_PCM_8ALAW,

-	DAA_PCM_16LIN,

-	VDAA_PCM_LAST_ENUM

-};

-

-/** Vdaa_Hybrid Presets */

-enum {

-	HYB_600_0_0_500FT_24AWG,

-	HYB_270_750_150_500FT_24AWG,

-	HYB_200_680_100_500FT_24AWG,

-	HYB_220_820_120_500FT_24AWG,

-	VDAA_HYBRID_LAST_ENUM

-};

-

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/proslic.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/proslic.h
deleted file mode 100644
index a85c342..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/proslic.h
+++ /dev/null
@@ -1,2697 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- * File Description:
- * This is the header file for the ProSLIC driver.
- *
- */
-
-#ifndef PROSLIC_H
-#define PROSLIC_H
-
-/*include all the required headers*/
-#include "../config_inc/proslic_api_config.h"
-#include "../config_inc/si_voice_datatypes.h"
-#include "../inc/si_voice_ctrl.h"
-#include "../inc/si_voice_timer_intf.h"
-#include "../inc/si_voice.h"
-
-
-/* UNSORTED ADDITIONS - These common parameters have been moved from
-   the drivers to here to support simultaneous compile of multiple devices
-   */
-/* Patch Parameters */
-#define PATCH_NUM_LOW_ENTRIES       8
-#define PATCH_NUM_HIGH_ENTRIES      8
-#define PATCH_MAX_SUPPORT_RAM       128
-#define PATCH_MAX_SIZE              1024
-
-#define PROSLIC_RAM_MADC_VBAT   3
-#define PROSLIC_RAM_PATCHID         448
-#define PROSLIC_RAM_VERIFY_IO       449
-#define PROSLIC_RAM_PD_DCDC         1538
-#define PROSLIC_RAM_PRAM_ADDR       1358
-#define PROSLIC_RAM_PRAM_DATA       1359
-#define PATCH_JMPTBL_HIGH_ADDR      1597
-
-/* Common register values for 17x, 26x, 18x, 19x & 28x */
-#define PROSLIC_REG_ID              0
-#define PROSLIC_REG_RESET           1
-#define PROSLIC_REG_MSTRSTAT        3
-#define PROSLIC_REG_RAM_ADDR_HI     5
-#define PROSLIC_REG_PCMMODE         11
-#define PROSLIC_REG_PCMTXLO         12
-#define PROSLIC_REG_PCMTXHI         13
-#define PROSLIC_REG_PCMRXLO         14
-#define PROSLIC_REG_PCMRXHI         15
-#define PROSLIC_REG_IRQ             16
-#define PROSLIC_REG_IRQ0            17
-#define PROSLIC_REG_IRQ1            18
-#define PROSLIC_REG_IRQ4            21
-#define PROSLIC_REG_IRQEN1          22
-#define PROSLIC_REG_IRQEN2          23
-#define PROSLIC_REG_IRQEN3          24
-#define PROSLIC_REG_IRQEN4          25
-#define PROSLIC_REG_CALR0           26
-#define PROSLIC_REG_CALR3           29
-#define PROSLIC_REG_LINEFEED        30
-#define PROSLIC_REG_POLREV          31
-#define PROSLIC_REG_LCRRTP          34
-#define PROSLIC_REG_RINGCON         38
-#define PROSLIC_REG_RINGTALO        39
-#define PROSLIC_REG_RINGTAHI        40
-#define PROSLIC_REG_RINGTILO        41
-#define PROSLIC_REG_RINGTIHI        42
-#define PROSLIC_REG_LOOPBACK        43
-#define PROSLIC_REG_DIGCON          44
-#define PROSLIC_REG_ZCAL_EN         46
-#define PROSLIC_REG_ENHANCE         47
-#define PROSLIC_REG_OMODE           48
-#define PROSLIC_REG_OCON            49
-#define PROSLIC_REG_O1TALO          50
-#define PROSLIC_REG_O1TAHI          51
-#define PROSLIC_REG_O1TILO          52
-#define PROSLIC_REG_O1TIHI          53
-#define PROSLIC_REG_O2TALO          54
-#define PROSLIC_REG_O2TAHI          55
-#define PROSLIC_REG_O2TILO          56
-#define PROSLIC_REG_O2TIHI          57
-#define PROSLIC_REG_FSKDAT          58
-#define PROSLIC_REG_FSKDEPTH        59
-#define PROSLIC_REG_TONDTMF         60
-#define PROSLIC_REG_USERSTAT        66
-#define PROSLIC_REG_GPIO            67
-#define PROSLIC_REG_PMCON           75
-#define PROSLIC_REG_AUTORD          80
-#define PROSLIC_REG_JMPEN           81
-#define PATCH_JMPTBL_START_ADDR     82
-#define PATCH_JMPTBL_LOW_ADDR       82
-#define PROSLIC_REG_USERMODE_ENABLE 126
-
-/* Common RAM locations for most ProSLICs */
-#define PROSLIC_RAM_OSC1FREQ        26
-#define PROSLIC_RAM_OSC1AMP         27
-#define PROSLIC_RAM_OSC1PHAS        28
-#define PROSLIC_RAM_OSC2FREQ        29
-#define PROSLIC_RAM_OSC2AMP         30
-#define PROSLIC_RAM_OSC2PHAS        31
-#define PROSLIC_RAM_SLOPE_RING      637
-#define PROSLIC_RAM_V_VLIM              640
-#define PROSLIC_RAM_VOV_RING_BAT    753
-#define PROSLIC_RAM_RTPER           755
-#define PROSLIC_RAM_VBATR_EXPECT    768
-#define PROSLIC_RAM_FSKFREQ0        834
-#define PROSLIC_RAM_FSKFREQ1        835
-#define PROSLIC_RAM_FSKAMP0         836
-#define PROSLIC_RAM_FSKAMP1         837
-#define PROSLIC_RAM_FSK01           838
-#define PROSLIC_RAM_FSK10           839
-#define PROSLIC_RAM_RINGOF          843
-#define PROSLIC_RAM_RINGFR          844
-#define PROSLIC_RAM_RINGAMP         845
-#define PROSLIC_RAM_RTDCTH          847
-#define PROSLIC_RAM_RTACTH          848
-#define PROSLIC_RAM_RTDCDB          849
-#define PROSLIC_RAM_LCRMASK         854
-#define PROSLIC_RAM_IRING_LIM       860
-#define PROSLIC_RAM_VOV_RING_GND    896
-#define PROSLIC_RAM_MWI_V           914
-#define PROSLIC_RAM_DCDC_OITHRESH_LO    1006
-#define PROSLIC_RAM_DCDC_OITHRESH_HI    1007
-#define PROSLIC_RAM_CMDAC_FWD           1476
-#define PROSLIC_RAM_CMDAC_REV           1477
-#define PROSLIC_RAM_CAL_TRNRD_DACT  1458
-#define PROSLIC_RAM_CAL_TRNRD_DACR  1459
-#define PROSLIC_RAM_RDC_SUM         1499
-#define PROSLIC_RAM_DCDC_STATUS     1551
-#define PROSLIC_RAM_DCDC_RNGTYPE    1560
-
-#define PROSLIC_CHAN_BROADCAST          0xFF
-
-/* BOM Constants */
-#define BOM_KAUDIO_PM               0x8000000L
-#define BOM_KAUDIO_NO_PM            0x3A2E8BAL
-#define BOM_AC_ADC_GAIN_PM          0x151EB80L
-#define BOM_AC_ADC_GAIN_NO_PM       0x99999AL
-#define FIXRL_VDC_SCALE             0xAE924B9L  /** vdc sense scale when using fixed-rail */
-
-/* Generic Constants */
-#define COMP_5V                     0x51EB82L
-#define VBATL_13V                   0xF00000L
-#define COMP_10V                    0xA3D705L
-#define ZCAL_V_RASUM_IDEAL_VAL      0x8F00000L
-#define ZCAL_DC_DAC_OS_VAL          0x1FFE0000L
-
-/* MADC Constants */
-#define SCALE_V_MADC                1074      /* 1/(1000*931.32e-9)  mV */
-#define SCALE_I_MADC                597       /* 1/(1e6*1.676e-9)    uA */
-#define SCALE_P_MADC				2386	  /* 1/(1e3*419.095e-9)  mW */
-#define SCALE_R_MADC                1609      /* 1/(1e3*621.554e-9)  mV */
-
-/* Calibration Constants */
-#define CAL_LB_CMDAC                0x0C
-#define CAL_LB_TRNRD                0x03
-#define CAL_LB_ALL                  0x0F
-#define TIMEOUT_MADC_CAL            100
-#define TIMEOUT_GEN_CAL             300
-#define TIMEOUT_LB_CAL              2410
-
-/* MWI Constants */
-#define SIL_MWI_USTAT_SET           0x04
-#define SIL_MWI_USTAT_CLEAR         0xFB
-#define SIL_MWI_VPK_MAX             110
-#define SIL_MWI_VPK_MAX_LO          95
-#define SIL_MWI_VPK_MIN             80
-#define SIL_MWI_LCRMASK_MAX         2000
-#define SIL_MWI_LCRMASK_MIN         5
-#define SIL_MWI_LCRMASK_SCALE       65536
-#define SIL_MWI_FLASH_OFF           0
-#define SIL_MWI_FLASH_ON            1
-
-/* Depricated functions now mapped directly to SiVoice versions... */
-
-#define ProSLIC_clearErrorFlag                   SiVoice_clearErrorFlag
-#define ProSLIC_createChannel                    SiVoice_createChannel
-#define ProSLIC_createControlInterface           SiVoice_createControlInterface
-#define ProSLIC_createDevice                     SiVoice_createDevice
-#define ProSLIC_destroyChannel                   SiVoice_destroyChannel
-#define ProSLIC_destroyControlInterface          SiVoice_destroyControlInterface
-#define ProSLIC_destroyDevice                    SiVoice_destroyDevice
-#define ProSLIC_getChannelEnable                 SiVoice_getChannelEnable
-#define ProSLIC_getErrorFlag                     SiVoice_getErrorFlag
-#define ProSLIC_Reset                            SiVoice_Reset
-#define ProSLIC_setChannelEnable                 SiVoice_setChannelEnable
-#define ProSLIC_setControlInterfaceCtrlObj       SiVoice_setControlInterfaceCtrlObj
-#define ProSLIC_setControlInterfaceDelay         SiVoice_setControlInterfaceDelay
-#define ProSLIC_setControlInterfaceGetTime       SiVoice_setControlInterfaceGetTime
-#define ProSLIC_setControlInterfaceReadRAM       SiVoice_setControlInterfaceReadRAM
-#define ProSLIC_setControlInterfaceReadRegister  SiVoice_setControlInterfaceReadRegister
-#define ProSLIC_setControlInterfaceReset         SiVoice_setControlInterfaceReset
-#define ProSLIC_setControlInterfaceSemaphore     SiVoice_setControlInterfaceSemaphore
-#define ProSLIC_setControlInterfaceTimeElapsed   SiVoice_setControlInterfaceTimeElapsed
-#define ProSLIC_setControlInterfaceTimerObj      SiVoice_setControlInterfaceTimerObj
-#define ProSLIC_setControlInterfaceWriteRAM      SiVoice_setControlInterfaceWriteRAM
-#define ProSLIC_setControlInterfaceWriteRegister SiVoice_setControlInterfaceWriteRegister
-#define ProSLIC_setSWDebugMode                   SiVoice_setSWDebugMode
-#define ProSLIC_SWInitChan                       SiVoice_SWInitChan
-#define ProSLIC_Version                          SiVoice_Version
-#define ProSLIC_ReadReg                          SiVoice_ReadReg
-#define ProSLIC_WriteReg                         SiVoice_WriteReg
-#define ProSLIC_ShutdownChannel                  ProSLIC_PowerDownConverter
-#define ProSLIC_MWISetup(PCHAN,VPK,LCR)          ProSLIC_MWISetV(PCHAN,VPK)
-#define ProSLIC_MWI                              ProSLIC_MWISetState
-
-#define SI_MAX_INTERRUPTS 4
-
-#define PROSLIC_EXTENDED_GAIN_MAX 9
-#define PROSLIC_GAIN_MAX 6
-#define PROSLIC_GAIN_MIN -30
-/*
-** Initialization Sequence Location - Used by 18x & 17x
-*/
-typedef enum
-{
-  INIT_SEQ_BEGINNING,
-  INIT_SEQ_READ_ID,
-  INIT_SEQ_PRE_PATCH_LOAD,
-  INIT_SEQ_POST_PATCH_LOAD,
-  INIT_SEQ_PRE_CAL,
-  INIT_SEQ_POST_CAL,
-  INIT_SEQ_END
-} initSeqType;
-
-/** @mainpage
- * This document is a supplement to the ProSLIC API User Guide.  It has most
- * of the APIs documented and hyperlinked.
- *
- * This document has the following tabs:
- *
- * - Main Page (this page) - introduction to the document.
- * - Related pages - mainly the deprecated list is located here.
- *  Although these identifiers are present in the current release, they are
- *  targeted for deletion in a future release.  Any existing customer code
- *  using deprecated identifiers should be modified as indicated.
- * - Modules - this is the meat of the document - this has each functional group in outline format listed here.
- * - Data Structures - This has every data structure listed in in the ProSLIC API in alphabetical order.
- * - Files - this has the source files in hyperlink format.  @note In some cases the hyperlink generator will not properly
- *  generate the correct reference or not be able to find it.  In this case please use an alternative method.
- *
- */
-
-/** @defgroup PROSLIC_TYPES ProSLIC General Datatypes/Function Definitions
- * This section documents functions and data structures related to the
- * ProSLIC/FXS chipsets.
- * @{
- */
-
-/*
-* ----------------ProSLIC Generic DataTypes/Function Definitions----
-**********************************************************************
-*/
-
-#define MAX_PROSLIC_IRQS 32 /**< How many interrupts are supported in the ProSLIC */
-
-#ifdef ENABLE_DEBUG
-#define PROSLIC_PRINT_ERROR(CHAN, ERROR)\
-  LOGPRINT("%sError encountered on channel: %d fault code: %d\n",\
-    LOGPRINT_PREFIX, (CHAN)->channel, (ERROR))
-#else
-#define PROSLIC_PRINT_ERROR(CHAN, ERROR)
-#endif
-
-/**********************************************************************/
-/**
-* Map Proslic types to SiVoice types
-*/
-typedef SiVoiceControlInterfaceType controlInterfaceType; /**< Map ProSLIC to SiVoice type */
-typedef SiVoiceControlInterfaceType proslicControlInterfaceType; /**< Map ProSLIC to SiVoice type */
-typedef SiVoiceDeviceType ProslicDeviceType; /**< Map ProSLIC to SiVoice type */
-typedef SiVoiceChanType proslicChanType; /**< Map ProSLIC to SiVoice type */
-
-/**
-* Define channel and device type pointers
-*/
-typedef ProslicDeviceType
-*proslicDeviceType_ptr; /**< Shortcut for pointer to a ProSLIC device type */
-typedef proslicChanType
-*proslicChanType_ptr; /**< Shortcut for pointer to a ProSLIC channel type */
-
-/** @} PROSLIC_TYPES */
-
-/** @addtogroup HC_DETECT
- * @{
- */
-/**
-* This is structure used to store pulse dial information
-*/
-typedef struct {
-	uInt8 currentPulseDigit;
-	void *onHookTime; /**< Timestamp for when the onhook detection occured */
-	void *offHookTime; /**< Timestamp for when the offhook detection occured */
-} pulseDialType;
-
-/**
-* Defines structure for configuring pulse dial detection
-*/
-typedef struct {
-	uInt8 minOnHook; /**< Min mSec for onhook */
-	uInt8 maxOnHook; /**< Max mSec for onhook */
-	uInt8 minOffHook; /**< Min mSec for offhook */
-	uInt8 maxOffHook; /**< Max mSec for offhook */
-} pulseDial_Cfg;
-/** @} PD_DETECT */
-
-/**
-* This is structure used to store pulse dial information
-*/
-#define SI_HC_NO_ACTIVITY     0x10
-#define SI_HC_NEED_MORE_POLLS 0x20
-#define SI_HC_ONHOOK_TIMEOUT  0x41
-#define SI_HC_OFFHOOK_TIMEOUT 0x42
-#define SI_HC_HOOKFLASH       0x43
-
-#define SI_HC_NONDIGIT_DONE(X) ((X) & 0x40)
-#define SI_HC_DIGIT_DONE(X)    ((X) && ((X) < 11))
-
-typedef struct
-{
-  uInt8 currentPulseDigit;
-  uInt8 last_hook_state;
-  uInt8 lookingForTimeout;
-  uInt8 last_state_reported;
-  void *hookTime; /**< Timestamp for when the onhook detection occurred */
-} hookChangeType;
-
-/**
-* Defines structure for configuring hook change detection.  Times are in mSec.
-*/
-typedef struct
-{
-  uInt16 minOnHook; /**< Min mSec for onhook/break time  */
-  uInt16 maxOnHook; /**< Max mSec for onhook/break time  */
-  uInt16 minOffHook; /**< Min mSec for offhook/make time */
-  uInt16 maxOffHook; /**< Max mSec for offhook/make time */
-  uInt16 minInterDigit; /**< Minimum interdigit time */
-  uInt16 minHookFlash; /**< minimum hook flash time */
-  uInt16 maxHookFlash; /**< maximum hook flash time */
-  uInt16 minHook; /**< Minimum hook time, which should be >> than maxHookFlash */
-} hookChange_Cfg;
-/** @} HC_DETECT*/
-
-
-/** @addtogroup PROSLIC_INTERRUPTS
- * @{
- */
-/**
-* Interrupt tags
-*/
-
-/* MAINTAINER NOTE: if this enum changes, update interrupt.c in the API demo */
-typedef enum
-{
-  IRQ_OSC1_T1,
-  IRQ_OSC1_T2,
-  IRQ_OSC2_T1,
-  IRQ_OSC2_T2,
-  IRQ_RING_T1,
-  IRQ_RING_T2,
-  IRQ_PM_T1,
-  IRQ_PM_T2,
-  IRQ_FSKBUF_AVAIL, /**< FSK FIFO depth reached */
-  IRQ_VBAT,
-  IRQ_RING_TRIP, /**< Ring Trip detected */
-  IRQ_LOOP_STATUS,  /**< Loop Current changed */
-  IRQ_LONG_STAT,
-  IRQ_VOC_TRACK,
-  IRQ_DTMF,         /**< DTMF Detected - call @ref ProSLIC_DTMFReadDigit to decode the value */
-  IRQ_INDIRECT,     /**< Indirect/RAM access completed */
-  IRQ_TXMDM,
-  IRQ_RXMDM,
-  IRQ_PQ1,          /**< Power alarm 1 */
-  IRQ_PQ2,          /**< Power alarm 2 */
-  IRQ_PQ3,          /**< Power alarm 3 */
-  IRQ_PQ4,          /**< Power alarm 4 */
-  IRQ_PQ5,          /**< Power alarm 5 */
-  IRQ_PQ6,          /**< Power alarm 6 */
-  IRQ_RING_FAIL,
-  IRQ_CM_BAL,
-  IRQ_USER_0,
-  IRQ_USER_1,
-  IRQ_USER_2,
-  IRQ_USER_3,
-  IRQ_USER_4,
-  IRQ_USER_5,
-  IRQ_USER_6,
-  IRQ_USER_7,
-  IRQ_DSP,
-  IRQ_MADC_FS,
-  IRQ_P_HVIC,
-  IRQ_P_THERM, /**< Thermal alarm */
-  IRQ_P_OFFLD
-} ProslicInt;
-
-/**
-* Defines structure of interrupt data - used by @ref ProSLIC_GetInterrupts
-*/
-typedef struct
-{
-  ProslicInt
-  *irqs; /**< Pointer of an array of size MAX_PROSLIC_IRQS (this is to be allocated by the caller) */
-  uInt8 number; /**< Number of IRQs detected/pending */
-} proslicIntType;
-
-
-/** @} PROSLIC_INTERRUPTS */
-
-/** @addtogroup TONE_GEN
- * @{
- */
-/**
-* Defines structure for configuring 1 oscillator - see your data sheet for specifics or use the configuration
-* tool to have this filled in for you.
-*/
-typedef struct
-{
-  ramData freq;
-  ramData amp;
-  ramData phas;
-  uInt8 talo;
-  uInt8 tahi;
-  uInt8 tilo;
-  uInt8 tihi;
-} Oscillator_Cfg;
-
-/**
- * Defines structure for tone configuration.
- */
-typedef struct
-{
-  Oscillator_Cfg osc1;
-  Oscillator_Cfg osc2;
-  uInt8 omode;
-} ProSLIC_Tone_Cfg;
-
-typedef struct
-{
-  ramData fsk[2];
-  ramData fskamp[2];
-  ramData fskfreq[2];
-  uInt8 eightBit;
-  uInt8 fskdepth;
-} ProSLIC_FSK_Cfg;
-/** @} TONE_GEN */
-
-/*****************************************************************************/
-/** @addtogroup SIGNALING
- * @{
- */
-/**
-* Hook states - returned by @ref ProSLIC_ReadHookStatus()
-*/
-enum
-{
-  PROSLIC_ONHOOK, /**< Hook state is onhook */
-  PROSLIC_OFFHOOK /**< Hook state is offhook */
-};
-
-#ifndef SIVOICE_CFG_NEWTYPES_ONLY
-enum
-{
-  ONHOOK = PROSLIC_ONHOOK, /**< @deprecated- Please use PROSLIC_ONHOOK and PROSLIC_OFFHOOK for future code development */
-  OFFHOOK = PROSLIC_OFFHOOK
-};
-#endif
-
-/** @} SIGNALING */
-
-/*****************************************************************************/
-/** @addtogroup PCM_CONTROL
- * @{
-* Loopback modes
-*/
-typedef enum
-{
-  PROSLIC_LOOPBACK_NONE, /**< Loopback disabled */
-  PROSLIC_LOOPBACK_DIG,  /**< Loopback is toward the PCM side */
-  PROSLIC_LOOPBACK_ANA   /**< Loopback is toward the analog side */
-} ProslicLoopbackModes;
-
-/**
-* Mute options - which direction to mute
-*/
-typedef enum
-{
-  PROSLIC_MUTE_NONE = 0,  /**< Don't mute */
-  PROSLIC_MUTE_RX = 0x1,  /**< Mute toward the RX side */
-  PROSLIC_MUTE_TX = 0x2,  /**< Mute toward the TX side */
-  PROSLIC_MUTE_ALL = 0x3  /**< Mute both directions */
-} ProslicMuteModes;
-
-/** @} PCM_CONTROL */
-
-/*****************************************************************************/
-/** @addtogroup GAIN_CONTROL
- * @{
-* Path Selector
-*/
-enum
-{
-  TXACGAIN_SEL = 0,
-  RXACGAIN_SEL = 1
-};
-
-
-/*
-** Defines structure for configuring audio gain on the fly
-*/
-typedef struct
-{
-  ramData acgain;
-  uInt8 mute;
-  ramData aceq_c0;
-  ramData aceq_c1;
-  ramData aceq_c2;
-  ramData aceq_c3;
-} ProSLIC_audioGain_Cfg;
-
-/** @} GAIN_CONTROL */
-
-/*****************************************************************************/
-/** @addtogroup LINESTATUS
- * @{
- */
-/**
-* enumeration of the Proslic polarity reversal states - used by ProSLIC_PolRev API
-*/
-enum
-{
-  POLREV_STOP, /**< Stop Polarity reversal */
-  POLREV_START, /**< Start Polarity reversal */
-  WINK_START, /**< Start Wink */
-  WINK_STOP /**< Stop Wink */
-};
-
-/**
-* Defines initialization data structures
-* Linefeed states - used in @ref ProSLIC_SetLinefeedStatus and @ref ProSLIC_SetLinefeedStatusBroadcast
-*/
-enum
-{
-  LF_OPEN,          /**< Open circuit */
-  LF_FWD_ACTIVE,    /**< Forward active */
-  LF_FWD_OHT,       /**< Forward active, onhook transmission (used for CID/VMWI) */
-  LF_TIP_OPEN,      /**< Tip open */
-  LF_RINGING,       /**< Ringing */
-  LF_REV_ACTIVE,    /**< Reverse battery/polarity reversed, active */
-  LF_REV_OHT,       /**< Reverse battery/polarity reversed, active, onhook transmission (used for CID/VMWI) */
-  LF_RING_OPEN      /**< Ring open */
-} ;
-/** @} LINESTATUS */
-
-
-
-
-/*****************************************************************************/
-/** @addtogroup GEN_CFG
- * @{
- */
-
-/**
-* Defines initialization data structures
-*/
-typedef struct
-{
-  uInt8 address;
-  uInt8 initValue;
-} ProslicRegInit;
-
-typedef struct
-{
-  uInt16 address;
-  ramData initValue;
-} ProslicRAMInit;
-
-/**
-* ProSLIC patch object
-*/
-typedef struct
-{
-  const ramData *patchData; /**< 1024 max*/
-  const uInt16 *patchEntries; /**< 8 max */
-  const uInt32 patchSerial;
-  const uInt16 *psRamAddr;  /**< 128 max */
-  const ramData *psRamData; /**< 128 max */
-} proslicPatch;
-
-/** @} GEN_CFG */
-
-
-/*****************************************************************************/
-/** @addtogroup RING_CONTROL
- * @{
- */
-/**
-* Ringing type options
-* Ringing type options - Trapezoidal w/ a Crest factor CF11= Crest factor 1.1 or sinusoidal.
-*/
-typedef enum
-{
-  ProSLIC_RING_TRAP_CF11,
-  ProSLIC_RING_TRAP_CF12,
-  ProSLIC_RING_TRAP_CF13,
-  ProSLIC_RING_TRAP_CF14,
-  ProSLIC_RING_TRAP_CF15,
-  ProSLIC_RING_TRAP_CF16,
-  ProSLIC_RING_SINE /***< Plain old sinusoidal ringing */
-} ProSLIC_RINGTYPE_T;
-
-/**
-* Ringing (provisioned) object
-*/
-typedef struct
-{
-  ProSLIC_RINGTYPE_T
-  ringtype;  /**< Is this a sinusoid or a trapezoidal ring shape? */
-  uInt8 freq;                   /**< In terms of Hz */
-  uInt8 amp;                    /**< in terms of 1 volt units */
-  uInt8 offset;                 /**< In terms of 1 volt units */
-} ProSLIC_dbgRingCfg;
-
-
-/** @} RING_CONTROL */
-
-/*****************************************************************************/
-/**
-* Line Monitor - returned by @ref ProSLIC_LineMonitor
-*/
-typedef struct
-{
-  int32  vtr;		/**< Voltage, tip-ring in mV */
-  int32  vtip;	/**< Voltage, tip-ground in mV */
-  int32  vring;	/**< Voltage, ring-ground in mV */
-  int32  vbat;	/**< Voltage, battery in mV */
-  int32  vdc;		/**< Voltage, Vdc in mV */
-  int32  vlong;	/**< Voltage, longitudinal in mV */
-  int32  itr;		/**< Loop current, in uA tip-ring */
-  int32  itip;	/**< Loop current, in uA tip */
-  int32  iring;	/**< Loop current, in uA ring */
-  int32  ilong;	/**< Loop current, in uA longitudinal */
-  int32  p_hvic;  /**< On-chip Power Calculation in mw */
-} proslicMonitorType;
-
-/*****************************************************************************/
-/** @addtogroup PROSLIC_DCFEED
- * @{
- */
-/**
-* Powersave
-*/
-enum
-{
-  PWRSAVE_DISABLE = 0, /**< Disable power savings mode */
-  PWRSAVE_ENABLE  = 1   /**< Enable power savings mode */
-};
-
-/**
-** DC Feed Preset
-*/
-typedef struct
-{
-  ramData slope_vlim;
-  ramData slope_rfeed;
-  ramData slope_ilim;
-  ramData delta1;
-  ramData delta2;
-  ramData v_vlim;
-  ramData v_rfeed;
-  ramData v_ilim;
-  ramData const_rfeed;
-  ramData const_ilim;
-  ramData i_vlim;
-  ramData lcronhk;
-  ramData lcroffhk;
-  ramData lcrdbi;
-  ramData longhith;
-  ramData longloth;
-  ramData longdbi;
-  ramData lcrmask;
-  ramData lcrmask_polrev;
-  ramData lcrmask_state;
-  ramData lcrmask_linecap;
-  ramData vcm_oh;
-  ramData vov_bat;
-  ramData vov_gnd;
-} ProSLIC_DCfeed_Cfg;
-
-/** @} PROSLIC_DCFEED */
-
-/*****************************************************************************/
-/** @defgroup ProSLIC_API ProSLIC API
-* proslic.c function declarations
-* @{
-*/
-
-/*****************************************************************************/
-/** @defgroup DIAGNOSTICS Diagnostics
- * The functions in this group allow one to monitor the line state for abnormal
- * situations.
- * @{
- */
-
-/**
-* Test State - used in polled tests (such as PSTN Check)
-*/
-typedef struct
-{
-  int32 stage;               /**< What state is the test in */
-  int32 waitIterations;      /**< How many iterations to stay in a particular state */
-  int32 sampleIterations;    /**< How many  samples have been collected */
-} proslicTestStateType;
-
-/**
- * @brief
- *  This function allows one to monitor the instantaneous voltage and
- *  loop current values seen on tip/ring.
- *
- *  @param[in] pProslic - which channel should the data be collected from
- *  @param[in,out] *monitor -  the data collected
- *  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_LineMonitor(proslicChanType_ptr pProslic,
-                        proslicMonitorType *monitor);
-
-/**
- * @brief
- *  This function reads the MADC a scaled value
- *
- *  @param[in] pProslic - which channel should the data be collected from
- *  @param[in] addr  - address to read from (MADC_ILOOP, MADC_ITIP, etc).
- *  @param[in] scale  - scale to use (0 = determine based upon MADC address)
- *  @retval int32 - scaled value requested or -1 if not supported.
- *
- */
-
-int32 ProSLIC_ReadMADCScaled(proslicChanType_ptr pProslic, uInt16 addr,
-                             int32 scale);
-
-/** @defgroup PSTN_CHECK PSTN Check
- * Monitor for excessive longitudinal current, which
- * would be present if a live pstn line was connected
- * to the port.  To operate these sets of functions:
- *
- * - Iniitalize the PSTN object by calling @ref ProSLIC_InitPSTNCheckObj
- * - Poll at a constant rate and call @ref ProSLIC_PSTNCheck.  Check the return code of this function.
- *
- * Alternatively, you can call the DiffPSTNCheck versions of the above two functions.
- *
- * @note These functions may be disabled by doing a undef of @ref PSTN_DET_ENABLE in the configuration file.
- * @{
-*/
-#define MAX_ILONG_SAMPLES 32 /**< How many samples to collect for PSTN check */
-#define MAX_PSTN_SAMPLES 16 /**< Used in the PSTN check status code to indicate the number of samples to collect */
-
-/**
-* FEMF OPEN voltage test enable
-*/
-enum
-{
-  FEMF_MEAS_DISABLE, /**< Do not measure FEMF as part of PSTN Check */
-  FEMF_MEAS_ENABLE   /**< Do measure FEMF as part of PSTN Check */
-};
-
-/** Standard line interfaces */
-typedef struct
-{
-  int32   avgThresh;
-  int32   singleThresh;
-  int32   ilong[MAX_ILONG_SAMPLES];
-  uInt8   count;
-  uInt8   samples;
-  int32   avgIlong;
-  BOOLEAN buffFull;
-} proslicPSTNCheckObjType;
-
-typedef proslicPSTNCheckObjType *proslicPSTNCheckObjType_ptr;
-
-
-/** Re-Injection line interfaces (differential) */
-typedef struct
-{
-  proslicTestStateType pState;
-  int dcfPreset1;
-  int dcfPreset2;
-  int entryDCFeedPreset;
-  uInt8 lfstate_entry;
-  uInt8 enhanceRegSave;
-  uInt8 samples;
-  int32 vdiff1[MAX_PSTN_SAMPLES];
-  int32 vdiff2[MAX_PSTN_SAMPLES];
-  int32 iloop1[MAX_PSTN_SAMPLES];
-  int32 iloop2[MAX_PSTN_SAMPLES];
-  int32 vdiff1_avg;
-  int32 vdiff2_avg;
-  int32 iloop1_avg;
-  int32 iloop2_avg;
-  int32 rl1;
-  int32 rl2;
-  int32 rl_ratio;
-  int femf_enable;
-  int32 vdiff_open;
-  int32 max_femf_vopen;
-  int return_status;
-} proslicDiffPSTNCheckObjType;
-
-typedef proslicDiffPSTNCheckObjType *proslicDiffPSTNCheckObjType_ptr;
-
-/** @}PSTN_CHECK */
-/** @}DIAGNOSTICS */
-/*****************************************************************************/
-/*
-** proslic.c function declarations
-*/
-
-/*****************************************************************************/
-/** @defgroup GEN_CFG General configuration
- * @{
- */
-
-/**
- * @brief
- *  Loads patch and initializes all ProSLIC devices. Performs all calibrations except
- *  longitudinal balance.
- *
- * @param[in] hProslic - which channel(s) to initialize, if size > 1, then the start of the array
- * of channels to be initialized.
- * @param[in] size - the number of channels to initialize.
- * @param[in] preset - general configuration preset to apply
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_Init
- */
-
-int ProSLIC_Init_MultiBOM (proslicChanType_ptr *hProslic, int size, int preset);
-
-/**
- * @brief
- *  Loads patch and initializes all ProSLIC devices. Performs all calibrations except
- *  longitudinal balance.
- *
- * @param[in] hProslic - which channel(s) to initialize, if size > 1, then the start of the array
- * of channels to be initialized.
- * @param[in] size - the number of channels to initialize.
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_Init (proslicChanType_ptr *hProslic, int size);
-
-/**
- * @brief
- *  Loads patch and initializes all ProSLIC devices. 
- *
- * @param[in] hProslic - which channel(s) to initialize, if size > 1, then the start of the array
- * of channels to be initialized.
- * @param[in] size - the number of channels to initialize. 
- * @param[in] option - see initOptionsType
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_Init_with_Options (proslicChanType_ptr *hProslic, int size,
-                               int option);
-
-/**
- * @brief
- *  Performs soft reset then calls ProSLIC_Init()
- *
- * @param[in] hProslic - which channel(s) to re-initialize.
- * of channels to be initialized.
- * @param[in] size - the number of channels to initialize. 
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_Reinit (proslicChanType_ptr *hProslic, int size);
-
-/**
- * @brief
- * Loads registers and RAM in the ProSLICs specified.
- *
- * @param[in] pProslic - array of channels
- * @param[in] pRamTable - array of RAM locations and values to write
- * @param[in] pRegTable - array of register locations and values to write
- * @param[in] bcast- is broadcast enabled.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function should NOT be used since it can bypass the standard initialization/operational state of the
- * ProSLIC.
- */
-
-int ProSLIC_LoadRegTable (proslicChanType      *pProslic,
-                          const ProslicRAMInit *pRamTable, 
-                          const ProslicRegInit *pRegTable, 
-                          int bcast);
-
-/**
- * @brief
- * Loads registers and RAM in the ProSLICs specified.
- *
- * @param[in] pProslic - array of channels
- * @param[in] pRamTable - array of RAM locations and values to write
- * @param[in] pRegTable - array of register locations and values to write
- * @param[in] size - number of ProSLICS to write to.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function should NOT be used since it can bypass the standard initialization/operational state of the
- * ProSLIC.
- */
-
-int ProSLIC_LoadRegTables (proslicChanType_ptr *pProslic,
-                           const ProslicRAMInit *pRamTable, const ProslicRegInit *pRegTable, int size);
-
-/**
- * @brief
- * Implement soft reset. For dual channel devices, you can specify a hard reset
- * (which impacts both channels) or if the channel is actually the second 
- * channel.  The default is to do a soft reset on the 1st channel.
- *
- * @param[in] hProslic - which channel to reset
- * @param[in] resetOptions - PROSLIC_HARD_RESET (dual channel devices ONLY) | PROSLIC_SOFT_RESET_SECOND_CHAN (dual channel devices) | PROSLIC_BCAST_RESET | PROSLIC_SOFT_RESET
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note Will abort reset if in free run mode.
- * @note Only perform a soft reset on 1 channel at a time.
- */
- 
-#define PROSLIC_BCAST_RESET 0x8000
-#define PROSLIC_HARD_RESET 3
-#define PROSLIC_SOFT_RESET_SECOND_CHAN 2
-#define PROSLIC_SOFT_RESET 1
-
-int ProSLIC_SoftReset(proslicChanType_ptr hProslic, uInt16 resetOptions);
-
-/**
- * @brief
- *  Configure impedance synthesis
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] preset - which impedance configuration to load from the constants file.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be disabled by @ref DISABLE_ZSYNTH_SETUP
- */
-
-int ProSLIC_ZsynthSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  This function configures the CI bits (GCI mode)
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] preset - which GCI preset to use from the constants file
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be disabled by @ref DISABLE_CI_SETUP
- */
-#ifndef DISABLE_CI_SETUP
-int ProSLIC_GciCISetup (proslicChanType_ptr hProslic,int preset);
-#endif
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_DEBUG Debug
- * This group of functions enables/disables debug messages as well as dump
- * register contents.
- * @{
- */
-
-
-/**
- * @brief
- * This function allows access to SPI read RAM function pointer from interface
- *
- * @param[in] pProslic - pointer to channel structure
- * @param[in] addr - address to read
- * @retval ramData - RAM contents
- *
- */
-ramData ProSLIC_ReadRAM (proslicChanType *pProslic, uInt16 addr);
-
-/**
- * @brief
- * This function allows access to SPI write RAM function pointer from interface
- *
- * @param[in] pProslic - pointer to channel structure
- * @param[in] addr - address to write
- * @param[in] data to be written
- * @retval int - @ref RC_NONE
- *
- */
-int ProSLIC_WriteRAM (proslicChanType *pProslic, uInt16 addr, ramData data);
-
-/**
- * @brief
- * This function dumps to console the register contents of several
- * registers and RAM locations.
- *
- * @param[in] pProslic - which channel to dump the register contents of.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-int ProSLIC_PrintDebugData (proslicChanType *pProslic);
-
-/**
- * @brief
- * This function dumps the registers to the console using whatever
- * I/O method is defined by LOGPRINT
- *
- * @param[in] pProslic - which channel to dump the register contents of.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-int ProSLIC_PrintDebugReg (proslicChanType *pProslic);
-
-/**
- * @brief
- * This function dumps the RAM to the console using whatever
- * I/O method is defined by LOGPRINT
- *
- * @param[in] pProslic - which channel to dump the RAM contents of.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-int ProSLIC_PrintDebugRAM (proslicChanType *pProslic);
-
-/** @} PROSLIC_DEBUG */
-/*****************************************************************************/
-/** @defgroup PROSLIC_ENABLE Enable/disable channels (for init)
- * @{
- */
-
-/**
- * @brief
- *  This function sets the channel enable status of the FXO channel on ProSLIC devices
- *  with integrated FXO.  If NOT set, then when
- *  the various initialization routines such as @ref SiVoice_SWInitChan is called,
- *  then this particular channel will NOT be initialized.
- *
- *  This function does not access the chipset directly, so SPI/GCI
- *  does not need to be up during this function call.
- *
- * @param[in,out] pProslic - which channel to return the status.
- * @param[in] enable - The new value of the channel enable field. 0 = NOT enabled, 1 = enabled.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_getChannelEnable
- */
-
-int ProSLIC_SetDAAEnable(proslicChanType *pProslic, int enable);
-
-/** @} PROSLIC_ENABLE */
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_PATCH Patch management.
- * This group of functions write and verify the patch data needed by the
- * ProSLIC chipset.
- * @{
- */
-
-/**
- * @brief
- * Calls patch loading function for a particular channel/ProSLIC
- *
- * @param[in] hProslic - which channel/ProSLIC should be patched
- * @param[in] pPatch - the patch data
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function should not be called directly under normal circumstances since the initialization function should
- *       perform this operation.
- *
- * @sa ProSLIC_Init
- */
-
-int ProSLIC_LoadPatch (proslicChanType_ptr hProslic,const proslicPatch *pPatch);
-
-/**
- * @brief
- *  Verifies patch loading function for a particular channel/ProSLIC
- *
- * @param[in] hProslic - which channel/ProSLIC should be patched
- * @param[in] pPatch - the patch data to verify was written to.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function should not be called directly under normal circumstances since the initialization function should
- *       perform this operation, unless @ref DISABLE_VERIFY_PATCH is defined.
- *
- * @sa ProSLIC_Init
- */
-
-int ProSLIC_VerifyPatch (proslicChanType_ptr hProslic,const proslicPatch *pPatch);
-
-/** @} PROSLIC_PATCH */
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_GPIO GPIO Control
- * This group of functions configure, read and write the GPIO status pins.
- * @{
- */
-
-/**
- * @brief
- *  This function configures the ProSLIC GPIOs by loading a gpio preset that was
- *  set in the configuration tool.
- * @param[in] hProslic - which channel to configure the GPIO pins.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_GPIOControl
- */
-
-int ProSLIC_GPIOSetup (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function controls the GPIOs of the ProSLIC.
- *
- * @param[in] hProslic - which channel to modify
- * @param[in,out] pGpioData  - pointer to GPIO status (typically 1 byte)
- * @param[in] read - 1 = Read the status, 0 = write the status
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_GPIOSetup
- */
-
-int ProSLIC_GPIOControl (proslicChanType_ptr hProslic,uInt8 *pGpioData,
-                         uInt8 read);
-
-/** @} PROSLIC_GPIO */
-/** @} GEN_CFG */
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_PULSE_METER Pulse Metering
- *
- * This group contains functions related to pulse metering.
- * @{
- */
-
-/**
-* @brief
-*  This function configures the ProSLIC pulse metering by loading a pulse metering preset.
-*
-* @param[in] hProslic - which channel should be configured
-* @param[in] preset - which preset to load from the defined settings made in the configuration tool.
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-* @sa ProSLIC_PulseMeterStart ProSLIC_PulseMeterStop
-*/
-
-int ProSLIC_PulseMeterSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  This function enables the pulse metering generator.
- *
- * @param[in] hProslic - which channel should play the tone.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_PulseMeterSetup ProSLIC_PulseMeterStop ProSLIC_PulseMeterDisable
- *
- */
-int ProSLIC_PulseMeterEnable (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function disables the pulse metering generator..
- *
- * @param[in] hProslic - which channel should play the tone.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_PulseMeterSetup ProSLIC_PulseMeterStop ProSLIC_PulseMeterEnable
- *
- */
-
-int ProSLIC_PulseMeterDisable (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function starts the pulse metering tone.
- *
- * @param[in] hProslic - which channel should play the tone.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_PulseMeterSetup ProSLIC_PulseMeterStop
- *
- */
-
-int ProSLIC_PulseMeterStart (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function stops the pulse metering tone.
- *
- * @param[in] hProslic - which channel should play the tone.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa PProSLIC_PulseMeterStart ProSLIC_PulseMeterSetup
- *
- */
-
-int ProSLIC_PulseMeterStop (proslicChanType_ptr hProslic);
-
-/** @} PROSLIC_PULSE_METER */
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_INTERRUPTS Interrupt control and decode
- * @{
- */
-
-/**
- * @brief
- *  Enables interrupts configured in the general configuration data structure.
- *
- * @param[in]  hProslic - which channel to enable the interrupts.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_EnableInterrupts (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function reads the interrupts from the ProSLIC and places them into
- *  a @ref proslicIntType structure which contains up to @ref MAX_PROSLIC_IRQS
- *  interrupts.
- *
- * @param[in] hProslic - which channel to enable the interrupts.
- * @param[in,out] pIntData - this structure contains the interrupts pending and the number of interrupts.
- * @retval int - number of interrupts pending or RC_CHANNEL_TYPE_ERR if wrong chip type or 0 for no interrupts.
- *
- */
-
-int ProSLIC_GetInterrupts (proslicChanType_ptr hProslic,
-                           proslicIntType *pIntData);
-
-/**
- * @brief
- *  This function disables and clears interrupts on the given channel.
- *
- *  @param[in] hProslic - which channel to disable
- *  @retval int - error from @ref errorCodeType @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_DisableInterrupts (proslicChanType_ptr hProslic);
-
-/** @} PROSLIC_INTERRUPTS */
-
-/*****************************************************************************/
-/** @defgroup SIGNALING Signaling - ring & line state, and hook state
- * @{
- */
-
-/**
-* Function: PROSLIC_ReadHookStatus
-*
-* @brief
-* Determine hook status
-* @param[in] hProslic - which channel to read from.
-* @param[out] *pHookStat - will contain either @ref PROSLIC_ONHOOK or @ref PROSLIC_OFFHOOK
-*
-*/
-
-int ProSLIC_ReadHookStatus (proslicChanType_ptr hProslic,uInt8 *pHookStat);
-
-/*****************************************************************************/
-/** @defgroup LINESTATUS Line Feed status
- * @{
- */
-
-/**
- * @brief
- *  This function sets the linefeed state.
- *
- * @param[in] hProslic - which channel to modify
- * @param[in] newLinefeed - new line feed state  - examples: LF_OPEN, LF_FWD_ACTIVE
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_SetLinefeedStatus (proslicChanType_ptr hProslic,uInt8 newLinefeed);
-
-/**
- * @brief
- *  This function sets the linefeed state for all channels on the same daisychain.
- *
- * @param[in] hProslic - which channel to modify
- * @param[in] newLinefeed - new line feed state  - examples: LF_OPEN, LF_FWD_ACTIVE
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_SetLinefeedStatusBroadcast (proslicChanType_ptr hProslic,
-                                        uInt8 newLinefeed);
-
-/**
- * @brief
- *  This function sets the polarity/wink state of the channel.
- *
- * @param[in] hProslic - which channel to modify
- * @param[in] abrupt  - to change the state immediately
- * @param[in] newPolRevState - new polarity state  - examples: POLREV_STOP, POLREV_START and WINK_START
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_PolRev (proslicChanType_ptr hProslic,uInt8 abrupt,
-                    uInt8 newPolRevState);
-
-/** @} LINESTATUS */
-
-/*****************************************************************************/
-/** @defgroup RING_CONTROL Ring generation
- * @{
- */
-
-/**
- * @brief
- *  Configure the ringer to the given preset (see your constants header file for exact value to use).
- *  This includes timing, cadence, OHT mode, voltage levels, etc.
- *
- * @param[in]  hProslic - which channel to configure
- * @param[in]  preset - which of the xxxx_Ring_Cfg structures to use to configure the channel.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be compiled out by defining @ref DISABLE_RING_SETUP
- *
- * @sa ProSLIC_dbgSetRinging ProSLIC_RingStart ProSLIC_RingStop
- */
-
-int ProSLIC_RingSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  Starts the ringer as confgured by @ref ProSLIC_RingSetup .  If the active and inactive timers are enabled,
- *  the ProSLIC will automatically turn on/off the ringer as programmed, else one will need to
- *  manually implement the ring cadence.  In either case, one will need to call ProSLIC_RingStop to
- *  stop the ringer or one may call @ref ProSLIC_SetLinefeedStatus to change the state directly.
- *
- * @param[in]  hProslic - which channel to enable ringing.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be compiled out by defining @ref DISABLE_RING_SETUP
- * @deprecated - Will become a macro in a future release and later removed.  Customers should just call ProSLIC_SetLinefeedStatus w/ LF_RINGING.
- *
- * @sa ProSLIC_dbgSetRinging ProSLIC_RingStop ProSLIC_RingSetup
- */
-
-int ProSLIC_RingStart (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  Stop the ringer on the given channel and set the line state to forward active.
- * @deprecated  - Will become a macro in a future release.  Customers should just call ProSLIC_SetLinefeedStatus w/ LF_FWD_ACTIVE.
- *
- * @param[in] hProslic - which channel to modify.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa ProSLIC_RingSetup ProSLIC_RingStart
- *
- * @deprecated customers are encouraged to use ProSLIC_SetLinefeedStatus
- */
-
-int ProSLIC_RingStop (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  Provision function for setting up Ring type, frequency, amplitude and dc offset and
- *  to store them in the given preset.
- *
- * @note: This function calculates the values, it does not set them.
- * @note: This code assumes ProSLIC_RingSetup() was called earlier with the highest ringer
- *        requirements (possibly during initialization).  After that, this function can 
- *        be used for meeting provisioning requirements.
- *
- * @param[in] pProslic - which channel to modify
- * @param[in] ringCfg - how to configure the channel's ringer
- * @param[in] preset - where to store the new configuration.
- * @sa ProSLIC_RingSetup ProSLIC_RingStart ProSLIC_RingStop
- */
-
-int ProSLIC_dbgSetRinging (proslicChanType *pProslic,
-                           ProSLIC_dbgRingCfg *ringCfg, int preset);
-
-/** 
- * @brief
- * Enable abrupt ringing. Normally the ProSLIC would perform a smooth transistion
- * to start the ring signal, but in cases where a delay is not acceptable, this 
- * function disables this feature.
- *
- * @param[in] pProslic - which channel to modify
- * @param[in] isEnabled - is the abrupt ringing enbaled (smooth transistion disabled).
- * 
- * @note Not all chipsets support this feature.
- *
- */
-
-int ProSLIC_EnableFastRingStart(proslicChanType_ptr pProslic, BOOLEAN isEnabled);
-
-/** @} RING_CONTROL */
-/** @} SIGNALING */
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_AUDIO Audio
- * This group of functions contains routines to configure the PCM bus, to generate tones, and to send FSK data.
- *
- * In order to start using the PCM bus, you would typically initialize the PCM bus with code similar to
- * the following:
- *
- * @code
- * if( (ProSLIC_PCMSetup(myProSLIC, MY_COMPANDING) != RC_NONE)
- * 	|| (ProSLIC_PCMTimeSlotSetup(myProSLIC, pcm_ts, pcm_ts) != RC_NONE)
- * 	|| (ProSLIC_PCMStart(myProSLIC) != RC_NONE))
- * {
- * 	return MY_PCM_INIT_ERROR;
- * }
- * @endcode
- *
- * @{
- * @defgroup TONE_GEN Tone generation
- * This group of functions is related to playing out general tones - such as dial tone, busy tone, etc.  One would
- * typically call @ref ProSLIC_ToneGenSetup first followed by @ref ProSLIC_ToneGenStart and after some time, a call to
- * @ref ProSLIC_ToneGenStop to stop the tone.  The direction of the tone and cadence (if any) are configured using the
- * GUI configuration tool's TONE dialog box and then saved in the constants file.
- *
- * @{
- */
-/**
- * @brief
- *  Configure the tone generator to the given preset (see your constants header file for exact value to use).  It does NOT
- *  play a particular tone out.
- *
- * @warning If @ref ProSLIC_FSKSetup was called earlier, this function will need to be called again.
- *
- * @param[in]  hProslic - which channel to configure
- * @param[in]  preset - which of the xxxx_Tone_Cfg structures to use to configure the channel.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be compiled out by defining @ref DISABLE_TONE_SETUP.
- *
- * @note Typically, if one is using the ProSLIC for tone generation, you will be calling this function prior to each call
- *       into @ref ProSLIC_ToneGenStart so that the correct tone is played out.
- */
-
-int ProSLIC_ToneGenSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  Configure the tone generator to the given preset (see your constants header file for exact value to use).  It does NOT
- *  play a particular tone out.
- *
- * @warning If @ref ProSLIC_FSKSetup was called earlier, this function will need to be called again.
- *
- * @param[in]  pProslic - which channel to configure
- * @param[in]  cfg - which of the xxxx_Tone_Cfg structures to use to configure the channel.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be compiled out by defining @ref DISABLE_TONE_SETUP.
- *
- * @note Typically, if one is using the ProSLIC for tone generation, you will be calling this function prior to each call
- *       into @ref ProSLIC_ToneGenStart so that the correct tone is played out.
- */
-
-int ProSLIC_ToneGenSetupPtr(proslicChanType_ptr pProslic,
-                            ProSLIC_Tone_Cfg *cfg);
-
-/**
- * @brief
- *  This function starts the tone configured by @ref ProSLIC_ToneGenSetup.
- *  It is assumed that the @ref PROSLIC_AUDIO setup was performed
- *  prior to calling this function.  Also, it is suggested that
- *  @ref ProSLIC_ToneGenSetup be called if @ref FSK_CONTROL
- *  functions were used.
- *
- *  @param[in] hProslic - which channel should play the tone.
- *  @param[in] timerEn - are the timers to be enabled?  1 = Yes, 0 = No. When in doubt, set to 1.
- *  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_ToneGenSetup ProSLIC_ToneGenStop
- */
-
-int ProSLIC_ToneGenStart (proslicChanType_ptr hProslic, uInt8 timerEn);
-
-/**
- * @brief
- *  This function turns off tone generation initiated by @ref ProSLIC_ToneGenStart.
- *
- * @param[in] hProslic - which channel should stop playing the tone.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_ToneGenStart ProSLIC_ToneGenSetup
- */
-
-int ProSLIC_ToneGenStop (proslicChanType_ptr hProslic);
-
-/** @} TONE_GEN */
-
-/*****************************************************************************/
-/** @defgroup FSK_CONTROL FSK/Caller ID generation
- * This group of functions is related to FSK generation, typically used with Caller ID/Call Waiting
- * functionality. To set the frequencies, the data rate, and the FSK FIFO depth, please use the configuration
- * GUI FSK dialog box.
- *
- * Here's a simple example code fragment to send data via FSK:
- *
- * @note In a "real" application, you should not use ProSLIC_CheckCIDBuffer(), but instead
- *       call ProSLIC_GetInterrupts() and check if the FSK interrrupt fired off since the 
- *       ProSLIC_GetInterrupts() will also report on loop closure/ring trip in addition FSK buffer
- *       interrupt and the two functions will conflict with each other.
- *
- * @code
- *
- * #define FIFO_DEPTH (7-FSKBUF_DEPTH) //When we report the buffer at FSK BUFFER DEPTH, we can send
- *                                     //at most 1 less than the maximum since that byte maybe still
- *                                     //be modulated. Therefore, we say we can send 7 bytes, not
- *                                     //8 after the interrupt.
- *
- * //ASSUME: FSK Buffer depth interrupt has been enabled in the constants file earlier...
- *
- *  // This should be called every time since it is likely a tone was played
- *  // earlier which reprograms the oscillators...
- * if( ProSLIC_FSKSetup(myProSLICChan, PROSLIC_NORTH_AMERICA_FSK) == RC_NONE)
- * {
- *
- *  // Enable the CID block, at this point no tones other than the FSK ones
- *  // should be played out...
- * 	ProSLIC_EnableCID(myProSLICChan);
- *
- *  // Pre-load the FSK FIFO buffer with at most 8 bytes.
- * 	ProSLIC_SendCID(myProSLICChan,buf,MIN(bufsz,8));
- *
- *	bytes_left_to_send = bufsz - MIN(bufsz,8);
- *
- * 	while(bytes_left_to_send > 0)
- * 	{
- * 		if(bytes_left_to_send < FIFO_DEPTH)
- * 		{
- * 			bytes_to_send = bytes_left_to_send;
- * 		}
- * 		else
- * 		{
- * 			bytes_to_send = FIFO_DEPTH;
- *		}
- *
- * 		if( ProSLIC_SendCID(myProSLICChan,buf,bytes_to_send) != RC_NONE)
- * 		{
- * 			ProSLIC_DisableCID(myProSLICChan);
- * 			return MY_FSK_ERROR;
- * 		}
- *
- *		bytes_left_to_send -= bytes_to_send;
- *
- *		if(bytes_left_to_send)
- *		{
- *			do
- *			{
- *			  // See note above about this function...
- *				ProSLIC_CheckCIDBuffer(myProSLICChan, &is_fifo_empty);
- *
- *			} while( is_fifo_empty != 1 );
- *		}
- *
- * 	};
- *
- * 	ProSLIC_DisableCID(myProSLICChan);
- * @endcode
- *
- * @note The above code fragment is sub-optimal since it does constantly poll the CID buffer
- * state - one may want to implement the actual code using interrupts.
- *
- * @note The ProSLIC API demo does have a working example for Type 1 CID MDMF format.
- *
- * @{
- */
-
-/**
- * @brief
- *  Configures the FSK generator from a configuration generated by the config tool.
- *
- * @warning If @ref ProSLIC_ToneGenSetup was called earlier, this function will need to be called again.
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] preset - which FSK configuration to use.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be compiled out by defining DISABLE_FSK_SETUP
- */
-
-int ProSLIC_FSKSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  Configures the FSK generator from a configuration generated by the config tool.
- *
- * @warning If @ref ProSLIC_ToneGenSetup was called earlier, this function will need to be called again.
- *
- * @param[in] pProslic - which channel to configure
- * @param[in] cfg - which FSK configuration to use.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be compiled out by defining DISABLE_FSK_SETUP
- */
-
-int ProSLIC_FSKSetupPtr (proslicChanType_ptr pProslic, ProSLIC_FSK_Cfg *cfg);
-
-/**
- * @brief
- *  This function enables FSK mode and clears the FSK FIFO.  It is assumed that PCM has been enabled and that @ref ProSLIC_FSKSetup
- *  has been called at some point.
- *
- * @warning If @ref ProSLIC_ToneGenSetup was called earlier, @ref ProSLIC_FSKSetup will need to be called again.
- *
- * @param[in] hProslic - which channel to check upon.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_EnableCID (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function disables FSK mode.
- *
- * @param[in] hProslic - which channel to disable FSK mode.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_DisableCID (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  Check if the FSK FIFO is empty or not.  This should only be called after ProSLIC_SendCID.
- *
- * @param[in] hProslic - which channel to check upon.
- * @param[out] fsk_buf_avail - is the buffer available? 1 = Yes, 0  = No.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note - This modifies the IRQ1 register contents, so some other interrupts may be lost. An alternative is to enable the
- *         FSK FIFO interrupt and trigger off of it when it does occur in your interrupt service routine and call ProSLIC_GetInterrupts() to decode the interrupts present.
- */
-
-int ProSLIC_CheckCIDBuffer (proslicChanType_ptr hProslic, uInt8 *fsk_buf_avail);
-
-/**
- * @brief
- *  Send numBytes as FSK encoded data.  It is assumed that numBytes <= FIFO Depth (typically 8) and that the FIFO
- *  is free. It is also assumed that @ref ProSLIC_PCMStart has been called and that we're in
- *  @ref LF_FWD_OHT or @ref LF_REV_OHT mode for Type-1 or  @ref LF_REV_ACTIVE or @ref LF_FWD_ACTIVE
- *  if we're in Type-2 caller ID.
- *
- * @param[in] hProslic - which channel to send the data through.
- * @param[in] buffer - byte array of data to send.
- * @param[in] numBytes - number of bytes to send. MUST be less than or equal to the FIFO size
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_CheckCIDBuffer ProSLIC_FSKSetup ProSLIC_EnableCID ProSLIC_DisableCID
- */
-
-int ProSLIC_SendCID (proslicChanType_ptr hProslic, uInt8 *buffer,
-                     uInt8 numBytes);
-
-/**
- * @brief Control if the start/stop bits are enabled.
- *
- * @param[in] hProslic - which channel to adjust
- * @param[in] enable_startStop - TRUE - start/stop bits are enabled, FALSE - disabled
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note: This does not replace @ref ProSLIC_FSKSetup, but is a supplement that toggles
- * one of the registers that the preset modifies.  It is assumed that @ref ProSLIC_FSKSetup
- * was called at some point earlier in the code flow.
- */
-
-int ProSLIC_ModifyCIDStartBits(proslicChanType_ptr hProslic,
-                               uInt8 enable_startStop);
-
-
-/** @} FSK_CONTROL */
-
-/*****************************************************************************/
-/** @defgroup AUDIO_CONTROL Audio control/configuration
- * @{
- */
-/** @defgroup PCM_CONTROL PCM control
- * This group of functions is used to configure and control the PCM bus.  It is essential that @ref ProSLIC_PCMSetup,
- * @ref ProSLIC_PCMTimeSlotSetup and @ref ProSLIC_PCMStart are called prior to any tone or FSK generation.
- *
- * See @ref PROSLIC_AUDIO code fragment on how the functions relate during initialization.
- *
- * @{
- */
-
-/**
- * @brief
- *  This configures the PCM bus with parameters such as companding and data latching timing.
- *
- * @param[in] hProslic - which channel should be configured
- * @param[in] preset - which preset to use from the constants file (see configuration tool, PCM dialog box)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_PCMTimeSlotSetup ProSLIC_PCMStart
- */
-
-int ProSLIC_PCMSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  This configures the ProSLIC to latch and send the PCM data at a particular timeslot in terms of PCM clocks (PCLK).
- *
- *  Typically, for aLaw and uLaw, one can use the following calculation to set the rxcount and txcount parameters:
- *
- *  rxcount = txcount = (channel_number)*8;
- *
- *  For 16 bit linear, one can do the following:
- *
- *  rxcount = txcount = (channel_number)*16;
- *
- * where channel_number = which ProSLIC channel on the PCM bus.  For example, if one were to have 2 dual channel
- * ProSLIC's on the same PCM bus, this value would range from 0 to 3.
- *
- * @param[in] hProslic - which channel should be configured
- * @param[in] rxcount -  how many clocks until reading data from the PCM bus
- * @param[in] txcount -  how many clocks until writing data to the PCM bus.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_PCMSetup ProSLIC_PCMStart
- */
-
-int ProSLIC_PCMTimeSlotSetup (proslicChanType_ptr hProslic, uInt16 rxcount,
-                              uInt16 txcount);
-
-/**
- * @brief
- *  This enables PCM transfer on the given ProSLIC channel.
- *
- * @param[in] hProslic - - which channel should be enabled
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_PCMSetup ProSLIC_PCMTimeSlotSetup ProSLIC_PCMStop
- */
-
-int ProSLIC_PCMStart (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This disables PCM transfer on the given ProSLIC channel. Typically, this is called for debugging
- *  purposes only.
- *
- * @param[in] hProslic - - which channel should be disabled
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_PCMSetup ProSLIC_PCMTimeSlotSetup ProSLIC_PCMStart
- */
-
-int ProSLIC_PCMStop (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- * Program desired loopback test mode for the given channel.
- *
- * @param[in] hProslic -  which channel should be modified
- * @param[in] newMode - what is the desired loopback mode.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_SetLoopbackMode (proslicChanType_ptr hProslic,
-                             ProslicLoopbackModes newMode);
-
-/**
- * @brief
- * Program desired mute test mode for the given channel.
- *
- * @param[in] hProslic - which channel should be modified
- * @param[in] muteEn - what is the desired mode.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_SetMuteStatus (proslicChanType_ptr hProslic,
-                           ProslicMuteModes muteEn);
-
-/** @} PCM_CONTROL */
-
-/*****************************************************************************/
-/** @defgroup GAIN_CONTROL Gain control
- * @{
- */
-
-/**
- * @brief
- *  Sets the TX audio gain (toward the network). This funcion DOES NOT actually calculate the values for the preset.
- *  To dynamically calculate the values, you would need to call @ref ProSLIC_dbgSetTXGain .
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] preset - which preset to use (this may be from the constants file)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note One can use this in conjunction with @ref ProSLIC_dbgSetTXGain to dynamically
- * change the audio gain. It is important to have the presets of both routines match.
- *
- * The following code * fragment will set the TX audio gain to -5 dB:
- *
- * @code
- * ProSLIC_dbgSetTXGain(myChannel, -5, MY_IMPEDENCE,0);
- * ProSLIC_TXAudioGainSetup(myChannel,0);
- * @endcode
- *
- * @sa ProSLIC_RXAudioGainSetup ProSLIC_dbgSetTXGain ProSLIC_AudioGainSetup
- */
-
-int ProSLIC_TXAudioGainSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  Adjusts gain of TX audio path by scaling the PGA and Equalizer coefficients by the supplied values.
- *
- * @param[in] hProslic   - which channel to configure
- * @param[in] preset     - which preset to use (this may be from the constants file)
- * @param[in] pga_scale  - scale factor which pga coefficients are to be multiplied
- * @param[in] eq_scale   - scale factor which equalizer coefficients are to be multiplied
- * @retval int           - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be used in lieu of @ref ProSLIC_dbgSetTXGain to dynamically
- * change the audio gain when gain steps of 0.1dB do not suffice, or if an attenuation
- * > 30dB is required.
- *
- * The following code * fragment will scale the TX audio gain by a factor of (0.707)*(0.500)
- *
- * @code
- * uInt32  pga_gain_scale = 707;
- * uInt32  eq_gain_scale  = 500;
- * ProSLIC_TXAudioGainScale(pProslic,DEFAULT_PRESET,pga_gain_scale,eq_gain_scale);
- * @endcode
- *
- * @sa ProSLIC_RXAudioGainScale
- */
-int ProSLIC_TXAudioGainScale (proslicChanType_ptr hProslic,int preset,
-                              uInt32 pga_scale,uInt32 eq_scale);
-
-/**
- * @brief
- *  Configures the RX audio gain (toward the telephone). This function DOES NOT actually calculate the values for the preset.
- *  To dynamically calculate the values, you would need to call @ref ProSLIC_dbgSetRXGain .
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] preset - which preset to use (this may be from the constants file)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note One can use this in conjunction with @ref ProSLIC_dbgSetRXGain to dynamically
- * change the audio gain. It is important to have the presets of both routines match.
- *
- * The following code * fragment will set the RX audio gain to -1 dB:
- *
- * @code
- * ProSLIC_dbgSetRXGain(myChannel, -1, MY_IMPEDENCE,0);
- * ProSLIC_RXAudioGainSetup(myChannel,0);
- * @endcode
- *
- * @sa ProSLIC_TXAudioGainSetup ProSLIC_dbgSetRXGain ProSLIC_AudioGainSetup
- */
-
-int ProSLIC_RXAudioGainSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  Adjusts gain of RX audio path by scaling the PGA and Equalizer coefficients by the supplied values.
- *
- * @param[in] hProslic   - which channel to configure
- * @param[in] preset     - which preset to use (this may be from the constants file)
- * @param[in] pga_scale  - scale factor which pga coefficients are to be multiplied
- * @param[in] eq_scale   - scale factor which equalizer coefficients are to be multiplied
- * @retval int           - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be used in lieu of @ref ProSLIC_dbgSetRXGain to dynamically
- * change the audio gain when gain steps of 0.1dB do not suffice, or if an attenuation
- * > 30dB is required.
- *
- * The following code * fragment will scale the TX audio gain by a factor of (0.707)*(0.500)
- *
- * @code
- * uInt32  pga_gain_scale = 707;
- * uInt32  eq_gain_scale  = 500;
- * ProSLIC_RXAudioGainScale(pProslic,DEFAULT_PRESET,pga_gain_scale,eq_gain_scale);
- * @endcode
- *
- * @sa ProSLIC_TXAudioGainScale
- */
-int ProSLIC_RXAudioGainScale (proslicChanType_ptr hProslic,int preset,
-                              uInt32 pga_scale,uInt32 eq_scale);
-
-/**
- * @brief
- *  Configures and sets the audio gains - for both RX (toward the phone) and the TX (toward the network). Unlike
- *  the @ref ProSLIC_RXAudioGainSetup and @ref ProSLIC_TXAudioGainSetup this does both the calculations and then
- *  configures the given channel in one step.  It is assumed that the preset gain array is at least 2 elements in size.
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] rxgain - what is the gain/loss of the RX transmit path in 1 dB units (negative = attenuation)
- * @param[in] txgain - what is the gain/loss of the TX transmit path in 1 dB units (negative = attenuation)
- * @param[in] preset - what is the impedance preset value
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * The following code * fragment will set the RX audio gain to -1 dB snd TX audio gain to -5 dB:
- *
- * @code
- * ProSLIC_AudioGain(myChannel, -1, -5,  MY_IMPEDENCE);
- * @endcode
- *
- * @sa ProSLIC_TXAudioGainSetup ProSLIC_dbgSetRXGain ProSLIC_dbgSetRXGain ProSLIC_dbgSetTXGain
- */
-
-int ProSLIC_AudioGainSetup (proslicChanType_ptr hProslic,int32 rxgain,
-                            int32 txgain,int preset);
-
-/**
- * @brief
- *  This function calculates the preset values for the RX audio (toward the telephone) - it does NOT set the
- *  actual register values.  For that, please use @ref ProSLIC_RXAudioGainSetup .
- *
- * @param[in] pProslic - which channel to configure
- * @param[in] gain - gain to set the preset values to.
- * @param[in] impedance_preset - impedence preset in the constants file.
- * @param[in] audio_gain_preset - index to the audio gain preset to store the value.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_RXAudioGainSetup ProSLIC_AudioGainSetup ProSLIC_dbgSetTXGain
- */
-
-int ProSLIC_dbgSetRXGain (proslicChanType *pProslic, int32 gain,
-                          int impedance_preset, int audio_gain_preset);
-
-/**
- * @brief
- *  This function calculates the preset values for the TX audio (toward the network) - it does NOT set the
- *  actual register values.  For that, please use @ref ProSLIC_TXAudioGainSetup .
- *
- * @param[in] pProslic - which channel to configure
- * @param[in] gain - gain to set the preset values to.
- * @param[in] impedance_preset - impedance preset in the constants file.
- * @param[in] audio_gain_preset - index to the audio gain preset to store the value.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_TXAudioGainSetup ProSLIC_AudioGainSetup ProSLIC_dbgSetRXGain
- */
-
-int ProSLIC_dbgSetTXGain (proslicChanType *pProslic, int32 gain,
-                          int impedance_preset, int audio_gain_preset);
-
-/** @} GAIN_CONTROL */
-/** @} AUDIO_CONTROL */
-/** @} PROSLIC_AUDIO */
-
-/*****************************************************************************/
-/** @defgroup HC_DETECT Hook Change detection
- *
- * This function group has routines used to implement a pulse dial, hook flash
- * and general hook change detection. The outline of how to use these
- * functions is as follows:
- *
- * - Initialize the data structure w/ @ref ProSLIC_InitializeHookChangeDetect
- * - When hook change is detected or if there has been no activity for a minimum
- *   of the interdigit time, call @ref ProSLIC_HookChangeDetect. Keep on calling
- *   the function until we have a return code not equal to SI_HC_NEED_MORE_POLLS.
- *   Again, the function should be called, when no hook activity is detected at
- *   minimum of the interdigit time.
- *
- *   General theory (pulse digit):
- *
- *   ---|___|-----|__|---------
- *
- *   A    B    C    B   D
- *
- *   A - Offhook (time unknown)
- *   B - Onhook (break time)
- *   C - Offhook (make time)
- *   D - Interdigit delay
- *
- *   We report after D occurs a pulse digit as long as the duration for B
- *   is met.
- *
- *   For hook flash, we are looking at
- *
- *   ----|________________|-----------
- *
- *
- *  Here we're looking for the pulse width meets a certain min/max time.  If the
- *  time is exceeded, then we have likely a onhook or offhook event.
- *
- *   @note This set of functions require that the elapsed timer functions
- *   documented in @ref PROSLIC_CUSTOMER_TIMER are implemented.
- *
- * @{
- */
-
-/**
- * @brief
- *  Initialize pulse dial/hook detection parameters.
- *
- * @param[in,out] pPulse - the structure that is to be initialized.  Refer to your target market's pulse dial standard for exact values.
- * @param[in] hookTime - a timer object suitable to be passed to a function of type @ref system_timeElapsed_fptr
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_InitializeHookChangeDetect(hookChangeType *pPulse,void *hookTime);
-
-/**
- * @brief
- *  Implements pulse dial detection and should be called at every hook transition and after the minimum interdigit delay time (should continue calling until
- *  the function returns back with a value other than SI_HC_NEED_MORE_POLLS.
- *
- * @param[in] pProslic - which channel had a hook transition.
- * @param[in] pPulsedialCfg - what is the criteria to determine on/off hook states.
- * @param[in,out] pPulseDialData - contians the timer information that was set in
- * @ref ProSLIC_InitializeHookChangeDetect as well as the pulse digit detected
- *
- * @retval int - either SI_HC_xxx values or a value between 1-10 for the number of pulses detected.  In most cases, a 0 is 10 pulses.  Please refer to
- * your country's pulse dial standard for exact encoding.
- */
-
-uInt8 ProSLIC_HookChangeDetect (proslicChanType *pProslic,
-                                hookChange_Cfg *pPulsedialCfg, hookChangeType *pPulseDialData);
-
-/** @} HC_DETECT */
-
-/*****************************************************************************/
-/**  @addtogroup PROSLIC_AUDIO
- * @{
- * @defgroup PROSLIC_DTMF_DECODE DTMF Decode
- * This section covers DTMF decoding.
- *
- * @note Not all chipsets support this capability.  Please review your chipset
- * documentation to confirm this capability is supported.
- * @{
- */
-
-/**
- * @brief
- *  Read/Decode DTMF digits.  The "raw" hexcode is returned in this function and would require
- *  further processing.  For example, on the Si3217x chipset, the following mapping exists:
- *
- * DTMF Digit | API output value
- * :-|:---
- * 0 | 0xA
- * 1 | 1
- * 2 | 2
- * 3 | 3
- * 4 | 4
- * 5 | 5
- * 6 | 6
- * 7 | 7
- * 8 | 8
- * 9 | 9
- * A | 0xD
- * B | 0xE
- * C | 0xF
- * D | 0
- * \*| 0xB
- * \# |0xC
- *
- * @note This function is only valid after @ref IRQ_DTMF occurred and should be called shortly
- * thereafter.
- *
- * @warning Not all ProSLIC chipsets have a DTMF decoder.  Please review your chipset to make
- * sure this capability exists.
- *
- * @param[in] hProslic - which channel is to be decoded.
- * @param[out] pDigit - "raw" DTMF value (see comments in description)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- *
- */
-
-int ProSLIC_DTMFReadDigit (proslicChanType_ptr hProslic,uInt8 *pDigit);
-
-/** @} PROSLIC_DTMF_DECODE */
-/** @} PROSLIC_AUDIO */
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_POWER_CONVERTER Power Converter control
- * @{
- */
-/**
-* @brief
-* Powers all DC/DC converters sequentially with delay to minimize peak power draw on VDC.
-* @param[in] hProslic - which channel to change state.
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-* @sa ProSLIC_PowerDownConverter
-*
-*/
-
-int ProSLIC_PowerUpConverter(proslicChanType_ptr hProslic);
-
-/**
-* @brief
-*  Safely power down dcdc converter after ensuring linefeed
-*  is in the open state.  Test power down by setting error
-*  flag if detected voltage does no fall below 5v.
-*
-* @param[in] hProslic - which channel to change state.
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-* @sa ProSLIC_PowerUpConverter
-*
-*/
-
-int ProSLIC_PowerDownConverter(proslicChanType_ptr hProslic);
-
-/**
-* @brief
-*  Set channel flag to indicate that the polarity of the
-*  DC-DC converter drive signal is to be inverted from what
-*  is indicated in the General Parameters. This inversion is
-*  relative to the polarity established by the General Parameters,
-*  not an absolute polarity.
-*
-*
-* @param[in] hProslic - which channel to change state.
-* @param[in] flag - inversion flag (1 - inverted, 0 - no inversion)
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-* @sa ProSLIC_PowerUpConverter
-*
-*/
-int ProSLIC_SetDCDCInversionFlag(proslicChanType_ptr hProslic, uInt8 flag);
-
-
-/** @} PROSLIC_POWER_CONVERTER */
-/*****************************************************************************/
-/** @defgroup PROSLIC_LB_CALIBRATION LB Calibration
- * @{
- */
-
-/**
- * @brief
- *  Run canned longitudinal balance calibration.
- *
- * @param[in] pProslic - start channel to start from for calibration.
- * @param[in] size - number of channels to calibrate
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note
- * Use the @ref ProSLIC_Init function to perform all calibrations except Longitudinal Balance (LB).
- * Use the @ref ProSLIC_LBCal function to perform LB calibration. LB Calibration typically needs
- * to execute LB calibration once per system setup without a load connected.  The LB calibration
- * results can be stored in non-volatile storage (flash, eeprom) and retrieved during your normal
- * ProSLIC initialization.
- *
-*  @sa ProSLIC_GetLBCalResult ProSLIC_LoadPreviousLBCal ProSLIC_LoadPreviousLBCalPacked ProSLIC_GetLBCalResultPacked
- */
-
-int ProSLIC_LBCal (proslicChanType_ptr *pProslic, int size);
-
-/**
- * @brief
- *  This function returns the coefficient results of the last LB calibration.
- *
- * @param[in] pProslic - which channel to retrieve the values from.
- * @param[out] result1 - results read from the last calibration
- * @param[out] result2 - results read from the last calibration
- * @param[out] result3 - results read from the last calibration
- * @param[out] result4 - results read from the last calibration
-*  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-*  @sa ProSLIC_LBCal ProSLIC_LoadPreviousLBCal ProSLIC_LoadPreviousLBCalPacked ProSLIC_LBCal ProSLIC_GetLBCalResultPacked
-*/
-
-int ProSLIC_GetLBCalResult (proslicChanType *pProslic,int32 *result1,
-                            int32 *result2,int32 *result3,int32 *result4);
-
-/**
- * @brief
- *  This function loads previously stored LB calibration results to the appropriate ProSLIC
- *  RAM locations.
- *
- * @param[in] pProslic - which channel to program the values
- * @param[in] result1 - values to be written
- * @param[in] result2 - values to be written
- * @param[in] result3 - values to be written
- * @param[in] result4 - values to be written
-*  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-*  @sa ProSLIC_LBCal ProSLIC_LoadPreviousLBCalPacked ProSLIC_LBCal ProSLIC_GetLBCalResult ProSLIC_GetLBCalResultPacked
-*/
-
-int ProSLIC_LoadPreviousLBCal (proslicChanType *pProslic,int32 result1,
-                               int32 result2,int32 result3,int32 result4);
-
-/**
- * @brief
- *  This function returns the results of the last LB calibration packed into single int32.
- *
- * @param[in] pProslic - which channel to retrieve the values from.
- * @param[out] result - results - where to store the value
-*  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-*  @sa ProSLIC_LBCal ProSLIC_LoadPreviousLBCal ProSLIC_LoadPreviousLBCalPacked ProSLIC_LBCal
-*/
-
-int ProSLIC_GetLBCalResultPacked (proslicChanType *pProslic,int32 *result);
-
-/**
- * @brief
- *  This function loads previously stored LB calibration results that are in the packed format.
- *
- * @param[in] pProslic - which channel to retrieve the values from.
- * @param[in] result - results read from @ref ProSLIC_GetLBCalResultPacked
-*  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-*  @sa ProSLIC_LBCal ProSLIC_LoadPreviousLBCal ProSLIC_LBCal ProSLIC_GetLBCalResultPacked
-*
-*/
-
-int ProSLIC_LoadPreviousLBCalPacked (proslicChanType *pProslic,int32 *result);
-
-/** @} PROSLIC_LB_CALIBRATION */
-
-
-/*****************************************************************************/
-/** @addtogroup DIAGNOSTICS
- * @{
- */
-
-/**
- * @brief
- *  This function can be used to verify that the SPI interface is functioning
- *  properly by performing a series of read back tests.  This test DOES modify
- *  certain registers, so a reinitialization will be required.  This test is
- *  recommended only for development use.
- *
- * @param[in] pProslic - This should point to the channel that is to be verified.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error amd will typically return back
- * @ref RC_SPI_FAIL if a SPI failure occured.
- */
-
-int ProSLIC_VerifyControlInterface (proslicChanType_ptr pProslic);
-
-/** @addtogroup PSTN_CHECK PSTN Check
- * @{
- */
-
-/**
- * @brief
- * Allocates memory for a PSTN check object. One channel object is needed per
- * ProSLIC channel.
- *
- *  @param[in,out] pstnCheckObj - pointer to the object that is to be initialized.
- *  @param[in] num_objs - number of objects to allocate
- *
- *  @retval 0 = OK
- */
-
-int ProSLIC_CreatePSTNCheckObjs(proslicPSTNCheckObjType_ptr *pstnCheckObj,
-                                unsigned int num_objs);
-#define ProSLIC_CreatePSTNCheckObj(PTRPTR) ProSLIC_CreatePSTNCheckObjs((PTRPTR), 1)
-
-/**
- * @brief
- * Allocates memory for a differential PSTN check object. One channel object is needed per
- * ProSLIC channel.
- *
- *  @param[in,out] pstnCheckObj - pointer to the object that is to be initialized.
- *  @param[in] num_objs - number of objects to allocate
- *
- *  @retval 0 = OK
- */
-
-int ProSLIC_CreateDiffPSTNCheckObjs(proslicDiffPSTNCheckObjType_ptr
-                                    *pstnCheckObj, unsigned int num_objs);
-#define ProSLIC_CreateDiffPSTNCheckObj(PTRPTR) ProSLIC_CreateDiffPSTNCheckObjs((PTRPTR), 1)
-
-/**
- * @brief
- * Destroys a PSTN check object and deallocates memory.
- *
- * @param[in] pstnCheckObj - object to deallocate.
- *
- * @retval 0 = OK
- */
-
-#define ProSLIC_DestroyPSTNCheckObj ProSLIC_DestroyPSTNCheckObjs
-int ProSLIC_DestroyPSTNCheckObjs(proslicPSTNCheckObjType_ptr *pstnCheckObj);
-
-/**
- * @brief
- *  Destroys a differential PSTN check object and deallocates memory.
- *
- * @param[in] pstnCheckObj - object to deallocate.
- *
- * @retval 0 = OK
- */
-
-#define ProSLIC_DestroyDiffPSTNCheckObj ProSLIC_DestroyDiffPSTNCheckObjs
-int ProSLIC_DestroyDiffPSTNCheckObjs(proslicDiffPSTNCheckObjType_ptr
-                                     *pstnCheckObj);
-
-/**
- * @brief
- *  Initialize pstnCheckObj structure members
- *
- * @param[in] pstnCheckObj - which object to initialize
- * @param[in] avgThresh - Average current threshold that indicates a PSTN is present (uA).
- * @param[in] singleThresh - Single current threshold that indicates a PSTN is present (uA).
- * @param[in] samples - number of samples to collect
- * @retval 0 = OK
- */
-
-int ProSLIC_InitPSTNCheckObj(proslicPSTNCheckObjType_ptr pstnCheckObj,
-                             int32 avgThresh, int32 singleThresh, uInt8 samples);
-
-/**
- * @brief
- *  This function initializes a differential PSTN detection object.
- *
- *  @param[in,out] pstnDiffCheckObj - object to be initialized
- *  @param[in] preset1 - DC Feed preset to be used for first loop I/V measurement
- *  @param[in] preset2 - DC Feed preset to be used for second loop I/V measurement
- *  @param[in] entry_preset - restore_preset DC Feed preset that is restored after PSTN check is complete.
- *  @param[in] femf_enable - Flag to enable OPEN state hazardous voltage measurement (0 = disabled, 1 = enabled)
- *  @retval 0 = OK
- */
-
-int ProSLIC_InitDiffPSTNCheckObj(proslicDiffPSTNCheckObjType_ptr
-                                 pstnDiffCheckObj, int preset1, int preset2, int entry_preset, int femf_enable);
-
-/**
- * @brief
- * This function monitors longitudinal current (average and single sample) to quickly identify
- * the presence of a live PSTN line. Sufficient polling needs to occur in order to quickly determine
- * if a PSTN line is preset or not.
- *
- *  @param[in] pProslic - which channel to run this test on.
- *  @param[in] pPSTNCheck - the initialized data structure that contains the intermediate results of this test.
- *  @retval 0 = no PSTN detected/thresholds have not been exceeded, 1 = PSTN detected, state machine reset.
- *
- *  @note
- *   If wanting to restart the test, one will need to call @ref ProSLIC_InitPSTNCheckObj again. However, if the
- *   number of samples exceeds the buffer then the function will "wrap".
- */
-
-int ProSLIC_PSTNCheck(proslicChanType *pProslic,
-                      proslicPSTNCheckObjType *pPSTNCheck);
-
-/**
- * @brief
- *  This function monitors for a foreign voltage (if enabled) and measures the differential I/V
- *  characteristics of the loop at 2 unique settings to detect a foreign PSTN.  It is assumed that polling will
- *  occur at the configured value found in @ref PSTN_DET_POLL_RATE.
- *
- *  @param[in] pProslic - channel to be monitored
- *  @param[in,out] pPSTNCheck - pointer to an initialized structure that is used by the function to
- *  store state information.
- *  @retval int @ref RC_NONE - test is in progress, @ref RC_COMPLETE_NO_ERR - test complete, no errors, @ref RC_PSTN_OPEN_FEMF - detected foreign voltage, RC_CHANNEL_TYPE_ERR = a non-ProSLIC device was called to perform this function
- */
-int ProSLIC_DiffPSTNCheck(proslicChanType *pProslic,
-                          proslicDiffPSTNCheckObjType *pPSTNCheck);
-
-/** @} PSTN_CHECK */
-/** @} DIAGNOSTICS*/
-
-/*****************************************************************************/
-/** @defgroup PROSLIC_DCFEED DC Feed Setup and control
- * @{
- */
-
-/**
- * @brief
- *  Configures the DC feed from a preset.
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] preset - the preset to use
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be disabled by @ref DISABLE_DCFEED_SETUP
- */
-
-int ProSLIC_DCFeedSetup (proslicChanType_ptr hProslic,int preset);
-
-/**
- * @brief
- *  Configures the DC feed from a preset.
- *
- * @param[in] hProslic - which channel to configure
- * @param[in] cfg - pointer to preset storage structure
- * @param[in] preset - the preset to use
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @note This function can be disabled by @ref DISABLE_DCFEED_SETUP
- */
-int ProSLIC_DCFeedSetupCfg (proslicChanType_ptr hProslic,
-                            ProSLIC_DCfeed_Cfg *cfg, int preset);
-
-/**
- * @brief
- *  This function allows one to adjust the DC open circuit voltage level dynamically. Boundary checking is done.
- *
- * @note This function does NOT modify the register sets needed, it calculates the correct values and stores
- * them in the correct preset.  Use @ref ProSLIC_DCFeedSetup to program the device with the new values.
- *
- * @param[in] pProslic - which channel to configure
- * @param[in] v_vlim_val - absolute voltage level
- * @param[in] preset - DC Feed preset to be modified.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_dbgSetDCFeedIloop ProSLIC_DCFeedSetup
- */
-
-int ProSLIC_dbgSetDCFeedVopen (proslicChanType *pProslic, uInt32 v_vlim_val,
-                               int32 preset);
-
-/**
- * @brief
- *  This function allows one to adjust the loop current level dynamically. Boundary checking is done.
- *
- * @note This function does NOT modify the register sets needed, it calculates the correct values and stores
- * them in the correct preset.  Use @ref ProSLIC_DCFeedSetup to program the device with the new values.
- *
- * @param[in] pProslic - which channel to configure
- * @param[in] i_ilim_val - loop current level
- * @param[in] preset - DC Feed preset to be modified.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_dbgSetDCFeedVopen ProSLIC_DCFeedSetup
- */
-
-int ProSLIC_dbgSetDCFeedIloop (proslicChanType *pProslic, uInt32 i_ilim_val,
-                               int32 preset);
-
-/**
- * @brief
- *  This function allows one to enable/disable power savings mode found on some of the chipsets.  This allows one
- *  to change the default value set in the GUI config tool.
- *
- * @param[in] pProslic - which channel to configure
- * @param[in] pwrsave -  power savings mode enabled or disabled - value expected: @ref PWRSAVE_DISABLE or @ref PWRSAVE_ENABLE
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int ProSLIC_SetPowersaveMode(proslicChanType *pProslic, int pwrsave);
-
-/** @} PROSLIC_DCFEED */
-
-/*****************************************************************************/
-/** @defgroup MESSAGE_WAITING Message Waiting Indicator routines
- * @{
- */
-
-/**
- * @brief
- *  Configure optional MWI voltage settings.  Default value is 95v.
- *
- * @details
- *  Set MWI flashing voltage level (Vpk).
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] hProslic - channel to modify
- * @param[in] vpk_mag - MWI voltage level (vpk) (no change is made if 0)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-int ProSLIC_MWISetV (proslicChanType_ptr hProslic,uInt16 vpk_mag);
-
-/**
- * @brief
- *  Enables message waiting indicator feature
- *
- * @details
- *  Message waiting (neon flashing) enabled if device is in the onhook state.
- *  Otherwise, function will not execute and return RC_MWI_ENABLE_FAIL.  This
- *  function must be called to ENABLE MWI prior to calling ProSLIC_MWI to toggle
- *  the voltage level on TIP-RING.
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] hProslic - channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-int ProSLIC_MWIEnable (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  Disables message waiting indicator feature
- *
- * @details
- *  Message waiting (neon flashing) disable.  Turns off flashing and disabled
- *  MWI feature.
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] hProslic - channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-int ProSLIC_MWIDisable (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  Implements message waiting indicator
- *
- * @details
- *  Message waiting (neon flashing) state toggling.  If MWI feature has not been
- *  enabled by calling ProSLIC_SetMWIEnable(), then this function will return
- *  RC_MWI_NOT_ENABLED
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] hProslic - channel to modify
- * @param[in] flash_on - 0 = lamp off, 1 = lamp on.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_SetMWIState(proslicChanType_ptr hProslic,uInt8 flash_on);
-
-/**
- * @brief
- *  Intializes message waiting indicator with ramp configurability
- *
- * @details
- *  Message waiting (neon flashing) initialization.  If MWI feature has not been
- *  enabled by calling ProSLIC_SetMWIEnable(), then this function will return
- *  RC_MWI_NOT_ENABLED
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] pProslic - channel to modify
- * @param[in] steps - number of steps in ramp, tick duration is time of one step
- * @param[in] onTime - number of ticks MWI is in the ON state
- * @param[in] offTime - number of ticks MWI is in the OFF state
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_MWIRampStart(proslicChanType_ptr pProslic, uInt32 steps, uInt32 onTime, uInt32 offTime);
-
-/**
- * @brief
- *  Implements message waiting indicator with ramp between ON and OFF states
- *
- * @details
- *  Message waiting (neon flashing) polling function.  If MWI feature has not been
- *  enabled by calling ProSLIC_SetMWIEnable(), then this function will return
- *  RC_MWI_NOT_ENABLED
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] pProslic - channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
- 
-int ProSLIC_MWIRampPoll(proslicChanType_ptr pProslic);
-
-/**
- * @brief
- *  Restores ramping message waiting indicator state
- *
- * @details
- *  Message waiting (neon flashing) stop function.  If MWI feature has not been
- *  enabled by calling ProSLIC_SetMWIEnable(), then this function will return
- *  RC_MWI_NOT_ENABLED
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] pProslic - channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
- 
-int ProSLIC_MWIRampStop(proslicChanType_ptr pProslic);
-
-/**
- * @brief
- *  Read MWI output state
- *
- * @details
- *  Message waiting (neon flashing) state read.  If MWI feature has not been
- *  enabled by calling ProSLIC_SetMWIEnable(), then this function will return
- *  RC_MWI_NOT_ENABLED
- *
- * @note
- *  Proper patch must be loaded for this feature to work properly.  Code does not
- *  automatically verify that this patch is loaded.
- *
- * @param[in] hProslic - channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_GetMWIState(proslicChanType_ptr hProslic);
-
-/** @} MESSAGE_WAITING */
-
-/*****************************************************************************/
-/** @defgroup MISC MISC. routines
- * @{
- */
-
-/**
- * @brief
- *  This function initiates PLL free run mode.
- *
- * @param[in] hProslic - which channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_PLLFreeRunStart (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function terminates PLL free run mode.
- *
- * @param[in] hProslic - which channel to modify
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_PLLFreeRunStop (proslicChanType_ptr hProslic);
-
-/**
- * @brief
- *  This function returns PLL free run status.
- *
- * @param[in] hProslic - which channel to report upon.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int ProSLIC_GetPLLFreeRunStatus (proslicChanType_ptr hProslic);
-
-/**
- *
- * @brief
- * Sets the ProSLIC into User Access Mode (UAM) on parts that support this. This is mainly
- * used internally within the API.
- *
- * @param[in] pProslic - which channel to modify
- * @param[in] isEnabled - is the User Access Mode enabled (NOTE: once enabled, it can not be disabled)
- * @param[in] isBcast   - is this a broadcast on the daisychain
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-int ProSLIC_SetUserMode(proslicChanType *pProslic,BOOLEAN isEnabled,
-                        BOOLEAN isBcast);
-
-/*
-** @brief
-** Checks for improper ring exit (this is used internally by the API) and
-** not all chipsets need to call this.
-**
-** @param[in] pProslic - which ProSLIC to check.
-** Returns:
-** RC_NONE                -  Reinit not required
-** RC_REINIT_REQUIRED     -  Corrupted state machine - reinit required
-**
-*/
-int ProSLIC_isReinitRequired(proslicChanType *pProslic);
-
-/** @} MISC */
-/** @} */
-
-/* Hopefully customer's code will never call this function... */
-int ProSLIC_UnsupportedFeatureNoArg(proslicChanType_ptr pProslic,
-                                    const char *function_name);
-
-/* Helper function used by PSTN routines */
-#ifdef PSTN_DET_ENABLE
-void ProSLIC_PSTN_delay_poll(proslicTestStateType *pState, uInt16 delay);
-#endif
-
-#if defined(SI3218X) || defined(SI3226X) || defined(SI3228X) || defined(SI3217X) || defined(SI3219X)
-int ProSLIC_Calibrate(proslicChanType_ptr *hProslic, int maxChan, uInt8 *calr,
-                      int maxTime);
-#endif
-/**
- * @brief determine if the given channel is a ProSLIC or DAA
- *
- * @param[in,out] pProslic - channel to be probed.
- * @retval PROSLIC | DAA | UNKNOWN
- */
-int ProSLIC_identifyChannelType(proslicChanType *pProslic);
-
-/* The following functions are used as part of the chipset init functions, not meant to be called
-   outside this scope.
-*/
-int ProSLIC_ReInit_helper(proslicChanType_ptr *pProslic, int size,
-                          initOptionsType init_option, int numChanPerDevice);
-int ProSLIC_VerifyMasterStat(proslicChanType_ptr);
-
-void ProSLIC_LoadSupportRAM(proslicChanType *pProslic, uInt8 channel,
-                                   const uInt16 *address, const ramData *data);
-
-#endif /*end ifdef PROSLIC_H*/
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/proslic_tstin.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/proslic_tstin.h
deleted file mode 100644
index 0283473..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/proslic_tstin.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * Author(s):

- * cdp

- *

- * Distributed by:

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- * File Description:

- * This is the header file for the inward test implementations.

- *

- */

-#ifndef PROSLIC_TSTIN_H

-#define PROSLIC_TSTIN_H

-

-#include "../config_inc/si_voice_datatypes.h"

-#include "proslic.h"

-

-/** @addtogroup DIAGNOSTICS

- * @{

- */

-/** @defgroup PROSLIC_TSTIN ProSLIC Inward Tests (Test-In)

- * This section documents functions and data structures related to the

- * ProSLIC/FXS inward test implementations.

- * @{

- */

-

-#define MIN_RINGING_SAMPLES 16          /**< Minimum number of ringing samples for measuring ring amplitude */

-#define MAX_RINGING_SAMPLES 255         /**< Maximum number of ringing samples for measuring ring amplitude */

-#define MIN_RINGING_SAMPLE_INTERVAL 1   /**< Minimum sample interval for measuring ring amplitude */

-#define MAX_RINGING_SAMPLE_INTERVAL 10  /**< Maximum sample interval for measuring ring amplitude */

-

-/**

-* Test-In results status

-*/

-enum

-{

-  TSTIN_RESULTS_INVALID,

-  TSTIN_RESULTS_VALID

-};

-

-/**

-* PCM format options

-*/

-enum

-{

-  PCM_8BIT,

-  PCM_16BIT

-};

-

-/**

-* Abort if Line-in-use option

-*/

-enum

-{

-  ABORT_LIU_DISABLED,

-  ABORT_LIU_ENABLED

-};

-

-/**

-* Check for loop closure option

-*/

-enum

-{

-  LCR_CHECK_DISABLED,

-  LCR_CHECK_ENABLED

-};

-

-/**

-* Check for ringtrip option

-*/

-enum

-{

-  RTP_CHECK_DISABLED,

-  RTP_CHECK_ENABLED

-};

-

-

-/**

- * Defines generic test limit/value/status structure

- */

-typedef struct

-{

-  int32			lowerLimit;     /**< Lower test limit */

-  int32			upperLimit;     /**< Upper test limit */

-  int32			value;          /**< Numeric test result */

-  uInt8			testResult;		/**< 0 - Fail, 1 - pass */

-} proslicTestObj;

-

-/**

- * Defines structure for PCM Loopback Test

- */

-typedef struct

-{

-  BOOLEAN			testEnable;		/**< Gate execution/updating of results with this flag */

-  BOOLEAN			pcmLpbkEnabled;	/**< Indicates if test data is valid (1) or stale (0) */

-  BOOLEAN			pcm8BitLinear;  /**< Set to use 8 bit linear mode (used if normally using ulaw or alaw) */

-  uInt8           pcmModeSave;    /**< Store entry PCMMODE value  */

-  uInt8			testResult;		/**< OR of all test results in this structure */

-} proslicPcmLpbkTest;

-

-

-/**

- * Defines structure for DC Feed Test

- */

-typedef struct

-{

-  BOOLEAN			testEnable;		    /**< Gate execution/updating of results with this flag */

-  BOOLEAN			testDataValid;	    /**< Indicates if test data is valid (1) or stale (0) */

-  BOOLEAN			abortIfLineInUse;   /**< Abort test if LCR set at the start of test. Leaves results invalid */

-  BOOLEAN			applyLcrThresh;     /**< Apply alternate LCR thresholds to ensure LCR event occurs */

-  uInt32

-  altLcrOffThresh;    /**< Optional LCROFFHK threshold to apply during test */

-  uInt32			altLcrOnThresh;     /**< Optional LCRONHK threshold to apply during test */

-  BOOLEAN			lcrStatus;		    /**< Indicates LCR status after applying test load */

-  proslicTestObj	dcfeedVtipOnhook;   /**< On-hook VTIP test results */

-  proslicTestObj	dcfeedVringOnhook;  /**< On-hook VRING test results */

-  proslicTestObj	dcfeedVloopOnhook;  /**< On-hook VLOOP test results */

-  proslicTestObj	dcfeedVbatOnhook;   /**< On-hook VBAT test results */

-  proslicTestObj	dcfeedItipOnhook;   /**< On-hook ITIP test results */

-  proslicTestObj	dcfeedIringOnhook;  /**< On-hook IRING test results */

-  proslicTestObj	dcfeedIloopOnhook;  /**< On-hook ILOOP test results */

-  proslicTestObj	dcfeedIlongOnhook;  /**< On-hook ILONG test results */

-  proslicTestObj	dcfeedVtipOffhook;  /**< Off-hook VTIP test results */

-  proslicTestObj	dcfeedVringOffhook; /**< Off-hook VRING test results */

-  proslicTestObj	dcfeedVloopOffhook; /**< Off-hook VLOOP test results */

-  proslicTestObj	dcfeedVbatOffhook;  /**< Off-hook VBAT test results */

-  proslicTestObj	dcfeedItipOffhook;  /**< Off-hook ITIP test results */

-  proslicTestObj	dcfeedIringOffhook; /**< Off-hook IRING test results */

-  proslicTestObj	dcfeedIloopOffhook; /**< Off-hook ILOOP test results */

-  proslicTestObj	dcfeedIlongOffhook; /**< Off-hook ILONG test results */

-  uInt8			testResult;		    /**< OR of all test results in this structure */

-} proslicDcFeedTest;

-

-

-/**

- * Defines structure for Ringing Test

- */

-typedef struct

-{

-  BOOLEAN			testEnable;		    /**< Gate execution/updating of results with this flag */

-  BOOLEAN			testDataValid;	    /**< Indicates if test data is valid (1) or stale (0) */

-  BOOLEAN			abortIfLineInUse;   /**< Abort test if LCR set at the start of test. Leaves results invalid */

-  uInt16			numSamples;         /**< Number of samples taken */

-  uInt8

-  sampleInterval;     /**< Sample interval (in ms - range 1 to 100) */

-  BOOLEAN			ringtripTestEnable; /**< Enable ringtrip test */

-  BOOLEAN			rtpStatus;          /**< RTP Bit */

-  proslicTestObj	ringingVac;         /**< Ringing AC Voltage test results */

-  proslicTestObj	ringingVdc;         /**< Ringing DC Voltage test results */

-  uInt8			testResult;		    /**< OR of all test results in this structure */

-} proslicRingingTest;

-

-/**

- * Defines structure for Battery Test

- */

-typedef struct

-{

-  BOOLEAN			testEnable;		/**< Gate execution/updating of results with this flag */

-  BOOLEAN			testDataValid;	/**< Indicates if test data is valid (1) or stale (0) */

-  proslicTestObj	vbat;           /**< VBAT test results */

-  uInt8			testResult;		/**< OR of all test results in this structure */

-} proslicBatteryTest;

-

-/**

- * Defines structure for Audio Test

- */

-typedef struct

-{

-  BOOLEAN			testEnable;		  /**< Gate execution/updating of results with this flag */

-  BOOLEAN			testDataValid;	  /**< Indicates if test data is valid (1) or stale (0) */

-  BOOLEAN			abortIfLineInUse; /**< Abort test if LCR set at the start of test. Leaves results invalid */

-  int32

-  zerodBm_mVpk;     /**< 0dBm voltage (in mVpk) of ref impedance */

-  proslicTestObj	txGain;		      /**< TX path gain test results */

-  proslicTestObj  rxGain;           /**< RX path gain test results */

-  uInt8			testResult;		  /**< OR of all test results in this structure */

-} proslicAudioTest;

-

-

-/**

- * Defines structure for all tests

- */

-typedef struct

-{

-  proslicPcmLpbkTest	pcmLpbkTest;

-  proslicDcFeedTest	dcFeedTest;

-  proslicRingingTest	ringingTest;

-  proslicBatteryTest	batteryTest;

-  proslicAudioTest	audioTest;

-} proslicTestInObjType;

-

-typedef proslicTestInObjType *proslicTestInObjType_ptr;

-

-

-/**

- * @brief

- *  Allocate memory and initialize the given structure.

- *

- * @param[in,out] *pTstin - the structure to initialize

- * @param[in]     num_objs - number of Testin structures to allocate.

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- * @sa ProSLIC_DestroyTestInObjs

- */

-int ProSLIC_createTestInObjs(proslicTestInObjType_ptr *pTstin, uInt32 num_objs);

-#define ProSLIC_createTestInObj(X) ProSLIC_createTestInObjs((X),1)

-

-/**

- * @brief

- *  Free memory reserved by the given structure.

- *

- * @param[in,out] *pTstin - the structure to initialize

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_destroyTestInObjs(proslicTestInObjType_ptr *pTstin);

-#define ProSLIC_destroyTestInObj ProSLIC_destroyTestInObjs

-

-/**

- * @brief

- *  Enable PCM loopback.

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in,out]  pTstin - all control, limits, and results

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInPCMLpbkEnable(proslicChanType_ptr pProslic,

-                                proslicTestInObjType_ptr pTstin);

-

-

-/**

- * @brief

- *  Disable PCM loopback.

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in,out]  pTstin - all control, limits, and results

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInPCMLpbkDisable(proslicChanType_ptr pProslic,

-                                 proslicTestInObjType_ptr pTstin);

-

-

-/**

- * @brief

- * DC Feed Test - the pTstin->dcFeedTest contains control, limits and test result information.

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in,out]  pTstin - all control, limits, and results

- *

- * @retval int - error from @ref errorCodeType

- * @retval RC_TEST_PASSED indicates test completed and passed

- * @retval RC_TEST_FAILED indicates test completed and failed

- * @retval RC_UNSUPPORTED_FEATURE indicates feature not supported on this device

- * @retval RC_TEST_DISABLED indicates test has not been initialized/enabled

- * @retval RC_LINE_IN_USE indicates LCS already set

- *

- */

-int ProSLIC_testInDCFeed(proslicChanType_ptr pProslic,

-                         proslicTestInObjType_ptr pTstin);

-

-

-/**

- * @brief

- * Ringing and Ringtrip Test

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in,out]  pTstin - all control, limits, and results

- *

- * @retval int - error from @ref errorCodeType

- * @retval RC_TEST_PASSED indicates test completed and passed

- * @retval RC_TEST_FAILED indicates test completed and failed

- * @retval RC_UNSUPPORTED_FEATURE indicates feature not supported on this device

- * @retval RC_TEST_DISABLED indicates test has not been initialized/enabled

- * @retval RC_LINE_IN_USE indicates LCS already set

- *

- */

-int ProSLIC_testInRinging(proslicChanType_ptr pProslic,

-                          proslicTestInObjType_ptr pTstin);

-

-/**

- * @brief

- * Battery Test -

- * pTstin contains both the configuration data and test results.

- * See **pTstin->batteryTest.testResult - Pass/Fail result

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in,out]  pTstin - configuration and test results

- *

- * @retval int - error from @ref errorCodeType

- * @retval RC_TEST_PASSED indicates test completed and passed

- * @retval RC_TEST_FAILED indicates test completed and failed

- * @retval RC_UNSUPPORTED_FEATURE indicates feature not supported on this device

- * @retval RC_TEST_DISABLED indicates test has not been initialized/enabled

- *

- */

-int ProSLIC_testInBattery(proslicChanType_ptr pProslic,

-                          proslicTestInObjType_ptr pTstin);

-

-/**

- * @brief

- * Audio level inward test.  pTstin->audioTest contains all control, limits and results.

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in,out]  pTstin - all control, limits, and results

- *

- * @retval int - error from @ref errorCodeType

- * @retval RC_TEST_PASSED indicates test completed and passed

- * @retval RC_TEST_FAILED indicates test completed and failed

- * @retval RC_UNSUPPORTED_FEATURE indicates feature not supported on this device

- * @retval RC_TEST_DISABLED indicates test has not been initialized/enabled

- * @retval RC_LINE_IN_USE indicates LCS already set

- *

- */

-int ProSLIC_testInAudio(proslicChanType_ptr pProslic,

-                        proslicTestInObjType_ptr pTstin);

-

-/**

- * @brief

- *  Initialize/Enable PCM Loopback Test.  Links test config/limits

- *  to inward test data structure.

- *

- * @param[in,out]  pTstin->pcmLpbkTest - all control, limits, and results

- * @param[in]      pcmLpbkTest -  test config and limits to link to pTstin->pcmLpbkTest

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInPcmLpbkSetup(proslicTestInObjType *pTstin,

-                               proslicPcmLpbkTest *pcmLpbkTest);

-

-/**

- * @brief

- *  Initialize/Enable DC Feed Test.  Links test config/limits

- *  to inward test data structure.

- *

- * @param[in,out]  pTstin->dcFeedTest - all control, limits, and results

- * @param[in]      dcFeedTest -  test config and limits to link to pTstin->dcFeedTest

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInDcFeedSetup(proslicTestInObjType *pTstin,

-                              proslicDcFeedTest *dcFeedTest);

-

-/**

- * @brief

- *  Initialize/Enable Ringing Test.  Links test config/limits

- *  to inward test data structure.

- *

- * @param[in,out]  pTstin->ringingTest - all control, limits, and results

- * @param[in]      ringingTest -  test config and limits to link to pTstin->ringingTest

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInRingingSetup(proslicTestInObjType *pTstin,

-                               proslicRingingTest *ringingTest);

-

-/**

- * @brief

- *  Initialize/Enable Battery Test.  Links test config/limits

- *  to inward test data structure.

- *

- * @param[in,out]  pTstin->batteryTest - all control, limits, and results

- * @param[in]      batteryTest -  test config and limits to link to pTstin->batteryTest

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInBatterySetup(proslicTestInObjType *pTstin,

-                               proslicBatteryTest *batteryTest);

-

-/**

- * @brief

- *  Initialize/Enable Audio Test.  Links test config/limits

- *  to inward test data structure.

- *

- * @param[in,out]  pTstin->audioTest - all control, limits, and results

- * @param[in]      audioTest -  test config and limits to link to pTstin->audioTest

- *

- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.

- */

-int ProSLIC_testInAudioSetup(proslicTestInObjType *pTstin,

-                             proslicAudioTest *audioTest);

-

-

-/**

- * @brief

- *  Debug utility to log presently loaded test limits

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in]      pTstin - inward test data structure

- *

- * @retval int - error from @ref errorCodeType

- * @retval RC_NONE indicates no error.

- * @retval RC_UNSUPPORTED_FEATURE indicates feature not supported on this device

- */

-int ProSLIC_testInPrintLimits(proslicChanType *pProslic,

-                              proslicTestInObjType *pTstin);

-

-/**

- * @brief

- *  Provide a simulated offhook using the ProSLIC test load.  You would call 

- *  this function twice: once to enable the simulated test load 

- *  (is_testStart = TRUE) and check if the upper layer correctly detected

- *  the hook state change and possibly pass some audio.  After you have

- *  completed this test/check, you would call the same function again to

- *  restore the system to normal state (is_testStart = FALSE).

- *

- * @note This test can only be executed one at a time.  Running this on

- *       multiple channels that have different DC Feed and digital control

- *       settings will cause problems. If the all the channels have the

- *       same settings, this restriction can be loosened.

- *       

- *

- * @param[in]      pProslic  -  channel data structure

- * @param[in]      is_testStart - is the the start or end of test.

- * @param[in]      timeDelayMsec - how may mSec to delay prior to returning from

-                   the function.

- *

- * @retval int - error from @ref errorCodeType

- * @retval RC_NONE indicates no error.

- * @retval RC_UNSUPPORTED_FEATURE indicates feature not supported on this device

- */

-

-int ProSLIC_testLoadTest(

-  SiVoiceChanType_ptr pProslic, 

-  BOOLEAN is_testStart, 

-  uint32_t timeDelayMsec);

-

-/** @} PROSLIC_TSTIN */

-/** @} DIAGNOSTICS */

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x.h
deleted file mode 100644
index e2fd9d2..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * Distributed by:

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- */

-

-#ifndef SI3218XH_H

-#define SI3218XH_H

-

-#include "proslic.h"

-

-#define SI3218X_CHAN_PER_DEVICE             1

-

-

-/*

-** Calibration Constants

-*/

-

-#define SI3218X_CAL_STD_CALR1       0xC0

-#define SI3218X_CAL_STD_CALR2       0x18

-

-/* Timeouts in 10s of ms */

-#define SI3218X_TIMEOUT_DCDC_UP     200

-#define SI3218X_TIMEOUT_DCDC_DOWN   200

-

-

-/*

-** SI3218X DataTypes/Function Definitions

-*/

-

-

-typedef ProSLIC_DCfeed_Cfg Si3218x_DCfeed_Cfg;

-

-/*

-** Si3218x General Parameter Struct

-*/

-typedef struct

-{

-  /* Flags */

-  uInt8               device_key;

-  bomOptionsType      bom_option;

-  vdcRangeType        vdc_range;

-  autoZcalType        zcal_en;

-  pmBomType           pm_bom;

-  /* Raw Parameters */

-  ramData         i_oithresh_lo;

-  ramData         i_oithresh_hi;

-  ramData         v_ovthresh;

-  ramData         v_uvthresh;

-  ramData         v_uvhyst;

-  /* RAM Updates */

-  ramData         dcdc_fsw_vthlo;

-  ramData         dcdc_fsw_vhyst;

-  ramData         p_th_hvic;

-  ramData         coef_p_hvic;

-  ramData         bat_hyst;

-  ramData

-  vbath_expect;         /* default - this is overwritten by dc feed preset */

-  ramData

-  vbatr_expect;         /* default - this is overwritten by ring preset */

-  ramData         pwrsave_timer;

-  ramData         pwrsave_ofhk_thresh;

-  ramData         vbat_track_min;       /* Same as DCDC_VREF_MIN */

-  ramData         vbat_track_min_rng;   /* Same as DCDC_VREF_MIN_RNG */

-  ramData         dcdc_ana_scale;

-  ramData         therm_dbi;

-  ramData         vov_dcdc_slope;

-  ramData         vov_dcdc_os;

-  ramData         vov_ring_bat_dcdc;

-  ramData         vov_ring_bat_max;

-  ramData         dcdc_verr;

-  ramData         dcdc_verr_hyst;

-  ramData         pd_uvlo;

-  ramData         pd_ovlo;

-  ramData         pd_oclo;

-  ramData         pd_swdrv;

-  ramData         dcdc_uvpol;

-  ramData         dcdc_rngtype;

-  ramData         dcdc_ana_toff;

-  ramData         dcdc_ana_tonmin;

-  ramData         dcdc_ana_tonmax;

-  uInt8           irqen1;

-  uInt8           irqen2;

-  uInt8           irqen3;

-  uInt8           irqen4;

-  uInt8           enhance;

-  uInt8            auto_reg;

-} Si3218x_General_Cfg;

-

-/*

-** Defines structure for configuring pcm

-*/

-typedef struct

-{

-  uInt8 pcmFormat;

-  uInt8 widebandEn;

-  uInt8 pcm_tri;

-  uInt8 tx_edge;

-  uInt8 alaw_inv;

-} Si3218x_PCM_Cfg;

-

-/*

-** Defines structure for configuring pulse metering

-*/

-typedef struct

-{

-  ramData pm_amp_thresh;

-  uInt8 pmFreq;

-  uInt8 pmAuto;

-  ramData pmActive;

-  ramData pmInactive;

-} Si3218x_PulseMeter_Cfg;

-/*

-** Defines structure for configuring FSK generation

-*/

-typedef ProSLIC_FSK_Cfg Si3218x_FSK_Cfg;

-

-

-/*

-** Defines structure for configuring impedance synthesis

-*/

-typedef struct

-{

-  ramData zsynth_b0;

-  ramData zsynth_b1;

-  ramData zsynth_b2;

-  ramData zsynth_a1;

-  ramData zsynth_a2;

-  uInt8 ra;

-} Si3218x_Zsynth_Cfg;

-

-/*

-** Defines structure for configuring hybrid

-*/

-typedef struct

-{

-  ramData ecfir_c2;

-  ramData ecfir_c3;

-  ramData ecfir_c4;

-  ramData ecfir_c5;

-  ramData ecfir_c6;

-  ramData ecfir_c7;

-  ramData ecfir_c8;

-  ramData ecfir_c9;

-  ramData ecfir_b0;

-  ramData ecfir_b1;

-  ramData ecfir_a1;

-  ramData ecfir_a2;

-} Si3218x_hybrid_Cfg;

-

-/*

-** Defines structure for configuring GCI CI bits

-*/

-typedef struct

-{

-  uInt8 gci_ci;

-} Si3218x_CI_Cfg;

-

-/*

-** Defines structure for configuring audio eq

-*/

-

-typedef struct

-{

-  ramData txaceq_c0;

-  ramData txaceq_c1;

-  ramData txaceq_c2;

-  ramData txaceq_c3;

-

-  ramData rxaceq_c0;

-  ramData rxaceq_c1;

-  ramData rxaceq_c2;

-  ramData rxaceq_c3;

-} Si3218x_audioEQ_Cfg;

-

-/*

-** Defines structure for configuring audio gain

-*/

-typedef ProSLIC_audioGain_Cfg Si3218x_audioGain_Cfg;

-

-

-

-typedef struct

-{

-  Si3218x_audioEQ_Cfg audioEQ;

-  Si3218x_hybrid_Cfg hybrid;

-  Si3218x_Zsynth_Cfg zsynth;

-  ramData txgain;

-  ramData rxgain;

-  ramData rxachpf_b0_1;

-  ramData  rxachpf_b1_1;

-  ramData  rxachpf_a1_1;

-  int16 txgain_db; /*overall gain associated with this configuration*/

-  int16 rxgain_db;

-} Si3218x_Impedance_Cfg;

-

-

-

-/*

-** Defines structure for configuring tone generator

-*/

-typedef ProSLIC_Tone_Cfg Si3218x_Tone_Cfg;

-

-/*

-** Defines structure for configuring ring generator

-*/

-typedef struct

-{

-  ramData rtper;

-  ramData freq;

-  ramData amp;

-  ramData phas;

-  ramData offset;

-  ramData slope_ring;

-  ramData iring_lim;

-  ramData rtacth;

-  ramData rtdcth;

-  ramData rtacdb;

-  ramData rtdcdb;

-  ramData vov_ring_bat;

-  ramData vov_ring_gnd;

-  ramData vbatr_expect;

-  uInt8 talo;

-  uInt8 tahi;

-  uInt8 tilo;

-  uInt8 tihi;

-  ramData adap_ring_min_i;

-  ramData counter_iring_val;

-  ramData counter_vtr_val;

-  ramData ar_const28;

-  ramData ar_const32;

-  ramData ar_const38;

-  ramData ar_const46;

-  ramData rrd_delay;

-  ramData rrd_delay2;

-  ramData dcdc_vref_min_rng;

-  uInt8 ringcon;

-  uInt8 userstat;

-  ramData vcm_ring;

-  ramData vcm_ring_fixed;

-  ramData delta_vcm;

-  ramData dcdc_rngtype;

-} Si3218x_Ring_Cfg;

-

-

-

-

-

-/*

-** Function: Si3218x_RevC_GenParamUpdate

-**

-** Description:

-** Update Si3218x general parameters and other required modifications

-** to default reg/ram values

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_GenParamUpdate(proslicChanType_ptr hProslic,initSeqType seq);

-

-

-/*

-** Function: Si3217x_RevC_SelectPatch

-**

-** Description:

-** Select appropriate patch based on general parameters

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_SelectPatch(proslicChanType_ptr hProslic,

-                        const proslicPatch **patch);

-

-/*

-** Function: Si3217x_RevC_ConverterSetup

-**

-** Description:

-** Program revision specific settings before powering converter

-**

-** Specifically, from general parameters and knowledge that this

-** is Rev C, setup dcff drive, gate drive polarity, and charge pump.

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_ConverterSetup(proslicChanType_ptr pProslic);

-

-/*

-** Function: Si3217x_RevC_PulseMeterSetup

-**

-** Description:

-** configure pulse metering

-*/

-int Si3218x_PulseMeterSetup (proslicChanType_ptr hProslic, int preset);

-

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x_intf.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x_intf.h
deleted file mode 100644
index af9b057..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x_intf.h
+++ /dev/null
@@ -1,479 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * Si3218x ProSLIC interface header file

- *

- * Distributed by:

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- * File Description:

- * This is the header file for the ProSLIC driver.

- *

- *

- */

-

-#ifndef SI3218X_INTF_H

-#define SI3218X_INTF_H

-#include "si3218x.h"

-

-/* The following macros are for backward compatibility */

-#define Si3218x_LoadPatch                    ProSLIC_LoadPatch

-#define Si3218x_ReadHookStatus               ProSLIC_ReadHookStatus

-#define Si3218x_DCFeedSetup(PCHAN, NDX)      Si3218x_DCFeedSetupCfg((PCHAN),Si3218x_DCfeed_Presets, (NDX))

-#define Si3218x_VerifyPatch		             ProSLIC_VerifyPatch

-#define Si3218x_SetPowersaveMode             ProSLIC_SetPowersaveMode

-#define Si3218x_Init(PCHAN, SZ)              Si3218x_Init_with_Options((PCHAN), (SZ), INIT_NO_OPT)

-#define Si3218x_LoadRegTables                ProSLIC_LoadRegTables

-#define Si3218x_VerifyControlInterface       ProSLIC_VefifyControlInterface

-#define Si3218x_ShutdownChannel              ProSLIC_PowerDownConverter

-#define Si3218x_PowerDownConverter           ProSLIC_PowerDownConverter

-#define Si3218x_Calibrate                    ProSLIC_Calibrate

-#define Si3218x_SetLinefeedStatusBroadcast   ProSLIC_SetLinefeedStatusBroadcast

-#define Si3218x_SetLinefeedStatus            ProSLIC_SetLinefeedStatus

-#define Si3218x_MWIEnable                    ProSLIC_MWIEnable

-#define Si3218x_MWIDisable                   ProSLIC_MWIDisable

-#define Si3218x_SetMWIState                  ProSLIC_SetMWIState

-#define Si3218x_GetMWIState                  ProSLIC_GetMWIState

-#define Si3218x_MWISetup(PCHAN,VPK,LCR)      ProSLIC_MWISetV(PCHAN,VPK)

-

-/* DC Feed */

-#ifndef DISABLE_DCFEED_SETUP

-extern Si3218x_DCfeed_Cfg Si3218x_DCfeed_Presets[];

-#endif

-

-/*

-**

-** PROSLIC INITIALIZATION FUNCTIONS

-**

-*/

-

-/*

-** Function: PROSLIC_Init_MultiBOM

-**

-** Description:

-** Initializes the ProSLIC w/ selected general parameters

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object

-** size:     number of channels

-** preset:   General configuration preset

-**

-** Return:

-** none

-*/

-#ifdef SIVOICE_MULTI_BOM_SUPPORT

-int Si3218x_Init_MultiBOM (proslicChanType_ptr *hProslic,int size,int preset);

-#endif

-

-/*

-** Function: Si3218x_Init_with_Options

-**

-** Description:

-** Initializes the ProSLIC with an option.

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object

-** size - number of continuous channels to initialize

-** init_opt - which initialization type to do.

-**

-** Return:

-** none

-*/

-int Si3218x_Init_with_Options (proslicChanType_ptr *pProslic, int size,

-                               initOptionsType init_opt);

-

-/*

-** Function: PROSLIC_VerifyControlInterface

-**

-** Description:

-** Verify SPI port read capabilities

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object

-**

-** Return:

-** none

-*/

-int Si3218x_VerifyControlInterface (proslicChanType_ptr hProslic);

-

-/*

-** Function: Si3218x_PowerUpConverter

-**

-** Description:

-** Powers all DC/DC converters sequentially with delay to minimize

-** peak power draw on VDC.

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_PowerUpConverter(proslicChanType_ptr hProslic);

-

-/*

-** Function: Si3218x_PowerDownConverter

-**

-** Description:

-** Power down DCDC converter (selected channel only)

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_PowerDownConverter(proslicChanType_ptr hProslic);

-

-/*

-** Function: PROSLIC_EnableInterrupts

-**

-** Description:

-** Enables interrupts

-**

-** Input Parameters:

-** hProslic: pointer to Proslic object

-**

-** Return:

-**

-*/

-int Si3218x_EnableInterrupts (proslicChanType_ptr hProslic);

-

-/*

-**

-** PROSLIC CONFIGURATION FUNCTIONS

-**

-*/

-

-/*

-** Function: PROSLIC_RingSetup

-**

-** Description:

-** configure ringing

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** pRingSetup: pointer to ringing config structure

-**

-** Return:

-** none

-*/

-int Si3218x_RingSetup (proslicChanType *pProslic, int preset);

-

-/*

-** Function: PROSLIC_ZsynthSetup

-**

-** Description:

-** configure impedance synthesis

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** pZynth: pointer to zsynth config structure

-**

-** Return:

-** none

-*/

-int Si3218x_ZsynthSetup (proslicChanType *pProslic, int preset);

-

-/*

-** Function: PROSLIC_AudioGainSetup

-**

-** Description:

-** configure audio gains

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** preset:   impedance preset to scale

-**

-** Return:

-** none

-*/

-int Si3218x_TXAudioGainSetup (proslicChanType *pProslic, int preset);

-int Si3218x_RXAudioGainSetup (proslicChanType *pProslic, int preset);

-#define Si3218x_AudioGainSetup ProSLIC_AudioGainSetup

-

-/*

-** Function: PROSLIC_TXAudioGainScale

-**

-** Description:

-** configure audio gains

-**

-** Input Parameters:

-** pProslic:  pointer to Proslic object

-** preset:    pointer to audio gains config structure

-** pga_scale: pga_scaling constant

-** eq_scale:  equalizer scaling constant

-**

-** Return:

-** none

-*/

-int Si3218x_TXAudioGainScale (proslicChanType *pProslic, int preset,

-                              uInt32 pga_scale, uInt32 eq_scale);

-

-/*

-** Function: PROSLIC_RXAudioGainScale

-**

-** Description:

-** configure audio gains

-**

-** Input Parameters:

-** pProslic:  pointer to Proslic object

-** preset:    pointer to audio gains config structure

-** pga_scale: pga_scaling constant

-** eq_scale:  equalizer scaling constant

-**

-** Return:

-** none

-*/

-int Si3218x_RXAudioGainScale (proslicChanType *pProslic, int preset,

-                              uInt32 pga_scale, uInt32 eq_scale);

-

-/*

-** Function: PROSLIC_AudioEQSetup

-**

-** Description:

-** configure audio equalizers

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** pAudioEQ: pointer to ringing config structure

-**

-** Return:

-** none

-*/

-int Si3218x_AudioEQSetup (proslicChanType *pProslic, int preset);

-

-/*

-** Function: PROSLIC_DCFeedSetup

-**

-** Description:

-** configure dc feed

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** pDcFeed: pointer to dc feed config structure

-**

-** Return:

-** none

-*/

-int Si3218x_DCFeedSetupCfg (proslicChanType *pProslic, ProSLIC_DCfeed_Cfg *cfg,

-                            int preset);

-

-/*

-** Function: PROSLIC_PCMSetup

-**

-** Description:

-** configure pcm

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** pPcm: pointer to pcm config structure

-**

-** Return:

-** none

-*/

-int Si3218x_PCMSetup(proslicChanType *pProslic, int preset);

-

-/*

-**

-** PROSLIC CONTROL FUNCTIONS

-**

-*/

-

-/*

-** Function: PROSLIC_GetInterrupts

-**

-** Description:

-** Enables interrupts

-**

-** Input Parameters:

-** hProslic: pointer to Proslic object

-** pIntData: pointer to interrupt info retrieved

-**

-** Return:

-**

-*/

-int Si3218x_GetInterrupts (proslicChanType_ptr hProslic,

-                           proslicIntType *pIntData);

-

-/*

-** Function: PROSLIC_PulseMeterSetup

-**

-** Description:

-** configure pulse metering

-**

-** Input Parameters:

-** pProslic: pointer to Proslic object

-** pPulseCfg: pointer to pulse metering config structure

-**

-** Return:

-** none

-*/

-int Si3218x_PulseMeterSetup (proslicChanType *pProslic, int preset);

-

-/*

-** Function: PROSLIC_dbgSetDCFeed

-**

-** Description:

-** provision function for setting up

-** dcfeed given desired open circuit voltage

-** and loop current.

-*/

-int Si3218x_dbgSetDCFeed (proslicChanType *pProslic, uInt32 v_vlim_val,

-                          uInt32 i_ilim_val, int32 preset);

-

-/*

-** Function: PROSLIC_dbgSetDCFeedVopen

-**

-** Description:

-** provision function for setting up

-** dcfeed given desired open circuit voltage

-** and loop current.

-*/

-int Si3218x_dbgSetDCFeedVopen (proslicChanType *pProslic, uInt32 v_vlim_val,

-                               int32 preset);

-

-

-/*

-** Function: PROSLIC_dbgSetDCFeedIloop

-**

-** Description:

-** provision function for setting up

-** dcfeed given desired open circuit voltage

-** and loop current.

-*/

-int Si3218x_dbgSetDCFeedIloop (proslicChanType *pProslic, uInt32 i_ilim_val,

-                               int32 preset);

-

-

-/*

-** Function: PROSLIC_dbgRingingSetup

-**

-** Description:

-** Provision function for setting up

-** Ring type, frequency, amplitude and dc offset.

-** Main use will be by peek/poke applications.

-*/

-int Si3218x_dbgSetRinging (proslicChanType *pProslic,

-                           ProSLIC_dbgRingCfg *ringCfg, int preset);

-

-/*

-** Function: PROSLIC_dbgSetRXGain

-**

-** Description:

-** Provision function for setting up

-** RX path gain.

-*/

-int Si3218x_dbgSetRXGain (proslicChanType *pProslic, int32 gain,

-                          int impedance_preset, int audio_gain_preset);

-

-/*

-** Function: PROSLIC_dbgSetTXGain

-**

-** Description:

-** Provision function for setting up

-** TX path gain.

-*/

-int Si3218x_dbgSetTXGain (proslicChanType *pProslic, int32 gain,

-                          int impedance_preset, int audio_gain_preset);

-

-

-/*

-** Function: PROSLIC_LineMonitor

-**

-** Description:

-** Monitor line voltages and currents

-*/

-int Si3218x_LineMonitor(proslicChanType *pProslic, proslicMonitorType *monitor);

-

-

-/*

-** Function: PROSLIC_PSTNCheck

-**

-** Description:

-** Continuous monitor of ilong to detect hot pstn line

-*/

-int Si3218x_PSTNCheck(proslicChanType *pProslic,

-                      proslicPSTNCheckObjType *pstnCheckObj);

-

-

-/*

-** Function: PROSLIC_PSTNCheck

-**

-** Description:

-** Continuous monitor of ilong to detect hot pstn line

-*/

-int Si3218x_DiffPSTNCheck(proslicChanType *pProslic,

-                          proslicDiffPSTNCheckObjType *pstnCheckObj);

-

-/*

-** Function: PROSLIC_ReadMADCScaled

-**

-** Description:

-** Read MADC (or other sensed voltages/currents) and

-** return scaled value in int32 format

-*/

-int32 Si3218x_ReadMADCScaled(proslicChanType_ptr pProslic, uInt16 addr,

-                             int32 scale);

-

-/*

-** Function: Si3218x_GenParamUpdate

-**

-** Description:

-** Update Si3218x general parameters and other required modifications

-** to default reg/ram values

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_GenParamUpdate(proslicChanType_ptr hProslic,initSeqType seq);

-

-

-/*

-** Function: Si3218x_SelectPatch

-**

-** Description:

-** Select appropriate patch based on general parameters

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_SelectPatch(proslicChanType_ptr hProslic,

-                        const proslicPatch **patch);

-

-/*

-** Function: Si3218x_ConverterSetup

-**

-** Description:

-** Program revision specific settings before powering converter

-**

-** Specifically, from general parameters and knowledge that this

-** is Rev C, setup dcff drive, gate drive polarity, and charge pump.

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_ConverterSetup(proslicChanType_ptr pProslic);

-

-/*

-** Function: Si3218x8_PulseMeterSetup

-**

-** Description:

-** configure pulse metering

-*/

-int Si3218x_PulseMeterSetup (proslicChanType_ptr hProslic, int preset);

-

-

-/* 

-** Function: Si3218x_GetChipInfo

-** Description: Returns the specific chipset in the Si3218x family.

-** Input parameters: channel pointer

-** output: either RC_SPI_FAIL or RC_NONE.  channel pointer deviceId will be updated.

-**/

-int Si3218x_GetChipInfo(proslicChanType_ptr pProslic);

-

-

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x_registers.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x_registers.h
deleted file mode 100644
index 2812803..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si3218x_registers.h
+++ /dev/null
@@ -1,1518 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */

-/*

- * Distributed by:

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- */

-

-#ifndef SI3218X_REGS_H

-#define SI3218X_REGS_H

-

-/*

-** SI3218X SPI Registers

-*/

-enum SI3218X_REG

-{

-  SI3218X_REG_ID                       = 0,

-  SI3218X_REG_RESET                    = 1,

-  SI3218X_REG_MSTREN                   = 2,

-  SI3218X_REG_MSTRSTAT                 = 3,

-  SI3218X_REG_RAMSTAT                  = 4,

-  SI3218X_REG_RAM_ADDR_HI              = 5,

-  SI3218X_REG_RAM_DATA_B0              = 6,

-  SI3218X_REG_RAM_DATA_B1              = 7,

-  SI3218X_REG_RAM_DATA_B2              = 8,

-  SI3218X_REG_RAM_DATA_B3              = 9,

-  SI3218X_REG_RAM_ADDR_LO              = 10,

-  SI3218X_REG_PCMMODE                  = 11,

-  SI3218X_REG_PCMTXLO                  = 12,

-  SI3218X_REG_PCMTXHI                  = 13,

-  SI3218X_REG_PCMRXLO                  = 14,

-  SI3218X_REG_PCMRXHI                  = 15,

-  SI3218X_REG_IRQ                      = 16,

-  SI3218X_REG_IRQ0                     = 17,

-  SI3218X_REG_IRQ1                     = 18,

-  SI3218X_REG_IRQ2                     = 19,

-  SI3218X_REG_IRQ3                     = 20,

-  SI3218X_REG_IRQ4                     = 21,

-  SI3218X_REG_IRQEN1                   = 22,

-  SI3218X_REG_IRQEN2                   = 23,

-  SI3218X_REG_IRQEN3                   = 24,

-  SI3218X_REG_IRQEN4                   = 25,

-  SI3218X_REG_CALR0                    = 26,

-  SI3218X_REG_CALR1                    = 27,

-  SI3218X_REG_CALR2                    = 28,

-  SI3218X_REG_CALR3                    = 29,

-  SI3218X_REG_LINEFEED                 = 30,

-  SI3218X_REG_POLREV                   = 31,

-  SI3218X_REG_SPEEDUP_DIS              = 32,

-  SI3218X_REG_SPEEDUP                  = 33,

-  SI3218X_REG_LCRRTP                   = 34,

-  SI3218X_REG_OFFLOAD                  = 35,

-  SI3218X_REG_BATSELMAP                = 36,

-  SI3218X_REG_BATSEL                   = 37,

-  SI3218X_REG_RINGCON                  = 38,

-  SI3218X_REG_RINGTALO                 = 39,

-  SI3218X_REG_RINGTAHI                 = 40,

-  SI3218X_REG_RINGTILO                 = 41,

-  SI3218X_REG_RINGTIHI                 = 42,

-  SI3218X_REG_LOOPBACK                 = 43,

-  SI3218X_REG_DIGCON                   = 44,

-  SI3218X_REG_RA                       = 45,

-  SI3218X_REG_ZCAL_EN                  = 46,

-  SI3218X_REG_ENHANCE                  = 47,

-  SI3218X_REG_OMODE                    = 48,

-  SI3218X_REG_OCON                     = 49,

-  SI3218X_REG_O1TALO                   = 50,

-  SI3218X_REG_O1TAHI                   = 51,

-  SI3218X_REG_O1TILO                   = 52,

-  SI3218X_REG_O1TIHI                   = 53,

-  SI3218X_REG_O2TALO                   = 54,

-  SI3218X_REG_O2TAHI                   = 55,

-  SI3218X_REG_O2TILO                   = 56,

-  SI3218X_REG_O2TIHI                   = 57,

-  SI3218X_REG_FSKDAT                   = 58,

-  SI3218X_REG_FSKDEPTH                 = 59,

-  SI3218X_REG_TONDTMF                  = 60,

-  SI3218X_REG_TONDET                   = 61,

-  SI3218X_REG_TONEN                    = 62,

-  SI3218X_REG_GCI_CI                   = 63,

-  SI3218X_REG_GLOBSTAT1                = 64,

-  SI3218X_REG_GLOBSTAT2                = 65,

-  SI3218X_REG_USERSTAT                 = 66,

-  SI3218X_REG_GPIO_CFG1				   = 68,

-  SI3218X_REG_DIAG1                    = 71,

-  SI3218X_REG_DIAG2                    = 72,

-  SI3218X_REG_CM_CLAMP                 = 73,

-  SI3218X_REG_DIAG3                    = 74,

-  SI3218X_REG_PMCON                    = 75,

-  SI3218X_REG_PCLK_FAULT_CNTL          = 76,

-  SI3218X_REG_AUTO                     = 80,

-  SI3218X_REG_JMPEN                    = 81,

-  SI3218X_REG_JMP0LO                   = 82,

-  SI3218X_REG_JMP0HI                   = 83,

-  SI3218X_REG_JMP1LO                   = 84,

-  SI3218X_REG_JMP1HI                   = 85,

-  SI3218X_REG_JMP2LO                   = 86,

-  SI3218X_REG_JMP2HI                   = 87,

-  SI3218X_REG_JMP3LO                   = 88,

-  SI3218X_REG_JMP3HI                   = 89,

-  SI3218X_REG_JMP4LO                   = 90,

-  SI3218X_REG_JMP4HI                   = 91,

-  SI3218X_REG_JMP5LO                   = 92,

-  SI3218X_REG_JMP5HI                   = 93,

-  SI3218X_REG_JMP6LO                   = 94,

-  SI3218X_REG_JMP6HI                   = 95,

-  SI3218X_REG_JMP7LO                   = 96,

-  SI3218X_REG_JMP7HI                   = 97,

-  SI3218X_REG_PDN                      = 98,

-  SI3218X_REG_PDN_STAT                 = 99,

-  SI3218X_REG_PDN2                     = 100,

-  SI3218X_REG_PDN2_STAT                = 101,

-  SI3218X_REG_M1_OSC_LO                = 112,

-  SI3218X_REG_M1_OSC_HI                = 113,

-  SI3218X_REG_BITCNT_LO                = 114,

-  SI3218X_REG_BITCNT_HI                = 115,

-  SI3218X_REG_PCLK_MULT                = 116,

-  SI3218X_REG_RAM_DATA_16              = 117,

-  SI3218X_REG_BYPASS_ADDR_LO           = 118,

-  SI3218X_REG_BYPASS_ADDR_HI           = 119,

-  SI3218X_REG_PC_LO                    = 120,

-  SI3218X_REG_PC_HI                    = 121,

-  SI3218X_REG_PC_SHAD_LO               = 122,

-  SI3218X_REG_PC_SHAD_HI               = 123,

-  SI3218X_REG_PASS_LO                  = 124,

-  SI3218X_REG_PASS_HI                  = 125,

-  SI3218X_REG_TEST_CNTL                = 126,

-  SI3218X_REG_TEST_MODE                = 127,

-};

-

-/*

-** SI3218X_RAM

-*/

-enum SI3218X_RAM

-{

-  SI3218X_RAM_IRNGNG_SENSE             = 0,

-  SI3218X_RAM_MADC_VTIPC               = 1,

-  SI3218X_RAM_MADC_VRINGC              = 2,

-  SI3218X_RAM_MADC_VBAT                = 3,

-  SI3218X_RAM_MADC_VLONG               = 4,

-  SI3218X_RAM_UNUSED5                  = 5,

-  SI3218X_RAM_MADC_VDC                 = 6,

-  SI3218X_RAM_MADC_ILONG               = 7,

-  SI3218X_RAM_MADC_ITIP                = 8,

-  SI3218X_RAM_MADC_IRING               = 9,

-  SI3218X_RAM_MADC_ILOOP               = 10,

-  SI3218X_RAM_VDIFF_SENSE              = 11,

-  SI3218X_RAM_VTIP                     = 12,

-  SI3218X_RAM_VRING                    = 13,

-  SI3218X_RAM_P_Q1_D                   = 14,

-  SI3218X_RAM_INIT_GUESS               = 15,

-  SI3218X_RAM_Y1                       = 16,

-  SI3218X_RAM_Y2                       = 17,

-  SI3218X_RAM_Y3                       = 18,

-  SI3218X_RAM_UNUSED19                 = 19,

-  SI3218X_RAM_P_Q1                     = 20,

-  SI3218X_RAM_DIAG_EX1                 = 21,

-  SI3218X_RAM_DIAG_EX2                 = 22,

-  SI3218X_RAM_DIAG_LPF_MADC            = 23,

-  SI3218X_RAM_DIAG_DMM_I               = 24,

-  SI3218X_RAM_DIAG_DMM_V               = 25,

-  SI3218X_RAM_OSC1FREQ                 = 26,

-  SI3218X_RAM_OSC1AMP                  = 27,

-  SI3218X_RAM_OSC1PHAS                 = 28,

-  SI3218X_RAM_OSC2FREQ                 = 29,

-  SI3218X_RAM_OSC2AMP                  = 30,

-  SI3218X_RAM_OSC2PHAS                 = 31,

-  SI3218X_RAM_TESTB0_1                 = 32,

-  SI3218X_RAM_TESTB1_1                 = 33,

-  SI3218X_RAM_TESTB2_1                 = 34,

-  SI3218X_RAM_TESTA1_1                 = 35,

-  SI3218X_RAM_TESTA2_1                 = 36,

-  SI3218X_RAM_TESTB0_2                 = 37,

-  SI3218X_RAM_TESTB1_2                 = 38,

-  SI3218X_RAM_TESTB2_2                 = 39,

-  SI3218X_RAM_TESTA1_2                 = 40,

-  SI3218X_RAM_TESTA2_2                 = 41,

-  SI3218X_RAM_TESTB0_3                 = 42,

-  SI3218X_RAM_TESTB1_3                 = 43,

-  SI3218X_RAM_TESTB2_3                 = 44,

-  SI3218X_RAM_TESTA1_3                 = 45,

-  SI3218X_RAM_TESTA2_3                 = 46,

-  SI3218X_RAM_TESTPKO                  = 47,

-  SI3218X_RAM_TESTABO                  = 48,

-  SI3218X_RAM_TESTWLN                  = 49,

-  SI3218X_RAM_TESTAVBW                 = 50,

-  SI3218X_RAM_TESTPKFL                 = 51,

-  SI3218X_RAM_TESTAVFL                 = 52,

-  SI3218X_RAM_TESTPKTH                 = 53,

-  SI3218X_RAM_TESTAVTH                 = 54,

-  SI3218X_RAM_DAC_IN_SYNC1             = 55,

-  SI3218X_RAM_BYPASS_REG               = 56,

-  SI3218X_RAM_LCRMASK_CNT              = 57,

-  SI3218X_RAM_DAC_IN_SYNC              = 58,

-  SI3218X_RAM_TEMP                     = 59,

-  SI3218X_RAM_TEMP_ISR                 = 60,

-  SI3218X_RAM_P_Q2                     = 61,

-  SI3218X_RAM_P_Q3                     = 62,

-  SI3218X_RAM_P_Q4                     = 63,

-  SI3218X_RAM_P_Q5                     = 64,

-  SI3218X_RAM_P_Q6                     = 65,

-  SI3218X_RAM_ILOOP_FILT               = 66,

-  SI3218X_RAM_ILONG_FILT               = 67,

-  SI3218X_RAM_VBAT_FILT                = 68,

-  SI3218X_RAM_VDIFF_FILT               = 69,

-  SI3218X_RAM_VCM_FILT                 = 70,

-  SI3218X_RAM_VBAT_CNT                 = 71,

-  SI3218X_RAM_V_VLIM_SCALED            = 72,

-  SI3218X_RAM_V_VLIM_TRACK             = 73,

-  SI3218X_RAM_V_VLIM_MODFEED           = 74,

-  SI3218X_RAM_DIAG_P_OUT               = 75,

-  SI3218X_RAM_DIAG_COUNT               = 76,

-  SI3218X_RAM_ROW0_MAG                 = 77,

-  SI3218X_RAM_ROW1_MAG                 = 78,

-  SI3218X_RAM_ROW2_MAG                 = 79,

-  SI3218X_RAM_ROW3_MAG                 = 80,

-  SI3218X_RAM_COL0_MAG                 = 81,

-  SI3218X_RAM_COL1_MAG                 = 82,

-  SI3218X_RAM_COL2_MAG                 = 83,

-  SI3218X_RAM_COL3_MAG                 = 84,

-  SI3218X_RAM_ROW0_2ND_Y1              = 85,

-  SI3218X_RAM_ROW1_2ND_Y1              = 86,

-  SI3218X_RAM_ROW2_2ND_Y1              = 87,

-  SI3218X_RAM_ROW3_2ND_Y1              = 88,

-  SI3218X_RAM_COL0_2ND_Y1              = 89,

-  SI3218X_RAM_COL1_2ND_Y1              = 90,

-  SI3218X_RAM_COL2_2ND_Y1              = 91,

-  SI3218X_RAM_COL3_2ND_Y1              = 92,

-  SI3218X_RAM_ROW0_2ND_Y2              = 93,

-  SI3218X_RAM_ROW1_2ND_Y2              = 94,

-  SI3218X_RAM_ROW2_2ND_Y2              = 95,

-  SI3218X_RAM_ROW3_2ND_Y2              = 96,

-  SI3218X_RAM_COL0_2ND_Y2              = 97,

-  SI3218X_RAM_COL1_2ND_Y2              = 98,

-  SI3218X_RAM_COL2_2ND_Y2              = 99,

-  SI3218X_RAM_COL3_2ND_Y2              = 100,

-  SI3218X_RAM_DTMF_IN                  = 101,

-  SI3218X_RAM_DTMFDTF_D2_1             = 102,

-  SI3218X_RAM_DTMFDTF_D1_1             = 103,

-  SI3218X_RAM_DTMFDTF_OUT_1            = 104,

-  SI3218X_RAM_DTMFDTF_D2_2             = 105,

-  SI3218X_RAM_DTMFDTF_D1_2             = 106,

-  SI3218X_RAM_DTMFDTF_OUT_2            = 107,

-  SI3218X_RAM_DTMFDTF_D2_3             = 108,

-  SI3218X_RAM_DTMFDTF_D1_3             = 109,

-  SI3218X_RAM_DTMFDTF_OUT_3            = 110,

-  SI3218X_RAM_DTMFDTF_OUT              = 111,

-  SI3218X_RAM_DTMFLPF_D2_1             = 112,

-  SI3218X_RAM_DTMFLPF_D1_1             = 113,

-  SI3218X_RAM_DTMFLPF_OUT_1            = 114,

-  SI3218X_RAM_DTMFLPF_D2_2             = 115,

-  SI3218X_RAM_DTMFLPF_D1_2             = 116,

-  SI3218X_RAM_DTMFLPF_OUT_2            = 117,

-  SI3218X_RAM_DTMF_ROW                 = 118,

-  SI3218X_RAM_DTMFHPF_D2_1             = 119,

-  SI3218X_RAM_DTMFHPF_D1_1             = 120,

-  SI3218X_RAM_DTMFHPF_OUT_1            = 121,

-  SI3218X_RAM_DTMFHPF_D2_2             = 122,

-  SI3218X_RAM_DTMFHPF_D1_2             = 123,

-  SI3218X_RAM_DTMFHPF_OUT_2            = 124,

-  SI3218X_RAM_DTMF_COL                 = 125,

-  SI3218X_RAM_ROW_POWER                = 126,

-  SI3218X_RAM_COL_POWER                = 127,

-  SI3218X_RAM_GP_TIMER                 = 128,

-  SI3218X_RAM_SPR_INTERP_DIF           = 129,

-  SI3218X_RAM_SPR_INTERP_DIF_OUT       = 130,

-  SI3218X_RAM_SPR_INTERP_INT           = 131,

-  SI3218X_RAM_SPR_CNT                  = 132,

-  SI3218X_RAM_ROW0_Y1                  = 133,

-  SI3218X_RAM_ROW0_Y2                  = 134,

-  SI3218X_RAM_ROW1_Y1                  = 135,

-  SI3218X_RAM_ROW1_Y2                  = 136,

-  SI3218X_RAM_ROW2_Y1                  = 137,

-  SI3218X_RAM_ROW2_Y2                  = 138,

-  SI3218X_RAM_ROW3_Y1                  = 139,

-  SI3218X_RAM_ROW3_Y2                  = 140,

-  SI3218X_RAM_COL0_Y1                  = 141,

-  SI3218X_RAM_COL0_Y2                  = 142,

-  SI3218X_RAM_COL1_Y1                  = 143,

-  SI3218X_RAM_COL1_Y2                  = 144,

-  SI3218X_RAM_COL2_Y1                  = 145,

-  SI3218X_RAM_COL2_Y2                  = 146,

-  SI3218X_RAM_COL3_Y1                  = 147,

-  SI3218X_RAM_COL3_Y2                  = 148,

-  SI3218X_RAM_ROWMAX_MAG               = 149,

-  SI3218X_RAM_COLMAX_MAG               = 150,

-  SI3218X_RAM_ROW0_2ND_MAG             = 151,

-  SI3218X_RAM_COL0_2ND_MAG             = 152,

-  SI3218X_RAM_ROW_THR                  = 153,

-  SI3218X_RAM_COL_THR                  = 154,

-  SI3218X_RAM_OSC1_Y                   = 155,

-  SI3218X_RAM_OSC2_Y                   = 156,

-  SI3218X_RAM_OSC1_X                   = 157,

-  SI3218X_RAM_OSC1_COEFF               = 158,

-  SI3218X_RAM_OSC2_X                   = 159,

-  SI3218X_RAM_OSC2_COEFF               = 160,

-  SI3218X_RAM_RXACIIR_D2_1             = 161,

-  SI3218X_RAM_RXACIIR_OUT_1            = 162,

-  SI3218X_RAM_RXACIIR_D2_2             = 163,

-  SI3218X_RAM_RXACIIR_D1_2             = 164,

-  SI3218X_RAM_RXACIIR_OUT_2            = 165,

-  SI3218X_RAM_RXACIIR_D2_3             = 166,

-  SI3218X_RAM_RXACIIR_D1_3             = 167,

-  SI3218X_RAM_RXACIIR_OUT              = 168,

-  SI3218X_RAM_RXACIIR_OUT_3            = 169,

-  SI3218X_RAM_TXACCOMB_D1              = 170,

-  SI3218X_RAM_TXACCOMB_D2              = 171,

-  SI3218X_RAM_TXACCOMB_D3              = 172,

-  SI3218X_RAM_TXACSINC_OUT             = 173,

-  SI3218X_RAM_TXACHPF_D1_2             = 174,

-  SI3218X_RAM_TXACHPF_D2_1             = 175,

-  SI3218X_RAM_TXACHPF_D2_2             = 176,

-  SI3218X_RAM_TXACHPF_OUT              = 177,

-  SI3218X_RAM_TXACHPF_OUT_1            = 178,

-  SI3218X_RAM_TXACHPF_OUT_2            = 179,

-  SI3218X_RAM_TXACIIR_D2_1             = 180,

-  SI3218X_RAM_TXACIIR_OUT_1            = 181,

-  SI3218X_RAM_TXACIIR_D2_2             = 182,

-  SI3218X_RAM_TXACIIR_D1_2             = 183,

-  SI3218X_RAM_TXACIIR_OUT_2            = 184,

-  SI3218X_RAM_TXACIIR_D2_3             = 185,

-  SI3218X_RAM_TXACIIR_D1_3             = 186,

-  SI3218X_RAM_TXACIIR_OUT_3            = 187,

-  SI3218X_RAM_TXACIIR_OUT              = 188,

-  SI3218X_RAM_ECIIR_D1                 = 189,

-  SI3218X_RAM_ECIIR_D2                 = 190,

-  SI3218X_RAM_EC_DELAY1                = 191,

-  SI3218X_RAM_EC_DELAY2                = 192,

-  SI3218X_RAM_EC_DELAY3                = 193,

-  SI3218X_RAM_EC_DELAY4                = 194,

-  SI3218X_RAM_EC_DELAY5                = 195,

-  SI3218X_RAM_EC_DELAY6                = 196,

-  SI3218X_RAM_EC_DELAY7                = 197,

-  SI3218X_RAM_EC_DELAY8                = 198,

-  SI3218X_RAM_EC_DELAY9                = 199,

-  SI3218X_RAM_EC_DELAY10               = 200,

-  SI3218X_RAM_EC_DELAY11               = 201,

-  SI3218X_RAM_ECHO_EST                 = 202,

-  SI3218X_RAM_EC_OUT                   = 203,

-  SI3218X_RAM_TESTFILT_OUT_1           = 204,

-  SI3218X_RAM_TESTFILT_D1_1            = 205,

-  SI3218X_RAM_TESTFILT_D2_1            = 206,

-  SI3218X_RAM_TESTFILT_OUT_2           = 207,

-  SI3218X_RAM_TESTFILT_D1_2            = 208,

-  SI3218X_RAM_TESTFILT_D2_2            = 209,

-  SI3218X_RAM_TESTFILT_OUT_3           = 210,

-  SI3218X_RAM_TESTFILT_D1_3            = 211,

-  SI3218X_RAM_TESTFILT_D2_3            = 212,

-  SI3218X_RAM_TESTFILT_PEAK            = 213,

-  SI3218X_RAM_TESTFILT_ABS             = 214,

-  SI3218X_RAM_TESTFILT_MEANACC         = 215,

-  SI3218X_RAM_TESTFILT_COUNT           = 216,

-  SI3218X_RAM_TESTFILT_NO_OFFSET       = 217,

-  SI3218X_RAM_RING_X                   = 218,

-  SI3218X_RAM_RING_Y                   = 219,

-  SI3218X_RAM_RING_INT                 = 220,

-  SI3218X_RAM_RING_Y_D1                = 221,

-  SI3218X_RAM_RING_DIFF                = 222,

-  SI3218X_RAM_RING_DELTA               = 223,

-  SI3218X_RAM_WTCHDOG_CNT              = 224,

-  SI3218X_RAM_RING_WAVE                = 225,

-  SI3218X_RAM_UNUSED226                = 226,

-  SI3218X_RAM_ONEKHZ_COUNT             = 227,

-  SI3218X_RAM_TX2100_Y1                = 228,

-  SI3218X_RAM_TX2100_Y2                = 229,

-  SI3218X_RAM_TX2100_MAG               = 230,

-  SI3218X_RAM_RX2100_Y1                = 231,

-  SI3218X_RAM_RX2100_Y2                = 232,

-  SI3218X_RAM_RX2100_MAG               = 233,

-  SI3218X_RAM_TX2100_POWER             = 234,

-  SI3218X_RAM_RX2100_POWER             = 235,

-  SI3218X_RAM_TX2100_IN                = 236,

-  SI3218X_RAM_RX2100_IN                = 237,

-  SI3218X_RAM_RINGTRIP_COUNT           = 238,

-  SI3218X_RAM_RINGTRIP_DC1             = 239,

-  SI3218X_RAM_RINGTRIP_DC2             = 240,

-  SI3218X_RAM_RINGTRIP_AC1             = 241,

-  SI3218X_RAM_RINGTRIP_AC2             = 242,

-  SI3218X_RAM_RINGTRIP_AC_COUNT        = 243,

-  SI3218X_RAM_RINGTRIP_DC_COUNT        = 244,

-  SI3218X_RAM_RINGTRIP_AC_RESULT       = 245,

-  SI3218X_RAM_RINGTRIP_DC_RESULT       = 246,

-  SI3218X_RAM_RINGTRIP_ABS             = 247,

-  SI3218X_RAM_TXACEQ_OUT               = 248,

-  SI3218X_RAM_LCR_DBI_CNT              = 249,

-  SI3218X_RAM_BAT_DBI_CNT              = 250,

-  SI3218X_RAM_LONG_DBI_CNT             = 251,

-  SI3218X_RAM_TXACEQ_DELAY3            = 252,

-  SI3218X_RAM_TXACEQ_DELAY2            = 253,

-  SI3218X_RAM_TXACEQ_DELAY1            = 254,

-  SI3218X_RAM_RXACEQ_DELAY3            = 255,

-  SI3218X_RAM_RXACEQ_DELAY2            = 256,

-  SI3218X_RAM_RXACEQ_DELAY1            = 257,

-  SI3218X_RAM_RXACEQ_IN                = 258,

-  SI3218X_RAM_TXDCCOMB_D1              = 259,

-  SI3218X_RAM_TXDCCOMB_D2              = 260,

-  SI3218X_RAM_TXDCSINC_OUT             = 261,

-  SI3218X_RAM_RXACDIFF_D1              = 262,

-  SI3218X_RAM_DC_NOTCH_1               = 263,

-  SI3218X_RAM_DC_NOTCH_2               = 264,

-  SI3218X_RAM_DC_NOTCH_OUT             = 265,

-  SI3218X_RAM_DC_NOTCH_SCALED          = 266,

-  SI3218X_RAM_V_FEED_IN                = 267,

-  SI3218X_RAM_I_TAR                    = 268,

-  SI3218X_RAM_CONST_VLIM               = 269,

-  SI3218X_RAM_UNITY                    = 270,

-  SI3218X_RAM_TXACNOTCH_1              = 271,

-  SI3218X_RAM_TXACNOTCH_2              = 272,

-  SI3218X_RAM_TXACNOTCH_OUT            = 273,

-  SI3218X_RAM_ZSYNTH_1                 = 274,

-  SI3218X_RAM_ZSYNTH_2                 = 275,

-  SI3218X_RAM_ZSYNTH_OUT_1             = 276,

-  SI3218X_RAM_TXACD2_1_0               = 277,

-  SI3218X_RAM_TXACD2_1_1               = 278,

-  SI3218X_RAM_TXACD2_1_2               = 279,

-  SI3218X_RAM_TXACD2_1_3               = 280,

-  SI3218X_RAM_TXACD2_1_4               = 281,

-  SI3218X_RAM_TXACD2_1_5               = 282,

-  SI3218X_RAM_TXACD2_1_OUT             = 283,

-  SI3218X_RAM_TXACD2_2_0               = 284,

-  SI3218X_RAM_TXACD2_2_1               = 285,

-  SI3218X_RAM_TXACD2_2_2               = 286,

-  SI3218X_RAM_TXACD2_2_3               = 287,

-  SI3218X_RAM_TXACD2_2_4               = 288,

-  SI3218X_RAM_TXACD2_2_5               = 289,

-  SI3218X_RAM_TXACD2_2_OUT             = 290,

-  SI3218X_RAM_TXACD2_3_0               = 291,

-  SI3218X_RAM_TXACD2_3_1               = 292,

-  SI3218X_RAM_TXACD2_3_2               = 293,

-  SI3218X_RAM_TXACD2_3_3               = 294,

-  SI3218X_RAM_TXACD2_3_4               = 295,

-  SI3218X_RAM_TXACD2_3_5               = 296,

-  SI3218X_RAM_TXACD2_3_OUT             = 297,

-  SI3218X_RAM_RXACI2_1_1               = 298,

-  SI3218X_RAM_RXACI2_1_2               = 299,

-  SI3218X_RAM_RXACI2_1_3               = 300,

-  SI3218X_RAM_RXACI2_1_4               = 301,

-  SI3218X_RAM_RXACI2_1_OUT             = 302,

-  SI3218X_RAM_RXACI2_2_1               = 303,

-  SI3218X_RAM_RXACI2_2_2               = 304,

-  SI3218X_RAM_RXACI2_2_3               = 305,

-  SI3218X_RAM_RXACI2_2_4               = 306,

-  SI3218X_RAM_RXACI2_2_OUT             = 307,

-  SI3218X_RAM_RXACI2_3_1               = 308,

-  SI3218X_RAM_RXACI2_3_2               = 309,

-  SI3218X_RAM_RXACI2_3_3               = 310,

-  SI3218X_RAM_RXACI2_3_4               = 311,

-  SI3218X_RAM_RXACI2_3_OUT             = 312,

-  SI3218X_RAM_TXACCOMP1                = 313,

-  SI3218X_RAM_TXACCOMP_OUT             = 314,

-  SI3218X_RAM_RXACCOMP1                = 315,

-  SI3218X_RAM_RXACCOMP_OUT             = 316,

-  SI3218X_RAM_RXACHPF_D1_2             = 317,

-  SI3218X_RAM_RXACHPF_D2_1             = 318,

-  SI3218X_RAM_RXACHPF_D2_2             = 319,

-  SI3218X_RAM_RXACHPF_OUT              = 320,

-  SI3218X_RAM_RXACHPF_OUT_1            = 321,

-  SI3218X_RAM_RXACHPF_OUT_2            = 322,

-  SI3218X_RAM_RXACEQ_OUT               = 323,

-  SI3218X_RAM_METER_I_1                = 324,

-  SI3218X_RAM_METER_I_OUT              = 325,

-  SI3218X_RAM_METER_LPF_1              = 326,

-  SI3218X_RAM_METER_LPF_2              = 327,

-  SI3218X_RAM_METER_LPF_OUT            = 328,

-  SI3218X_RAM_METER_BP_1               = 329,

-  SI3218X_RAM_METER_BP_2               = 330,

-  SI3218X_RAM_METER_BP_OUT             = 331,

-  SI3218X_RAM_METER_SRC_OUT            = 332,

-  SI3218X_RAM_UNUSED333                = 333,

-  SI3218X_RAM_UNUSED334                = 334,

-  SI3218X_RAM_RING_LPF_1               = 335,

-  SI3218X_RAM_RING_LPF_2               = 336,

-  SI3218X_RAM_RING_LPF_OUT             = 337,

-  SI3218X_RAM_RING_INTERP_DIFF         = 338,

-  SI3218X_RAM_RING_INTERP_DIFF_OUT     = 339,

-  SI3218X_RAM_RING_INTERP_INT          = 340,

-  SI3218X_RAM_RING_INTERP_INT_OUT      = 341,

-  SI3218X_RAM_V_ILIM_TRACK             = 342,

-  SI3218X_RAM_V_RFEED_TRACK            = 343,

-  SI3218X_RAM_LF_SPEEDUP_CNT           = 344,

-  SI3218X_RAM_DC_SPEEDUP_CNT           = 345,

-  SI3218X_RAM_AC_SPEEDUP_CNT           = 346,

-  SI3218X_RAM_LCR_SPEEDUP_CNT          = 347,

-  SI3218X_RAM_CM_SPEEDUP_CNT           = 348,

-  SI3218X_RAM_DC_SPEEDUP_MASK          = 349,

-  SI3218X_RAM_ZSYNTH_IN                = 350,

-  SI3218X_RAM_I_TAR_SAVE               = 351,

-  SI3218X_RAM_UNUSED352                = 352,

-  SI3218X_RAM_UNUSED353                = 353,

-  SI3218X_RAM_COUNTER_VTR              = 354,

-  SI3218X_RAM_I_RING_AVG               = 355,

-  SI3218X_RAM_COUNTER_IRING            = 356,

-  SI3218X_RAM_COMP_RATIO               = 357,

-  SI3218X_RAM_MADC_VBAT_DIV2           = 358,

-  SI3218X_RAM_VDIFF_PK_T               = 359,

-  SI3218X_RAM_PEAK_CNT                 = 360,

-  SI3218X_RAM_CM_DBI_CNT               = 361,

-  SI3218X_RAM_VCM_LAST                 = 362,

-  SI3218X_RAM_VBATL_SENSE              = 363,

-  SI3218X_RAM_VBATH_SENSE              = 364,

-  SI3218X_RAM_VBATR_SENSE              = 365,

-  SI3218X_RAM_BAT_SETTLE_CNT           = 366,

-  SI3218X_RAM_VBAT_TGT                 = 367,

-  SI3218X_RAM_VBAT_REQ                 = 368,

-  SI3218X_RAM_VCM_HIRES                = 369,

-  SI3218X_RAM_VCM_LORES                = 370,

-  SI3218X_RAM_ILOOP1                   = 371,

-  SI3218X_RAM_ILONG2                   = 372,

-  SI3218X_RAM_ITIP1                    = 373,

-  SI3218X_RAM_IRING1                   = 374,

-  SI3218X_RAM_CAL_TEMP1                = 375,

-  SI3218X_RAM_CAL_TEMP2                = 376,

-  SI3218X_RAM_CAL_TEMP3                = 377,

-  SI3218X_RAM_CAL_TEMP4                = 378,

-  SI3218X_RAM_CAL_TEMP5                = 379,

-  SI3218X_RAM_CAL_TEMP6                = 380,

-  SI3218X_RAM_CAL_TEMP7                = 381,

-  SI3218X_RAM_CMRR_DIVISOR             = 382,

-  SI3218X_RAM_CMRR_REMAINDER           = 383,

-  SI3218X_RAM_CMRR_Q_PTR               = 384,

-  SI3218X_RAM_I_SOURCE1                = 385,

-  SI3218X_RAM_I_SOURCE2                = 386,

-  SI3218X_RAM_VTR1                     = 387,

-  SI3218X_RAM_VTR2                     = 388,

-  SI3218X_RAM_STOP_TIMER1              = 389,

-  SI3218X_RAM_STOP_TIMER2              = 390,

-  SI3218X_RAM_UNUSED391                = 391,

-  SI3218X_RAM_UNUSED392                = 392,

-  SI3218X_RAM_CAL_ONHK_Z               = 393,

-  SI3218X_RAM_CAL_LB_SETTLE            = 394,

-  SI3218X_RAM_CAL_DECLPF_V0            = 395,

-  SI3218X_RAM_CAL_DECLPF_V1            = 396,

-  SI3218X_RAM_CAL_DECLPF_V2            = 397,

-  SI3218X_RAM_CAL_GOERTZEL_V0          = 398,

-  SI3218X_RAM_CAL_GOERTZEL_V1          = 399,

-  SI3218X_RAM_CAL_DECLPF_Y             = 400,

-  SI3218X_RAM_CAL_GOERTZEL_Y           = 401,

-  SI3218X_RAM_P_HVIC                   = 402,

-  SI3218X_RAM_VBATL_MIRROR             = 403,

-  SI3218X_RAM_VBATH_MIRROR             = 404,

-  SI3218X_RAM_VBATR_MIRROR             = 405,

-  SI3218X_RAM_DIAG_EX1_OUT             = 406,

-  SI3218X_RAM_DIAG_EX2_OUT             = 407,

-  SI3218X_RAM_DIAG_DMM_V_OUT           = 408,

-  SI3218X_RAM_DIAG_DMM_I_OUT           = 409,

-  SI3218X_RAM_DIAG_P                   = 410,

-  SI3218X_RAM_DIAG_LPF_V               = 411,

-  SI3218X_RAM_DIAG_LPF_I               = 412,

-  SI3218X_RAM_DIAG_TONE_FLAG           = 413,

-  SI3218X_RAM_ILOOP1_LAST              = 414,

-  SI3218X_RAM_RING_ENTRY_VOC           = 415,

-  SI3218X_RAM_UNUSED416                = 416,

-  SI3218X_RAM_OSC1_X_SAVE              = 417,

-  SI3218X_RAM_EZSYNTH_1                = 418,

-  SI3218X_RAM_EZSYNTH_2                = 419,

-  SI3218X_RAM_ZSYNTH_OUT               = 420,

-  SI3218X_RAM_UNUSED421                = 421,

-  SI3218X_RAM_CAL_SUBSTATE             = 422,

-  SI3218X_RAM_DIAG_EX1_DC_OUT          = 423,

-  SI3218X_RAM_DIAG_EX1_DC              = 424,

-  SI3218X_RAM_EZSYNTH_B1               = 425,

-  SI3218X_RAM_EZSYNTH_B2               = 426,

-  SI3218X_RAM_EZSYNTH_A1               = 427,

-  SI3218X_RAM_EZSYNTH_A2               = 428,

-  SI3218X_RAM_ILOOP1_FILT              = 429,

-  SI3218X_RAM_AC_PU_DELTA1_CNT         = 430,

-  SI3218X_RAM_AC_PU_DELTA2_CNT         = 431,

-  SI3218X_RAM_UNUSED432                = 432,

-  SI3218X_RAM_UNUSED433                = 433,

-  SI3218X_RAM_UNUSED434                = 434,

-  SI3218X_RAM_AC_DAC_GAIN_SAVE         = 435,

-  SI3218X_RAM_RING_FLUSH_CNT           = 436,

-  SI3218X_RAM_UNUSED437                = 437,

-  SI3218X_RAM_DIAG_VAR_OUT             = 438,

-  SI3218X_RAM_I_VBAT                   = 439,

-  SI3218X_RAM_UNUSED440                = 440,

-  SI3218X_RAM_CALTMP_LOOPCNT           = 441,

-  SI3218X_RAM_CALTMP_LOOPINC           = 442,

-  SI3218X_RAM_UNUSED443                = 443,

-  SI3218X_RAM_CALTMP_CODEINC           = 444,

-  SI3218X_RAM_CALTMP_TAUINC            = 445,

-  SI3218X_RAM_CALTMP_TAU               = 446,

-  SI3218X_RAM_CAL_TEMP8                = 447,

-  SI3218X_RAM_PATCHID                  = 448,

-  SI3218X_RAM_UNUSED449                = 449,

-  SI3218X_RAM_UNUSED450                = 450,

-  SI3218X_RAM_UNUSED451                = 451,

-  SI3218X_RAM_CAL_LB_OFFSET_FWD        = 452,

-  SI3218X_RAM_CAL_LB_OFFSET_RVS        = 453,

-  SI3218X_RAM_COUNT_SPEEDUP            = 454,

-  SI3218X_RAM_SWEEP_COUNT              = 455,

-  SI3218X_RAM_AMP_RAMP                 = 456,

-  SI3218X_RAM_DIAG_LPF_MADC_D          = 457,

-  SI3218X_RAM_DIAG_HPF_MADC            = 458,

-  SI3218X_RAM_UNUSED459                = 459,

-  SI3218X_RAM_TXDEC_OUT                = 460,

-  SI3218X_RAM_TXDEC_D1                 = 461,

-  SI3218X_RAM_TXDEC_D2                 = 462,

-  SI3218X_RAM_RXDEC_D1                 = 463,

-  SI3218X_RAM_RXDEC_D2                 = 464,

-  SI3218X_RAM_OSCINT1_D2_1             = 465,

-  SI3218X_RAM_OSCINT1_D1_1             = 466,

-  SI3218X_RAM_OSCINT1_OUT_1            = 467,

-  SI3218X_RAM_OSCINT1_D2_2             = 468,

-  SI3218X_RAM_OSCINT1_D1_2             = 469,

-  SI3218X_RAM_OSCINT1_OUT              = 470,

-  SI3218X_RAM_OSCINT2_D2_1             = 471,

-  SI3218X_RAM_OSCINT2_D1_1             = 472,

-  SI3218X_RAM_OSCINT2_OUT_1            = 473,

-  SI3218X_RAM_OSCINT2_D2_2             = 474,

-  SI3218X_RAM_OSCINT2_D1_2             = 475,

-  SI3218X_RAM_OSCINT2_OUT              = 476,

-  SI3218X_RAM_OSC1_Y_SAVE              = 477,

-  SI3218X_RAM_OSC2_Y_SAVE              = 478,

-  SI3218X_RAM_PWRSAVE_CNT              = 479,

-  SI3218X_RAM_VBATR_PK                 = 480,

-  SI3218X_RAM_SPEEDUP_MASK_CNT         = 481,

-  SI3218X_RAM_VCM_RING_FIXED           = 482,

-  SI3218X_RAM_DELTA_VCM                = 483,

-  SI3218X_RAM_MADC_VTIPC_DIAG_OS       = 484,

-  SI3218X_RAM_MADC_VRINGC_DIAG_OS      = 485,

-  SI3218X_RAM_MADC_VLONG_DIAG_OS       = 486,

-  SI3218X_RAM_UNUSED487                = 487,

-  SI3218X_RAM_UNUSED488                = 488,

-  SI3218X_RAM_UNUSED489                = 489,

-  SI3218X_RAM_UNUSED490                = 490,

-  SI3218X_RAM_UNUSED491                = 491,

-  SI3218X_RAM_PWRSAVE_DBI_CNT          = 492,

-  SI3218X_RAM_COMP_RATIO_SAVE          = 493,

-  SI3218X_RAM_CAL_TEMP9                = 494,

-  SI3218X_RAM_CAL_TEMP10               = 495,

-  SI3218X_RAM_DAC_OFFSET_TEMP          = 496,

-  SI3218X_RAM_CAL_DAC_CODE             = 497,

-  SI3218X_RAM_DCDAC_OFFSET             = 498,

-  SI3218X_RAM_VDIFF_COARSE             = 499,

-  SI3218X_RAM_RXACIIR_OUT_4            = 500,

-  SI3218X_RAM_CAL_TEMP11               = 501,

-  SI3218X_RAM_METER_RAMP               = 502,

-  SI3218X_RAM_METER_RAMP_DIR           = 503,

-  SI3218X_RAM_METER_ON_T               = 504,

-  SI3218X_RAM_METER_PK_DET             = 505,

-  SI3218X_RAM_METER_PK_DET_T           = 506,

-  SI3218X_RAM_THERM_CNT                = 507,

-  SI3218X_RAM_VDIFF_SENSE_DELAY        = 508,

-  SI3218X_RAM_RING_INTERP_DIFF_SYNC    = 509,

-  SI3218X_RAM_CPUMP_DEB_CNT            = 510,

-  SI3218X_RAM_UNUSED511                = 511,

-  SI3218X_RAM_MINUS_ONE                = 512,

-  SI3218X_RAM_ILOOPLPF                 = 513,

-  SI3218X_RAM_ILONGLPF                 = 514,

-  SI3218X_RAM_BATLPF                   = 515,

-  SI3218X_RAM_VDIFFLPF                 = 516,

-  SI3218X_RAM_VCMLPF                   = 517,

-  SI3218X_RAM_TXACIIR_B0_1             = 518,

-  SI3218X_RAM_TXACIIR_B1_1             = 519,

-  SI3218X_RAM_TXACIIR_A1_1             = 520,

-  SI3218X_RAM_TXACIIR_B0_2             = 521,

-  SI3218X_RAM_TXACIIR_B1_2             = 522,

-  SI3218X_RAM_TXACIIR_B2_2             = 523,

-  SI3218X_RAM_TXACIIR_A1_2             = 524,

-  SI3218X_RAM_TXACIIR_A2_2             = 525,

-  SI3218X_RAM_TXACIIR_B0_3             = 526,

-  SI3218X_RAM_TXACIIR_B1_3             = 527,

-  SI3218X_RAM_TXACIIR_B2_3             = 528,

-  SI3218X_RAM_TXACIIR_A1_3             = 529,

-  SI3218X_RAM_TXACIIR_A2_3             = 530,

-  SI3218X_RAM_TXACHPF_B0_1             = 531,

-  SI3218X_RAM_TXACHPF_B1_1             = 532,

-  SI3218X_RAM_TXACHPF_A1_1             = 533,

-  SI3218X_RAM_TXACHPF_B0_2             = 534,

-  SI3218X_RAM_TXACHPF_B1_2             = 535,

-  SI3218X_RAM_TXACHPF_B2_2             = 536,

-  SI3218X_RAM_TXACHPF_A1_2             = 537,

-  SI3218X_RAM_TXACHPF_A2_2             = 538,

-  SI3218X_RAM_TXACHPF_GAIN             = 539,

-  SI3218X_RAM_TXACEQ_C0                = 540,

-  SI3218X_RAM_TXACEQ_C1                = 541,

-  SI3218X_RAM_TXACEQ_C2                = 542,

-  SI3218X_RAM_TXACEQ_C3                = 543,

-  SI3218X_RAM_TXACGAIN                 = 544,

-  SI3218X_RAM_RXACGAIN                 = 545,

-  SI3218X_RAM_RXACEQ_C0                = 546,

-  SI3218X_RAM_RXACEQ_C1                = 547,

-  SI3218X_RAM_RXACEQ_C2                = 548,

-  SI3218X_RAM_RXACEQ_C3                = 549,

-  SI3218X_RAM_RXACIIR_B0_1             = 550,

-  SI3218X_RAM_RXACIIR_B1_1             = 551,

-  SI3218X_RAM_RXACIIR_A1_1             = 552,

-  SI3218X_RAM_RXACIIR_B0_2             = 553,

-  SI3218X_RAM_RXACIIR_B1_2             = 554,

-  SI3218X_RAM_RXACIIR_B2_2             = 555,

-  SI3218X_RAM_RXACIIR_A1_2             = 556,

-  SI3218X_RAM_RXACIIR_A2_2             = 557,

-  SI3218X_RAM_RXACIIR_B0_3             = 558,

-  SI3218X_RAM_RXACIIR_B1_3             = 559,

-  SI3218X_RAM_RXACIIR_B2_3             = 560,

-  SI3218X_RAM_RXACIIR_A1_3             = 561,

-  SI3218X_RAM_RXACIIR_A2_3             = 562,

-  SI3218X_RAM_ECFIR_C2                 = 563,

-  SI3218X_RAM_ECFIR_C3                 = 564,

-  SI3218X_RAM_ECFIR_C4                 = 565,

-  SI3218X_RAM_ECFIR_C5                 = 566,

-  SI3218X_RAM_ECFIR_C6                 = 567,

-  SI3218X_RAM_ECFIR_C7                 = 568,

-  SI3218X_RAM_ECFIR_C8                 = 569,

-  SI3218X_RAM_ECFIR_C9                 = 570,

-  SI3218X_RAM_ECIIR_B0                 = 571,

-  SI3218X_RAM_ECIIR_B1                 = 572,

-  SI3218X_RAM_ECIIR_A1                 = 573,

-  SI3218X_RAM_ECIIR_A2                 = 574,

-  SI3218X_RAM_DTMFDTF_B0_1             = 575,

-  SI3218X_RAM_DTMFDTF_B1_1             = 576,

-  SI3218X_RAM_DTMFDTF_B2_1             = 577,

-  SI3218X_RAM_DTMFDTF_A1_1             = 578,

-  SI3218X_RAM_DTMFDTF_A2_1             = 579,

-  SI3218X_RAM_DTMFDTF_B0_2             = 580,

-  SI3218X_RAM_DTMFDTF_B1_2             = 581,

-  SI3218X_RAM_DTMFDTF_B2_2             = 582,

-  SI3218X_RAM_DTMFDTF_A1_2             = 583,

-  SI3218X_RAM_DTMFDTF_A2_2             = 584,

-  SI3218X_RAM_DTMFDTF_B0_3             = 585,

-  SI3218X_RAM_DTMFDTF_B1_3             = 586,

-  SI3218X_RAM_DTMFDTF_B2_3             = 587,

-  SI3218X_RAM_DTMFDTF_A1_3             = 588,

-  SI3218X_RAM_DTMFDTF_A2_3             = 589,

-  SI3218X_RAM_DTMFDTF_GAIN             = 590,

-  SI3218X_RAM_DTMFLPF_B0_1             = 591,

-  SI3218X_RAM_DTMFLPF_B1_1             = 592,

-  SI3218X_RAM_DTMFLPF_B2_1             = 593,

-  SI3218X_RAM_DTMFLPF_A1_1             = 594,

-  SI3218X_RAM_DTMFLPF_A2_1             = 595,

-  SI3218X_RAM_DTMFLPF_B0_2             = 596,

-  SI3218X_RAM_DTMFLPF_B1_2             = 597,

-  SI3218X_RAM_DTMFLPF_B2_2             = 598,

-  SI3218X_RAM_DTMFLPF_A1_2             = 599,

-  SI3218X_RAM_DTMFLPF_A2_2             = 600,

-  SI3218X_RAM_DTMFLPF_GAIN             = 601,

-  SI3218X_RAM_DTMFHPF_B0_1             = 602,

-  SI3218X_RAM_DTMFHPF_B1_1             = 603,

-  SI3218X_RAM_DTMFHPF_B2_1             = 604,

-  SI3218X_RAM_DTMFHPF_A1_1             = 605,

-  SI3218X_RAM_DTMFHPF_A2_1             = 606,

-  SI3218X_RAM_DTMFHPF_B0_2             = 607,

-  SI3218X_RAM_DTMFHPF_B1_2             = 608,

-  SI3218X_RAM_DTMFHPF_B2_2             = 609,

-  SI3218X_RAM_DTMFHPF_A1_2             = 610,

-  SI3218X_RAM_DTMFHPF_A2_2             = 611,

-  SI3218X_RAM_DTMFHPF_GAIN             = 612,

-  SI3218X_RAM_POWER_GAIN               = 613,

-  SI3218X_RAM_GOERTZEL_GAIN            = 614,

-  SI3218X_RAM_MODEM_GAIN               = 615,

-  SI3218X_RAM_HOTBIT1                  = 616,

-  SI3218X_RAM_HOTBIT0                  = 617,

-  SI3218X_RAM_ROW0_C1                  = 618,

-  SI3218X_RAM_ROW1_C1                  = 619,

-  SI3218X_RAM_ROW2_C1                  = 620,

-  SI3218X_RAM_ROW3_C1                  = 621,

-  SI3218X_RAM_COL0_C1                  = 622,

-  SI3218X_RAM_COL1_C1                  = 623,

-  SI3218X_RAM_COL2_C1                  = 624,

-  SI3218X_RAM_COL3_C1                  = 625,

-  SI3218X_RAM_ROW0_C2                  = 626,

-  SI3218X_RAM_ROW1_C2                  = 627,

-  SI3218X_RAM_ROW2_C2                  = 628,

-  SI3218X_RAM_ROW3_C2                  = 629,

-  SI3218X_RAM_COL0_C2                  = 630,

-  SI3218X_RAM_COL1_C2                  = 631,

-  SI3218X_RAM_COL2_C2                  = 632,

-  SI3218X_RAM_COL3_C2                  = 633,

-  SI3218X_RAM_SLOPE_VLIM               = 634,

-  SI3218X_RAM_SLOPE_RFEED              = 635,

-  SI3218X_RAM_SLOPE_ILIM               = 636,

-  SI3218X_RAM_SLOPE_RING               = 637,

-  SI3218X_RAM_SLOPE_DELTA1             = 638,

-  SI3218X_RAM_SLOPE_DELTA2             = 639,

-  SI3218X_RAM_V_VLIM                   = 640,

-  SI3218X_RAM_V_RFEED                  = 641,

-  SI3218X_RAM_V_ILIM                   = 642,

-  SI3218X_RAM_CONST_RFEED              = 643,

-  SI3218X_RAM_CONST_ILIM               = 644,

-  SI3218X_RAM_I_VLIM                   = 645,

-  SI3218X_RAM_DC_DAC_GAIN              = 646,

-  SI3218X_RAM_VDIFF_TH                 = 647,

-  SI3218X_RAM_TXDEC_B0                 = 648,

-  SI3218X_RAM_TXDEC_B1                 = 649,

-  SI3218X_RAM_TXDEC_B2                 = 650,

-  SI3218X_RAM_TXDEC_A1                 = 651,

-  SI3218X_RAM_TXDEC_A2                 = 652,

-  SI3218X_RAM_ZSYNTH_B0                = 653,

-  SI3218X_RAM_ZSYNTH_B1                = 654,

-  SI3218X_RAM_ZSYNTH_B2                = 655,

-  SI3218X_RAM_ZSYNTH_A1                = 656,

-  SI3218X_RAM_ZSYNTH_A2                = 657,

-  SI3218X_RAM_RXACHPF_B0_1             = 658,

-  SI3218X_RAM_RXACHPF_B1_1             = 659,

-  SI3218X_RAM_RXACHPF_A1_1             = 660,

-  SI3218X_RAM_RXACHPF_B0_2             = 661,

-  SI3218X_RAM_RXACHPF_B1_2             = 662,

-  SI3218X_RAM_RXACHPF_B2_2             = 663,

-  SI3218X_RAM_RXACHPF_A1_2             = 664,

-  SI3218X_RAM_RXACHPF_A2_2             = 665,

-  SI3218X_RAM_RXACHPF_GAIN             = 666,

-  SI3218X_RAM_MASK7LSB                 = 667,

-  SI3218X_RAM_RXDEC_B0                 = 668,

-  SI3218X_RAM_RXDEC_B1                 = 669,

-  SI3218X_RAM_RXDEC_B2                 = 670,

-  SI3218X_RAM_RXDEC_A1                 = 671,

-  SI3218X_RAM_RXDEC_A2                 = 672,

-  SI3218X_RAM_OSCINT1_B0_1             = 673,

-  SI3218X_RAM_OSCINT1_B1_1             = 674,

-  SI3218X_RAM_OSCINT1_B2_1             = 675,

-  SI3218X_RAM_OSCINT1_A1_1             = 676,

-  SI3218X_RAM_OSCINT1_A2_1             = 677,

-  SI3218X_RAM_OSCINT1_B0_2             = 678,

-  SI3218X_RAM_OSCINT1_B1_2             = 679,

-  SI3218X_RAM_OSCINT1_B2_2             = 680,

-  SI3218X_RAM_OSCINT1_A1_2             = 681,

-  SI3218X_RAM_OSCINT1_A2_2             = 682,

-  SI3218X_RAM_OSCINT2_B0_1             = 683,

-  SI3218X_RAM_OSCINT2_B1_1             = 684,

-  SI3218X_RAM_OSCINT2_B2_1             = 685,

-  SI3218X_RAM_OSCINT2_A1_1             = 686,

-  SI3218X_RAM_OSCINT2_A2_1             = 687,

-  SI3218X_RAM_OSCINT2_B0_2             = 688,

-  SI3218X_RAM_OSCINT2_B1_2             = 689,

-  SI3218X_RAM_OSCINT2_B2_2             = 690,

-  SI3218X_RAM_OSCINT2_A1_2             = 691,

-  SI3218X_RAM_OSCINT2_A2_2             = 692,

-  SI3218X_RAM_UNUSED693                = 693,

-  SI3218X_RAM_UNUSED694                = 694,

-  SI3218X_RAM_UNUSED695                = 695,

-  SI3218X_RAM_RING_LPF_B0              = 696,

-  SI3218X_RAM_RING_LPF_B1              = 697,

-  SI3218X_RAM_RING_LPF_B2              = 698,

-  SI3218X_RAM_RING_LPF_A1              = 699,

-  SI3218X_RAM_RING_LPF_A2              = 700,

-  SI3218X_RAM_LCRDBI                   = 701,

-  SI3218X_RAM_LONGDBI                  = 702,

-  SI3218X_RAM_VBAT_TIMER               = 703,

-  SI3218X_RAM_LF_SPEEDUP_TIMER         = 704,

-  SI3218X_RAM_DC_SPEEDUP_TIMER         = 705,

-  SI3218X_RAM_AC_SPEEDUP_TIMER         = 706,

-  SI3218X_RAM_LCR_SPEEDUP_TIMER        = 707,

-  SI3218X_RAM_CM_SPEEDUP_TIMER         = 708,

-  SI3218X_RAM_VCM_TH                   = 709,

-  SI3218X_RAM_AC_SPEEDUP_TH            = 710,

-  SI3218X_RAM_SPR_SIG_0                = 711,

-  SI3218X_RAM_SPR_SIG_1                = 712,

-  SI3218X_RAM_SPR_SIG_2                = 713,

-  SI3218X_RAM_SPR_SIG_3                = 714,

-  SI3218X_RAM_SPR_SIG_4                = 715,

-  SI3218X_RAM_SPR_SIG_5                = 716,

-  SI3218X_RAM_SPR_SIG_6                = 717,

-  SI3218X_RAM_SPR_SIG_7                = 718,

-  SI3218X_RAM_SPR_SIG_8                = 719,

-  SI3218X_RAM_SPR_SIG_9                = 720,

-  SI3218X_RAM_SPR_SIG_10               = 721,

-  SI3218X_RAM_SPR_SIG_11               = 722,

-  SI3218X_RAM_SPR_SIG_12               = 723,

-  SI3218X_RAM_SPR_SIG_13               = 724,

-  SI3218X_RAM_SPR_SIG_14               = 725,

-  SI3218X_RAM_SPR_SIG_15               = 726,

-  SI3218X_RAM_SPR_SIG_16               = 727,

-  SI3218X_RAM_SPR_SIG_17               = 728,

-  SI3218X_RAM_SPR_SIG_18               = 729,

-  SI3218X_RAM_COUNTER_VTR_VAL          = 730,

-  SI3218X_RAM_CONST_028                = 731,

-  SI3218X_RAM_CONST_032                = 732,

-  SI3218X_RAM_CONST_038                = 733,

-  SI3218X_RAM_CONST_046                = 734,

-  SI3218X_RAM_COUNTER_IRING_VAL        = 735,

-  SI3218X_RAM_GAIN_RING                = 736,

-  SI3218X_RAM_RING_HYST                = 737,

-  SI3218X_RAM_COMP_Z                   = 738,

-  SI3218X_RAM_CONST_115                = 739,

-  SI3218X_RAM_CONST_110                = 740,

-  SI3218X_RAM_CONST_105                = 741,

-  SI3218X_RAM_CONST_100                = 742,

-  SI3218X_RAM_CONST_095                = 743,

-  SI3218X_RAM_CONST_090                = 744,

-  SI3218X_RAM_CONST_085                = 745,

-  SI3218X_RAM_V_RASUM_IDEAL            = 746,

-  SI3218X_RAM_CONST_ONE                = 747,

-  SI3218X_RAM_VCM_OH                   = 748,

-  SI3218X_RAM_VCM_RING                 = 749,

-  SI3218X_RAM_VCM_HYST                 = 750,

-  SI3218X_RAM_VOV_GND                  = 751,

-  SI3218X_RAM_VOV_BAT                  = 752,

-  SI3218X_RAM_VOV_RING_BAT             = 753,

-  SI3218X_RAM_CM_DBI                   = 754,

-  SI3218X_RAM_RTPER                    = 755,

-  SI3218X_RAM_P_TH_HVIC                = 756,

-  SI3218X_RAM_UNUSED757                = 757,

-  SI3218X_RAM_UNUSED758                = 758,

-  SI3218X_RAM_COEF_P_HVIC              = 759,

-  SI3218X_RAM_UNUSED760                = 760,

-  SI3218X_RAM_UNUSED761                = 761,

-  SI3218X_RAM_UNUSED762                = 762,

-  SI3218X_RAM_UNUSED763                = 763,

-  SI3218X_RAM_BAT_HYST                 = 764,

-  SI3218X_RAM_BAT_DBI                  = 765,

-  SI3218X_RAM_VBATL_EXPECT             = 766,

-  SI3218X_RAM_VBATH_EXPECT             = 767,

-  SI3218X_RAM_VBATR_EXPECT             = 768,

-  SI3218X_RAM_BAT_SETTLE               = 769,

-  SI3218X_RAM_VBAT_IRQ_TH              = 770,

-  SI3218X_RAM_MADC_VTIPC_OS            = 771,

-  SI3218X_RAM_MADC_VRINGC_OS           = 772,

-  SI3218X_RAM_MADC_VBAT_OS             = 773,

-  SI3218X_RAM_MADC_VLONG_OS            = 774,

-  SI3218X_RAM_UNUSED775                = 775,

-  SI3218X_RAM_MADC_VDC_OS              = 776,

-  SI3218X_RAM_MADC_ILONG_OS            = 777,

-  SI3218X_RAM_UNUSED778                = 778,

-  SI3218X_RAM_UNUSED779                = 779,

-  SI3218X_RAM_MADC_ILOOP_OS            = 780,

-  SI3218X_RAM_MADC_ILOOP_SCALE         = 781,

-  SI3218X_RAM_UNUSED782                = 782,

-  SI3218X_RAM_UNUSED783                = 783,

-  SI3218X_RAM_DC_ADC_OS                = 784,

-  SI3218X_RAM_CAL_UNITY                = 785,

-  SI3218X_RAM_UNUSED786                = 786,

-  SI3218X_RAM_UNUSED787                = 787,

-  SI3218X_RAM_ACADC_OFFSET             = 788,

-  SI3218X_RAM_ACDAC_OFFSET             = 789,

-  SI3218X_RAM_CAL_DCDAC_CODE           = 790,

-  SI3218X_RAM_CAL_DCDAC_15MA           = 791,

-  SI3218X_RAM_UNUSED792                = 792,

-  SI3218X_RAM_UNUSED793                = 793,

-  SI3218X_RAM_UNUSED794                = 794,

-  SI3218X_RAM_UNUSED795                = 795,

-  SI3218X_RAM_UNUSED796                = 796,

-  SI3218X_RAM_UNUSED797                = 797,

-  SI3218X_RAM_UNUSED798                = 798,

-  SI3218X_RAM_UNUSED799                = 799,

-  SI3218X_RAM_UNUSED800                = 800,

-  SI3218X_RAM_CAL_LB_TSQUELCH          = 801,

-  SI3218X_RAM_CAL_LB_TCHARGE           = 802,

-  SI3218X_RAM_CAL_LB_TSETTLE0          = 803,

-  SI3218X_RAM_CAL_GOERTZEL_DLY         = 804,

-  SI3218X_RAM_CAL_GOERTZEL_ALPHA       = 805,

-  SI3218X_RAM_CAL_DECLPF_K             = 806,

-  SI3218X_RAM_CAL_DECLPF_B1            = 807,

-  SI3218X_RAM_CAL_DECLPF_B2            = 808,

-  SI3218X_RAM_CAL_DECLPF_A1            = 809,

-  SI3218X_RAM_CAL_DECLPF_A2            = 810,

-  SI3218X_RAM_CAL_ACADC_THRL           = 811,

-  SI3218X_RAM_CAL_ACADC_THRH           = 812,

-  SI3218X_RAM_CAL_ACADC_TSETTLE        = 813,

-  SI3218X_RAM_DTROW0TH                 = 814,

-  SI3218X_RAM_DTROW1TH                 = 815,

-  SI3218X_RAM_DTROW2TH                 = 816,

-  SI3218X_RAM_DTROW3TH                 = 817,

-  SI3218X_RAM_DTCOL0TH                 = 818,

-  SI3218X_RAM_DTCOL1TH                 = 819,

-  SI3218X_RAM_DTCOL2TH                 = 820,

-  SI3218X_RAM_DTCOL3TH                 = 821,

-  SI3218X_RAM_DTFTWTH                  = 822,

-  SI3218X_RAM_DTRTWTH                  = 823,

-  SI3218X_RAM_DTROWRTH                 = 824,

-  SI3218X_RAM_DTCOLRTH                 = 825,

-  SI3218X_RAM_DTROW2HTH                = 826,

-  SI3218X_RAM_DTCOL2HTH                = 827,

-  SI3218X_RAM_DTMINPTH                 = 828,

-  SI3218X_RAM_DTHOTTH                  = 829,

-  SI3218X_RAM_RXPWR                    = 830,

-  SI3218X_RAM_TXPWR                    = 831,

-  SI3218X_RAM_RXMODPWR                 = 832,

-  SI3218X_RAM_TXMODPWR                 = 833,

-  SI3218X_RAM_FSKFREQ0                 = 834,

-  SI3218X_RAM_FSKFREQ1                 = 835,

-  SI3218X_RAM_FSKAMP0                  = 836,

-  SI3218X_RAM_FSKAMP1                  = 837,

-  SI3218X_RAM_FSK01                    = 838,

-  SI3218X_RAM_FSK10                    = 839,

-  SI3218X_RAM_VOCDELTA                 = 840,

-  SI3218X_RAM_VOCLTH                   = 841,

-  SI3218X_RAM_VOCHTH                   = 842,

-  SI3218X_RAM_RINGOF                   = 843,

-  SI3218X_RAM_RINGFR                   = 844,

-  SI3218X_RAM_RINGAMP                  = 845,

-  SI3218X_RAM_RINGPHAS                 = 846,

-  SI3218X_RAM_RTDCTH                   = 847,

-  SI3218X_RAM_RTACTH                   = 848,

-  SI3218X_RAM_RTDCDB                   = 849,

-  SI3218X_RAM_RTACDB                   = 850,

-  SI3218X_RAM_RTCOUNT                  = 851,

-  SI3218X_RAM_LCROFFHK                 = 852,

-  SI3218X_RAM_LCRONHK                  = 853,

-  SI3218X_RAM_LCRMASK                  = 854,

-  SI3218X_RAM_LCRMASK_POLREV           = 855,

-  SI3218X_RAM_LCRMASK_STATE            = 856,

-  SI3218X_RAM_LCRMASK_LINECAP          = 857,

-  SI3218X_RAM_LONGHITH                 = 858,

-  SI3218X_RAM_LONGLOTH                 = 859,

-  SI3218X_RAM_IRING_LIM                = 860,

-  SI3218X_RAM_AC_PU_DELTA1             = 861,

-  SI3218X_RAM_AC_PU_DELTA2             = 862,

-  SI3218X_RAM_DIAG_LPF_8K              = 863,

-  SI3218X_RAM_DIAG_LPF_128K            = 864,

-  SI3218X_RAM_DIAG_INV_N               = 865,

-  SI3218X_RAM_DIAG_GAIN                = 866,

-  SI3218X_RAM_DIAG_G_CAL               = 867,

-  SI3218X_RAM_DIAG_OS_CAL              = 868,

-  SI3218X_RAM_SPR_GAIN_TRIM            = 869,

-  SI3218X_RAM_UNUSED870                = 870,

-  SI3218X_RAM_AC_DAC_GAIN              = 871,

-  SI3218X_RAM_UNUSED872                = 872,

-  SI3218X_RAM_UNUSED873                = 873,

-  SI3218X_RAM_AC_DAC_GAIN0             = 874,

-  SI3218X_RAM_EZSYNTH_B0               = 875,

-  SI3218X_RAM_UNUSED876                = 876,

-  SI3218X_RAM_UNUSED877                = 877,

-  SI3218X_RAM_UNUSED878                = 878,

-  SI3218X_RAM_UNUSED879                = 879,

-  SI3218X_RAM_AC_ADC_GAIN              = 880,

-  SI3218X_RAM_ILOOP1LPF                = 881,

-  SI3218X_RAM_RING_FLUSH_TIMER         = 882,

-  SI3218X_RAM_ALAW_BIAS                = 883,

-  SI3218X_RAM_MADC_VTRC_SCALE          = 884,

-  SI3218X_RAM_UNUSED885                = 885,

-  SI3218X_RAM_MADC_VBAT_SCALE          = 886,

-  SI3218X_RAM_MADC_VLONG_SCALE         = 887,

-  SI3218X_RAM_MADC_VLONG_SCALE_RING    = 888,

-  SI3218X_RAM_UNUSED889                = 889,

-  SI3218X_RAM_MADC_VDC_SCALE           = 890,

-  SI3218X_RAM_MADC_ILONG_SCALE         = 891,

-  SI3218X_RAM_UNUSED892                = 892,

-  SI3218X_RAM_UNUSED893                = 893,

-  SI3218X_RAM_VDIFF_SENSE_SCALE        = 894,

-  SI3218X_RAM_VDIFF_SENSE_SCALE_RING   = 895,

-  SI3218X_RAM_VOV_RING_GND             = 896,

-  SI3218X_RAM_DIAG_GAIN_DC             = 897,

-  SI3218X_RAM_CAL_LB_OSC1_FREQ         = 898,

-  SI3218X_RAM_CAL_DCDAC_9TAU           = 899,

-  SI3218X_RAM_CAL_MADC_9TAU            = 900,

-  SI3218X_RAM_ADAP_RING_MIN_I          = 901,

-  SI3218X_RAM_SWEEP_STEP               = 902,

-  SI3218X_RAM_SWEEP_STEP_SAVE          = 903,

-  SI3218X_RAM_SWEEP_REF                = 904,

-  SI3218X_RAM_AMP_STEP                 = 905,

-  SI3218X_RAM_RXACGAIN_SAVE            = 906,

-  SI3218X_RAM_AMP_RAMP_INIT            = 907,

-  SI3218X_RAM_DIAG_HPF_GAIN            = 908,

-  SI3218X_RAM_DIAG_HPF_8K              = 909,

-  SI3218X_RAM_DIAG_ADJ_STEP            = 910,

-  SI3218X_RAM_UNUSED911                = 911,

-  SI3218X_RAM_UNUSED912                = 912,

-  SI3218X_RAM_MADC_SCALE_INV           = 913,

-  SI3218X_RAM_UNUSED914                = 914,

-  SI3218X_RAM_PWRSAVE_TIMER            = 915,

-  SI3218X_RAM_OFFHOOK_THRESH           = 916,

-  SI3218X_RAM_SPEEDUP_MASK_TIMER       = 917,

-  SI3218X_RAM_UNUSED918                = 918,

-  SI3218X_RAM_VBAT_TRACK_MIN           = 919,

-  SI3218X_RAM_VBAT_TRACK_MIN_RNG       = 920,

-  SI3218X_RAM_UNUSED921                = 921,

-  SI3218X_RAM_UNUSED922                = 922,

-  SI3218X_RAM_UNUSED923                = 923,

-  SI3218X_RAM_UNUSED924                = 924,

-  SI3218X_RAM_UNUSED925                = 925,

-  SI3218X_RAM_UNUSED926                = 926,

-  SI3218X_RAM_DC_HOLD_DAC_OS           = 927,

-  SI3218X_RAM_UNUSED928                = 928,

-  SI3218X_RAM_NOTCH_B0                 = 929,

-  SI3218X_RAM_NOTCH_B1                 = 930,

-  SI3218X_RAM_NOTCH_B2                 = 931,

-  SI3218X_RAM_NOTCH_A1                 = 932,

-  SI3218X_RAM_NOTCH_A2                 = 933,

-  SI3218X_RAM_METER_LPF_B0             = 934,

-  SI3218X_RAM_METER_LPF_B1             = 935,

-  SI3218X_RAM_METER_LPF_B2             = 936,

-  SI3218X_RAM_METER_LPF_A1             = 937,

-  SI3218X_RAM_METER_LPF_A2             = 938,

-  SI3218X_RAM_METER_SIG_0              = 939,

-  SI3218X_RAM_METER_SIG_1              = 940,

-  SI3218X_RAM_METER_SIG_2              = 941,

-  SI3218X_RAM_METER_SIG_3              = 942,

-  SI3218X_RAM_METER_SIG_4              = 943,

-  SI3218X_RAM_METER_SIG_5              = 944,

-  SI3218X_RAM_METER_SIG_6              = 945,

-  SI3218X_RAM_METER_SIG_7              = 946,

-  SI3218X_RAM_METER_SIG_8              = 947,

-  SI3218X_RAM_METER_SIG_9              = 948,

-  SI3218X_RAM_METER_SIG_10             = 949,

-  SI3218X_RAM_METER_SIG_11             = 950,

-  SI3218X_RAM_METER_SIG_12             = 951,

-  SI3218X_RAM_METER_SIG_13             = 952,

-  SI3218X_RAM_METER_SIG_14             = 953,

-  SI3218X_RAM_METER_SIG_15             = 954,

-  SI3218X_RAM_METER_BP_B0              = 955,

-  SI3218X_RAM_METER_BP_B1              = 956,

-  SI3218X_RAM_METER_BP_B2              = 957,

-  SI3218X_RAM_METER_BP_A1              = 958,

-  SI3218X_RAM_METER_BP_A2              = 959,

-  SI3218X_RAM_PM_AMP_THRESH            = 960,

-  SI3218X_RAM_METER_GAIN               = 961,

-  SI3218X_RAM_PWRSAVE_DBI              = 962,

-  SI3218X_RAM_DCDC_ANA_SCALE           = 963,

-  SI3218X_RAM_VOV_BAT_PWRSAVE_LO       = 964,

-  SI3218X_RAM_VOV_BAT_PWRSAVE_HI       = 965,

-  SI3218X_RAM_AC_ADC_GAIN0             = 966,

-  SI3218X_RAM_SCALE_KAUDIO             = 967,

-  SI3218X_RAM_METER_GAIN_TEMP          = 968,

-  SI3218X_RAM_METER_RAMP_STEP          = 969,

-  SI3218X_RAM_THERM_DBI                = 970,

-  SI3218X_RAM_LPR_SCALE                = 971,

-  SI3218X_RAM_LPR_CM_OS                = 972,

-  SI3218X_RAM_VOV_DCDC_SLOPE           = 973,

-  SI3218X_RAM_VOV_DCDC_OS              = 974,

-  SI3218X_RAM_VOV_RING_BAT_MAX         = 975,

-  SI3218X_RAM_SLOPE_VLIM1              = 976,

-  SI3218X_RAM_SLOPE_RFEED1             = 977,

-  SI3218X_RAM_SLOPE_ILIM1              = 978,

-  SI3218X_RAM_V_VLIM1                  = 979,

-  SI3218X_RAM_V_RFEED1                 = 980,

-  SI3218X_RAM_V_ILIM1                  = 981,

-  SI3218X_RAM_CONST_RFEED1             = 982,

-  SI3218X_RAM_CONST_ILIM1              = 983,

-  SI3218X_RAM_I_VLIM1                  = 984,

-  SI3218X_RAM_SLOPE_VLIM2              = 985,

-  SI3218X_RAM_SLOPE_RFEED2             = 986,

-  SI3218X_RAM_SLOPE_ILIM2              = 987,

-  SI3218X_RAM_V_VLIM2                  = 988,

-  SI3218X_RAM_V_RFEED2                 = 989,

-  SI3218X_RAM_V_ILIM2                  = 990,

-  SI3218X_RAM_CONST_RFEED2             = 991,

-  SI3218X_RAM_CONST_ILIM2              = 992,

-  SI3218X_RAM_I_VLIM2                  = 993,

-  SI3218X_RAM_DIAG_V_TAR               = 994,

-  SI3218X_RAM_DIAG_V_TAR2              = 995,

-  SI3218X_RAM_STOP_TIMER1_VAL          = 996,

-  SI3218X_RAM_STOP_TIMER2_VAL          = 997,

-  SI3218X_RAM_DIAG_VCM1_TAR            = 998,

-  SI3218X_RAM_DIAG_VCM_STEP            = 999,

-  SI3218X_RAM_LKG_DNT_HIRES            = 1000,

-  SI3218X_RAM_LKG_DNR_HIRES            = 1001,

-  SI3218X_RAM_LINEAR_OS                = 1002,

-  SI3218X_RAM_CPUMP_DEB                = 1003,

-  SI3218X_RAM_DCDC_VERR                = 1004,

-  SI3218X_RAM_DCDC_VERR_HYST           = 1005,

-  SI3218X_RAM_DCDC_OITHRESH_LO         = 1006,

-  SI3218X_RAM_DCDC_OITHRESH_HI         = 1007,

-  SI3218X_RAM_HV_BIAS_ONHK             = 1008,

-  SI3218X_RAM_HV_BIAS_OFFHK            = 1009,

-  SI3218X_RAM_UNUSED1010               = 1010,

-  SI3218X_RAM_UNUSED1011               = 1011,

-  SI3218X_RAM_UNUSED1012               = 1012,

-  SI3218X_RAM_UNUSED1013               = 1013,

-  SI3218X_RAM_ILONG_RT_THRESH          = 1014,

-  SI3218X_RAM_VOV_RING_BAT_DCDC        = 1015,

-  SI3218X_RAM_UNUSED1016               = 1016,

-  SI3218X_RAM_LKG_LB_OFFSET            = 1017,

-  SI3218X_RAM_LKG_OFHK_OFFSET          = 1018,

-  SI3218X_RAM_SWEEP_FREQ_TH            = 1019,

-  SI3218X_RAM_AMP_MOD_G                = 1020,

-  SI3218X_RAM_AMP_MOD_OS               = 1021,

-  SI3218X_RAM_UNUSED1022               = 1022,

-  SI3218X_RAM_UNUSED1023               = 1023,

-  SI3218X_RAM_UNUSED_REG256            = 1280,

-  SI3218X_RAM_DAC_IN                   = 1281,

-  SI3218X_RAM_ADC_OUT                  = 1282,

-  SI3218X_RAM_PASS1                    = 1283,

-  SI3218X_RAM_TX_AC_INT                = 1284,

-  SI3218X_RAM_RX_AC_DIFF               = 1285,

-  SI3218X_RAM_INDIRECT_WR              = 1286,

-  SI3218X_RAM_INDIRECT_RD              = 1287,

-  SI3218X_RAM_BYPASS_OUT               = 1288,

-  SI3218X_RAM_ACC                      = 1289,

-  SI3218X_RAM_INDIRECT_RAM_A           = 1290,

-  SI3218X_RAM_INDIRECT_RAM_B           = 1291,

-  SI3218X_RAM_HOT_BIT1                 = 1292,

-  SI3218X_RAM_HOT_BIT0                 = 1293,

-  SI3218X_RAM_PASS0_ROW_PWR            = 1294,

-  SI3218X_RAM_PASS0_COL_PWR            = 1295,

-  SI3218X_RAM_PASS0_ROW                = 1296,

-  SI3218X_RAM_PASS0_COL                = 1297,

-  SI3218X_RAM_PASS0_ROW_REL            = 1298,

-  SI3218X_RAM_PASS0_COL_REL            = 1299,

-  SI3218X_RAM_PASS0_ROW_2ND            = 1300,

-  SI3218X_RAM_PASS0_COL_2ND            = 1301,

-  SI3218X_RAM_PASS0_REV_TW             = 1302,

-  SI3218X_RAM_PASS0_FWD_TW             = 1303,

-  SI3218X_RAM_DAA_ADC_OUT              = 1304,

-  SI3218X_RAM_CAL_CM_BAL_TEST          = 1305,

-  SI3218X_RAM_UNUSED_REG282            = 1306,

-  SI3218X_RAM_TONE1                    = 1307,

-  SI3218X_RAM_TONE2                    = 1308,

-  SI3218X_RAM_RING_TRIG                = 1309,

-  SI3218X_RAM_VCM_DAC                  = 1310,

-  SI3218X_RAM_UNUSED_REG287            = 1311,

-  SI3218X_RAM_RING_DAC                 = 1312,

-  SI3218X_RAM_VRING_CROSSING           = 1313,

-  SI3218X_RAM_UNUSED_REG290            = 1314,

-  SI3218X_RAM_LINEFEED_SHADOW          = 1315,

-  SI3218X_RAM_UNUSED_REG292            = 1316,

-  SI3218X_RAM_UNUSED_REG293            = 1317,

-  SI3218X_RAM_UNUSED_REG294            = 1318,

-  SI3218X_RAM_ROW_DIGIT                = 1319,

-  SI3218X_RAM_COL_DIGIT                = 1320,

-  SI3218X_RAM_UNUSED_REG297            = 1321,

-  SI3218X_RAM_PQ1_IRQ                  = 1322,

-  SI3218X_RAM_PQ2_IRQ                  = 1323,

-  SI3218X_RAM_PQ3_IRQ                  = 1324,

-  SI3218X_RAM_PQ4_IRQ                  = 1325,

-  SI3218X_RAM_PQ5_IRQ                  = 1326,

-  SI3218X_RAM_PQ6_IRQ                  = 1327,

-  SI3218X_RAM_LCR_SET                  = 1328,

-  SI3218X_RAM_LCR_CLR                  = 1329,

-  SI3218X_RAM_RTP_SET                  = 1330,

-  SI3218X_RAM_LONG_SET                 = 1331,

-  SI3218X_RAM_LONG_CLR                 = 1332,

-  SI3218X_RAM_VDIFF_IRQ                = 1333,

-  SI3218X_RAM_MODFEED_SET              = 1334,

-  SI3218X_RAM_MODFEED_CLR              = 1335,

-  SI3218X_RAM_LF_SPEEDUP_SET           = 1336,

-  SI3218X_RAM_LF_SPEEDUP_CLR           = 1337,

-  SI3218X_RAM_DC_SPEEDUP_SET           = 1338,

-  SI3218X_RAM_DC_SPEEDUP_CLR           = 1339,

-  SI3218X_RAM_AC_SPEEDUP_SET           = 1340,

-  SI3218X_RAM_AC_SPEEDUP_CLR           = 1341,

-  SI3218X_RAM_LCR_SPEEDUP_SET          = 1342,

-  SI3218X_RAM_LCR_SPEEDUP_CLR          = 1343,

-  SI3218X_RAM_CM_SPEEDUP_SET           = 1344,

-  SI3218X_RAM_CM_SPEEDUP_CLR           = 1345,

-  SI3218X_RAM_MODEMPASS0               = 1346,

-  SI3218X_RAM_RX2100_PASS1_PWR         = 1347,

-  SI3218X_RAM_RX2100_PASS1_THR         = 1348,

-  SI3218X_RAM_TX2100_PASS1_PWR         = 1349,

-  SI3218X_RAM_TX2100_PASS1_THR         = 1350,

-  SI3218X_RAM_TXMDM_TRIG               = 1351,

-  SI3218X_RAM_RXMDM_TRIG               = 1352,

-  SI3218X_RAM_UNUSED_REG329            = 1353,

-  SI3218X_RAM_TX_FILT_CLR              = 1354,

-  SI3218X_RAM_TX_DC_INT                = 1355,

-  SI3218X_RAM_RX_DC_MOD_IN             = 1356,

-  SI3218X_RAM_DSP_ACCESS               = 1357,

-  SI3218X_RAM_PRAM_ADDR                = 1358,

-  SI3218X_RAM_PRAM_DATA                = 1359,

-  SI3218X_RAM_IND_RAM_A_BASE           = 1360,

-  SI3218X_RAM_IND_RAM_A_ADDR           = 1361,

-  SI3218X_RAM_IND_RAM_A_MOD            = 1362,

-  SI3218X_RAM_IND_RAM_B_BASE           = 1363,

-  SI3218X_RAM_IND_RAM_B_ADDR           = 1364,

-  SI3218X_RAM_IND_RAM_B_MOD            = 1365,

-  SI3218X_RAM_UNUSED_REG342            = 1366,

-  SI3218X_RAM_UNUSED_REG343            = 1367,

-  SI3218X_RAM_UNUSED_REG344            = 1368,

-  SI3218X_RAM_USER_B0                  = 1369,

-  SI3218X_RAM_USER_B1                  = 1370,

-  SI3218X_RAM_USER_B2                  = 1371,

-  SI3218X_RAM_USER_B3                  = 1372,

-  SI3218X_RAM_USER_B4                  = 1373,

-  SI3218X_RAM_USER_B5                  = 1374,

-  SI3218X_RAM_USER_B6                  = 1375,

-  SI3218X_RAM_USER_B7                  = 1376,

-  SI3218X_RAM_FLUSH_AUDIO_CLR          = 1377,

-  SI3218X_RAM_FLUSH_DC_CLR             = 1378,

-  SI3218X_RAM_SPR_CLR                  = 1379,

-  SI3218X_RAM_GPI0                     = 1380,

-  SI3218X_RAM_GPI1                     = 1381,

-  SI3218X_RAM_GPI2                     = 1382,

-  SI3218X_RAM_GPI3                     = 1383,

-  SI3218X_RAM_GPO0                     = 1384,

-  SI3218X_RAM_GPO1                     = 1385,

-  SI3218X_RAM_GPO2                     = 1386,

-  SI3218X_RAM_GPO3                     = 1387,

-  SI3218X_RAM_GPO0_OE                  = 1388,

-  SI3218X_RAM_GPO1_OE                  = 1389,

-  SI3218X_RAM_GPO2_OE                  = 1390,

-  SI3218X_RAM_GPO3_OE                  = 1391,

-  SI3218X_RAM_BATSEL_L_SET             = 1392,

-  SI3218X_RAM_BATSEL_H_SET             = 1393,

-  SI3218X_RAM_BATSEL_R_SET             = 1394,

-  SI3218X_RAM_BATSEL_CLR               = 1395,

-  SI3218X_RAM_VBAT_IRQ                 = 1396,

-  SI3218X_RAM_MADC_VTIPC_RAW           = 1397,

-  SI3218X_RAM_MADC_VRINGC_RAW          = 1398,

-  SI3218X_RAM_MADC_VBAT_RAW            = 1399,

-  SI3218X_RAM_MADC_VLONG_RAW           = 1400,

-  SI3218X_RAM_UNUSED_REG377            = 1401,

-  SI3218X_RAM_MADC_VDC_RAW             = 1402,

-  SI3218X_RAM_MADC_ILONG_RAW           = 1403,

-  SI3218X_RAM_UNUSED_REG380            = 1404,

-  SI3218X_RAM_UNUSED_REG381            = 1405,

-  SI3218X_RAM_MADC_ILOOP_RAW           = 1406,

-  SI3218X_RAM_MADC_DIAG_RAW            = 1407,

-  SI3218X_RAM_UNUSED_REG384            = 1408,

-  SI3218X_RAM_UNUSED_REG385            = 1409,

-  SI3218X_RAM_CALR3_DSP                = 1410,

-  SI3218X_RAM_PD_MADC                  = 1411,

-  SI3218X_RAM_UNUSED_REG388            = 1412,

-  SI3218X_RAM_PD_BIAS                  = 1413,

-  SI3218X_RAM_PD_DC_ADC                = 1414,

-  SI3218X_RAM_PD_DC_DAC                = 1415,

-  SI3218X_RAM_PD_DC_SNS                = 1416,

-  SI3218X_RAM_PD_DC_COARSE_SNS         = 1417,

-  SI3218X_RAM_PD_VBAT_SNS              = 1418,

-  SI3218X_RAM_PD_DC_BUF                = 1419,

-  SI3218X_RAM_PD_AC_ADC                = 1420,

-  SI3218X_RAM_PD_AC_DAC                = 1421,

-  SI3218X_RAM_PD_AC_SNS                = 1422,

-  SI3218X_RAM_PD_CM_SNS                = 1423,

-  SI3218X_RAM_PD_CM                    = 1424,

-  SI3218X_RAM_UNUSED_REG401            = 1425,

-  SI3218X_RAM_UNUSED_REG402            = 1426,

-  SI3218X_RAM_PD_SUM                   = 1427,

-  SI3218X_RAM_PD_LKGDAC                = 1428,

-  SI3218X_RAM_UNUSED_REG405            = 1429,

-  SI3218X_RAM_PD_HVIC                  = 1430,

-  SI3218X_RAM_UNUSED_REG407            = 1431,

-  SI3218X_RAM_CMDAC_CHEN_B             = 1432,

-  SI3218X_RAM_SUM_CHEN_B               = 1433,

-  SI3218X_RAM_TRNRD_CHEN_B             = 1434,

-  SI3218X_RAM_UNUSED_REG411            = 1435,

-  SI3218X_RAM_DC_BUF_CHEN_B            = 1436,

-  SI3218X_RAM_AC_SNS_CHEN_B            = 1437,

-  SI3218X_RAM_DC_SNS_CHEN_B            = 1438,

-  SI3218X_RAM_LB_MUX_CHEN_B            = 1439,

-  SI3218X_RAM_UNUSED_REG416            = 1440,

-  SI3218X_RAM_CMDAC_EN_B               = 1441,

-  SI3218X_RAM_RA_EN_B                  = 1442,

-  SI3218X_RAM_RD_EN_B                  = 1443,

-  SI3218X_RAM_VCTL                     = 1444,

-  SI3218X_RAM_UNUSED_REG421            = 1445,

-  SI3218X_RAM_UNUSED_REG422            = 1446,

-  SI3218X_RAM_HVIC_STATE               = 1447,

-  SI3218X_RAM_HVIC_STATE_OBSERVE       = 1448,

-  SI3218X_RAM_HVIC_STATE_MAN           = 1449,

-  SI3218X_RAM_HVIC_STATE_READ          = 1450,

-  SI3218X_RAM_UNUSED_REG427            = 1451,

-  SI3218X_RAM_VCMDAC_SCALE_MAN         = 1452,

-  SI3218X_RAM_CAL_ACADC_CNTL           = 1453,

-  SI3218X_RAM_CAL_ACDAC_CNTL           = 1454,

-  SI3218X_RAM_UNUSED_REG431            = 1455,

-  SI3218X_RAM_CAL_DCDAC_CNTL           = 1456,

-  SI3218X_RAM_CAL_TRNRD_CNTL           = 1457,

-  SI3218X_RAM_CAL_TRNRD_DACT           = 1458,

-  SI3218X_RAM_CAL_TRNRD_DACR           = 1459,

-  SI3218X_RAM_LKG_UPT_ACTIVE           = 1460,

-  SI3218X_RAM_LKG_UPR_ACTIVE           = 1461,

-  SI3218X_RAM_LKG_DNT_ACTIVE           = 1462,

-  SI3218X_RAM_LKG_DNR_ACTIVE           = 1463,

-  SI3218X_RAM_LKG_UPT_OHT              = 1464,

-  SI3218X_RAM_LKG_UPR_OHT              = 1465,

-  SI3218X_RAM_LKG_DNT_OHT              = 1466,

-  SI3218X_RAM_LKG_DNR_OHT              = 1467,

-  SI3218X_RAM_CAL_LKG_EN_CNTL          = 1468,

-  SI3218X_RAM_CAL_PUPD_CNTL            = 1469,

-  SI3218X_RAM_UNUSED_REG446            = 1470,

-  SI3218X_RAM_CAL_AC_RCAL              = 1471,

-  SI3218X_RAM_CAL_DC_RCAL              = 1472,

-  SI3218X_RAM_KAC_MOD                  = 1473,

-  SI3218X_RAM_KAC_SEL                  = 1474,

-  SI3218X_RAM_SEL_RING                 = 1475,

-  SI3218X_RAM_CMDAC_FWD                = 1476,

-  SI3218X_RAM_CMDAC_RVS                = 1477,

-  SI3218X_RAM_CAL_INC_STATE            = 1478,

-  SI3218X_RAM_CAL_DCDAC_COMP           = 1479,

-  SI3218X_RAM_BAT_SWITCH               = 1480,

-  SI3218X_RAM_CH_IRQ                   = 1481,

-  SI3218X_RAM_ILOOP_CROSSING           = 1482,

-  SI3218X_RAM_VOC_FAILSAFE             = 1483,

-  SI3218X_RAM_UNUSED_REG460            = 1484,

-  SI3218X_RAM_UNUSED_REG461            = 1485,

-  SI3218X_RAM_GENERIC_0                = 1486,

-  SI3218X_RAM_GENERIC_1                = 1487,

-  SI3218X_RAM_GENERIC_2                = 1488,

-  SI3218X_RAM_GENERIC_3                = 1489,

-  SI3218X_RAM_GENERIC_4                = 1490,

-  SI3218X_RAM_GENERIC_5                = 1491,

-  SI3218X_RAM_GENERIC_6                = 1492,

-  SI3218X_RAM_GENERIC_7                = 1493,

-  SI3218X_RAM_UNUSED_REG470            = 1494,

-  SI3218X_RAM_UNUSED_REG471            = 1495,

-  SI3218X_RAM_QHI_SET                  = 1496,

-  SI3218X_RAM_QHI_CLR                  = 1497,

-  SI3218X_RAM_UNUSED_REG474            = 1498,

-  SI3218X_RAM_RDC_SUM                  = 1499,

-  SI3218X_RAM_UNUSED_REG476            = 1500,

-  SI3218X_RAM_UNUSED_REG477            = 1501,

-  SI3218X_RAM_UNUSED_REG478            = 1502,

-  SI3218X_RAM_UNUSED_REG479            = 1503,

-  SI3218X_RAM_UNUSED_REG480            = 1504,

-  SI3218X_RAM_UNUSED_REG481            = 1505,

-  SI3218X_RAM_FLUSH_AUDIO_MAN          = 1506,

-  SI3218X_RAM_FLUSH_DC_MAN             = 1507,

-  SI3218X_RAM_TIP_RING_CNTL            = 1508,

-  SI3218X_RAM_SQUELCH_SET              = 1509,

-  SI3218X_RAM_SQUELCH_CLR              = 1510,

-  SI3218X_RAM_CAL_STATE_MAN            = 1511,

-  SI3218X_RAM_UNUSED_REG488            = 1512,

-  SI3218X_RAM_UNUSED_REG489            = 1513,

-  SI3218X_RAM_RINGING_BW               = 1514,

-  SI3218X_RAM_AUDIO_MAN                = 1515,

-  SI3218X_RAM_HVIC_STATE_SPARE         = 1516,

-  SI3218X_RAM_RINGING_FAST_MAN         = 1517,

-  SI3218X_RAM_VCM_DAC_MAN              = 1518,

-  SI3218X_RAM_UNUSED_REG495            = 1519,

-  SI3218X_RAM_UNUSED_REG496            = 1520,

-  SI3218X_RAM_UNUSED_REG497            = 1521,

-  SI3218X_RAM_GENERIC_8                = 1522,

-  SI3218X_RAM_GENERIC_9                = 1523,

-  SI3218X_RAM_GENERIC_10               = 1524,

-  SI3218X_RAM_GENERIC_11               = 1525,

-  SI3218X_RAM_UNUSED_REG502            = 1526,

-  SI3218X_RAM_GENERIC_12               = 1527,

-  SI3218X_RAM_GENERIC_13               = 1528,

-  SI3218X_RAM_UNUSED_REG505            = 1529,

-  SI3218X_RAM_DC_HOLD_DAC              = 1530,

-  SI3218X_RAM_OFFHOOK_CMP              = 1531,

-  SI3218X_RAM_PWRSAVE_SET              = 1532,

-  SI3218X_RAM_PWRSAVE_CLR              = 1533,

-  SI3218X_RAM_PD_WKUP                  = 1534,

-  SI3218X_RAM_SPEEDUP_MASK_SET         = 1535,

-  SI3218X_RAM_SPEEDUP_MASK_CLR         = 1536,

-  SI3218X_RAM_UNUSED_REG513            = 1537,

-  SI3218X_RAM_PD_DCDC                  = 1538,

-  SI3218X_RAM_UNUSED_REG515            = 1539,

-  SI3218X_RAM_PD_UVLO                  = 1540,

-  SI3218X_RAM_PD_OVLO                  = 1541,

-  SI3218X_RAM_PD_OCLO                  = 1542,

-  SI3218X_RAM_PD_SWDRV                 = 1543,

-  SI3218X_RAM_UNUSED_REG520            = 1544,

-  SI3218X_RAM_DCDC_UVHYST              = 1545,

-  SI3218X_RAM_DCDC_UVTHRESH            = 1546,

-  SI3218X_RAM_DCDC_OVTHRESH            = 1547,

-  SI3218X_RAM_DCDC_OITHRESH            = 1548,

-  SI3218X_RAM_UNUSED_REG525            = 1549,

-  SI3218X_RAM_UNUSED_REG526            = 1550,

-  SI3218X_RAM_DCDC_STATUS              = 1551,

-  SI3218X_RAM_UNUSED_REG528            = 1552,

-  SI3218X_RAM_DCDC_SWDRV_POL           = 1553,

-  SI3218X_RAM_DCDC_UVPOL               = 1554,

-  SI3218X_RAM_DCDC_CPUMP               = 1555,

-  SI3218X_RAM_UNUSED_REG532            = 1556,

-  SI3218X_RAM_DCDC_VREF_MAN            = 1557,

-  SI3218X_RAM_DCDC_VREF_CTRL           = 1558,

-  SI3218X_RAM_UNUSED_REG535            = 1559,

-  SI3218X_RAM_DCDC_RNGTYPE             = 1560,

-  SI3218X_RAM_DCDC_DIN_FILT            = 1561,

-  SI3218X_RAM_UNUSED_REG538            = 1562,

-  SI3218X_RAM_DCDC_DOUT                = 1563,

-  SI3218X_RAM_UNUSED_REG540            = 1564,

-  SI3218X_RAM_DCDC_OIMASK              = 1565,

-  SI3218X_RAM_UNUSED_REG542            = 1566,

-  SI3218X_RAM_UNUSED_REG543            = 1567,

-  SI3218X_RAM_DCDC_SC_SET              = 1568,

-  SI3218X_RAM_WAKE_HOLD                = 1569,

-  SI3218X_RAM_PD_AC_SQUELCH            = 1570,

-  SI3218X_RAM_PD_REF_OSC               = 1571,

-  SI3218X_RAM_UNUSED_REG548            = 1572,

-  SI3218X_RAM_PWRSAVE_MAN              = 1573,

-  SI3218X_RAM_PWRSAVE_SEL              = 1574,

-  SI3218X_RAM_PWRSAVE_CTRL_LO          = 1575,

-  SI3218X_RAM_PWRSAVE_CTRL_HI          = 1576,

-  SI3218X_RAM_PWRSAVE_HVIC_LO          = 1577,

-  SI3218X_RAM_PWRSAVE_HVIC_HI          = 1578,

-  SI3218X_RAM_DSP_PROM_MISR            = 1579,

-  SI3218X_RAM_DSP_CROM_MISR            = 1580,

-  SI3218X_RAM_DAA_PROM_MISR            = 1581,

-  SI3218X_RAM_DAA_CROM_MISR            = 1582,

-  SI3218X_RAM_RAMBIST_ERROR            = 1583,

-  SI3218X_RAM_DCDC_ANA_VREF            = 1584,

-  SI3218X_RAM_DCDC_ANA_GAIN            = 1585,

-  SI3218X_RAM_DCDC_ANA_TOFF            = 1586,

-  SI3218X_RAM_DCDC_ANA_TONMIN          = 1587,

-  SI3218X_RAM_DCDC_ANA_TONMAX          = 1588,

-  SI3218X_RAM_DCDC_ANA_DSHIFT          = 1589,

-  SI3218X_RAM_DCDC_ANA_LPOLY           = 1590,

-  SI3218X_RAM_DCDC_ANA_PSKIP           = 1591,

-  SI3218X_RAM_PD_DCDC_ANA              = 1592,

-  SI3218X_RAM_UNUSED_REG569            = 1593,

-  SI3218X_RAM_UNUSED_REG570            = 1594,

-  SI3218X_RAM_PWRPEND_SET              = 1595,

-  SI3218X_RAM_PD_CM_BUF                = 1596,

-  SI3218X_RAM_JMP8                     = 1597,

-  SI3218X_RAM_JMP9                     = 1598,

-  SI3218X_RAM_JMP10                    = 1599,

-  SI3218X_RAM_JMP11                    = 1600,

-  SI3218X_RAM_JMP12                    = 1601,

-  SI3218X_RAM_JMP13                    = 1602,

-  SI3218X_RAM_JMP14                    = 1603,

-  SI3218X_RAM_JMP15                    = 1604,

-  SI3218X_RAM_METER_TRIG               = 1605,

-  SI3218X_RAM_PM_ACTIVE                = 1606,

-  SI3218X_RAM_PM_INACTIVE              = 1607,

-  SI3218X_RAM_HVIC_VERSION             = 1608,

-  SI3218X_RAM_THERM_OFF                = 1609,

-  SI3218X_RAM_THERM_HI                 = 1610,

-  SI3218X_RAM_TEST_LOAD                = 1611,

-  SI3218X_RAM_DC_HOLD_MAN              = 1612,

-  SI3218X_RAM_DC_HOLD_DAC_MAN          = 1613,

-  SI3218X_RAM_UNUSED_REG590            = 1614,

-  SI3218X_RAM_DCDC_CPUMP_LP            = 1615,

-  SI3218X_RAM_DCDC_CPUMP_LP_MASK       = 1616,

-  SI3218X_RAM_DCDC_CPUMP_PULLDOWN      = 1617,

-  SI3218X_RAM_BOND_STATUS              = 1618,

-  SI3218X_RAM_BOND_MAN                 = 1619,

-  SI3218X_RAM_BOND_VAL                 = 1620,

-  SI3218X_RAM_REF_DEBOUNCE_PCLK        = 1633,

-  SI3218X_RAM_REF_DEBOUNCE_FSYNC       = 1634,

-  SI3218X_RAM_DCDC_LIFT_EN             = 1635,

-  SI3218X_RAM_DCDC_CPUMP_PGOOD         = 1636,

-  SI3218X_RAM_DCDC_CPUMP_PGOOD_WKEN    = 1637,

-  SI3218X_RAM_DCDC_CPUMP_PGOOD_FRC     = 1638,

-  SI3218X_RAM_DCDC_CPUMP_LP_MASK_SH    = 1639,

-  SI3218X_RAM_DCDC_UV_MAN              = 1640,

-  SI3218X_RAM_DCDC_UV_DEBOUNCE         = 1641,

-  SI3218X_RAM_DCDC_OV_MAN              = 1642,

-  SI3218X_RAM_DCDC_OV_DEBOUNCE         = 1643,

-  SI3218X_RAM_ANALOG3_TEST_MUX         = 1644,

-};

-

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice.h
deleted file mode 100644
index fe03c58..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice.h
+++ /dev/null
@@ -1,949 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Author(s):
- * laj
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- * File Description:
- * This is the main header file for the ProSLIC API software.
- *
- *
- */
-
-#ifndef SI_VOICE_H
-#define SI_VOICE_H
-
-#include "../config_inc/proslic_api_config.h"
-#include "si_voice_ctrl.h"
-#include "si_voice_timer_intf.h"
-
-/* The following macros are in place so that if the customer did not define them, the "safe" default is not disable the functionality.*/
-#ifndef ENABLE_DEBUG
-#define DEBUG_PRINT(...)
-#define DEBUG_ENABLED(X) 0
-#endif
-
-#ifndef ENABLE_TRACES
-#define TRACE_ENABLED(X) 0
-#define TRACEPRINT(...)
-#define TRACEPRINT_NOCHAN(...)
-#endif
-
-#ifndef LOGPRINT
-#define LOGPRINT(...)
-#endif
-
-#define SILABS_UNREFERENCED_PARAMETER(param) (void)param
-
-/** @defgroup SIVOICE SiVoice definitions
-
- * @{
- */
-/*****************************************************************************/
-/** @defgroup CHIPFAM Chip family definitions
- * @{
- */
-#define SI3217X_TYPE 4   /**< Single channel chipset*/
-#define SI3226X_TYPE 5   /**< Dual channel chipset */
-#define SI3218X_TYPE 6   /**< Single channel chipset*/
-#define SI3228X_TYPE 7   /**< Dual channel chipset */
-#define SI3228X_TYPE 7   /**< Dual channel chipset */
-#define SI3219X_TYPE 8   /**< Single channel chipset*/
-#define SI3050_TYPE 20   /**< Single channel FXO chipset */
-
-/** @} CHIPFAM */
-/*****************************************************************************/
-
-
-/*
-* Workaroud for building on windows systems
-*/
-
-#ifdef RC_NONE
-#undef RC_NONE
-#endif
-
-#define SIVOICE_RC_NONE RC_NONE
-
-/**
-* This is the main Silicon Labs control interface object. do not access directly!
-*/
-typedef struct
-{
-  void *hCtrl;                                /**< user provided SPI/GCI structure */
-  ctrl_Reset_fptr Reset_fptr;                 /**< user provided reset function */
-  ctrl_WriteRegister_fptr
-  WriteRegister_fptr; /**< user provided SPI/GCI write register function */
-  ctrl_ReadRegister_fptr
-  ReadRegister_fptr;   /**< user provided SPI/GI read register function */
-  ctrl_WriteRAM_fptr
-  WriteRAM_fptr;           /**< ProSLIC only - user provided SPI/GCI read RAM/Indirect register function */
-  ctrl_ReadRAM_fptr ReadRAM_fptr;             /**< ProSLIC only */
-  ctrl_Semaphore_fptr Semaphore_fptr;         /**< ProSLIC only */
-  void *hTimer;                               /**< user provided Timer data structure */
-  system_delay_fptr
-  Delay_fptr;               /**< user supplied mSec delay function */
-  system_timeElapsed_fptr
-  timeElapsed_fptr;   /**< user provided mSec time elapsed function */
-  system_getTime_fptr
-  getTime_fptr;           /**< user provided timestamp function */
-} SiVoiceControlInterfaceType;
-
-/* MAINTAINER NOTE: if this changes, update deubg.c in the API demo */
-typedef enum
-{
-  SI32171, /* '170 is the HV version of this part */
-  SI32172, /* '173 is the HV version of this part */
-  SI32174,
-  SI32175,
-  SI32176,
-  SI32177,
-  SI32178,
-  SI32179,
-  SI32260,
-  SI32261,
-  SI32262,
-  SI32263,
-  SI32264,
-  SI32265,
-  SI32266,
-  SI32267,
-  SI32268,
-  SI32269,
-  SI32360,
-  SI32361,
-  SI32180,
-  SI32181,
-  SI32182,
-  SI32183,
-  SI32184,
-  SI32185,
-  SI32186,
-  SI32187,
-  SI32188,
-  SI32189, /* Place holder */
-  SI32280,
-  SI32281,
-  SI32282,
-  SI32283,
-  SI32284,
-  SI32285,
-  SI32286,
-  SI32287,
-  SI32289, /* Place holder */
-  SI32190, /* NOT all parts numbers are used at this time and are placeholders */
-  SI32191,
-  SI32192,
-  SI32193,
-  SI32194,
-  SI32195,
-  SI32196,
-  SI32197,
-  SI32198,
-  SI32199,
-  SI3050 = 100,
-  UNSUPPORTED_PART_NUM = 255
-} partNumberType;
-
-#define IS_SI3219X(SI_DEVPTR) ( ( (SI_DEVPTR)->chipType >= SI32190) && ( (SI_DEVPTR)->chipType <= SI32199) )
-
-/**
-* Chip revision definition for easier readability in the source code
-*/
-typedef enum
-{
-  A,
-  B,
-  C,
-  D,
-  E,
-  F,
-  G
-} revisionType ;
-
-
-typedef enum
-{
-  UNKNOWN, /**< Channel type has not been initialized or is still unknown */
-  PROSLIC, /**< Channel type is a ProSLIC/FXS */
-  DAA      /**< Channel type is a DAA/FXO */
-} channelTypeType;
-
-/**
-* These are the error codes for ProSLIC failures
-*/
-typedef enum
-{
-  RC_IGNORE = 0,
-  RC_NONE= 0,           /**< Means the function did not encounter an error */
-  RC_TEST_PASSED = 0,
-  RC_TEST_FAILED = 1,
-  RC_COMPLETE_NO_ERR = 1,   /**< A test completed, no error detected */
-  RC_POWER_ALARM_Q1,
-  RC_POWER_ALARM_Q2,
-  RC_POWER_ALARM_Q3,
-  RC_POWER_ALARM_Q4,
-  RC_POWER_ALARM_Q5,
-  RC_POWER_ALARM_Q6,
-  RC_SPI_FAIL,         /**< SPI Communications failure */
-  RC_POWER_LEAK,
-  RC_VBAT_UP_TIMEOUT,
-  RC_VBAT_OUT_OF_RANGE,
-  RC_VBAT_DOWN_TIMEOUT,
-  RC_TG_RG_SHORT,
-  RC_CM_CAL_ERR,
-  RC_RING_FAIL_INT,
-  RC_CAL_TIMEOUT,
-  RC_PATCH_ERR,
-  RC_BROADCAST_FAIL,           /**< Broadcast unavailable for requested operation */
-  RC_UNSUPPORTED_FEATURE,      /**< Feature is not supported by the chipset*/
-  RC_CHANNEL_TYPE_ERR,         /**< Channel type does not support called function */
-  RC_GAIN_DELTA_TOO_LARGE,     /**< Requested gain delta too large */
-  RC_GAIN_OUT_OF_RANGE,        /**< Gain requested exceeds range */
-  RC_POWER_ALARM_HVIC,         /**< Power alarm on HVIC */
-  RC_POWER_ALARM_OFFLD,        /**< Power alarm on offload transistor */
-  RC_THERMAL_ALARM_HVIC,       /**< Thermal alarm detected */
-  RC_NO_MEM,                   /**< Out of memory */
-  RC_INVALID_GEN_PARAM,        /**< Invalid general parameter */
-  RC_LINE_IN_USE,              /**< Line is in use (LCS detected) */
-  RC_RING_V_LIMITED,           /**< Ringer voltage limited - signal may be clipped */
-  RC_PSTN_CHECK_SINGLE_FAIL,   /**< PSTN detect single current exceeds limit */
-  RC_PSTN_CHECK_AVG_FAIL,      /**< PSTN detect average current exceeds limit */
-  RC_VDAA_ILOOP_OVLD,          /**< Overload detected */
-  RC_UNSUPPORTED_OPTION,       /**< Function parameter is not supported at this time */
-  RC_FDT_TIMEOUT,              /**< Timeout waiting for valid frame detect */
-  RC_PSTN_OPEN_FEMF,           /**< Detected FEMF, device left in open state */
-  RC_VDAA_PAR_HANDSET_DET,     /**< Parallel handset detected */
-  RC_VDAA_PAR_HANDSET_NOT_DET, /**< Parallel handset not detected */
-  RC_PATCH_RAM_VERIFY_FAIL,    /**< Patch RAM verification failure */
-  RC_PATCH_ENTRY_VERIFY_FAIL,  /**< Patch entry table verification failure */
-  RC_UNSUPPORTED_DEVICE_REV,   /**< Device revision not supported */
-  RC_INVALID_PATCH,            /**< No patch for selected options */
-  RC_INVALID_PRESET,           /**< Invalid Preset value */
-  RC_TEST_DISABLED,            /**< Test Not enabled */
-  RC_RING_START_FAIL,          /**< Ringing failed to start */
-  RC_MWI_ENABLE_FAIL,          /**< Failed to enable MWI feature */
-  RC_MWI_IN_USE,               /**< MWI active and unable to be modified */
-  RC_MWI_NOT_ENABLED,          /**< MWI not enabled */
-  RC_DCDC_SETUP_ERR,           /**< DCDC not properly initialized prior to powerup */
-  RC_PLL_FREERUN_ACTIVE,       /**< PLL In Freerun Mode */
-  RC_UNSUPPORTED_VDC_RANGE,    /**< VDC Range Unsupported */
-  RC_NON_FATAL_INIT_ERR,       /**< Generic error to indicate a non-fatal error during init */
-  RSPI_CONNECTION_FAILED,      /**< Client disconnected from server or vice versa */
-  RC_REINIT_REQUIRED = 255     /**< Soft Reset Required */
-} errorCodeType;
-
-/**********************************************************************/
-/**
- * @defgroup PROLSIC_BRD_DESIGN Board design settings
- * @{
- */
-/**
-*  BOM Option Tag - refer to hardware design
-*/
-
-typedef enum
-{
-  DEFAULT,                      /**< DCDC: Unspecified */
-  BO_DCDC_FLYBACK,              /**< DCDC: flyback design */
-  BO_DCDC_LCQC_7P6W,            /**< DCDC: quasi-cuk design */
-  BO_DCDC_QCUK = BO_DCDC_LCQC_7P6W, /**< @deprecated DCDC: quasi-cuk design (deprecated name, use BO_DCDC_LCQC_7P6W) */
-  BO_DCDC_BUCK_BOOST,           /**< DCDC: BJT buck-boost design */
-  BO_DCDC_LCQC_3W,               /**< DCDC: low-cost quasi-cuk design */
-  BO_DCDC_LCQCUK = BO_DCDC_LCQC_3W, /**< DCDC: low-cost quasi-cuk design */
-  BO_DCDC_P_BUCK_BOOST_5V,      /**< @deprecated DCDC: PMOS buck-boost 5v design */
-  BO_DCDC_P_BUCK_BOOST_12V,     /**< @deprecated DCDC: PMOS buck-boost 12v design */
-  BO_DCDC_P_BUCK_BOOST_12V_HV,  /**< @deprecated DCDC: PMOS buck-boost 12v design, high voltage */
-  BO_DCDC_CUK,                  /**< DCDC: full cuk design */
-  BO_DCDC_PMOS_BUCK_BOOST,      /**< @deprecated DCDC: PMOS buck-boost design */
-  BO_DCDC_LCQC_6W,              /**< DCDC: low cost quasi-cuk design, 6W capability */
-  BO_DCDC_LCQC_5W,               /**< DCDC: low cost quasi-cuk design, 5W capability - '180 & '280 parts */
-  BO_DCDC_LCCB,                 /**< DCDC: low cost capacitive boost design - '180 & '280 parts */
-  BO_DCDC_LCUB,
-  BO_DCDC_LCCB110,
-  BO_DCDC_LCFB
-} bomOptionsType;
-
-/**
-*  VDC input voltage range option tags - please refer hardware design
-*/
-typedef enum
-{
-  VDC_3P0_6P0,
-  VDC_4P5_16P0,
-  VDC_4P5_27P0,
-  VDC_7P0_20P0,
-  VDC_8P0_16P0,
-  VDC_9P0_15P0,
-  VDC_9P0_16P0,
-  VDC_9P0_24P0,
-  VDC_10P8_20P0,
-  VDC_27P0_42P0,
-  VDC_10P8_13P2
-} vdcRangeType;
-
-/**
-*  Battery Rail option tags - please refer hardware design
-*/
-typedef enum
-{
-  BO_DCDC_TSS,        /**< Used for Fixed Rail DC-DC supplies */
-  BO_DCDC_TRACKING,   /**< Used for Tracking DC-DC supplies */
-  BO_DCDC_EXTERNAL,   /**< Used for external fixed rail supplies */
-  BO_DCDC_TSS_ISO,    /**< Used for isolated TSS supplies */
-  BO_DCDC_QSS,        /**< Used for QSS Designs */
-  BO_DCDC_FIXED_RAIL = BO_DCDC_TSS     /**< Fixed rail replaced by TSS */
-#ifndef SIVOICE_CFG_NEWTYPES_ONLY
-  ,FIXED = BO_DCDC_FIXED_RAIL /**< @deprecated use BO_DCDC_FIXED_RAIL */
-  ,TRACKING = BO_DCDC_TRACKING  /**< @deprecated use BO_DCDC_TRACKING */
-#endif
-  ,BO_DCDC_UNKNOWN
-} batRailType;
-
-/**
-*  FET Gate Driver option tags
-*/
-
-typedef enum
-{
-  BO_GDRV_NOT_INSTALLED = 0,
-  BO_GDRV_INSTALLED     = 1
-} gateDriveType;
-
-/**
-*  Auto ZCAL Enable option tags
-*/
-
-typedef enum
-{
-  AUTO_ZCAL_DISABLED  = 0,
-  AUTO_ZCAL_ENABLED   = 1
-} autoZcalType;
-
-/**
-*  VDAA Support option tags
-*/
-typedef enum
-{
-  VDAA_DISABLED = 0,
-  VDAA_ENABLED  = 1
-} vdaaSupportType;
-
-/**
-*  PM BOM Support option tags
-*/
-
-typedef enum
-{
-  BO_STD_BOM,
-  BO_PM_BOM
-} pmBomType;
-
-/**
-* Initialization options to allow init flow and/or content to be
-* altered at runtime
-*/
-typedef enum
-{
-  INIT_NO_OPT,        /**<  No initialization option */
-  INIT_REINIT,        /**<  Reinitialization option */
-  INIT_NO_CAL,        /**<  Skip calibration only - DEBUG use only */
-  INIT_NO_PATCH_LOAD, /**<  Skip patch load - DEBUG use only */
-  INIT_SOFTRESET      /**<  SLIC is running after a SOC reset */
-} initOptionsType;
-
-/**
-** This is the main Voice device object
-*/
-typedef struct
-{
-  SiVoiceControlInterfaceType
-  *ctrlInterface;           /**< How do we talk to the system? User supplied functions are connected here */
-  revisionType chipRev;     /**< What revision is the chip? */
-  partNumberType chipType;  /**< What member of the particular family is this chip? */
-  uInt8 lsRev;              /**< DAA: what rev is the line side chip? */
-  uInt8 lsType;             /**< DAA: what type is the line side chip */
-} SiVoiceDeviceType;
-
-typedef SiVoiceDeviceType *SiVoiceDeviceType_ptr; /**< Shortcut typedef */
-
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-/*
-** Defines structure for storing MWI params
-*/
-typedef struct
-{
-  ramData ringof;
-  ramData ringamp;
-  ramData vbatr_expect;
-  ramData vov_ring_bat;
-  ramData vov_ring_gnd;
-  ramData rtacth;
-  ramData rtdcth;
-  ramData iring_lim;
-  ramData dcdc_rngtype;
-  ramData slope_ring;
-  ramData rtper;
-  ramData ringfr;
-  ramData rtdcdb;
-  ramData lcrmask;
-  ramData dcdc_oithresh_lo;
-  uInt8 enhance;
-  uInt8 ringcon;
-  uInt8 userstat;
-  uInt8 linefeed;
-} SiVoice_MWI_Store;
-#endif
-
-/* Define a complete ring cadence */
-typedef struct
-{
- uInt32 steps;  /* In ticks */
- uInt32 onTime;
- uInt32 offTime; /* "" */
- uInt32 step_size;
- uInt32 von;
- uInt32 voff;
-} SiVoice_MWI_poll_t;
-
-typedef enum
-{
-  PROSLIC_MWI_ON,
-  PROSLIC_MWI_OFF,
-  PROSLIC_MWI_RAMP_ON,
-  PROSLIC_MWI_RAMP_OFF
-} SiVoice_MWIrampStates_t;
-
-typedef struct
-{
-  SiVoice_MWI_poll_t       poll;
-  SiVoice_MWIrampStates_t  state;
-  uInt32                   ticks; /* How many ticks left to next state? */
-} SiVoice_MWIrampState_t;
-
-/**
-** This is the main ProSLIC channel object
-*/
-typedef struct
-{
-  SiVoiceDeviceType_ptr
-  deviceId;             /**< Information about the device associated with this channel */
-  uInt8 channel;        /**< Which channel is this device? This is a system parameter meaning if you have 2 dual channel devices in your system, this number would then typically go from 0-3 */
-  channelTypeType channelType; /**< Is this a ProSLIC or a DAA */
-  errorCodeType error;  /**< Storage for the current error state - used only for APIs that don't return back an error */
-  int debugMode;        /**< Are we debugging on this channel? */
-  int channelEnable;    /**<  is the channel enabled or not? If not, this channel is not initialized */
-  bomOptionsType bomOption; /**< Device/PCB specific */
-  uInt8 dcdc_polarity_invert;  /**<  Invert DCDC polarity from what is provided in general parameters */
-  uInt8 scratch;        /**< Internal use only */
-  uInt8 scratch2;       /**< Internal use only */
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-  SiVoice_MWI_Store mwiSave;
-  SiVoice_MWIrampState_t mwiState;
-#endif
-} SiVoiceChanType;
-
-
-typedef SiVoiceChanType *SiVoiceChanType_ptr;
-/** @} */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_IF_CFG  SiVoice System control interface functions
- *
- * These functions are used by the ProSLIC API to access system resources
- * such as SPI/GCI access, memory allocation/deallocation and timers.
- *
- * @{
- */
-/*****************************************************************************/
-/** @defgroup SIVOICE_MEMORY_IF SiVoice Memory allocation/deallocation
- *
- * These functions dynamically allocate and deallocate memory for the given
- * structures. malloc() and memset() are called for allocation and free() is
- * called for deallocation.  These functions are typically called during
- * initialization of the API and at the tear down of the API.  If customers
- * prefer to use statically allocated structures, then they must ensure that
- * the structure elements are zero'ed out.
- *
- * @{
- */
-
-/**
- @brief
- *  Allocate memory and initialize the given structure.
- *
- * @param[in,out] pCtrlIntf - the structure to initialize
- * @param[in] interface_count - number of device interfaces present.  Typically 1 interface per SPI controller.
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa SiVoice_destroyControlInterfaces
- */
-
-int SiVoice_createControlInterfaces (SiVoiceControlInterfaceType **pCtrlIntf,
-                                     uInt32 interface_count);
-#define SiVoice_createControlInterface(X) SiVoice_createControlInterfaces((X),1)
-
-/**
- @brief
- *  Destroys the given structure and deallocates memory.
- *
- * @param[in,out] pCtrlIntf  - the structure to destroy/deallocate
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa SiVoice_createControlInterfaces
- */
-
-int SiVoice_destroyControlInterfaces (SiVoiceControlInterfaceType **pCtrlIntf);
-#define SiVoice_destroyControlInterface SiVoice_destroyControlInterfaces
-
-/**
- @brief
- *  Allocate memory and initialize the given structure.
- *
- * @param[in,out] pDev - the structure to initialize
- * @param[in] device_count - number of devices to allocate.
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa SiVoice_destroyDevices
- */
-
-int SiVoice_createDevices (SiVoiceDeviceType **pDev, uInt32 device_count);
-#define SiVoice_createDevice(X) SiVoice_createDevices((X),1)
-
-/**
- @brief
- *  Destroys the given structure and deallocates memory.
- *
- * @param[in,out] pDev - the structure to destroy/deallocate
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa SiVoice_createDevices
- */
-
-int SiVoice_destroyDevices (SiVoiceDeviceType **pDev);
-
-#define SiVoice_destroyDevice SiVoice_destroyDevices
-
-/**
- @brief
- *  Allocate memory and initialize the given structure.
- *
- * @param[in,out] pChan - the structure to initialize
- * @param[in] channel_count - number of channels to allocate.
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa SiVoice_destroyChannels
- */
-
-int SiVoice_createChannels (SiVoiceChanType_ptr *pChan, uInt32 channel_count);
-
-#define SiVoice_createChannel(X) SiVoice_createChannels((X),1)
-
-/**
- @brief
- *  Destroys the given structure and deallocates memory.
- *
- * @param[in,out] pChan - the structure to destroy/deallocate
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa SiVoice_createChannels
- */
-
-#define SiVoice_destroyChannel SiVoice_destroyChannels
-int SiVoice_destroyChannels (SiVoiceChanType_ptr *pChan);
-/** @} SIVOICE_MEMORY_IF */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_IO SiVoice SPI/GCI access routines
- * This group of functions are used to associate the transport mechanism (SPI, GCI) functions with the API.  The actual
- * functions being references are normally implemented by the customer for their particular OS and platform.
- *
- * @{
- */
-
-/**
- @brief
- *  Associate a interface object with a user supplied data structure.  This
- *  structure is passed to all the I/O routines that the ProSLIC API calls.
- *
- * @param[in,out] pCtrlIntf - which interface to associate
- *                the user supplied structure with.
- * @param[in] *hCtrl - the user supplied structure that is passed to the IO functions.
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceCtrlObj (SiVoiceControlInterfaceType *pCtrlIntf,
-                                        void *hCtrl);
-
-/**
- @brief
- *  Associate a interface object with the reset function.
- *
- * @param[in,out] pCtrlIntf - which interface to associate
- *                the user supplied function with.
- * @param[in] Reset_fptr - the reset function pointer
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceReset (SiVoiceControlInterfaceType *pCtrlIntf,
-                                      ctrl_Reset_fptr Reset_fptr);
-
-/**
- @brief
- *  Associate a interface object with the register write function.
- *
- * @param[in,out] pCtrlIntf - which interface to associate
- *                the user supplied function with.
- * @param[in] WriteRegister_fptr - the register write function pointer
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceWriteRegister (SiVoiceControlInterfaceType
-    *pCtrlIntf, ctrl_WriteRegister_fptr WriteRegister_fptr);
-
-/**
- @brief
- *  Associate a interface object with the register read function.
- *
- * @param[in,out] pCtrlIntf - which interface to associate
- *                the user supplied function with.
- * @param[in] ReadRegister_fptr- the register read function pointer
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceReadRegister (SiVoiceControlInterfaceType
-    *pCtrlIntf, ctrl_ReadRegister_fptr ReadRegister_fptr);
-
-/**
- @brief
- *  Associate a interface object with the write RAM function.
- *
- * @param[in,out] pCtrlIntf - which interface to associate
- *                the user supplied function with.
- * @param[in] WriteRAM_fptr - the reset function pointer
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceWriteRAM (SiVoiceControlInterfaceType *pCtrlIntf,
-    ctrl_WriteRAM_fptr WriteRAM_fptr);
-
-/**
- @brief
- *  Associate a interface object with the read RAM function.
- *
- * @param[in,out] pCtrlIntf - which interface to associate
- *                the user supplied function with.
- * @param[in]  ReadRAM_fptr - the read RAM function pointer
- *
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceReadRAM (SiVoiceControlInterfaceType *pCtrlIntf,
-                                        ctrl_ReadRAM_fptr ReadRAM_fptr);
-/** @} SIVOICE_IO */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_TIMER SiVoice Timer functions
- *
- * This group of functions associates the customer supplied timer routines with
- * the ProSLIC API. Please note, for most applications, only the delay routine
- * is required.  The other routines are needed for the pulse digit API.
- * @{
- */
-
-/**
- @brief
- *  This function associates a timer object - which is user defined, but it is
- *  used with ALL channels of the particular control interface.
- *
- *  @param[in] pCtrlIntf which control interface to associate the given timer object with.
- *  @param[in] *hTimer - the timer ojbect that is passed to all timer functions.
- *  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- *  @sa SiVoice_setControlInterfaceDelay SiVoice_setControlInterfaceTimeElapsed SiVoice_setControlInterfaceGetTime PROSLIC_TIMER
- */
-
-int SiVoice_setControlInterfaceTimerObj (SiVoiceControlInterfaceType *pCtrlIntf,
-    void *hTimer);
-
-/**
- @brief
- *  Associate a timer delay function with a given control interface.  The
- *  delay function takes in an argument of the timer object and the time in mSec
- *  and delays the thread/task for at least the time requested.
- *
- * @param[in] pCtrlIntf - which control interface to associate the function with.
- * @param[in] Delay_fptr - the pointer to the delay function.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- *  @sa SiVoice_setControlInterfaceTimerObj SiVoice_setControlInterfaceTimeElapsed SiVoice_setControlInterfaceGetTime PROSLIC_TIMER
- */
-
-int SiVoice_setControlInterfaceDelay (SiVoiceControlInterfaceType *pCtrlIntf,
-                                      system_delay_fptr Delay_fptr);
-
-/**
- *  Description:
- *   Associate a time elapsed function with a given control interface.  The
- *   time elapsed function uses the values from the function specified in
- *   @ref SiVoice_setControlInterfaceGetTime and computes the delta time
- *   in mSec.
- *  @param[in] pCtrlIntf - which control interface to associate the function with.
- *  @param[in] timeElapsed_fptr - the pointer to the elapsed time function.
- *  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *  @sa SiVoice_setControlInterfaceTimerObj SiVoice_setControlInterfaceGetTime SiVoice_setControlInterfaceDelay PROSLIC_TIMER
- */
-
-int SiVoice_setControlInterfaceTimeElapsed (SiVoiceControlInterfaceType
-    *pCtrlIntf, system_timeElapsed_fptr timeElapsed_fptr);
-
-/**
- *  Description:
- *   Associate a time get function with a given control interface.  The
- *   time get function returns a value in a form of a void pointer that
- *   is suitable to be used with the function specified in @ref SiVoice_setControlInterfaceTimeElapsed .
- *   This is typically used as a timestamp of when an event started. The resolution needs to be in terms
- *   of mSec.
- *
- *  @param[in] pCtrlIntf - which control interface to associate the function with.
- *  @param[in] getTime_fptr -  the pointer to the get time function.
- *  @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *  @sa SiVoice_setControlInterfaceTimerObj SiVoice_setControlInterfaceTimeElapsed SiVoice_setControlInterfaceDelay PROSLIC_TIMER
- */
-
-int SiVoice_setControlInterfaceGetTime (SiVoiceControlInterfaceType *pCtrlIntf,
-                                        system_getTime_fptr getTime_fptr);
-
-/** @} SIVOICE_TIMER */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_PROC_CONTROL SiVoice Process control
- * @{
- */
-
-/**
- @brief
- *  This function associates a user defined semaphore/critical section
- *  function with the given interface.
- *
- * @param[in,out] pCtrlIntf the interface to associate the function with.
- * @param[in] semaphore_fptr - the function pointer for semaphore control.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int SiVoice_setControlInterfaceSemaphore (SiVoiceControlInterfaceType
-    *pCtrlIntf, ctrl_Semaphore_fptr semaphore_fptr);
-
-/** @} SIVOICE_PROC_CONTROL */
-/*****************************************************************************/
-/** @} SIVOICE_IF_CFG*/
-/*****************************************************************************/
-/** @defgroup SIVOICE_INIT Initialization routines
- * @{
- */
-
-/**
- @brief
- *  This function initializes the various channel structure elements.
- *  This function does not access the chipset directly, so SPI/GCI
- *  does not need to be up during this function call.
- *
- * @param[in,out] hProslic - which channel to initialize.
- * @param[in] channel - Which channel index is this.  For example, for a 4 channel system, this would typically range from 0 to 3.
- * @param[in] chipType - chipset family type for example @ref SI3217X_TYPE or @ref SI3217X_TYPE
- * @param[in] pDeviceObj - Device structure pointer associated with this channel
- * @param[in] pCtrlIntf - Control interface associated with this channel
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_SWInitChan
- */
-
-int SiVoice_SWInitChan (SiVoiceChanType_ptr hProslic,int channel,int chipType,
-                        SiVoiceDeviceType *pDeviceObj, SiVoiceControlInterfaceType *pCtrlIntf);
-
-/**
- @brief
- * This function calls the user supplied reset function to put and take out the channel from reset. This is
- * typically done during initialization and may be assumed to be a "global" reset - that is 1 reset per
- * daisychain vs. 1 per device.
- *
- * @note This function can take more than 500 mSec to complete.
- *
- * @param[in] pChan - which channel to reset, if a "global reset", then any channel on the daisy chain is sufficient.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int SiVoice_Reset (SiVoiceChanType_ptr pChan);
-
-/** @} SIVOICE_INIT */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_DEBUG Debug
- * @{
- */
-
-/**
- @brief
- * This function enables or disables the debug mode, assuming @ref ENABLE_DEBUG is set in the configuration file.
- *
- * @param[in] pChan - which channel to set the debug flag.
- * @param[in] debugEn - 0 = Not set, 1 = set.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int SiVoice_setSWDebugMode (SiVoiceChanType_ptr pChan, int debugEn);
-
-/**
- @brief
- * This function enables or disables the debug mode, assuming @ref ENABLE_TRACES is set in the configuration file.
- *
- * @param[in] pChan - which channel to set the debug flag.
- * @param[in] traceEn - 0 = Not set, 1 = set.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int SiVoice_setTraceMode (SiVoiceChanType_ptr pChan, int traceEn);
-
-/**
- * @brief
- * This function allows access to SPI read register function pointer from interface
- *
- * @param[in] hProslic - pointer to channel structure
- * @param[in] addr - address to read
- * @retval uInt8 - register contents
- *
- */
-
-uInt8 SiVoice_ReadReg (SiVoiceChanType_ptr hProslic, uInt8 addr);
-
-/**
- * @brief
- * This function allows access to SPI write register function pointer from interface
- *
- * @param[in] pProslic - pointer to channel structure
- * @param[in] addr - address to write
- * @param[in] data to be written
- * @retval int - @ref RC_NONE
- *
- */
-int SiVoice_WriteReg (SiVoiceChanType_ptr pProslic, uInt8 addr, uInt8 data);
-
-/** @} SIVOICE_DEBUG */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_ERROR Return code functions
- * @{
- */
-
-/**
- @brief
- * This function returns the error flag that may be set by some function in where
- * @ref errorCodeType is not returned.
- *
- * @note For functions that DO return errorCodeType, the return value here is undefined.
- *
- * @param[in] pChan - which channel to clear the error flag
- * @param[in,out] *error - The current value of error flag.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa SiVoice_clearErrorFlag
- */
-
-int SiVoice_getErrorFlag (SiVoiceChanType_ptr pChan, int *error);
-
-/**
- @brief
- *  This function clears the error flag that may be set by some function in where
- *  @ref errorCodeType is not returned.
- *
- * @param[in,out] pChan - which channel to clear the error flag
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa SiVoice_getErrorFlag
- */
-
-int SiVoice_clearErrorFlag (SiVoiceChanType_ptr pChan);
-
-/** @} SIVOICE_ERROR */
-
-/*****************************************************************************/
-/** @defgroup SIVOICE_ENABLE Enable/disable channels (for init)
- * @{
- */
-/**
- @brief
- *  This function sets the channel enable status.  If NOT set, then when
- *  the various initialization routines such as @ref SiVoice_SWInitChan is called,
- *  then this particular channel will NOT be initialized.
- *
- *  This function does not access the chipset directly, so SPI/GCI
- *  does not need to be up during this function call.
- *
- * @param[in,out] pChan - which channel to return the status.
- * @param[in] chanEn - The new value of the channel enable field. 0 = NOT enabled, 1 = enabled.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa SiVoice_getChannelEnable
- */
-
-int SiVoice_setChannelEnable (SiVoiceChanType_ptr pChan, int chanEn);
-
-/**
- @brief
- *  This function returns back if the channel is enabled or not.
- *  This function does not access the chipset directly, so SPI/GCI
- *  does not need to be up during this function call.
- *
- * @param[in] pChan - which channel to return the status.
- * @param[in,out] chanEn* - The current value of if the channel is enabled. 0 = NOT enabled, 1 = enabled.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa SiVoice_setChannelEnable
- */
-
-int SiVoice_getChannelEnable (SiVoiceChanType_ptr pChan, int *chanEn);
-
-/** @} SIVOICE_ENABLE */
-/** @defgroup SIVOICE_MISC Other functions that don't fit into other categories
- * @{
- */
-/**
- @brief
- * This function returns the current version of the ProSLIC API release as
- * a NULL terminated string.
- * @retval char * - string containing the API release string.
- */
-char *SiVoice_Version(void);
-
-/**
- * @brief
- * This function probes an array of channel pointers to determine the number of
- * ProSLIC's,if not NULL and DAA's, if not NULL. Should only be called after a reset.
- * @param[in,out] pProslic - an array of channel pointers to iterate through.  ChannelType is modified.
- * @param[in] size - number of channels to pobe.
- * @param[out] slicCount - if not NULL, the number of SLIC's detected.
- * @param[out] daaCount - if not NULL, the number of DAA's detected.
- * @retval RC_NONE if successful.
- */
-int SiVoice_IdentifyChannels(SiVoiceChanType_ptr *pProslic, int size,
-                             int *slicCount, int *daaCount);
-
-/** @} SIVOICE_MISC */
-
-/*****************************************************************************/
-/** @} SIVOICE */
-#endif
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice_ctrl.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice_ctrl.h
deleted file mode 100644
index 4eb5178..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice_ctrl.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * si_voice_ctrl.h
- * SPI driver header file
- *
- * Author(s):
- * laj
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * File Description:
- * This is the header file for the control driver used
- * in the ProSLIC demonstration code.
- *
- *
- */
-
-#ifndef CTRL_H
-#define CTRL_H
-
-/** @defgroup PROSLIC_CUSTOMER_APIS Customer implemented functions
- * This section has documentation related to APIs that the customer
- * needs to implement to allow the ProSLIC API to function correctly.
- *
- * @note Please note, in addition to the functions mentioned here, the
- * customer will need to review/modify si_voice_datatypes.h to match
- * the native datatypes of their system.
- *
- * @{
- */
-/*****************************************************************************/
-/** @defgroup PROSLIC_CUSTOMER_CONTROL Customer implemented control functions
- * This group of function pointer prototypes need to be implemented by the
- * customer in order for the ProSLIC API to function correctly.  These functions
- * need to be associated with the API by the functions documented in @ref SIVOICE_IO
- * @{
- */
-
-/**
-* @brief
-* Sets/clears the reset pin of all the ProSLICs/VDAAs
-*
-* @param[in] *hCtrl - which interface to reset (this is a customer supplied structure)
-* @param[in] in_reset -  0 = Take the device out of reset, 1 = place the device(s) in reset
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*/
-
-typedef int (*ctrl_Reset_fptr) (void *hCtrl, int in_reset);
-
-/**
-* @brief
-* Register write function pointer
-*
-* @param[in] *hCtrl - which interface to communicate through (this is a customer supplied structure)
-* @param[in] channel - ProSLIC channel to write to (this is the value passed is the same as found in @ref SiVoice_SWInitChan)
-* @param[in] regAddr -  Address of register to write
-* @param[in] data - data to write to register
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-*/
-
-typedef int (*ctrl_WriteRegister_fptr) (void *hCtrl, uInt8 channel,
-                                        uInt8 regAddr, uInt8 data);
-
-/**
-* @brief
-* RAM write function pointer
-*
-* @param[in] *hCtrl - which interface to communicate through (this is a customer supplied structure)
-* @param[in] channel - ProSLIC channel to write to (this is the value passed is the same as found in @ref SiVoice_SWInitChan)
-* @param[in] ramAddr - Address of the RAM location to write
-* @param[in] ramData - data to write to the RAM location
-* @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*
-*/
-
-typedef int (*ctrl_WriteRAM_fptr) (void *hCtrl, uInt8 channel, uInt16 ramAddr,
-                                   ramData data);
-
-/**
-* @brief
-* Register read function pointer
-*
-* @param[in] *hCtrl - which interface to communicate through (this is a customer supplied structure)
-* @param[in] channel - ProSLIC channel to read from (this is the value passed is the same as found in @ref SiVoice_SWInitChan)
-* @param[in] regAddr -  Address of register to read from
-* @retval uInt8 - the value read. If an error occurs, this value is undefined.
-*/
-
-typedef uInt8 (*ctrl_ReadRegister_fptr) (void *hCtrl, uInt8 channel,
-    uInt8 regAddr);
-
-/**
-* @brief
-* RAM read function pointer
-*
-* @param[in] *hCtrl - which interface to communicate through (this is a customer supplied structure)
-* @param[in] channel - ProSLIC channel to read from (this is the value passed is the same as found in @ref SiVoice_SWInitChan)
-* @param[in] ramAddr - Address of the RAM location to read from
-* @retval ramData - the value read. If an error occurs, this value is undefined.
-*/
-
-typedef ramData (*ctrl_ReadRAM_fptr) (void *hCtrl, uInt8 channel,
-                                      uInt16 ramAddr);
-
-/**
- * @brief
- *  Critical Section/Semaphore function pointer
- *
-* @param[in] *hCtrl - which interface to communicate through (this is a customer supplied structure)
-* @param[in] in_critical_section - request to lock the critical section 1 = lock, 0 = unlock
-* @retval 1 = success, 0 = failed
-*/
-
-typedef int (*ctrl_Semaphore_fptr) (void *hCtrl, int in_critical_section);
-
-/** @} PROSLIC_CUSTOMER_CONTROL */
-/** @} */
-#endif
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice_timer_intf.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice_timer_intf.h
deleted file mode 100644
index b4be48f..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/si_voice_timer_intf.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * System specific functions header file
- *
- * Author(s):
- * laj
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * File Description:
- * This is the header file for the system specific functions like timer functions.
- *
- *
- */
-
-#ifndef TIMER_INTF_H
-#define TIMER_INTF_H
-
-/** @addtogroup PROSLIC_CUSTOMER_APIS
- * @{
- * @defgroup PROSLIC_CUSTOMER_TIMER Customer implemented timer functions
- * This section has documentation related to timers: delays and timestamps.  The void * is a customer
- * supplied timer data structure that the user specifies in @ref SiVoice_setControlInterfaceTimerObj.
- * These functions need to be associated with the functions documented in @ref SIVOICE_TIMER
- *
- * @note For the majority of implementations, the only function that is required is the delay function.
- *
- * @{
- */
-
-/**
- * @brief
- * System time delay function pointer
- *
- * @param[in] hTimer - the system timer object
- * @param[in] timeInMS - number of mSec to suspend the task/thread executing.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
-*/
-
-typedef int (*system_delay_fptr) (void *hTimer, int timeInMs);
-
-/**
- * @brief
- * System time elapsed function pointer
- *
- * @details
- * This function combined with @ref system_getTime_fptr function allow one to determine
- * the time elapsed between the two event times.
- *
- * The example pseudo code below shows how one may see this function used in conjunction with
- * the function pointed by @ref system_getTime_fptr to do some processing while waiting
- * for a time to expire.
- *
- * @code
- * my_timer_obj time_now;
- *
- * getTime(my_prosclic_obj->timer_obj_ptr, (void *)(&time_now));
- *
- *  Some events occur here...
- *
- * do
- * {
- *     time_elapsed(my_proslic_obj->timer_obj_ptr,(void *)(&time_now), &elapsed_time_mSec);
- *
- *     Do something here...
- *
- *  }while(elapsed_time_mSec < Desired delay);
- *
- * Change state...
- *
- * @endcode
- *
- * @param[in] *hTimer - the system timer object
- * @param[in] *startTime - the time object returned by @ref system_getTime_fptr - the "start time" of the event.
- * @param[out] *timeInMs - the time in mSec between the "start time" and the current time.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa system_getTime_fptr
-*/
-
-typedef int (*system_timeElapsed_fptr) (void *hTimer, void *startTime,
-                                        int *timeInMs);
-
-/**
- * @brief
- * Retrieve system time in mSec resolution.
- *
- * @details
- * This function combined with @ref system_timeElapsed_fptr function allow one to determine
- * the time elapsed between the two event times.
- *
- * @param[in] *hTimer - the system timer object
- * @param[in] *time - the time stamp object needed by @ref system_timeElapsed_fptr
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa system_timeElapsed_fptr
-*/
-
-typedef int (*system_getTime_fptr) (void *hTimer, void *time);
-
-/** @}
- * @} */
-#endif
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/vdaa.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/vdaa.h
deleted file mode 100644
index 91ae85c..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/vdaa.h
+++ /dev/null
@@ -1,1144 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Vdaa  VoiceDAA interface header file
- *
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- * File Description:
- * This is the header file for the main  VoiceDAA API and is used
- * in the  VoiceDAA demonstration code.
- *
- *
- */
-
-#ifndef VDAA_INTF_H
-#define VDAA_INTF_H
-
-#include "../config_inc/si_voice_datatypes.h"
-#include "si_voice.h"
-/*****************************************************************************/
-/** @defgroup VDAA_API VDAA API
- * This section covers APIs and definitions related to the VDAA/FXO.
- * @{
- */
-
-/*
-** Constants
-*/
-#define BROADCAST 0xff
-#define LCS_SCALE_NUM 33		/* Line Current Status Scale */
-#define LCS_SCALE_DEN 10		/* Line Current Status Scale */
-
-/* Macro substitution from Vdaa legacy API's to SiVoice API's */
-#define Vdaa_createControlInterface SiVoice_createControlInterface
-#define Vdaa_destroyControlInterface SiVoice_destroyControlInterface
-#define Vdaa_createDevice SiVoice_createDevice
-#define Vdaa_destroyDevice SiVoice_destroyDevice
-#define Vdaa_createChannel SiVoice_createChannel
-#define Vdaa_destroyChannel SiVoice_destroyChannel
-
-#define Vdaa_setControlInterfaceCtrlObj SiVoice_setControlInterfaceCtrlObj
-#define Vdaa_setControlInterfaceReset SiVoice_setControlInterfaceReset
-#define Vdaa_setControlInterfaceWriteRAM SiVoice_setControlInterfaceWriteRAM
-#define Vdaa_setControlInterfaceReadRAM SiVoice_setControlInterfaceReadRAM
-#define Vdaa_setControlInterfaceWriteRegister SiVoice_setControlInterfaceWriteRegister
-#define Vdaa_setControlInterfaceReadRegister SiVoice_setControlInterfaceReadRegister
-#define Vdaa_setControlInterfaceTimerObj SiVoice_setControlInterfaceTimerObj
-#define Vdaa_setControlInterfaceDelay SiVoice_setControlInterfaceDelay
-#define Vdaa_setControlInterfaceSemaphore SiVoice_setControlInterfaceSemaphore
-#define Vdaa_setControlInterfaceTimeElapsed SiVoice_setControlInterfaceTimeElapsed
-#define Vdaa_setControlInterfaceGetTime SiVoice_setControlInterfaceGetTime
-
-#define Vdaa_SWInitChan SiVoice_SWInitChan
-
-#define Vdaa_setSWDebugMode SiVoice_setSWDebugMode
-#define Vdaa_getErrorFlag SiVoice_getErrorFlag
-#define Vdaa_clearErrorFlag SiVoice_clearErrorFlag
-
-#define Vdaa_setChannelEnable SiVoice_setChannelEnable
-#define Vdaa_getChannelEnable SiVoice_getChannelEnable
-
-#define Vdaa_Reset SiVoice_Reset
-#define Vdaa_Version SiVoice_Version
-
-#define SI3050_CHAN_PER_DEVICE 1
-
-/*
-**
-** VDAA Initialization/Configuration Parameter Options
-**
-*/
-/*
-** This defines names for the PCM Data Format
-*/
-typedef enum
-{
-  A_LAW = 0,	/**< 00 = A-Law. Signed magnitude data format */
-  U_LAW = 1,	/**< 01 = u-Law. Signed magnitude data format */
-  LINEAR_16_BIT = 3 /**< 11 = 16-bit linear (2s complement data format) */
-} tPcmFormat;
-
-/*
-** This defines names for the phcf bits
-*/
-typedef enum
-{
-  PCLK_1_PER_BIT = 0,
-  PCLK_2_PER_BIT = 1
-} tPHCF;
-
-
-/*
-** This defines names for the tri bit
-*/
-typedef enum
-{
-  TRI_POS_EDGE = 0,
-  TRI_NEG_EDGE = 1
-} tTRI;
-
-
-/**
-** This defines names for the AC impedance range
-*/
-typedef enum
-{
-  AC_600,				/**< 600 Ohms */
-  AC_900,				/**< 900 O */
-  AC_270__750_150,		/**< 270 O + (750 O || 150 nF) and 275 O + (780 O || 150 nF) */
-  AC_220__820_120,		/**< 220 O + (820 O || 120 nF) and 220 O + (820 O || 115 nF) */
-  AC_370__620_310,		/**< 370 O + (620 O || 310 nF) */
-  AC_320__1050_230,		/**< 320 O + (1050 O || 230 nF) */
-  AC_370__820_110,		/**< 370 O + (820 O || 110 nF) */
-  AC_275__780_115,		/**< 275 O + (780 O || 115 nF) */
-  AC_120__820_110,		/**< 120 O + (820 O || 110 nF) */
-  AC_350__1000_210,		/**< 350 O + (1000 O || 210 nF) */
-  AC_200__680_100,		/**< 200 O + (680 O || 100 nF) */
-  AC_600__2160,			/**< 600 O + 2.16 uF */
-  AC_900__1000,			/**< 900 O + 1 uF */
-  AC_900__2160,			/**< 900 O + 2.16 uF */
-  AC_600__1000,			/**< 600 O + 1 uF */
-  AC_Global_impedance		/**< Global impedance */
-} tAC_Z;
-
-/**
-** This defines names for the DC impedance range
-*/
-typedef enum
-{
-  DC_50,					/**< 50 Ohms dc termination is selected */
-  DC_800					/**< 800 Ohms dc termination is selected */
-
-} tDC_Z;
-
-/**
-** This defines names for the ringer impedance range
-*/
-typedef enum
-{
-  RZ_MAX = 0,
-  RZ_SYNTH = 1
-} tRZ;
-
-/**
-** This defines names for the dc voltage adjust
-*/
-typedef enum
-{
-  DCV3_1 = 0,
-  DCV3_2 = 1,
-  DCV3_35 = 2,
-  DCV3_5 = 3
-} tDCV;
-
-/**
-** This defines names for the minimum loop current
-*/
-typedef enum
-{
-  MINI_10MA = 0,
-  MINI_12MA = 1,
-  MINI_14MA = 2,
-  MINI_16MA = 3
-} tMINI;
-
-/**
-** This defines names for the current limiting enable bit
-*/
-typedef enum
-{
-  ILIM_DISABLED = 0,
-  ILIM_ENABLED = 1
-} tILIM;
-
-/**
-** This defines names for the ring detect interupt mode
-*/
-typedef enum
-{
-  RDI_BEG_BURST = 0,
-  RDI_BEG_END_BURST = 1
-} tRDI;
-
-/**
-** This defines names for the on hook speed / spark quenching
-*/
-typedef enum
-{
-  OHS_LESS_THAN_0_5MS = 0,
-  OHS_3MS = 1,
-  OHS_26MS = 0xE
-} tOHS;
-
-/**
-** This defines names for the hbe bit
-*/
-typedef enum
-{
-  HYBRID_DISABLED = 0,
-  HYBRID_ENABLED  = 1
-} tHBE;
-
-
-/**
-** Gain/Attenuation Select
-*/
-typedef enum
-{
-  XGA_GAIN,
-  XGA_ATTEN
-} tXGA;
-
-/**
-** MUTE Control Options
-*/
-typedef enum
-{
-  MUTE_DISABLE_ALL,
-  MUTE_DISABLE_RX,
-  MUTE_DISABLE_TX,
-  MUTE_ENABLE_RX,
-  MUTE_ENABLE_TX,
-  MUTE_ENABLE_ALL
-} tMUTE;
-
-/**
-** This defines names for the ring delay setting
-*/
-typedef enum
-{
-  RDLY_0MS = 0,
-  RDLY_256MS = 1,
-  RDLY_512MS = 2,
-  RDLY_768MS = 3,
-  RDLY_1024MS = 4,
-  RDLY_1280MS = 5,
-  RDLY_1536MS = 6,
-  RDLY_1792MS = 7
-} tRDLY;
-
-/**
-** This defines names for the ring timeouts
-*/
-typedef enum
-{
-  RTO_128MS = 1,
-  RTO_256MS = 2,
-  RTO_384MS = 3,
-  RTO_512MS = 4,
-  RTO_640MS = 5,
-  RTO_768MS = 6,
-  RTO_896MS = 7,
-  RTO_1024MS = 8,
-  RTO_1152MS = 9,
-  RTO_1280MS = 10,
-  RTO_1408MS = 11,
-  RTO_1536MS = 12,
-  RTO_1664MS = 13,
-  RTO_1792MS = 14,
-  RTO_1920MS = 15
-} tRTO;
-
-/**
-** This defines names for the ring timeouts
-*/
-typedef enum
-{
-  RCC_100MS = 0,
-  RCC_150MS = 1,
-  RCC_200MS = 2,
-  RCC_256MS = 3,
-  RCC_384MS = 4,
-  RCC_512MS = 5,
-  RCC_640MS = 6,
-  RCC_1024MS = 7
-} tRCC;
-
-/**
-** This defines names for the ring validation modes
-*/
-typedef enum
-{
-  RNGV_DISABLED = 0,
-  RNGV_ENABLED = 1
-} tRNGV;
-
-/**
-** This defines names for the rfwe bit
-*/
-typedef enum
-{
-  RFWE_HALF_WAVE = 0,
-  RFWE_FULL_WAVE = 1,
-  RFWE_RNGV_RING_ENV = 0,
-  RFWE_RNGV_THRESH_CROSS = 1
-} tRFWE;
-
-/**
-** This defines names for the rt and rt2 bit
-*/
-typedef enum
-{
-  RT__13_5VRMS_16_5VRMS = 0,
-  RT__19_35VRMS_23_65VRMS = 2,
-  RT__40_5VRMS_49_5VRMS = 3
-} tRT;
-
-/**
-** This defines names for the rt and rt2 bit
-*/
-typedef enum
-{
-  RGDT_ACTIVE_LOW = 0,
-  RGDT_ACTIVE_HI = 1
-} tRPOL;
-
-
-/**
-** This defines names for the interrupts
-*/
-typedef enum
-{
-  POLI,
-  TGDI,
-  LCSOI,
-  DODI,
-  BTDI,
-  FTDI,
-  ROVI,
-  RDTI,
-  CVI		/**< Current/Voltage Interrupt REGISTER#44 */
-} vdaaInt;
-
-/**
-** Interrupt Bitmask Fields
-*/
-typedef enum
-{
-  POLM = 1,
-  TGDM = 2,   /**< Si3050  Only */
-  LCSOM = 4,
-  DODM = 8,
-  BTDM = 16,
-  FDTM = 32,
-  ROVM = 64,
-  RDTM = 128
-} vdaaIntMask;
-
-
-/**
-** This defines names for the idl bit (obsolete)
-*/
-typedef enum
-{
-  IDL_DISABLED = 0,
-  IDL_ENABLED = 1
-} tIDL;
-
-/**
-** This defines names for the ddl bit (obsolete)
-*/
-typedef enum
-{
-  DDL_NORMAL_OPERATION = 0,
-  DDL_PCM_LOOPBACK = 1
-} tDDL;
-
-/**
-** Loopback Modes
-*/
-typedef enum
-{
-  LPBK_NONE = 0,
-  LPBK_IDL = 1,
-  LPBK_DDL = 2,
-  LPBK_PCML = 3
-} tLpbkMode;
-
-/**
-** Loopback Status
-*/
-typedef enum
-{
-  LPBK_DISABLED = 0,
-  LPBK_ENABLED = 1
-} tLpbkStatus;
-
-/**
-** This defines names for the interrupt pin modes
-*/
-typedef enum
-{
-  INTE_DISABLED = 0,
-  INTE_ENABLED = 1
-} tInte;
-
-/**
-** This defines names for the interrupt pin polarities
-*/
-typedef enum
-{
-  INTE_ACTIVE_LOW = 0,
-  INTE_ACTIVE_HIGH = 1
-} tIntePol;
-
-/**
-** This defines names for the pwm settings
-*/
-typedef enum
-{
-  PWM_DELTA_SIGMA = 0,
-  PWM_CONVENTIONAL_16KHZ = 1,
-  PWM_CONVENTIONAL_32KHZ = 2
-} tPwmMode;
-
-/**
-** PWME
-*/
-typedef enum
-{
-  PWM_DISABLED = 0,
-  PWM_ENABLED
-} tPWME;
-
-/**
-** RCALD control
-*/
-typedef enum
-{
-  RES_CAL_ENABLED = 0,
-  RES_CAL_DISABLED
-} tRCALD;
-
-/**
-** Voice DAA Hook states
-*/
-enum
-{
-  VDAA_DIG_LOOPBACK = 1,
-  VDAA_ONHOOK = 2,
-  VDAA_OFFHOOK = 3,
-  VDAA_ONHOOK_MONITOR = 4
-};
-
-/**
-** FDT Monitoring Options
-*/
-enum
-{
-  FDT_MONITOR_OFF = 0,
-  FDT_MONITOR_ON
-};
-
-
-/**
-** Offhook Speed Select
-*/
-typedef enum
-{
-  FOH_512,
-  FOH_128,
-  FOH_64,
-  FOH_8
-} tFOH;
-
-/**
-** Sample Rate Control
-*/
-typedef enum
-{
-  FS_8KHZ,
-  FS_16KHZ
-} tHSSM;
-
-/**
-** Line Voltage Force Disable
-*/
-typedef enum
-{
-  LVS_FORCE_ENABLED = 0,
-  LVS_FORCE_DISABLED
-} tLVFD;
-
-/**
-** Current/Voltage Monitor Select
-*/
-typedef enum
-{
-  CVS_CURRENT,
-  CVS_VOLTAGE
-} tCVS;
-
-/**
-** Current/Voltage Interrupt Polarity
-*/
-typedef enum
-{
-  CVP_BELOW,
-  CVP_ABOVE
-} tCVP;
-
-/**
-** Guarded Clear
-*/
-typedef enum
-{
-  GCE_DISABLED = 0,
-  GCE_ENABLED
-} tGCE;
-
-/**
-** SPI Mode (Si3050 Only)
-*/
-typedef enum
-{
-  SPIM_TRI_CS,
-  SPIM_TRI_SCLK
-} tSPIM;
-
-/**
-**  FILT
-*/
-typedef enum
-{
-  FILT_HPF_5HZ,
-  FILT_HPF_200HZ
-} tFILT;
-
-/**
-** IIRE
-*/
-typedef enum
-{
-  IIR_DISABLED = 0,
-  IIR_ENABLED
-} tIIRE;
-
-/**
-** FULL2
-*/
-typedef enum
-{
-  FULL2_DISABLED = 0,
-  FULL2_ENABLED
-} tFULL2;
-
-/**
-** FULL
-*/
-typedef enum
-{
-  FULL_DISABLED = 0,
-  FULL_ENABLED
-} tFULL;
-
-/**
-** RG1
-*/
-typedef enum
-{
-  RG1_DISABLED = 0,
-  RG1_ENABLED
-} tRG1;
-
-
-/**
-** -----------------------------
-** CONFIGURATION DATA STRUCTURES
-** -----------------------------
-*/
-
-/**
-** (Updated) Structure for General Parameters
-*/
-typedef struct
-{
-  tInte inte;             /* INTE */
-  tIntePol intp;          /* INTP */
-  tRCALD rcald;           /* RCALD */
-  tHSSM hssm;             /* HSSM */
-  tFOH foh;               /* FOH */
-  tLVFD lvfd;             /* LVFD */
-  tCVS cvs;               /* CVS */
-  tCVP cvp;               /* CVP */
-  tGCE gce;               /* GCE */
-  tIIRE iire;             /* IIRE */
-  tFULL2 full2;           /* FULL2 */
-  tFULL full;             /* FULL */
-  tFILT filt;             /* FILT */
-  tRG1 rg1;               /* RG1 */
-  tPwmMode pwmm;          /* PWMM Si3050 Only */
-  tPWME pwmEnable;        /* PWME Si3050 Only */
-  tSPIM spim;             /* SPIM Si3050 Only */
-} vdaa_General_Cfg;
-
-
-/**
-** (NEW) Structure for Country Presets
-*/
-typedef struct
-{
-  tRZ rz;
-  tDC_Z dcr;
-  tAC_Z acim;
-  tDCV dcv;
-  tMINI mini;
-  tILIM ilim;
-  tOHS ohs_sq;
-  tHBE hbe;
-} vdaa_Country_Cfg;
-
-/**
-** (NEW) Structure for Hybrid Presets
-*/
-typedef struct
-{
-  uInt8 hyb1;
-  uInt8 hyb2;
-  uInt8 hyb3;
-  uInt8 hyb4;
-  uInt8 hyb5;
-  uInt8 hyb6;
-  uInt8 hyb7;
-  uInt8 hyb8;
-} vdaa_Hybrid_Cfg;
-
-/**
-** Structure for PCM configuration presets
-*/
-typedef struct
-{
-  tPcmFormat pcmFormat;
-  tPHCF pcmHwy;
-  tTRI pcm_tri;
-} vdaa_PCM_Cfg;
-
-/** @addtogroup VDAA_AUDIO
- * @{
- */
-/** @addtogroup VDAA_GAIN_CONTROL
- * @{
- */
-/*
-** (Updated) Structure for Audio path gain preset
-*/
-typedef struct
-{
-  uInt8		mute;
-  tXGA		xga2;
-  uInt8   	acgain2;
-  tXGA		xga3;
-  uInt8   	acgain3;
-  uInt8		callProgress;
-  BOOLEAN     cpEn;
-} vdaa_audioGain_Cfg;
-
-/** @} VDAA_GAIN_CONTROL*/
-/** @} */
-/*
-** Structure for configuring ring detect config
-*/
-
-typedef struct
-{
-  tRDLY rdly;
-  tRT rt;
-  uInt8 rmx;
-  tRTO rto;
-  tRCC rcc;
-  tRNGV rngv;
-  uInt8 ras;
-  tRFWE rfwe;
-  tRDI rdi;
-  tRPOL rpol;
-} vdaa_Ring_Detect_Cfg;
-
-
-/*
-** Defines structure of interrupt data
-*/
-typedef struct
-{
-  vdaaInt *irqs;
-  uInt8 number;
-} vdaaIntType;
-
-/*
-** Defines structure for configuring Loop Back
-*/
-typedef struct
-{
-  tIDL isoDigLB;
-  tDDL digDataLB;
-} vdaa_Loopback_Cfg;
-
-
-/*
-** Generic Flag
-*/
-typedef enum
-{
-  VDAA_BIT_SET = 1,
-  VDAA_BIT_CLEAR = 0
-} tVdaaBit;
-
-/*
-** Defines structure for daa current status (ring detect/hook stat)
-*/
-typedef struct
-{
-  tVdaaBit ringDetectedNeg;
-  tVdaaBit ringDetectedPos;
-  tVdaaBit ringDetected;
-  tVdaaBit offhook;
-  tVdaaBit onhookLineMonitor;
-} vdaaRingDetectStatusType;
-
-
-typedef SiVoiceControlInterfaceType vdaaControlInterfaceType;
-typedef SiVoiceDeviceType vdaaDeviceType;
-typedef SiVoiceChanType vdaaChanType;
-
-/*
-** This is the main  VoiceDAA interface object pointer
-*/
-typedef vdaaChanType *vdaaChanType_ptr;
-
-/*
-** Defines initialization data structures
-*/
-typedef struct
-{
-  uInt8 address;
-  uInt8 initValue;
-} vdaaRegInit;
-
-
-typedef enum
-{
-  PAR_HANDSET_NOT_DETECTED = 0,
-  PAR_HANDSET_DETECTED = 1
-} vdaaPHDStatus;
-
-/*
-** Line In Use Configuration Structure
-*/
-typedef struct
-{
-  vdaaPHDStatus status;
-  int8 min_onhook_vloop;
-  int8 min_offhook_vloop;
-  int16 min_offhook_iloop;
-  int8 measured_vloop;
-  int16 measured_iloop;
-} vdaa_LIU_Config;
-
-/*
-** Function Declarations
-*/
-
-/*****************************************************************************/
-/** @defgroup VDAA_AUDIO Audio
- * @{
- */
-/** @defgroup VDAA_GAIN_CONTROL Gain Control
- * This section covers functions that allow one to adjust the audio
- * gains - with TX toward the network/SOC/DSP and RX toward the tip/ring.
- *
- * @{
- */
-
-/**
- * @brief
- *  Sets the TX audio gain (toward the network).
- *
- * @param[in] pVdaa - which channel to configure
- * @param[in] preset - which preset to use (this may be from the constants file)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_TXAudioGainSetup (vdaaChanType *pVdaa,int32 preset);
-
-/**
- * @brief
- *  Sets the RX audio gain (toward the tip/ring).
- *
- * @param[in] pVdaa - which channel to configure
- * @param[in] preset - which preset to use (this may be from the constants file)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_RXAudioGainSetup (vdaaChanType *pVdaa,int32 preset);
-
-/** @} VDAA_GAIN_CONTROL */
-
-/*****************************************************************************/
-/** @defgroup VDAA_AUDIO_CONTROL Audio control/configuration
- * This group of functions is used to configure and control the PCM bus.  It is essential that @ref Vdaa_PCMSetup,
- * @ref Vdaa_PCMTimeSlotSetup and @ref Vdaa_PCMStart are called prior to any audio processing.
- * @{
- */
-
-/**
- * @brief
- *  This configures the PCM bus with parameters such as companding and data latching timing.
- *
- * @param[in] pVdaa - which channel should be configured
- * @param[in] preset - which preset to use from the constants file (see configuration tool, PCM dialog box)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa Vdaa_PCMTimeSlotSetup ProSLIC_PCMStart
- */
-
-int Vdaa_PCMSetup (vdaaChanType *pVdaa,int32 preset);
-
-/**
- * @brief
- *  This configures the ProSLIC to latch and send the PCM data at a particular timeslot in terms of PCM clocks (PCLK).
- *
- *  Typically, for aLaw and uLaw, one can use the following calculation to set the rxcount and txcount parameters:
- *
- *  rxcount = txcount = (channel_number)*8;
- *
- *  For 16 bit linear, one can do the following:
- *
- *  rxcount = txcount = (channel_number)*16;
- *
- * where channel_number = which ProSLIC channel on the PCM bus.  For example, if one were to have 2 dual channel
- * VDAA's on the same PCM bus, this value would range from 0 to 3.
- *
- * @param[in] pVdaa - which channel should be configured
- * @param[in] rxcount -  how many clocks until reading data from the PCM bus
- * @param[in] txcount -  how many clocks until writing data to the PCM bus.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa Vdaa_PCMSetup Vdaa_PCMStart
- */
-
-int Vdaa_PCMTimeSlotSetup (vdaaChanType *pVdaa, uInt16 rxcount, uInt16 txcount);
-
-/**
- * @brief
- *  This enables PCM transfer on the given ProSLIC channel.
- *
- * @param[in] pVdaa - - which channel should be enabled
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa ProSLIC_PCMSetup ProSLIC_PCMTimeSlotSetup ProSLIC_PCMStop
- */
-
-int Vdaa_PCMStart (vdaaChanType *pVdaa);
-
-/**
- * @brief
- *  This disables PCM transfer on the given VDAA channel. Typically, this is called for debugging
- *  purposes only.
- *
- * @param[in] pVdaa - - which channel should be disabled
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- * @sa Vdaa_PCMSetup Vdaa_PCMTimeSlotSetup Vdaa_PCMStart
- */
-
-int Vdaa_PCMStop (vdaaChanType *pVdaa);
-
-/**
- * @brief
- * Program desired mute mode for the given channel.
- *
- * @param[in] pVdaa - which channel should be modified
- * @param[in] mute - what is the desired mode.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int Vdaa_SetAudioMute(vdaaChanType *pVdaa, tMUTE mute);
-
-/**
- * @brief
- * Program desired loopback test mode for the given channel.
- *
- * @param[in] pVdaa -  which channel should be modified
- * @param[in] lpbk_mode - what is the desired loopback mode.
- * @param[in] lpbk_status - is this to enable or disable the loopback mode.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int Vdaa_SetLoopbackMode(vdaaChanType_ptr pVdaa, tLpbkMode lpbk_mode,
-                         tLpbkStatus lpbk_status);
-
-/*****************************************************************************/
-/** @} VDAA_AUDIO */
-/** @} */
-/** @defgroup VDAA_RING Ring detection
- * @{
- */
-
-/**
- * @brief This function configures ringing detect for the Vdaa.
- * @param[in] pVdaa - which channel to program
- * @param[in] preset - Index of predefined ring detect setup configuration
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_RingDetectSetup (vdaaChanType *pVdaa,int32 preset);
-
-
-/**
- * @brief This function reads ring detect/hook status and populates the structure passed via pStatus.
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @param[out] pStatus - updated ring status.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_ReadRingDetectStatus (vdaaChanType *pVdaa,
-                               vdaaRingDetectStatusType *pStatus);
-
-/** @} VDAA_RING */
-
-/*****************************************************************************/
-/** @defgroup VDAA_LINE_STATE Line state
- * @{
- */
-
-
-/**
- * @brief This function sets the Voice DAA hook status
- * @param[in]  pVdaa - Pointer to Voice DAA channel structure
- * @param[in]  newHookStatus - new hook state (VDAA_ONHOOK, VDAA_OFFHOOK, VDAA_DIG_LOOPBACK or VDAA_ONHOOK_MONITOR)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_SetHookStatus (vdaaChanType *pVdaa,uInt8 newHookStatus);
-
-/**
- * @brief This function powers up the Voice DAA lineside device.
- * @param[in]  pVdaa - Pointer to Voice DAA channel structure
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_PowerupLineside(vdaaChanType_ptr pVdaa);
-
-/**
- * @brief This function powers down the Voice DAA line side device.
- * @param[in]  pVdaa - Pointer to Voice DAA channel structure
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_PowerdownLineside(vdaaChanType_ptr pVdaa);
-
-/**
- * @brief Read VDAA Hook Status
- * @param[in] pVdaa - which channel to return the hook status.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-uInt8 Vdaa_GetHookStatus (vdaaChanType *pVdaa);
-
-/** @} VDAA_LINE_STATE */
-
-/*****************************************************************************/
-/** @defgroup VDAA_DIAG Diagnostics
- * @{
- */
-
-/**
- * @brief This function returns the Voice DAA linefeed status.
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @param[in,out] vloop - Pointer to loop voltage variable (set by this function) - in Volts
- * @param[in,out] iloop - Pointer to loop current variable (set by this function) - in mA
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_ReadLinefeedStatus (vdaaChanType *pVdaa,int8 *vloop, int16 *iloop);
-
-/**
- * @brief This function initializes the vdaa_LIU_Config datastructure for line in use feature
- * @param[in,out] liuCfg - Pointer to vdaa_LIU_Config structure (user allocates)
- * @param[in] minOnV - minimum onhook loop voltage that indicates no parallel handset is present (V)
- * @param[in] minOffV - minimum offhook loop voltage that indicates no parallel handset is present (V)
- * @param[in] minOffI - minimum offhook loop current that indicates no parallel handset is preset (mA)
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa Vdaa_CheckForLineInUse
- */
-
-int Vdaa_InitLineInUseCheck(vdaa_LIU_Config *liuCfg,int8 minOnV,int8 minOffV,
-                            int16 minOffI );
-
-/**
- * @brief Monitor LVCS to detect intrusion or parallel handset
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @param[in,out] liuCfg - Pointer to vdaa_LIU_Config structure
- * @retval VDAA_ONHOOK or VDAA_OFFHOOK (in use)
- * @sa Vdaa_InitLineInUseCheck
- */
-
-uInt8 Vdaa_CheckForLineInUse(vdaaChanType *pVdaa, vdaa_LIU_Config *liuCfg);
-
-/**
- * @brief This function returns the status of the Frame Detect (FDT) bit.
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @retval int - 0 - Frame NOT detected, 1 = Frame detected
- */
-
-int Vdaa_ReadFDTStatus(vdaaChanType_ptr pVdaa);
-
-/** @} VDAA_DIAG */
-
-/*****************************************************************************/
-/** @defgroup VDAA_INTERRUPTS Interrupts
- * @{
- */
-
-
-/**
- * @brief Enables interrupts based on passed 9-bit bitmask.  Bit values defined by vdaaIntMask enum.
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @param[in] bitmask - a logical or of @ref vdaaIntMask enum
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_SetInterruptMask(vdaaChanType *pVdaa, vdaaIntMask bitmask);
-
-/**
- * @brief Returns the current interrupt status.
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @param[out]  pIntData - interrupt mask showing which interrupts are set.
- * @retval int - the number of interrupts set or RC_IGNORE
- */
-
-int Vdaa_GetInterrupts (vdaaChanType *pVdaa,vdaaIntType *pIntData);
-
-/**
- * @brief Clears ALL interrupts
- * @param[in] pVdaa - Pointer to Voice DAA channel structure
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_ClearInterrupts (vdaaChanType *pVdaa);
-
-/** @} VDAA_INTERRUPTS */
-
-/*****************************************************************************/
-/** @defgroup VDAA_INIT Initialization
- * @{
- */
-
-/*****************************************************************************/
-/** @defgroup VDAA_HW_INIT Hardware/line initialization
- * @{
- */
-
-/**
- * @brief
- *  This function configures the Voice DAA with a predefined country configuration preset.
- *
- * @param[in] pVdaa - which channel to initialize
- * @param[in] preset - The preset to use to configure the VDAA with.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int Vdaa_CountrySetup (vdaaChanType *pVdaa,int32 preset);
-
-/**
- * @brief
- *  This function configures the Voice DAA digital hybrid with a predefined preset.
- *
- * @param[in] pVdaa - which channel to initialize
- * @param[in] preset - Index of predefined digital hybrid preset
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- * @sa Vdaa_SetHybridEnable
- */
-
-int Vdaa_HybridSetup (vdaaChanType *pVdaa,int32 preset);
-
-/**
- * @brief
- *  This function fully initializes and loads the general config parameters to all Vdaa devices
- *  a given daisychain up to a given number.
- *
- * @param[in] pVdaa - which channel to initialize or start from if size>1
- * @param[in] size - the number of channels to initialize, should be at least 1
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int Vdaa_Init (vdaaChanType_ptr *pVdaa,int size);
-
-/**
- * @brief
- *  This function calibrates the ADC (analog to digital converter) of the Vdaa device(s).
- *
- * @param[in] pVdaa - which channel to calibrate or starting channel if size>1
- * @param[in] size - the number of channels to calibrate.
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int Vdaa_ADCCal (vdaaChanType_ptr pVdaa, int32 size);
-
-/**
- * @brief
- *  This function controls the Voice DAA digital hybrid.
- *
- * @param[in] pVdaa - which channel to set/unset
- * @param[in] enable - TRUE: enable digital hybrid, FALSE: disable digital hybrid
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- *
- */
-
-int Vdaa_SetHybridEnable(vdaaChanType_ptr pVdaa, int enable);
-
-/** @} VDAA_HW_INIT */
-/*****************************************************************************/
-
-
-/**
- * @brief  Enables watchdog timer
- * @param[in] pVdaa - the channel to enable the watchdog
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_EnableWatchdog(vdaaChanType_ptr pVdaa);
-
-/**
- * @brief Execute a soft reset on a given channel.
- * @param[in] pVdaa - the channel to reset
- * @retval int - error from @ref errorCodeType  @ref RC_NONE indicates no error.
- */
-
-int Vdaa_SoftReset(vdaaChanType_ptr pVdaa);/** @} VDAA_INIT */
-
-/** @} MISC */
-
-/** @} VDAA_API */
-#endif
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/vdaa_registers.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/vdaa_registers.h
deleted file mode 100644
index 2d48e3d..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/inc/vdaa_registers.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Author(s):
- * laj
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- */
-
-#ifndef SI3050REGS_H
-#define SI3050REGS_H
-
-
-enum REGISTERS
-{
-  CTRL1               =  1, /*  Control    */
-  CTRL2               =  2, /*  Control  */
-  INTE_MSK            =  3, /*  Interrupt Mask  */
-  INTE_SRC            =  4, /*  Interrupt Source  */
-  DAA_CTRL1           =  5, /*  DAA Control 1   */
-  DAA_CTRL2           =  6, /*  DAA Control 2   */
-  SMPL_CTRL           =  7, /*  Sample Rate Control  */
-  RESVD8              =  8, /*  Reserved  */
-  RESVD9              =  9, /*  Reserved  */
-  DAA_CTRL3           =  10, /*  DAA Control 3  */
-  SYS_LINE_DEV_REV    =  11, /*  System- and Line-Side Device Revision  */
-  LSIDE_STAT          =  12, /*  Line-Side Device Status   */
-  LSIDE_REV           =  13, /*  Line-Side Device Revision   */
-  DAA_CTRL4           =  14, /*  DAA Control 4 RPOL  */
-  TXRX_GN_CTRL        =  15, /*  TX/RX Gain Control 1  */
-  INTL_CTRL1          =  16, /*  International Control 1   */
-  INTL_CTRL2          =  17, /*  International Control 2   */
-  INTL_CTRL3          =  18, /*  International Control 3   */
-  INTL_CTRL4          =  19, /*  International Control 4   */
-  RXCALL_PROG_ATTEN   =  20, /*  Call Progress RX Attenuation  */
-  TXCALL_PROG_ATTEN   =  21, /*  Call Progress TX Attenuation   */
-  RNG_VLD_CTRL1       =  22, /*  Ring Validation Control 1   */
-  RNG_VLD_CTRL2       =  23, /*  Ring Validation Control 2   */
-  RNG_VLD_CTRL3       =  24, /*  ing Validation Control 3   */
-  RES_CALIB           =  25, /*  Resistor Calibration   */
-  DC_TERM_CTRL        =  26, /*  DC Termination Control   */
-  RESVD27             =  27, /*  Reserved  */
-  LP_CRNT_STAT        =  28, /*  Loop Current Status  */
-  LINE_VOLT_STAT      =  29, /*  Line Voltage Status   */
-  AC_TERM_CTRL        =  30, /*  AC Termination Control   */
-  DAA_CTRL5           =  31, /*  DAA Control 5   */
-  GND_STRT_CTRL       =  32, /*  Ground Start Control  */
-  PCM_SPI_CTRL        =  33, /*  PCM/SPI Mode Select   */
-  PCMTX_CNT_LO        =  34, /*  PCM Transmit Start Count - Low Byte  */
-  PCMTX_CNT_HI        =  35, /*  PCM Transmit Start Count - High Byte   */
-  PCMRX_CNT_LO        =  36, /*  PCM Receive Start Count - Low Byte   */
-  PCMRX_CNT_HI        =  37, /*  PCM Receive Start Count - High Byte   */
-  TX_GN_CTRL2         =  38, /*  TX Gain Control 2   */
-  RX_GN_CTRL2         =  39, /*  RX Gain Control 2   */
-  TX_GN_CTRL3         =  40, /*  TX Gain Control 3   */
-  RX_GN_CTRL3         =  41, /*  RX Gain Control 3   */
-  GCI_CTRL            =  42, /*  GCI Control   */
-  LN_VI_THRESH_INTE   =  43, /*  Line Current/Voltage Threshold Interrupt  */
-  LN_VI_THRESH_INTE_CTRL=44, /*  Line Current/Voltage Threshold Interrupt Control  */
-  HYB1                =  45, /*  Programmable Hybrid Register 1  */
-  HYB2                =  46, /*  Programmable Hybrid Register 2  */
-  HYB3                =  47, /*  Programmable Hybrid Register 3  */
-  HYB4                =  48, /*  Programmable Hybrid Register 4  */
-  HYB5                =  49, /*  Programmable Hybrid Register 5  */
-  HYB6                =  50, /*  Programmable Hybrid Register 6  */
-  HYB7                =  51, /*  Programmable Hybrid Register 7  */
-  HYB8                =  52, /*  Programmable Hybrid Register 8  */
-  RESVD53             =  53, /*  Reserved 53  */
-  RESVD54             =  54, /*  Reserved 54  */
-  RESVD55             =  55, /*  Reserved 55  */
-  RESVD56             =  56, /*  Reserved 56  */
-  RESVD57             =  57, /*  Reserved 57  */
-  RESVD58             =  58, /*  Reserved 58  */
-  SPRK_QNCH_CTRL      =  59    /*  Spark Quenching Control  */
-
-};
-
-#endif
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/mipsregs.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/mipsregs.h
deleted file mode 100644
index b4d10e9..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/mipsregs.h
+++ /dev/null
@@ -1,1473 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _ASM_MIPSREGS_H
-#define _ASM_MIPSREGS_H
-
-//#include <linux/linkage.h>
-//#include <asm/hazards.h>
-#define CONFIG_PAGE_SIZE_4KB
-/*
- * The following macros are especially useful for __asm__
- * inline assembler.
- */
-#ifndef __STR
-#define __STR(x) #x
-#endif
-#ifndef STR
-#define STR(x) __STR(x)
-#endif
-
-/*
- *  Configure language
- */
-#ifdef __ASSEMBLY__
-#define _ULCAST_
-#else
-#define _ULCAST_ (unsigned long)
-#endif
-
-/*
- * Coprocessor 0 register names
- */
-#define CP0_INDEX $0
-#define CP0_RANDOM $1
-#define CP0_ENTRYLO0 $2
-#define CP0_ENTRYLO1 $3
-#define CP0_CONF $3
-#define CP0_CONTEXT $4
-#define CP0_PAGEMASK $5
-#define CP0_WIRED $6
-#define CP0_INFO $7
-#define CP0_BADVADDR $8
-#define CP0_COUNT $9
-#define CP0_ENTRYHI $10
-#define CP0_COMPARE $11
-#define CP0_STATUS $12
-#define CP0_CAUSE $13
-#define CP0_EPC $14
-#define CP0_PRID $15
-#define CP0_CONFIG $16
-#define CP0_LLADDR $17
-#define CP0_WATCHLO $18
-#define CP0_WATCHHI $19
-#define CP0_XCONTEXT $20
-#define CP0_FRAMEMASK $21
-#define CP0_DIAGNOSTIC $22
-#define CP0_DEBUG $23
-#define CP0_DEPC $24
-#define CP0_PERFORMANCE $25
-#define CP0_ECC $26
-#define CP0_CACHEERR $27
-#define CP0_TAGLO $28
-#define CP0_TAGHI $29
-#define CP0_ERROREPC $30
-#define CP0_DESAVE $31
-
-/*
- * R4640/R4650 cp0 register names.  These registers are listed
- * here only for completeness; without MMU these CPUs are not useable
- * by Linux.  A future ELKS port might take make Linux run on them
- * though ...
- */
-#define CP0_IBASE $0
-#define CP0_IBOUND $1
-#define CP0_DBASE $2
-#define CP0_DBOUND $3
-#define CP0_CALG $17
-#define CP0_IWATCH $18
-#define CP0_DWATCH $19
-
-/*
- * Coprocessor 0 Set 1 register names
- */
-#define CP0_S1_DERRADDR0  $26
-#define CP0_S1_DERRADDR1  $27
-#define CP0_S1_INTCONTROL $20
-
-/*
- * Coprocessor 0 Set 2 register names
- */
-#define CP0_S2_SRSCTL	  $12	/* MIPSR2 */
-
-/*
- * Coprocessor 0 Set 3 register names
- */
-#define CP0_S3_SRSMAP	  $12	/* MIPSR2 */
-
-/*
- *  TX39 Series
- */
-#define CP0_TX39_CACHE	$7
-
-/*
- * Coprocessor 1 (FPU) register names
- */
-#define CP1_REVISION   $0
-#define CP1_STATUS     $31
-
-/*
- * FPU Status Register Values
- */
-/*
- * Status Register Values
- */
-
-#define FPU_CSR_FLUSH   0x01000000      /* flush denormalised results to 0 */
-#define FPU_CSR_COND    0x00800000      /* $fcc0 */
-#define FPU_CSR_COND0   0x00800000      /* $fcc0 */
-#define FPU_CSR_COND1   0x02000000      /* $fcc1 */
-#define FPU_CSR_COND2   0x04000000      /* $fcc2 */
-#define FPU_CSR_COND3   0x08000000      /* $fcc3 */
-#define FPU_CSR_COND4   0x10000000      /* $fcc4 */
-#define FPU_CSR_COND5   0x20000000      /* $fcc5 */
-#define FPU_CSR_COND6   0x40000000      /* $fcc6 */
-#define FPU_CSR_COND7   0x80000000      /* $fcc7 */
-
-/*
- * X the exception cause indicator
- * E the exception enable
- * S the sticky/flag bit
-*/
-#define FPU_CSR_ALL_X   0x0003f000
-#define FPU_CSR_UNI_X   0x00020000
-#define FPU_CSR_INV_X   0x00010000
-#define FPU_CSR_DIV_X   0x00008000
-#define FPU_CSR_OVF_X   0x00004000
-#define FPU_CSR_UDF_X   0x00002000
-#define FPU_CSR_INE_X   0x00001000
-
-#define FPU_CSR_ALL_E   0x00000f80
-#define FPU_CSR_INV_E   0x00000800
-#define FPU_CSR_DIV_E   0x00000400
-#define FPU_CSR_OVF_E   0x00000200
-#define FPU_CSR_UDF_E   0x00000100
-#define FPU_CSR_INE_E   0x00000080
-
-#define FPU_CSR_ALL_S   0x0000007c
-#define FPU_CSR_INV_S   0x00000040
-#define FPU_CSR_DIV_S   0x00000020
-#define FPU_CSR_OVF_S   0x00000010
-#define FPU_CSR_UDF_S   0x00000008
-#define FPU_CSR_INE_S   0x00000004
-
-/* rounding mode */
-#define FPU_CSR_RN      0x0     /* nearest */
-#define FPU_CSR_RZ      0x1     /* towards zero */
-#define FPU_CSR_RU      0x2     /* towards +Infinity */
-#define FPU_CSR_RD      0x3     /* towards -Infinity */
-
-
-/*
- * Values for PageMask register
- */
-#ifdef CONFIG_CPU_VR41XX
-
-/* Why doesn't stupidity hurt ... */
-
-#define PM_1K		0x00000000
-#define PM_4K		0x00001800
-#define PM_16K		0x00007800
-#define PM_64K		0x0001f800
-#define PM_256K		0x0007f800
-
-#else
-
-#define PM_4K		0x00000000
-#define PM_16K		0x00006000
-#define PM_64K		0x0001e000
-#define PM_256K		0x0007e000
-#define PM_1M		0x001fe000
-#define PM_4M		0x007fe000
-#define PM_16M		0x01ffe000
-#define PM_64M		0x07ffe000
-#define PM_256M		0x1fffe000
-
-#endif
-
-/*
- * Default page size for a given kernel configuration
- */
-#ifdef CONFIG_PAGE_SIZE_4KB
-#define PM_DEFAULT_MASK	PM_4K
-#elif defined(CONFIG_PAGE_SIZE_16KB)
-#define PM_DEFAULT_MASK	PM_16K
-#elif defined(CONFIG_PAGE_SIZE_64KB)
-#define PM_DEFAULT_MASK	PM_64K
-#else
-#error Bad page size configuration!
-#endif
-
-
-/*
- * Values used for computation of new tlb entries
- */
-#define PL_4K		12
-#define PL_16K		14
-#define PL_64K		16
-#define PL_256K		18
-#define PL_1M		20
-#define PL_4M		22
-#define PL_16M		24
-#define PL_64M		26
-#define PL_256M		28
-
-/*
- * R4x00 interrupt enable / cause bits
- */
-#define IE_SW0          (_ULCAST_(1) <<  8)
-#define IE_SW1          (_ULCAST_(1) <<  9)
-#define IE_IRQ0         (_ULCAST_(1) << 10)
-#define IE_IRQ1         (_ULCAST_(1) << 11)
-#define IE_IRQ2         (_ULCAST_(1) << 12)
-#define IE_IRQ3         (_ULCAST_(1) << 13)
-#define IE_IRQ4         (_ULCAST_(1) << 14)
-#define IE_IRQ5         (_ULCAST_(1) << 15)
-
-/*
- * R4x00 interrupt cause bits
- */
-#define C_SW0           (_ULCAST_(1) <<  8)
-#define C_SW1           (_ULCAST_(1) <<  9)
-#define C_IRQ0          (_ULCAST_(1) << 10)
-#define C_IRQ1          (_ULCAST_(1) << 11)
-#define C_IRQ2          (_ULCAST_(1) << 12)
-#define C_IRQ3          (_ULCAST_(1) << 13)
-#define C_IRQ4          (_ULCAST_(1) << 14)
-#define C_IRQ5          (_ULCAST_(1) << 15)
-
-/*
- * Bitfields in the R4xx0 cp0 status register
- */
-#define ST0_IE			0x00000001
-#define ST0_EXL			0x00000002
-#define ST0_ERL			0x00000004
-#define ST0_KSU			0x00000018
-#  define KSU_USER		0x00000010
-#  define KSU_SUPERVISOR	0x00000008
-#  define KSU_KERNEL		0x00000000
-#define ST0_UX			0x00000020
-#define ST0_SX			0x00000040
-#define ST0_KX 			0x00000080
-#define ST0_DE			0x00010000
-#define ST0_CE			0x00020000
-
-/*
- * Setting c0_status.co enables Hit_Writeback and Hit_Writeback_Invalidate
- * cacheops in userspace.  This bit exists only on RM7000 and RM9000
- * processors.
- */
-#define ST0_CO			0x08000000
-
-/*
- * Bitfields in the R[23]000 cp0 status register.
- */
-#define ST0_IEC                 0x00000001
-#define ST0_KUC			0x00000002
-#define ST0_IEP			0x00000004
-#define ST0_KUP			0x00000008
-#define ST0_IEO			0x00000010
-#define ST0_KUO			0x00000020
-/* bits 6 & 7 are reserved on R[23]000 */
-#define ST0_ISC			0x00010000
-#define ST0_SWC			0x00020000
-#define ST0_CM			0x00080000
-
-/*
- * Bits specific to the R4640/R4650
- */
-#define ST0_UM			(_ULCAST_(1) <<  4)
-#define ST0_IL			(_ULCAST_(1) << 23)
-#define ST0_DL			(_ULCAST_(1) << 24)
-
-/*
- * Enable the MIPS MDMX and DSP ASEs
- */
-#define ST0_MX			0x01000000
-
-/*
- * Bitfields in the TX39 family CP0 Configuration Register 3
- */
-#define TX39_CONF_ICS_SHIFT	19
-#define TX39_CONF_ICS_MASK	0x00380000
-#define TX39_CONF_ICS_1KB 	0x00000000
-#define TX39_CONF_ICS_2KB 	0x00080000
-#define TX39_CONF_ICS_4KB 	0x00100000
-#define TX39_CONF_ICS_8KB 	0x00180000
-#define TX39_CONF_ICS_16KB 	0x00200000
-
-#define TX39_CONF_DCS_SHIFT	16
-#define TX39_CONF_DCS_MASK	0x00070000
-#define TX39_CONF_DCS_1KB 	0x00000000
-#define TX39_CONF_DCS_2KB 	0x00010000
-#define TX39_CONF_DCS_4KB 	0x00020000
-#define TX39_CONF_DCS_8KB 	0x00030000
-#define TX39_CONF_DCS_16KB 	0x00040000
-
-#define TX39_CONF_CWFON 	0x00004000
-#define TX39_CONF_WBON  	0x00002000
-#define TX39_CONF_RF_SHIFT	10
-#define TX39_CONF_RF_MASK	0x00000c00
-#define TX39_CONF_DOZE		0x00000200
-#define TX39_CONF_HALT		0x00000100
-#define TX39_CONF_LOCK		0x00000080
-#define TX39_CONF_ICE		0x00000020
-#define TX39_CONF_DCE		0x00000010
-#define TX39_CONF_IRSIZE_SHIFT	2
-#define TX39_CONF_IRSIZE_MASK	0x0000000c
-#define TX39_CONF_DRSIZE_SHIFT	0
-#define TX39_CONF_DRSIZE_MASK	0x00000003
-
-/*
- * Status register bits available in all MIPS CPUs.
- */
-#define ST0_IM			0x0000ff00
-#define  STATUSB_IP0		8
-#define  STATUSF_IP0		(_ULCAST_(1) <<  8)
-#define  STATUSB_IP1		9
-#define  STATUSF_IP1		(_ULCAST_(1) <<  9)
-#define  STATUSB_IP2		10
-#define  STATUSF_IP2		(_ULCAST_(1) << 10)
-#define  STATUSB_IP3		11
-#define  STATUSF_IP3		(_ULCAST_(1) << 11)
-#define  STATUSB_IP4		12
-#define  STATUSF_IP4		(_ULCAST_(1) << 12)
-#define  STATUSB_IP5		13
-#define  STATUSF_IP5		(_ULCAST_(1) << 13)
-#define  STATUSB_IP6		14
-#define  STATUSF_IP6		(_ULCAST_(1) << 14)
-#define  STATUSB_IP7		15
-#define  STATUSF_IP7		(_ULCAST_(1) << 15)
-#define  STATUSB_IP8		0
-#define  STATUSF_IP8		(_ULCAST_(1) <<  0)
-#define  STATUSB_IP9		1
-#define  STATUSF_IP9		(_ULCAST_(1) <<  1)
-#define  STATUSB_IP10		2
-#define  STATUSF_IP10		(_ULCAST_(1) <<  2)
-#define  STATUSB_IP11		3
-#define  STATUSF_IP11		(_ULCAST_(1) <<  3)
-#define  STATUSB_IP12		4
-#define  STATUSF_IP12		(_ULCAST_(1) <<  4)
-#define  STATUSB_IP13		5
-#define  STATUSF_IP13		(_ULCAST_(1) <<  5)
-#define  STATUSB_IP14		6
-#define  STATUSF_IP14		(_ULCAST_(1) <<  6)
-#define  STATUSB_IP15		7
-#define  STATUSF_IP15		(_ULCAST_(1) <<  7)
-#define ST0_CH			0x00040000
-#define ST0_SR			0x00100000
-#define ST0_TS			0x00200000
-#define ST0_BEV			0x00400000
-#define ST0_RE			0x02000000
-#define ST0_FR			0x04000000
-#define ST0_CU			0xf0000000
-#define ST0_CU0			0x10000000
-#define ST0_CU1			0x20000000
-#define ST0_CU2			0x40000000
-#define ST0_CU3			0x80000000
-#define ST0_XX			0x80000000	/* MIPS IV naming */
-
-/*
- * Bitfields and bit numbers in the coprocessor 0 cause register.
- *
- * Refer to your MIPS R4xx0 manual, chapter 5 for explanation.
- */
-#define  CAUSEB_EXCCODE		2
-#define  CAUSEF_EXCCODE		(_ULCAST_(31)  <<  2)
-#define  CAUSEB_IP		8
-#define  CAUSEF_IP		(_ULCAST_(255) <<  8)
-#define  CAUSEB_IP0		8
-#define  CAUSEF_IP0		(_ULCAST_(1)   <<  8)
-#define  CAUSEB_IP1		9
-#define  CAUSEF_IP1		(_ULCAST_(1)   <<  9)
-#define  CAUSEB_IP2		10
-#define  CAUSEF_IP2		(_ULCAST_(1)   << 10)
-#define  CAUSEB_IP3		11
-#define  CAUSEF_IP3		(_ULCAST_(1)   << 11)
-#define  CAUSEB_IP4		12
-#define  CAUSEF_IP4		(_ULCAST_(1)   << 12)
-#define  CAUSEB_IP5		13
-#define  CAUSEF_IP5		(_ULCAST_(1)   << 13)
-#define  CAUSEB_IP6		14
-#define  CAUSEF_IP6		(_ULCAST_(1)   << 14)
-#define  CAUSEB_IP7		15
-#define  CAUSEF_IP7		(_ULCAST_(1)   << 15)
-#define  CAUSEB_IV		23
-#define  CAUSEF_IV		(_ULCAST_(1)   << 23)
-#define  CAUSEB_CE		28
-#define  CAUSEF_CE		(_ULCAST_(3)   << 28)
-#define  CAUSEB_BD		31
-#define  CAUSEF_BD		(_ULCAST_(1)   << 31)
-
-/*
- * Bits in the coprocessor 0 config register.
- */
-/* Generic bits.  */
-#define CONF_CM_CACHABLE_NO_WA		0
-#define CONF_CM_CACHABLE_WA		1
-#define CONF_CM_UNCACHED		2
-#define CONF_CM_CACHABLE_NONCOHERENT	3
-#define CONF_CM_CACHABLE_CE		4
-#define CONF_CM_CACHABLE_COW		5
-#define CONF_CM_CACHABLE_CUW		6
-#define CONF_CM_CACHABLE_ACCELERATED	7
-#define CONF_CM_CMASK			7
-#define CONF_BE			(_ULCAST_(1) << 15)
-
-/* Bits common to various processors.  */
-#define CONF_CU			(_ULCAST_(1) <<  3)
-#define CONF_DB			(_ULCAST_(1) <<  4)
-#define CONF_IB			(_ULCAST_(1) <<  5)
-#define CONF_DC			(_ULCAST_(7) <<  6)
-#define CONF_IC			(_ULCAST_(7) <<  9)
-#define CONF_EB			(_ULCAST_(1) << 13)
-#define CONF_EM			(_ULCAST_(1) << 14)
-#define CONF_SM			(_ULCAST_(1) << 16)
-#define CONF_SC			(_ULCAST_(1) << 17)
-#define CONF_EW			(_ULCAST_(3) << 18)
-#define CONF_EP			(_ULCAST_(15)<< 24)
-#define CONF_EC			(_ULCAST_(7) << 28)
-#define CONF_CM			(_ULCAST_(1) << 31)
-
-/* Bits specific to the R4xx0.  */
-#define R4K_CONF_SW		(_ULCAST_(1) << 20)
-#define R4K_CONF_SS		(_ULCAST_(1) << 21)
-#define R4K_CONF_SB		(_ULCAST_(3) << 22)
-
-/* Bits specific to the R5000.  */
-#define R5K_CONF_SE		(_ULCAST_(1) << 12)
-#define R5K_CONF_SS		(_ULCAST_(3) << 20)
-
-/* Bits specific to the RM7000.  */
-#define RM7K_CONF_SE		(_ULCAST_(1) <<  3)
-#define RM7K_CONF_TE		(_ULCAST_(1) << 12)
-#define RM7K_CONF_CLK		(_ULCAST_(1) << 16)
-#define RM7K_CONF_TC		(_ULCAST_(1) << 17)
-#define RM7K_CONF_SI		(_ULCAST_(3) << 20)
-#define RM7K_CONF_SC		(_ULCAST_(1) << 31)
-
-/* Bits specific to the R10000.  */
-#define R10K_CONF_DN		(_ULCAST_(3) <<  3)
-#define R10K_CONF_CT		(_ULCAST_(1) <<  5)
-#define R10K_CONF_PE		(_ULCAST_(1) <<  6)
-#define R10K_CONF_PM		(_ULCAST_(3) <<  7)
-#define R10K_CONF_EC		(_ULCAST_(15)<<  9)
-#define R10K_CONF_SB		(_ULCAST_(1) << 13)
-#define R10K_CONF_SK		(_ULCAST_(1) << 14)
-#define R10K_CONF_SS		(_ULCAST_(7) << 16)
-#define R10K_CONF_SC		(_ULCAST_(7) << 19)
-#define R10K_CONF_DC		(_ULCAST_(7) << 26)
-#define R10K_CONF_IC		(_ULCAST_(7) << 29)
-
-/* Bits specific to the VR41xx.  */
-#define VR41_CONF_CS		(_ULCAST_(1) << 12)
-#define VR41_CONF_P4K		(_ULCAST_(1) << 13)
-#define VR41_CONF_BP		(_ULCAST_(1) << 16)
-#define VR41_CONF_M16		(_ULCAST_(1) << 20)
-#define VR41_CONF_AD		(_ULCAST_(1) << 23)
-
-/* Bits specific to the R30xx.  */
-#define R30XX_CONF_FDM		(_ULCAST_(1) << 19)
-#define R30XX_CONF_REV		(_ULCAST_(1) << 22)
-#define R30XX_CONF_AC		(_ULCAST_(1) << 23)
-#define R30XX_CONF_RF		(_ULCAST_(1) << 24)
-#define R30XX_CONF_HALT		(_ULCAST_(1) << 25)
-#define R30XX_CONF_FPINT	(_ULCAST_(7) << 26)
-#define R30XX_CONF_DBR		(_ULCAST_(1) << 29)
-#define R30XX_CONF_SB		(_ULCAST_(1) << 30)
-#define R30XX_CONF_LOCK		(_ULCAST_(1) << 31)
-
-/* Bits specific to the TX49.  */
-#define TX49_CONF_DC		(_ULCAST_(1) << 16)
-#define TX49_CONF_IC		(_ULCAST_(1) << 17)  /* conflict with CONF_SC */
-#define TX49_CONF_HALT		(_ULCAST_(1) << 18)
-#define TX49_CONF_CWFON		(_ULCAST_(1) << 27)
-
-/* Bits specific to the MIPS32/64 PRA.  */
-#define MIPS_CONF_MT		(_ULCAST_(7) <<  7)
-#define MIPS_CONF_AR		(_ULCAST_(7) << 10)
-#define MIPS_CONF_AT		(_ULCAST_(3) << 13)
-#define MIPS_CONF_M		(_ULCAST_(1) << 31)
-
-/*
- * Bits in the MIPS32/64 PRA coprocessor 0 config registers 1 and above.
- */
-#define MIPS_CONF1_FP		(_ULCAST_(1) <<  0)
-#define MIPS_CONF1_EP		(_ULCAST_(1) <<  1)
-#define MIPS_CONF1_CA		(_ULCAST_(1) <<  2)
-#define MIPS_CONF1_WR		(_ULCAST_(1) <<  3)
-#define MIPS_CONF1_PC		(_ULCAST_(1) <<  4)
-#define MIPS_CONF1_MD		(_ULCAST_(1) <<  5)
-#define MIPS_CONF1_C2		(_ULCAST_(1) <<  6)
-#define MIPS_CONF1_DA		(_ULCAST_(7) <<  7)
-#define MIPS_CONF1_DL		(_ULCAST_(7) << 10)
-#define MIPS_CONF1_DS		(_ULCAST_(7) << 13)
-#define MIPS_CONF1_IA		(_ULCAST_(7) << 16)
-#define MIPS_CONF1_IL		(_ULCAST_(7) << 19)
-#define MIPS_CONF1_IS		(_ULCAST_(7) << 22)
-#define MIPS_CONF1_TLBS		(_ULCAST_(63)<< 25)
-
-#define MIPS_CONF2_SA		(_ULCAST_(15)<<  0)
-#define MIPS_CONF2_SL		(_ULCAST_(15)<<  4)
-#define MIPS_CONF2_SS		(_ULCAST_(15)<<  8)
-#define MIPS_CONF2_SU		(_ULCAST_(15)<< 12)
-#define MIPS_CONF2_TA		(_ULCAST_(15)<< 16)
-#define MIPS_CONF2_TL		(_ULCAST_(15)<< 20)
-#define MIPS_CONF2_TS		(_ULCAST_(15)<< 24)
-#define MIPS_CONF2_TU		(_ULCAST_(7) << 28)
-
-#define MIPS_CONF3_TL		(_ULCAST_(1) <<  0)
-#define MIPS_CONF3_SM		(_ULCAST_(1) <<  1)
-#define MIPS_CONF3_MT		(_ULCAST_(1) <<  2)
-#define MIPS_CONF3_SP		(_ULCAST_(1) <<  4)
-#define MIPS_CONF3_VINT		(_ULCAST_(1) <<  5)
-#define MIPS_CONF3_VEIC		(_ULCAST_(1) <<  6)
-#define MIPS_CONF3_LPA		(_ULCAST_(1) <<  7)
-#define MIPS_CONF3_DSP		(_ULCAST_(1) << 10)
-
-/*
- * Bits in the MIPS32/64 coprocessor 1 (FPU) revision register.
- */
-#define MIPS_FPIR_S		(_ULCAST_(1) << 16)
-#define MIPS_FPIR_D		(_ULCAST_(1) << 17)
-#define MIPS_FPIR_PS		(_ULCAST_(1) << 18)
-#define MIPS_FPIR_3D		(_ULCAST_(1) << 19)
-#define MIPS_FPIR_W		(_ULCAST_(1) << 20)
-#define MIPS_FPIR_L		(_ULCAST_(1) << 21)
-#define MIPS_FPIR_F64		(_ULCAST_(1) << 22)
-
-#ifndef __ASSEMBLY__
-
-/*
- * Functions to access the R10000 performance counters.  These are basically
- * mfc0 and mtc0 instructions from and to coprocessor register with a 5-bit
- * performance counter number encoded into bits 1 ... 5 of the instruction.
- * Only performance counters 0 to 1 actually exist, so for a non-R10000 aware
- * disassembler these will look like an access to sel 0 or 1.
- */
-#define read_r10k_perf_cntr(counter)				\
-({								\
-	unsigned int __res;					\
-	__asm__ __volatile__(					\
-	"mfpc\t%0, %1"						\
-        : "=r" (__res)						\
-	: "i" (counter));					\
-								\
-        __res;							\
-})
-
-#define write_r10k_perf_cntr(counter,val)                       \
-do {								\
-	__asm__ __volatile__(					\
-	"mtpc\t%0, %1"						\
-	:							\
-	: "r" (val), "i" (counter));				\
-} while (0)
-
-#define read_r10k_perf_event(counter)				\
-({								\
-	unsigned int __res;					\
-	__asm__ __volatile__(					\
-	"mfps\t%0, %1"						\
-        : "=r" (__res)						\
-	: "i" (counter));					\
-								\
-        __res;							\
-})
-
-#define write_r10k_perf_cntl(counter,val)                       \
-do {								\
-	__asm__ __volatile__(					\
-	"mtps\t%0, %1"						\
-	:							\
-	: "r" (val), "i" (counter));				\
-} while (0)
-
-
-/*
- * Macros to access the system control coprocessor
- */
-
-#define __read_32bit_c0_register(source, sel)				\
-({ int __res;								\
-	if (sel == 0)							\
-		__asm__ __volatile__(					\
-			"mfc0\t%0, " #source "\n\t"			\
-			: "=r" (__res));				\
-	else								\
-		__asm__ __volatile__(					\
-			".set\tmips32\n\t"				\
-			"mfc0\t%0, " #source ", " #sel "\n\t"		\
-			".set\tmips0\n\t"				\
-			: "=r" (__res));				\
-	__res;								\
-})
-
-#define __read_64bit_c0_register(source, sel)				\
-({ unsigned long long __res;						\
-	if (sizeof(unsigned long) == 4)					\
-		__res = __read_64bit_c0_split(source, sel);		\
-	else if (sel == 0)						\
-		__asm__ __volatile__(					\
-			".set\tmips3\n\t"				\
-			"dmfc0\t%0, " #source "\n\t"			\
-			".set\tmips0"					\
-			: "=r" (__res));				\
-	else								\
-		__asm__ __volatile__(					\
-			".set\tmips64\n\t"				\
-			"dmfc0\t%0, " #source ", " #sel "\n\t"		\
-			".set\tmips0"					\
-			: "=r" (__res));				\
-	__res;								\
-})
-
-#define __write_32bit_c0_register(register, sel, value)			\
-do {									\
-	if (sel == 0)							\
-		__asm__ __volatile__(					\
-			"mtc0\t%z0, " #register "\n\t"			\
-			: : "Jr" ((unsigned int)(value)));		\
-	else								\
-		__asm__ __volatile__(					\
-			".set\tmips32\n\t"				\
-			"mtc0\t%z0, " #register ", " #sel "\n\t"	\
-			".set\tmips0"					\
-			: : "Jr" ((unsigned int)(value)));		\
-} while (0)
-
-#define __write_64bit_c0_register(register, sel, value)			\
-do {									\
-	if (sizeof(unsigned long) == 4)					\
-		__write_64bit_c0_split(register, sel, value);		\
-	else if (sel == 0)						\
-		__asm__ __volatile__(					\
-			".set\tmips3\n\t"				\
-			"dmtc0\t%z0, " #register "\n\t"			\
-			".set\tmips0"					\
-			: : "Jr" (value));				\
-	else								\
-		__asm__ __volatile__(					\
-			".set\tmips64\n\t"				\
-			"dmtc0\t%z0, " #register ", " #sel "\n\t"	\
-			".set\tmips0"					\
-			: : "Jr" (value));				\
-} while (0)
-
-#define __read_ulong_c0_register(reg, sel)				\
-	((sizeof(unsigned long) == 4) ?					\
-	(unsigned long) __read_32bit_c0_register(reg, sel) :		\
-	(unsigned long) __read_64bit_c0_register(reg, sel))
-
-#define __write_ulong_c0_register(reg, sel, val)			\
-do {									\
-	if (sizeof(unsigned long) == 4)					\
-		__write_32bit_c0_register(reg, sel, val);		\
-	else								\
-		__write_64bit_c0_register(reg, sel, val);		\
-} while (0)
-
-/*
- * On RM7000/RM9000 these are uses to access cop0 set 1 registers
- */
-#define __read_32bit_c0_ctrl_register(source)				\
-({ int __res;								\
-	__asm__ __volatile__(						\
-		"cfc0\t%0, " #source "\n\t"				\
-		: "=r" (__res));					\
-	__res;								\
-})
-
-#define __write_32bit_c0_ctrl_register(register, value)			\
-do {									\
-	__asm__ __volatile__(						\
-		"ctc0\t%z0, " #register "\n\t"				\
-		: : "Jr" ((unsigned int)(value)));			\
-} while (0)
-
-/*
- * These versions are only needed for systems with more than 38 bits of
- * physical address space running the 32-bit kernel.  That's none atm :-)
- */
-#define __read_64bit_c0_split(source, sel)				\
-({									\
-	unsigned long long val;						\
-	unsigned long flags;						\
-									\
-	local_irq_save(flags);						\
-	if (sel == 0)							\
-		__asm__ __volatile__(					\
-			".set\tmips64\n\t"				\
-			"dmfc0\t%M0, " #source "\n\t"			\
-			"dsll\t%L0, %M0, 32\n\t"			\
-			"dsrl\t%M0, %M0, 32\n\t"			\
-			"dsrl\t%L0, %L0, 32\n\t"			\
-			".set\tmips0"					\
-			: "=r" (val));					\
-	else								\
-		__asm__ __volatile__(					\
-			".set\tmips64\n\t"				\
-			"dmfc0\t%M0, " #source ", " #sel "\n\t"		\
-			"dsll\t%L0, %M0, 32\n\t"			\
-			"dsrl\t%M0, %M0, 32\n\t"			\
-			"dsrl\t%L0, %L0, 32\n\t"			\
-			".set\tmips0"					\
-			: "=r" (val));					\
-	local_irq_restore(flags);					\
-									\
-	val;								\
-})
-
-#define __write_64bit_c0_split(source, sel, val)			\
-do {									\
-	unsigned long flags;						\
-									\
-	local_irq_save(flags);						\
-	if (sel == 0)							\
-		__asm__ __volatile__(					\
-			".set\tmips64\n\t"				\
-			"dsll\t%L0, %L0, 32\n\t"			\
-			"dsrl\t%L0, %L0, 32\n\t"			\
-			"dsll\t%M0, %M0, 32\n\t"			\
-			"or\t%L0, %L0, %M0\n\t"				\
-			"dmtc0\t%L0, " #source "\n\t"			\
-			".set\tmips0"					\
-			: : "r" (val));					\
-	else								\
-		__asm__ __volatile__(					\
-			".set\tmips64\n\t"				\
-			"dsll\t%L0, %L0, 32\n\t"			\
-			"dsrl\t%L0, %L0, 32\n\t"			\
-			"dsll\t%M0, %M0, 32\n\t"			\
-			"or\t%L0, %L0, %M0\n\t"				\
-			"dmtc0\t%L0, " #source ", " #sel "\n\t"		\
-			".set\tmips0"					\
-			: : "r" (val));					\
-	local_irq_restore(flags);					\
-} while (0)
-
-#define read_c0_index()		__read_32bit_c0_register($0, 0)
-#define write_c0_index(val)	__write_32bit_c0_register($0, 0, val)
-
-#define read_c0_entrylo0()	__read_ulong_c0_register($2, 0)
-#define write_c0_entrylo0(val)	__write_ulong_c0_register($2, 0, val)
-
-#define read_c0_entrylo1()	__read_ulong_c0_register($3, 0)
-#define write_c0_entrylo1(val)	__write_ulong_c0_register($3, 0, val)
-
-#define read_c0_conf()		__read_32bit_c0_register($3, 0)
-#define write_c0_conf(val)	__write_32bit_c0_register($3, 0, val)
-
-#define read_c0_context()	__read_ulong_c0_register($4, 0)
-#define write_c0_context(val)	__write_ulong_c0_register($4, 0, val)
-
-#define read_c0_pagemask()	__read_32bit_c0_register($5, 0)
-#define write_c0_pagemask(val)	__write_32bit_c0_register($5, 0, val)
-
-#define read_c0_wired()		__read_32bit_c0_register($6, 0)
-#define write_c0_wired(val)	__write_32bit_c0_register($6, 0, val)
-
-#define read_c0_info()		__read_32bit_c0_register($7, 0)
-
-#define read_c0_cache()		__read_32bit_c0_register($7, 0)	/* TX39xx */
-#define write_c0_cache(val)	__write_32bit_c0_register($7, 0, val)
-
-#define read_c0_badvaddr()	__read_ulong_c0_register($8, 0)
-#define write_c0_badvaddr(val)	__write_ulong_c0_register($8, 0, val)
-
-#define read_c0_count()		__read_32bit_c0_register($9, 0)
-#define write_c0_count(val)	__write_32bit_c0_register($9, 0, val)
-
-#define read_c0_count2()	__read_32bit_c0_register($9, 6) /* pnx8550 */
-#define write_c0_count2(val)	__write_32bit_c0_register($9, 6, val)
-
-#define read_c0_count3()	__read_32bit_c0_register($9, 7) /* pnx8550 */
-#define write_c0_count3(val)	__write_32bit_c0_register($9, 7, val)
-
-#define read_c0_entryhi()	__read_ulong_c0_register($10, 0)
-#define write_c0_entryhi(val)	__write_ulong_c0_register($10, 0, val)
-
-#define read_c0_compare()	__read_32bit_c0_register($11, 0)
-#define write_c0_compare(val)	__write_32bit_c0_register($11, 0, val)
-
-#define read_c0_compare2()	__read_32bit_c0_register($11, 6) /* pnx8550 */
-#define write_c0_compare2(val)	__write_32bit_c0_register($11, 6, val)
-
-#define read_c0_compare3()	__read_32bit_c0_register($11, 7) /* pnx8550 */
-#define write_c0_compare3(val)	__write_32bit_c0_register($11, 7, val)
-
-#define read_c0_status()	__read_32bit_c0_register($12, 0)
-#ifdef CONFIG_MIPS_MT_SMTC
-#define write_c0_status(val)						\
-do {									\
-	__write_32bit_c0_register($12, 0, val);				\
-	__ehb();							\
-} while (0)
-#else
-/*
- * Legacy non-SMTC code, which may be hazardous
- * but which might not support EHB
- */
-#define write_c0_status(val)	__write_32bit_c0_register($12, 0, val)
-#endif /* CONFIG_MIPS_MT_SMTC */
-
-#define read_c0_cause()		__read_32bit_c0_register($13, 0)
-#define write_c0_cause(val)	__write_32bit_c0_register($13, 0, val)
-
-#define read_c0_epc()		__read_ulong_c0_register($14, 0)
-#define write_c0_epc(val)	__write_ulong_c0_register($14, 0, val)
-
-#define read_c0_prid()		__read_32bit_c0_register($15, 0)
-
-#define read_c0_config()	__read_32bit_c0_register($16, 0)
-#define read_c0_config1()	__read_32bit_c0_register($16, 1)
-#define read_c0_config2()	__read_32bit_c0_register($16, 2)
-#define read_c0_config3()	__read_32bit_c0_register($16, 3)
-#define read_c0_config4()	__read_32bit_c0_register($16, 4)
-#define read_c0_config5()	__read_32bit_c0_register($16, 5)
-#define read_c0_config6()	__read_32bit_c0_register($16, 6)
-#define read_c0_config7()	__read_32bit_c0_register($16, 7)
-#define write_c0_config(val)	__write_32bit_c0_register($16, 0, val)
-#define write_c0_config1(val)	__write_32bit_c0_register($16, 1, val)
-#define write_c0_config2(val)	__write_32bit_c0_register($16, 2, val)
-#define write_c0_config3(val)	__write_32bit_c0_register($16, 3, val)
-#define write_c0_config4(val)	__write_32bit_c0_register($16, 4, val)
-#define write_c0_config5(val)	__write_32bit_c0_register($16, 5, val)
-#define write_c0_config6(val)	__write_32bit_c0_register($16, 6, val)
-#define write_c0_config7(val)	__write_32bit_c0_register($16, 7, val)
-
-/*
- * The WatchLo register.  There may be upto 8 of them.
- */
-#define read_c0_watchlo0()	__read_ulong_c0_register($18, 0)
-#define read_c0_watchlo1()	__read_ulong_c0_register($18, 1)
-#define read_c0_watchlo2()	__read_ulong_c0_register($18, 2)
-#define read_c0_watchlo3()	__read_ulong_c0_register($18, 3)
-#define read_c0_watchlo4()	__read_ulong_c0_register($18, 4)
-#define read_c0_watchlo5()	__read_ulong_c0_register($18, 5)
-#define read_c0_watchlo6()	__read_ulong_c0_register($18, 6)
-#define read_c0_watchlo7()	__read_ulong_c0_register($18, 7)
-#define write_c0_watchlo0(val)	__write_ulong_c0_register($18, 0, val)
-#define write_c0_watchlo1(val)	__write_ulong_c0_register($18, 1, val)
-#define write_c0_watchlo2(val)	__write_ulong_c0_register($18, 2, val)
-#define write_c0_watchlo3(val)	__write_ulong_c0_register($18, 3, val)
-#define write_c0_watchlo4(val)	__write_ulong_c0_register($18, 4, val)
-#define write_c0_watchlo5(val)	__write_ulong_c0_register($18, 5, val)
-#define write_c0_watchlo6(val)	__write_ulong_c0_register($18, 6, val)
-#define write_c0_watchlo7(val)	__write_ulong_c0_register($18, 7, val)
-
-/*
- * The WatchHi register.  There may be upto 8 of them.
- */
-#define read_c0_watchhi0()	__read_32bit_c0_register($19, 0)
-#define read_c0_watchhi1()	__read_32bit_c0_register($19, 1)
-#define read_c0_watchhi2()	__read_32bit_c0_register($19, 2)
-#define read_c0_watchhi3()	__read_32bit_c0_register($19, 3)
-#define read_c0_watchhi4()	__read_32bit_c0_register($19, 4)
-#define read_c0_watchhi5()	__read_32bit_c0_register($19, 5)
-#define read_c0_watchhi6()	__read_32bit_c0_register($19, 6)
-#define read_c0_watchhi7()	__read_32bit_c0_register($19, 7)
-
-#define write_c0_watchhi0(val)	__write_32bit_c0_register($19, 0, val)
-#define write_c0_watchhi1(val)	__write_32bit_c0_register($19, 1, val)
-#define write_c0_watchhi2(val)	__write_32bit_c0_register($19, 2, val)
-#define write_c0_watchhi3(val)	__write_32bit_c0_register($19, 3, val)
-#define write_c0_watchhi4(val)	__write_32bit_c0_register($19, 4, val)
-#define write_c0_watchhi5(val)	__write_32bit_c0_register($19, 5, val)
-#define write_c0_watchhi6(val)	__write_32bit_c0_register($19, 6, val)
-#define write_c0_watchhi7(val)	__write_32bit_c0_register($19, 7, val)
-
-#define read_c0_xcontext()	__read_ulong_c0_register($20, 0)
-#define write_c0_xcontext(val)	__write_ulong_c0_register($20, 0, val)
-
-#define read_c0_intcontrol()	__read_32bit_c0_ctrl_register($20)
-#define write_c0_intcontrol(val) __write_32bit_c0_ctrl_register($20, val)
-
-#define read_c0_framemask()	__read_32bit_c0_register($21, 0)
-#define write_c0_framemask(val)	__write_32bit_c0_register($21, 0, val)
-
-/* RM9000 PerfControl performance counter control register */
-#define read_c0_perfcontrol()	__read_32bit_c0_register($22, 0)
-#define write_c0_perfcontrol(val) __write_32bit_c0_register($22, 0, val)
-
-#define read_c0_diag()		__read_32bit_c0_register($22, 0)
-#define write_c0_diag(val)	__write_32bit_c0_register($22, 0, val)
-
-#define read_c0_diag1()		__read_32bit_c0_register($22, 1)
-#define write_c0_diag1(val)	__write_32bit_c0_register($22, 1, val)
-
-#define read_c0_diag2()		__read_32bit_c0_register($22, 2)
-#define write_c0_diag2(val)	__write_32bit_c0_register($22, 2, val)
-
-#define read_c0_diag3()		__read_32bit_c0_register($22, 3)
-#define write_c0_diag3(val)	__write_32bit_c0_register($22, 3, val)
-
-#define read_c0_diag4()		__read_32bit_c0_register($22, 4)
-#define write_c0_diag4(val)	__write_32bit_c0_register($22, 4, val)
-
-#define read_c0_diag5()		__read_32bit_c0_register($22, 5)
-#define write_c0_diag5(val)	__write_32bit_c0_register($22, 5, val)
-
-#define read_c0_debug()		__read_32bit_c0_register($23, 0)
-#define write_c0_debug(val)	__write_32bit_c0_register($23, 0, val)
-
-#define read_c0_depc()		__read_ulong_c0_register($24, 0)
-#define write_c0_depc(val)	__write_ulong_c0_register($24, 0, val)
-
-/*
- * MIPS32 / MIPS64 performance counters
- */
-#define read_c0_perfctrl0()	__read_32bit_c0_register($25, 0)
-#define write_c0_perfctrl0(val)	__write_32bit_c0_register($25, 0, val)
-#define read_c0_perfcntr0()	__read_32bit_c0_register($25, 1)
-#define write_c0_perfcntr0(val)	__write_32bit_c0_register($25, 1, val)
-#define read_c0_perfctrl1()	__read_32bit_c0_register($25, 2)
-#define write_c0_perfctrl1(val)	__write_32bit_c0_register($25, 2, val)
-#define read_c0_perfcntr1()	__read_32bit_c0_register($25, 3)
-#define write_c0_perfcntr1(val)	__write_32bit_c0_register($25, 3, val)
-#define read_c0_perfctrl2()	__read_32bit_c0_register($25, 4)
-#define write_c0_perfctrl2(val)	__write_32bit_c0_register($25, 4, val)
-#define read_c0_perfcntr2()	__read_32bit_c0_register($25, 5)
-#define write_c0_perfcntr2(val)	__write_32bit_c0_register($25, 5, val)
-#define read_c0_perfctrl3()	__read_32bit_c0_register($25, 6)
-#define write_c0_perfctrl3(val)	__write_32bit_c0_register($25, 6, val)
-#define read_c0_perfcntr3()	__read_32bit_c0_register($25, 7)
-#define write_c0_perfcntr3(val)	__write_32bit_c0_register($25, 7, val)
-
-/* RM9000 PerfCount performance counter register */
-#define read_c0_perfcount()	__read_64bit_c0_register($25, 0)
-#define write_c0_perfcount(val)	__write_64bit_c0_register($25, 0, val)
-
-#define read_c0_ecc()		__read_32bit_c0_register($26, 0)
-#define write_c0_ecc(val)	__write_32bit_c0_register($26, 0, val)
-
-#define read_c0_derraddr0()	__read_ulong_c0_register($26, 1)
-#define write_c0_derraddr0(val)	__write_ulong_c0_register($26, 1, val)
-
-#define read_c0_cacheerr()	__read_32bit_c0_register($27, 0)
-
-#define read_c0_derraddr1()	__read_ulong_c0_register($27, 1)
-#define write_c0_derraddr1(val)	__write_ulong_c0_register($27, 1, val)
-
-#define read_c0_taglo()		__read_32bit_c0_register($28, 0)
-#define write_c0_taglo(val)	__write_32bit_c0_register($28, 0, val)
-
-#define read_c0_dtaglo()	__read_32bit_c0_register($28, 2)
-#define write_c0_dtaglo(val)	__write_32bit_c0_register($28, 2, val)
-
-#define read_c0_taghi()		__read_32bit_c0_register($29, 0)
-#define write_c0_taghi(val)	__write_32bit_c0_register($29, 0, val)
-
-#define read_c0_errorepc()	__read_ulong_c0_register($30, 0)
-#define write_c0_errorepc(val)	__write_ulong_c0_register($30, 0, val)
-
-/* MIPSR2 */
-#define read_c0_hwrena()	__read_32bit_c0_register($7,0)
-#define write_c0_hwrena(val)	__write_32bit_c0_register($7, 0, val)
-
-#define read_c0_intctl()	__read_32bit_c0_register($12, 1)
-#define write_c0_intctl(val)	__write_32bit_c0_register($12, 1, val)
-
-#define read_c0_srsctl()	__read_32bit_c0_register($12, 2)
-#define write_c0_srsctl(val)	__write_32bit_c0_register($12, 2, val)
-
-#define read_c0_srsmap()	__read_32bit_c0_register($12, 3)
-#define write_c0_srsmap(val)	__write_32bit_c0_register($12, 3, val)
-
-#define read_c0_ebase()		__read_32bit_c0_register($15,1)
-#define write_c0_ebase(val)	__write_32bit_c0_register($15, 1, val)
-
-/*
- * Macros to access the floating point coprocessor control registers
- */
-#define read_32bit_cp1_register(source)                         \
-({ int __res;                                                   \
-	__asm__ __volatile__(                                   \
-	".set\tpush\n\t"					\
-	".set\treorder\n\t"					\
-        "cfc1\t%0,"STR(source)"\n\t"                            \
-	".set\tpop"						\
-        : "=r" (__res));                                        \
-        __res;})
-
-#define rddsp(mask)							\
-({									\
-	unsigned int __res;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push				\n"		\
-	"	.set	noat				\n"		\
-	"	# rddsp $1, %x1				\n"		\
-	"	.word	0x7c000cb8 | (%x1 << 16)	\n"		\
-	"	move	%0, $1				\n"		\
-	"	.set	pop				\n"		\
-	: "=r" (__res)							\
-	: "i" (mask));							\
-	__res;								\
-})
-
-#define wrdsp(val, mask)						\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# wrdsp $1, %x1					\n"	\
-	"	.word	0x7c2004f8 | (%x1 << 11)		\n"	\
-	"	.set	pop					\n"	\
-        :								\
-	: "r" (val), "i" (mask));					\
-} while (0)
-
-#if 0	/* Need DSP ASE capable assembler ... */
-#define mflo0() ({ long mflo0; __asm__("mflo %0, $ac0" : "=r" (mflo0)); mflo0;})
-#define mflo1() ({ long mflo1; __asm__("mflo %0, $ac1" : "=r" (mflo1)); mflo1;})
-#define mflo2() ({ long mflo2; __asm__("mflo %0, $ac2" : "=r" (mflo2)); mflo2;})
-#define mflo3() ({ long mflo3; __asm__("mflo %0, $ac3" : "=r" (mflo3)); mflo3;})
-
-#define mfhi0() ({ long mfhi0; __asm__("mfhi %0, $ac0" : "=r" (mfhi0)); mfhi0;})
-#define mfhi1() ({ long mfhi1; __asm__("mfhi %0, $ac1" : "=r" (mfhi1)); mfhi1;})
-#define mfhi2() ({ long mfhi2; __asm__("mfhi %0, $ac2" : "=r" (mfhi2)); mfhi2;})
-#define mfhi3() ({ long mfhi3; __asm__("mfhi %0, $ac3" : "=r" (mfhi3)); mfhi3;})
-
-#define mtlo0(x) __asm__("mtlo %0, $ac0" ::"r" (x))
-#define mtlo1(x) __asm__("mtlo %0, $ac1" ::"r" (x))
-#define mtlo2(x) __asm__("mtlo %0, $ac2" ::"r" (x))
-#define mtlo3(x) __asm__("mtlo %0, $ac3" ::"r" (x))
-
-#define mthi0(x) __asm__("mthi %0, $ac0" ::"r" (x))
-#define mthi1(x) __asm__("mthi %0, $ac1" ::"r" (x))
-#define mthi2(x) __asm__("mthi %0, $ac2" ::"r" (x))
-#define mthi3(x) __asm__("mthi %0, $ac3" ::"r" (x))
-
-#else
-
-#define mfhi0()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mfhi	%0, $ac0		\n"			\
-	"	.word	0x00000810		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mfhi1()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mfhi	%0, $ac1		\n"			\
-	"	.word	0x00200810		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mfhi2()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mfhi	%0, $ac2		\n"			\
-	"	.word	0x00400810		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mfhi3()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mfhi	%0, $ac3		\n"			\
-	"	.word	0x00600810		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mflo0()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mflo	%0, $ac0		\n"			\
-	"	.word	0x00000812		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mflo1()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mflo	%0, $ac1		\n"			\
-	"	.word	0x00200812		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mflo2()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mflo	%0, $ac2		\n"			\
-	"	.word	0x00400812		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mflo3()								\
-({									\
-	unsigned long __treg;						\
-									\
-	__asm__ __volatile__(						\
-	"	.set	push			\n"			\
-	"	.set	noat			\n"			\
-	"	# mflo	%0, $ac3		\n"			\
-	"	.word	0x00600812		\n"			\
-	"	move	%0, $1			\n"			\
-	"	.set	pop			\n"			\
-	: "=r" (__treg));						\
-	__treg;								\
-})
-
-#define mthi0(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mthi	$1, $ac0				\n"	\
-	"	.word	0x00200011				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mthi1(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mthi	$1, $ac1				\n"	\
-	"	.word	0x00200811				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mthi2(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mthi	$1, $ac2				\n"	\
-	"	.word	0x00201011				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mthi3(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mthi	$1, $ac3				\n"	\
-	"	.word	0x00201811				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mtlo0(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mtlo	$1, $ac0				\n"	\
-	"	.word	0x00200013				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mtlo1(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mtlo	$1, $ac1				\n"	\
-	"	.word	0x00200813				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mtlo2(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mtlo	$1, $ac2				\n"	\
-	"	.word	0x00201013				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#define mtlo3(x)							\
-do {									\
-	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# mtlo	$1, $ac3				\n"	\
-	"	.word	0x00201813				\n"	\
-	"	.set	pop					\n"	\
-	:								\
-	: "r" (x));							\
-} while (0)
-
-#endif
-
-/*
- * TLB operations.
- *
- * It is responsibility of the caller to take care of any TLB hazards.
- */
-static inline void tlb_probe(void)
-{
-	__asm__ __volatile__(
-		".set noreorder\n\t"
-		"tlbp\n\t"
-		".set reorder");
-}
-
-static inline void tlb_read(void)
-{
-	__asm__ __volatile__(
-		".set noreorder\n\t"
-		"tlbr\n\t"
-		".set reorder");
-}
-
-static inline void tlb_write_indexed(void)
-{
-	__asm__ __volatile__(
-		".set noreorder\n\t"
-		"tlbwi\n\t"
-		".set reorder");
-}
-
-static inline void tlb_write_random(void)
-{
-	__asm__ __volatile__(
-		".set noreorder\n\t"
-		"tlbwr\n\t"
-		".set reorder");
-}
-
-/*
- * Manipulate bits in a c0 register.
- */
-#ifndef CONFIG_MIPS_MT_SMTC
-/*
- * SMTC Linux requires shutting-down microthread scheduling
- * during CP0 register read-modify-write sequences.
- */
-#define __BUILD_SET_C0(name)					\
-static inline unsigned int					\
-set_c0_##name(unsigned int set)					\
-{								\
-	unsigned int res;					\
-								\
-	res = read_c0_##name();					\
-	res |= set;						\
-	write_c0_##name(res);					\
-								\
-	return res;						\
-}								\
-								\
-static inline unsigned int					\
-clear_c0_##name(unsigned int clear)				\
-{								\
-	unsigned int res;					\
-								\
-	res = read_c0_##name();					\
-	res &= ~clear;						\
-	write_c0_##name(res);					\
-								\
-	return res;						\
-}								\
-								\
-static inline unsigned int					\
-change_c0_##name(unsigned int change, unsigned int new)		\
-{								\
-	unsigned int res;					\
-								\
-	res = read_c0_##name();					\
-	res &= ~change;						\
-	res |= (new & change);					\
-	write_c0_##name(res);					\
-								\
-	return res;						\
-}
-
-#else /* SMTC versions that manage MT scheduling */
-
-#include <linux/irqflags.h>
-
-/*
- * This is a duplicate of dmt() in mipsmtregs.h to avoid problems with
- * header file recursion.
- */
-static inline unsigned int __dmt(void)
-{
-	int res;
-
-	__asm__ __volatile__(
-	"	.set	push						\n"
-	"	.set	mips32r2					\n"
-	"	.set	noat						\n"
-	"	.word	0x41610BC1			# dmt $1	\n"
-	"	ehb							\n"
-	"	move	%0, $1						\n"
-	"	.set	pop						\n"
-	: "=r" (res));
-
-	instruction_hazard();
-
-	return res;
-}
-
-#define __VPECONTROL_TE_SHIFT	15
-#define __VPECONTROL_TE		(1UL << __VPECONTROL_TE_SHIFT)
-
-#define __EMT_ENABLE		__VPECONTROL_TE
-
-static inline void __emt(unsigned int previous)
-{
-	if ((previous & __EMT_ENABLE))
-		__asm__ __volatile__(
-		"	.set	mips32r2				\n"
-		"	.word	0x41600be1		# emt		\n"
-		"	ehb						\n"
-		"	.set	mips0					\n");
-}
-
-static inline void __ehb(void)
-{
-	__asm__ __volatile__(
-	"	.set	mips32r2					\n"
-	"	ehb							\n"		"	.set	mips0						\n");
-}
-
-/*
- * Note that local_irq_save/restore affect TC-specific IXMT state,
- * not Status.IE as in non-SMTC kernel.
- */
-
-#define __BUILD_SET_C0(name)					\
-static inline unsigned int					\
-set_c0_##name(unsigned int set)					\
-{								\
-	unsigned int res;					\
-	unsigned int omt;					\
-	unsigned int flags;					\
-								\
-	local_irq_save(flags);					\
-	omt = __dmt();						\
-	res = read_c0_##name();					\
-	res |= set;						\
-	write_c0_##name(res);					\
-	__emt(omt);						\
-	local_irq_restore(flags);				\
-								\
-	return res;						\
-}								\
-								\
-static inline unsigned int					\
-clear_c0_##name(unsigned int clear)				\
-{								\
-	unsigned int res;					\
-	unsigned int omt;					\
-	unsigned int flags;					\
-								\
-	local_irq_save(flags);					\
-	omt = __dmt();						\
-	res = read_c0_##name();					\
-	res &= ~clear;						\
-	write_c0_##name(res);					\
-	__emt(omt);						\
-	local_irq_restore(flags);				\
-								\
-	return res;						\
-}								\
-								\
-static inline unsigned int					\
-change_c0_##name(unsigned int change, unsigned int new)		\
-{								\
-	unsigned int res;					\
-	unsigned int omt;					\
-	unsigned int flags;					\
-								\
-	local_irq_save(flags);					\
-								\
-	omt = __dmt();						\
-	res = read_c0_##name();					\
-	res &= ~change;						\
-	res |= (new & change);					\
-	write_c0_##name(res);					\
-	__emt(omt);						\
-	local_irq_restore(flags);				\
-								\
-	return res;						\
-}
-#endif
-
-__BUILD_SET_C0(status)
-__BUILD_SET_C0(cause)
-__BUILD_SET_C0(config)
-__BUILD_SET_C0(intcontrol)
-__BUILD_SET_C0(intctl)
-__BUILD_SET_C0(srsmap)
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* _ASM_MIPSREGS_H */
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/patch_files/Makefile b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/patch_files/Makefile
deleted file mode 100644
index 2ea53bb..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/patch_files/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-
-# platform driver
-ccflags-y += -I../inc
-snd-soc-procslic-patch-objs := si3218x_patch_A_2017MAY25.o
-
-obj-$(CONFIG_SND_SOC_SI3218X) += snd-soc-proslic-patch.o
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/patch_files/si3218x_patch_A_2017MAY25.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/patch_files/si3218x_patch_A_2017MAY25.c
deleted file mode 100644
index ccccb75..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/patch_files/si3218x_patch_A_2017MAY25.c
+++ /dev/null
@@ -1,242 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Generated from si3218x_patch_A_2017MAY25.dsp_prom
- * on 05-25-2017 at 15:1:37
- * Patch ID = 0x05252017L
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- */
-#include "../config_inc/si_voice_datatypes.h"
-#include "../inc/si3218x.h"
-
-static const uInt32 patchData [] = {
-141029L,
-540867L,
-141029L,
-543427L,
-141029L,
-553667L,
-141029L,
-562883L,
-141029L,
-567491L,
-141029L,
-569539L,
-141029L,
-580803L,
-141029L,
-586435L,
-141029L,
-593091L,
-141029L,
-598211L,
-141029L,
-603843L,
-141029L,
-604355L,
-141029L,
-604867L,
-141029L,
-605379L,
-141029L,
-605891L,
-141029L,
-606403L,
-736L,
-492224L,
-452200L,
-141029L,
-491712L,
-558181L,
-410018L,
-539765L,
-142565L,
-551619L,
-355746L,
-539765L,
-142560L,
-548547L,
-767493L,
-356258L,
-407477L,
-142561L,
-551619L,
-767493L,
-539749L,
-743525L,
-119426L,
-141029L,
-925377L,
-387589L,
-558181L,
-388514L,
-387701L,
-142565L,
-561347L,
-524290L,
-144096L,
-559811L,
-524292L,
-141029L,
-560835L,
-524290L,
-437360L,
-671749L,
-437349L,
-141029L,
-21186L,
-560741L,
-524290L,
-143072L,
-565955L,
-141029L,
-122050L,
-694789L,
-141029L,
-789186L,
-408165L,
-408645L,
-141029L,
-950976L,
-524291L,
-144101L,
-571587L,
-199685L,
-666853L,
-574659L,
-431717L,
-197189L,
-136805L,
-198725L,
-408677L,
-262242L,
-524291L,
-144101L,
-577731L,
-408581L,
-666853L,
-873664L,
-136805L,
-407621L,
-141029L,
-873664L,
-9733L,
-136805L,
-116130L,
-524304L,
-660069L,
-440424L,
-9827L,
-660066L,
-524315L,
-141029L,
-674496L,
-694789L,
-828517L,
-119426L,
-267414L,
-829441L,
-828933L,
-694789L,
-118405L,
-788805L,
-725829L,
-119424L,
-141029L,
-230594L,
-492645L,
-252002L,
-524295L,
-517220L,
-144101L,
-596675L,
-517733L,
-827461L,
-141029L,
-745664L,
-466437L,
-558181L,
-410018L,
-519797L,
-142565L,
-601795L,
-385637L,
-466597L,
-524289L,
-141029L,
-27330L,
-524293L,
-524293L,
-524293L,
-524293L,
-524293L,
-524293L,
-0L
-};
-
-static const uInt16 patchEntries [] = {
-951,
-3854,
-4136,
-4333,
-1856,
-1695,
-1316,
-4545,
-1455,
-4148,
-0,
-0,
-0,
-0,
-0,
-0
-};
-
-static const uInt16 patchSupportAddr [] = {
-800,
-694,
-695,
-795,
-914,
-758,
-757,
-798,
-797,
-796,
-226,
-1011,
-1010,
-0
-};
-
-static const uInt32 patchSupportData [] = {
-0x200000L,
-0x80000L,
-0x200000L,
-0x180000L,
-0x07FCFDDAL,
-0x400000L,
-0x0L,
-0x123400L,
-0x123400L,
-0x123400L,
-0x35D540L,
-0x3F00000L,
-0x100000L,
-0x0L
-};
-
-#ifdef SIVOICE_MULTI_BOM_SUPPORT
-const proslicPatch si3218xPatchRevALCQC = {
-#else
-const proslicPatch RevAPatch = {
-#endif
-    patchData,
-    patchEntries,
-    0x05252017L,
-    patchSupportAddr,
-    patchSupportData
-};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_spi_api.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_spi_api.c
deleted file mode 100644
index 77e67d0..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_spi_api.c
+++ /dev/null
@@ -1,206 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * spi.h
- * SPI driver implementation file
- *
- * Author(s): 
- * laj
- *
- * Distributed by: 
- * Silicon Laboratories, Inc
- *
- * File Description:
- * This is the implementation file for the SPI driver used 
- * in the ProSLIC demonstration code. It calls the library
- * that initializes and talks to the proslic motherboard.
- *
- * Dependancies:
- *
- */
-//#include "../iowrapper.h" // This is the motherboard interface library
-#include <linux/kernel.h>
-#include <linux/delay.h>
-#include "config_inc/si_voice_datatypes.h"
-#include "inc/si_voice_ctrl.h"
-#include "spi.h"
-#include "proslic_sys.h"
-
-/*
-** Function: SPI_Init
-**
-** Description: 
-** Initializes the SPI interface
-**
-** Input Parameters: 
-** none
-**
-** Return:
-** none
-*/
-int SPI_Init (ctrl_S *hSpi){
-	int ret;
-
-	ret = proslic_spi_setup();
-
-	return 0;
-}
-
-/*
-** Function: spiGci_ResetWrapper
-**
-** Description: 
-** Sets the reset pin of the ProSLIC
-*/
-int ctrl_ResetWrapper (void *hSpiGci, int status){
-	
-	printk("ctrl_ResetWrapper");	
-	proslic_reset(NULL, status);
-
-	return 0;
-}
-
-/*
-** SPI/GCI register read 
-**
-** Description: 
-** Reads a single ProSLIC register
-**
-** Input Parameters: 
-** channel: ProSLIC channel to read from
-** regAddr: Address of register to read
-** return data: data to read from register
-**
-** Return:
-** none
-*/
-uInt8 ctrl_ReadRegisterWrapper (void *hSpiGci, uInt8 channel, uInt8 regAddr){
-	
-
-	return proslic_read_register(hSpiGci,channel,regAddr);
-}
-
-
-/*
-** Function: spiGci_WriteRegisterWrapper 
-**
-** Description: 
-** Writes a single ProSLIC register
-**
-** Input Parameters: 
-** channel: ProSLIC channel to write to
-** address: Address of register to write
-** data: data to write to register
-**
-** Return:
-** none
-*/
-int ctrl_WriteRegisterWrapper (void *hSpiGci, unsigned char channel, unsigned char regAddr, unsigned char data){
-
-	proslic_write_register(hSpiGci,channel,regAddr, data);
-	return 0;
-}
-
-
-/*
-** Function: SPI_ReadRAMWrapper
-**
-** Description: 
-** Reads a single ProSLIC RAM location
-**
-** Input Parameters: 
-** channel: ProSLIC channel to read from
-** address: Address of RAM location to read
-** pData: data to read from RAM location
-**
-** Return:
-** none
-*/
-ramData ctrl_ReadRAMWrapper (void *hSpiGci, unsigned char channel, unsigned short ramAddr){
-	ramData data;
-
-	data = proslic_read_ram(hSpiGci,channel,ramAddr);
-
-	return data;
-}
-
-
-/*
-** Function: SPI_WriteRAMWrapper
-**
-** Description: 
-** Writes a single ProSLIC RAM location
-**
-** Input Parameters: 
-** channel: ProSLIC channel to write to
-** address: Address of RAM location to write
-** data: data to write to RAM location
-**
-** Return:
-** none
-*/
-int ctrl_WriteRAMWrapper (void *hSpiGci, unsigned char channel, unsigned short ramAddr, ramData data){
-
-	proslic_write_ram(hSpiGci,channel,ramAddr,data);
-
-	return 0;
-}
-
-
-
-/*
-** $Log: proslic_spi_api.c,v $
-** Revision 1.11  2008/07/24 21:06:16  lajordan
-** no message
-**
-** Revision 1.10  2008/03/19 18:20:09  lajordan
-** no message
-**
-** Revision 1.9  2007/06/04 16:35:51  lajordan
-** added profiling
-**
-** Revision 1.8  2007/02/27 19:25:48  lajordan
-** updated api
-**
-** Revision 1.7  2007/02/05 23:43:27  lajordan
-** fixed register access func
-**
-** Revision 1.6  2006/11/22 21:38:19  lajordan
-** broadcast added
-**
-** Revision 1.5  2006/07/21 20:31:26  lajordan
-** fixed cant connect message
-**
-** Revision 1.4  2006/07/19 18:15:56  lajordan
-** fixed spi init
-**
-** Revision 1.3  2006/07/18 21:50:16  lajordan
-** removed extraneous endif
-**
-** Revision 1.2  2006/07/18 21:48:51  lajordan
-** added 16 bit accesses example code
-**
-** Revision 1.1.1.1  2006/07/13 20:26:08  lajordan
-** no message
-**
-** Revision 1.1.1.1  2006/07/06 22:06:23  lajordan
-** no message
-**
-** Revision 1.3  2006/06/29 19:11:18  laj
-** lpt driver completed
-**
-** Revision 1.2  2006/06/21 23:46:58  laj
-** register reads/writes added
-**
-** Revision 1.1  2006/06/21 23:18:07  laj
-** no message
-**
-** Revision 1.1  2006/06/21 22:42:26  laj
-** new api style
-**
-** Revision 1.3  2005/11/14 17:42:34  laj
-** added SPI_init
-**
-** Revision 1.2  2005/11/07 23:20:54  laj
-** took out extra spaces
-**
-*/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys.h
deleted file mode 100644
index d629915..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-
-#ifndef __PROSLIC_SYS_HDR__
-#define __PROSLIC_SYS_HDR__ 1
-#include <linux/types.h>
-#include <linux/time64.h> /* for struct timespec */
-
-#include <linux/spi/spi.h>
-
-#include "proslic_sys_cfg.h"
-
-
-
-/* Do a quick sanity check on  channel setting */
-#define SILABS_MAX_CHAN 32 
-#if (SILABS_MAX_CHANNELS > SILABS_MAX_CHAN)
-#error "ProSLIC only supports up to 32 channels"
-#endif
-
-#define PROSLIC_BCAST       0xFF
-#define PROSLIC_SPI_OK      0
-#define PROSLIC_SPI_NOK     8 /* This is what the ProSLIC API calls SPI_FAIL */ 
-#define PROSLIC_TIMER_ERROR 15
-
-/* Debug macros */
-#define PROSLIC_API_HDR "PROSLIC_API "
-
-#define proslic_trace(fmt, arg...) if(proslic_debug_setting & 0x1) printk( KERN_NOTICE PROSLIC_API_HDR "TRC: " fmt "\n", ##arg)
-#define proslic_debug(fmt, arg...) if(proslic_debug_setting & 0x2) printk( KERN_DEBUG PROSLIC_API_HDR "DBG: " fmt "\n", ##arg)
-#define  proslic_error(fmt, arg...) if(proslic_debug_setting & 0x4) printk( KERN_ERR PROSLIC_API_HDR "ERR: " fmt "\n", ##arg)
-
-/* Data types compatible with the ProSLIC API system services layer */
-typedef u_int8_t            BOOLEAN;
-typedef int8_t              int8;
-typedef u_int8_t            uInt8;
-typedef uInt8               uChar;
-typedef int16_t             int16;
-typedef u_int16_t           uInt16;
-typedef int32_t             int32;
-typedef u_int32_t           uInt32;
-typedef u_int32_t           ramData;
-
-
-#ifndef CTRL_H
-/* Function prototypes compatible with the ProSLIC API system services layer */
-typedef int (*ctrl_Reset_fptr) (void *hCtrl, int in_reset);
-
-typedef int (*ctrl_WriteRegister_fptr) (void *hCtrl, uInt8 channel, uInt8 regAddr, uInt8 data);
-typedef int (*ctrl_WriteRAM_fptr) (void *hCtrl, uInt8 channel, uInt16 ramAddr, ramData data);
-
-typedef uInt8 (*ctrl_ReadRegister_fptr) (void *hCtrl, uInt8 channel, uInt8 regAddr);
-typedef ramData (*ctrl_ReadRAM_fptr) (void *hCtrl, uInt8 channel, uInt16 ramAddr);
-
-typedef int (*ctrl_Semaphore_fptr) (void *hCtrl, int in_critical_section);
-#endif
-
-typedef void *(*get_hctrl) (uInt8 channel); /* Get a pointer to the control interface */
-
-typedef int (*system_delay_fptr) (void *hTimer, int timeInMs);
-typedef int (*system_timeElapsed_fptr) (void *hTimer, void *startTime, int *timeInMs);
-typedef int (*system_getTime_fptr) (void *hTimer, void *time);
-typedef void *(get_Timer)(void); /* return a pointer to "the" hTimer */
-
-/* Function table entries to reduce namespace pollution */
-typedef struct
-{
-  ctrl_Reset_fptr             reset;
-
-  ctrl_WriteRegister_fptr     write_reg;
-  ctrl_WriteRAM_fptr          write_ram;
-
-  ctrl_ReadRegister_fptr      read_reg;
-  ctrl_ReadRAM_fptr           read_ram;
-
-  ctrl_Semaphore_fptr         sem;
-} proslic_spi_fptrs_t;
-
-typedef struct
-{
-  system_delay_fptr          slic_delay;
-  system_timeElapsed_fptr    elapsed_time;
-  system_getTime_fptr        get_time;
-} proslic_timer_fptrs_t;
-
-/* Timer container */
-typedef struct 
-{
-  struct timespec64 timerObj;
-} proslic_timeStamp;
-
-extern int proslic_channel_count;
-extern int proslic_debug_setting;
-int proslic_spi_setup(void);
-void proslic_spi_shutdown(void);
-
-typedef enum
-{
-  PROSLIC_IS_UNKNOWN,
-  PROSLIC_IS_PROSLIC,
-  PROSLIC_IS_DAA
-} proslic_dev_t;
-
-/* Exported functions/values */
-extern proslic_timer_fptrs_t proslic_timer_if;
-extern proslic_spi_fptrs_t proslic_spi_if; 
-int proslic_reset(void *hCtrl, int in_reset);
-int proslic_write_register(void *hCtrl, uInt8 channel, uInt8 regAddr, uInt8 data);
-int proslic_write_ram(void *hCtrl, uInt8 channel, uInt16 ramAddr, ramData data);
-uInt8 proslic_read_register(void *hCtrl, uInt8 channel, uInt8 regAddr);
-ramData proslic_read_ram(void *hCtrl, uInt8 channel, uInt16 ramAddr);
-
-int proslic_get_channel_count(void);
-proslic_dev_t proslic_get_device_type(uint8_t channel);
-void *proslic_get_hCtrl(uint8_t channel);
-int proslic_spi_probe(struct spi_device *spi, struct spi_driver *spi_drv);
-int proslic_spi_remove(struct spi_device *spi);
-
-
-#endif /* End of __PROSLIC_SYS_HDR__ */
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_cfg.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_cfg.h
deleted file mode 100644
index 021a9c6..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_cfg.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-
-#ifndef __PROSLIC_SYS_CFG_HDR__
-#define __PROSLIC_SYS_CFG_HDR__ 1
-/* 
- * Begin user defined build options 
- *
- * TODO: move this to a .kconfig option menu
- */
-
-#define SILABS_BITS_PER_WORD    8        /* MUST be either 8, 16, or 32 */
-#define SILABS_SPI_RATE         4000000  /* In terms of Hz */
-#define SILABS_MAX_RAM_WAIT     1000     /* In terms of loop count */
-#define SILABS_RESET_GPIO       135
-#define SILABS_MAX_CHANNELS     4
-#define SILABS_RAM_BLOCK_ACCESS 1        /* Define this if you wish to use a single block to write to RAM, may not work on all systems */
-#define SILABS_DEFAULT_DBG      7
-#define SILABS_MIN_MSLEEP_TIME  30       /* threshold to call mdelay vs. msleep() */
-#define SILABS_MSLEEP_SLOP      10       /* If the msleep() function is off by a constant value, set this number positive if it's too long or negative number for too short - terms of mSec */
-#define PROSLIC_XFER_BUF        4        /* How many bytes to send in 1 transfer.  Either 1,2, or 4.  If setting SILABS_BITS_PER_WORD to 16 or 32, you MUST set this either 2 or 4 */
-/* End of user defined section */
-
-#endif /* __PROSLIC_SYS_CFG_HDR__ */
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_main.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_main.c
deleted file mode 100644
index b9243c4..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_main.c
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/moduleparam.h>
-#include "proslic_sys.h"
-
-#define PROSLIC_SYS_SERVICES_VER   "0.0.1"
-#define DRIVER_DESCRIPTION         "ProSLIC API compatible system services"
-#define DRIVER_AUTHOR              "Silicon Laboratories"
-
-int proslic_debug_setting = SILABS_DEFAULT_DBG;
-int proslic_channel_count = SILABS_MAX_CHANNELS;
-
-module_param(proslic_debug_setting, int, S_IRUSR | S_IWUSR |S_IRGRP | S_IWGRP);
-MODULE_PARM_DESC(proslic_debug_setting, "debug mode bitmask, 1 = TRC, 2 = DBG, 4 = ERR");
-module_param(proslic_channel_count, int, S_IRUSR | S_IRGRP  );
-MODULE_PARM_DESC(proslic_channel_count, "Number of actual channels on the platform");
-
-/*****************************************************************************************************/
-
-int init_module(void)
-{
-  int rc;
-
-  printk( KERN_INFO "ProSLIC API system services module loaded, version: %s\n", PROSLIC_SYS_SERVICES_VER);
-  printk( KERN_INFO "Debug = 0x%0x\n", proslic_debug_setting);
-
-  if(proslic_channel_count > SILABS_MAX_CHANNELS)
-  {
-    printk( KERN_ERR "proslic_channel_count max is: %d, got: %d\n", SILABS_MAX_CHANNELS, proslic_channel_count);
-    return -EINVAL;
-  }
-  
-  rc = proslic_spi_setup();
-
-  if(rc == 0)
-  {
-    /* TODO: any other init we may want tot do here... */
-  }
-  else
-  {
-    printk( KERN_ERR "proslic_spi_setup returned: %d\n", rc);
-    return rc;
-  }
-
-  return 0;
-
-}
-
-void cleanup_module(void)
-{
-  proslic_spi_shutdown();
-  printk( KERN_INFO "ProSLIC API system services module unloaded.\n");
-}
-
-MODULE_DESCRIPTION(DRIVER_DESCRIPTION);
-MODULE_AUTHOR(DRIVER_AUTHOR);
-MODULE_LICENSE("Dual MPL/GPL"); 
-
-EXPORT_SYMBOL(proslic_spi_if);
-EXPORT_SYMBOL(proslic_timer_if);
-EXPORT_SYMBOL(proslic_get_channel_count);
-EXPORT_SYMBOL(proslic_get_device_type);
-EXPORT_SYMBOL(proslic_get_hCtrl);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_spi.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_spi.c
deleted file mode 100644
index 101c486..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_spi.c
+++ /dev/null
@@ -1,698 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/module.h>
-#include <linux/spi/spi.h>
-#include <linux/spinlock.h>
-#include <linux/of_gpio.h>
-#include <linux/gpio.h>
-#include <linux/delay.h>
-
-#include "proslic_sys.h"
-
-/*****************************************************************************************************/
-
-#define PROSLIC_REG_ID         0
-#define PROSLIC_REG_RAM_WAIT   4
-#define PROSLIC_REG_RAM_HI     5 
-#define PROSLIC_REG_RAM_D0     6
-#define PROSLIC_REG_RAM_D1     7
-#define PROSLIC_REG_RAM_D2     8
-#define PROSLIC_REG_RAM_D3     9
-#define PROSLIC_REG_RAM_LO     10
-#define PROSLIC_REG_WRVSLIC    12
-#define PROSLIC_REG_WRVDAA     34
-#define PROSLIC_REG_ISDAA      11
-
-#define PROSLIC_CW_BYTE        0
-#define PROSLIC_REG_BYTE       1
-#define RAM_ADR_HIGH_MASK(ADDR) (((ADDR)>>3)&0xE0)
-
-/* Basic register definitions, regardless of chipset ('4x, '2x, '17x, '26x compatible */
-
-#define PROSLIC_CW_RD          0x60
-#define PROSLIC_CW_WR          0x20
-#define PROSLIC_CW_BCAST       0x80
-#define PROSLIC_BCAST          0xFF
-
-#ifndef PROSLIC_XFER_BUF
-#define PROSLIC_XFER_BUF (SILABS_BITS_PER_WORD/8)
-#endif
-
-/* Now do some sanity checks */
-#if (SILABS_BITS_PER_WORD != 32) && (SILABS_BITS_PER_WORD != 16) && (SILABS_BITS_PER_WORD != 8)
-#error "SILABS_BITS_PER_WORD needs to be either 8, 16 or 32"
-#endif
-
-#if (((SILABS_BITS_PER_WORD == 16) && (PROSLIC_XFER_BUF != 2) ) \
-    || ((SILABS_BITS_PER_WORD == 32) && (PROSLIC_XFER_BUF != 4) ) ) 
-#error "SILABS_BITS_PER_WORD & PROSLIC_XFER_BUF size mismatch"
-#endif
-
-#if (SILABS_BITS_PER_WORD != 8)
-#define SILABS_CW_BYTE   1
-#define SILABS_REG_BYTE 0
-#else
-#define SILABS_CW_BYTE   0
-#define SILABS_REG_BYTE 1
-#endif
-
-typedef struct 
-{
-  proslic_dev_t deviceType[SILABS_MAX_CHANNELS];  
-  spinlock_t bus_lock;
-  uInt8 channel_count; /* In most cases this is the channel count as well */
-} proslic_spi_data_t;
-
-typedef struct
-{
-  /* Placeholder for now */
-} proslic_spi_pform_t;
-
-/* Chan address is sent in reverse bit order */
-static uInt8 chanAddr[SILABS_MAX_CHAN] =
-{
-  0x00, 0x10, 
-#if (SILABS_MAX_CHAN > 2)
-  0x08, 0x18,
-#endif
-#if (SILABS_MAX_CHAN > 4)
-  0x04, 0x14, 
-#endif
-#if (SILABS_MAX_CHAN > 6)
-  0x0C, 0x1C,
-#endif
-#if (SILABS_MAX_CHAN > 8)
-  0x02, 0x12, 
-#endif
-#if (SILABS_MAX_CHAN > 10)
-  0x0A, 0x1A,
-#endif
-#if (SILABS_MAX_CHAN > 12)
-  0x06, 0x16, 
-#endif
-#if (SILABS_MAX_CHAN > 14)
-  0x0E, 0x1E,
-#endif
-#if (SILABS_MAX_CHAN > 16)
-  0x01, 0x11,
-#endif
-#if (SILABS_MAX_CHAN > 18)
-  0x09, 0x19,
-#endif
-#if (SILABS_MAX_CHAN > 20)
-  0x05, 0x15,
-#endif
-#if (SILABS_MAX_CHAN > 22)
-  0x0D, 0x1D,
-#endif
-#if (SILABS_MAX_CHAN > 24)
-  0x03, 0x13,
-#endif
-#if (SILABS_MAX_CHAN > 26)
-  0x0B, 0x1B,
-#endif
-#if (SILABS_MAX_CHAN > 28)
-  0x07,0x17,
-#endif
-#if (SILABS_MAX_CHAN > 30)
-  0x0F, 0x1F
-#endif
-};
-
-static proslic_spi_data_t   *proslic_data;
-static unsigned int proslic_reset_gpio = SILABS_RESET_GPIO;
-struct spi_driver *proslic_spi;  
-struct spi_device *proslic_spidev;
-
-/*****************************************************************************************************/
-uInt8 proslic_read_register_private(void *hCtrl, uInt8 channel, uInt8 regAddr)
-{
-  u_int8_t data_stream[4];
-//  proslic_spi_data_t *spi_data = (proslic_spi_data_t *)hCtrl;
-  if (proslic_spidev == NULL)
-   	printk ("%s : small spi NULL\n",__FUNCTION__);
-
-  if( unlikely(channel >= SILABS_MAX_CHANNELS) )
-  {
-    return PROSLIC_SPI_NOK;
-  }
-  else
-  {
-    data_stream[PROSLIC_CW_BYTE] = PROSLIC_CW_RD | chanAddr[channel];
-  }  
-
-  data_stream[PROSLIC_REG_BYTE] = regAddr;
-
-  data_stream[2] = 0xFF; /* Set the register to a non-zero value, just in case */
-#if (PROSLIC_XFER_BUF == 4) || (PROSLIC_XFER_BUF == 2)
-  spi_write_then_read(proslic_spidev, data_stream, 2, &data_stream[2], 2); /* In essence, 2 16 bit ops: 1 to send the request, 1 to get the data, needs to be 32 bit aligned. */
-  proslic_debug("%s(%d): chan = %u reg = %u data = 0x%02X", __FUNCTION__, __LINE__, channel, regAddr, data_stream[2]);
-#else
-  {
-    int i;
-    for(i = 0; i < 2; i++)
-    {
-      spi_write(proslic_spidev, &data_stream[i], 1);
-    }
-  }
-  spi_read(proslic_spidev, &data_stream[2], 1);
-#endif  
-
-  return data_stream[2];
-}
-
-/*****************************************************************************************************/
-
-uInt8 proslic_read_register(void *hCtrl, uInt8 channel, uInt8 regAddr)
-{
-  uInt8 data;
-  //unsigned long irqSettings;
-  //proslic_spi_data_t *spi_data = (proslic_spi_data_t *)hCtrl;
-  //spin_lock_irqsave(&spi_data->bus_lock, irqSettings);
-  data = proslic_read_register_private(hCtrl, channel, regAddr);
-  //spin_unlock_irqrestore(&spi_data->bus_lock, irqSettings);
-  proslic_debug("%s(%d): chan = %u reg = %u data = 0x%02X", __FUNCTION__, __LINE__, channel, regAddr, data);
-  return data;
-}
-EXPORT_SYMBOL(proslic_read_register);
-
-
-/*****************************************************************************************************/
-/* ProSLIC API register write function */
-#if PROSLIC_XFER_BUF == 4
-#define proslic_write_register_private proslic_write_register
-#endif
-
-int proslic_write_register_private(void *hCtrl, uInt8 channel, uInt8 regAddr, uInt8 data)
-{
-  u_int8_t data_stream[4];
-  //struct spi_device *spi_data = (struct spi_device *)hCtrl;
-
-#if PROSLIC_XFER_BUF != 4
-  int i;
-#endif
-
-  if( unlikely(channel == PROSLIC_BCAST) )
-  {
-    data_stream[PROSLIC_CW_BYTE] = PROSLIC_CW_BCAST | PROSLIC_CW_WR;
-  }
-  else if( unlikely(channel >= SILABS_MAX_CHANNELS) )
-  {
-    return PROSLIC_SPI_NOK;
-  }
-  else
-  {
-    data_stream[PROSLIC_CW_BYTE] = PROSLIC_CW_WR | chanAddr[channel];
-  }  
-
-  proslic_trace("%s(%d): chan = %u reg = %u data = 0x%02X", __FUNCTION__, __LINE__, channel, regAddr, data);
-
-  data_stream[PROSLIC_REG_BYTE] = regAddr;
-
-  data_stream[2] = data_stream[3] = data;
-
-#if PROSLIC_XFER_BUF == 4
-  spi_write(proslic_spidev, data_stream, PROSLIC_XFER_BUF);
-#else
-#if PROSLIC_XFER_BUF == 2 /* 16 bit mode */
-  for(i = 0; i < 4; i+=2)
-#else /* Byte by byte */
-  for(i = 0; i < 3; i++)
-#endif
-  {
-    spi_write(proslic_spidev, &data_stream[i], PROSLIC_XFER_BUF);
-  }
-#endif  
-
-  return PROSLIC_SPI_OK;
-}
-/*****************************************************************************************************/
-#if PROSLIC_XFER_BUF != 4
-int proslic_write_register(void *hCtrl, uInt8 channel, uInt8 regAddr, uInt8 data)
-{
-  unsigned long irqSettings;
-  int rc;
-  //proslic_spi_data_t *spi_data = (proslic_spi_data_t *)hCtrl;
-  //spin_lock_irqsave(&spi_data->bus_lock, irqSettings);
-  rc  = proslic_write_register_private(hCtrl, channel, regAddr, data);
-  //spin_unlock_irqrestore(&spi_data->bus_lock, irqSettings);
-  return rc;
-}
-EXPORT_SYMBOL(proslic_write_register);
-#endif
-
-/*****************************************************************************************************/
-
-/* 
- * wait for RAM access
- *
- * return code 0 = OK
- *
- */
-
-static int wait_ram(void *hCtrl, uInt8 channel)
-{
-  unsigned int count = SILABS_MAX_RAM_WAIT;
-  uInt8 data;
-
-  do
-  { 
-    data = proslic_read_register_private(hCtrl, channel, PROSLIC_REG_RAM_WAIT) & 0x1;
-    if(unlikely(data))
-    {
-     mdelay(5);
-    }  
-  }while((data) && (count--));
-
-  if(likely(count))
-  {
-    return 0;
-  }
-  return -1; /* Timed out */
-}
-
-/*****************************************************************************************************/
-/* RAM Write wrapper */
-int proslic_write_ram(void *hCtrl, uInt8 channel, uInt16 ramAddr, ramData data )
-{
-
-  ramData myData = data;
-  int rc = 0;
-  //unsigned long irqSettings;
-  //struct spi_device *spi_data = (struct spi_device *)hCtrl;
-  hCtrl = proslic_spidev;
-
-  proslic_trace("%s(%d): chan = %u ram = %u data = 0x%08X", __FUNCTION__, __LINE__, channel, ramAddr, data);
-  //spin_lock_irqsave(&spi_data->bus_lock, irqSettings);
-
-  if(wait_ram(hCtrl,channel) != 0)
-  {
-    return PROSLIC_SPI_NOK;
-  }
-
- 
-#ifdef SILABS_RAM_BLOCK_ACCESS
-  {
-    uInt8 ramWriteData[24]; /* This encapsulates the 6 reg writes into 1 block */
-    const uInt8 regAddr[6] = {PROSLIC_REG_RAM_HI, PROSLIC_REG_RAM_D0, PROSLIC_REG_RAM_D1, 
-                              PROSLIC_REG_RAM_D2, PROSLIC_REG_RAM_D3, PROSLIC_REG_RAM_LO};
-    int i;
-    uInt8 scratch;
-
-    /* Setup control word & registers for ALL the reg access */
-    scratch = chanAddr[channel] | PROSLIC_CW_WR;
-
-    for(i = 0; i < 6; i++)
-    {
-      ramWriteData[(i<<2)]       = scratch ; 
-      ramWriteData[(i<<2)+1]     = regAddr[i];
-    }
-
-    /* For the data, we send the same byte twice to keep things 32 bit aligned */
-    ramWriteData[2] = ramWriteData[3] = RAM_ADR_HIGH_MASK(ramAddr);
-
-    ramWriteData[6] = ramWriteData[7] = (uInt8)(myData<<3);
-    myData = myData >> 5;
-
-    ramWriteData[10] = ramWriteData[11] = (uInt8)(myData & 0xFF);
-    myData = myData >> 8;
-
-    ramWriteData[14] = ramWriteData[15] = (uInt8)(myData & 0xFF);
-    myData = myData >> 8;
-
-    ramWriteData[18] = ramWriteData[19] = (uInt8)(myData & 0xFF);
-
-    ramWriteData[22] = ramWriteData[23] = (uInt8)(ramAddr& 0xFF);
-
-    spi_write(hCtrl, ramWriteData, 24);
-    
-  }
-#else
-  proslic_write_register_private(hCtrl, channel, RAM_ADDR_HI, RAM_ADR_HIGH_MASK(ramAddr));
-
-  proslic_write_register_private(hCtrl, channel, RAM_DATA_B0, ((unsigned char)(myData<<3)));
- 
-  myData = myData >> 5;
-
-  proslic_write_register_private(hCtrl, channel, RAM_DATA_B1, ((unsigned char)(myData & 0xFF)));
-
-  myData = myData >> 8;
-  
-  proslic_write_register_private(hCtrl, channel, RAM_DATA_B2, ((unsigned char)(myData & 0xFF)));
-
-  myData = myData >> 8;
-  
-  proslic_write_register_private(hCtrl, channel, RAM_DATA_B3, ((unsigned char)(myData & 0xFF)));
-
-  proslic_write_register_private(hCtrl, channel, RAM_ADDR_LO, (unsigned char)(ramAddr & 0xFF));
-#endif
-  if(wait_ram(hCtrl,channel) != 0)
-  {
-    rc = PROSLIC_SPI_NOK;
-  }
-  else
-  {
-    rc = PROSLIC_SPI_OK;
-  }
-  //spin_unlock_irqrestore(&spi_data->bus_lock, irqSettings);
-
-  return rc;
-  
-}
-EXPORT_SYMBOL(proslic_write_ram);
-
-/*****************************************************************************************************/
-ramData proslic_read_ram(void *hCtrl, uInt8 channel, uInt16 ramAddr)
-{
-  ramData data;
-  //unsigned long irqSettings;
-  //proslic_spi_data_t *spi_data = (proslic_spi_data_t *)hCtrl;
-  hCtrl = proslic_spidev;
-
-  if(wait_ram(hCtrl,channel) != 0)
-  {
-    return PROSLIC_SPI_NOK;
-  }
-
-  //spin_lock_irqsave(&spi_data->bus_lock, irqSettings);
-  /* TODO: could combine these 2 writes into 1 spi_write call... */
-  proslic_write_register_private(hCtrl, channel, PROSLIC_REG_RAM_HI, RAM_ADR_HIGH_MASK(ramAddr));
-
-  proslic_write_register_private(hCtrl, channel, PROSLIC_REG_RAM_LO, (unsigned char)(ramAddr&0xFF));
-
-  if(wait_ram(hCtrl,channel) != 0)
-  {
-    return PROSLIC_SPI_NOK;
-  }
-
-  data = proslic_read_register_private(hCtrl, channel, PROSLIC_REG_RAM_D3);
-  data = data << 8;
-  data |= proslic_read_register_private(hCtrl, channel, PROSLIC_REG_RAM_D2);
-  data = data << 8;
-  data |= proslic_read_register_private(hCtrl, channel, PROSLIC_REG_RAM_D1);
-  data = data << 8;
-  data |= proslic_read_register_private(hCtrl, channel, PROSLIC_REG_RAM_D0);
-  //spin_unlock_irqrestore(&spi_data->bus_lock, irqSettings);
- 
-  data = data >>3;
-
-  proslic_trace("%s(%d): chan = %u ram = %u data = 0x%08X", __FUNCTION__, __LINE__, channel, ramAddr, data);
-
-  return data;
-
-}
-EXPORT_SYMBOL(proslic_read_ram);
-
-/*****************************************************************************************************/
-int proslic_reset(void *hCtrl, int in_reset)
-{
-  proslic_trace("%s(%d): in_reset = %d", __FUNCTION__, __LINE__, in_reset);
-  gpio_direction_output(proslic_reset_gpio, (in_reset == 0) );
-
-  return PROSLIC_SPI_OK;
-}
-EXPORT_SYMBOL(proslic_reset);
-
-/*****************************************************************************************************/
-
-/*
- * Do a simple write/verify test on a given register.  0 = OK.
- */
-static int simple_wrv(void *hCtrl, uInt8 channel, uInt8 regAddr)
-{
-  uInt8 data;
-
-  proslic_write_register(hCtrl, channel, regAddr, 0);
-  data = proslic_read_register(hCtrl, channel, regAddr);
-  if(unlikely(data != 0) )
-  {
-    return -1;
-  }
-
-  proslic_write_register(hCtrl, channel, regAddr, 0x5A);
-  data = proslic_read_register(hCtrl, channel, regAddr);
-  if(unlikely(data != 0x5A) )
-  {
-    return -2;
-  }
-
-  return 0;
-}
-
-/*****************************************************************************************************/
-
-/* 
- * Determine if this a ProSLIC or DAA or unknown type - NOT fully tested against ALL chipsets, may not
- * properly work with Si3218/9 parts.
- */
-static proslic_dev_t proslic_detect_type(void *hCtrl, uInt8 channel)
-{
-  /* Guess it's a ProSLIC first */
-  uInt8 data;
-
-  data = proslic_read_register(hCtrl, channel, PROSLIC_REG_ISDAA);
-  proslic_debug("%s(%d): channel = %d data = 0x%0X", __FUNCTION__, __LINE__, channel, data);
-
-  /* For ProSLIC ISDAA = 5, for DAA it is not (it is non-zero and not FF */
-
-  if( unlikely((data != 0xFF) && data ))
-  {
-    /* Likely a ProSLIC, let's confirm it by doing a few register write/verify operations */
-    if( data == 5) 
-    {
-      if(unlikely(simple_wrv(hCtrl, channel, PROSLIC_REG_WRVSLIC) == 0))
-      {
-        proslic_debug("%s(%d): channel = %d is_proslic", __FUNCTION__, __LINE__, channel);
-        return PROSLIC_IS_PROSLIC;
-      }
-    }
-    else /* Likely a DAA/Si3050 device */
-    {
-      if(unlikely(simple_wrv(hCtrl, channel, PROSLIC_REG_WRVDAA) == 0))
-      {
-        proslic_debug("%s(%d): channel = %d is_daa", __FUNCTION__, __LINE__, channel);
-        return PROSLIC_IS_DAA;
-      }
-    }
-  }
-
-  proslic_debug("%s(%d): channel = %d is_unknown", __FUNCTION__, __LINE__, channel);
-  return PROSLIC_IS_UNKNOWN;
-}
-
-/*****************************************************************************************************/
-/*  Pull in any device tree parameters */
-#ifdef CONFIG_OF
-static void proslic_of_probe(struct spi_device *spi)
-{
-  int len;
-  const __be32 *property;
-  u8 scratch;
-
-  printk(KERN_INFO "proslic_of_probe()\n");
- 
-  /* see if the user specified number of channels */
-  property = of_get_property( spi->dev.of_node, "channel_count", &len); 
-
-  if(property && (len >= sizeof(__be32)) )
-  {
-    scratch = be32_to_cpup(property);
-
-    if(( scratch <= SILABS_MAX_CHANNELS ) 
-      && (scratch > 0) )
-    {
-        proslic_channel_count = scratch;
-    }
-  }
-
-  /* See if the user specified a debug setting */
-  property = of_get_property( spi->dev.of_node, "debug_level", &len); 
-
-  if(property && (len >= sizeof(__be32)) )
-  {
-    scratch = be32_to_cpup(property);
-
-    if(( scratch <= SILABS_DEFAULT_DBG ) 
-      && (scratch > 0) )
-    {
-        proslic_debug_setting = scratch;
-  	printk(KERN_INFO "debug_level = %d\n", proslic_debug_setting);
-    }
-  }
-
-  printk(KERN_INFO "[previous]reset_gpio = %d\n", proslic_reset_gpio);
-  proslic_reset_gpio =
-	  of_get_named_gpio(spi->dev.of_node, "reset_gpio", 0);
-
-  printk(KERN_INFO "reset_gpio = %d\n", proslic_reset_gpio);
-}
-#endif
-
-/*****************************************************************************************************/
-int proslic_spi_probe(struct spi_device *spi, struct spi_driver *spi_drv)
-{
-  proslic_spi_pform_t *pform_data;
-  unsigned int channel;
-  int rc;
-
-  printk(KERN_INFO "PROSLIC module being probed\n");
-
-  proslic_spi = spi_drv;
-  pform_data = (proslic_spi_pform_t *) &(spi->dev.platform_data);
-
-#ifdef CONFIG_OF
-  proslic_of_probe(spi);
-#endif
-
-  rc = gpio_request(proslic_reset_gpio,"proslic_reset");
-  if(rc == 0)
-  {
-    printk(KERN_INFO "PROSLIC GPIO registered OK");
-    gpio_export( proslic_reset_gpio, 0);
-    proslic_reset(NULL, 0);
-  }
-  else
-  {
-    printk(KERN_INFO "PROSLIC GPIO registered FAil!! rc = %d", rc);
-    return -ENODEV;
-  }
-
-  if(unlikely(!pform_data))
-  {
-    return -ENODEV;
-  }
-
-  proslic_data = kzalloc(sizeof(*proslic_data), GFP_KERNEL);
-
-  if(unlikely(!proslic_data))
-  {
-    return -ENOMEM;
-  }
-
-  spin_lock_init(&(proslic_data->bus_lock));
-  proslic_spidev = spi;
-#ifdef CONFIG_OF 
-  spi->bits_per_word = SILABS_BITS_PER_WORD; 
-  spi->max_speed_hz =  SILABS_SPI_RATE;
-  spi->mode = SPI_MODE_3;
-  if( spi_setup(spi) != 0)
-  {
-    printk(KERN_ERR PROSLIC_API_HDR "failed to configure spi mode");
-    kfree(proslic_data);
-    return -EIO;
-  }
-#endif
-  spi_set_drvdata(spi, proslic_data);
-
-  /* Probe to determine the number of DAA's or ProSLIC's present */
-  for(channel = 0; channel < proslic_channel_count; channel++)
-  {
-    proslic_data->deviceType[channel] = proslic_detect_type(proslic_spidev, channel);
-    if( proslic_data->deviceType[channel] != PROSLIC_IS_UNKNOWN)
-    {
-      proslic_data->channel_count++;
-    }
-  }
-
-  if(proslic_data->channel_count)
-  {
-    return 0;
-  }
-  else
-  {
-    return -ENXIO;
-  }
-}
-EXPORT_SYMBOL(proslic_spi_probe);
-
-/*****************************************************************************************************/
-int proslic_spi_remove(struct spi_device *spi)
-{
-  void *ptr;
-
-  printk(KERN_INFO "ProSLIC module being removed");
-  /* Just put the device(s) into reset - assumes 1 reset per SPI device */
-  proslic_reset(NULL, 1);
-
-  ptr = spi_get_drvdata(spi);
-  if(ptr != NULL)
-  {
-    kfree(ptr);
-  }
-
-  return 0;
-}
-EXPORT_SYMBOL(proslic_spi_remove);
-
-/*****************************************************************************************************/
-int proslic_spi_setup()
-{
-  int rc;
-  printk(KERN_INFO "proslic_spi_setup()\n");
-
-  rc = spi_register_driver(proslic_spi);
-
-  if(rc != 0)
-  {
-    proslic_error("%s(%d): spi_register driver returned = %d", __FUNCTION__, __LINE__, rc);
-  }
-  else
-  {
-    proslic_debug("%s(%d): spi driver registered", __FUNCTION__, __LINE__);
-  }
-
-  proslic_trace("%s(%d): completed", __FUNCTION__, __LINE__);
-  return rc;
-}
-
-
-void proslic_spi_shutdown()
-{
-  spi_unregister_driver(proslic_spi);
-  gpio_unexport( proslic_reset_gpio );
-  gpio_free( proslic_reset_gpio );
-}
-/*****************************************************************************************************/
-int proslic_get_channel_count()
-{
-  return proslic_data->channel_count;
-}
-
-proslic_dev_t proslic_get_device_type(uint8_t channel_number)
-{
-  if(channel_number < proslic_data->channel_count)
-  {
-    return proslic_data->deviceType[channel_number];
-  }
-  else
-  {
-    return PROSLIC_IS_UNKNOWN;
-  }
-}
-
-void *proslic_get_hCtrl(uint8_t channel)
-{
-  if(channel < proslic_data->channel_count)
-  {
-    return proslic_data;
-  }
-  else
-  {
-    return NULL;
-  }
-}
-
-/*****************************************************************************************************/
-proslic_spi_fptrs_t proslic_spi_if = 
-{
-  proslic_reset, 
-
-  proslic_write_register,
-  proslic_write_ram,
-
-  proslic_read_register,
-  proslic_read_ram,
-
-  NULL, /* semaphore */
-
-};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_timer.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_timer.c
deleted file mode 100644
index 7c1ca1b..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_sys_timer.c
+++ /dev/null
@@ -1,62 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/delay.h>
-#include <linux/ktime.h>
-#include <linux/timekeeping.h>
-
-#include "proslic_sys.h"
-
-/*****************************************************************************************************/
-static int proslic_sys_delay(void *hTimer, int timeInMsec)
-{
-	if(likely(timeInMsec < SILABS_MIN_MSLEEP_TIME))
-	{
-		mdelay(timeInMsec);
-	}
-	else
-	{
-		msleep((timeInMsec-SILABS_MSLEEP_SLOP));
-	}
-	return PROSLIC_SPI_OK;
-}
-
-/*****************************************************************************************************/
-/* Code assumes time value has been allocated */
-static int proslic_sys_getTime(void *hTimer, void *time)
-{
-	if(time != NULL)
-	{
-		ktime_get_coarse_real_ts64(&((proslic_timeStamp *)time)->timerObj);
-		return PROSLIC_SPI_OK;
-	}
-	else
-	{
-		return PROSLIC_TIMER_ERROR;
-	}
-}
-/*****************************************************************************************************/
- 
-static int proslic_sys_timeElapsed(void *hTimer, void *startTime, int *timeInMsec)
-{
-	if( (startTime != NULL) && (timeInMsec != NULL) )
-	{
-		struct timespec64 now;
-		struct timespec64 ts_delta;
-		ktime_get_coarse_real_ts64(&now);
-		ts_delta = timespec64_sub(now, (((proslic_timeStamp *) startTime)->timerObj));
-		*timeInMsec = (int)( (ts_delta.tv_sec *1000) + (ts_delta.tv_nsec / NSEC_PER_MSEC) );
-		return PROSLIC_SPI_OK;
-	}
-	else
-	{
-		return PROSLIC_TIMER_ERROR;
-	}
-}
-
-
-proslic_timer_fptrs_t proslic_timer_if =
-{
-	proslic_sys_delay,
-	proslic_sys_timeElapsed,
-	proslic_sys_getTime
-};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_timer_intf_linux.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_timer_intf_linux.c
deleted file mode 100644
index 208a0df..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/proslic_timer_intf_linux.c
+++ /dev/null
@@ -1,91 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * $Id: proslic_timer_intf_win.c 109 2008-10-22 19:45:09Z lajordan@SILABS.COM $
- *
- * system.c
- * System specific functions implementation file
- *
- * Author(s): 
- * laj
- *
- * Distributed by: 
- * Silicon Laboratories, Inc
- *
- * File Description:
- * This is the implementation file for the system specific functions like timer functions.
- *
- * Dependancies:
- * datatypes.h
- *
- */
-#include "config_inc/si_voice_datatypes.h"
-#include "inc/si_voice_timer_intf.h"
-#include <linux/time.h>
-#include <linux/timer.h>
-#include <linux/delay.h>
-#include "timer.h"
-//#include <asm/div64.h>
-#
-/*
-** Function: SYSTEM_TimerInit
-*/
-void TimerInit (systemTimer_S *pTimerObj){
-
-}
-
-
-/*
-** Function: SYSTEM_Delay
-*/
-int time_DelayWrapper (void *hTimer, int timeInMs){
-	mdelay(timeInMs);
-	return 0;
-}
-
-
-/*
-** Function: SYSTEM_TimeElapsed
-*/
-int time_TimeElapsedWrapper (void *hTimer, void *startTime, int *timeInMs){	*timeInMs = 1000;
-	return 0;
-}
-
-/*
-** Function: SYSTEM_GetTime
-*/
-int time_GetTimeWrapper (void *hTimer, void *time){
-//	time->timestamp=0;
-	return 0;
-}
-
-/*
-** $Log: proslic_timer_intf_win.c,v $
-** Revision 1.5  2008/07/24 21:06:16  lajordan
-** no message
-**
-** Revision 1.4  2007/03/22 18:53:43  lajordan
-** fixed warningg
-**
-** Revision 1.3  2007/02/26 16:46:16  lajordan
-** cleaned up some warnings
-**
-** Revision 1.2  2007/02/16 23:55:07  lajordan
-** no message
-**
-** Revision 1.1.1.1  2006/07/13 20:26:08  lajordan
-** no message
-**
-** Revision 1.1  2006/07/07 21:38:56  lajordan
-** no message
-**
-** Revision 1.1.1.1  2006/07/06 22:06:23  lajordan
-** no message
-**
-** Revision 1.1  2006/06/29 19:17:21  laj
-** no message
-**
-** Revision 1.1  2006/06/21 22:42:26  laj
-** new api style
-**
-**
-*/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/si3218x.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/si3218x.c
deleted file mode 100644
index efb6818..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/si3218x.c
+++ /dev/null
@@ -1,355 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/module.h>
-#include <linux/init.h>
-
-
-#include <linux/kernel.h>
-#include <linux/err.h>
-#include <linux/delay.h>
-
-#include <linux/regmap.h>
-#include <linux/spi/spi.h>
-
-
-#include <sound/core.h>
-#include <sound/pcm.h>
-#include <sound/pcm_params.h>
-#include <sound/soc.h>
-#include <sound/tlv.h>
-
-#include "proslic_sys.h"
-#include "si3218x.h"
-#include "inc/proslic.h"
-#include "timer.h"
-
-#include "spi.h"
-
-#ifdef SI3218X
-#include "inc/si3218x.h"
-#include "inc/si3218x_intf.h"
-#endif
-
-#define NUMBER_OF_DEVICES 1
-#if defined(SI3218X)
-#define CHAN_PER_DEVICE 1
-#define NUMBER_OF_CHAN (NUMBER_OF_DEVICES*CHAN_PER_DEVICE)
-#define NUMBER_OF_PROSLIC (NUMBER_OF_CHAN)
-#define PROSLIC_DEVICE_TYPE SI3218X_TYPE
-#endif
-
-static int slic_init = 0;
-
-ctrl_S spiGciObj; /* User¡¦s control interface object */
-systemTimer_S timerObj; /* User¡¦s timer object */
-chanState ports[NUMBER_OF_CHAN]; /* User¡¦s channel object, which has
-				  ** a member defined as
-				  ** proslicChanType_ptr ProObj;
-				 */
-/* Define ProSLIC control interface object */
-controlInterfaceType *ProHWIntf;
-/* Define array of ProSLIC device objects */
-ProslicDeviceType *ProSLICDevices[NUMBER_OF_PROSLIC];
-/* Define array of ProSLIC channel object pointers */
-proslicChanType_ptr arrayOfProslicChans[NUMBER_OF_CHAN];
-
-static int ProSLIC_HWInit(void)
-{
-	int32 i, result= 0;
-
-	printk ("%s()\n",__FUNCTION__);
-	/*
-	** Step 1: (required)
-	** Create ProSLIC Control Interface Object
-	*/
-	ProSLIC_createControlInterface(&ProHWIntf);
-
-	/*
-	** Step 2: (required)
-	** Create ProSLIC Device Objects
-	*/
-	for(i=0;i<NUMBER_OF_PROSLIC;i++)
-	{
-		ProSLIC_createDevice(&(ProSLICDevices[i]));
-	}
-
-	/*
-	** Step 3: (required)
-	** Create and initialize ProSLIC channel objects
-	** Also initialize array pointers to user¡¦s proslic channel object
-	** members to simplify initialization process.
-	*/
-	for(i=0;i<NUMBER_OF_CHAN;i++)
-	{
-		ProSLIC_createChannel(&(ports[i].ProObj));
-		ProSLIC_SWInitChan(ports[i].ProObj,i,PROSLIC_DEVICE_TYPE,
-		ProSLICDevices[i/CHAN_PER_DEVICE],ProHWIntf);
-		arrayOfProslicChans[i] = ports[i].ProObj;
-		ProSLIC_setSWDebugMode(ports[i].ProObj,TRUE); /* optional */
-	}
-
-	/*
-	** Step 4: (required)
-	** Establish linkage between host objects/functions and
-	** ProSLIC API
-	*/
-	ProSLIC_setControlInterfaceCtrlObj (ProHWIntf, &spiGciObj);
-	ProSLIC_setControlInterfaceReset (ProHWIntf, ctrl_ResetWrapper);
-	ProSLIC_setControlInterfaceWriteRegister (ProHWIntf, ctrl_WriteRegisterWrapper);
-	ProSLIC_setControlInterfaceReadRegister (ProHWIntf, ctrl_ReadRegisterWrapper);
-	ProSLIC_setControlInterfaceWriteRAM (ProHWIntf, ctrl_WriteRAMWrapper);
-	ProSLIC_setControlInterfaceReadRAM (ProHWIntf, ctrl_ReadRAMWrapper);
-	ProSLIC_setControlInterfaceTimerObj (ProHWIntf, &timerObj);
-	ProSLIC_setControlInterfaceDelay (ProHWIntf, time_DelayWrapper);
-	ProSLIC_setControlInterfaceTimeElapsed (ProHWIntf, time_TimeElapsedWrapper);
-	ProSLIC_setControlInterfaceGetTime (ProHWIntf, time_GetTimeWrapper);
-	ProSLIC_setControlInterfaceSemaphore (ProHWIntf, NULL);
-
-	/*
-	** Step 5: (system dependent)
-	** Assert hardware Reset ¡V ensure VDD, PCLK, and FSYNC are present and stable
-	** before releasing reset
-	*/
-	ProSLIC_Reset(ports[0].ProObj);
-
-	/*
-	** Step 6: (required)
-	** Initialize device (loading of general parameters, calibrations,
-	** dc-dc powerup, etc.)
-	*/
-	ProSLIC_Init(arrayOfProslicChans,NUMBER_OF_CHAN);
-	for(i=0;i<NUMBER_OF_CHAN;i++)
-	{
-		if(arrayOfProslicChans[i]->error!=0)
-		{
-			printk("ProSLIC_Init[%d] ERR=%d\n",i,arrayOfProslicChans[i]->error);
-			return 0;
-		}
-	}
-
-
-	/*
-	** Step 7: (design dependent)
-	** Execute longitudinal balance calibration
-	** or reload coefficients from factory LB cal
-	**
-	** Note: all batteries should be up and stable prior to
-	** executing the lb cal
-	*/
-	ProSLIC_LBCal(arrayOfProslicChans,NUMBER_OF_CHAN);
-	for(i=0;i<NUMBER_OF_CHAN;i++)
-	{
-		ProSLIC_GetLBCalResultPacked(arrayOfProslicChans[i], &result);
-		printk("LBCal=0x%08X\n",result);
-	}
-
-	/*
-	** Step 8: (design dependent)
-	** Load custom configuration presets(generated using
-	** ProSLIC API Config Tool)
-	*/
-	for(i=0;i<NUMBER_OF_CHAN;i++)
-	{
-		ProSLIC_PCMTimeSlotSetup(ports[i].ProObj,0,0);
-		ProSLIC_DCFeedSetup(ports[i].ProObj,DCFEED_48V_20MA);
-		ProSLIC_RingSetup(ports[i].ProObj,RING_F20_45VRMS_0VDC_LPR);
-		ProSLIC_PCMSetup(ports[i].ProObj,PCM_16LIN_WB); /* PCM_DEFAULT_CONFIG */
-		ProSLIC_ZsynthSetup(ports[i].ProObj,ZSYN_600_0_0_30_0);
-		ProSLIC_ToneGenSetup(ports[i].ProObj,TONEGEN_FCC_DIAL);
-	}
-
-	for(i=0;i<NUMBER_OF_CHAN;i++)
-	{
-		ProSLIC_PCMStart(ports[i].ProObj);
-	}
-	for(i=0;i<NUMBER_OF_CHAN;i++)
-	{
-		ProSLIC_SetLinefeedStatus(ports[i].ProObj,LF_FWD_ACTIVE);
-	}
-
-	/*
-	** Step 9: (required)
-	** SLIC settings - set TX_START and RX_START to 1 and
-	** disable Free-Run mode.
-	*/
-	ProSLIC_WriteReg(ports[0].ProObj, 12, 1);
-	ProSLIC_WriteReg(ports[0].ProObj, 14, 1);
-	ProSLIC_WriteReg(ports[0].ProObj, 47, 1);
-
-	return 1;
-}
-
-static int si3218x_component_probe(struct snd_soc_component *component)
-{
-	dev_info(component->dev, "%s\n", __func__);
-	return 0;
-}
-
-static void si3218x_component_remove(struct snd_soc_component *component)
-{
-	struct si3218x_chip *chip = snd_soc_component_get_drvdata(component);
-
-	dev_info(component->dev, "%s\n", __func__);
-
-	chip->component = NULL;
-}
-
-static const struct snd_soc_dapm_widget si3218x_component_dapm_widgets[] = {
-	SND_SOC_DAPM_INPUT("VINP"),
-	SND_SOC_DAPM_OUTPUT("VOUTP"),
-};
-
-static const struct snd_soc_dapm_route si3218x_component_dapm_routes[] = {
-	{ "VOUTP", NULL, "aif_playback"},
-	{ "aif_capture", NULL, "VINP"},
-};
-
-static const char * const slic_control_str[] = {
-	"off", "on"
-};
-
-static const struct soc_enum si3218x_slic_enum[] = {
-	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(slic_control_str),
-			    slic_control_str),
-};
-
-static int si3218x_init_get(struct snd_kcontrol *kcontrol,
-			     struct snd_ctl_elem_value *ucontrol)
-{
-	ucontrol->value.integer.value[0] = slic_init;
-
-	return 0;
-}
-
-static int si3218x_init_set(struct snd_kcontrol *kcontrol,
-			     struct snd_ctl_elem_value *ucontrol)
-{
-	if (ucontrol->value.integer.value[0]) {
-		ProSLIC_HWInit();
-		slic_init = 1;
-	}
-
-	return 0;
-}
-
-static int si3218x_ring_get(struct snd_kcontrol *kcontrol,
-			     struct snd_ctl_elem_value *ucontrol)
-{
-	if (!slic_init)
-		return 0;
-
-	ucontrol->value.integer.value[0] =
-		(ProSLIC_ReadReg(ports[0].ProObj,30) == 4) ? 1 : 0;
-	return 0;
-}
-
-static int si3218x_ring_set(struct snd_kcontrol *kcontrol,
-			     struct snd_ctl_elem_value *ucontrol)
-{
-	if (!slic_init)
-		return 0;
-
-	if (ucontrol->value.integer.value[0])
-		ProSLIC_WriteReg(ports[0].ProObj, 30, 4);
-	else
-		ProSLIC_WriteReg(ports[0].ProObj, 30, 1);
-
-	return 0;
-}
-
-static const struct snd_kcontrol_new si3218x_component_snd_controls[] = {
-	SOC_ENUM_EXT("proslic_init", si3218x_slic_enum[0],
-				     si3218x_init_get, si3218x_init_set),
-	SOC_ENUM_EXT("proslic_ring", si3218x_slic_enum[0],
-				     si3218x_ring_get, si3218x_ring_set),
-};
-
-static const struct snd_soc_component_driver si3218x_component_driver = {
-	.probe = si3218x_component_probe,
-	.remove = si3218x_component_remove,
-
-	.controls = si3218x_component_snd_controls,
-	.num_controls = ARRAY_SIZE(si3218x_component_snd_controls),
-	.dapm_widgets = si3218x_component_dapm_widgets,
-	.num_dapm_widgets = ARRAY_SIZE(si3218x_component_dapm_widgets),
-	.dapm_routes = si3218x_component_dapm_routes,
-	.num_dapm_routes = ARRAY_SIZE(si3218x_component_dapm_routes),
-
-	.idle_bias_on = false,
-};
-
-static int si3218x_component_aif_hw_params(struct snd_pcm_substream *substream,
-	struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai)
-{
-	int word_len = params_physical_width(hw_params);
-	int aud_bit = params_width(hw_params);
-
-	dev_dbg(dai->dev, "format: 0x%08x\n", params_format(hw_params));
-	dev_dbg(dai->dev, "rate: 0x%08x\n", params_rate(hw_params));
-	dev_dbg(dai->dev, "word_len: %d, aud_bit: %d\n", word_len, aud_bit);
-	if (word_len > 32 || word_len < 16) {
-		dev_err(dai->dev, "not supported word length\n");
-		return -ENOTSUPP;
-	}
-
-	dev_dbg(dai->dev, "%s: --\n", __func__);
-	return 0;
-}
-
-static const struct snd_soc_dai_ops si3218x_component_aif_ops = {
-	.hw_params = si3218x_component_aif_hw_params,
-};
-
-#define STUB_RATES	SNDRV_PCM_RATE_8000_192000
-#define STUB_FORMATS	(SNDRV_PCM_FMTBIT_S16_LE | \
-			SNDRV_PCM_FMTBIT_U16_LE | \
-			SNDRV_PCM_FMTBIT_S24_LE | \
-			SNDRV_PCM_FMTBIT_U24_LE | \
-			SNDRV_PCM_FMTBIT_S32_LE | \
-			SNDRV_PCM_FMTBIT_U32_LE)
-
-static struct snd_soc_dai_driver si3218x_codec_dai = {
-	.name = "proslic_spi-aif",
-	.playback = {
-		.stream_name	= "aif_playback",
-		.channels_min	= 1,
-		.channels_max	= 2,
-		.rates		= STUB_RATES,
-		.formats	= STUB_FORMATS,
-	},
-	.capture = {
-		.stream_name	= "aif_capture",
-		.channels_min	= 1,
-		.channels_max	= 2,
-		.rates = STUB_RATES,
-		.formats = STUB_FORMATS,
-	},
-	/* dai properties */
-	.symmetric_rates = 1,
-	.symmetric_channels = 1,
-	.symmetric_samplebits = 1,
-	/* dai operations */
-	.ops = &si3218x_component_aif_ops,
-};
-
-int si3218x_spi_probe(struct spi_device *spi, struct spi_driver *spi_drv)
-{
-	int ret;
-
-	printk(KERN_INFO "PROSLIC si3218x_spi_probe\n");
-
-	ret = proslic_spi_probe(spi,spi_drv);
-
-	return snd_soc_register_component(&spi->dev, &si3218x_component_driver,
-				      &si3218x_codec_dai, 1);
-}
-EXPORT_SYMBOL(si3218x_spi_probe);
-
-int si3218x_spi_remove(struct spi_device *spi)
-{
-	proslic_spi_remove(spi);
-	snd_soc_unregister_component(&spi->dev);
-
-	return 0;
-}
-EXPORT_SYMBOL(si3218x_spi_remove);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/si3218x.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/si3218x.h
deleted file mode 100644
index 5fa4d42..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/si3218x.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-
-#include <linux/spi/spi.h>
-#include "inc/proslic.h"
-#include "timer.h"
-#include "spi.h"
-
-#if 1
-#include "inc/si3218x.h"
-#include "inc/si3218x_intf.h"
-#include "config_inc/si3218x_LCCB_constants.h"
-#endif
-
-typedef struct chanStatus chanState; //forward declaration
-
-typedef void (*procState) (chanState *pState, ProslicInt eInput);
-
-/*
-** structure to hold state information for pbx demo
-*/
-struct chanStatus {
-        proslicChanType *ProObj;
-        SiVoiceChanType_ptr VoiceObj;
-        timeStamp onHookTime;
-        timeStamp offHookTime;
-        procState currentState;
-        uInt16 digitCount;
-        uInt8 digits[20];
-        uInt8 ringCount;
-        uInt16 connectionWith;
-        uInt16 powerAlarmCount;
-        pulseDialType pulseDialData;
-        BOOLEAN eventEnable;
-}  __attribute__((aligned(32)));
-
-struct si3218x_chip {
-	struct spi_device *spi;
-	struct device *dev;
-	struct snd_soc_component *component;
-};
-
-/* Export function */
-int si3218x_spi_probe(struct spi_device *spi, struct spi_driver *spi_drv);
-int si3218x_spi_remove(struct spi_device *spi);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/spi.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/spi.h
deleted file mode 100644
index b720f3f..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/spi.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * $Id: SPI.h 109 2008-10-22 19:45:09Z lajordan@SILABS.COM $
- * 
- * This file is system specific and should be edited for your hardware platform
- *
- * This file is used by proslic_timer_intf.h and proslic_spiGci.h
- */
-#ifndef SPI_TYPE_H
-#define SPI_TYPE_H
-
-/*
-** SPI/GCI structure
-*/
-typedef struct{
-	unsigned short portID;
-} ctrl_S;
-
-/*
-** Function: SPI_Init
-**
-** Description: 
-** Initializes the SPI interface
-*/
-int SPI_Init (ctrl_S *hSpi);
-
-
-/*
-** Function: ctrl_ResetWrapper
-**
-** Description: 
-** Sets the reset pin of the ProSLIC
-*/
-int ctrl_ResetWrapper (void *hCtrl, int status);
-
-/*
-** register read 
-**
-** Description: 
-** Reads ProSLIC registers
-*/
-unsigned char ctrl_ReadRegisterWrapper (void *hCtrl, unsigned char channel, unsigned char regAddr);
-
-/*
-** Function: ctrl_WriteRegisterWrapper
-**
-** Description: 
-** Writes ProSLIC registers
-*/
-int ctrl_WriteRegisterWrapper (void *hSpiGci, unsigned char channel, unsigned char regAddr, unsigned char data);
-
-/*
-** Function: ctrl_WriteRAMWrapper
-**
-** Description: 
-** Writes ProSLIC RAM
-*/
-int ctrl_WriteRAMWrapper (void *hSpiGci, unsigned char channel, unsigned short ramAddr, ramData data);
-
-/*
-** Function: ctrl_ReadRAMWrapper
-**
-** Description: 
-** Reads ProSLIC RAM
-*/
-ramData ctrl_ReadRAMWrapper  (void *hSpiGci, unsigned char channel, unsigned short ramAddr);
-
-#endif
-/*
-** $Log: SPI.h,v $
-** Revision 1.2  2007/02/21 16:53:07  lajordan
-** no message
-**
-** Revision 1.1  2007/02/16 23:55:15  lajordan
-** no message
-**
-** Revision 1.2  2007/02/15 23:33:25  lajordan
-** no message
-**
-** Revision 1.1.1.1  2006/07/13 20:26:08  lajordan
-** no message
-**
-*/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/Makefile b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/Makefile
deleted file mode 100644
index d9063fd..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-
-# platform driver
-subdir-ccflags-y += -I../inc
-subdir-ccflags-y += -DSI3218X
-subdir-ccflags-y += -DPROSLIC_LINUX_KERNEL
-snd-soc-procslic-common-objs := proslic.o proslic_tstin.o si_voice.o si_voice_version.o si3218x_intf.o vdaa.o si3217x_intf.o si3217x_revb_intf.o si3217x_revc_intf.o si3219x_intf.o si3226x_intf.o si3228x_intf.o
-
-obj-$(CONFIG_SND_SOC_SI3218X) += snd-soc-proslic-common.o
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/proslic.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/proslic.c
deleted file mode 100644
index 7a75cc8..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/proslic.c
+++ /dev/null
@@ -1,4651 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- * File Description:
- * This is the generic interface file for the ProSLIC drivers.
- *
- * Customers should be calling this level for ProSLIC specific
- * functions (vs. chipset specific versions of the code)
- *
- */
-
-#include "../config_inc/si_voice_datatypes.h"
-#include "../inc/si_voice_ctrl.h"
-#include "../inc/si_voice_timer_intf.h"
-#include "../inc/proslic.h"
-#include "../config_inc/proslic_api_config.h"
-
-#ifdef ENABLE_DEBUG
-#define LOGPRINT_PREFIX "ProSLIC:"
-#endif
-
-#ifdef SI3217X
-#include "si3217x.h"
-#include "si3217x_intf.h"
-extern Si3217x_General_Cfg Si3217x_General_Configuration;
-#ifndef DISABLE_FSK_SETUP
-extern ProSLIC_FSK_Cfg Si3217x_FSK_Presets[];
-#endif
-#ifndef DISABLE_TONE_SETUP
-extern ProSLIC_Tone_Cfg Si3217x_Tone_Presets[];
-#endif
-
-#endif /* 17X */
-
-#ifdef SI3218X
-#include "../inc/si3218x.h"
-#include "../inc/si3218x_intf.h"
-extern Si3218x_General_Cfg Si3218x_General_Configuration;
-#ifndef DISABLE_FSK_SETUP
-extern ProSLIC_FSK_Cfg Si3218x_FSK_Presets[];
-#endif
-#ifndef DISABLE_TONE_SETUP
-extern ProSLIC_Tone_Cfg Si3218x_Tone_Presets[];
-#endif
-#endif /* 18X */ 
-
-#ifdef SI3219X
-#include "si3219x.h"
-#include "si3219x_intf.h"
-extern Si3219x_General_Cfg Si3219x_General_Configuration;
-#ifndef DISABLE_FSK_SETUP
-extern ProSLIC_FSK_Cfg Si3219x_FSK_Presets[];
-#endif
-#ifndef DISABLE_TONE_SETUP
-extern ProSLIC_Tone_Cfg Si3219x_Tone_Presets[];
-#endif
-#endif /* 19X */
-
-#ifdef SI3226X
-#include "si3226x.h"
-#include "si3226x_intf.h"
-extern Si3226x_General_Cfg Si3226x_General_Configuration;
-#ifndef DISABLE_FSK_SETUP
-extern ProSLIC_FSK_Cfg Si3226x_FSK_Presets[];
-#endif
-#ifndef DISABLE_TONE_SETUP
-extern ProSLIC_Tone_Cfg Si3226x_Tone_Presets[];
-#endif
-#endif /* 26X */
-
-#ifdef SI3228X
-#include "si3228x.h"
-#include "si3228x_intf.h"
-extern Si3228x_General_Cfg Si3228x_General_Configuration;
-#ifndef DISABLE_FSK_SETUP
-extern ProSLIC_FSK_Cfg Si3228x_FSK_Presets[];
-#endif
-#ifndef DISABLE_TONE_SETUP
-extern ProSLIC_Tone_Cfg Si3228x_Tone_Presets[];
-#endif
-
-#endif /* 28X */
-
-#define pCtrl(X)                                   (X)->deviceId->ctrlInterface
-#define pProHW(X)                                  pCtrl((X))->hCtrl
-#define WriteRAM(PCHAN, CHANNEL, RAMADDR, RAMDATA) (PCHAN)->deviceId->ctrlInterface->WriteRAM_fptr(pProHW(PCHAN), (CHANNEL), (RAMADDR), (RAMDATA))
-#define ReadRAM(PCHAN, CHANNEL, RAMADDR)           (PCHAN)->deviceId->ctrlInterface->ReadRAM_fptr(pProHW(PCHAN), (CHANNEL), (RAMADDR))
-#define SetSemaphore(X)                            (X)->deviceId->ctrlInterface->Semaphore_fptr
-#define ReadReg(PCHAN, CHANNEL, REGADDR)           (PCHAN)->deviceId->ctrlInterface->ReadRegister_fptr(pProHW(PCHAN), (CHANNEL), (REGADDR))
-#define WriteReg(PCHAN, CHANNEL, REGADDR, REGDATA) (PCHAN)->deviceId->ctrlInterface->WriteRegister_fptr(pProHW(PCHAN), (CHANNEL), (REGADDR), (REGDATA))
-
-/*
-** Timers
-*/
-#define TimeElapsed   pProslic->deviceId->ctrlInterface->timeElapsed_fptr
-#define getTime       pProslic->deviceId->ctrlInterface->getTime_fptr
-#define pProTimer	    pProslic->deviceId->ctrlInterface->hTimer
-#define Delay         pProslic->deviceId->ctrlInterface->Delay_fptr
-#define pProTimerX(X)	((X)->deviceId->ctrlInterface->hTimer)
-#define DelayX(X,Y)   ((X)->deviceId->ctrlInterface->Delay_fptr(pProTimerX(X),Y))
-
-#define PROSLIC_TIMEOUT_DCDC_DOWN 200 /* Number of 10 mSec ticks */
-
-/*****************************************************************************************************/
-int32 ProSLIC_ReadMADCScaled(proslicChanType_ptr hProslic,uInt16 addr,
-                             int32 scale)
-{
-  TRACEPRINT(hProslic,"addr: %u scale: %ld\n", addr, scale);
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_ReadMADCScaled(hProslic,addr,scale);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_ReadMADCScaled(hProslic,addr,scale);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_ReadMADCScaled(hProslic,addr,scale);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_ReadMADCScaled(hProslic,addr,scale);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_ReadMADCScaled(hProslic,addr,scale);
-  }
-#endif
-
-  return -1;
-}
-
-/*****************************************************************************************************/
-ramData ProSLIC_ReadRAM(proslicChanType_ptr hProslic,uInt16 addr)
-{
-  TRACEPRINT(hProslic, "addr: %u\n", addr);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  return (ReadRAM(hProslic, hProslic->channel, addr));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_WriteRAM(proslicChanType_ptr hProslic,uInt16 addr, ramData data)
-{
-  TRACEPRINT(hProslic, "addr: %u data: 0x%04X\n", addr, data);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  return (WriteRAM(hProslic, hProslic->channel, addr,data));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PrintDebugData(proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-#ifdef ENABLE_DEBUG
-  ProSLIC_PrintDebugReg(hProslic);
-  return ProSLIC_PrintDebugRAM(hProslic);
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  return RC_NONE;
-#endif
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PrintDebugReg(proslicChanType_ptr hProslic)
-{
-#ifdef ENABLE_DEBUG
-  uInt8 regAddr;
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  /*
-     NOTE: Not all ProSLICs have defined values after location 99
-     (and have 1 location after that), but for simplicity, we print them anyway...
-  */
-  for(regAddr = 0; regAddr < 127; regAddr++)
-  {
-    LOGPRINT("%sRegister %03u = 0x%02X\n", LOGPRINT_PREFIX, regAddr,
-             ReadReg(hProslic, hProslic->channel, regAddr));
-  }
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-#endif
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-/* NOTE: locations above 1024 are protected, the API disables protection during initialization, but if this
-   function is called prior to initialization, then UAM is not set and will impact the ReadRAM call...
-   Upper limit is based upon chipset type...
-*/
-int ProSLIC_PrintDebugRAM(proslicChanType_ptr hProslic)
-{
-#ifdef ENABLE_DEBUG
-  uInt16 ramAddr;
-  uInt16 maxAddr= 0;
-  TRACEPRINT(hProslic, "\n",NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    maxAddr = 1596;
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    maxAddr = 1644;
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    maxAddr = 1644;
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    maxAddr = 1646;
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    maxAddr = 1646;
-  }
-#endif
-
-  for(ramAddr = 0; ramAddr < maxAddr; ramAddr++)
-  {
-    LOGPRINT("%sRAM %04u = 0x%08X\n", LOGPRINT_PREFIX, ramAddr,
-             (unsigned int)(ReadRAM(hProslic, hProslic->channel, ramAddr)));
-  }
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-#endif /* ENABLE_DEBUG */
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: isVerifiedProslic
-**
-** Description:
-** Determine if DAA or ProSLIC present
-**
-** Input Parameters:
-** pProslic: pointer to PROSLIC channel object
-**
-** Return:
-** channelType
-*/
-int ProSLIC_identifyChannelType(proslicChanType *pProslic)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n",NULL);
-  /*
-  **  Register 13 (DAA) always has bits 0:1 set to 0 and bit 6 set to 1
-  **  Register 13 (PROSLIC) can have bits 0:1, and 4 set, while all others are undefined
-  **  Write 0x13 to Reg 13. The following return values are expected -
-  **
-  **   0x00 or 0xFF    :    No device present
-  **   0x4X            :    DAA
-  **   0x13            :    PROSLIC
-  */
-
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMTXHI,0x13);
-  Delay(pProTimer,5);
-
-  /* Now check if the value took */
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_PCMTXHI);
-
-  if( data == 0x13)
-  {
-    return PROSLIC;
-  }
-  else if (data == 0x40)
-  {
-    return DAA;
-  }
-  else
-  {
-    return UNKNOWN;
-  }
-}
-
-/*****************************************************************************************************/
-int ProSLIC_VerifyControlInterface(proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n",NULL);
-  if (ProSLIC_identifyChannelType(hProslic) != PROSLIC)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  /* Note: ProSLIC_identifyChannelType() did a register w/r test earlier */
-
-  /* Verify RAM rd/wr with innocuous RAM location */
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VERIFY_IO,0x12345678L);
-  if (ReadRAM(hProslic,hProslic->channel, PROSLIC_RAM_VERIFY_IO) != 0x12345678L)
-  {
-    hProslic->error = RC_SPI_FAIL;
-    DEBUG_PRINT(hProslic, "%sProslic %d RAM not communicating. RAM access fail.\n",
-                LOGPRINT_PREFIX, hProslic->channel);
-    return RC_SPI_FAIL;
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_VerifyMasterStat(proslicChanType_ptr pProslic)
-{
-  uInt8 regData;
-
-  TRACEPRINT(pProslic, "\n", NULL);
-  WriteReg(pProslic,pProslic->channel, PROSLIC_REG_MSTRSTAT,
-           0xFF); /* Clear Master status */
-  regData = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_MSTRSTAT);
-
-  if( regData != 0x1F )
-  {
-    return RC_SPI_FAIL;
-  }
-  else
-  {
-    return RC_NONE;
-  }
-}
-
-/*****************************************************************************************************/
-#ifdef SIVOICE_MULTI_BOM_SUPPORT
-int ProSLIC_Init_MultiBOM (proslicChanType_ptr *hProslic,int size, int preset)
-{
-  TRACEPRINT(*hProslic, "size: %d preset: %d\n", size, preset);
-#ifdef SI3217X
-  if ((*hProslic)->deviceId->chipType >= SI32171
-      && (*hProslic)->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_Init_MultiBOM(hProslic,size,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if ((*hProslic)->deviceId->chipType >= SI32180
-      && (*hProslic)->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_Init_MultiBOM(hProslic,size,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X((*hProslic)->deviceId) )
-  {
-    return Si3219x_Init_MultiBOM(hProslic,size,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if ((*hProslic)->deviceId->chipType >= SI32260
-      && (*hProslic)->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_Init_MultiBOM(hProslic,size,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if ((*hProslic)->deviceId->chipType >= SI32280
-      && (*hProslic)->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_Init_MultiBOM(hProslic,size,preset);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-int ProSLIC_Init (proslicChanType_ptr *hProslic,int size)
-{
-  TRACEPRINT(*hProslic, "size: %d\n", size);
-  return ProSLIC_Init_with_Options(hProslic, size, INIT_NO_OPT);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_Reinit (proslicChanType_ptr *hProslic,int size)
-{
-  TRACEPRINT(*hProslic, "size: %d\n", size);
-  return ProSLIC_Init_with_Options(hProslic, size, INIT_REINIT);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_Init_with_Options (proslicChanType_ptr *hProslic,int size,
-                               int option)
-{
-  TRACEPRINT(*hProslic, "size: %d option: %d\n", size, option);
-#ifdef SI3226X
-  if ((*hProslic)->deviceId->chipType >= SI32260
-      && (*hProslic)->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_Init_with_Options(hProslic,size, option);
-  }
-#endif
-
-#ifdef SI3228X
-  if ((*hProslic)->deviceId->chipType >= SI32280
-      && (*hProslic)->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_Init_with_Options(hProslic,size, option);
-  }
-#endif
-
-#ifdef SI3217X
-  if ((*hProslic)->deviceId->chipType >= SI32171
-      && (*hProslic)->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_Init_with_Options(hProslic,size, option);
-  }
-#endif
-
-#ifdef SI3218X
-  if ((*hProslic)->deviceId->chipType >= SI32180
-      && (*hProslic)->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_Init_with_Options(hProslic,size, option);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X((*hProslic)->deviceId) )
-  {
-    return Si3219x_Init_with_Options(hProslic,size, option);
-  }
-#endif
-
-  return RC_IGNORE;
-}
-
-/*****************************************************************************************************/
-#if defined(SI3217X) || defined(SI3218X) || defined SI3226X || defined SI3228X || defined(SI3219X)
-/* Check patch data - returns TRUE if no error.*/
-static BOOLEAN ProSLIC_VerifyPatchData(proslicChanType *pProslic,
-                                       const ramData *data, uInt16 maxCount )
-{
-  int loop;
-  ramData read_data;
-  TRACEPRINT(pProslic, "dataptr: %p, count: %d\n", data, maxCount);
-
-  for(loop = 0; loop < maxCount; loop++)
-  {
-    if(*data)
-    {
-      read_data = ReadRAM(pProslic, pProslic->channel, PROSLIC_RAM_PRAM_DATA);
-      if( ((*data) << 9) != read_data)
-      {
-        return FALSE;
-      }
-    }
-    else
-    {
-      break;
-    }
-    data++;
-  }
-  return TRUE;
-}
-
-/* Check if the jump table is written correctly.. */
-static BOOLEAN ProSLIC_VerifyPatchJMPLow(proslicChanType *pProslic,
-    const uInt16 *data)
-{
-  uInt8 address = PATCH_JMPTBL_START_ADDR;
-  int regData;
-
-  TRACEPRINT(pProslic, "dataptr: %p\n", data);
-  for(address = PATCH_JMPTBL_START_ADDR;
-      address < (PATCH_JMPTBL_START_ADDR+(2*PATCH_NUM_LOW_ENTRIES)); address++)
-  {
-    if(*data)
-    {
-      regData = ReadReg(pProslic, pProslic->channel, address);
-      if(regData != ((*data) & 0xFF))
-      {
-        return FALSE;
-      }
-
-      address++;
-
-      regData = ReadReg(pProslic, pProslic->channel, address);
-      if(regData != (((*data)>>8) & 0xFF))
-      {
-        return FALSE;
-      }
-
-      data++;
-    }
-    else
-    {
-      break;
-    }
-  }
-  return TRUE;
-}
-
-#if defined SI3226X || defined SI3228X || defined SI3218X || defined SI3219X
-/* For chipsets supporting more than 8 jump entries, verify them */
-static BOOLEAN ProSLIC_VerifyPatchJMPHigh(proslicChanType *pProslic,
-    const uInt16 *data)
-{
-  uInt16 address = PATCH_JMPTBL_HIGH_ADDR;
-  ramData read_data;
-
-  TRACEPRINT(pProslic, "dataptr: %p\n", data);
-  for(address = PATCH_JMPTBL_HIGH_ADDR;
-      address < (PATCH_JMPTBL_HIGH_ADDR+PATCH_NUM_HIGH_ENTRIES); address++)
-  {
-    read_data = (ReadRAM(pProslic, pProslic->channel, address) & 0x1FFFL);
-    if(*data != read_data)
-    {
-      return FALSE;
-
-    }
-    data++;
-  }
-  return TRUE;
-}
-#endif /* SI3226X, SI3228X, SI3218X, SI3219X */
-
-static BOOLEAN ProSLIC_VerifyPatchSupportRAM(proslicChanType *pProslic, 
-                                           const uInt16 *ramAddr, const ramData *ramData)
-{
-  int i;
-
-  for(i = 0; ramAddr[i]; i++)
-  {
-    if( ReadRAM(pProslic, pProslic->channel, ramAddr[i]) != ramData[i])
-    {
-      return FALSE;
-    }
-  } 
-
-  return TRUE;
-}
-
-/* Load the first 8 jump table entries */
-static void ProSLIC_LoadPatchJMPLow(proslicChanType *pProslic, uInt8 channel,
-                                    const uInt16 *data)
-{
-  uInt8 address;
-
-  TRACEPRINT(pProslic, "chan: %d dataptr: %p\n", channel, data);
-
-  for(address = PATCH_JMPTBL_START_ADDR;
-      address < (PATCH_JMPTBL_START_ADDR+(2*PATCH_NUM_LOW_ENTRIES)); address++)
-  {
-    WriteReg(pProslic, channel, address,((*data) & 0xFF));
-    address++;
-    WriteReg(pProslic, channel, address,(((*data)>>8) & 0xFF));
-    data++;
-  }
-}
-
-/* Load Patch data */
-static void ProSLIC_LoadPatchData(proslicChanType *pProslic, uInt8 channel,
-                                  const ramData *data)
-{
-  int loop;
-
-  TRACEPRINT(pProslic, "chan: %d dataptr: %p\n", channel, data);
-  WriteRAM(pProslic, channel, PROSLIC_RAM_PRAM_ADDR, 0);
-
-  for(loop = 0; loop < PATCH_MAX_SIZE; loop++)
-  {
-    if(*data)
-    {
-      /* Can we take advantage of auto increment, if not, set the address */
-      if( (pProslic->deviceId->chipRev < 3)
-          && (channel == PROSLIC_CHAN_BROADCAST))
-      {
-        WriteRAM(pProslic, channel, PROSLIC_RAM_PRAM_ADDR, loop << 19);
-      }
-
-      WriteRAM(pProslic, channel, PROSLIC_RAM_PRAM_DATA, (*data) << 9);
-    }
-    else
-    {
-      return;
-    }
-    data++;
-  }
-}
-
-/* Load Support RAM - basically RAM address/data pairs to be written as part of the Patch process - do not call directly */
-void ProSLIC_LoadSupportRAM(proslicChanType *pProslic, uInt8 channel,
-                                   const uInt16 *address, const ramData *data)
-{
-  TRACEPRINT(pProslic, "chan: %d addressptr: %p dataptr: %p\n", channel, address,
-             data);
-  while( *address )
-  {
-    WriteRAM(pProslic, channel, *address, *data);
-    address++;
-    data++;
-  }
-}
-
-#if defined SI3226X || defined SI3228X || defined SI3218X || defined SI3219X
-/* Load Jump table high for chipsets supporting more than 8 jump entries */
-static void ProSLIC_LoadJMPHigh(proslicChanType *pProslic, uInt8 channel,
-                                const uInt16 *data)
-{
-  uInt16 loop;
-  TRACEPRINT(pProslic, "chan: %d dataptr: %p\n", channel, data);
-  for(loop = PATCH_JMPTBL_HIGH_ADDR;
-      loop < (PATCH_JMPTBL_HIGH_ADDR+PATCH_NUM_HIGH_ENTRIES); loop++)
-  {
-    WriteRAM(pProslic, channel, loop, ((*data) & 0x1FFFL) );
-    data++;
-  }
-}
-#endif /* SI3226X, SI3228X, SI3218X, SI3219X */
-
-/* Code assumes ProSLIC_LoadPatch has verified chip type. This is NOT meant to be called
- * by the user directly.
- */
-BOOLEAN ProSLIC_LoadPatch_extended(proslicChanType *pProslic,
-                                   const proslicPatch *pPatch, 
-                                   BOOLEAN is_broadcast, BOOLEAN is_second_chan)
-{
-  uInt8 channel;
-  const uInt16 jmp_disable[PATCH_NUM_LOW_ENTRIES] = {0,0,0,0,0,0,0,0};
-
-#if defined SI3226X || defined SI3228X || defined SI3218X ||defined SI3219X
-  BOOLEAN hasJmpTableHigh = FALSE;
-  const uInt16 jmphigh_disable[PATCH_NUM_HIGH_ENTRIES] = {0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-#endif
-
-  TRACEPRINT(pProslic, "patchptr: %p bcast: %d\n", pPatch, is_broadcast);
-
-  if(pPatch == NULL)
-  {
-    return RC_NONE;
-  }
-
-  if(is_broadcast == TRUE)
-  {
-    channel = PROSLIC_CHAN_BROADCAST;
-  }
-  else
-  {
-    channel = pProslic->channel;
-  }
-
-  ProSLIC_SetUserMode(pProslic,TRUE, is_broadcast);
-
-  /* Disable Patch */
-  WriteReg(pProslic, channel, PROSLIC_REG_JMPEN, 0);
-  if(is_second_chan == FALSE)
-  {
-    DEBUG_PRINT(pProslic, "%sloading patch: %08lx\n", LOGPRINT_PREFIX,
-                 (long unsigned int)pPatch->patchSerial);
-
-    ProSLIC_LoadPatchJMPLow(pProslic, channel, jmp_disable);
-
-#if defined SI3226X || defined SI3228X || defined SI3218X || defined SI3219X
-    if( 0
-#ifdef SI3226X
-        || (pProslic->deviceId->chipType >= SI32260
-            && pProslic->deviceId->chipType <= SI32269)
-#endif
-#ifdef SI3228X
-        || (pProslic->deviceId->chipType >= SI32280
-            && pProslic->deviceId->chipType <= SI32289)
-#endif
-#ifdef SI3218X
-        || (pProslic->deviceId->chipType >= SI32180
-            && pProslic->deviceId->chipType <= SI32189)
-#endif
-#ifdef SI3219X
-        || ( IS_SI3219X(pProslic->deviceId) )
-#endif
-      )
-    {
-      hasJmpTableHigh = TRUE;
-      ProSLIC_LoadJMPHigh(pProslic, channel, jmphigh_disable);
-    }
-#endif
-
-    ProSLIC_LoadPatchData(pProslic, channel, pPatch->patchData);
-
-    WriteReg(pProslic, channel, PROSLIC_REG_RAM_ADDR_HI, 0);
-
-    ProSLIC_LoadPatchJMPLow(pProslic, channel, pPatch->patchEntries);
-
-#if defined SI3226X || defined SI3228X || defined SI3218X || defined SI3219X
-    if(hasJmpTableHigh == TRUE)
-    {
-      ProSLIC_LoadJMPHigh(pProslic, channel,
-                          &(pPatch->patchEntries[PATCH_NUM_LOW_ENTRIES]));
-    }
-#endif
-    WriteRAM(pProslic, channel, PROSLIC_RAM_PATCHID,
-             pPatch->patchSerial); /* write the patch ID */
-  } /* !second channel */
-
-  ProSLIC_LoadSupportRAM(pProslic, channel, pPatch->psRamAddr, pPatch->psRamData);
-
-  return RC_NONE;
-
-}
-
-#endif /* patch helper functions */
-
-int ProSLIC_LoadPatch (proslicChanType_ptr pProslic,const proslicPatch *pPatch)
-{
-  int rc;
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  if( (rc = ProSLIC_LoadPatch_extended(pProslic, pPatch, FALSE, FALSE) ) == RC_NONE)
-  {
-#ifdef DISABLE_VERIFY_PATCH
-    return WriteReg(pProslic, pProslic->channel, PROSLIC_REG_JMPEN, 1);
-#endif
-  }
-
-  return rc;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_VerifyPatch (proslicChanType_ptr hProslic,const proslicPatch *pPatch)
-{
-  TRACEPRINT(hProslic, "patchptr: %p\n", pPatch);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  if(pPatch == NULL)
-  {
-    return RC_NONE;
-  }
-
-  WriteReg(hProslic, hProslic->channel, PROSLIC_REG_JMPEN, 0);
-  WriteRAM(hProslic, hProslic->channel, PROSLIC_RAM_PRAM_ADDR, 0);
-
-  if(ProSLIC_VerifyPatchData(hProslic, pPatch->patchData,
-                             PATCH_MAX_SIZE) == FALSE)
-  {
-    DEBUG_PRINT(hProslic, "%sPatch data corrupted: channel %d\n",LOGPRINT_PREFIX,
-                hProslic->channel);
-    WriteRAM(hProslic, hProslic->channel, PROSLIC_RAM_PATCHID,
-             0UL); /* Mark patch as invalid */
-    return RC_PATCH_RAM_VERIFY_FAIL;
-  }
-
-  /*zero out RAM_ADDR_HI*/
-  WriteReg (hProslic, hProslic->channel, PROSLIC_REG_RAM_ADDR_HI,0);
-
-  if( ProSLIC_VerifyPatchJMPLow(hProslic, pPatch->patchEntries) == FALSE)
-  {
-    DEBUG_PRINT(hProslic,"%sPatch jumptable corrupted: channel %d\n",
-                LOGPRINT_PREFIX,hProslic->channel);
-    WriteRAM(hProslic, hProslic->channel, PROSLIC_RAM_PATCHID,
-             0UL); /* Mark patch as invalid */
-    return RC_PATCH_RAM_VERIFY_FAIL;
-  }
-
-#if defined SI3226X || defined SI3228X || defined SI3218X || defined SI3219X
-  if( 0
-#ifdef SI3226X
-      || (hProslic->deviceId->chipType >= SI32260
-          && hProslic->deviceId->chipType <= SI32269)
-#endif
-#ifdef SI3228X
-      || (hProslic->deviceId->chipType >= SI32280
-          && hProslic->deviceId->chipType <= SI32289)
-#endif
-#ifdef SI3218X
-      || (hProslic->deviceId->chipType >= SI32180
-          && hProslic->deviceId->chipType <= SI32189)
-#endif
-#ifdef SI3219X
-      || ( IS_SI3219X(hProslic->deviceId) )
-#endif
-    )
-
-  {
-    if( ProSLIC_VerifyPatchJMPHigh(hProslic,
-                                   &(pPatch->patchEntries[PATCH_NUM_LOW_ENTRIES])) == FALSE)
-    {
-      DEBUG_PRINT(hProslic,"%sPatch jumptable high corrupted: channel %d\n",
-                  LOGPRINT_PREFIX,hProslic->channel);
-      WriteRAM(hProslic, hProslic->channel, PROSLIC_RAM_PATCHID,
-               0UL); /* Mark patch as invalid */
-      return RC_PATCH_ENTRY_VERIFY_FAIL;
-    }
-  }
-
-#endif
-
-  if( ProSLIC_VerifyPatchSupportRAM( hProslic, pPatch->psRamAddr, pPatch->psRamData) == FALSE)
-  {
-      DEBUG_PRINT(hProslic,"%sPatch init data corrupted: channel %d\n",
-                  LOGPRINT_PREFIX,hProslic->channel);
-      WriteRAM(hProslic, hProslic->channel, PROSLIC_RAM_PATCHID,
-               0UL); /* Mark patch as invalid */
-      return RC_PATCH_ENTRY_VERIFY_FAIL;
-  }
-
-  WriteReg (hProslic, hProslic->channel, PROSLIC_REG_JMPEN,
-            1); /*enable the patch*/
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_SetMuteStatus (proslicChanType_ptr pProslic,
-                           ProslicMuteModes muteEn)
-{
-
-  uInt8 regTemp;
-  uInt8 newRegValue;
-  TRACEPRINT(pProslic, "muteEn: %d\n", muteEn);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  regTemp = ReadReg (pProslic,pProslic->channel,PROSLIC_REG_DIGCON);
-
-  WriteReg (pProslic,pProslic->channel,PROSLIC_REG_DIGCON,regTemp&~(0x3));
-  newRegValue = regTemp &~(0x3);
-
-  if (muteEn & PROSLIC_MUTE_RX)
-  {
-    newRegValue |= 1;
-  }
-
-  if (muteEn & PROSLIC_MUTE_TX)
-  {
-    newRegValue |= 2;
-  }
-
-  if(newRegValue != regTemp)
-  {
-    return WriteReg (pProslic,pProslic->channel,PROSLIC_REG_DIGCON,newRegValue);
-  }
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_SetLoopbackMode (proslicChanType_ptr pProslic,
-                             ProslicLoopbackModes newMode)
-{
-  uInt8 regTemp, newValue;
-  TRACEPRINT(pProslic, "mode: %d\n", newMode);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  newValue = regTemp = ReadReg (pProslic,pProslic->channel,PROSLIC_REG_LOOPBACK);
-
-  switch (newMode)
-  {
-    case PROSLIC_LOOPBACK_NONE:
-      newValue &= ~(0x11);
-      break;
-
-    case PROSLIC_LOOPBACK_DIG:
-      newValue |= 1;
-      break;
-
-    case PROSLIC_LOOPBACK_ANA:
-      newValue |= 0x10;
-      break;
-  }
-
-  if(newValue != regTemp)
-  {
-    return WriteReg (pProslic,pProslic->channel,PROSLIC_REG_LOOPBACK, newValue);
-  }
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_EnableInterrupts (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_EnableInterrupts(hProslic);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_EnableInterrupts(hProslic);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_EnableInterrupts(hProslic);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_EnableInterrupts(hProslic);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_EnableInterrupts(hProslic);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-
-/*****************************************************************************************************/
-int ProSLIC_DisableInterrupts (proslicChanType_ptr hProslic)
-{
-#ifdef GCI_MODE
-  uInt8 data;
-#endif
-  uInt8 i;
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  for(i = PROSLIC_REG_IRQEN1; i < PROSLIC_REG_IRQEN4; i++)
-  {
-    /* Disable the interrupts */
-    WriteReg(hProslic, hProslic->channel, i, 0);
-  }
-
-  /* Clear the pending interrupts */
-  for(i = PROSLIC_REG_IRQ1; i < PROSLIC_REG_IRQ4; i++)
-  {
-#ifdef GCI_MODE
-    data = ReadReg(hProslic, hProslic->channel, i);
-    WriteReg( hProslic, hProslic->channel, i, data);
-#else
-    (void)ReadReg(hProslic, hProslic->channel, i);
-#endif
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_RingSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_RING_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_RingSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_RingSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_RingSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_RingSetup(hProslic,preset);
-  }
-#endif
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_RingSetup(hProslic,preset);
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_RING_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_ToneGenSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_TONE_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return ProSLIC_ToneGenSetupPtr(hProslic,&(Si3217x_Tone_Presets[preset]));
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return ProSLIC_ToneGenSetupPtr(hProslic, &(Si3218x_Tone_Presets[preset]));
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return ProSLIC_ToneGenSetupPtr(hProslic, &(Si3219x_Tone_Presets[preset]));
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return ProSLIC_ToneGenSetupPtr(hProslic, &(Si3226x_Tone_Presets[preset]));
-  }
-#endif
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return ProSLIC_ToneGenSetupPtr(hProslic, &(Si3228x_Tone_Presets[preset]));
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_TONE_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_FSKSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_FSK_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return ProSLIC_FSKSetupPtr(hProslic, &Si3217x_FSK_Presets[preset]);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return ProSLIC_FSKSetupPtr(hProslic, &Si3218x_FSK_Presets[preset]);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return ProSLIC_FSKSetupPtr(hProslic, &Si3219x_FSK_Presets[preset]);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return ProSLIC_FSKSetupPtr(hProslic, &Si3226x_FSK_Presets[preset]);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return ProSLIC_FSKSetupPtr(hProslic,&Si3228x_FSK_Presets[preset]);
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_FSK_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_ZsynthSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_ZSYNTH_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_ZsynthSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_ZsynthSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_ZsynthSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_ZsynthSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_ZsynthSetup(hProslic,preset);
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_ZSYNTH_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-#ifndef DISABLE_CI_SETUP
-int ProSLIC_GciCISetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_GciCISetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_GciCISetup(hProslic,preset);
-  }
-#endif
-
-#if !defined(SI3217X) && !defined(SI3226X)
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-#endif /*DISABLE_CI_SETUP*/
-
-/*****************************************************************************************************/
-int ProSLIC_TXAudioGainSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_AUDIOGAIN_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_TXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_TXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_TXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_TXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_TXAudioGainSetup(hProslic,preset);
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-
-#endif /*DISABLE_AUDIOGAIN_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_RXAudioGainSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_AUDIOGAIN_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_RXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_RXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_RXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_RXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_RXAudioGainSetup(hProslic,preset);
-  }
-#endif
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_AUDIOGAIN_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_TXAudioGainScale (proslicChanType_ptr hProslic,int preset,
-                              uInt32 pga_scale, uInt32 eq_scale)
-{
-  TRACEPRINT(hProslic, "preset: %d pga_scale: %u eq_scale: %u\n", preset,
-             pga_scale, eq_scale);
-#ifndef DISABLE_AUDIOGAIN_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_TXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_TXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_TXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_TXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_TXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_AUDIOGAIN_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_RXAudioGainScale (proslicChanType_ptr hProslic,int preset,
-                              uInt32 pga_scale, uInt32 eq_scale)
-{
-  TRACEPRINT(hProslic, "preset: %d pga_scale: %u eq_scale: %u\n", preset,
-             pga_scale, eq_scale);
-#ifndef DISABLE_AUDIOGAIN_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_RXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_RXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_RXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_RXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_RXAudioGainScale(hProslic,preset,pga_scale,eq_scale);
-  }
-#endif
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_AUDIOGAIN_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_AudioGainSetup (proslicChanType_ptr pProslic,int32 rxgain,
-                            int32 txgain,int preset)
-{
-  int rc;
-#ifndef DISABLE_AUDIOGAIN_SETUP
-  int atx_preset = TXACGAIN_SEL;
-  int arx_preset = RXACGAIN_SEL;
-  TRACEPRINT(pProslic, "rxgain: %d txgain: %d preset: %d\n", rxgain, txgain,
-             preset);
-
-  rc = ProSLIC_dbgSetTXGain(pProslic,txgain,preset,atx_preset);
-
-  if( rc  == RC_NONE)
-  {
-    rc = ProSLIC_TXAudioGainSetup(pProslic,TXACGAIN_SEL);
-  }
-
-  if( rc  == RC_NONE)
-  {
-    rc = ProSLIC_dbgSetRXGain(pProslic,rxgain,preset,arx_preset);
-  }
-
-  if( rc  == RC_NONE)
-  {
-    rc = ProSLIC_RXAudioGainSetup(pProslic,RXACGAIN_SEL);
-  }
-  return rc;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-  return RC_IGNORE;
-#endif /*DISABLE_AUDIOGAIN_SETUP*/
-}
-
-/*****************************************************************************************************/
-int ProSLIC_DCFeedSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset: %d\n", preset);
-#ifndef DISABLE_DCFEED_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_DCFeedSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_DCFeedSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_DCFeedSetupCfg(hProslic, Si3219x_DCfeed_Presets, preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_DCFeedSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_DCFeedSetup(hProslic,preset);
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_DCFEED_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_DCFeedSetupCfg (proslicChanType_ptr hProslic,
-                            ProSLIC_DCfeed_Cfg *cfg, int preset)
-{
-  TRACEPRINT(hProslic, "cfgPtr = %p preset = %d\n", cfg, preset);
-#ifndef DISABLE_DCFEED_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_DCFeedSetupCfg(hProslic,cfg,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_DCFeedSetupCfg(hProslic,cfg,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_DCFeedSetupCfg(hProslic,cfg,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_DCFeedSetupCfg(hProslic,cfg,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_DCFeedSetupCfg(hProslic,cfg,preset);
-  }
-#endif
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-  SILABS_UNREFERENCED_PARAMETER(cfg);
-#endif /*DISABLE_DCFEED_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_GPIOSetup (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-#ifndef DISABLE_GPIO_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_GPIOSetup(hProslic);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_GPIOSetup(hProslic);
-  }
-#endif
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-#endif /*DISABLE_GPIO_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-#ifndef DISABLE_PULSEMETERING
-int ProSLIC_PulseMeterSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset = %d\n", preset);
-#ifndef DISABLE_PULSE_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_PulseMeterSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_PulseMeterSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_PulseMeterSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_PulseMeterSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_PulseMeterSetup(hProslic,preset);
-  }
-#endif
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_PULSE_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-int ProSLIC_PCMSetup (proslicChanType_ptr hProslic,int preset)
-{
-  TRACEPRINT(hProslic, "preset = %d\n", preset);
-#ifndef DISABLE_PCM_SETUP
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_PCMSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_PCMSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_PCMSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_PCMSetup(hProslic,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_PCMSetup(hProslic,preset);
-  }
-#endif
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  SILABS_UNREFERENCED_PARAMETER(preset);
-#endif /*DISABLE_PCM_SETUP*/
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PCMTimeSlotSetup (proslicChanType_ptr pProslic, uInt16 rxcount,
-                              uInt16 txcount)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "rx = %u tx = %u\n", rxcount, txcount);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  data = txcount & 0xff;
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMTXLO,data);
-
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_PCMTXHI);
-  data &= 0x10;  /* keep TX_EDGE bit */
-  data |= ((txcount >> 8)&0x03) ;
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMTXHI,data);
-
-  data = rxcount & 0xff;
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMRXLO,data);
-
-  data = (rxcount >> 8) & 0x3; /* PCMRXHI has only 2 bits for timeslot */
-  /* add to the calculated timeslot values the non timeslot bits */
-  data |= (ReadReg(pProslic,pProslic->channel,PROSLIC_REG_PCMRXHI) & 0xFC);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMRXHI,data);
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-typedef ProslicInt proslicIntTypeMap[SI_MAX_INTERRUPTS][8];
-
-static int ProSLIC_ReadInterruptsHelper(proslicChanType_ptr pProslic,
-                                        uInt8 *regData, uInt8 numChannels)
-{
-  uInt8 i;
-  uInt8 intsActive;
-  uInt8 *currentData = regData;
-  SILABS_UNREFERENCED_PARAMETER(numChannels);
-
-  intsActive = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_IRQ0);
-
-#ifdef PROSLIC_OPTIMIZE_INTERRUPTS
-  /* For dual channel devices, we need to shift the upper nibble for the second channel
-     if the caller requested the second channel.  We determine this by channel ID being
-     even or odd.  If this is NOT true - for example a Si3217x and then a Si3226x chipset
-     configuration on the same daisychain, then this optimization logic will not work */
-#if defined(SI3226X) || defined(SI3228X)
-  if( (numChannels != 0) && ((pProslic->channel) & 0x1))
-  {
-    intsActive = intsActive >> 4;
-  }
-#endif /* Multichannel devices */
-#endif
-
-  /* If there are no interrupts, stop... return back to calling function */
-  if((intsActive &0xF) == 0)
-  {
-    return RC_IGNORE;
-  }
-
-  for(i = PROSLIC_REG_IRQ1; i <= PROSLIC_REG_IRQ4; i++)
-  {
-#ifdef PROSLIC_OPTIMIZE_INTERRUPTS
-    /* Read IRQn Register only if IRQ0 states there was an interrupt pending, otherwise
-       skip it. This eliminates unneeded SPI transactions.
-    */
-    if( (intsActive & (1<<(i-PROSLIC_REG_IRQ1))) == 0)
-    {
-      *currentData++ = 0;
-      continue;
-    }
-#endif
-    *currentData = (uInt8)ReadReg(pProslic, pProslic->channel, i);
-#ifdef GCI_MODDE
-    WriteReg(pProslic, pProslic->channel, i, *current_data);
-#endif
-    currentData++;
-  } /* for loop */
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*
- Reads IRQ0 to determine if an interrupt has occurred for the particular device,
- if so, reads the interrupt register(s) that fired the interrupt and then
- maps the interrupt(s) to the generic interrupt value to return to the caller.
-
- Code assumes normal chipset/compatibility testing has already been done.
-*/
-static int ProSLIC_GetInterruptHelper(proslicChanType_ptr pProslic,
-                                      const proslicIntTypeMap intMap, proslicIntType *pIntData, uInt8 numChannels)
-{
-  int i,j;
-  uInt8 intData[SI_MAX_INTERRUPTS];
-  uInt8 *currentData;
-  uInt8 map, intCount;
-  BOOLEAN safetyInt = FALSE;
-
-  /* Initialize interrupt count to 0 */
-  pIntData-> number = 0;
-
-  if( ProSLIC_ReadInterruptsHelper(pProslic, intData, numChannels) == RC_IGNORE)
-  {
-    /* No interrupts for the given channel. */
-    return RC_NONE;
-  }
-
-  /* At this point we've collected all the registers, now decode the data */
-  currentData = intData;
-  intCount = 0;
-
-  for(i = 0; i < SI_MAX_INTERRUPTS; i++)
-  {
-    if(*currentData)
-    {
-      for(j = 0; j < 8; j++)
-      {
-        if( *currentData & (1<<j) )
-        {
-          map = intMap[i][j];
-          pIntData->irqs[intCount] = map;
-
-          if( (map == IRQ_P_HVIC)
-              || (map == IRQ_P_THERM) )
-          {
-            safetyInt = TRUE;
-          }
-
-          intCount++;
-        }
-      }
-    }
-    currentData++;
-  }
-  
-  pIntData->number = intCount;
-  
-  if( safetyInt == TRUE)
-  {
-    if(ProSLIC_isReinitRequired(pProslic))
-    {
-      return RC_REINIT_REQUIRED;
-    }
-  }
-
-  return pIntData->number;
-}
-
-
-int ProSLIC_GetInterrupts (proslicChanType_ptr hProslic,
-                           proslicIntType *pIntData)
-{
-  const proslicIntTypeMap interruptMap =
-  {
-    {IRQ_OSC1_T1, IRQ_OSC1_T2, IRQ_OSC2_T1, IRQ_OSC2_T2, IRQ_RING_T1, IRQ_RING_T2, IRQ_FSKBUF_AVAIL, IRQ_VBAT},
-    {IRQ_RING_TRIP, IRQ_LOOP_STATUS, IRQ_LONG_STAT, IRQ_VOC_TRACK, IRQ_DTMF, IRQ_INDIRECT, IRQ_RXMDM, IRQ_TXMDM},
-    {IRQ_P_HVIC, IRQ_P_THERM, IRQ_PQ3, IRQ_PQ4, IRQ_PQ5, IRQ_PQ6, IRQ_DSP, IRQ_MADC_FS},
-    {IRQ_USER_0, IRQ_USER_1, IRQ_USER_2, IRQ_USER_3, IRQ_USER_4, IRQ_USER_5, IRQ_USER_6, IRQ_USER_7}
-  };
-
-  pIntData->number=0;
-  /* TRACEPRINT(hProslic, "\n", NULL); */
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#if defined (SI3217X) || defined (SI3218X) || defined(SI3219X)
-  if (0
-#ifdef SI3217X
-      || (hProslic->deviceId->chipType >= SI32171
-          && hProslic->deviceId->chipType <= SI32179)
-#endif
-#ifdef SI3218X
-      || (hProslic->deviceId->chipType >= SI32180
-          && hProslic->deviceId->chipType <= SI32189)
-#endif
-#ifdef SI3219X
-      || ( IS_SI3219X(hProslic->deviceId) )
-#endif
-     )
-  {
-    return ProSLIC_GetInterruptHelper(hProslic, interruptMap, pIntData, 1);
-  }
-#endif
-#if defined (SI3226X) || defined (SI3228X)
-  if( 0
-#ifdef SI3226X
-      || (hProslic->deviceId->chipType >= SI32260
-          && hProslic->deviceId->chipType <= SI32269)
-#endif
-#ifdef SI3228X
-      || (hProslic->deviceId->chipType >= SI32280
-          && hProslic->deviceId->chipType <= SI32289)
-#endif
-    )
-  {
-    return ProSLIC_GetInterruptHelper(hProslic, interruptMap, pIntData, 2);
-  }
-#endif
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_ReadHookStatus (proslicChanType_ptr pProslic,uInt8 *pHookStat)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-  *pHookStat = PROSLIC_ONHOOK;
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  if (ReadReg(pProslic,pProslic->channel,PROSLIC_REG_LCRRTP) & 2)
-  {
-    *pHookStat=PROSLIC_OFFHOOK;
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_SetLinefeedStatus (proslicChanType_ptr pProslic, uInt8 newLinefeed)
-{
-  uInt8 lfState;
-  uInt8 irqen1=0;
-  TRACEPRINT(pProslic, "linefeed = %u\n", newLinefeed);
-  
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  /* Get the irqen1 setting - used to determine if vbat interrupt was set... */
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-    && pProslic->deviceId->chipType <= SI32179)
-  {
-      irqen1 = Si3217x_General_Configuration.irqen1;
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-    && pProslic->deviceId->chipType <= SI32189)
-  {
-      irqen1 = Si3218x_General_Configuration.irqen1;
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-      irqen1 = Si3219x_General_Configuration.irqen1;
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-    && pProslic->deviceId->chipType <= SI32269)
-  {
-      irqen1 = Si3226x_General_Configuration.irqen1;
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-    && pProslic->deviceId->chipType <= SI32289)
-  {
-      irqen1 = Si3228x_General_Configuration.irqen1;
-  }
-#endif
-
-  if( (newLinefeed& 0xF)  == LF_RINGING )
-  {
-    uInt8 regTemp;
-
-    lfState = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_LINEFEED);
-
-    /* Only change to ringing state if not ringing... */
-    if( (lfState & 0xF) != LF_RINGING )
-    {
-      if(irqen1 & 0x80)
-      {
-        /*disable vbat interrupt during ringing*/
-        regTemp = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_IRQEN1 );
-        WriteReg (pProslic, pProslic->channel, PROSLIC_REG_IRQEN1, regTemp&(~0x80));
-      }
-
-      WriteReg(pProslic, pProslic->channel, PROSLIC_REG_LINEFEED, LF_RINGING);
-    }
-    else
-    {
-      return RC_IGNORE;
-    }
-  }
-  else
-  {
-    uInt8 autord;
-
-    /* Preserve the auto register so we can restore it at the end */
-    autord = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_AUTORD );
-    WriteReg(pProslic, pProslic->channel, PROSLIC_REG_AUTORD, (autord & 0xFB) ); /* Disable AutoRD */
-
-    lfState = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_LINEFEED);
-
-    if( (lfState & 0xF) == LF_RINGING ) 
-    {
-      WriteReg(pProslic, pProslic->channel, PROSLIC_REG_LINEFEED, newLinefeed);
-    }
-    else
-    {
-      /* We are already doing a state transition, abort request */
-      if( ((lfState & 0xF0) == (LF_RINGING << 4) )
-        && ( (lfState & 0xF) != LF_RINGING) )
-      {
-        WriteReg(pProslic, pProslic->channel, PROSLIC_REG_AUTORD, autord ); /* restore the autord bit */
-        return RC_IGNORE;
-      }
-
-      WriteReg(pProslic, pProslic->channel, PROSLIC_REG_LINEFEED, newLinefeed);
-    }
-    /* Restore autord */
-    WriteReg(pProslic, pProslic->channel, PROSLIC_REG_AUTORD, autord );
-
-    /* Restore IRQEN1 to what the user specified - if we changed it.. */
-    if(irqen1 & 0x80)
-    {
-      WriteReg (pProslic, pProslic->channel, PROSLIC_REG_IRQEN1, irqen1);
-    }
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_SetLinefeedStatusBroadcast (proslicChanType_ptr hProslic,
-                                        uInt8 newLinefeed)
-{
-  TRACEPRINT(hProslic, "linefeed = %u\n", newLinefeed);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteReg(hProslic, PROSLIC_CHAN_BROADCAST, PROSLIC_REG_LINEFEED, newLinefeed);
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PolRev (proslicChanType_ptr pProslic,uInt8 abrupt,
-                    uInt8 newPolRevState)
-{
-  uInt8 data = 0;
-  TRACEPRINT(pProslic, "abrupt = %u newPolRevState = %u\n", abrupt,
-             newPolRevState);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  switch (newPolRevState)
-  {
-    case POLREV_STOP:
-      data = 0;
-      break;
-    case POLREV_START:
-      data = 2;
-      break;
-    case WINK_START:
-      data = 6;
-      break;
-    case WINK_STOP:
-      data = 4;
-      break;
-  }
-
-  /* Cannot polrev/wink while low power mode is active */
-  ProSLIC_SetPowersaveMode(pProslic,PWRSAVE_DISABLE);
-
-  if (abrupt)
-  {
-    data |= 1;
-  }
-
-  WriteReg(pProslic, pProslic->channel, PROSLIC_REG_POLREV,data);
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_GPIOControl (proslicChanType_ptr pProslic,uInt8 *pGpioData,
-                         uInt8 read)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#if defined(SI3217X) || defined (SI3226X)
-  if( 0
-#ifdef SI3217X
-      || (pProslic->deviceId->chipType >= SI32171
-          && pProslic->deviceId->chipType <= SI32179)
-#endif
-#ifdef SI3226X
-      || (pProslic->deviceId->chipType >= SI32260
-          && pProslic->deviceId->chipType <= SI32269)
-#endif
-    )
-  {
-    if (read)
-    {
-      *pGpioData = 0xf & ReadReg(pProslic,pProslic->channel,PROSLIC_REG_GPIO);
-    }
-    else
-    {
-      WriteReg(pProslic,pProslic->channel,PROSLIC_REG_GPIO,
-               (*pGpioData)|(ReadReg(pProslic,pProslic->channel,PROSLIC_REG_GPIO)&0xf0));
-    }
-    return RC_NONE;
-  }
-#else
-  SILABS_UNREFERENCED_PARAMETER(read);
-  SILABS_UNREFERENCED_PARAMETER(pGpioData);
-#endif 
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-/*
-** Optional Neon Message Waiting Support
-*/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_MWISetV (proslicChanType_ptr hProslic, uInt16 vpk_mag)
-{
-  uInt32 ram_val;
-  uInt8 max;
-  
-  TRACEPRINT(hProslic, "vpk_mag = %u\n", vpk_mag);
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  
-  /* Set the maximum MWI voltage according to the chipset */
-#if defined (SI3217X) || defined (SI3226X)
-  if( 0
-#ifdef SI3217X
-      || (hProslic->deviceId->chipType >= SI32171
-          && hProslic->deviceId->chipType <= SI32179)
-#endif
-#ifdef SI3226X
-      || (hProslic->deviceId->chipType >= SI32260
-          && hProslic->deviceId->chipType <= SI32269)
-#endif
-    )
-  {
-    max = SIL_MWI_VPK_MAX;
-  }
-#endif /*17x/26x */
-
-#if defined (SI3218X) || defined (SI3228X) || defined(SI3219X)
-  if( 0
-#ifdef SI3218X
-    || (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-#endif
-
-#ifdef SI3228X
-    || (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-#endif
-
-#ifdef SI3219X
-    || IS_SI3219X(hProslic->deviceId) 
-#endif
-
-#ifdef SI3228X
-      || (hProslic->deviceId->chipType >= SI32280
-          && hProslic->deviceId->chipType <= SI32289)
-#endif
-    )
-  {
-    max = SIL_MWI_VPK_MAX_LO;
-  }
-#endif /* 18x, 28x, 19x */
-
-  /* Voltage mod */
-  if(vpk_mag > 0)  /* Skip if 0 passed */
-  {
-    /* Clamp supplied value to allowable range */
-    if(vpk_mag > max)
-    {
-      vpk_mag = max;
-    }
-    if(vpk_mag < SIL_MWI_VPK_MIN)
-    {
-      vpk_mag = SIL_MWI_VPK_MIN;
-    }
-    ram_val = vpk_mag * SCALE_R_MADC * 1000L;
-    WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_MWI_V,ram_val);
-  }
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_MWIEnable (proslicChanType_ptr hProslic)
-{
-  uInt8 val;
-  ramData ram_val;
-  
-  TRACEPRINT(hProslic, "\n", NULL);
-  
-  /*
-  ** Check for conditions that would prevent enabling MWI
-  */
-  ProSLIC_ReadHookStatus(hProslic,&val);
-  if(val != PROSLIC_ONHOOK)
-  {
-    return RC_MWI_ENABLE_FAIL;
-  }
-  
-  val = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_USERSTAT);
-
-  /* Check if PROSLIC and disabled MWI, if not, ignore this request. */
-  if( (hProslic->channelType != PROSLIC)
-       || (val & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-  
-  /* Save parameters */
-  hProslic->mwiSave.ringof = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGOF);
-  hProslic->mwiSave.ringamp = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGAMP);
-  hProslic->mwiSave.vbatr_expect = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_VBATR_EXPECT);
-  hProslic->mwiSave.vov_ring_bat = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_VOV_RING_BAT);
-  hProslic->mwiSave.vov_ring_gnd = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_VOV_RING_GND);
-  hProslic->mwiSave.rtacth = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTACTH);
-  hProslic->mwiSave.rtdcth = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTDCTH);
-  hProslic->mwiSave.iring_lim = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_IRING_LIM);
-  hProslic->mwiSave.dcdc_rngtype = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_RNGTYPE);
-  hProslic->mwiSave.slope_ring = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_SLOPE_RING);
-  hProslic->mwiSave.rtper = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTPER);
-  hProslic->mwiSave.ringfr = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGFR);
-  hProslic->mwiSave.rtdcdb = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTDCDB);
-  hProslic->mwiSave.lcrmask = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_LCRMASK);
-  hProslic->mwiSave.dcdc_oithresh_lo = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_OITHRESH_LO);
-  hProslic->mwiSave.enhance = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE);
-  hProslic->mwiSave.ringcon = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_RINGCON);
-  hProslic->mwiSave.userstat =  val;
-  hProslic->mwiSave.linefeed = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_LINEFEED);
-  
-  /* Modify parameters */
-  ProSLIC_SetLinefeedStatus(hProslic,LF_FWD_ACTIVE);
-  ram_val = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_MWI_V);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGOF,ram_val);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGAMP,0x0L);
-
-  /* Set the VBATR_EXPECT according to the chipset */
-#if defined (SI3217X) || defined (SI3226X)
-  if( 0
-#ifdef SI3217X
-      || (hProslic->deviceId->chipType >= SI32171
-          && hProslic->deviceId->chipType <= SI32179)
-#endif
-#ifdef SI3226X
-      || (hProslic->deviceId->chipType >= SI32260
-          && hProslic->deviceId->chipType <= SI32269)
-#endif
-    )
-  {
-    ram_val = 0x7FFFFC2L;
-  }
-#endif
-
-#if defined (SI3218X) || defined (SI3228X) || defined(SI3219X)
-  if( 0
-#ifdef SI3218X
-      || (hProslic->deviceId->chipType >= SI32180
-          && hProslic->deviceId->chipType <= SI32189)
-#endif
-
-#ifdef SI3228X
-      || (hProslic->deviceId->chipType >= SI32280
-          && hProslic->deviceId->chipType <= SI32289)
-#endif
-
-#ifdef SI3219X
-    || IS_SI3219X(hProslic->deviceId) 
-#endif
-    )
-  {
-    ram_val = 0x06866635L;
-  }
-#endif /* 18x,28x, 19x */
-
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VBATR_EXPECT,ram_val);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VOV_RING_BAT,0x0L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VOV_RING_GND,0x051EB80L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTACTH,0x0FFFFFFFL);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTDCTH,0x38E38EL);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_IRING_LIM,0x380000L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_RNGTYPE,0x100000L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_SLOPE_RING,0x15E5200EL);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTPER,0x50000L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGFR,0x07EFE000L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTDCDB,0x0000A000L);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_LCRMASK,0x000F0000L);
-  ram_val = ReadRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_OITHRESH_HI);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_OITHRESH_LO,ram_val);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE,hProslic->mwiSave.enhance&0xEF);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_RINGCON,0x00);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_USERSTAT,0x0C);
-  
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_MWIDisable (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  /* Check if PROSLIC and enabled MWI, if not, ignore this request. */
-  if( (hProslic->channelType != PROSLIC)
-       || !(ReadReg(hProslic,hProslic->channel,PROSLIC_REG_USERSTAT) & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-
-  ProSLIC_SetLinefeedStatus(hProslic,LF_FWD_ACTIVE);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGOF,hProslic->mwiSave.ringof);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGAMP,hProslic->mwiSave.ringamp);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VBATR_EXPECT,hProslic->mwiSave.vbatr_expect);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VOV_RING_BAT,hProslic->mwiSave.vov_ring_bat);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_VOV_RING_GND,hProslic->mwiSave.vov_ring_gnd);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTACTH,hProslic->mwiSave.rtacth);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTDCTH,hProslic->mwiSave.rtdcth);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_IRING_LIM,hProslic->mwiSave.iring_lim);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_RNGTYPE,hProslic->mwiSave.dcdc_rngtype);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_SLOPE_RING,hProslic->mwiSave.slope_ring);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTPER,hProslic->mwiSave.rtper);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RINGFR,hProslic->mwiSave.ringfr);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_RTDCDB,hProslic->mwiSave.rtdcdb);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_LCRMASK,hProslic->mwiSave.lcrmask);
-  WriteRAM(hProslic,hProslic->channel,PROSLIC_RAM_DCDC_OITHRESH_LO,hProslic->mwiSave.dcdc_oithresh_lo);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE,hProslic->mwiSave.enhance);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_RINGCON,hProslic->mwiSave.ringcon);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_USERSTAT,hProslic->mwiSave.userstat);
-  ProSLIC_SetLinefeedStatus(hProslic,hProslic->mwiSave.linefeed);
-  
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_SetMWIState (proslicChanType_ptr hProslic,uInt8 flash_on)
-{
-  TRACEPRINT(hProslic, "flash_on = %u\n", flash_on);
-  /* Check if PROSLIC and enabled MWI, if not, ignore this request. */
-  if( (hProslic->channelType != PROSLIC)
-       || !(ReadReg(hProslic,hProslic->channel,PROSLIC_REG_USERSTAT) & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-  
-  if(flash_on)
-  {
-    ProSLIC_SetLinefeedStatus(hProslic,LF_RINGING);
-  }
-  else
-  {
-    ProSLIC_SetLinefeedStatus(hProslic,LF_FWD_ACTIVE);
-  }
-  
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_GetMWIState (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-  /* Check if PROSLIC and enabled MWI, if not, ignore this request. */
-  if( (hProslic->channelType != PROSLIC)
-       || !(ReadReg(hProslic,hProslic->channel,PROSLIC_REG_USERSTAT) & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-  
-  if(ReadReg(hProslic,hProslic->channel,PROSLIC_REG_LINEFEED) == 0x44)
-  {
-    return SIL_MWI_FLASH_ON;
-  }
-  else
-  {
-    return SIL_MWI_FLASH_OFF;
-  }
-  
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_MWIRampPoll(proslicChanType_ptr pProslic)
-{
-  uInt32 mwi_voltage;
-  
-  /* Check if PROSLIC and enabled MWI, if not, ignore this request. */
-  if( (pProslic->channelType != PROSLIC)
-       || !(ReadReg(pProslic,pProslic->channel,PROSLIC_REG_USERSTAT) & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-  
-  switch(pProslic->mwiState.state)
-  {
-    case PROSLIC_MWI_RAMP_ON:
-    {
-      if(pProslic->mwiState.ticks == pProslic->mwiState.poll.steps)
-      {
-        mwi_voltage = pProslic->mwiState.poll.voff + pProslic->mwiState.poll.step_size;
-        WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_RINGOF,mwi_voltage);
-        ProSLIC_SetLinefeedStatus(pProslic,LF_RINGING);
-      }
-      else if(pProslic->mwiState.ticks == 0)
-      {
-        mwi_voltage = pProslic->mwiState.poll.von;
-        WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_RINGOF,mwi_voltage);
-        pProslic->mwiState.ticks = pProslic->mwiState.poll.onTime+1;
-        pProslic->mwiState.state = PROSLIC_MWI_ON;
-      }
-      else
-      {
-        mwi_voltage = pProslic->mwiState.poll.voff + pProslic->mwiState.poll.step_size*(pProslic->mwiState.poll.steps - pProslic->mwiState.ticks + 1);
-        WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_RINGOF,mwi_voltage);
-      }
-    }
-    break;
-
-    case PROSLIC_MWI_RAMP_OFF:
-    {
-      if(pProslic->mwiState.ticks == 0)
-      {
-        pProslic->mwiState.ticks = pProslic->mwiState.poll.offTime+1;
-        pProslic->mwiState.state = PROSLIC_MWI_OFF;
-        ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);
-        }
-      else 
-      {
-        mwi_voltage = pProslic->mwiState.poll.von - (pProslic->mwiState.poll.steps - pProslic->mwiState.ticks + 1)*pProslic->mwiState.poll.step_size;
-        WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_RINGOF,mwi_voltage);
-      }
-    break;
-    }
-    
-    case PROSLIC_MWI_ON:
-      if(pProslic->mwiState.ticks == 0)
-      {
-        pProslic->mwiState.ticks = pProslic->mwiState.poll.steps+1;
-        pProslic->mwiState.state = PROSLIC_MWI_RAMP_OFF;
-      }
-      break;
-      
-    case PROSLIC_MWI_OFF:
-      if(pProslic->mwiState.ticks == 0)
-      {
-        pProslic->mwiState.ticks = pProslic->mwiState.poll.steps+1;
-        pProslic->mwiState.state = PROSLIC_MWI_RAMP_ON;
-      }
-      break;
-
-    default:
-      /* Do nothing */
-      break;
-  }
-  (pProslic->mwiState.ticks)--; 
-
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_MWIRampStart(proslicChanType_ptr pProslic, uInt32 steps, uInt32 onTime, uInt32 offTime)
-{
-  /* Check if PROSLIC and enabled MWI, if not, ignore this request. */
-  if( (pProslic->channelType != PROSLIC)
-       || !(ReadReg(pProslic,pProslic->channel,PROSLIC_REG_USERSTAT) & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-  
-  pProslic->mwiState.poll.steps = steps-1;
-  pProslic->mwiState.poll.onTime = onTime;
-  pProslic->mwiState.poll.offTime = offTime;
-  
-  pProslic->mwiState.poll.von = ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_MWI_V);
-  pProslic->mwiState.poll.voff = (ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_V_VLIM)*5)/6;
-  pProslic->mwiState.poll.step_size = (pProslic->mwiState.poll.von - pProslic->mwiState.poll.voff)/steps;
-  
-  pProslic->mwiState.state = PROSLIC_MWI_RAMP_ON;
-  pProslic->mwiState.ticks = pProslic->mwiState.poll.steps;
-
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SIVOICE_NEON_MWI_SUPPORT
-int ProSLIC_MWIRampStop(proslicChanType_ptr pProslic)
-{
-  /* Check if PROSLIC and enabled MWI, if not, ignore this request. */
-  if( (pProslic->channelType != PROSLIC)
-       || !(ReadReg(pProslic,pProslic->channel,PROSLIC_REG_USERSTAT) & SIL_MWI_USTAT_SET ) )
-  {
-    return RC_IGNORE;
-  }
-  pProslic->mwiState.state = PROSLIC_MWI_OFF;
-  
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-int ProSLIC_ToneGenStart (proslicChanType_ptr pProslic,uInt8 timerEn)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "timerEn = %u\n", timerEn);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  DEBUG_PRINT(pProslic, "%s%s on channel %d\n",LOGPRINT_PREFIX, __FUNCTION__,
-              pProslic->channel);
-
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_OCON);
-  data |= 0x11 + (timerEn ? 0x66 : 0);
-  return WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OCON,data);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_ToneGenStop (proslicChanType_ptr pProslic)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  DEBUG_PRINT(pProslic,"%s%s on channel %d\n",LOGPRINT_PREFIX, __FUNCTION__,
-              pProslic->channel);
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_OCON);
-  data &= ~(0x77);
-  return WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OCON,data);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_RingStart (proslicChanType_ptr pProslic)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-  return(ProSLIC_SetLinefeedStatus(pProslic, LF_RINGING));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_RingStop (proslicChanType_ptr pProslic)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-  return(ProSLIC_SetLinefeedStatus(pProslic, LF_FWD_ACTIVE));
-}
-
-#ifndef DISABLE_FSK_SETUP
-/*****************************************************************************************************/
-int ProSLIC_CheckCIDBuffer (proslicChanType_ptr pProslic, uInt8 *fsk_buf_avail)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  data = ReadReg(pProslic,pProslic->channel, PROSLIC_REG_IRQ1);
-#ifdef GCI_MODE
-  WriteReg(pProslic,pProslic->channel, PROSLIC_REG_IRQ1,data); /*clear (for GCI)*/
-#endif
-  *fsk_buf_avail = (data&0x40) ? 1 : 0;
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_EnableCID (proslicChanType_ptr pProslic)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  DEBUG_PRINT(pProslic, "%sEnableCID on channel %d\n",LOGPRINT_PREFIX,
-              pProslic->channel);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OCON,0);
-
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE);
-  data |= 0xA;
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE,data);
-
-  return(WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OCON,0x5));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_DisableCID (proslicChanType_ptr pProslic)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  DEBUG_PRINT(pProslic, "%sDisableCID on channel %d\n",LOGPRINT_PREFIX,
-              pProslic->channel);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OCON,0);
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE);
-  data &= ~(0x8);
-
-  return(WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE,data));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_SendCID (proslicChanType_ptr pProslic, uInt8 *buffer,
-                     uInt8 numBytes)
-{
-  TRACEPRINT(pProslic, "numBytes = %u\n", numBytes);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  DEBUG_PRINT (pProslic, "%sSendCID on channel %d\n",LOGPRINT_PREFIX,
-               pProslic->channel);
-  while (numBytes-- > 0)
-  {
-    WriteReg(pProslic,pProslic->channel,PROSLIC_REG_FSKDAT,*(buffer++));
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_ModifyCIDStartBits(proslicChanType_ptr pProslic,
-                               uInt8 enable_startStop)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "enable_startStop = %u\n", enable_startStop);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE);
-
-  if(enable_startStop == FALSE)
-  {
-    data &= ~0x80;
-  }
-  else
-  {
-    data |= 0x80;
-  }
-
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE,data);
-
-  return RC_NONE;
-}
-#endif /* DISABLE_FSK_SETUP */
-/*****************************************************************************************************/
-int ProSLIC_PCMStart (proslicChanType_ptr pProslic)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  DEBUG_PRINT(pProslic, "%sPCMStart\n", LOGPRINT_PREFIX);
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_PCMMODE);
-  data |= 0x10;
-
-  return WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMMODE,data);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PCMStop (proslicChanType_ptr pProslic)
-{
-  uInt8 data;
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  DEBUG_PRINT(pProslic, "%sPCMStart\n", LOGPRINT_PREFIX);
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_PCMMODE);
-  data &= ~0x10;
-
-  return WriteReg(pProslic,pProslic->channel,PROSLIC_REG_PCMMODE,data);
-}
-
-#ifndef DISABLE_HOOKCHANGE
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_ResetDialPulseDetect
-**
-** Description:
-** reset dial pulse detection state machine (helper function for
-** ProSLIC_InitializeHookChangeDetect.
-*/
-static void ProSLIC_ResetDialPulseDetect(hookChangeType *pPulse)
-{
-  pPulse->currentPulseDigit = 0;
-  pPulse->lookingForTimeout = 0;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_InitializeHookChangeDetect
-**
-** Description:
-** Initialize dial pulse detection parameters
-*/
-int ProSLIC_InitializeHookChangeDetect(hookChangeType *pPulse,void *hookTime)
-{
-  TRACEPRINT_NOCHAN("\n", NULL);
-  pPulse->hookTime = hookTime;
-  pPulse->last_state_reported =  SI_HC_NO_ACTIVITY;
-  ProSLIC_ResetDialPulseDetect(pPulse);
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_HookChangeDetect
-**
-** Description:
-** implements pulse dial detection and should be called at every hook transition
-*/
-uInt8 ProSLIC_HookChangeDetect (proslicChanType *pProslic,
-                                hookChange_Cfg *pHookChangeCfg, hookChangeType *pHookChangeData)
-{
-  uInt8 hookStat;
-  int delta_time;
-
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  TimeElapsed(pProTimer,pHookChangeData->hookTime,&delta_time);
-  ProSLIC_ReadHookStatus(pProslic,&hookStat);
-
-  /* Did we have a hook state change? */
-  if(hookStat !=  pHookChangeData->last_hook_state)
-  {
-    pHookChangeData->last_hook_state = hookStat;
-    getTime(pProTimer,pHookChangeData->hookTime);
-    pHookChangeData->lookingForTimeout = 1;
-    if (hookStat == PROSLIC_OFFHOOK)
-    {
-      if ((delta_time >= (pHookChangeCfg->minOnHook))
-          && (delta_time <= (pHookChangeCfg->maxOnHook)))
-      {
-        pHookChangeData->currentPulseDigit++;
-      }
-      else
-      {
-        /* Did we see a hook flash? */
-        if( (delta_time >= pHookChangeCfg->minHookFlash)
-            && (delta_time <= pHookChangeCfg->maxHookFlash) )
-        {
-          pHookChangeData->last_state_reported = SI_HC_HOOKFLASH;
-          ProSLIC_ResetDialPulseDetect(pHookChangeData);
-          return SI_HC_HOOKFLASH;
-        }
-      }
-    }
-
-    return SI_HC_NEED_MORE_POLLS;
-  }
-
-  if( (pHookChangeData->lookingForTimeout == 1)
-      && (delta_time >=  pHookChangeCfg->minInterDigit) )
-  {
-
-    if(delta_time  > pHookChangeCfg->minHook)
-    {
-      if(pHookChangeData->last_hook_state == PROSLIC_ONHOOK)
-      {
-        ProSLIC_ResetDialPulseDetect(pHookChangeData);
-        pHookChangeData->last_state_reported = SI_HC_ONHOOK_TIMEOUT;
-        return SI_HC_ONHOOK_TIMEOUT;
-      }
-
-      if(pHookChangeData->last_hook_state == PROSLIC_OFFHOOK)
-      {
-        ProSLIC_ResetDialPulseDetect(pHookChangeData);
-
-        /* Check if we saw either a pulse digit or hook flash prior to this,
-         * if so, we're already offhook, so do not report a offhook event,
-         * just stop polling.
-         */
-        if((pHookChangeData->last_state_reported == SI_HC_ONHOOK_TIMEOUT)
-            || (pHookChangeData->last_state_reported == SI_HC_NO_ACTIVITY) )
-        {
-          pHookChangeData->last_state_reported = SI_HC_OFFHOOK_TIMEOUT;
-          return SI_HC_OFFHOOK_TIMEOUT;
-        }
-        else
-        {
-          return SI_HC_NO_ACTIVITY;
-        }
-      }
-    }
-    else
-    {
-      uInt8 last_digit = pHookChangeData->currentPulseDigit;
-
-      if(last_digit)
-      {
-        pHookChangeData->last_state_reported = last_digit;
-        ProSLIC_ResetDialPulseDetect(pHookChangeData);
-        return last_digit;
-      }
-    }
-    return SI_HC_NEED_MORE_POLLS;
-  }
-
-  return SI_HC_NEED_MORE_POLLS;
-}
-#endif /* DISABLE_HOOKCHANGE */
-
-/*****************************************************************************************************/
-int ProSLIC_DTMFReadDigit (proslicChanType_ptr pProslic,uInt8 *pDigit)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  DEBUG_PRINT(pProslic, "%sDTMFReadDigit on channel %d\n",LOGPRINT_PREFIX,
-              pProslic->channel);
-  *pDigit = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_TONDTMF) & 0xf;
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PLLFreeRunStart (proslicChanType_ptr hProslic)
-{
-  uInt8 tmp;
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_ZCAL_EN,0x00);
-  tmp = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE);
-
-  return(WriteReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE,tmp|0x4));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PLLFreeRunStop (proslicChanType_ptr hProslic)
-{
-  uInt8 tmp;
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  tmp = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE);
-  WriteReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE,tmp&~(0x4));
-
-  return WriteReg(hProslic,hProslic->channel,PROSLIC_REG_ZCAL_EN,0x04);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_GetPLLFreeRunStatus (proslicChanType_ptr hProslic)
-{
-  uInt8 tmp;
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  tmp = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE);
-
-  if(tmp & 0x02)
-  {
-    return RC_PLL_FREERUN_ACTIVE;
-  }
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-#ifndef DISABLE_PULSEMETERING
-int ProSLIC_PulseMeterEnable (proslicChanType_ptr hProslic)
-{
-  uInt8 widebandEn;
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  widebandEn = ReadReg(hProslic,hProslic->channel,PROSLIC_REG_ENHANCE) & 0x01;
-
-  if (widebandEn)
-  {
-    DEBUG_PRINT (hProslic,
-                 "%s Pulse Metering is not supported while Wideband Mode is enabled.\n",
-                 LOGPRINT_PREFIX);
-  }
-
-#if defined (SI3217X) || defined (SI3218X) || defined (SI3226X) || defined (SI3228X) || defined(SI3219X)
-  if(!widebandEn && (0 
-#ifdef SI3217X
-      || (hProslic->deviceId->chipType >= SI32171
-          && hProslic->deviceId->chipType <= SI32179)
-#endif
-#ifdef SI3218X
-      ||(hProslic->deviceId->chipType >= SI32180
-         && hProslic->deviceId->chipType <= SI32189) 
-#endif
-#ifdef SI3219X
-      || (IS_SI3219X(hProslic->deviceId) )
-#endif
-#ifdef SI3226X
-      || (hProslic->deviceId->chipType >= SI32260
-          && hProslic->deviceId->chipType <= SI32269)
-#endif
-#ifdef SI3228X
-      || (hProslic->deviceId->chipType >= SI32280
-          && hProslic->deviceId->chipType <= SI32289 )
-#endif
-    ))
-  {
-    return WriteReg(hProslic,hProslic->channel,PROSLIC_REG_PMCON,ReadReg(hProslic,
-                    hProslic->channel,PROSLIC_REG_PMCON) | (0x01));
-  }
-#endif
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PulseMeterDisable (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  return(WriteReg(hProslic,hProslic->channel,PROSLIC_REG_PMCON,ReadReg(hProslic,
-                  hProslic->channel,PROSLIC_REG_PMCON) & ~(0x05)));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PulseMeterStart (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  return WriteReg(hProslic,hProslic->channel,PROSLIC_REG_PMCON,ReadReg(hProslic,
-                  hProslic->channel,PROSLIC_REG_PMCON) | (0x5));
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PulseMeterStop (proslicChanType_ptr hProslic)
-{
-  TRACEPRINT(hProslic, "\n", NULL);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return(WriteReg(hProslic,hProslic->channel,PROSLIC_REG_PMCON,ReadReg(hProslic,
-                    hProslic->channel,PROSLIC_REG_PMCON) & ~(0x04)));
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return(WriteReg(hProslic,hProslic->channel,PROSLIC_REG_PMCON,ReadReg(hProslic,
-                    hProslic->channel,PROSLIC_REG_PMCON) & ~(0x04)));
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return(WriteReg(hProslic,hProslic->channel,PROSLIC_REG_PMCON,ReadReg(hProslic,
-                    hProslic->channel,PROSLIC_REG_PMCON) & ~(0x04)));
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return ProSLIC_PulseMeterDisable(hProslic);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return ProSLIC_PulseMeterDisable(hProslic);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-#endif /* DISABLE_PULSEMETERING */
-/*****************************************************************************************************/
-int ProSLIC_SetDCDCInversionFlag (proslicChanType_ptr hProslic, uInt8 flag)
-{
-  TRACEPRINT(hProslic, "flag = %u\n", flag);
-
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  hProslic->dcdc_polarity_invert = flag;
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-
-int ProSLIC_PowerUpConverter (proslicChanType_ptr hProslic)
-{
-  if(hProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (hProslic->deviceId->chipType >= SI32171
-      && hProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_PowerUpConverter(hProslic);
-  }
-#endif
-
-#ifdef SI3218X
-  if (hProslic->deviceId->chipType >= SI32180
-      && hProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_PowerUpConverter(hProslic);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(hProslic->deviceId) )
-  {
-    return Si3219x_PowerUpConverter(hProslic);
-  }
-#endif
-
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_PowerUpConverter(hProslic);
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_PowerUpConverter(hProslic);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-/*****************************************************************************************************/
-static int ProSLIC_GetBatType(proslicChanType_ptr hProslic)
-{
-#ifdef SI3226X
-  if (hProslic->deviceId->chipType >= SI32260
-      && hProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_General_Configuration.batType;
-  }
-#endif
-
-#ifdef SI3228X
-  if (hProslic->deviceId->chipType >= SI32280
-      && hProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_General_Configuration.batType;
-  }
-#endif
-
-#if !defined(SI3226X) && !defined(SI3228X)
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-#endif
-  return BO_DCDC_UNKNOWN;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_PowerDownConverter (proslicChanType_ptr pProslic)
-{
-  errorCodeType error = RC_NONE;
-  int32 vbat;
-  int timer = 0;
-
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  /* Force channel out of powersavings mode and then put it in open state */
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_LINEFEED,LF_FWD_OHT);
-  Delay(pProTimer,10);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_LINEFEED, LF_OPEN);
-  Delay(pProTimer,50);
-
-  /* Don't try to shutdown converter if we're using external supplies or if the
-     converter is already shutdown.
-  */
-  if((ProSLIC_GetBatType(pProslic) == BO_DCDC_EXTERNAL) ||
-      (ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_PD_DCDC) & 0x100000) )
-  {
-    return RC_NONE;
-  }
-
-  WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_PD_DCDC,0x900000L);
-  Delay(pProTimer,50);
-
-  do
-  {
-    vbat = ReadRAM(pProslic, pProslic->channel, PROSLIC_RAM_MADC_VBAT);
-    if(vbat & 0x10000000L)
-    {
-      vbat |= 0xF0000000L;
-    }
-    Delay(pProTimer,10);
-  }
-  while((vbat > COMP_5V) && (timer++ < PROSLIC_TIMEOUT_DCDC_DOWN));
-
-  DEBUG_PRINT(pProslic, "%s VBAT Down = %d.%d v\n", LOGPRINT_PREFIX,
-              (int)((vbat/SCALE_V_MADC)/1000),
-              SIVOICE_ABS(((vbat/SCALE_V_MADC) - (vbat/SCALE_V_MADC)/1000*1000)));
-
-  if(timer > PROSLIC_TIMEOUT_DCDC_DOWN)
-  {
-    /* Error handling - shutdown converter, disable channel, set error tag */
-    pProslic->channelEnable = 0;
-    pProslic->error = error = RC_VBAT_DOWN_TIMEOUT;
-    DEBUG_PRINT(pProslic, "%sDCDC Power Down timeout channel %d\n", LOGPRINT_PREFIX,
-                pProslic->channel);
-  }
-  return error;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_LBCal (proslicChanType_ptr *pProslic, int size)
-{
-  int k;
-  int timeout;
-  uInt8 data;
-  uInt8 lfState, enhance_value;
-  TRACEPRINT(*pProslic, "size = %d\n", size);
-
-  if((*pProslic)->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  /* For all channels, save settings, initiate LBCAL */
-  for(k = 0; k < size; k++)
-  {
-    if( (pProslic[k]->channelEnable) && (pProslic[k]->channelType == PROSLIC) )
-    {
-      DEBUG_PRINT(pProslic[k], "%sStarting LB Cal on channel %d\n", LOGPRINT_PREFIX,
-                  pProslic[k]->channel);
-      /* Preserve old settings */
-      lfState = ReadReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_LINEFEED);
-      enhance_value = ReadReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_ENHANCE);
-      ProSLIC_SetPowersaveMode(pProslic[k], PWRSAVE_DISABLE);
-      ProSLIC_SetLinefeedStatus(pProslic[k], LF_FWD_ACTIVE);
-      WriteReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_CALR0, CAL_LB_ALL);
-      WriteReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_CALR3,  0x80);
-      pProslic[k]->error = RC_CAL_TIMEOUT; /* Assume failure */
-
-      timeout = 0;
-      do
-      {
-        data = ReadReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_CALR3);
-        DelayX(*pProslic, 10);
-        timeout++;
-      }
-      while((data & 0x80) && (timeout < TIMEOUT_LB_CAL));
-
-      if( (data & 0x80) )
-      {
-        DEBUG_PRINT(pProslic[k], "%sLB Cal timeout on channel %d\n", LOGPRINT_PREFIX,
-                    pProslic[k]->channel);
-        WriteReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_LINEFEED, LF_OPEN);
-        return RC_CAL_TIMEOUT;
-      }
-      else
-      {
-        WriteReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_LINEFEED, lfState);
-        WriteReg(pProslic[k], pProslic[k]->channel, PROSLIC_REG_ENHANCE, enhance_value);
-        pProslic[k]->error = RC_NONE;
-      }
-    }
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-#define PROSLIC_RAM_CMDAC_FWD 1476
-#define PROSLIC_RAM_CMDAC_REV 1477
-#define PROSLIC_RAM_CAL_TRNRD_DACT 1458
-#define PROSLIC_RAM_CAL_TRNRD_DACR 1459
-
-int ProSLIC_GetLBCalResult (proslicChanType *pProslic,int32 *result1,
-                            int32 *result2, int32 *result3, int32 *result4)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  *result1 = ReadRAM(pProslic, pProslic->channel, PROSLIC_RAM_CMDAC_FWD);
-  *result2 = ReadRAM(pProslic, pProslic->channel, PROSLIC_RAM_CMDAC_REV);
-  *result3 = ReadRAM(pProslic, pProslic->channel, PROSLIC_RAM_CAL_TRNRD_DACT);
-  *result4 = ReadRAM(pProslic, pProslic->channel, PROSLIC_RAM_CAL_TRNRD_DACR);
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_GetLBCalResultPacked (proslicChanType *pProslic,int32 *result)
-{
-  int32 results[4];
-  int rc;
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  rc = ProSLIC_GetLBCalResult(pProslic, &(results[0]), &(results[1]),
-                             &(results[2]), &(results[3]));
-  if(rc == RC_NONE)
-  {
-    /*
-      Bits 31:24   CMDAC_FWD[25:18]
-      Bits 23:16   CMDAC_REV[25:18]
-      Bits 15:8    CAL_TRNRD_DACT[20:13]
-      Bits 7:0     CAL_TRNRD_DACR[20:13]
-    */
-    *result = (results[0]<<6) & 0xff000000L;
-    *result |=(results[1]>>1) & 0x00ff0000L;
-    *result |=(results[2]>>5) & 0x0000ff00L;
-    *result |=(results[3]>>13)& 0x000000ffL;
-  }
-
-  return rc;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_LoadPreviousLBCal (proslicChanType *pProslic,int32 result1,
-                               int32 result2,int32 result3,int32 result4)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_CMDAC_FWD,result1);
-  WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_CMDAC_REV,result2);
-  WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_CAL_TRNRD_DACT,result3);
-  WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_CAL_TRNRD_DACR,result4);
-
-#ifdef API_TEST
-  ramVal = ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_CMDAC_FWD);
-  LOGPRINT ("%s UNPACKED CMDAC_FWD = %08x\n", LOGPRINT_PREFIX, ramVal);
-  ramVal = ReadRAM(pProslic, pProslic->channel,PROSLIC_RAM_CMDAC_REV);
-  LOGPRINT ("%s UNPACKED CMDAC_REF = %08x\n", LOGPRINT_PREFIX, ramVal);
-  ramVal = ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_CAL_TRNRD_DACT);
-  LOGPRINT ("%s UNPACKED CAL_TRNRD_DACT = %08x\n", LOGPRINT_PREFIX, ramVal);
-  ramVal = ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_CAL_TRNRD_DACR);
-  LOGPRINT ("%s UNPACKED CAL_TRNRD_DACR = %08x\n", LOGPRINT_PREFIX, ramVal);
-#endif
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_LoadPreviousLBCalPacked (proslicChanType *pProslic,int32 *result)
-{
-  ramData ramVal[4];
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-  ramVal[0] = (*result&0xff000000L)>>6;
-  ramVal[1] = (*result&0x00ff0000L)<<1;
-  ramVal[2] = (*result&0x0000ff00L)<<5;
-  ramVal[3] = (*result&0x000000ffL)<<13;
-
-  return ProSLIC_LoadPreviousLBCal(pProslic, ramVal[0], ramVal[1], ramVal[2],
-                                   ramVal[3]);
-}
-
-/*****************************************************************************************************/
-int ProSLIC_dbgSetDCFeedVopen (proslicChanType *pProslic, uInt32 v_vlim_val,
-                               int32 preset)
-{
-  TRACEPRINT(pProslic, "v_vlim_val = %u preset = %d\n", v_vlim_val, preset);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_dbgSetDCFeedVopen (pProslic,v_vlim_val,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_dbgSetDCFeedVopen (pProslic,v_vlim_val,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_dbgSetDCFeedVopen (pProslic,v_vlim_val,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_dbgSetDCFeedVopen (pProslic,v_vlim_val,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_dbgSetDCFeedVopen (pProslic,v_vlim_val,preset);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_dbgSetDCFeedIloop (proslicChanType *pProslic, uInt32 i_ilim_val,
-                               int32 preset)
-{
-  TRACEPRINT(pProslic, "i_ilim_val = %u preset = %d\n", i_ilim_val, preset);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_dbgSetDCFeedIloop (pProslic,i_ilim_val,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_dbgSetDCFeedIloop (pProslic,i_ilim_val,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_dbgSetDCFeedIloop (pProslic,i_ilim_val,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_dbgSetDCFeedIloop (pProslic,i_ilim_val,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_dbgSetDCFeedIloop (pProslic,i_ilim_val,preset);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_dbgSetRinging (proslicChanType *pProslic,
-                           ProSLIC_dbgRingCfg *ringCfg, int preset)
-{
-  TRACEPRINT(pProslic, "preset = %d\n", preset);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_dbgSetRinging (pProslic,ringCfg,preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_dbgSetRinging (pProslic,ringCfg,preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_dbgSetRinging (pProslic,ringCfg,preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_dbgSetRinging (pProslic,ringCfg,preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_dbgSetRinging (pProslic,ringCfg,preset);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_dbgSetRXGain (proslicChanType *pProslic, int32 gain,
-                          int impedance_preset, int audio_gain_preset)
-{
-  TRACEPRINT(pProslic, "gain = %d imp_preset = %d audio_gain_preset = %d\n", gain,
-             impedance_preset, audio_gain_preset);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_dbgSetRXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_dbgSetRXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_dbgSetRXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_dbgSetRXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_dbgSetRXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_dbgSetTXGain (proslicChanType *pProslic, int32 gain,
-                          int impedance_preset, int audio_gain_preset)
-{
-  TRACEPRINT(pProslic, "gain = %d imp_preset = %d audio_gain_preset = %d\n", gain,
-             impedance_preset, audio_gain_preset);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_dbgSetTXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_dbgSetTXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_dbgSetTXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_dbgSetTXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_dbgSetTXGain (pProslic,gain,impedance_preset,audio_gain_preset);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_LineMonitor
-**
-** Description:
-** Generic monitoring function
-**
-** Returns:
-** 0
-*/
-
-int ProSLIC_LineMonitor (proslicChanType *pProslic, proslicMonitorType *monitor)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_LineMonitor (pProslic, monitor);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_LineMonitor (pProslic, monitor);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_LineMonitor (pProslic, monitor);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_LineMonitor (pProslic, monitor);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_LineMonitor (pProslic, monitor);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_PSTNCheck
-**
-** Description:
-** Monitor for excessive longitudinal current, which
-** would be present if a live pstn line was connected
-** to the port.
-**
-** Returns:
-** 0 - no pstn detected
-** 1 - pstn detected
-*/
-int ProSLIC_PSTNCheck (proslicChanType *pProslic,
-                       proslicPSTNCheckObjType *pPSTNCheck)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_PSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_PSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_PSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_PSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_PSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_DiffPSTNCheck
-**
-** Description:
-** Monitor for excessive longitudinal current, which
-** would be present if a live pstn line was connected
-** to the port.
-**
-** Returns:
-** RC_NONE - test in progress
-** RC_IGNORE - non-ProSLIC channel
-** RC_COMPLETE_NO_ERR - ProSLIC does not support feature.
-** RC_PSTN_OPEN_FEMF | RC_COMPLETE_NO_ERR - test completed.
-**
-*/
-#ifdef PSTN_DET_ENABLE
-int ProSLIC_DiffPSTNCheck (proslicChanType *pProslic,
-                           proslicDiffPSTNCheckObjType *pPSTNCheck)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    return Si3217x_DiffPSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3218X
-  if (pProslic->deviceId->chipType >= SI32180
-      && pProslic->deviceId->chipType <= SI32189)
-  {
-    return Si3218x_DiffPSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3219X
-  if ( IS_SI3219X(pProslic->deviceId) )
-  {
-    return Si3219x_DiffPSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3226X
-  if (pProslic->deviceId->chipType >= SI32260
-      && pProslic->deviceId->chipType <= SI32269)
-  {
-    return Si3226x_DiffPSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-#ifdef SI3228X
-  if (pProslic->deviceId->chipType >= SI32280
-      && pProslic->deviceId->chipType <= SI32289)
-  {
-    return Si3228x_DiffPSTNCheck (pProslic,pPSTNCheck);
-  }
-#endif
-
-  return RC_COMPLETE_NO_ERR;
-}
-#endif
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_CreatePSTNCheckObj
-**
-** Description:
-** Allocate memory for pstnCheckObj
-**
-** Returns:
-** RC_NONE
-** RC_NO_MEM if failed to allocate memory.
-** RC_UNSUPPORTED_FEATER if malloc disabled
-*/
-int ProSLIC_CreatePSTNCheckObjs(proslicPSTNCheckObjType_ptr *pstnCheckObj,
-                                unsigned int num_objs)
-{
-  TRACEPRINT_NOCHAN("num_objs = %u\n", num_objs);
-#ifndef DISABLE_MALLOC
-  *pstnCheckObj = SIVOICE_CALLOC(sizeof(proslicPSTNCheckObjType),num_objs);
-  if(*pstnCheckObj == NULL)
-  {
-#ifdef ENABLE_DEBUG
-    LOGPRINT("%s: %s: failed to allocate memory", LOGPRINT_PREFIX, __FUNCTION__);
-#endif
-    return RC_NO_MEM;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pstnCheckObj);
-  SILABS_UNREFERENCED_PARAMETER(num_objs);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_CreateDiffPSTNCheckObjs
-**
-** Description:
-** Allocate memory for proslicDiffPstnCheckObjs
-**
-** Returns:
-** RC_NONE
-** RC_NO_MEM if failed to allocate memory.
-** RC_UNSUPPORTED_FEATURE if malloc disabled
-*/
-
-#ifdef PSTN_DET_ENABLE
-int ProSLIC_CreateDiffPSTNCheckObjs(proslicDiffPSTNCheckObjType_ptr
-                                    *pstnCheckObj, unsigned int num_objs)
-{
-  TRACEPRINT_NOCHAN("num_objs = %u\n", num_objs);
-
-#ifndef DISABLE_MALLOC
-  *pstnCheckObj = SIVOICE_CALLOC(sizeof(proslicDiffPSTNCheckObjType),num_objs);
-  if(*pstnCheckObj == NULL)
-  {
-#ifdef ENABLE_DEBUG
-    LOGPRINT("%s: %s: failed to allocate memory", LOGPRINT_PREFIX, __FUNCTION__);
-#endif
-    return RC_NO_MEM;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pstnCheckObj);
-  SILABS_UNREFERENCED_PARAMETER(num_objs);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-#endif
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_DestroyPSTNCheckObjs
-**
-** Description:
-** Free memory for pstnCheckObj
-**
-** Returns:
-** RC_NONE
-** RC_UNSUPPORTED_FEATER if malloc disabled
-*/
-int ProSLIC_DestroyPSTNCheckObjs(proslicPSTNCheckObjType_ptr *pstnCheckObj)
-{
-  TRACEPRINT_NOCHAN("\n", NULL);
-
-#ifndef DISABLE_MALLOC
-  if(pstnCheckObj)
-  {
-    SIVOICE_FREE((proslicPSTNCheckObjType_ptr)*pstnCheckObj);
-  }
-
-  return RC_NONE;
-
-#else
-  SILABS_UNREFERENCED_PARAMETER(pstnCheckObj);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_DestroyDiffPSTNCheckObjs
-**
-** Description:
-** Free memory for pstnDiffCheckObj
-**
-** Returns:
-** RC_NONE
-** RC_UNSUPPORTED_FEATER if malloc disabled
-*/
-#ifdef PSTN_DET_ENABLE
-int ProSLIC_DestroyDiffPSTNCheckObjs(proslicDiffPSTNCheckObjType_ptr
-                                     *pstnCheckObj)
-{
-  TRACEPRINT_NOCHAN("\n", NULL);
-
-#ifndef DISABLE_MALLOC
-  if(pstnCheckObj)
-  {
-    SIVOICE_FREE((proslicDiffPSTNCheckObjType_ptr)*pstnCheckObj);
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pstnCheckObj);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-#endif
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_InitPSTNCheckObj
-**
-** Description:
-** Initialize pstnCheckObj structure members
-**
-** Returns:
-** RC_NONE
-*/
-int ProSLIC_InitPSTNCheckObj(proslicPSTNCheckObjType_ptr pstnCheckObj,
-                             int32 avgThresh, int32 singleThresh, uInt8 samples)
-{
-  TRACEPRINT_NOCHAN("avgThres = %d singleThresh = %d samples = %u\n", avgThresh,
-                    avgThresh, samples);
-
-  pstnCheckObj->avgThresh = avgThresh;
-  pstnCheckObj->singleThresh = singleThresh;
-  pstnCheckObj->samples = samples;
-  pstnCheckObj->avgIlong = 0;
-  pstnCheckObj->count = 0;
-  pstnCheckObj->buffFull = 0;
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_InitDiffPSTNCheckObj
-**
-** Description:
-** Initialize pstnCheckObj structure members
-**
-** Returns:
-** RC_NONE
-*/
-#ifdef PSTN_DET_ENABLE
-int ProSLIC_InitDiffPSTNCheckObj(proslicDiffPSTNCheckObjType_ptr
-                                 pstnDiffCheckObj,
-                                 int preset1,
-                                 int preset2,
-                                 int entry_preset,
-                                 int femf_enable)
-{
-  TRACEPRINT_NOCHAN("p1 = %d p2 = %d ep = %d femf_enable = %d\n", preset1,
-                    preset2, entry_preset, femf_enable);
-
-  pstnDiffCheckObj->samples = PSTN_DET_DIFF_SAMPLES;
-  pstnDiffCheckObj->max_femf_vopen = PSTN_DET_MAX_FEMF;
-  pstnDiffCheckObj->entryDCFeedPreset = entry_preset;
-  pstnDiffCheckObj->dcfPreset1 = preset1;
-  pstnDiffCheckObj->dcfPreset2 = preset2;
-  pstnDiffCheckObj->femf_enable = femf_enable;
-  pstnDiffCheckObj->pState.stage = 0;
-  pstnDiffCheckObj->pState.sampleIterations = 0;
-  pstnDiffCheckObj->pState.waitIterations = 0;
-
-  return RC_NONE;
-}
-#endif
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_SetPwrsaveMode
-**
-** Description:
-** Enable or disable powersave mode
-**
-** Returns:
-** RC_NONE
-*/
-#define PROSLIC_REG_ENHANCE 47
-
-int ProSLIC_SetPowersaveMode (proslicChanType *pProslic, int pwrsave)
-{
-  uInt8 regData;
-  TRACEPRINT(pProslic, "pwrsave = %d\n", pwrsave);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  regData = ReadReg(pProslic,pProslic->channel, PROSLIC_REG_ENHANCE);
-
-  if(pwrsave == PWRSAVE_DISABLE)
-  {
-#ifdef SI3217X
-    if (pProslic->deviceId->chipType >= SI32171
-        && pProslic->deviceId->chipType <= SI32179)
-    {
-      regData &= 0x27;
-    }
-    else
-    {
-#endif
-      regData &= 0x07;
-#ifdef SI3217X
-    }
-#endif
-  }
-  else
-  {
-    regData |= 0x10;
-  }
-
-  return WriteReg(pProslic,pProslic->channel, PROSLIC_REG_ENHANCE, regData);
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_SetDAAEnable
-**
-** Description:
-** Enable or disable adjacent FXO (Si32178 only)
-**
-** Returns:
-** RC_NONE
-*/
-int ProSLIC_SetDAAEnable (proslicChanType *pProslic, int enable)
-{
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-#ifdef SI3217X
-  return Si3217x_SetDAAEnable (pProslic,enable);
-#else
-  SILABS_UNREFERENCED_PARAMETER(enable);
-  return RC_NONE;
-#endif
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_SetUserMode
-**
-** Description: Enables User Access Mode (UAM) if the part supports it.
-**
-** Returns:
-** RC_NONE if successful.
-*/
-#define PROSLIC_REG_USERMODE_ENABLE 126
-
-int ProSLIC_SetUserMode(proslicChanType *pProslic,BOOLEAN isEnabled,
-                        BOOLEAN isBcast)
-{
-  uInt8 data;
-  uInt8 channel;
-
-  TRACEPRINT(pProslic, "enable = %d bcast = %d\n", (int)isEnabled, (int)isBcast);
-
-  if(isEnabled == FALSE)
-  {
-    return RC_NONE;
-  }
-
-  if( pProslic->channelType != PROSLIC )
-  {
-    return RC_UNSUPPORTED_FEATURE;
-  }
-
-  if(isBcast == TRUE)
-  {
-    channel = PROSLIC_CHAN_BROADCAST;
-  }
-  else
-  {
-    channel = pProslic->channel;
-  }
-
-  data = ReadReg(pProslic,pProslic->channel,
-                 PROSLIC_REG_USERMODE_ENABLE); /*we check first channel. we assume all channels same user mode state for broadcast */
-
-  if (((data&1) != 0) == isEnabled)
-  {
-    return RC_NONE;
-  }
-
-  WriteReg(pProslic,channel,PROSLIC_REG_USERMODE_ENABLE,2);
-  WriteReg(pProslic,channel,PROSLIC_REG_USERMODE_ENABLE,8);
-  WriteReg(pProslic,channel,PROSLIC_REG_USERMODE_ENABLE,0xe);
-  return WriteReg(pProslic,channel,PROSLIC_REG_USERMODE_ENABLE,0);
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_isReinitRequired
-**
-** Description:
-** Checks for improper ring exit
-**
-** Returns:
-** RC_NONE                -  Reinit not required
-** RC_REINIT_REQUIRED     -  Corrupted state machine - reinit required
-**
-*/
-
-int ProSLIC_isReinitRequired(proslicChanType *pProslic)
-{
-  uInt8 lf;
-  ramData rkdc_sum;
-  TRACEPRINT(pProslic, "\n", NULL);
-
-  if( pProslic->channelType != PROSLIC)
-  {
-    return RC_IGNORE;
-  }
-
-  /* Check for improper ring exit which may cause dcfeed corruption */
-
-  lf = ReadReg(pProslic, pProslic->channel,PROSLIC_REG_LINEFEED);
-  rkdc_sum = ReadRAM(pProslic,pProslic->channel,PROSLIC_RAM_RDC_SUM);
-  DEBUG_PRINT(pProslic, "%sisReinitRequired: Linefeed = 0x%02X RDC_SUM = %d\n",
-              LOGPRINT_PREFIX, (int)lf, (int) rkdc_sum);
-  if((rkdc_sum & 0x400000)&&(lf != 0x44))
-  {
-    return RC_REINIT_REQUIRED;
-  }
-  else
-  {
-    return RC_NONE;
-  }
-}
-
-/*****************************************************************************************************/
-/*
-** Function: LoadRegTable
-**
-** Description:
-** Generic function to load register/RAM with predefined addr/value
-*/
-int ProSLIC_LoadRegTable (proslicChanType *pProslic, 
-                          const ProslicRAMInit *pRamTable,
-                          const ProslicRegInit *pRegTable, 
-                          int broadcast)
-{
-  uInt16 i;
-  uInt8 channel;
-
-  TRACEPRINT(pProslic, "bcast = %d\n", broadcast);
-  /* DAA doesn't have a RAM table.. skip it... */
-  if( (pRamTable != 0)
-      && (pProslic->channelType != PROSLIC) )
-  {
-    return RC_IGNORE;
-  }
-
-  if (broadcast)
-  {
-    channel = PROSLIC_CHAN_BROADCAST;
-  }
-  else
-  {
-    channel = pProslic->channel;
-  }
-
-  i=0;
-  if (pRamTable != 0)
-  {
-    while (pRamTable[i].address != 0xffff)
-    {
-      WriteRAM(pProslic,channel,pRamTable[i].address,pRamTable[i].initValue);
-      i++;
-    }
-  }
-  i=0;
-  if (pRegTable != 0)
-  {
-    while (pRegTable[i].address != 0xff)
-    {
-      WriteReg(pProslic,channel,pRegTable[i].address,pRegTable[i].initValue);
-      i++;
-    }
-  }
-
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: LoadRegTables
-**
-** Description:
-** Generic function to load register/RAM with predefined addr/value
-*/
-
-int ProSLIC_LoadRegTables(proslicChanType_ptr *pProslic,
-                          const ProslicRAMInit *pRamTable, const ProslicRegInit *pRegTable, int size)
-{
-  int i;
-  TRACEPRINT(*pProslic, "size = %d\n", size);
-  for (i=0; i<size; i++)
-  {
-    if (pProslic[i]->channelEnable)
-    {
-      ProSLIC_LoadRegTable(pProslic[i],pRamTable,pRegTable,FALSE);
-    }
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_UnsupportedFeatureNoArg(proslicChanType_ptr pProslic,
-                                    const char *function_name)
-{
-#ifdef ENABLE_DEBUG
-  LOGPRINT("%s: unsupported %s was called on channel %d\n", LOGPRINT_PREFIX,
-           function_name, pProslic->channel);
-#else
-  SILABS_UNREFERENCED_PARAMETER(pProslic);
-  SILABS_UNREFERENCED_PARAMETER(function_name);
-#endif
-  return RC_UNSUPPORTED_FEATURE;
-}
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_PSTN_delay_poll
-**
-** Description:
-** Delay function called within PSTN detection functions
-**
-** Return Value:
-** none
-*/
-#ifdef PSTN_DET_ENABLE
-void ProSLIC_PSTN_delay_poll(proslicTestStateType *pState, uInt16 delay)
-{
-  uInt16 delayCount;
-
-  if((delay/PSTN_DET_POLL_RATE) < 2)
-  {
-    delayCount = 0;
-  }
-  else
-  {
-    delayCount = (delay/PSTN_DET_POLL_RATE) - 2;
-  }
-
-  pState->waitIterations++;
-  if((pState->waitIterations == delayCount) || (delayCount == 0))
-  {
-    pState->waitIterations = 0;
-    pState->stage++;
-  }
-}
-#endif
-
-/*****************************************************************************************************/
-/*
-** Function: ProSLIC_Calibrate
-**
-** Description:
-** Performs calibration based on passed ptr to array of
-** desired CALRn settings.
-**
-** Starts calibration on all channels sequentially (not broadcast)
-** and continuously polls for completion.  Return error code if
-** CAL_EN does not clear for each enabled channel within the passed
-** timeout period.
-*/
-int ProSLIC_Calibrate(proslicChanType_ptr *pProslic, int maxChan, uInt8 *calr,
-                      int maxTime)
-{
-  int i,j, cal_en;
-  int cal_en_chan = 0;
-  int timer = 0;
-
-  TRACEPRINT(*pProslic, "maxChan = %d time = %d\n", maxChan, maxTime );
-
-  if ((*pProslic)->channelType != PROSLIC)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  for(i = 0; i < maxChan; i++)
-  {
-    if((pProslic[i]->channelEnable)&&(pProslic[i]->channelType == PROSLIC))
-    {
-      for(j = 0; j < 4; j++)
-      {
-        WriteReg(pProslic[i], pProslic[i]->channel, (PROSLIC_REG_CALR0+j), calr[j]);
-      }
-    }
-  }
-
-  /* Wait for calibration to complete */
-  do
-  {
-    cal_en = 0;
-    DelayX(*pProslic, 10);
-    for(i = 0; i < maxChan; i++)
-    {
-      if( (pProslic[i]->channelEnable) && (pProslic[i]->channelType == PROSLIC))
-      {
-        cal_en_chan = ReadReg(pProslic[i], pProslic[i]->channel, PROSLIC_REG_CALR3);
-        if( (cal_en_chan & 0x80) && (timer == maxTime) )
-        {
-          DEBUG_PRINT(pProslic[i], "%sCalibration timed out on channel %d\n",
-                      LOGPRINT_PREFIX, pProslic[i]->channel);
-          pProslic[i]->channelEnable = 0;
-          pProslic[i]->error = RC_CAL_TIMEOUT;
-        }
-        cal_en |= cal_en_chan;
-      }
-    }
-  }
-  while( (timer++ <= maxTime) && (cal_en & 0x80) );
-
-  if(timer <= maxTime)
-  {
-    return RC_NONE;
-  }
-  else
-  {
-    return RC_CAL_TIMEOUT;
-  }
-}
-/*****************************************************************************************************/
-/* This function is used by the xxxx_Init_with_Options - do not call this directly... */
-int ProSLIC_ReInit_helper(proslicChanType_ptr *pProslic, int size,
-                          initOptionsType init_option, int numChanPerDevice)
-{
-  int i;
-
-  /* Preserve linefeed state.. */
-  for(i = 0; i < size; i++)
-  {
-    pProslic[i]->scratch = ReadReg( pProslic[i], pProslic[i]->channel,
-                                   PROSLIC_REG_LINEFEED);
-    ProSLIC_PowerDownConverter( pProslic[i] );
-
-    /* Clear MSTRSTAT on a device basis */
-    if( (numChanPerDevice == 1) 
-      || ((numChanPerDevice == 2) && ((i&1) == 0)  ) )
-    {
-      ProSLIC_WriteReg(pProslic[i], PROSLIC_REG_MSTRSTAT, 0xFF); /* Clear master status register */
-    }
-  }
-
-  DelayX(*pProslic, 10); /* Wait to ensure system is powered down... */
-
-  /* Do a soft reset if reinit is requested...*/
-  if(init_option == INIT_REINIT)
-  {
-    for(i = 0; i < size; i++)
-    {
-      if(numChanPerDevice == 2) 
-      {
-        WriteReg(pProslic[i], (pProslic[i])->channel, PROSLIC_REG_RESET,
-                 (((pProslic[i])->channel)&1)+1); /* reset 1 channel at a time */
-      }
-      else
-      {
-        WriteReg(pProslic[i], (pProslic[i])->channel, PROSLIC_REG_RESET, 1);
-      }
-
-      pProslic[i]->error = RC_NONE; /* Clear any errors we may have seen in powering down the converter */
-    }
-    DelayX(*pProslic, 100); /* Wait for a soft reset */
-
-  }
-  return RC_NONE;
-}
-
-/*****************************************************************************************************/
-int ProSLIC_SoftReset(proslicChanType_ptr pProslic, uInt16 resetOptions)
-{
-  uInt8 data;
-
-  TRACEPRINT(pProslic, "reset option: %d\n",resetOptions);
-
-  /* We can't use channelType since it may not been set.  We assume at least 
-   * SWInit was called... */
-  if( pProslic->deviceId->chipType == SI3050 )
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  /* Check if we're in free-run mode, if so abort */
-  data = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_ENHANCE);
-
-  if(data & 0x6)
-  {
-    return RC_PLL_FREERUN_ACTIVE;
-  }
-
-  if(resetOptions & PROSLIC_BCAST_RESET)
-  {
-    return WriteReg(pProslic, PROSLIC_CHAN_BROADCAST, PROSLIC_REG_RESET, (uInt8)(resetOptions & 0xFF));
-  }
-  else
-  {
-    return WriteReg(pProslic, pProslic->channel, PROSLIC_REG_RESET, (uInt8)(resetOptions & 0xFF));
-  }
-}
-
-/*****************************************************************************************************/
-#ifndef DISABLE_TONE_SETUP
-int ProSLIC_ToneGenSetupPtr(proslicChanType_ptr pProslic, ProSLIC_Tone_Cfg *cfg)
-{
-  TRACEPRINT(pProslic, "\n",NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  WriteRAM(pProslic, pProslic->channel,PROSLIC_RAM_OSC1FREQ, cfg->osc1.freq);
-  WriteRAM(pProslic, pProslic->channel,PROSLIC_RAM_OSC1AMP, cfg->osc1.amp);
-  WriteRAM(pProslic, pProslic->channel,PROSLIC_RAM_OSC1PHAS, cfg->osc1.phas);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O1TAHI,cfg->osc1.tahi);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O1TALO,cfg->osc1.talo);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O1TIHI,cfg->osc1.tihi);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O1TILO,cfg->osc1.tilo);
-
-  WriteRAM(pProslic, pProslic->channel,PROSLIC_RAM_OSC2FREQ, cfg->osc2.freq);
-  WriteRAM(pProslic, pProslic->channel,PROSLIC_RAM_OSC2AMP, cfg->osc2.amp);
-  WriteRAM(pProslic, pProslic->channel,PROSLIC_RAM_OSC2PHAS, cfg->osc2.phas);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O2TAHI,cfg->osc2.tahi);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O2TALO,cfg->osc2.talo);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O2TIHI,cfg->osc2.tihi);
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_O2TILO,cfg->osc2.tilo);
-
-
-  WriteReg(pProslic, pProslic->channel,PROSLIC_REG_OMODE,cfg->omode);
-  return RC_NONE;
-}
-#endif /* DISABLE_TONE_SETUP */
-
-/*****************************************************************************************************/
-#ifndef DISABLE_FSK_SETUP
-int ProSLIC_FSKSetupPtr (proslicChanType_ptr pProslic, ProSLIC_FSK_Cfg *cfg)
-{
-  uInt8 data;
-  int i;
-
-  TRACEPRINT(pProslic, "\n",NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_FSKDEPTH,
-           0x08); /* Clear Buffer */
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_O1TAHI,0);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_O1TIHI,0);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_O1TILO,0);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_O1TALO,0x13);
-
-  data = ReadReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE);
-  if (cfg->eightBit)
-  {
-    data |= 0x80;
-  }
-  else
-  {
-    data &= ~(0x80);
-  }
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_FSKDEPTH,cfg->fskdepth);
-  WriteReg(pProslic,pProslic->channel,PROSLIC_REG_OMODE,data);
-
-  for(i = 0; i < 2; i++)
-  {
-    WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_FSK01+i,cfg->fsk[i]);
-    WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_FSKAMP0+i,cfg->fskamp[i]);
-    WriteRAM(pProslic,pProslic->channel,PROSLIC_RAM_FSKFREQ0+i,cfg->fskfreq[i]);
-  }
-  return RC_NONE;
-}
-#endif
-
-/*****************************************************************************************************/
-int ProSLIC_EnableFastRingStart(proslicChanType_ptr pProslic, BOOLEAN isEnabled)
-{
-  uInt8 data;
-
-  TRACEPRINT(pProslic, "\n",NULL);
-
-  if(pProslic->channelType != PROSLIC)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-#if defined(SI3217X) && !defined(Si3217X_REVC_ONLY)
-  if (pProslic->deviceId->chipType >= SI32171
-      && pProslic->deviceId->chipType <= SI32179)
-  {
-    if(pProslic->deviceId->chipRev < 2)
-    {
-      return RC_UNSUPPORTED_FEATURE;
-    }
-  }
-#endif
-
-  data = ReadReg(pProslic, pProslic->channel, PROSLIC_REG_USERSTAT);
-
-  if( isEnabled )
-  {
-    data |= 8;
-  }
-  else
-  {
-    data &= ~8;
-  }
-
-  return WriteReg(pProslic, pProslic->channel, PROSLIC_REG_USERSTAT, data);
-}
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/proslic_tstin.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/proslic_tstin.c
deleted file mode 100644
index f8f7a99..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/proslic_tstin.c
+++ /dev/null
@@ -1,1580 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0

-/*

- * Author(s):

- * cdp

- *

- * Distributed by:

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- * File Description:

- * This is the interface file for the ProSLIC test-in functions.

- *

- *

- */

-

-#include "../config_inc/si_voice_datatypes.h"

-#include "../inc/si_voice_ctrl.h"

-#include "../inc/si_voice_timer_intf.h"

-#include "../inc/proslic.h"

-#include "../config_inc/proslic_api_config.h"

-#include "../inc/proslic_tstin.h"

-

-#ifdef SI3217X

-#include "si3217x.h"

-#include "si3217x_intf.h"

-#endif

-#ifdef SI3218X

-#include "../inc/si3218x.h"

-#include "../inc/si3218x_intf.h"

-#endif

-#ifdef SI3219X

-#include "si3219x.h"

-#include "si3219x_intf.h"

-#endif

-#ifdef SI3226X

-#include "si3226x.h"

-#include "si3226x_intf.h"

-#endif

-#ifdef SI3228X

-#include "si3228x.h"

-#include "si3228x_intf.h"

-#endif

-

-/*

-** Function Pointer Macros

-*/

-#define WriteReg        pProslic->deviceId->ctrlInterface->WriteRegister_fptr

-#define ReadReg         pProslic->deviceId->ctrlInterface->ReadRegister_fptr

-#define pProHW          pProslic->deviceId->ctrlInterface->hCtrl

-#define Reset           pProslic->deviceId->ctrlInterface->Reset_fptr

-#define Delay           pProslic->deviceId->ctrlInterface->Delay_fptr

-#define pProTimer       pProslic->deviceId->ctrlInterface->hTimer

-#define WriteRAM        pProslic->deviceId->ctrlInterface->WriteRAM_fptr

-#define ReadRAM         pProslic->deviceId->ctrlInterface->ReadRAM_fptr

-#define TimeElapsed     pProslic->deviceId->ctrlInterface->timeElapsed_fptr

-#define getTime         pProslic->deviceId->ctrlInterface->getTime_fptr

-#define SetSemaphore    pProslic->deviceId->ctrlInterface->Semaphore_fptr

-

-#define WriteRegX       deviceId->ctrlInterface->WriteRegister_fptr

-#define ReadRegX        deviceId->ctrlInterface->ReadRegister_fptr

-#define pProHWX         deviceId->ctrlInterface->hCtrl

-#define DelayX          deviceId->ctrlInterface->Delay_fptr

-#define pProTimerX      deviceId->ctrlInterface->hTimer

-#define WriteRAMX       deviceId->ctrlInterface->WriteRAM_fptr

-#define ReadRAMX        deviceId->ctrlInterface->ReadRAM_fptr

-#define getTimeX        deviceId->ctrlInterface->getTime_fptr

-#define TimeElapsedX    deviceId->ctrlInterface->timeElapsed_fptr

-

-/*

-* Valid Device Number Ranges

-*/

-

-#define TSTIN_VALID_SI3217X_PART_NUM (pProslic->deviceId->chipType >= SI32171 && pProslic->deviceId->chipType <= SI32179)

-#define TSTIN_VALID_SI3218X_PART_NUM (pProslic->deviceId->chipType >= SI32180 && pProslic->deviceId->chipType <= SI32189)

-#define TSTIN_VALID_SI3219X_PART_NUM (pProslic->deviceId->chipType >= SI32190 && pProslic->deviceId->chipType <= SI32199)

-#define TSTIN_VALID_SI3226X_PART_NUM (pProslic->deviceId->chipType >= SI32260 && pProslic->deviceId->chipType <= SI32269)

-#define TSTIN_VALID_SI3228X_PART_NUM (pProslic->deviceId->chipType >= SI32280 && pProslic->deviceId->chipType <= SI32289)

-

-#define TSTIN_INVALID_PART_NUM  !(TSTIN_VALID_SI3217X_PART_NUM ||\

-    TSTIN_VALID_SI3218X_PART_NUM || TSTIN_VALID_SI3219X_PART_NUM ||\

-    TSTIN_VALID_SI3226X_PART_NUM || TSTIN_VALID_SI3228X_PART_NUM)

-

-#define LOGPRINT_PREFIX "ProSLIC:"

-

-ProSLIC_DCfeed_Cfg ringtripTestDCFeedPreset[] =

-{

-  {

-    0x196038D8L,	/* SLOPE_VLIM */

-    0x1D707651L,	/* SLOPE_RFEED */

-    0x0040A0E0L,	/* SLOPE_ILIM */

-    0x1E07FE48L,	/* SLOPE_DELTA1 */

-    0x1ED62D87L,	/* SLOPE_DELTA2 */

-    0x01A50724L,	/* V_VLIM (14.000 v) */

-    0x016EE54FL,	/* V_RFEED (12.200 v) */

-    0x012CBBF5L,	/* V_ILIM  (10.000 v) */

-    0x00AF8C10L,	/* CONST_RFEED (10.000 mA) */

-    0x0045CBBCL,	/* CONST_ILIM (15.000 mA) */

-    0x000D494BL,	/* I_VLIM (0.000 mA) */

-    0x005B0AFBL,	/* LCRONHK (10.000 mA) */

-    0x006D4060L,	/* LCROFFHK (12.000 mA) */

-    0x00008000L,	/* LCRDBI (5.000 ms) */

-    0x0048D595L,	/* LONGHITH (8.000 mA) */

-    0x003FBAE2L,	/* LONGLOTH (7.000 mA) */

-    0x00008000L,	/* LONGDBI (5.000 ms) */

-    0x000F0000L,	/* LCRMASK (150.000 ms) */

-    0x00080000L,	/* LCRMASK_POLREV (80.000 ms) */

-    0x00140000L,	/* LCRMASK_STATE (200.000 ms) */

-    0x00140000L,	/* LCRMASK_LINECAP (200.000 ms) */

-    0x01999999L,	/* VCM_OH (25.000 v) */

-    0x0051EB85L,	/* VOV_BAT (5.000 v) */

-    0x00418937L 	/* VOV_GND (4.000 v) */

-  }

-};

-

-/*

-** dB lookup table

-*/

-#define DB_TABLE_STEP_SIZE     250

-#define MAX_DB_TABLE           279

-

-static const uInt32 dBTable10_n60 [] =

-{

-  31623,

-  30726,

-  29854,

-  29007,

-  28184,

-  27384,

-  26607,

-  25852,

-  25119,

-  24406,

-  23714,

-  23041,

-  22387,

-  21752,

-  21135,

-  20535,

-  19953,

-  19387,

-  18836,

-  18302,

-  17783,

-  17278,

-  16788,

-  16312,

-  15849,

-  15399,

-  14962,

-  14538,

-  14125,

-  13725,

-  13335,

-  12957,

-  12589,

-  12232,

-  11885,

-  11548,

-  11220,

-  10902,

-  10593,

-  10292,

-  10000,

-  9716,

-  9441,

-  9173,

-  8913,

-  8660,

-  8414,

-  8175,

-  7943,

-  7718,

-  7499,

-  7286,

-  7079,

-  6879,

-  6683,

-  6494,

-  6310,

-  6131,

-  5957,

-  5788,

-  5623,

-  5464,

-  5309,

-  5158,

-  5012,

-  4870,

-  4732,

-  4597,

-  4467,

-  4340,

-  4217,

-  4097,

-  3981,

-  3868,

-  3758,

-  3652,

-  3548,

-  3447,

-  3350,

-  3255,

-  3162,

-  3073,

-  2985,

-  2901,

-  2818,

-  2738,

-  2661,

-  2585,

-  2512,

-  2441,

-  2371,

-  2304,

-  2239,

-  2175,

-  2113,

-  2054,

-  1995,

-  1939,

-  1884,

-  1830,

-  1778,

-  1728,

-  1679,

-  1631,

-  1585,

-  1540,

-  1496,

-  1454,

-  1413,

-  1372,

-  1334,

-  1296,

-  1259,

-  1223,

-  1189,

-  1155,

-  1122,

-  1090,

-  1059,

-  1029,

-  1000,

-  972,

-  944,

-  917,

-  891,

-  866,

-  841,

-  818,

-  794,

-  772,

-  750,

-  729,

-  708,

-  688,

-  668,

-  649,

-  631,

-  613,

-  596,

-  579,

-  562,

-  546,

-  531,

-  516,

-  501,

-  487,

-  473,

-  460,

-  447,

-  434,

-  422,

-  410,

-  398,

-  387,

-  376,

-  365,

-  355,

-  345,

-  335,

-  325,

-  316,

-  307,

-  299,

-  290,

-  282,

-  274,

-  266,

-  259,

-  251,

-  244,

-  237,

-  230,

-  224,

-  218,

-  211,

-  205,

-  200,

-  194,

-  188,

-  183,

-  178,

-  173,

-  168,

-  163,

-  158,

-  154,

-  150,

-  145,

-  141,

-  137,

-  133,

-  130,

-  126,

-  122,

-  119,

-  115,

-  112,

-  109,

-  106,

-  103,

-  100,

-  97,

-  94,

-  92,

-  89,

-  87,

-  84,

-  82,

-  79,

-  77,

-  75,

-  73,

-  71,

-  69,

-  67,

-  65,

-  63,

-  61,

-  60,

-  58,

-  56,

-  55,

-  53,

-  52,

-  50,

-  49,

-  47,

-  46,

-  45,

-  43,

-  42,

-  41,

-  40,

-  39,

-  38,

-  37,

-  35,

-  34,

-  33,

-  33,

-  32,

-  31,

-  30,

-  29,

-  28,

-  27,

-  27,

-  26,

-  25,

-  24,

-  24,

-  23,

-  22,

-  22,

-  21,

-  21,

-  20,

-  19,

-  19,

-  18,

-  18,

-  17,

-  17,

-  16,

-  16,

-  15,

-  15,

-  15,

-  14,

-  14,

-  13,

-  13,

-  13,

-  12,

-  12,

-  12,

-  11,

-  11,

-  11,

-  10,

-  10

-};

-

-

-/* *********************************** */

-static int setInternalTestLoad(proslicChanType *pProslic, int connect)

-{

-  ramData ram_save;

-  ramData test_load_addr;

-  ramData test_load_bitmask;

-

-  if(pProslic->deviceId->chipType >= SI32171

-      && pProslic->deviceId->chipType <= SI32179)

-  {

-    test_load_addr = 1516;

-    test_load_bitmask = 0x00800000L;  /* bit 23 */

-  }

-  else

-  {

-    test_load_addr = 1611;

-    test_load_bitmask = 0x00040000L;  /* bit 18 */

-  }

-

-  ProSLIC_SetUserMode(pProslic,1,0);

-  ram_save = ProSLIC_ReadRAM(pProslic,test_load_addr);

-

-  if(connect)

-  {

-    ram_save |= test_load_bitmask;

-  }

-  else

-  {

-    ram_save &= ~test_load_bitmask;

-  }

-

-  ProSLIC_WriteRAM(pProslic,test_load_addr,ram_save);

-

-  return RC_NONE;

-}

-

-/* *********************************** */

-static void setup1kHzBandpass(proslicChanType *pProslic)

-{

-  /* 1kHz bandpass - Gain = -1.7055 */

-  ProSLIC_WriteRAM(pProslic, 32, 0x180A50L);	/* TESTB0_1 */

-  ProSLIC_WriteRAM(pProslic, 33, 0x0L);		/* TESTB1_1 */

-  ProSLIC_WriteRAM(pProslic, 34, 0x1FE7F5B0L);/* TESTB2_1 */

-  ProSLIC_WriteRAM(pProslic, 35, 0xB166220L);	/* TESTA1_1 */

-  ProSLIC_WriteRAM(pProslic, 36, 0x185119D0L);/* TESTA2_1 */

-  ProSLIC_WriteRAM(pProslic, 37, 0xAF624E0L);	/* TESTB0_2 */

-  ProSLIC_WriteRAM(pProslic, 38, 0x0L);		/* TESTB1_2 */

-  ProSLIC_WriteRAM(pProslic, 39, 0xAF624E0L);	/* TESTB2_2 */

-  ProSLIC_WriteRAM(pProslic, 40, 0x0L); 		/* TESTA1_2 */

-  ProSLIC_WriteRAM(pProslic, 41, 0x185119D0L);/* TESTA2_2 */

-  ProSLIC_WriteRAM(pProslic, 42, 0x7C6E410L);	/* TESTB0_3 */

-  ProSLIC_WriteRAM(pProslic, 43, 0xAFF8B80L);	/* TESTB1_3 */

-  ProSLIC_WriteRAM(pProslic, 44, 0x7C6E410L);	/* TESTB2_3 */

-  ProSLIC_WriteRAM(pProslic, 45, 0x14E99DE0L);/* TESTA1_3 */

-  ProSLIC_WriteRAM(pProslic, 46, 0x185119D0L);/* TESTA2_3 */

-  ProSLIC_WriteRAM(pProslic, 50, 0x40000L);	/* TESTAVBW */

-  ProSLIC_WriteRAM(pProslic, 49, 0x1F40000L);	/* TESTWLN */

-  ProSLIC_WriteRAM(pProslic, 54, 0x0L);		/* TESTAVTH */

-  ProSLIC_WriteRAM(pProslic, 53, 0x0L);		/* TESTPKTH */

-}

-

-/* *********************************** */

-/* Return value in dB*1000 (mdB) */

-static int32 dBLookup(uInt32 number)

-{

-  int i;

-  uInt32 err;

-

-  if(number >= dBTable10_n60[0])

-  {

-    return 10000;  /* out of range - clamp at 10dB */

-  }

-

-  for(i=0; i<MAX_DB_TABLE; i++) /* 139 */

-  {

-    if((number < dBTable10_n60[i])&&(number >= dBTable10_n60[i+1]))

-    {

-      /* See which level it is closest to */

-      err = dBTable10_n60[i] - number;

-      if(err < (number - dBTable10_n60[i+1]))

-      {

-        return (10000 - i*DB_TABLE_STEP_SIZE);

-      }

-      else

-      {

-        return (10000 - (i+1)*DB_TABLE_STEP_SIZE);

-      }

-    }

-  }

-  /* No solution found?  Return -60dB */

-  return -60000;

-}

-

-/* *********************************** */

-static int32 readAudioDiagLevel(proslicChanType *pProslic,int32 zero_dbm_mvpk)

-{

-  int32 data;

-

-  data = ProSLIC_ReadRAM(pProslic,47); /* TESTPKO */

-  DEBUG_PRINT(pProslic, "TESTPKO = %d\n", (int)data);

-

-  data /= 40145;         /* 2^28 * 0.182 * 10^(Gfilt/20) */

-  data *= 1000;

-  data /= zero_dbm_mvpk;

-  data *= 10;

-

-  return(dBLookup(data));

-}

-

-/* *********************************** */

-static char *applyTestLimits(proslicTestObj *test)

-{

-  if((test->value >= test->lowerLimit)&&(test->value <= test->upperLimit))

-  {

-    test->testResult = RC_TEST_PASSED;

-    return ("PASS");

-  }

-  else

-  {

-    test->testResult = RC_TEST_FAILED;

-    return ("FAIL");

-  }

-}

-

-

-

-/* *********************************** */

-static int logTest(proslicChanType *pProslic,proslicTestObj *test,

-                   const char *label)

-{

-  char resultStr[10];

-  SIVOICE_STRCPY(resultStr,applyTestLimits(test));

-  DEBUG_PRINT(pProslic, "ProSLIC : TestIn : %-14s = %-8d :: %s\n", label, (int)(test->value),

-             resultStr);

-#ifndef ENABLE_DEBUG

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  SILABS_UNREFERENCED_PARAMETER(label);

-#endif

-  return test->testResult;

-

-}

-/* *********************************** */

-static int logStatus(proslicChanType *pProslic, int status,const char *label)

-{

-  DEBUG_PRINT(pProslic, "ProSLIC : TestIn : %-14s = %d\n", label,status);

-#ifndef ENABLE_DEBUG

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  SILABS_UNREFERENCED_PARAMETER(label);

-  SILABS_UNREFERENCED_PARAMETER(status);

-#endif

-  return RC_NONE;

-}

-

-/* *********************************** */

-static uInt32 Isqrt32(uInt32 num)

-{

-  uInt32 one,res,op;

-

-  op=num;

-  res=0;

-  one = 1L << 30;

-  while(one > op)

-  {

-    one >>=2;

-  }

-

-  while(one !=0)

-  {

-    if(op >= res + one)

-    {

-      op = op - (res + one);

-      res = res + 2*one;

-    }

-    res >>= 1;

-    one >>= 2;

-  }

-

-  return (res);

-}

-

-

-/* *********************************** */

-static int storeDCFeedPreset(proslicChanType *pProslic,ProSLIC_DCfeed_Cfg *cfg,uInt8 preset)

-{

-  cfg[preset].slope_vlim = ProSLIC_ReadRAM(pProslic,634);

-  cfg[preset].slope_rfeed = ProSLIC_ReadRAM(pProslic,635);

-  cfg[preset].slope_ilim = ProSLIC_ReadRAM(pProslic,636);

-  cfg[preset].delta1 = ProSLIC_ReadRAM(pProslic,638);

-  cfg[preset].delta2 = ProSLIC_ReadRAM(pProslic,639);

-  cfg[preset].v_vlim = ProSLIC_ReadRAM(pProslic,640);

-  cfg[preset].v_rfeed = ProSLIC_ReadRAM(pProslic,641);

-  cfg[preset].v_ilim = ProSLIC_ReadRAM(pProslic,642);

-  cfg[preset].const_rfeed = ProSLIC_ReadRAM(pProslic,643);

-  cfg[preset].const_ilim = ProSLIC_ReadRAM(pProslic,644);

-  cfg[preset].i_vlim = ProSLIC_ReadRAM(pProslic,645);

-  cfg[preset].lcronhk = ProSLIC_ReadRAM(pProslic,853);

-  cfg[preset].lcroffhk = ProSLIC_ReadRAM(pProslic,852);

-  cfg[preset].lcrdbi = ProSLIC_ReadRAM(pProslic,701);

-  cfg[preset].longhith = ProSLIC_ReadRAM(pProslic,858);

-  cfg[preset].longloth = ProSLIC_ReadRAM(pProslic,859);

-  cfg[preset].longdbi = ProSLIC_ReadRAM(pProslic,702);

-  cfg[preset].lcrmask = ProSLIC_ReadRAM(pProslic,854);

-  cfg[preset].lcrmask_polrev = ProSLIC_ReadRAM(pProslic,855);

-  cfg[preset].lcrmask_state = ProSLIC_ReadRAM(pProslic,856);

-  cfg[preset].lcrmask_linecap = ProSLIC_ReadRAM(pProslic,857);

-  cfg[preset].vcm_oh = ProSLIC_ReadRAM(pProslic,748);

-  cfg[preset].vov_bat = ProSLIC_ReadRAM(pProslic,752);

-  cfg[preset].vov_gnd = ProSLIC_ReadRAM(pProslic,751);

-

-  return RC_NONE;

-}

-

-

-/* *********************************** */

-int ProSLIC_createTestInObjs(proslicTestInObjType_ptr *pTstin, uInt32 num_objs)

-{

-#ifndef DISABLE_MALLOC

-  *pTstin = SIVOICE_CALLOC(sizeof(proslicTestInObjType),num_objs);

-

-  if(*pTstin == NULL)

-  {

-#ifdef ENABLE_DEBUG

-    LOGPRINT("%s: %s: failed to allocate memory", LOGPRINT_PREFIX, __FUNCTION__);

-#endif

-    return RC_NO_MEM;

-  }

-

-  return RC_NONE;

-#else

-  SILABS_UNREFERENCED_PARAMETER(pTstin);

-  SILABS_UNREFERENCED_PARAMETER(num_objs);

-  return RC_UNSUPPORTED_FEATURE;

-#endif

-}

-/* *********************************** */

-int ProSLIC_destroyTestInObjs(proslicTestInObjType_ptr *pTstin)

-{

-#ifndef DISABLE_MALLOC

-  SIVOICE_FREE((proslicTestInObjType_ptr) *pTstin);

-  *pTstin = NULL;

-  return RC_NONE;

-#else

-  SILABS_UNREFERENCED_PARAMETER(pTstin);

-  return RC_UNSUPPORTED_FEATURE;

-#endif

-}

-

-/* *********************************** */

-int ProSLIC_testInPCMLpbkEnable(proslicChanType *pProslic,

-                                proslicTestInObjType *pTstin)

-{

-  uInt8 regData;

-

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  /* Check if enabled */

-  if(!pTstin->pcmLpbkTest.testEnable)

-  {

-    return RC_TEST_DISABLED;

-  }

-  /* Return if already enabled */

-  if(pTstin->pcmLpbkTest.pcmLpbkEnabled)

-  {

-    return RC_NONE;

-  }

-

-  /* Store PCM Settings */

-  pTstin->pcmLpbkTest.pcmModeSave = ProSLIC_ReadReg(pProslic,11); /* PCMMODE */

-

-

-  /* Disable PCM bus before changing format */

-  regData = pTstin->pcmLpbkTest.pcmModeSave & ~0x10; /* PCM_EN = 0 */

-  ProSLIC_WriteReg(pProslic,11,regData);

-

-  /* Configure for either 8 or 16bit linear */

-  if(pTstin->pcmLpbkTest.pcm8BitLinear == PCM_8BIT)

-  {

-    regData |= 0x02;   /* PCM_FMT[1] = 1 */

-    regData &= ~0x01;  /* PCM_FMT[0] = 0 */

-  }

-  else /* PCM_16BIT */

-  {

-    regData |= 0x03;  /* PCM_FMT[1:0] = 11 */

-  }

-

-  ProSLIC_WriteReg(pProslic,11,regData);

-

-  /* Enable PCM Loopback */

-  ProSLIC_WriteReg(pProslic,43,0x01);  /* LOOPBACK */

-

-  /* Re-enable PCM Bus */

-  ProSLIC_WriteReg(pProslic,11,regData|0x10);  /* PCMMODE */

-

-  pTstin->pcmLpbkTest.pcmLpbkEnabled = 1;

-  DEBUG_PRINT(pProslic, "ProSLIC : TestIn : pcmLpbk : ENABLED\n");

-  return RC_NONE;

-}

-

-/* *********************************** */

-int ProSLIC_testInPCMLpbkDisable(proslicChanType *pProslic,

-                                 proslicTestInObjType *pTstin)

-{

-  uInt8 regData;

-

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  /* Check if enabled */

-  if(!pTstin->pcmLpbkTest.testEnable)

-  {

-    return RC_TEST_DISABLED;

-  }

-

-  /* Return if already disabled */

-  if(!pTstin->pcmLpbkTest.pcmLpbkEnabled)

-  {

-    return RC_NONE;

-  }

-

-  /* Disable PCM Bus */

-  regData = ProSLIC_ReadReg(pProslic,11); /* PCMMODE */

-  ProSLIC_WriteReg(pProslic,11,regData &= ~0x10);

-

-  /* Disable PCM Loopback */

-  ProSLIC_WriteReg(pProslic,43,0);

-

-  /* Restore PCMMODE. Force disabled while changing format */

-  ProSLIC_WriteReg(pProslic,11,pTstin->pcmLpbkTest.pcmModeSave &= ~0x10);

-  ProSLIC_WriteReg(pProslic,11,pTstin->pcmLpbkTest.pcmModeSave);

-

-  pTstin->pcmLpbkTest.pcmLpbkEnabled = 0;

-  DEBUG_PRINT(pProslic, "ProSLIC : TestIn : pcmLpbk : DISABLED\n");

-  return RC_NONE;

-}

-

-/* *************************************************** */

-

-int ProSLIC_testInDCFeed(proslicChanType *pProslic,

-                         proslicTestInObjType *pTstin)

-{

-  uInt8 enhanceRegSave;

-  proslicMonitorType monitor;

-  ramData lcroffhk_save = 0;

-  ramData lcronhk_save = 0;

-

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  /* Check if enabled */

-  if(!pTstin->dcFeedTest.testEnable)

-  {

-    return RC_TEST_DISABLED;

-  }

-

-  /* Invalidate last test results */

-  pTstin->dcFeedTest.testDataValid = TSTIN_RESULTS_INVALID;

-

-  /* Verify line not in use */

-  if(ProSLIC_ReadReg(pProslic,34) & 0x02)  /* LCR */

-  {

-    DEBUG_PRINT(pProslic, "\nProSLIC : TestIn : DC Feed : Line in Use\n");

-

-    if(pTstin->dcFeedTest.abortIfLineInUse==ABORT_LIU_ENABLED)

-    {

-      return RC_LINE_IN_USE;

-    }

-  }

-

-  /* Disable Powersave */

-  enhanceRegSave = ProSLIC_ReadReg(pProslic,47);

-  ProSLIC_WriteReg(pProslic,47,0x20);

-  Delay(pProTimer,10);

-

-  /* Onhook measurement */

-  ProSLIC_LineMonitor(pProslic,&monitor);

-

-  pTstin->dcFeedTest.dcfeedVtipOnhook.value = monitor.vtip;

-  pTstin->dcFeedTest.dcfeedVringOnhook.value = monitor.vring;

-  pTstin->dcFeedTest.dcfeedVloopOnhook.value = monitor.vtr;

-  pTstin->dcFeedTest.dcfeedVbatOnhook.value = monitor.vbat;

-  pTstin->dcFeedTest.dcfeedItipOnhook.value = monitor.itip;

-  pTstin->dcFeedTest.dcfeedIringOnhook.value = monitor.iring;

-  pTstin->dcFeedTest.dcfeedIloopOnhook.value = monitor.itr;

-  pTstin->dcFeedTest.dcfeedIlongOnhook.value = monitor.ilong;

-

-  /* Modify LCR threshold (optional) before connecting test load */

-  if(pTstin->dcFeedTest.applyLcrThresh == LCR_CHECK_ENABLED)

-  {

-    lcroffhk_save = ProSLIC_ReadRAM(pProslic,852);

-    lcronhk_save = ProSLIC_ReadRAM(pProslic,853);

-    ProSLIC_WriteRAM(pProslic,852,pTstin->dcFeedTest.altLcrOffThresh);

-    ProSLIC_WriteRAM(pProslic,853,pTstin->dcFeedTest.altLcrOnThresh);

-  }

-

-  /* Connect internal test load for 2nd dc feed i/v point */

-  setInternalTestLoad(pProslic,1);

-  Delay(pProTimer,50);

-  /* Offhook measurement */

-  ProSLIC_LineMonitor(pProslic,&monitor);

-

-  pTstin->dcFeedTest.dcfeedVtipOffhook.value = monitor.vtip;

-  pTstin->dcFeedTest.dcfeedVringOffhook.value = monitor.vring;

-  pTstin->dcFeedTest.dcfeedVloopOffhook.value = monitor.vtr;

-  pTstin->dcFeedTest.dcfeedVbatOffhook.value = monitor.vbat;

-  pTstin->dcFeedTest.dcfeedItipOffhook.value = monitor.itip;

-  pTstin->dcFeedTest.dcfeedIringOffhook.value = monitor.iring;

-  pTstin->dcFeedTest.dcfeedIloopOffhook.value = monitor.itr;

-  pTstin->dcFeedTest.dcfeedIlongOffhook.value = monitor.ilong;

-

-  pTstin->dcFeedTest.testResult = RC_TEST_PASSED;  /* initialize */

-  /* Read LCR */

-  if(ProSLIC_ReadReg(pProslic,34) & 0x07)  /* LCRRTP */

-  {

-    pTstin->dcFeedTest.lcrStatus = 1;

-  }

-  else

-  {

-    pTstin->dcFeedTest.lcrStatus = 0;

-  }

-

-  /* Only fail check if enabled */

-  if(pTstin->dcFeedTest.applyLcrThresh == LCR_CHECK_ENABLED)

-  {

-    pTstin->dcFeedTest.testResult |= !pTstin->dcFeedTest.lcrStatus;

-  }

-

-  /* Disconnect Test Load */

-  setInternalTestLoad(pProslic,0);

-

-  /* Restore LCR thresholds */

-  if(pTstin->dcFeedTest.applyLcrThresh == LCR_CHECK_ENABLED)

-  {

-    ProSLIC_WriteRAM(pProslic,852,lcroffhk_save);

-    ProSLIC_WriteRAM(pProslic,853,lcronhk_save);

-  }

-

-  /* Restore enhance reg */

-  ProSLIC_WriteReg(pProslic,47,enhanceRegSave);

-

-  /* Process Results */

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVtipOnhook),"DcFeed : Vtip Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVringOnhook),"DcFeed : Vring Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVloopOnhook),"DcFeed : Vloop Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVbatOnhook),"DcFeed : Vbat Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedItipOnhook),"DcFeed : Itip Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedIringOnhook),"DcFeed : Iring Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedIloopOnhook),"DcFeed : Iloop Onhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedIlongOnhook),"DcFeed : Ilong Onhook");

-

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVtipOffhook),"DcFeed : Vtip Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVringOffhook),"DcFeed : Vring Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVloopOffhook),"DcFeed : Vloop Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedVbatOffhook),"DcFeed : Vbat Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedItipOffhook),"DcFeed : Itip Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedIringOffhook),"DcFeed : Iring Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedIloopOffhook),"DcFeed : Iloop Offhook");

-  pTstin->dcFeedTest.testResult |= logTest(pProslic,

-                                   &(pTstin->dcFeedTest.dcfeedIlongOffhook),"DcFeed : Ilong Offhook");

-

-  logStatus(pProslic,pTstin->dcFeedTest.lcrStatus,"DcFeed : LCR");

-

-

-  pTstin->dcFeedTest.testDataValid = 1;   /* New valid results */

-

-  /* return cumulative pass/fail result */

-

-  return (pTstin->dcFeedTest.testResult);

-}

-

-/* *********************************** */

-int ProSLIC_testInRinging(proslicChanType *pProslic,

-                          proslicTestInObjType *pTstin)

-{

-  uInt8 ringcon_save,enhance_save;

-  int32 vtr[MAX_RINGING_SAMPLES];

-  int i;

-  uInt8 lf;

-  uInt32 rtper_save, ringfr_save,ringamp_save,ringof_save,rtacth_save,rtdcth_save;

-  ProSLIC_DCfeed_Cfg dcfeedCfg[1];

-

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  /* Check if enabled */

-  if( (!pTstin->ringingTest.testEnable)

-      || (pTstin->ringingTest.numSamples == 0) )

-  {

-    return RC_TEST_DISABLED;

-  }

-

-  /* Verify line not in use */

-  if(ProSLIC_ReadReg(pProslic,34) & 0x02)  /* LCR */

-  {

-    DEBUG_PRINT(pProslic, "\nProSLIC : TestIn : Ringing : Line in Use\n");

-

-    if(pTstin->ringingTest.abortIfLineInUse)

-    {

-      return RC_LINE_IN_USE;

-    }

-  }

-

-  /* Invalidate last test results */

-  pTstin->ringingTest.testDataValid = TSTIN_RESULTS_INVALID;

-

-  /* Check sample size/rate */

-  if(pTstin->ringingTest.numSamples > MAX_RINGING_SAMPLES)

-  {

-    pTstin->ringingTest.numSamples = MAX_RINGING_SAMPLES;

-  }

-

-  if(pTstin->ringingTest.sampleInterval > MAX_RINGING_SAMPLE_INTERVAL)

-  {

-    pTstin->ringingTest.sampleInterval = MAX_RINGING_SAMPLE_INTERVAL;

-  }

-

-  if(pTstin->ringingTest.sampleInterval < MIN_RINGING_SAMPLE_INTERVAL)

-  {

-    pTstin->ringingTest.sampleInterval = MIN_RINGING_SAMPLE_INTERVAL;

-  }

-

-  /* Disable Powersave */

-  enhance_save = ProSLIC_ReadReg(pProslic,47);

-  ProSLIC_WriteReg(pProslic,47,0x20);

-  Delay(pProTimer,10);

-

-  /* Disable ring cadencing */

-  ringcon_save = ProSLIC_ReadReg(pProslic,38); /* RINGCON */

-  ProSLIC_WriteReg(pProslic,38,ringcon_save&0xE7); /* RINGCON */

-

-  /* Must enter ringing through active state */

-  lf = ProSLIC_ReadReg(pProslic,30);  /* LINEFEED */

-  ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-  Delay(pProTimer,20); /* settle */

-

-  /* Start ringing */

-  ProSLIC_SetLinefeedStatus(pProslic,LF_RINGING);

-  Delay(pProTimer,500);

-

-  /* Verify Ring Started */

-  if(ProSLIC_ReadReg(pProslic,30) != 0x44)

-  {

-    ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-    ProSLIC_SetLinefeedStatus(pProslic,LF_OPEN);

-    ProSLIC_WriteReg(pProslic,38,ringcon_save);

-    ProSLIC_WriteReg(pProslic,47,enhance_save);

-    ProSLIC_SetLinefeedStatus(pProslic,lf);

-    

-    DEBUG_PRINT(pProslic, "ProSLIC : TestIn : Ringing : Ring Start Fail\n");

-

-    pTstin->ringingTest.testResult = RC_TEST_FAILED;

-    return RC_RING_START_FAIL;

-  }

-

-  /* Capture samples */

-  pTstin->ringingTest.ringingVdc.value = 0;

-  for(i=0; i<pTstin->ringingTest.numSamples; i++)

-  {

-    vtr[i] = ProSLIC_ReadMADCScaled(pProslic,69,0); /* VDIFF_FILT */

-    pTstin->ringingTest.ringingVdc.value += vtr[i];

-

-    DEBUG_PRINT(pProslic, "ProSLIC : TestIn : Ringing : Vtr[%d] = %d\n",i, (int)(vtr[i]));

-

-    Delay(pProTimer,pTstin->ringingTest.sampleInterval);

-  }

-

-  /* Restore linefeed */

-  ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-  Delay(pProTimer,20);

-

-  /* Process Results */

-  pTstin->ringingTest.ringingVdc.value /= pTstin->ringingTest.numSamples;

-  for(i=0; i<pTstin->ringingTest.numSamples; i++)

-  {

-    vtr[i] -= pTstin->ringingTest.ringingVdc.value;

-    pTstin->ringingTest.ringingVac.value += ((vtr[i]/100L) * (vtr[i]/100L));

-  }

-

-

-  pTstin->ringingTest.ringingVac.value /= pTstin->ringingTest.numSamples;

-  pTstin->ringingTest.ringingVac.value = Isqrt32(

-      pTstin->ringingTest.ringingVac.value);

-  pTstin->ringingTest.ringingVac.value *= 100L;

-

-  pTstin->ringingTest.testResult = RC_TEST_PASSED;

-  pTstin->ringingTest.testResult |= logTest(pProslic,

-                                    &(pTstin->ringingTest.ringingVdc),"Ringing : VDC");

-  pTstin->ringingTest.testResult |= logTest(pProslic,

-                                    &(pTstin->ringingTest.ringingVac),"Ringing : VAC");

-  /*

-  ** Optional Ringtrip Test

-  */

-

-  if(pTstin->ringingTest.ringtripTestEnable == RTP_CHECK_ENABLED)

-  {

-    /* Setup low voltage linefeed so low level ringing may be used */

-    ProSLIC_SetLinefeedStatus(pProslic,LF_OPEN);

-    storeDCFeedPreset(pProslic,&(dcfeedCfg[0]),0);

-    ProSLIC_DCFeedSetupCfg(pProslic,&(ringtripTestDCFeedPreset[0]),0);

-

-    /* Optional Ringtrip Test (modified ringer settings to use test load to trip) */

-    rtper_save = ProSLIC_ReadRAM(pProslic,755);

-    ringfr_save = ProSLIC_ReadRAM(pProslic,844);

-    ringamp_save = ProSLIC_ReadRAM(pProslic,845);

-    ringof_save = ProSLIC_ReadRAM(pProslic,843);

-    rtacth_save = ProSLIC_ReadRAM(pProslic,848);

-    rtdcth_save = ProSLIC_ReadRAM(pProslic,847);

-

-    ProSLIC_WriteRAM(pProslic,755,0x50000L);  /* RTPER */

-    ProSLIC_WriteRAM(pProslic,844,0x7EFE000L);/* RINGFR */

-    ProSLIC_WriteRAM(pProslic,845,0xD6307L);  /* RINGAMP */

-    ProSLIC_WriteRAM(pProslic,843,0x0L);      /* RINGOF */

-    ProSLIC_WriteRAM(pProslic,848,0x7827FL);  /* RTACTH */

-    ProSLIC_WriteRAM(pProslic,847,0xFFFFFFFL);/* RTDCTH */

-

-    /* Start ringing from active state */

-    ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-    Delay(pProTimer,20);

-    ProSLIC_SetLinefeedStatus(pProslic,LF_RINGING);

-    Delay(pProTimer,200);

-

-    /* Verify Ring Started */

-    if(ProSLIC_ReadReg(pProslic,30) != 0x44)

-    {

-      ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-      ProSLIC_SetLinefeedStatus(pProslic,LF_OPEN);

-      ProSLIC_WriteReg(pProslic,38,ringcon_save);

-      ProSLIC_WriteReg(pProslic,47,enhance_save);

-      

-      /* Restore DC Feed */

-      ProSLIC_DCFeedSetupCfg(pProslic,&(dcfeedCfg[0]),0);

-

-      /* Restore Ring Settings */

-      ProSLIC_WriteRAM(pProslic,755,rtper_save); /* RTPER */

-      ProSLIC_WriteRAM(pProslic,844,ringfr_save); /*RINGFR */

-      ProSLIC_WriteRAM(pProslic,845,ringamp_save); /* RINGAMP */

-      ProSLIC_WriteRAM(pProslic,843,ringof_save); /* RINGOF */

-      ProSLIC_WriteRAM(pProslic,848,rtacth_save); /* RTACTH */

-      ProSLIC_WriteRAM(pProslic,847,rtdcth_save); /* RTDCTH */

-      

-      ProSLIC_SetLinefeedStatus(pProslic,lf);

-

-      DEBUG_PRINT(pProslic, "ProSLIC : TestIn : Ringtrip : Ring Start Fail\n");

-

-      pTstin->ringingTest.testResult=RC_TEST_FAILED;

-      return RC_RING_START_FAIL;

-    }

-

-    /* Connect Test Load to cause ringtrip */

-    setInternalTestLoad(pProslic,1);

-    Delay(pProTimer,200);

-

-    /* Check for RTP */

-    if(ProSLIC_ReadReg(pProslic,34) & 0x01)  /* LCRRTP */

-    {

-      pTstin->ringingTest.rtpStatus = 1;

-      pTstin->ringingTest.testResult |= RC_TEST_PASSED;

-    }

-    else

-    {

-      pTstin->ringingTest.rtpStatus = 0;

-      pTstin->ringingTest.testResult |= RC_TEST_FAILED;

-      ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-    }

-    setInternalTestLoad(pProslic,0);

-    Delay(pProTimer,20);

-

-    logStatus(pProslic,pTstin->ringingTest.rtpStatus,"Ringing : RTP");

-

-    /* Restore DC Feed */

-    ProSLIC_DCFeedSetupCfg(pProslic,&(dcfeedCfg[0]),0);

-

-    /* Restore Ring Settings */

-    ProSLIC_WriteRAM(pProslic,755,rtper_save);/* RTPER */

-    ProSLIC_WriteRAM(pProslic,844,ringfr_save);/*RINGFR */

-    ProSLIC_WriteRAM(pProslic,845,ringamp_save); /* RINGAMP */

-    ProSLIC_WriteRAM(pProslic,843,ringof_save); /* RINGOF */

-    ProSLIC_WriteRAM(pProslic,848,rtacth_save);/* RTACTH */

-    ProSLIC_WriteRAM(pProslic,847,rtdcth_save);/* RTDCTH */

-

-  }/* end of ringtrip test  */

-

-  /* Restore Linefeed */

-  ProSLIC_SetLinefeedStatus(pProslic,lf);

-

-  /* Restore RINGCON and ENHANCE */

-  ProSLIC_WriteReg(pProslic,38,ringcon_save);

-  ProSLIC_WriteReg(pProslic,47,enhance_save);

-

-  pTstin->ringingTest.testDataValid = TSTIN_RESULTS_VALID;

-

-  return (pTstin->ringingTest.testResult);

-}

-

-/* *********************************** */

-int ProSLIC_testInBattery(proslicChanType *pProslic,

-                          proslicTestInObjType *pTstin)

-{

-  proslicMonitorType monitor;

-

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  /* Check if enabled */

-  if(!pTstin->batteryTest.testEnable)

-  {

-    return RC_TEST_DISABLED;

-  }

-

-  /* Invalidate last test results */

-  pTstin->batteryTest.testDataValid = TSTIN_RESULTS_INVALID;

-

-  /* Measure Battery */

-  ProSLIC_LineMonitor(pProslic,&monitor);

-

-  pTstin->batteryTest.vbat.value = monitor.vbat;

-

-  pTstin->batteryTest.testResult = logTest(pProslic,&(pTstin->batteryTest.vbat),

-                                   "Battery : VBAT");

-

-  pTstin->batteryTest.testDataValid =

-    TSTIN_RESULTS_VALID;   /* New valid results */

-

-  return (pTstin->batteryTest.testResult);

-}

-

-/* *********************************** */

-int ProSLIC_testInAudio(proslicChanType *pProslic, proslicTestInObjType *pTstin)

-{

-  uInt8 enhanceRegSave;

-  uInt8 lf;

-  int32 data;

-  int32 gainMeas1,gainMeas2;

-  int32 gainMeas3 = 0;

-  ProSLIC_audioGain_Cfg gainCfg;

-  int32 Pin = -3980;   /* -10dBm + 6.02dB (since OHT w/ no AC load) */

-

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  /* Check if enabled */

-  if(!pTstin->audioTest.testEnable)

-  {

-    return RC_TEST_DISABLED;

-  }

-

-  /* Invalidate last test results */

-  pTstin->audioTest.testDataValid = TSTIN_RESULTS_INVALID;

-

-  /* Verify line not in use */

-  if(ProSLIC_ReadReg(pProslic,34) & 0x02)  /* LCR */

-  {

-    DEBUG_PRINT(pProslic, "\nProSLIC : TestIn : Audio : Line in Use\n");

-

-    if(pTstin->audioTest.abortIfLineInUse == ABORT_LIU_ENABLED)

-    {

-      return RC_LINE_IN_USE;

-    }

-  }

-

-  /* Disable Powersave */

-  enhanceRegSave = ProSLIC_ReadReg(pProslic,47);

-  ProSLIC_WriteReg(pProslic,47,0x20);

-  Delay(pProTimer,10);

-

-

-  /* Setup Audio Filter, enable audio in OHT */

-  lf = ProSLIC_ReadReg(pProslic,30);  /* LINEFEED */

-  ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-  Delay(pProTimer,20); /* settle */

-  setup1kHzBandpass(pProslic);

-  ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_OHT);

-

-  /* Setup osc1 for 1kHz -10dBm tone, disable hybrid, enable filters */

-  ProSLIC_WriteRAM(pProslic,26,0x5A80000L); /* OSC1FREQ */

-  ProSLIC_WriteRAM(pProslic,27,0x5D8000L);  /* OSC1AMP */

-  ProSLIC_WriteReg(pProslic,48,0x02);       /* OMODE */

-  ProSLIC_WriteReg(pProslic,49,0x01);       /* OCON */

-  ProSLIC_WriteReg(pProslic,44,0x10);       /* DIGCON */

-  ProSLIC_WriteReg(pProslic,71,0x10);       /* DIAG1 */

-

-  /* Settle */

-  Delay(pProTimer,800);

-

-  /* Read first gain measurement (Gtx + Grx + Gzadj) */

-  gainMeas1 = readAudioDiagLevel(pProslic,pTstin->audioTest.zerodBm_mVpk);

-

-  /* Bypass TXACHPF and set TXACEQ to unity */

-  gainCfg.acgain = ProSLIC_ReadRAM(pProslic,544);  /* TXACGAIN */

-  gainCfg.aceq_c0 = ProSLIC_ReadRAM(pProslic,540); /* TXACEQ_C0 */

-  gainCfg.aceq_c1 = ProSLIC_ReadRAM(pProslic,541); /* TXACEQ_C1 */

-  gainCfg.aceq_c2 = ProSLIC_ReadRAM(pProslic,542); /* TXACEQ_C2 */

-  gainCfg.aceq_c3 = ProSLIC_ReadRAM(pProslic,543); /* TXACEQ_C3 */

-  ProSLIC_WriteRAM(pProslic,544,0x8000000L);

-  ProSLIC_WriteRAM(pProslic,543,0x0L);

-  ProSLIC_WriteRAM(pProslic,542,0x0L);

-  ProSLIC_WriteRAM(pProslic,541,0x0L);

-  ProSLIC_WriteRAM(pProslic,540,0x8000000L);

-  ProSLIC_WriteReg(pProslic,44,0x18);

-

-  /* Settle */

-  Delay(pProTimer,800);

-

-  /* Read second level measurement (RX level only) */

-  gainMeas2 = readAudioDiagLevel(pProslic,pTstin->audioTest.zerodBm_mVpk);

-

-  /* Adjust txgain if TXACGAIN wasn't unity during gainMeas1 */

-  if(gainCfg.acgain != 0x8000000L)

-  {

-    data = (gainCfg.acgain*10)/134217;

-    gainMeas3 = dBLookup(data);

-  }

-

-  /* Computations */

-  pTstin->audioTest.rxGain.value = gainMeas2 - Pin;

-  pTstin->audioTest.txGain.value = gainMeas1 - gainMeas2 + gainMeas3;

-

-#ifdef ENABLE_DEBUG

-  if( DEBUG_ENABLED(pProslic) )

-  {

-    LOGPRINT("ProSLIC : TestIn : Audio : gainMeas1 = %d\n", (int)gainMeas1);

-    LOGPRINT("ProSLIC : TestIn : Audio : gainMeas2 = %d\n", (int)gainMeas2);

-    LOGPRINT("ProSLIC : TestIn : Audio : gainMeas3 = %d\n", (int)gainMeas3);

-  }

-#endif

-  pTstin->audioTest.testResult = RC_TEST_PASSED;

-  pTstin->audioTest.testResult |= logTest(pProslic,&(pTstin->audioTest.rxGain),

-                                          "RX Path Gain");

-  pTstin->audioTest.testResult |= logTest(pProslic,&(pTstin->audioTest.txGain),

-                                          "TX Path Gain");

-

-

-

-  /*

-  ** Restore

-  */

-

-  /* Need to store/restore all modified reg/RAM */

-  ProSLIC_WriteRAM(pProslic,544,gainCfg.acgain);

-  ProSLIC_WriteRAM(pProslic,540,gainCfg.aceq_c0);

-  ProSLIC_WriteRAM(pProslic,541,gainCfg.aceq_c1);

-  ProSLIC_WriteRAM(pProslic,542,gainCfg.aceq_c2);

-  ProSLIC_WriteRAM(pProslic,543,gainCfg.aceq_c3);

-

-  ProSLIC_WriteReg(pProslic,71,0x0);  /* DIAG1 */

-  ProSLIC_WriteReg(pProslic,44,0x0);  /* DIGCON */

-  ProSLIC_WriteReg(pProslic,48,0x0);  /* OMODE */

-  ProSLIC_WriteReg(pProslic,49,0x0);  /* OCON */

-  ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-  ProSLIC_WriteReg(pProslic,47,enhanceRegSave);

-  ProSLIC_SetLinefeedStatus(pProslic,lf);

-

-  /* Validate last test results */

-  pTstin->audioTest.testDataValid = TSTIN_RESULTS_VALID;

-

-  return pTstin->audioTest.testResult;

-}

-

-

-/* *********************************** */

-

-int ProSLIC_testInPcmLpbkSetup(proslicTestInObjType *pTstin,

-                               proslicPcmLpbkTest *pcmLpbkTest)

-{

-  pTstin->pcmLpbkTest = *pcmLpbkTest;

-  pTstin->pcmLpbkTest.testEnable = 1;

-

-  return RC_NONE;

-}

-

-/* *********************************** */

-

-int ProSLIC_testInDcFeedSetup(proslicTestInObjType *pTstin,

-                              proslicDcFeedTest *dcFeedTest)

-{

-  pTstin->dcFeedTest = *dcFeedTest;

-  pTstin->dcFeedTest.testEnable = 1;

-

-  return RC_NONE;

-}

-

-/* *********************************** */

-

-int ProSLIC_testInRingingSetup(proslicTestInObjType *pTstin,

-                               proslicRingingTest *ringingTest)

-{

-  /* Copy limits per-channel */

-

-  pTstin->ringingTest = *ringingTest;

-  pTstin->ringingTest.testEnable = 1;

-

-  return RC_NONE;

-}

-/* *********************************** */

-

-int ProSLIC_testInBatterySetup(proslicTestInObjType *pTstin,

-                               proslicBatteryTest *batteryTest)

-{

-  /* Copy limits per-channel */

-

-  pTstin->batteryTest = *batteryTest;

-  pTstin->batteryTest.testEnable = 1;

-

-  return RC_NONE;

-}

-

-/* *********************************** */

-

-int ProSLIC_testInAudioSetup(proslicTestInObjType *pTstin,

-                             proslicAudioTest *audioTest)

-{

-  /* Copy limits per-channel */

-

-  pTstin->audioTest = *audioTest;

-  pTstin->audioTest.testEnable = 1;

-

-  return RC_NONE;

-}

-

-

-/* *********************************** */

-int ProSLIC_testInPrintLimits(proslicChanType *pProslic,

-                              proslicTestInObjType *pTstin)

-{

-  /* Valid device check */

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-#ifdef ENABLE_DEBUG

-  if( DEBUG_ENABLED(pProslic ) )

-  {

-    LOGPRINT("\n");

-    LOGPRINT("************   Test-In Test Limits **************\n");

-    LOGPRINT("----------------------------------------------------------------\n");

-    LOGPRINT("ProSLIC : Test-In : Limits : vtip_on_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVtipOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vtip_on_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVtipOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vring_on_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVringOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vring_on_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVringOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vloop_on_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVloopOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vloop_on_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVloopOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vbat_on_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVbatOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vbat_on_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVbatOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : itip_on_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedItipOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : itip_on_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedItipOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iring_on_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIringOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iring_on_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIringOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iloop_on_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIloopOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iloop_on_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIloopOnhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ilong_on_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIlongOnhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ilong_on_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIlongOnhook.upperLimit));

-    LOGPRINT("----------------------------------------------------------------\n");

-    LOGPRINT("ProSLIC : Test-In : Limits : vtip_off_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVtipOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vtip_off_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVtipOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vring_off_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVringOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vring_off_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVringOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vloop_off_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVloopOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vloop_off_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVloopOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vbat_off_min (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVbatOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : vbat_off_max (mv) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedVbatOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : itip_off_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedItipOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : itip_off_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedItipOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iring_off_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIringOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iring_off_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIringOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iloop_off_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIloopOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : iloop_off_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIloopOffhook.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ilong_off_min (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIlongOffhook.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ilong_off_max (ua) = %d\n",

-             (int)(pTstin->dcFeedTest.dcfeedIlongOffhook.upperLimit));

-    LOGPRINT("----------------------------------------------------------------\n");

-    LOGPRINT("ProSLIC : Test-In : Limits : ringing_vac_min (mv) = %d\n",

-             (int)(pTstin->ringingTest.ringingVac.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ringing_vac_max (mv) = %d\n",

-             (int)(pTstin->ringingTest.ringingVac.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ringing_vdc_min (mv) = %d\n",

-             (int)(pTstin->ringingTest.ringingVdc.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : ringing_vdc_max (mv) = %d\n",

-             (int)(pTstin->ringingTest.ringingVdc.upperLimit));

-    LOGPRINT("----------------------------------------------------------------\n");

-    LOGPRINT("ProSLIC : Test-In : Limits : battery_vbat_min (mv) = %d\n",

-             (int)(pTstin->batteryTest.vbat.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : battery_vbat_max (mv) = %d\n",

-             (int)(pTstin->batteryTest.vbat.upperLimit));

-    LOGPRINT("----------------------------------------------------------------\n");

-    LOGPRINT("ProSLIC : Test-In : Limits : audio_txgain_min (mdB) = %d\n",

-             (int)(pTstin->audioTest.txGain.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : audio_txgain_max (mdB) = %d\n",

-             (int)(pTstin->audioTest.txGain.upperLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : audio_rxgain_min (mdB) = %d\n",

-             (int)(pTstin->audioTest.rxGain.lowerLimit));

-    LOGPRINT("ProSLIC : Test-In : Limits : audio_rxgain_max (mdB) = %d\n",

-             (int)(pTstin->audioTest.rxGain.upperLimit));

-    LOGPRINT("----------------------------------------------------------------\n");

-    LOGPRINT("\n");

-  }

-#else

-  SILABS_UNREFERENCED_PARAMETER(pTstin);

-#endif

-  return RC_NONE;

-}

-

-

-static ProSLIC_DCfeed_Cfg testLoad_DC_Cfg[] =

-{

-  {

-  0x1DC6E1D3L,  /* SLOPE_VLIM */

-  0x1F909679L,   /* SLOPE_RFEED */

-  0x0040A0E0L,   /* SLOPE_ILIM */

-  0x1B8687BBL,  /* SLOPE_DELTA1 */

-  0x1CC4B75DL,  /* SLOPE_DELTA2 */

-  0x05A38633L,   /* V_VLIM (48.000 v) */

-  0x050D2839L,   /* V_RFEED (43.000 v) */

-  0x03FE7F0FL,   /* V_ILIM  (34.000 v) */

-  0x009DAFD9L, /* CONST_RFEED (10.000 mA) */

-  0x0045CBBCL,  /* CONST_ILIM (15.000 mA) */

-  0x002D8D96L,  /* I_VLIM (0.000 mA) */

-  0x005B0AFBL,  /* LCRONHK (10.000 mA) */

-  0x006D4060L,   /* LCROFFHK (12.000 mA) */

-  0x00008000L,   /* LCRDBI (5.000 ms) */

-  0x0048D595L,   /* LONGHITH (8.000 mA) */

-  0x003FBAE2L,  /* LONGLOTH (7.000 mA) */

-  0x00008000L,   /* LONGDBI (5.000 ms) */

-  0x000F0000L,   /* LCRMASK (150.000 ms) */

-  0x00080000L,   /* LCRMASK_POLREV (80.000 ms) */

-  0x00140000L,   /* LCRMASK_STATE (200.000 ms) */

-  0x00140000L,   /* LCRMASK_LINECAP (200.000 ms) */

-  0x01BA5E35L,  /* VCM_OH (27.000 v) */

-  0x0051EB85L,   /* VOV_BAT (5.000 v) */

-  0x00418937L,   /* VOV_GND (4.000 v) */

-  }

-};

-

-/* *********************************** */

-int ProSLIC_testLoadTest(

-  SiVoiceChanType_ptr pProslic, 

-  BOOLEAN is_testStart, 

-  uint32_t timeDelayMsec)

-{

-  static ProSLIC_DCfeed_Cfg dcfeedCfg;

-  static uInt8 digcon_reg_cache;

-

-  TRACEPRINT(pProslic, " channel: %u is_testStart: %u delay = %u",

-    pProslic->channel, 

-    is_testStart,

-    timeOffhookMsec);

-  /* Valid device check */

-

-  if(TSTIN_INVALID_PART_NUM)

-  {

-    return RC_UNSUPPORTED_FEATURE;

-  }

-

-  if( TRUE == is_testStart )

-  {

-    /* Verify line not in use */

-    if(ProSLIC_ReadReg(pProslic,PROSLIC_REG_LCRRTP) & 0x02)  /* LCR */

-    {

-      DEBUG_PRINT(pProslic, "\nLine in Use: %u.\n", pProslic->channel);

-      return RC_LINE_IN_USE;

-    }

-   

-    /* Setup lower ILIM linefeed */

-    ProSLIC_SetLinefeedStatus(pProslic,LF_OPEN);

-    storeDCFeedPreset(pProslic, &dcfeedCfg, 0);

-

-    ProSLIC_DCFeedSetupCfg( pProslic, testLoad_DC_Cfg, 0 ); 

-

-    ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-    Delay(pProTimer,100);

-  

-    /* Connect Test Load to cause LCR interrupt*/

-    setInternalTestLoad(pProslic,1);

-    Delay(pProTimer, timeDelayMsec);

-    DEBUG_PRINT(pProslic, "\n%s: test load on for channel %u\n", 

-      __FUNCTION__, pProslic->channel);

-  

-    /* Disable hybrid circuit for test load loopback */

-    digcon_reg_cache = ProSLIC_ReadReg(pProslic,PROSLIC_REG_DIGCON);

-

-    ProSLIC_WriteReg(pProslic, PROSLIC_REG_DIGCON,

-      digcon_reg_cache |0x10 );

-

-    /* At this point the test load should of caused a LCR interrupt and

-       there is an audio path available. NOTE: there may be some distortion

-       of the audio...

-    */

-    

-  }

-  else

-  {

-    /* Restore hybrid circuit */

-    ProSLIC_WriteReg(pProslic,

-      PROSLIC_REG_DIGCON, digcon_reg_cache );

- 

-    /* Disconnect Test Load */

-    setInternalTestLoad(pProslic,0);

-    Delay(pProTimer, timeDelayMsec);

-    DEBUG_PRINT(pProslic, "\n%s: test load off for channel %u.\n",

-      __FUNCTION__, pProslic->channel);

-  

-   /* Restore DC Feed */

-   ProSLIC_DCFeedSetupCfg(pProslic, &dcfeedCfg, 0);

-  }

-

-  return RC_NONE;

-}

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si3218x_LCCB_constants.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si3218x_LCCB_constants.c
deleted file mode 100644
index ad948e9..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si3218x_LCCB_constants.c
+++ /dev/null
@@ -1,686 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0

-/*

- * Si3218x ProSLIC API Configuration Tool Version 4.2.1

- * Last Updated in API Release: 9.2.0

- * source XML file: si3218x_LCCB_constants.xml

- *

- * Auto generated file from configuration tool.

- */

-

-

-#include "../inc/proslic.h"

-#include "../inc/si3218x.h"

-

-Si3218x_General_Cfg Si3218x_General_Configuration  = {

-0x72,                       /* DEVICE_KEY */

-BO_DCDC_LCCB,               /* BOM_OPT */

-VDC_4P5_16P0,               /* VDC_RANGE_OPT */

-AUTO_ZCAL_ENABLED,          /* ZCAL_ENABLE */

-BO_STD_BOM,                 /* PM_BOM */

-0x00000000L,                /* DCDC_OITHRESH_LO */

-0x01A00000L,                /* DCDC_OITHRESH_HI */

-0x00A00000L,                /* DCDC_OVTHRESH */

-5000L,                      /* DCDC_UVTHRESH */

-1000L,                      /* DCDC_UVHYST */

-0x00000000L,                /* DCDC_FSW_VTHLO */

-0x00000000L,                /* DCDC_FSW_VHYST */

-0x0048D15BL,                /* P_TH_HVIC */

-0x07FEB800L,                /* COEF_P_HVIC */

-0x00083120L,                /* BAT_HYST */

-0x03D70A20L,                /* VBATH_EXPECT (60.00V) */

-0x06666635L,                /* VBATR_EXPECT (100.00V) */

-0x0FFF0000L,                /* PWRSAVE_TIMER */

-0x01999A00L,                /* OFFHOOK_THRESH */

-0x00F00000L,                /* VBAT_TRACK_MIN */

-0x00F00000L,                /* VBAT_TRACK_MIN_RNG */

-0x0ADD5500L,                /* DCDC_ANA_SCALE */

-0x00800000L,                /* THERM_DBI */

-0x00FFFFFFL,                /* VOV_DCDC_SLOPE */

-0x00A18937L,                /* VOV_DCDC_OS */

-0x00A18937L,                /* VOV_RING_BAT_DCDC */

-0x00E49BA5L,                /* VOV_RING_BAT_MAX */

-0x01018900L,                /* DCDC_VERR */

-0x0080C480L,                /* DCDC_VERR_HYST */

-0x00400000L,                /* PD_UVLO */

-0x00400000L,                /* PD_OVLO */

-0x00200000L,                /* PD_OCLO */

-0x00400000L,                /* PD_SWDRV */

-0x00000000L,                /* DCDC_UVPOL */

-0x00200000L,                /* DCDC_RNGTYPE */

-0x00180000L,                /* DCDC_ANA_TOFF */

-0x00100000L,                /* DCDC_ANA_TONMIN */

-0x012FC000L,                /* DCDC_ANA_TONMAX */

-0x50,                       /* IRQEN1 */

-0x13,                       /* IRQEN2 */

-0x03,                       /* IRQEN3 */

-0x00,                       /* IRQEN4 */

-0x30,                       /* ENHANCE */

-0x3F,                       /* AUTO */

-};

-

-Si3218x_audioGain_Cfg Si3218x_audioGain_Presets [] = {

-{0x1377080L,0, 0x0L, 0x0L, 0x0L, 0x0L},

-{0x80C3180L,0, 0x0L, 0x0L, 0x0L, 0x0L}

-};

-

-Si3218x_Ring_Cfg Si3218x_Ring_Presets[] ={

-{

-/*

-	Loop = 500.0 ft @ 0.044 ohms/ft, REN = 3, Rcpe = 600 ohms

-	Rprot = 54 ohms, Type = LPR, Waveform = SINE

-*/ 

-0x00050000L,	/* RTPER */

-0x07EFE000L,	/* RINGFR (20.000 Hz) */

-0x00209380L,	/* RINGAMP (55.000 vrms)  */

-0x00000000L,	/* RINGPHAS */

-0x00000000L,	/* RINGOF (0.000 vdc) */

-0x15E5200EL,	/* SLOPE_RING (100.000 ohms) */

-0x006C94D6L,	/* IRING_LIM (70.000 mA) */

-0x00522220L,	/* RTACTH (45.357 mA) */

-0x0FFFFFFFL,	/* RTDCTH (450.000 mA) */

-0x00006000L,	/* RTACDB (75.000 ms) */

-0x00006000L,	/* RTDCDB (75.000 ms) */

-0x0051EB82L,	/* VOV_RING_BAT (5.000 v) */

-0x00000000L,	/* VOV_RING_GND (0.000 v) */

-0x05B835EFL,	/* VBATR_EXPECT (89.368 v) */

-0x80,			/* RINGTALO (2.000 s) */

-0x3E,			/* RINGTAHI */

-0x00,			/* RINGTILO (4.000 s) */

-0x7D,			/* RINGTIHI */

-0x00000000L,	/* ADAP_RING_MIN_I */

-0x00003000L,	/* COUNTER_IRING_VAL */

-0x00051EB8L,	/* COUNTER_VTR_VAL */

-0x00000000L,	/* CONST_028 */

-0x00000000L,	/* CONST_032 */

-0x00000000L,	/* CONST_038 */

-0x00000000L,	/* CONST_046 */

-0x00000000L,	/* RRD_DELAY */

-0x00000000L,	/* RRD_DELAY2 */

-0x01893740L,	/* VBAT_TRACK_MIN_RNG */

-0x98,			/* RINGCON */

-0x00,			/* USERSTAT */

-0x02DC1AF7L,	/* VCM_RING (43.434 v) */

-0x02DC1AF7L,	/* VCM_RING_FIXED */

-0x003126E8L,	/* DELTA_VCM */

-0x00200000L,	/* DCDC_RNGTYPE */

-},  /* DEFAULT_RINGING */

-{

-/*

-	Loop = 500.0 ft @ 0.044 ohms/ft, REN = 5, Rcpe = 600 ohms

-	Rprot = 54 ohms, Type = LPR, Waveform = SINE

-*/ 

-0x00050000L,	/* RTPER */

-0x07EFE000L,	/* RINGFR (20.000 Hz) */

-0x001C0AFCL,	/* RINGAMP (45.000 vrms)  */

-0x00000000L,	/* RINGPHAS */

-0x00000000L,	/* RINGOF (0.000 vdc) */

-0x15E5200EL,	/* SLOPE_RING (100.000 ohms) */

-0x006C94D6L,	/* IRING_LIM (70.000 mA) */

-0x0068A9B9L,	/* RTACTH (57.798 mA) */

-0x0FFFFFFFL,	/* RTDCTH (450.000 mA) */

-0x00006000L,	/* RTACDB (75.000 ms) */

-0x00006000L,	/* RTDCDB (75.000 ms) */

-0x0051EB82L,	/* VOV_RING_BAT (5.000 v) */

-0x00000000L,	/* VOV_RING_GND (0.000 v) */

-0x04F7DA57L,	/* VBATR_EXPECT (77.628 v) */

-0x80,			/* RINGTALO (2.000 s) */

-0x3E,			/* RINGTAHI */

-0x00,			/* RINGTILO (4.000 s) */

-0x7D,			/* RINGTIHI */

-0x00000000L,	/* ADAP_RING_MIN_I */

-0x00003000L,	/* COUNTER_IRING_VAL */

-0x00051EB8L,	/* COUNTER_VTR_VAL */

-0x00000000L,	/* CONST_028 */

-0x00000000L,	/* CONST_032 */

-0x00000000L,	/* CONST_038 */

-0x00000000L,	/* CONST_046 */

-0x00000000L,	/* RRD_DELAY */

-0x00000000L,	/* RRD_DELAY2 */

-0x01893740L,	/* VBAT_TRACK_MIN_RNG */

-0x98,			/* RINGCON */

-0x00,			/* USERSTAT */

-0x027BED2BL,	/* VCM_RING (37.564 v) */

-0x027BED2BL,	/* VCM_RING_FIXED */

-0x003126E8L,	/* DELTA_VCM */

-0x00200000L,	/* DCDC_RNGTYPE */

-}   /* RING_F20_45VRMS_0VDC_LPR */

-};

-

-Si3218x_DCfeed_Cfg Si3218x_DCfeed_Presets[] = {

-{

-0x1C8A024CL,	/* SLOPE_VLIM */

-0x1F909679L,	/* SLOPE_RFEED */

-0x0040A0E0L,	/* SLOPE_ILIM */

-0x1D5B21A9L,	/* SLOPE_DELTA1 */

-0x1DD87A3EL,	/* SLOPE_DELTA2 */

-0x05A38633L,	/* V_VLIM (48.000 v) */

-0x050D2839L,	/* V_RFEED (43.000 v) */

-0x03FE7F0FL,	/* V_ILIM  (34.000 v) */

-0x00B4F3C3L,	/* CONST_RFEED (15.000 mA) */

-0x005D0FA6L,	/* CONST_ILIM (20.000 mA) */

-0x002D8D96L,	/* I_VLIM (0.000 mA) */

-0x005B0AFBL,	/* LCRONHK (10.000 mA) */

-0x006D4060L,	/* LCROFFHK (12.000 mA) */

-0x00008000L,	/* LCRDBI (5.000 ms) */

-0x0048D595L,	/* LONGHITH (8.000 mA) */

-0x003FBAE2L,	/* LONGLOTH (7.000 mA) */

-0x00008000L,	/* LONGDBI (5.000 ms) */

-0x000F0000L,	/* LCRMASK (150.000 ms) */

-0x00080000L,	/* LCRMASK_POLREV (80.000 ms) */

-0x00140000L,	/* LCRMASK_STATE (200.000 ms) */

-0x00140000L,	/* LCRMASK_LINECAP (200.000 ms) */

-0x01BA5E35L,	/* VCM_OH (27.000 v) */

-0x0051EB85L,	/* VOV_BAT (5.000 v) */

-0x00418937L,	/* VOV_GND (4.000 v) */

-},  /* DCFEED_48V_20MA */

-{

-0x1C8A024CL,	/* SLOPE_VLIM */

-0x1EE08C11L,	/* SLOPE_RFEED */

-0x0040A0E0L,	/* SLOPE_ILIM */

-0x1C940D71L,	/* SLOPE_DELTA1 */

-0x1DD87A3EL,	/* SLOPE_DELTA2 */

-0x05A38633L,	/* V_VLIM (48.000 v) */

-0x050D2839L,	/* V_RFEED (43.000 v) */

-0x03FE7F0FL,	/* V_ILIM  (34.000 v) */

-0x01241BC9L,	/* CONST_RFEED (15.000 mA) */

-0x0074538FL,	/* CONST_ILIM (25.000 mA) */

-0x002D8D96L,	/* I_VLIM (0.000 mA) */

-0x005B0AFBL,	/* LCRONHK (10.000 mA) */

-0x006D4060L,	/* LCROFFHK (12.000 mA) */

-0x00008000L,	/* LCRDBI (5.000 ms) */

-0x0048D595L,	/* LONGHITH (8.000 mA) */

-0x003FBAE2L,	/* LONGLOTH (7.000 mA) */

-0x00008000L,	/* LONGDBI (5.000 ms) */

-0x000F0000L,	/* LCRMASK (150.000 ms) */

-0x00080000L,	/* LCRMASK_POLREV (80.000 ms) */

-0x00140000L,	/* LCRMASK_STATE (200.000 ms) */

-0x00140000L,	/* LCRMASK_LINECAP (200.000 ms) */

-0x01BA5E35L,	/* VCM_OH (27.000 v) */

-0x0051EB85L,	/* VOV_BAT (5.000 v) */

-0x00418937L,	/* VOV_GND (4.000 v) */

-},  /* DCFEED_48V_25MA */

-{

-0x1E655196L,	/* SLOPE_VLIM */

-0x001904EFL,	/* SLOPE_RFEED */

-0x0040A0E0L,	/* SLOPE_ILIM */

-0x1B4CAD9EL,	/* SLOPE_DELTA1 */

-0x1BB0F47CL,	/* SLOPE_DELTA2 */

-0x05A38633L,	/* V_VLIM (48.000 v) */

-0x043AA4A6L,	/* V_RFEED (36.000 v) */

-0x025977EAL,	/* V_ILIM  (20.000 v) */

-0x0068B19AL,	/* CONST_RFEED (18.000 mA) */

-0x005D0FA6L,	/* CONST_ILIM (20.000 mA) */

-0x002D8D96L,	/* I_VLIM (0.000 mA) */

-0x005B0AFBL,	/* LCRONHK (10.000 mA) */

-0x006D4060L,	/* LCROFFHK (12.000 mA) */

-0x00008000L,	/* LCRDBI (5.000 ms) */

-0x0048D595L,	/* LONGHITH (8.000 mA) */

-0x003FBAE2L,	/* LONGLOTH (7.000 mA) */

-0x00008000L,	/* LONGDBI (5.000 ms) */

-0x000F0000L,	/* LCRMASK (150.000 ms) */

-0x00080000L,	/* LCRMASK_POLREV (80.000 ms) */

-0x00140000L,	/* LCRMASK_STATE (200.000 ms) */

-0x00140000L,	/* LCRMASK_LINECAP (200.000 ms) */

-0x01BA5E35L,	/* VCM_OH (27.000 v) */

-0x0051EB85L,	/* VOV_BAT (5.000 v) */

-0x00418937L,	/* VOV_GND (4.000 v) */

-},  /* DCFEED_PSTN_DET_1 */

-{

-0x1A10433FL,	/* SLOPE_VLIM */

-0x1C206275L,	/* SLOPE_RFEED */

-0x0040A0E0L,	/* SLOPE_ILIM */

-0x1C1F426FL,	/* SLOPE_DELTA1 */

-0x1EB51625L,	/* SLOPE_DELTA2 */

-0x041C91DBL,	/* V_VLIM (35.000 v) */

-0x03E06C43L,	/* V_RFEED (33.000 v) */

-0x038633E0L,	/* V_ILIM  (30.000 v) */

-0x022E5DE5L,	/* CONST_RFEED (10.000 mA) */

-0x005D0FA6L,	/* CONST_ILIM (20.000 mA) */

-0x0021373DL,	/* I_VLIM (0.000 mA) */

-0x005B0AFBL,	/* LCRONHK (10.000 mA) */

-0x006D4060L,	/* LCROFFHK (12.000 mA) */

-0x00008000L,	/* LCRDBI (5.000 ms) */

-0x0048D595L,	/* LONGHITH (8.000 mA) */

-0x003FBAE2L,	/* LONGLOTH (7.000 mA) */

-0x00008000L,	/* LONGDBI (5.000 ms) */

-0x000F0000L,	/* LCRMASK (150.000 ms) */

-0x00080000L,	/* LCRMASK_POLREV (80.000 ms) */

-0x00140000L,	/* LCRMASK_STATE (200.000 ms) */

-0x00140000L,	/* LCRMASK_LINECAP (200.000 ms) */

-0x01BA5E35L,	/* VCM_OH (27.000 v) */

-0x0051EB85L,	/* VOV_BAT (5.000 v) */

-0x00418937L,	/* VOV_GND (4.000 v) */

-}   /* DCFEED_PSTN_DET_2 */

-};

-

-Si3218x_Impedance_Cfg Si3218x_Impedance_Presets[] ={

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=600_0_0 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x07F3A400L, 0x000FF180L, 0x00009380L, 0x1FFDA800L,    /* TXACEQ */

- 0x07EF1600L, 0x0014B500L, 0x1FFD6580L, 0x1FFCA400L},   /* RXACEQ */

-{0x0008EF00L, 0x00099780L, 0x017DF600L, 0x0096B900L,    /* ECFIR/ECIIR */

- 0x02549000L, 0x1E4B7D00L, 0x018EEE00L, 0x1EEE0600L,

- 0x008A8080L, 0x1F713080L, 0x0489BA00L, 0x03592500L},

-{0x0086CE00L, 0x1EF46980L, 0x0084CB00L, 0x0FE34F00L,    /* ZSYNTH */

- 0x181CA780L, 0x5D}, 

- 0x08EB8E00L,   /* TXACGAIN */

- 0x01532100L,   /* RXACGAIN */

- 0x07AA7180L, 0x18558F00L, 0x0754E300L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_600_0_0_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=270_750_150 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x0750E500L, 0x1FC70280L, 0x000BA980L, 0x1FFD2880L,    /* TXACEQ */

- 0x0A8E2380L, 0x1B905280L, 0x00847700L, 0x1FDAFA00L},   /* RXACEQ */

-{0x002C8880L, 0x1F630D80L, 0x027F7980L, 0x1F3AD200L,    /* ECFIR/ECIIR */

- 0x040B8680L, 0x1F414D00L, 0x01427B00L, 0x00208200L,

- 0x0026AE00L, 0x1FD71680L, 0x0C8EDB00L, 0x1B688A00L},

-{0x1F657980L, 0x0096FE00L, 0x00035500L, 0x0D7FE800L,    /* ZSYNTH */

- 0x1A7F1A80L, 0xB4}, 

- 0x08000000L,   /* TXACGAIN */

- 0x01106B80L,   /* RXACGAIN */

- 0x07BC8400L, 0x18437C80L, 0x07790880L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_270_750_150_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=370_620_310 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x08363C80L, 0x1FB03200L, 0x1FFBD200L, 0x1FFC7A00L,    /* TXACEQ */

- 0x0A0D0800L, 0x1BEB0880L, 0x1F9DF080L, 0x1FE07F00L},   /* RXACEQ */

-{0x00236380L, 0x1F947D00L, 0x020DE380L, 0x1FBEED00L,    /* ECFIR/ECIIR */

- 0x03050300L, 0x1F7D1D00L, 0x010A9F80L, 0x00329D80L,

- 0x003E4100L, 0x1FC0DF00L, 0x0DAADE80L, 0x1A4F2600L},

-{0x00226100L, 0x1F8EEE80L, 0x004E9D00L, 0x0F0B9B00L,    /* ZSYNTH */

- 0x18F3E580L, 0x99}, 

- 0x0808D100L,   /* TXACGAIN */

- 0x0131BE80L,   /* RXACGAIN */

- 0x07B5C100L, 0x184A3F80L, 0x076B8200L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_370_620_310_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=220_820_120 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x07194B80L, 0x1FC63800L, 0x0008D280L, 0x1FFC0600L,    /* TXACEQ */

- 0x0A849680L, 0x1BB04480L, 0x00A4AA00L, 0x1FD3E680L},   /* RXACEQ */

-{0x001B8C00L, 0x1FC65400L, 0x016A5F00L, 0x01323C80L,    /* ECFIR/ECIIR */

- 0x01DB4980L, 0x01484700L, 0x00258000L, 0x007E9C80L,

- 0x0016FF00L, 0x1FE69100L, 0x0CE9A400L, 0x1B0EA980L},

-{0x00B3D800L, 0x1D2F8280L, 0x021C8B00L, 0x0A157F00L,    /* ZSYNTH */

- 0x1DE99E80L, 0xAD}, 

- 0x08000000L,   /* TXACGAIN */

- 0x01084680L,   /* RXACGAIN */

- 0x07BBFA80L, 0x18440600L, 0x0777F580L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_220_820_120_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=600_0_0 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x07F3A400L, 0x000FF180L, 0x00009380L, 0x1FFDA800L,    /* TXACEQ */

- 0x07EF1600L, 0x0014B500L, 0x1FFD6580L, 0x1FFCA400L},   /* RXACEQ */

-{0x0008EF00L, 0x00099780L, 0x017DF600L, 0x0096B900L,    /* ECFIR/ECIIR */

- 0x02549000L, 0x1E4B7D00L, 0x018EEE00L, 0x1EEE0600L,

- 0x008A8080L, 0x1F713080L, 0x0489BA00L, 0x03592500L},

-{0x0086CE00L, 0x1EF46980L, 0x0084CB00L, 0x0FE34F00L,    /* ZSYNTH */

- 0x181CA780L, 0x5D}, 

- 0x08EB8E00L,   /* TXACGAIN */

- 0x01532100L,   /* RXACGAIN */

- 0x07AA7180L, 0x18558F00L, 0x0754E300L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_600_0_1000_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=200_680_100 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x0778B980L, 0x1FB97E00L, 0x00030780L, 0x1FFC2580L,    /* TXACEQ */

- 0x09CC0780L, 0x1D104400L, 0x0076CB80L, 0x1FDE3D80L},   /* RXACEQ */

-{0x1FF64C00L, 0x00456280L, 0x00BEC500L, 0x014D3E80L,    /* ECFIR/ECIIR */

- 0x02EB2B00L, 0x1E983B80L, 0x029EE280L, 0x1E7B7400L,

- 0x00D19A80L, 0x1F293D80L, 0x06116D00L, 0x01D55C00L},

-{0x01241700L, 0x1CB53A80L, 0x02269400L, 0x0A14BA00L,    /* ZSYNTH */

- 0x1DE9D080L, 0x99}, 

- 0x08000000L,   /* TXACGAIN */

- 0x01152480L,   /* RXACGAIN */

- 0x07B96C00L, 0x18469480L, 0x0772D800L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_200_680_100_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=220_820_115 rprot=30 rfuse=24 emi_cap=10*/

-{

-{0x070AC700L, 0x1FCC7280L, 0x00098700L, 0x1FFCE080L,    /* TXACEQ */

- 0x0A6A6400L, 0x1BE48B80L, 0x009F3B80L, 0x1FD56000L},   /* RXACEQ */

-{0x00314700L, 0x1F6C1D80L, 0x02347480L, 0x00158B80L,    /* ECFIR/ECIIR */

- 0x03173D00L, 0x0058E580L, 0x00A6DA80L, 0x004B0780L,

- 0x001B1300L, 0x1FE2DE80L, 0x0C313180L, 0x1BB7FE00L},

-{0x1FD95980L, 0x1ECDE680L, 0x0156F600L, 0x0A0C9600L,    /* ZSYNTH */

- 0x1DEBF080L, 0xB4}, 

- 0x08000000L,   /* TXACGAIN */

- 0x01069C80L,   /* RXACGAIN */

- 0x07BECB80L, 0x18413500L, 0x077D9700L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- },  /* ZSYN_220_820_115_30_0 */

-/* Source: Database file: cwdb.db */

-/* Database information: */

-/* parameters: zref=600_0_0 rprot=30 rfuse=24 emi_cap=0*/

-{

-{0x081A5300L, 0x1FE00A00L, 0x00071580L, 0x1FFE2600L,    /* TXACEQ */

- 0x07F9A800L, 0x1FFA7D80L, 0x1FF59E80L, 0x1FFF1400L},   /* RXACEQ */

-{0x0052DC80L, 0x1F455780L, 0x0297A080L, 0x0006D980L,    /* ECFIR/ECIIR */

- 0x0195DC00L, 0x000E1E80L, 0x1FC53680L, 0x00050800L,

- 0x00233400L, 0x1FE6DC00L, 0x1FCD1E00L, 0x1FD2FE00L},

-{0x007B9C00L, 0x1F296C80L, 0x005BCD00L, 0x09F07F00L,    /* ZSYNTH */

- 0x1DF35080L, 0x6F}, 

- 0x08C2DA80L,   /* TXACGAIN */

- 0x01495A80L,   /* RXACGAIN */

- 0x07BECC80L, 0x18413400L, 0x077D9900L,    /* RXACHPF */

-#ifdef ENABLE_HIRES_GAIN

- 0, 0  /* TXGAIN*10, RXGAIN*10 (hi_res) */

-#else

- 0, 0  /* TXGAIN, RXGAIN */

-#endif

- }   /* WB_ZSYN_600_0_0_20_0 */

-};

-

-Si3218x_FSK_Cfg Si3218x_FSK_Presets[] ={

-{

-{

-0x02232000L,	 /* FSK01 */

-0x077C2000L 	 /* FSK10 */

-},

-{

-0x0015C000L,	 /* FSKAMP0 (0.080 vrms )*/

-0x000BA000L 	 /* FSKAMP1 (0.080 vrms) */

-},

-{

-0x06B60000L,	 /* FSKFREQ0 (2200.0 Hz space) */

-0x079C0000L 	 /* FSKFREQ1 (1200.0 Hz mark) */

-},

-0x00,			 /* FSK8 */

-0x00,			 /* FSKDEPTH (1 deep fifo) */

-},  /* DEFAULT_FSK */

-{

-{

-0x026E4000L,	 /* FSK01 */

-0x0694C000L 	 /* FSK10 */

-},

-{

-0x0014C000L,	 /* FSKAMP0 (0.080 vrms )*/

-0x000CA000L 	 /* FSKAMP1 (0.080 vrms) */

-},

-{

-0x06D20000L,	 /* FSKFREQ0 (2100.0 Hz space) */

-0x078B0000L 	 /* FSKFREQ1 (1300.0 Hz mark) */

-},

-0x00,			 /* FSK8 */

-0x00,			 /* FSKDEPTH (1 deep fifo) */

-}   /* ETSI_FSK */

-};

-

-Si3218x_PulseMeter_Cfg Si3218x_PulseMeter_Presets[] ={

-{

-0x007A2B6AL,  /* PM_AMP_THRESH (1.000) */

-0,            /* Freq (12kHz) */ 

-0,            /* PM_AUTO (off)*/

-0x07D00000L,  /* PM_active (2000 ms) */

-0x07D00000L   /* PM_inactive (2000 ms) */

- }   /* DEFAULT_PULSE_METERING */

-};

-

-Si3218x_Tone_Cfg Si3218x_Tone_Presets[] = {

-{

-	{

-	0x07B30000L,	 /* OSC1FREQ (350.000 Hz) */

-	0x000C6000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x00,			 /* O1TALO (0 ms) */

-	0x00,			 /* O1TAHI */

-	0x00,			 /* O1TILO (0 ms) */

-	0x00			 /* O1TIHI */

-	},

-	{

-	0x07870000L,	 /* OSC2FREQ (440.000 Hz) */

-	0x000FA000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x00,			 /* O2TALO (0 ms) */

-	0x00,			 /* O2TAHI */

-	0x00,			 /* O2TILO (0 ms) */

-	0x00 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_FCC_DIAL */

-{

-	{

-	0x07700000L,	 /* OSC1FREQ (480.000 Hz) */

-	0x00112000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0xA0,			 /* O1TALO (500 ms) */

-	0x0F,			 /* O1TAHI */

-	0xA0,			 /* O1TILO (500 ms) */

-	0x0F			 /* O1TIHI */

-	},

-	{

-	0x07120000L,	 /* OSC2FREQ (620.000 Hz) */

-	0x00164000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0xA0,			 /* O2TALO (500 ms) */

-	0x0F,			 /* O2TAHI */

-	0xA0,			 /* O2TILO (500 ms) */

-	0x0F 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_FCC_BUSY */

-{

-	{

-	0x07700000L,	 /* OSC1FREQ (480.000 Hz) */

-	0x00112000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x80,			 /* O1TALO (2000 ms) */

-	0x3E,			 /* O1TAHI */

-	0x00,			 /* O1TILO (4000 ms) */

-	0x7D			 /* O1TIHI */

-	},

-	{

-	0x07870000L,	 /* OSC2FREQ (440.000 Hz) */

-	0x000FA000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x80,			 /* O2TALO (2000 ms) */

-	0x3E,			 /* O2TAHI */

-	0x00,			 /* O2TILO (4000 ms) */

-	0x7D 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_FCC_RINGBACK */

-{

-	{

-	0x07700000L,	 /* OSC1FREQ (480.000 Hz) */

-	0x00112000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x60,			 /* O1TALO (300 ms) */

-	0x09,			 /* O1TAHI */

-	0x60,			 /* O1TILO (300 ms) */

-	0x09			 /* O1TIHI */

-	},

-	{

-	0x07120000L,	 /* OSC2FREQ (620.000 Hz) */

-	0x00164000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x60,			 /* O2TALO (300 ms) */

-	0x09,			 /* O2TAHI */

-	0x40,			 /* O2TILO (200 ms) */

-	0x06 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_FCC_REORDER */

-{

-	{

-	0x07700000L,	 /* OSC1FREQ (480.000 Hz) */

-	0x00112000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x40,			 /* O1TALO (200 ms) */

-	0x06,			 /* O1TAHI */

-	0x40,			 /* O1TILO (200 ms) */

-	0x06			 /* O1TIHI */

-	},

-	{

-	0x07120000L,	 /* OSC2FREQ (620.000 Hz) */

-	0x00164000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x40,			 /* O2TALO (200 ms) */

-	0x06,			 /* O2TAHI */

-	0x40,			 /* O2TILO (200 ms) */

-	0x06 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_FCC_CONGESTION */

-{

-	{

-	0x1F2F0000L,	 /* OSC1FREQ (2130.000 Hz) */

-	0x0063A000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x80,			 /* O1TALO (80 ms) */

-	0x02,			 /* O1TAHI */

-	0x80,			 /* O1TILO (80 ms) */

-	0x02			 /* O1TIHI */

-	},

-	{

-	0x1B8E0000L,	 /* OSC2FREQ (2750.000 Hz) */

-	0x00A84000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x80,			 /* O2TALO (80 ms) */

-	0x02,			 /* O2TAHI */

-	0x40,			 /* O2TILO (1000 ms) */

-	0x1F 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_FCC_CAS */

-{

-	{

-	0x07870000L,	 /* OSC1FREQ (440.000 Hz) */

-	0x000FA000L,	 /* OSC1AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x60,			 /* O1TALO (300 ms) */

-	0x09,			 /* O1TAHI */

-	0x00,			 /* O1TILO (8000 ms) */

-	0xFA			 /* O1TIHI */

-	},

-	{

-	0x1B8E0000L,	 /* OSC2FREQ (2750.000 Hz) */

-	0x00A84000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x80,			 /* O2TALO (2000 ms) */

-	0x3E,			 /* O2TAHI */

-	0x00,			 /* O2TILO (4000 ms) */

-	0x7D 			 /* O2TIHI */

-	},

-	0x06 			 /* OMODE */

-},  /* TONEGEN_FCC_SAS */

-{

-	{

-	0x1F2F0000L,	 /* OSC1FREQ (2130.000 Hz) */

-	0x01BD0000L,	 /* OSC1AMP (-5.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x20,			 /* O1TALO (100 ms) */

-	0x03,			 /* O1TAHI */

-	0x20,			 /* O1TILO (100 ms) */

-	0x03			 /* O1TIHI */

-	},

-	{

-	0x1B8E0000L,	 /* OSC2FREQ (2750.000 Hz) */

-	0x02EFC000L,	 /* OSC2AMP (-5.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x20,			 /* O2TALO (100 ms) */

-	0x03,			 /* O2TAHI */

-	0x20,			 /* O2TILO (100 ms) */

-	0x03 			 /* O2TIHI */

-	},

-	0x66 			 /* OMODE */

-},  /* TONEGEN_ETSI_DTAS */

-{

-	{

-	0x05A40000L,	 /* OSC1FREQ (1004.000 Hz) */

-	0x005DE000L,	 /* OSC1AMP (-10.000 dBm) */

-	0x00000000L,	 /* OSC1PHAS (0.000 rad) */

-	0x00,			 /* O1TALO (8000 ms) */

-	0xFA,			 /* O1TAHI */

-	0x00,			 /* O1TILO (8000 ms) */

-	0xFA			 /* O1TIHI */

-	},

-	{

-	0x07870000L,	 /* OSC2FREQ (440.000 Hz) */

-	0x000FA000L,	 /* OSC2AMP (-18.000 dBm) */

-	0x00000000L,	 /* OSC2PHAS (0.000 rad) */

-	0x80,			 /* O2TALO (2000 ms) */

-	0x3E,			 /* O2TAHI */

-	0x00,			 /* O2TILO (4000 ms) */

-	0x7D 			 /* O2TIHI */

-	},

-	0x47 			 /* OMODE */

-}   /* TONEGEN_1004 */

-};

-

-Si3218x_PCM_Cfg Si3218x_PCM_Presets[] ={

-	{

-	0x01, 	 /* PCM_FMT - u-Law */

-	0x00, 	 /* WIDEBAND - DISABLED (3.4kHz BW) */

-	0x00, 	 /* PCM_TRI - PCLK RISING EDGE */

-	0x00, 	 /* TX_EDGE - PCLK RISING EDGE */

-	0x00 	 /* A-LAW -  INVERT NONE */

-	},  /* PCM_8ULAW */

-	{

-	0x00, 	 /* PCM_FMT - A-Law */

-	0x00, 	 /* WIDEBAND - DISABLED (3.4kHz BW) */

-	0x00, 	 /* PCM_TRI - PCLK RISING EDGE */

-	0x00, 	 /* TX_EDGE - PCLK RISING EDGE */

-	0x00 	 /* A-LAW -  INVERT NONE */

-	},  /* PCM_8ALAW */

-	{

-	0x03, 	 /* PCM_FMT - 16-bit Linear */

-	0x00, 	 /* WIDEBAND - DISABLED (3.4kHz BW) */

-	0x00, 	 /* PCM_TRI - PCLK RISING EDGE */

-	0x00, 	 /* TX_EDGE - PCLK RISING EDGE */

-	0x00 	 /* A-LAW -  INVERT NONE */

-	},  /* PCM_16LIN */

-	{

-	0x03, 	 /* PCM_FMT - 16-bit Linear */

-	0x01, 	 /* WIDEBAND - ENABLED (7kHz BW) */

-	0x00, 	 /* PCM_TRI - PCLK RISING EDGE */

-	0x00, 	 /* TX_EDGE - PCLK RISING EDGE */

-	0x00 	 /* A-LAW -  INVERT NONE */

-	}   /* PCM_16LIN_WB */

-};

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si3218x_intf.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si3218x_intf.c
deleted file mode 100644
index 7b778f5..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si3218x_intf.c
+++ /dev/null
@@ -1,3135 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0

-/*

- * SI3218X ProSLIC interface implementation file

- *

- * Author(s):

- * cdp

- *

- * Distributed by:

- * Silicon Laboratories, Inc

- *

- * This file contains proprietary information.

- * No dissemination allowed without prior written permission from

- * Silicon Laboratories, Inc.

- *

- */

-

-#include "../config_inc/si_voice_datatypes.h"

-#include "../inc/si_voice_ctrl.h"

-#include "../inc/si_voice_timer_intf.h"

-#include "../inc/proslic.h"

-#include "../inc/si3218x.h"

-#include "../inc/si3218x_intf.h"

-#include "../inc/si3218x_registers.h"

-#include "../config_inc/proslic_api_config.h"

-

-#define SI3218X_IRING_LIM_MAX 0xA00000L   /* 103mA */

-#define SI3218X_REVA   2

-

-#define WriteReg        pProslic->deviceId->ctrlInterface->WriteRegister_fptr

-#define ReadReg         pProslic->deviceId->ctrlInterface->ReadRegister_fptr

-#define pProHW          pProslic->deviceId->ctrlInterface->hCtrl

-#define Reset           pProslic->deviceId->ctrlInterface->Reset_fptr

-#define Delay           pProslic->deviceId->ctrlInterface->Delay_fptr

-#define pProTimer       pProslic->deviceId->ctrlInterface->hTimer

-#define WriteRAM        pProslic->deviceId->ctrlInterface->WriteRAM_fptr

-#define ReadRAM         pProslic->deviceId->ctrlInterface->ReadRAM_fptr

-#define TimeElapsed     pProslic->deviceId->ctrlInterface->timeElapsed_fptr

-#define getTime         pProslic->deviceId->ctrlInterface->getTime_fptr

-

-#define WriteRegX       deviceId->ctrlInterface->WriteRegister_fptr

-#define ReadRegX        deviceId->ctrlInterface->ReadRegister_fptr

-#define pProHWX         deviceId->ctrlInterface->hCtrl

-#define DelayX          deviceId->ctrlInterface->Delay_fptr

-#define pProTimerX      deviceId->ctrlInterface->hTimer

-#define ReadRAMX        deviceId->ctrlInterface->ReadRAM_fptr

-#define WriteRAMX       deviceId->ctrlInterface->WriteRAM_fptr

-

-#define DEVICE_KEY_MIN  0x6E

-#define DEVICE_KEY_MAX  0x77

-

-#ifdef ENABLE_DEBUG

-static const char LOGPRINT_PREFIX[] = "Si3218x: ";

-#endif

-

-/*

-** Externs

-*/

-

-/* General Configuration */

-extern Si3218x_General_Cfg Si3218x_General_Configuration;

-#ifdef SIVOICE_MULTI_BOM_SUPPORT

-extern const proslicPatch SI3218X_PATCH_A;

-extern Si3218x_General_Cfg Si3218x_General_Configuration_MultiBOM[];

-extern int si3218x_genconf_multi_max_preset;

-#else

-extern const proslicPatch SI3218X_PATCH_A_DEFAULT;

-#endif

-

-/* Ringing */

-#ifndef DISABLE_RING_SETUP

-extern Si3218x_Ring_Cfg Si3218x_Ring_Presets[];

-#endif

-

-/* Zsynth */

-#ifndef DISABLE_ZSYNTH_SETUP

-extern Si3218x_Impedance_Cfg Si3218x_Impedance_Presets [];

-#endif

-

-/* Audio Gain Scratch */

-extern Si3218x_audioGain_Cfg Si3218x_audioGain_Presets[];

-

-/* Pulse Metering */

-#ifndef DISABLE_PULSE_SETUP

-extern Si3218x_PulseMeter_Cfg Si3218x_PulseMeter_Presets [];

-#endif

-

-/* PCM */

-#ifndef DISABLE_PCM_SETUP

-extern Si3218x_PCM_Cfg Si3218x_PCM_Presets [];

-#endif

-

-#define SI3218X_RAM_DCDC_DCFF_ENABLE SI3218X_RAM_GENERIC_8

-#define GCONF Si3218x_General_Configuration

-

-/*

-** Constants

-*/

-#define BIT20LSB                       1048576L

-#define OITHRESH_OFFS                  900L

-#define OITHRESH_SCALE                 100L

-#define OVTHRESH_OFFS                  71000

-#define OVTHRESH_SCALE                 3000L

-#define UVTHRESH_OFFS                  4057L

-#define UVTHRESH_SCALE                 187L

-#define UVHYST_OFFS                    548L

-#define UVHYST_SCALE                   47L

-

-/*

-** Local functions are defined first

-*/

-

-/*

-** Function: getChipType

-**

-** Description:

-** Decode ID register to identify chip type

-**

-** Input Parameters:

-** ID register value

-**

-** Return:

-** partNumberType

-*/

-static partNumberType getChipType(uInt8 data)

-{

-  /* For the parts that have a HV variant, we map to the lower voltage version,

-     the actual differences are handled in the constants file

-   */

-

-  const uInt8 partNums[8] =

-  {

-    UNSUPPORTED_PART_NUM, UNSUPPORTED_PART_NUM, UNSUPPORTED_PART_NUM, UNSUPPORTED_PART_NUM,

-    SI32184, SI32182, SI32185, SI32183

-  };

-

-  uInt8 partNum = (data & 0x38) >> 3; /* PART_NUM[2:0] = ID[5:3] */

-

-  return partNums[ partNum ];

-}

-

-int Si3218x_GetChipInfo(proslicChanType_ptr pProslic)

-{

-  uInt8 id;

-  id = ReadReg(pProHW, pProslic->channel, PROSLIC_REG_ID);

-

-  pProslic->deviceId->chipRev = id & 0x7;

-  pProslic->deviceId->chipType = getChipType(id);

-

-  if(pProslic->deviceId->chipType  == UNSUPPORTED_PART_NUM)

-  {

-#ifdef ENABLE_DEBUG

-    LOGPRINT("%sregister 0 read = 0x%02X\n", LOGPRINT_PREFIX, id);

-#endif

-    return RC_SPI_FAIL;

-  }

-  else

-  {

-    return RC_NONE;

-  }

-}

-

-/*

-** Function: Si3218x_ConverterSetup

-**

-** Description:

-** Program revision specific settings before powering converter

-**

-** Specifically, from general parameters and knowledge that this

-** is Si32188x, setup dcff drive, gate drive polarity, and charge pump.

-**

-** Returns:

-** int (error)

-**

-*/

-int Si3218x_ConverterSetup(proslicChanType_ptr pProslic)

-{

-  ramData inv_off;

-

-  /* Option to add a per-channel inversion for maximum flexibility */

-  if(pProslic->dcdc_polarity_invert)

-  {

-    inv_off = 0x100000L;

-  }

-  else

-  {

-    inv_off = 0x0L;

-  }

-

-  switch(Si3218x_General_Configuration.bom_option)

-  {

-    case BO_DCDC_LCQC_5W:

-    case BO_DCDC_LCCB:

-    case BO_DCDC_LCCB110:

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_LIFT_EN,

-               0x0L);      /* dcff disabled */

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_SWDRV_POL,

-               inv_off);    /* non-inverted */

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_CPUMP,

-               0x100000L);   /* Charge pump on */

-      Delay(pProTimer,20); /* Cpump settle */

-      break;

-

-    case BO_DCDC_BUCK_BOOST:

-      /*

-      ** RevC buck-boost designs are identical to RevB - no gate drive,

-      ** dcff enabled, non-inverting (charge pump off)

-      */

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_CPUMP,0x0L);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_SWDRV_POL,inv_off);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_LIFT_EN,

-               0x100000L); /* dcff enabled */

-      break;

-

-    default:

-      return RC_DCDC_SETUP_ERR;

-  }

-

-  return RC_NONE;

-}

-

-/*

-** Function: Si3218x_PowerUpConverter

-**

-** Description:

-** Powers all DC/DC converters sequentially with delay to minimize

-** peak power draw on VDC.

-**

-** Returns:

-** int (error)

-**

-*/

-

-int Si3218x_PowerUpConverter(proslicChanType_ptr pProslic)

-{

-  errorCodeType error = RC_DCDC_SETUP_ERR;

-  int32 vbath,vbat;

-  uInt8 reg = 0;

-  int timer = 0;

-

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  /*

-  ** - powerup digital dc/dc w/ OV clamping and shutdown

-  ** - delay

-  ** - verify no short circuits by looking for vbath/2

-  ** - clear dcdc status

-  ** - switch to analog converter with OV clamping only (no shutdown)

-  ** - select analog dcdc and disable pwrsave

-  ** - delay

-  */

-

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED,

-           LF_FWD_OHT);  /* Force out of pwrsave mode if called in error */

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED,

-           LF_OPEN);     /* Ensure open line before powering up converter */

-  reg = ReadReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE,

-           reg&0x07);  /* Disable powersave mode */

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_DCDC,

-           0x700000L); /* In case OV or UV previously occurred */

-

-  /*

-  ** Setup converter drive polarity and charge pump enable

-  ** based on bom

-  */

-

-  error = Si3218x_ConverterSetup(pProslic);

-

-  if(error != RC_NONE)

-  {

-    DEBUG_PRINT (pProslic, "%sChannel %d : DCDC initialization failed\n",

-                 LOGPRINT_PREFIX, pProslic->channel);

-    return error;

-  }

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_DCDC,0x600000L);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_BIAS,0x200000L);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_HVIC,0x200000L);

-  Delay(pProTimer,50);

-

-  vbath = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_VBATH_EXPECT);

-  vbat = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_VBAT);

-  if(vbat & 0x10000000L)

-  {

-    vbat |= 0xF0000000L;

-  }

-  if(vbat < (vbath / 2))

-  {

-    pProslic->channelEnable = 0;

-    error = RC_VBAT_UP_TIMEOUT;

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_DCDC,

-             0x300000L); /* shutdown converter */

-    DEBUG_PRINT (pProslic,

-                 "%sChannel %d : DCDC Short Circuit Failure - disabling channel\n%sVBAT = %d.%d\n",

-                 LOGPRINT_PREFIX, pProslic->channel, LOGPRINT_PREFIX,

-                 (int)((vbat/SCALE_V_MADC)/1000),

-                 SIVOICE_ABS(((vbat/SCALE_V_MADC) - (vbat/SCALE_V_MADC)/1000*1000)));

-    return error;

-  }

-  else   /* Enable analog converter */

-  {

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_DCDC_STATUS,0L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_DCDC,0x400000L);

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE,

-             reg);   /* Restore ENHANCE */

-    Delay(pProTimer,50);

-  }

-

-  /*

-  ** - monitor vbat vs expected level (VBATH_EXPECT)

-  */

-  vbath = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_VBATH_EXPECT);

-  do

-  {

-    vbat = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_VBAT);

-    if(vbat & 0x10000000L)

-    {

-      vbat |= 0xF0000000L;

-    }

-    Delay(pProTimer,10);

-  }

-  while((vbat < (vbath - COMP_5V))

-        &&(timer++ < SI3218X_TIMEOUT_DCDC_UP));   /* 2 sec timeout */

-

-  DEBUG_PRINT (pProslic, "%sChannel %d : VBAT Up = %d.%d v\n",

-               LOGPRINT_PREFIX,

-               pProslic->channel,(int)((vbat/SCALE_V_MADC)/1000),

-               SIVOICE_ABS(((vbat/SCALE_V_MADC) - (vbat/SCALE_V_MADC)/1000*1000)));

-  if(timer > SI3218X_TIMEOUT_DCDC_UP)

-  {

-    /* Error handling - shutdown converter, disable channel, set error tag */

-    pProslic->channelEnable = 0;

-    error = RC_VBAT_UP_TIMEOUT;

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_DCDC,

-             0x900000L); /* shutdown converter */

-    DEBUG_PRINT (pProslic, "%sChannel %d : DCDC Power up timeout : Status=0x%08X\n",

-                 LOGPRINT_PREFIX, pProslic->channel, ReadRAM(pProHW,pProslic->channel,

-                     SI3218X_RAM_DCDC_STATUS));

-  }

-

-  return error;

-}

-

-/*

-**

-** PROSLIC INITIALIZATION FUNCTIONS

-**

-*/

-

-/*

-** Function: Si3218x_Init_MultiBOM

-**

-** Description:

-** - probe SPI to establish daisy chain length

-** - load patch

-** - initialize general parameters

-** - calibrate madc

-** - bring up DC/DC converters

-** - calibrate everything except madc & lb

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object array

-** fault: error code

-**

-** Return:

-** error code

-*/

-

-#ifdef SIVOICE_MULTI_BOM_SUPPORT

-int Si3218x_Init_MultiBOM (proslicChanType_ptr *pProslic, int size, int preset)

-{

-

-  if(preset < si3218x_genconf_multi_max_preset)

-  {

-    /* Copy selected General Configuration parameters to Std structure */

-    Si3218x_General_Configuration = Si3218x_General_Configuration_MultiBOM[preset];

-  }

-  else

-  {

-    return RC_INVALID_PRESET;

-  }

-  return Si3218x_Init_with_Options(pProslic,size, INIT_NO_OPT);

-}

-#endif

-

-

-/*

-** Function: Si3218x_SelectPatch

-**

-** Select patch based on general parameters

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object array

-** fault: error code

-** patch:    Pointer to proslicPatch pointer

-**

-** Return:

-** error code

-*/

-int Si3218x_SelectPatch(proslicChanType_ptr pProslic,

-                        const proslicPatch **patch)

-{

-

-#ifdef SIVOICE_MULTI_BOM_SUPPORT

-  if(Si3218x_General_Configuration.bom_option == BO_DCDC_LCQC_5W

-      || Si3218x_General_Configuration.bom_option == BO_DCDC_LCCB

-      || Si3218x_General_Configuration.bom_option == BO_DCDC_LCCB110

-      || Si3218x_General_Configuration.bom_option == BO_DCDC_BUCK_BOOST)

-  {

-    *patch = &(SI3218X_PATCH_A);

-  }

-  else

-  {

-    DEBUG_PRINT(pProslic, "%sChannel %d : Invalid Patch\n", LOGPRINT_PREFIX,

-                pProslic->channel);

-    pProslic->channelEnable = 0;

-    pProslic->error = RC_INVALID_PATCH;

-    return RC_INVALID_PATCH;

-  }

-#else

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  *patch = &(SI3218X_PATCH_A_DEFAULT);

-#endif

-

-  return RC_NONE;

-}

-

-/*

-** Function: Si3218x_GenParamUpdate

-**

-** Update general parameters

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object array

-** fault: error code

-**

-** Return:

-** error code

-*/

-

-int Si3218x_GenParamUpdate(proslicChanType_ptr pProslic,initSeqType seq)

-{

-  ramData ram_data;

-  uInt8 data;

-

-  switch(seq)

-  {

-    case INIT_SEQ_PRE_CAL:

-      /*

-      ** Force pwrsave off and disable AUTO-tracking - set to user configured state after cal

-      */

-      WriteReg(pProHW, pProslic->channel,SI3218X_REG_ENHANCE,0);

-      WriteReg(pProHW, pProslic->channel,SI3218X_REG_AUTO,0x2F);

-

-      /*

-      ** General Parameter Updates

-      */

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_P_TH_HVIC,

-               Si3218x_General_Configuration.p_th_hvic);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_COEF_P_HVIC,

-               Si3218x_General_Configuration.coef_p_hvic);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_BAT_HYST,

-               Si3218x_General_Configuration.bat_hyst);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VBATH_EXPECT,

-               Si3218x_General_Configuration.vbath_expect);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VBATR_EXPECT,

-               Si3218x_General_Configuration.vbatr_expect);

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_PWRSAVE_TIMER,

-               Si3218x_General_Configuration.pwrsave_timer);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_OFFHOOK_THRESH,

-               Si3218x_General_Configuration.pwrsave_ofhk_thresh);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VBAT_TRACK_MIN,

-               Si3218x_General_Configuration.vbat_track_min);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VBAT_TRACK_MIN_RNG,

-               Si3218x_General_Configuration.vbat_track_min_rng);

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_THERM_DBI,

-               Si3218x_General_Configuration.therm_dbi);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VOV_DCDC_SLOPE,

-               Si3218x_General_Configuration.vov_dcdc_slope);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VOV_DCDC_OS,

-               Si3218x_General_Configuration.vov_dcdc_os);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VOV_RING_BAT_MAX,

-               Si3218x_General_Configuration.vov_ring_bat_max);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_VERR,

-               Si3218x_General_Configuration.dcdc_verr);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_VERR_HYST,

-               Si3218x_General_Configuration.dcdc_verr_hyst);

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_PD_UVLO,

-               Si3218x_General_Configuration.pd_uvlo);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_PD_OVLO,

-               Si3218x_General_Configuration.pd_ovlo);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_PD_OCLO,

-               Si3218x_General_Configuration.pd_oclo);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_PD_SWDRV,

-               Si3218x_General_Configuration.pd_swdrv);

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_UVPOL,

-               Si3218x_General_Configuration.dcdc_uvpol);

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_RNGTYPE,

-               Si3218x_General_Configuration.dcdc_rngtype);

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_ANA_TOFF,

-               Si3218x_General_Configuration.dcdc_ana_toff);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_ANA_TONMIN,

-               Si3218x_General_Configuration.dcdc_ana_tonmin);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_ANA_TONMAX,

-               Si3218x_General_Configuration.dcdc_ana_tonmax);

-

-

-      /*

-      ** Hardcoded RAM

-      */

-

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_OITHRESH_LO,

-               GCONF.i_oithresh_lo);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_OITHRESH_HI,

-               GCONF.i_oithresh_hi);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_OVTHRESH,GCONF.v_ovthresh);

-

-      ram_data = (GCONF.v_uvthresh > UVTHRESH_OFFS)?(GCONF.v_uvthresh -

-                 UVTHRESH_OFFS)/UVTHRESH_SCALE:0L;

-      ram_data *= BIT20LSB;

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_UVTHRESH,ram_data);

-

-      ram_data = (GCONF.v_uvhyst > UVHYST_OFFS)?(GCONF.v_uvhyst -

-                 UVHYST_OFFS)/UVHYST_SCALE:0L;

-      ram_data *= BIT20LSB;

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_UVHYST,ram_data);

-

-      /* Set default audio gain based on PM bom */

-      if(Si3218x_General_Configuration.pm_bom == BO_PM_BOM)

-      {

-        WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_SCALE_KAUDIO,BOM_KAUDIO_PM);

-        WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_AC_ADC_GAIN,BOM_AC_ADC_GAIN_PM);

-      }

-      else

-      {

-        WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_SCALE_KAUDIO,BOM_KAUDIO_NO_PM);

-        WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_AC_ADC_GAIN,

-                 BOM_AC_ADC_GAIN_NO_PM);

-      }

-

-      /*

-      ** Hardcoded changes to default settings

-      */

-      data = ReadReg(pProHW, pProslic->channel,SI3218X_REG_GPIO_CFG1);

-      data &= 0xF9;  /* Clear DIR for GPIO 1&2 */

-      data |= 0x60;  /* Set ANA mode for GPIO 1&2 */

-      WriteReg(pProHW,pProslic->channel,SI3218X_REG_GPIO_CFG1,

-               data);          /* coarse sensors analog mode */

-      WriteReg(pProHW,pProslic->channel,SI3218X_REG_PDN,

-               0x80);                /* madc powered in open state */

-      WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_A1_1,

-               0x71EB851L); /* Fix HPF corner */

-      WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PD_REF_OSC,

-               0x200000L);    /* PLL freerun workaround */

-      WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ILOOPLPF,

-               0x4EDDB9L);      /* 20pps pulse dialing enhancement */

-      WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ILONGLPF,

-               0x806D6L);       /* 20pps pulse dialing enhancement */

-      WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VDIFFLPF,

-               0x10038DL);      /* 20pps pulse dialing enhancement */

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_DCDC_VREF_CTRL,0x0L);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VCM_TH,0x106240L);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VCMLPF,0x10059FL);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_CM_SPEEDUP_TIMER,0x0F0000);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_VCM_HYST,0x206280L);

-

-      /* Prevent Ref Osc from powering down in PLL Freerun mode (pd_ref_osc) */

-      ram_data = ReadRAM(pProHW, pProslic->channel,SI3218X_RAM_PWRSAVE_CTRL_LO);

-      WriteRAM(pProHW, pProslic->channel,SI3218X_RAM_PWRSAVE_CTRL_LO,

-               ram_data&0x07FFFFFFL); /* clear b27 */

-      break;

-

-

-    case INIT_SEQ_POST_CAL:

-      WriteReg(pProHW, pProslic->channel,SI3218X_REG_ENHANCE,

-               Si3218x_General_Configuration.enhance&0x1F);

-      WriteReg(pProHW, pProslic->channel,SI3218X_REG_AUTO,

-               Si3218x_General_Configuration.auto_reg);

-      if(Si3218x_General_Configuration.zcal_en)

-      {

-        WriteReg(pProHW,pProslic->channel, SI3218X_REG_ZCAL_EN, 0x04);

-      }

-      break;

-

-    default:

-      break;

-  }

-  return RC_NONE;

-}

-

-/*

-** Function: Si3218x_Init_with_Options

-**

-** Description:

-** - probe SPI to establish daisy chain length

-** - load patch

-** - initialize general parameters

-** - calibrate madc

-** - bring up DC/DC converters

-** - calibrate everything except madc & lb

-**

-** Input Parameters:

-** pProslic: pointer to PROSLIC object array

-** fault: error code

-**

-** Return:

-** error code

-*/

-

-int Si3218x_Init_with_Options (proslicChanType_ptr *pProslic, int size,

-                               initOptionsType init_opt)

-{

-  /*

-   ** This function will initialize the chipRev and chipType members in pProslic

-   ** as well as load the initialization structures.

-   */

-

-  uInt8 data;

-  uInt8 calSetup[] = {0x00, 0x00, 0x01, 0x80};  /* CALR0-CALR3 */

-  int k, device_count;

-  const proslicPatch *patch;

-  uInt8 status;

-

-  LOGPRINT("%s(%d) size = %d init_opt = %d\n", __FUNCTION__, __LINE__, size,

-           init_opt);

-  /*

-  **

-  ** First qualify general parameters by identifying valid device key.  This

-  ** will prevent inadvertent use of other device's preset files, which could

-  ** lead to improper initialization and high current states.

-  */

-

-  data = Si3218x_General_Configuration.device_key;

-

-  if((data < DEVICE_KEY_MIN)||(data > DEVICE_KEY_MAX))

-  {

-    pProslic[0]->error = RC_INVALID_GEN_PARAM;

-    return pProslic[0]->error;

-  }

-

-  /* reset error code */

-  for(k = 0; k < size; k++)

-  {

-    pProslic[k]->error = RC_NONE;

-  }

-

-  if( (init_opt == INIT_REINIT) || (init_opt == INIT_SOFTRESET) )

-  {

-    ProSLIC_ReInit_helper(pProslic, size, init_opt, SI3218X_CHAN_PER_DEVICE);

-

-   /* for single channel devices, we need do a full restore.. */

-    if(init_opt == INIT_REINIT)

-    {

-      init_opt = 0;

-    }

-}

-

-  if( init_opt != INIT_REINIT )

-  {

-    if( (SiVoice_IdentifyChannels(pProslic, size, &device_count, NULL) != RC_NONE)

-        ||(device_count == 0) )

-    {

-      DEBUG_PRINT(*pProslic, "%s: failed to detect any ProSLICs\n", LOGPRINT_PREFIX);

-      return RC_SPI_FAIL;

-    }

-

-    /*

-     ** Probe each channel and enable all channels that respond

-     */

-    for (k=0; k<size; k++)

-    {

-      if ((pProslic[k]->channelEnable)

-          &&(pProslic[k]->channelType == PROSLIC))

-      {

-        if ( (ProSLIC_VerifyMasterStat(pProslic[k]) != RC_NONE)

-             || (ProSLIC_VerifyControlInterface(pProslic[k]) != RC_NONE) )

-        {

-          pProslic[k]->channelEnable = 0;

-          pProslic[k]->error = RC_SPI_FAIL;

-          DEBUG_PRINT(*pProslic, "%s: SPI communications or PCLK/FS failure\n", LOGPRINT_PREFIX);

-          return pProslic[k]->error;    /* Halt init if SPI fail */

-        }

-      }

-    }

-  } /* init_opt !REINIT */

-

-

-  if( (init_opt != INIT_NO_PATCH_LOAD )  && (init_opt != INIT_REINIT) )

-  {

-    /*

-    ** Load patch (load on every channel since single channel device)

-    */

-    for (k=0; k<size; k++)

-    {

-      if ((pProslic[k]->channelEnable)&&(pProslic[k]->channelType == PROSLIC))

-      {

-

-        /* Select Patch*/

-        if (pProslic[k]->deviceId->chipRev == SI3218X_REVA )

-        {

-          status = (uInt8) Si3218x_SelectPatch(pProslic[k],&patch);

-        }

-        else

-        {

-          DEBUG_PRINT(pProslic[k], "%sChannel %d : Unsupported Device Revision (%d)\n",

-                      LOGPRINT_PREFIX, pProslic[k]->channel,pProslic[k]->deviceId->chipRev );

-          pProslic[k]->channelEnable = 0;

-          pProslic[k]->error = RC_UNSUPPORTED_DEVICE_REV;

-          return RC_UNSUPPORTED_DEVICE_REV;

-        }

-

-        data = 1; /* Use this as a flag to see if we need to load the patch */

-        /* If the patch doesn't match, we need to do a full init, change settings */

-        if(init_opt == INIT_SOFTRESET)

-        {

-          ramData patchData;

-          patchData = pProslic[k]->ReadRAMX(pProslic[k]->pProHWX, pProslic[k]->channel,

-                                            PROSLIC_RAM_PATCHID);

-

-          if( patchData ==  patch->patchSerial)

-          {

-            data = 0;

-          }

-          else

-          {

-            init_opt = INIT_NO_OPT;

-          }

-        } /* SOFTRESET */

-     

-        /* Load Patch */

-        if(status == RC_NONE)

-        {

-          if(data == 1)

-          {

-            Si3218x_LoadPatch(pProslic[k],patch);

-#ifndef DISABLE_VERIFY_PATCH

-            /* Optional Patch Verification */

-            data = (uInt8)Si3218x_VerifyPatch(pProslic[k],patch);

-            if (data != RC_NONE)

-            {

-              DEBUG_PRINT(pProslic[k], "%sChannel %d : Patch verification failed (%d)\n", 

-                   LOGPRINT_PREFIX, k, data);

-              pProslic[k]->channelEnable=0;

-              pProslic[k]->error = RC_PATCH_ERR;

-              return data;

-            }

-#endif

-          }

-        }

-        else

-        {

-          return status;

-        }

-      } /* channel == PROSLIC */

-    } /* for all channles */

-  }/* init_opt  - need to reload patch */

-

-  /*

-  ** Load general parameters - includes all BOM dependencies

-  */

-  if(init_opt != INIT_SOFTRESET)

-  {

-    for (k=0; k<size; k++)

-    {

-      if ((pProslic[k]->channelEnable)&&(pProslic[k]->channelType == PROSLIC))

-      {

-        Si3218x_GenParamUpdate(pProslic[k],INIT_SEQ_PRE_CAL);

-      }

-

-      pProslic[k]->WriteRAMX(pProslic[k]->pProHWX,pProslic[k]->channel,

-                             SI3218X_RAM_IRING_LIM,SI3218X_IRING_LIM_MAX);

-    }

-  }

-

-  if((init_opt != INIT_NO_CAL)

-      && (init_opt != INIT_SOFTRESET)) /* Must recal on single channel devices */

-  {

-    /*

-    ** Calibrate (madc offset)

-    */

-    ProSLIC_Calibrate(pProslic,size,calSetup,TIMEOUT_MADC_CAL);

-  }/* init_opt */

-

-  /*

-  ** Bring up DC/DC converters sequentially to minimize

-  ** peak power demand on VDC

-  */

-  for (k=0; k<size; k++)

-  {

-    if ((pProslic[k]->channelEnable)&&(pProslic[k]->channelType == PROSLIC))

-    {

-      pProslic[k]->error = Si3218x_PowerUpConverter(pProslic[k]);

-    }

-  }

-

-  if((init_opt != INIT_NO_CAL) && (init_opt != INIT_SOFTRESET))

-  {

-    /*

-    ** Calibrate remaining cals (except madc, lb)

-    */

-    calSetup[1] = SI3218X_CAL_STD_CALR1;

-    calSetup[2] = SI3218X_CAL_STD_CALR2;

-

-    ProSLIC_Calibrate(pProslic,size,calSetup,TIMEOUT_GEN_CAL);

-  }

-

-  /*

-  ** Apply post calibration general parameters

-  */

-  if(init_opt != INIT_SOFTRESET)

-  {

-    for (k=0; k<size; k++)

-    {

-

-      if ((pProslic[k]->channelEnable)&&(pProslic[k]->channelType == PROSLIC))

-      {

-        Si3218x_GenParamUpdate(pProslic[k],INIT_SEQ_POST_CAL);

-      }

-    }

-  }

-

-  /* Restore linefeed state after initialization for REINIT/SOFTRESET */

-  if( (init_opt == INIT_REINIT) || (init_opt == INIT_SOFTRESET) )

-  {

-    for(k = 0; k < size; k++)

-    {

-      pProslic[k]->WriteRegX(pProslic[k]->pProHWX,pProslic[k]->channel,

-                             SI3218X_REG_LINEFEED,pProslic[k]->scratch);

-    }

-  }

-

-  /*

-  ** If any channel incurred a non-fatal error, return

-  ** RC_NON_FATAL_INIT_ERR to trigger user to read each channel's

-  ** error status

-  */

-  for (k=0; k<size; k++)

-  {

-    if(pProslic[k]->error != RC_NONE)

-    {

-      return RC_NON_FATAL_INIT_ERR;

-    }

-  }

-

-  return RC_NONE;

-}

-

-/*

-** Function: Si3218x_EnableInterrupts

-**

-** Description:

-** Enables interrupts

-**

-** Input Parameters:

-** pProslic:   pointer to PROSLIC channel obj

-**

-** Returns:

-** 0

-*/

-

-int Si3218x_EnableInterrupts (proslicChanType_ptr pProslic)

-{

-  uInt8 i;

-#ifdef GCI_MODE

-  uInt8 data;

-#endif

-  /* Clear pending interrupts first */

-  for(i = SI3218X_REG_IRQ1; i < SI3218X_REG_IRQ4; i++)

-  {

-#ifdef GCI_MODE

-    data = ReadReg(pProHW,pProslic->channel, i);

-    WriteReg(pProHW,pProslic->channel,i,data); /*clear interrupts (gci only)*/

-#else

-    (void)ReadReg(pProHW,pProslic->channel, i);

-#endif

-

-  }

-

-  WriteReg (pProHW,pProslic->channel,SI3218X_REG_IRQEN1,

-            Si3218x_General_Configuration.irqen1);

-  WriteReg (pProHW,pProslic->channel,SI3218X_REG_IRQEN2,

-            Si3218x_General_Configuration.irqen2);

-  WriteReg (pProHW,pProslic->channel,SI3218X_REG_IRQEN3,

-            Si3218x_General_Configuration.irqen3);

-  WriteReg (pProHW,pProslic->channel,SI3218X_REG_IRQEN4,

-            Si3218x_General_Configuration.irqen4);

-

-  return RC_NONE;

-}

-

-/*

-**

-** PROSLIC CONFIGURATION FUNCTIONS

-**

-*/

-

-/*

-** Function: Si3218x_RingSetup

-**

-** Description:

-** configure ringing

-**

-** Input Parameters:

-** pProslic:   pointer to PROSLIC channel obj

-** preset:     ring preset

-**

-** Returns:

-** 0

-*/

-

-#ifndef DISABLE_RING_SETUP

-int Si3218x_RingSetup (proslicChanType *pProslic, int preset)

-{

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RTPER,

-           Si3218x_Ring_Presets[preset].rtper);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RINGFR,

-           Si3218x_Ring_Presets[preset].freq);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RINGAMP,

-           Si3218x_Ring_Presets[preset].amp);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RINGPHAS,

-           Si3218x_Ring_Presets[preset].phas);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RINGOF,

-           Si3218x_Ring_Presets[preset].offset);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_SLOPE_RING,

-           Si3218x_Ring_Presets[preset].slope_ring);

-

-  if(Si3218x_Ring_Presets[preset].iring_lim > SI3218X_IRING_LIM_MAX)

-  {

-    Si3218x_Ring_Presets[preset].iring_lim = SI3218X_IRING_LIM_MAX;

-  }

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_IRING_LIM,

-           Si3218x_Ring_Presets[preset].iring_lim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RTACTH,

-           Si3218x_Ring_Presets[preset].rtacth);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RTDCTH,

-           Si3218x_Ring_Presets[preset].rtdcth);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RTACDB,

-           Si3218x_Ring_Presets[preset].rtacdb);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RTDCDB,

-           Si3218x_Ring_Presets[preset].rtdcdb);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VOV_RING_BAT,

-           Si3218x_Ring_Presets[preset].vov_ring_bat);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VOV_RING_GND,

-           Si3218x_Ring_Presets[preset].vov_ring_gnd);

-

-#ifndef NOCLAMP_VBATR

-  /* Always limit VBATR_EXPECT to the general configuration maximum */

-  if(Si3218x_Ring_Presets[preset].vbatr_expect >

-      Si3218x_General_Configuration.vbatr_expect)

-  {

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VBATR_EXPECT,

-             Si3218x_General_Configuration.vbatr_expect);

-    DEBUG_PRINT(pProslic,

-                "%sRingSetup : VBATR_EXPECT : Clamped to Gen Conf Limit\n",LOGPRINT_PREFIX);

-  }

-  else

-  {

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VBATR_EXPECT,

-             Si3218x_Ring_Presets[preset].vbatr_expect);

-  }

-

-#else

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VBATR_EXPECT,

-           Si3218x_Ring_Presets[preset].vbatr_expect);

-#endif

-

-

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_RINGTALO,

-           Si3218x_Ring_Presets[preset].talo);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_RINGTAHI,

-           Si3218x_Ring_Presets[preset].tahi);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_RINGTILO,

-           Si3218x_Ring_Presets[preset].tilo);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_RINGTIHI,

-           Si3218x_Ring_Presets[preset].tihi);

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VBAT_TRACK_MIN_RNG,

-           Si3218x_Ring_Presets[preset].dcdc_vref_min_rng);

-

-  /*

-  ** LPR Handler

-  **

-  ** If USERSTAT == 0x01, adjust RINGCON and clear USERSTAT

-  */

-  if (Si3218x_Ring_Presets[preset].userstat == 0x01)

-  {

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_RINGCON,

-             (0x80|Si3218x_Ring_Presets[preset].ringcon) & ~(0x40));

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_USERSTAT,0x00);

-  }

-  else

-  {

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_RINGCON,

-             Si3218x_Ring_Presets[preset].ringcon);

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_USERSTAT,

-             Si3218x_Ring_Presets[preset].userstat);

-  }

-

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VCM_RING,

-           Si3218x_Ring_Presets[preset].vcm_ring);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VCM_RING_FIXED,

-           Si3218x_Ring_Presets[preset].vcm_ring_fixed);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_DELTA_VCM,

-           Si3218x_Ring_Presets[preset].delta_vcm);

-

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_DCDC_RNGTYPE,

-           Si3218x_Ring_Presets[preset].dcdc_rngtype);

-

-

-  /*

-  ** If multi bom supported **AND** a buck boost converter

-  ** is being used, force dcdc_rngtype to be fixed.

-  */

-#ifdef SIVOICE_MULTI_BOM_SUPPORT

-#define DCDC_RNGTYPE_BKBT     0L

-  /* Automatically adjust DCDC_RNGTYPE */

-  if(Si3218x_General_Configuration.bom_option == BO_DCDC_BUCK_BOOST)

-  {

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_DCDC_RNGTYPE,DCDC_RNGTYPE_BKBT);

-  }

-#endif

-

-

-  return RC_NONE;

-}

-#endif

-

-/*

-** Function: PROSLIC_ZsynthSetup

-**

-** Description:

-** configure impedance synthesis

-*/

-

-#ifndef DISABLE_ZSYNTH_SETUP

-int Si3218x_ZsynthSetup (proslicChanType *pProslic, int preset)

-{

-  uInt8 lf;

-  uInt8 cal_en = 0;

-  uInt16 timer = 500;

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  lf = ReadReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED,0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C0,

-           Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C1,

-           Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C2,

-           Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C3,

-           Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c3);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C0,

-           Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C1,

-           Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C2,

-           Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C3,

-           Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c3);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C2,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C3,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c3);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C4,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c4);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C5,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c5);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C6,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c6);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C7,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c7);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C8,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c8);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECFIR_C9,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_c9);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECIIR_B0,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_b0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECIIR_B1,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_b1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECIIR_A1,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_a1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ECIIR_A2,

-           Si3218x_Impedance_Presets[preset].hybrid.ecfir_a2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ZSYNTH_A1,

-           Si3218x_Impedance_Presets[preset].zsynth.zsynth_a1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ZSYNTH_A2,

-           Si3218x_Impedance_Presets[preset].zsynth.zsynth_a2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ZSYNTH_B1,

-           Si3218x_Impedance_Presets[preset].zsynth.zsynth_b1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ZSYNTH_B0,

-           Si3218x_Impedance_Presets[preset].zsynth.zsynth_b0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_ZSYNTH_B2,

-           Si3218x_Impedance_Presets[preset].zsynth.zsynth_b2);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_RA,

-           Si3218x_Impedance_Presets[preset].zsynth.ra);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACGAIN,

-           Si3218x_Impedance_Presets[preset].txgain);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACGAIN_SAVE,

-           Si3218x_Impedance_Presets[preset].rxgain);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACGAIN,

-           Si3218x_Impedance_Presets[preset].rxgain);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B0_1,

-           Si3218x_Impedance_Presets[preset].rxachpf_b0_1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B1_1,

-           Si3218x_Impedance_Presets[preset].rxachpf_b1_1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_A1_1,

-           Si3218x_Impedance_Presets[preset].rxachpf_a1_1);

-

-  /*

-  ** Scale based on desired gain plan

-  */

-  Si3218x_dbgSetTXGain(pProslic,Si3218x_Impedance_Presets[preset].txgain_db,

-                       preset,TXACGAIN_SEL);

-  Si3218x_dbgSetRXGain(pProslic,Si3218x_Impedance_Presets[preset].rxgain_db,

-                       preset,RXACGAIN_SEL);

-  Si3218x_TXAudioGainSetup(pProslic,TXACGAIN_SEL);

-  Si3218x_RXAudioGainSetup(pProslic,RXACGAIN_SEL);

-

-  /*

-  ** Perform Zcal in case OHT used (eg. no offhook event to trigger auto Zcal)

-  */

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_CALR0,0x00);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_CALR1,0x40);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_CALR2,0x00);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_CALR3,0x80);  /* start cal */

-

-  /* Wait for zcal to finish */

-  do

-  {

-    cal_en = ReadReg(pProHW,pProslic->channel,SI3218X_REG_CALR3);

-    Delay(pProTimer,1);

-    timer--;

-  }

-  while((cal_en&0x80)&&(timer>0));

-

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED,lf);

-

-  if(timer > 0)

-  {

-    return RC_NONE;

-  }

-  else

-  {

-    return RC_CAL_TIMEOUT;

-  }

-}

-#endif

-

-/*

-** Function: PROSLIC_AudioGainSetup

-**

-** Description:

-** configure audio gains

-*/

-int Si3218x_TXAudioGainSetup (proslicChanType *pProslic, int preset)

-{

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACGAIN,

-           Si3218x_audioGain_Presets[preset].acgain);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C0,

-           Si3218x_audioGain_Presets[preset].aceq_c0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C1,

-           Si3218x_audioGain_Presets[preset].aceq_c1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C2,

-           Si3218x_audioGain_Presets[preset].aceq_c2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C3,

-           Si3218x_audioGain_Presets[preset].aceq_c3);

-

-  return RC_NONE;

-}

-

-/*

-** Function: PROSLIC_AudioGainSetup

-**

-** Description:

-** configure audio gains

-*/

-

-int Si3218x_RXAudioGainSetup (proslicChanType *pProslic, int preset)

-{

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACGAIN_SAVE,

-           Si3218x_audioGain_Presets[preset].acgain);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACGAIN,

-           Si3218x_audioGain_Presets[preset].acgain);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C0,

-           Si3218x_audioGain_Presets[preset].aceq_c0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C1,

-           Si3218x_audioGain_Presets[preset].aceq_c1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C2,

-           Si3218x_audioGain_Presets[preset].aceq_c2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C3,

-           Si3218x_audioGain_Presets[preset].aceq_c3);

-

-  return RC_NONE;

-}

-

-

-/*

-** Function: PROSLIC_AudioGainScale

-**

-** Description:

-** Multiply path gain by passed value for PGA and EQ scale (no reference to dB,

-** multiply by a scale factor)

-*/

-int Si3218x_AudioGainScale (proslicChanType *pProslic, int preset,

-                            uInt32 pga_scale, uInt32 eq_scale,int rx_tx_sel)

-{

-

-  if(rx_tx_sel == TXACGAIN_SEL)

-  {

-    Si3218x_audioGain_Presets[TXACGAIN_SEL].acgain =

-      (Si3218x_Impedance_Presets[preset].txgain/1000)*pga_scale;

-    if (Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c0 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c0 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c1 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c1 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c2 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c2 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c3 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c3 |= 0xf0000000L;

-    }

-    Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c0 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c0/1000)*eq_scale;

-    Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c1 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c1/1000)*eq_scale;

-    Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c2 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c2/1000)*eq_scale;

-    Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c3 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.txaceq_c3/1000)*eq_scale;

-

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACGAIN,

-             Si3218x_audioGain_Presets[TXACGAIN_SEL].acgain);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C0,

-             Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c0);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C1,

-             Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c1);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C2,

-             Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c2);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACEQ_C3,

-             Si3218x_audioGain_Presets[TXACGAIN_SEL].aceq_c3);

-  }

-  else

-  {

-    Si3218x_audioGain_Presets[RXACGAIN_SEL].acgain =

-      (Si3218x_Impedance_Presets[preset].rxgain/1000)*pga_scale;

-    if (Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c0 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c0 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c1 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c1 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c2 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c2 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c3 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c3 |= 0xf0000000L;

-    }

-    Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c0 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c0/1000)*eq_scale;

-    Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c1 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c1/1000)*eq_scale;

-    Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c2 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c2/1000)*eq_scale;

-    Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c3 = ((int32)

-        Si3218x_Impedance_Presets[preset].audioEQ.rxaceq_c3/1000)*eq_scale;

-

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACGAIN_SAVE,

-             Si3218x_audioGain_Presets[RXACGAIN_SEL].acgain);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACGAIN,

-             Si3218x_audioGain_Presets[RXACGAIN_SEL].acgain);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C0,

-             Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c0);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C1,

-             Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c1);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C2,

-             Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c2);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACEQ_C3,

-             Si3218x_audioGain_Presets[RXACGAIN_SEL].aceq_c3);

-  }

-  return 0;

-}

-int Si3218x_TXAudioGainScale (proslicChanType *pProslic, int preset,

-                              uInt32 pga_scale, uInt32 eq_scale)

-{

-  return Si3218x_AudioGainScale(pProslic,preset,pga_scale,eq_scale,TXACGAIN_SEL);

-}

-int Si3218x_RXAudioGainScale (proslicChanType *pProslic, int preset,

-                              uInt32 pga_scale, uInt32 eq_scale)

-{

-  return Si3218x_AudioGainScale(pProslic,preset,pga_scale,eq_scale,RXACGAIN_SEL);

-}

-

-

-/*

-** Function: PROSLIC_DCFeedSetup

-**

-** Description:

-** configure dc feed

-*/

-

-#ifndef DISABLE_DCFEED_SETUP

-int Si3218x_DCFeedSetupCfg (proslicChanType *pProslic, Si3218x_DCfeed_Cfg *cfg,

-                            int preset)

-{

-  uInt8 lf;

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-  lf = ReadReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED,0);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_SLOPE_VLIM,

-           cfg[preset].slope_vlim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_SLOPE_RFEED,

-           cfg[preset].slope_rfeed);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_SLOPE_ILIM,

-           cfg[preset].slope_ilim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_SLOPE_DELTA1,cfg[preset].delta1);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_SLOPE_DELTA2,cfg[preset].delta2);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_V_VLIM,cfg[preset].v_vlim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_V_RFEED,cfg[preset].v_rfeed);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_V_ILIM,cfg[preset].v_ilim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_CONST_RFEED,

-           cfg[preset].const_rfeed);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_CONST_ILIM,

-           cfg[preset].const_ilim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_I_VLIM,cfg[preset].i_vlim);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCRONHK,cfg[preset].lcronhk);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCROFFHK,cfg[preset].lcroffhk);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCRDBI,cfg[preset].lcrdbi);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LONGHITH,cfg[preset].longhith);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LONGLOTH,cfg[preset].longloth);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LONGDBI,cfg[preset].longdbi);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCRMASK,cfg[preset].lcrmask);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCRMASK_POLREV,

-           cfg[preset].lcrmask_polrev);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCRMASK_STATE,

-           cfg[preset].lcrmask_state);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_LCRMASK_LINECAP,

-           cfg[preset].lcrmask_linecap);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VCM_OH,cfg[preset].vcm_oh);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VOV_BAT,cfg[preset].vov_bat);

-  WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_VOV_GND,cfg[preset].vov_gnd);

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_LINEFEED,lf);

-

-  return RC_NONE;

-}

-

-#endif

-

-/*

-** Function: PROSLIC_PulseMeterSetup

-**

-** Description:

-** configure pulse metering

-*/

-

-#ifndef DISABLE_PULSE_SETUP

-int Si3218x_PulseMeterSetup (proslicChanType *pProslic, int preset)

-{

-  uInt8 reg;

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  else

-  {

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PM_AMP_THRESH,

-             Si3218x_PulseMeter_Presets[preset].pm_amp_thresh);

-    reg = (Si3218x_PulseMeter_Presets[preset].pmFreq<<1)|

-          (Si3218x_PulseMeter_Presets[preset].pmAuto<<3);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PM_ACTIVE,

-             Si3218x_PulseMeter_Presets[preset].pmActive);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_PM_INACTIVE,

-             Si3218x_PulseMeter_Presets[preset].pmInactive);

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_PMCON,reg);

-    return RC_NONE;

-  }

-

-}

-#endif

-

-/*

-** Function: PROSLIC_PCMSetup

-**

-** Description:

-** configure pcm

-*/

-

-#ifndef DISABLE_PCM_SETUP

-int Si3218x_PCMSetup(proslicChanType *pProslic, int preset)

-{

-  uInt8 regTemp;

-  uInt8 pmEn;

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  pmEn = ReadReg(pProHW,pProslic->channel,

-                 SI3218X_REG_PMCON) & 0x01; /* PM/wideband lockout */

-  if (Si3218x_PCM_Presets[preset].widebandEn && pmEn)

-  {

-#ifdef ENABLE_DEBUG

-    LOGPRINT ("%s Wideband Mode is not supported while Pulse Metering is enabled.\n",

-              LOGPRINT_PREFIX);

-#endif

-  }

-  else if (Si3218x_PCM_Presets[preset].widebandEn && !pmEn)

-  {

-    /* TXIIR settings */

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B0_1,0x3538E80L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B1_1,0x3538E80L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A1_1,0x1AA9100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B0_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B1_2,0x2505400L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B2_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A1_2,0x2CB8100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A2_2,0x1D7FA500L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B0_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B1_3,0x1276D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B2_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A1_3,0x2335300L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A2_3,0x19D5F700L);

-    /* RXIIR settings */

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B0_1,0x6A71D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B1_1,0x6A71D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A1_1,0x1AA9100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B0_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B1_2,0x2505400L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B2_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A1_2,0x2CB8100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A2_2,0x1D7FA500L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B0_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B1_3,0x1276D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B2_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A1_3,0x2335300L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A2_3,0x19D5F700L);

-    /*

-    ** RXHPF

-    ** Note:  Calling ProSLIC_ZsynthSetup() will overwrite some

-    **        of these values.  ProSLIC_PCMSetup() should always

-    **        be called after loading coefficients when using

-    **        wideband mode

-    */

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B0_1,0x7CFF900L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B1_1,0x18300700L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_A1_1,0x79FF201L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B0_2,0x7CEDA1DL);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B1_2,0x106320D4L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_B2_2,0x7CEDA1DL);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_A1_2,0xF9A910FL);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_A2_2,0x185FFDA8L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACHPF_GAIN,0x08000000L);

-    /* TXHPF */

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_B0_1,0x0C7FF4CEL);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_B1_1,0x13800B32L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_A1_1,0x079FF201L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_B0_2,0x030FDD10L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_B1_2,0x19E0996CL);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_B2_2,0x030FDD10L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_A1_2,0x0F9A910FL);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_A2_2,0x185FFDA8L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACHPF_GAIN,0x0CD30000L);

-

-    regTemp = ReadReg(pProHW,pProslic->channel,SI3218X_REG_DIGCON);

-#ifndef DISABLE_HPF_WIDEBAND

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_DIGCON,

-             regTemp&~(0xC)); /* Enable HPF */

-#else

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_DIGCON,

-             regTemp|(0xC)); /* Disable HPF */

-#endif

-    regTemp = ReadReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE);

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE,regTemp|1);

-  }

-  else

-  {

-    regTemp = ReadReg(pProHW,pProslic->channel,SI3218X_REG_DIGCON);

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_DIGCON,regTemp&~(0xC));

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B0_1,0x3538E80L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B1_1,0x3538E80L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A1_1,0x1AA9100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B0_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B1_2,0x2505400L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B2_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A1_2,0x2CB8100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A2_2,0x1D7FA500L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B0_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B1_3,0x1276D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_B2_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A1_3,0x2335300L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_TXACIIR_A2_3,0x19D5F700L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B0_1,0x6A71D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B1_1,0x6A71D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A1_1,0x1AA9100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B0_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B1_2,0x2505400L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B2_2,0x216D100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A1_2,0x2CB8100L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A2_2,0x1D7FA500L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B0_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B1_3,0x1276D00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_B2_3,0x2CD9B00L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A1_3,0x2335300L);

-    WriteRAM(pProHW,pProslic->channel,SI3218X_RAM_RXACIIR_A2_3,0x19D5F700L);

-    regTemp = ReadReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE);

-    WriteReg(pProHW,pProslic->channel,SI3218X_REG_ENHANCE,regTemp&~(1));

-  }

-  regTemp = Si3218x_PCM_Presets[preset].pcmFormat;

-  regTemp |= Si3218x_PCM_Presets[preset].pcm_tri << 5;

-  regTemp |= Si3218x_PCM_Presets[preset].alaw_inv << 2;

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_PCMMODE,regTemp);

-  regTemp = ReadReg(pProHW,pProslic->channel,SI3218X_REG_PCMTXHI);

-  regTemp &= 3;

-  regTemp |= Si3218x_PCM_Presets[preset].tx_edge<<4;

-  WriteReg(pProHW,pProslic->channel,SI3218X_REG_PCMTXHI,regTemp);

-

-  return RC_NONE;

-}

-#endif

-

-/*

-**

-** PROSLIC CONTROL FUNCTIONS

-**

-*/

-

-/*

-

-** Function: PROSLIC_dbgSetDCFeed

-**

-** Description:

-** provisionally function for setting up

-** dcfeed given desired open circuit voltage

-** and loop current.

-*/

-

-int Si3218x_dbgSetDCFeed (proslicChanType *pProslic, uInt32 v_vlim_val,

-                          uInt32 i_ilim_val, int32 preset)

-{

-#ifndef DISABLE_DCFEED_SETUP

-  /* Note:  * needs more descriptive return codes in the event of an out of range argument */

-  uInt16 vslope = 160;

-  uInt16 rslope = 720;

-  uInt32 vscale1 = 1386;

-  uInt32 vscale2 =

-    1422;   /* 1386x1422 = 1970892 broken down to minimize trunc err */

-  uInt32 iscale1 = 913;

-  uInt32 iscale2 = 334;    /* 913x334 = 304942 */

-  uInt32 i_rfeed_val, v_rfeed_val, const_rfeed_val, i_vlim_val, const_ilim_val,

-         v_ilim_val;

-  int32 signedVal;

-  /* Set Linefeed to open state before modifying DC Feed */

-

-  /* Assumptions must be made to minimize computations.  This limits the

-  ** range of available settings, but should be more than adequate for

-  ** short loop applications.

-  **

-  ** Assumtions:

-  **

-  ** SLOPE_VLIM      =>  160ohms

-  ** SLOPE_RFEED     =>  720ohms

-  ** I_RFEED         =>  3*I_ILIM/4

-  **

-  ** With these assumptions, the DC Feed parameters now become

-  **

-  ** Inputs:      V_VLIM, I_ILIM

-  ** Constants:   SLOPE_VLIM, SLOPE_ILIM, SLOPE_RFEED, SLOPE_DELTA1, SLOPE_DELTA2

-  ** Outputs:     V_RFEED, V_ILIM, I_VLIM, CONST_RFEED, CONST_ILIM

-  **

-  */

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  /* Validate arguments */

-  if((i_ilim_val < 15)||(i_ilim_val > 45))

-  {

-    return 1;  /* need error code */

-  }

-  if((v_vlim_val < 30)||(v_vlim_val > 52))

-  {

-    return 1;  /* need error code */

-  }

-

-  /* Calculate voltages in mV and currents in uA */

-  v_vlim_val *= 1000;

-  i_ilim_val *= 1000;

-

-  /* I_RFEED */

-  i_rfeed_val = (3*i_ilim_val)/4;

-

-  /* V_RFEED */

-  v_rfeed_val = v_vlim_val - (i_rfeed_val*vslope)/1000;

-

-  /* V_ILIM */

-  v_ilim_val = v_rfeed_val - (rslope*(i_ilim_val - i_rfeed_val))/1000;

-

-  /* I_VLIM */

-  i_vlim_val = (v_vlim_val*1000)/4903;

-

-  /* CONST_RFEED */

-  signedVal = v_rfeed_val * (i_ilim_val - i_rfeed_val);

-  signedVal /= (v_rfeed_val - v_ilim_val);

-  signedVal = i_rfeed_val + signedVal;

-

-  /* signedVal in uA here */

-  signedVal *= iscale1;

-  signedVal /= 100;

-  signedVal *= iscale2;

-  signedVal /= 10;

-

-  if(signedVal < 0)

-  {

-    const_rfeed_val = (signedVal)+ (1L<<29);

-  }

-  else

-  {

-    const_rfeed_val = signedVal & 0x1FFFFFFF;

-  }

-

-  /* CONST_ILIM */

-  const_ilim_val = i_ilim_val;

-

-  /* compute RAM values */

-  v_vlim_val *= vscale1;

-  v_vlim_val /= 100;

-  v_vlim_val *= vscale2;

-  v_vlim_val /= 10;

-

-  v_rfeed_val *= vscale1;

-  v_rfeed_val /= 100;

-  v_rfeed_val *= vscale2;

-  v_rfeed_val /= 10;

-

-  v_ilim_val *= vscale1;

-  v_ilim_val /= 100;

-  v_ilim_val *= vscale2;

-  v_ilim_val /= 10;

-

-  const_ilim_val *= iscale1;

-  const_ilim_val /= 100;

-  const_ilim_val *= iscale2;

-  const_ilim_val /= 10;

-

-  i_vlim_val *= iscale1;

-  i_vlim_val /= 100;

-  i_vlim_val *= iscale2;

-  i_vlim_val /= 10;

-

-  Si3218x_DCfeed_Presets[preset].slope_vlim = 0x18842BD7L;

-  Si3218x_DCfeed_Presets[preset].slope_rfeed = 0x1E8886DEL;

-  Si3218x_DCfeed_Presets[preset].slope_ilim = 0x40A0E0L;

-  Si3218x_DCfeed_Presets[preset].delta1 = 0x1EABA1BFL;

-  Si3218x_DCfeed_Presets[preset].delta2 = 0x1EF744EAL;

-  Si3218x_DCfeed_Presets[preset].v_vlim = v_vlim_val;

-  Si3218x_DCfeed_Presets[preset].v_rfeed = v_rfeed_val;

-  Si3218x_DCfeed_Presets[preset].v_ilim = v_ilim_val;

-  Si3218x_DCfeed_Presets[preset].const_rfeed = const_rfeed_val;

-  Si3218x_DCfeed_Presets[preset].const_ilim = const_ilim_val;

-  Si3218x_DCfeed_Presets[preset].i_vlim = i_vlim_val;

-

-  return RC_NONE;

-#else

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  SILABS_UNREFERENCED_PARAMETER(preset);

-  SILABS_UNREFERENCED_PARAMETER(v_vlim_val);

-  SILABS_UNREFERENCED_PARAMETER(i_ilim_val);

-  return RC_IGNORE;

-#endif

-}

-

-/*

-** Function: PROSLIC_dbgSetDCFeedVopen

-**

-** Description:

-** provisionally function for setting up

-** dcfeed given desired open circuit voltage.

-** Entry I_ILIM value will be used.

-*/

-int Si3218x_dbgSetDCFeedVopen (proslicChanType *pProslic, uInt32 v_vlim_val,

-                               int32 preset)

-{

-#ifndef DISABLE_DCFEED_SETUP

-  uInt32 i_ilim_val;

-  uInt32 iscale1 = 913;

-  uInt32 iscale2 = 334;    /* 913x334 = 304942 */

-

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  /* Read present CONST_ILIM value */

-  i_ilim_val = Si3218x_DCfeed_Presets[preset].const_ilim;

-

-

-  i_ilim_val /= iscale2;

-  i_ilim_val /= iscale1;

-

-  return Si3218x_dbgSetDCFeed(pProslic,v_vlim_val,i_ilim_val,preset);

-#else

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  SILABS_UNREFERENCED_PARAMETER(preset);

-  SILABS_UNREFERENCED_PARAMETER(v_vlim_val);

-  return RC_IGNORE;

-#endif

-}

-

-/*

-** Function: PROSLIC_dbgSetDCFeedIloop

-**

-** Description:

-** provisionally function for setting up

-** dcfeed given desired loop current.

-** Entry V_VLIM value will be used.

-*/

-int Si3218x_dbgSetDCFeedIloop (proslicChanType *pProslic, uInt32 i_ilim_val,

-                               int32 preset)

-{

-#ifndef DISABLE_DCFEED_SETUP

-

-  uInt32 v_vlim_val;

-  uInt32 vscale1 = 1386;

-  uInt32 vscale2 =

-    1422;   /* 1386x1422 = 1970892 broken down to minimize trunc err */

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  /* Read present V_VLIM value */

-  v_vlim_val = Si3218x_DCfeed_Presets[preset].v_vlim;

-

-  v_vlim_val /= vscale2;

-  v_vlim_val /= vscale1;

-

-  return Si3218x_dbgSetDCFeed(pProslic,v_vlim_val,i_ilim_val, preset);

-#else

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  SILABS_UNREFERENCED_PARAMETER(preset);

-  SILABS_UNREFERENCED_PARAMETER(i_ilim_val);

-  return RC_IGNORE;

-#endif

-}

-

-typedef struct

-{

-  uInt8   freq;

-  ramData ringfr;      /* trise scale for trap */

-  uInt32  ampScale;

-} ProSLIC_SineRingFreqLookup;

-

-typedef struct

-{

-  uInt8    freq;

-  ramData  rtacth;

-  ramData rtper;

-  ramData rtdb;

-} ProSLIC_SineRingtripLookup;

-

-typedef struct

-{

-  uInt8   freq;

-  uInt16  cfVal[6];

-} ProSLIC_TrapRingFreqLookup;

-

-typedef struct

-{

-  uInt8   freq;

-  ramData rtper;

-  ramData rtdb;

-  uInt32  rtacth[6];

-} ProSLIC_TrapRingtripLookup;

-

-static  const ProSLIC_SineRingFreqLookup sineRingFreqTable[] =

-    /*  Freq RINGFR, vScale */

-  {

-    {15, 0x7F6E930L, 18968L},

-    {16, 0x7F5A8E0L, 20234L},

-    {20, 0x7EFD9D5L, 25301L},

-    {22, 0x7EC770AL, 27843L},

-    {23, 0x7EAA6E2L, 29113L},

-    {25, 0x7E6C925L, 31649L},

-    {30, 0x7DBB96BL, 38014L},

-    {34, 0x7D34155L, 42270L}, /* Actually 33.33Hz */

-    {35, 0x7CEAD72L, 44397L},

-    {40, 0x7BFA887L, 50802L},

-    {45, 0x7AEAE74L, 57233L},

-    {50, 0x79BC384L, 63693L},

-    {0,0,0}

-  }; /* terminator */

-

-static const ProSLIC_SineRingtripLookup sineRingtripTable[] =

-    /*  Freq rtacth */

-  {

-    {15, 11440000L, 0x6A000L, 0x4000L },

-    {16, 10810000L, 0x64000L, 0x4000L },

-    {20, 8690000L,  0x50000L, 0x8000L },

-    {22, 7835000L,  0x48000L, 0x8000L },

-    {23, 7622000L,  0x46000L, 0x8000L },

-    {25, 6980000L,  0x40000L, 0xA000L },

-    {30, 5900000L,  0x36000L, 0xA000L },

-    {34, 10490000L, 0x60000L, 0x6000L }, /* Actually 33.33 */

-    {35, 10060000L, 0x5C000L, 0x6000L },

-    {40, 8750000L,  0x50000L, 0x8000L },

-    {45, 7880000L,  0x48000L, 0x8000L },

-    {50, 7010000L,  0x40000L, 0xA000L },

-    {0,0L, 0L, 0L}

-  }; /* terminator */

-

-static const ProSLIC_TrapRingFreqLookup trapRingFreqTable[] =

-    /*  Freq multCF11 multCF12 multCF13 multCF14 multCF15 multCF16*/

-  {

-    {15, {69,122, 163, 196, 222,244}},

-    {16, {65,115, 153, 184, 208,229}},

-    {20, {52,92, 122, 147, 167,183}},

-    {22, {47,83, 111, 134, 152,166}},

-    {23, {45,80, 107, 128, 145,159}},

-    {25, {42,73, 98, 118, 133,146}},

-    {30, {35,61, 82, 98, 111,122}},

-    {34, {31,55, 73, 88, 100,110}},

-    {35, {30,52, 70, 84, 95,104}},

-    {40, {26,46, 61, 73, 83,91}},

-    {45, {23,41, 54, 65, 74,81}},

-    {50, {21,37, 49, 59, 67,73}},

-    {0,{0L,0L,0L,0L}} /* terminator */

-  };

-

-

-static const ProSLIC_TrapRingtripLookup trapRingtripTable[] =

-    /*  Freq rtper rtdb rtacthCR11 rtacthCR12 rtacthCR13 rtacthCR14 rtacthCR15 rtacthCR16*/

-  {

-    {15, 0x6A000L,  0x4000L, {16214894L, 14369375L, 12933127L, 11793508L, 10874121L, 10121671L}},

-    {16, 0x64000L,  0x4000L, {15201463L, 13471289L, 12124806L, 11056414L, 10194489L, 9489067L}},

-    {20, 0x50000L,  0x6000L, {12161171L, 10777031L, 9699845L, 8845131L, 8155591L, 7591253L}},

-    {22, 0x48000L,  0x6000L, {11055610L, 9797301L, 8818041L, 8041028L, 7414174L, 6901139L}},

-    {23, 0x46000L,  0x6000L, {10574931L, 9371331L, 8434648L, 7691418L, 7091818L, 6601090L}},

-    {25, 0x40000L,  0x8000L, {9728937L, 8621625L, 7759876L, 7076105L, 6524473L, 6073003L}},

-    {30, 0x36000L,  0x8000L, {8107447L, 7184687L, 6466563L, 5896754L, 5437061L, 5060836L}},

-    {34, 0x60000L,  0x6000L, {7297432L, 6466865L, 5820489L, 5307609L, 4893844L, 4555208L}},

-    {35, 0x5C000L,  0x6000L, {6949240L, 6158303L, 5542769L, 5054361L, 4660338L, 4337859L}},

-    {40, 0x50000L,  0x6000L, {6080585L, 5388516L, 4849923L, 4422565L, 4077796L, 3795627L}},

-    {45, 0x48000L,  0x6000L, {5404965L, 4789792L, 4311042L, 3931169L, 3624707L, 3373890L}},

-    {50, 0x40000L,  0x8000L, {4864468L, 4310812L, 3879938L, 3538052L, 3262236L, 3036501L}},

-    {0,0x0L, 0x0L, {0L,0L,0L,0L}} /* terminator */

-  };

-

-/*

-** Function: PROSLIC_dbgRingingSetup

-**

-** Description:

-** Provision function for setting up

-** Ring type, frequency, amplitude and dc offset.

-** Main use will be by peek/poke applications.

-*/

-int Si3218x_dbgSetRinging (proslicChanType *pProslic,

-                           ProSLIC_dbgRingCfg *ringCfg, int preset)

-{

-#ifndef DISABLE_RING_SETUP

-  int errVal,i=0;

-  uInt32 vScale = 1608872L;   /* (2^28/170.25)*((100+4903)/4903) */

-  ramData dcdcVminTmp;

-

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  errVal = RC_NONE;

-

-  switch(ringCfg->ringtype)

-  {

-    case ProSLIC_RING_SINE:

-      i=0;

-      do

-      {

-        if(sineRingFreqTable[i].freq >= ringCfg->freq)

-        {

-          break;

-        }

-        i++;

-      }

-      while (sineRingFreqTable[i].freq);

-

-      /* Set to maximum value if exceeding maximum value from table */

-      if(sineRingFreqTable[i].freq == 0)

-      {

-        i--;

-        errVal = RC_RING_V_LIMITED;

-      }

-

-      /* Update RINGFR RINGAMP, RINGOFFSET, and RINGCON */

-      Si3218x_Ring_Presets[preset].freq = sineRingFreqTable[i].ringfr;

-      Si3218x_Ring_Presets[preset].amp = ringCfg->amp * sineRingFreqTable[i].ampScale;

-      Si3218x_Ring_Presets[preset].offset = ringCfg->offset * vScale;

-      Si3218x_Ring_Presets[preset].phas = 0L;

-

-      /* Don't alter anything in RINGCON other than clearing the TRAP bit */

-      Si3218x_Ring_Presets[preset].ringcon &= 0xFE;

-

-      Si3218x_Ring_Presets[preset].rtper = sineRingtripTable[i].rtper;

-      Si3218x_Ring_Presets[preset].rtacdb = sineRingtripTable[i].rtdb;

-      Si3218x_Ring_Presets[preset].rtdcdb = sineRingtripTable[i].rtdb;

-      Si3218x_Ring_Presets[preset].rtdcth = 0xFFFFFFFL;

-      Si3218x_Ring_Presets[preset].rtacth = sineRingtripTable[i].rtacth;

-      break;

-

-    case ProSLIC_RING_TRAP_CF11:

-    case ProSLIC_RING_TRAP_CF12:

-    case ProSLIC_RING_TRAP_CF13:

-    case ProSLIC_RING_TRAP_CF14:

-    case ProSLIC_RING_TRAP_CF15:

-    case ProSLIC_RING_TRAP_CF16:

-      i=0;

-      do

-      {

-        if(trapRingFreqTable[i].freq >= ringCfg->freq)

-        {

-          break;

-        }

-        i++;

-      }

-      while (trapRingFreqTable[i].freq);

-

-      /* Set to maximum value if exceeding maximum value from table */

-      if(trapRingFreqTable[i].freq == 0)

-      {

-        i--;

-        errVal = RC_RING_V_LIMITED;

-      }

-

-      /* Update RINGFR RINGAMP, RINGOFFSET, and RINGCON */

-      Si3218x_Ring_Presets[preset].amp = ringCfg->amp * vScale;

-      Si3218x_Ring_Presets[preset].freq =

-        Si3218x_Ring_Presets[preset].amp/trapRingFreqTable[i].cfVal[ringCfg->ringtype];

-      Si3218x_Ring_Presets[preset].offset = ringCfg->offset * vScale;

-      Si3218x_Ring_Presets[preset].phas = 262144000L/trapRingFreqTable[i].freq;

-

-      /* Don't alter anything in RINGCON other than setting the TRAP bit */

-      Si3218x_Ring_Presets[preset].ringcon |= 0x01;

-

-      /* RTPER and debouce timers  */

-      Si3218x_Ring_Presets[preset].rtper = trapRingtripTable[i].rtper;

-      Si3218x_Ring_Presets[preset].rtacdb = trapRingtripTable[i].rtdb;

-      Si3218x_Ring_Presets[preset].rtdcdb = trapRingtripTable[i].rtdb;

-

-

-      Si3218x_Ring_Presets[preset].rtdcth = 0xFFFFFFFL;

-      Si3218x_Ring_Presets[preset].rtacth =

-        trapRingtripTable[i].rtacth[ringCfg->ringtype];

-

-

-      break;

-  }

-

-  /*

-  ** DCDC tracking sluggish under light load at higher ring freq.

-  ** Reduce tracking depth above 40Hz.  This should have no effect

-  ** if using the Buck-Boost architecture.

-  */

-  if((sineRingFreqTable[i].freq >= 40)

-      ||(Si3218x_General_Configuration.bom_option == BO_DCDC_BUCK_BOOST))

-  {

-    dcdcVminTmp = ringCfg->amp + ringCfg->offset;

-    dcdcVminTmp *= 1000;

-    dcdcVminTmp *= SCALE_V_MADC;

-    Si3218x_Ring_Presets[preset].dcdc_vref_min_rng = dcdcVminTmp;

-  }

-  else

-  {

-    Si3218x_Ring_Presets[preset].dcdc_vref_min_rng = 0x1800000L;

-  }

-

-  return errVal;

-#else

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-  SILABS_UNREFERENCED_PARAMETER(preset);

-  SILABS_UNREFERENCED_PARAMETER(ringCfg);

-  return RC_IGNORE;

-#endif

-}

-

-

-typedef struct

-{

-  int32   gain;

-  uInt32 scale;

-} ProSLIC_GainScaleLookup;

-

-#ifndef ENABLE_HIRES_GAIN

-static int Si3218x_dbgSetGain (proslicChanType *pProslic, int32 gain,

-                               int impedance_preset, int tx_rx_sel)

-{

-  int errVal = 0;

-  int32 i;

-  int32 gain_pga, gain_eq;

-  const ProSLIC_GainScaleLookup gainScaleTable[]

-  =  /*  gain, scale=10^(gain/20) */

-  {

-    {-30, 32},

-    {-29, 35},

-    {-28, 40},

-    {-27, 45},

-    {-26, 50},

-    {-25, 56},

-    {-24, 63},

-    {-23, 71},

-    {-22, 79},

-    {-21, 89},

-    {-20, 100},

-    {-19, 112},

-    {-18, 126},

-    {-17, 141},

-    {-16, 158},

-    {-15, 178},

-    {-14, 200},

-    {-13, 224},

-    {-12, 251},

-    {-11, 282},

-    {-10, 316},

-    {-9, 355},

-    {-8, 398},

-    {-7, 447},

-    {-6, 501},

-    {-5, 562},

-    {-4, 631},

-    {-3, 708},

-    {-2, 794},

-    {-1, 891},

-    {0, 1000},

-    {1, 1122},

-    {2, 1259},

-    {3, 1413},

-    {4, 1585},

-    {5, 1778},

-    {6, 1995},

-    {0xff,0}  /* terminator */

-  };

-

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-

-  /* Test against max gain */

-  if (gain > PROSLIC_EXTENDED_GAIN_MAX)

-  {

-    errVal = RC_GAIN_OUT_OF_RANGE;

-    DEBUG_PRINT(pProslic, "%sdbgSetGain: Gain %d out of range\n", LOGPRINT_PREFIX,

-                (int)gain);

-    gain = PROSLIC_EXTENDED_GAIN_MAX; /* Clamp to maximum */

-  }

-

-  /* Test against min gain */

-  if (gain < PROSLIC_GAIN_MIN)

-  {

-    errVal = RC_GAIN_OUT_OF_RANGE;

-    DEBUG_PRINT(pProslic, "%sdbgSetGain: Gain %d out of range\n", LOGPRINT_PREFIX,

-                (int)gain);

-    gain = PROSLIC_GAIN_MIN; /* Clamp to minimum */

-  }

-

-  /* Distribute gain */

-  if(gain == 0)

-  {

-    gain_pga = 0;

-    gain_eq = 0;

-  }

-  else if(gain > PROSLIC_GAIN_MAX)

-  {

-    if(tx_rx_sel == TXACGAIN_SEL)

-    {

-      gain_pga = PROSLIC_GAIN_MAX;

-      gain_eq = gain - PROSLIC_GAIN_MAX;

-    }

-    else

-    {

-      gain_pga = gain - PROSLIC_GAIN_MAX;

-      gain_eq = PROSLIC_GAIN_MAX;

-    }

-  }

-  else if(gain > 0)

-  {

-    if(tx_rx_sel == TXACGAIN_SEL)

-    {

-      gain_pga = gain;

-      gain_eq  = 0;

-    }

-    else

-    {

-      gain_pga = 0;

-      gain_eq = gain;

-    }

-  }

-  else

-  {

-    if(tx_rx_sel == TXACGAIN_SEL)

-    {

-      gain_pga = 0;

-      gain_eq  = gain;

-    }

-    else

-    {

-      gain_pga = gain;

-      gain_eq = 0;

-    }

-

-  }

-

-

-  /*

-  ** Lookup PGA Appropriate PGA Gain

-  */

-  i=0;

-  do

-  {

-    if(gainScaleTable[i].gain >= gain_pga)   /* was gain_1 */

-    {

-      break;

-    }

-    i++;

-  }

-  while (gainScaleTable[i].gain!=0xff);

-

-  /* Set to maximum value if exceeding maximum value from table */

-  if(gainScaleTable[i].gain == 0xff)

-  {

-    i--;

-    errVal = RC_GAIN_DELTA_TOO_LARGE;

-  }

-

-  if(tx_rx_sel == TXACGAIN_SEL)

-  {

-    Si3218x_audioGain_Presets[0].acgain =

-      (Si3218x_Impedance_Presets[impedance_preset].txgain/1000)

-      *gainScaleTable[i].scale;

-  }

-  else

-  {

-    Si3218x_audioGain_Presets[1].acgain =

-      (Si3218x_Impedance_Presets[impedance_preset].rxgain/1000)

-      *gainScaleTable[i].scale;

-  }

-

-

-  /*

-  ** Lookup EQ Gain

-  */

-  i=0;

-  do

-  {

-    if(gainScaleTable[i].gain >= gain_eq) /* was gain_2 */

-    {

-      break;

-    }

-    i++;

-  }

-  while (gainScaleTable[i].gain!=0xff);

-

-  /* Set to maximum value if exceeding maximum value from table */

-  if(gainScaleTable[i].gain == 0xff)

-  {

-    i--;

-    errVal = RC_GAIN_DELTA_TOO_LARGE;

-  }

-

-  if(tx_rx_sel == TXACGAIN_SEL)

-  {

-    /*sign extend negative numbers*/

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c0 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c0 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c1 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c1 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c2 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c2 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c3 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c3 |= 0xf0000000L;

-    }

-

-    Si3218x_audioGain_Presets[0].aceq_c0 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c0/1000)

-                                           *gainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[0].aceq_c1 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c1/1000)

-                                           *gainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[0].aceq_c2 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c2/1000)

-                                           *gainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[0].aceq_c3 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c3/1000)

-                                           *gainScaleTable[i].scale;

-  }

-  else

-  {

-    /*sign extend negative numbers*/

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c0 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c0 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c1 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c1 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c2 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c2 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c3 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c3 |= 0xf0000000L;

-    }

-

-    Si3218x_audioGain_Presets[1].aceq_c0 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c0/1000)

-                                           *gainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[1].aceq_c1 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c1/1000)

-                                           *gainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[1].aceq_c2 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c2/1000)

-                                           *gainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[1].aceq_c3 = ((int32)

-                                            Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c3/1000)

-                                           *gainScaleTable[i].scale;

-  }

-

-

-  return errVal;

-}

-#else /* ENABLE_HIRES_GAIN */

-/*

-** Function: Si3218x_dbgSetGainHiRes()

-**

-** Description:

-** Provision function for setting up

-** TX and RX gain with 0.1dB resolution instead

-** of 1.0dB resolution

-*/

-static int Si3218x_dbgSetGainHiRes (proslicChanType *pProslic, int32 gain,

-                                    int impedance_preset, int tx_rx_sel)

-{

-  int errVal = 0;

-  int32 i;

-  int32 coarseGainIndex, fineGainIndex;

-  int32 gain_pga, gain_eq;

-  int32 coarseGain, fineGain;

-  int32 tmp;

-  const ProSLIC_GainScaleLookup coarseGainScaleTable[]

-  =  /*  gain, scale=10^(gain/20) */

-  {

-    {-30, 32},

-    {-29, 35},

-    {-28, 40},

-    {-27, 45},

-    {-26, 50},

-    {-25, 56},

-    {-24, 63},

-    {-23, 71},

-    {-22, 79},

-    {-21, 89},

-    {-20, 100},

-    {-19, 112},

-    {-18, 126},

-    {-17, 141},

-    {-16, 158},

-    {-15, 178},

-    {-14, 200},

-    {-13, 224},

-    {-12, 251},

-    {-11, 282},

-    {-10, 316},

-    {-9, 355},

-    {-8, 398},

-    {-7, 447},

-    {-6, 501},

-    {-5, 562},

-    {-4, 631},

-    {-3, 708},

-    {-2, 794},

-    {-1, 891},

-    {0, 1000},

-    {1, 1122},

-    {2, 1259},

-    {3, 1413},

-    {4, 1585},

-    {5, 1778},

-    {6, 1995},

-    {0xff,0}  /* terminator */

-  };

-

-  const ProSLIC_GainScaleLookup fineGainScaleTable[]

-  =  /*  gain, scale=10^(gain/20) */

-  {

-    {-9, 902},

-    {-8, 912},

-    {-7, 923},

-    {-6, 933},

-    {-5, 944},

-    {-4, 955},

-    {-3, 966},

-    {-2, 977},

-    {-1, 989},

-    {0, 1000},

-    {1, 1012},

-    {2, 1023},

-    {3, 1035},

-    {4, 1047},

-    {5, 1059},

-    {6, 1072},

-    {7, 1084},

-    {8, 1096},

-    {9, 1109},

-    {0xff,0}  /* terminator */

-  };

-

-  SILABS_UNREFERENCED_PARAMETER(pProslic);

-

-  /* Test against max gain */

-  if (gain > (PROSLIC_GAIN_MAX*10L))

-  {

-    errVal = RC_GAIN_OUT_OF_RANGE;

-    DEBUG_PRINT(pProslic, "%sdbgSetGain: Gain %d dB*10 out of range\n",

-                LOGPRINT_PREFIX, gain);

-    gain = (PROSLIC_GAIN_MAX*10L); /* Clamp to maximum */

-  }

-

-  /* Test against min gain */

-  if (gain < (PROSLIC_GAIN_MIN*10L))

-  {

-    errVal = RC_GAIN_OUT_OF_RANGE;

-    DEBUG_PRINT(pProslic, "%sdbgSetGain: Gain %d dB*10 out of range\n",

-                LOGPRINT_PREFIX, gain);

-    gain = (PROSLIC_GAIN_MIN*10); /* Clamp to minimum */

-  }

-

-  /* Distribute gain */

-  coarseGain = gain/10L;

-  fineGain = gain - (coarseGain*10L);

-

-  /* Distribute coarseGain */

-  if(coarseGain == 0)

-  {

-    gain_pga = 0;

-    gain_eq = 0;

-  }

-  else if(coarseGain > 0)

-  {

-    if(tx_rx_sel == TXACGAIN_SEL)

-    {

-      gain_pga = coarseGain;

-      gain_eq  = 0;

-    }

-    else

-    {

-      gain_pga = 0;

-      gain_eq = coarseGain;

-    }

-  }

-  else

-  {

-    if(tx_rx_sel == TXACGAIN_SEL)

-    {

-      gain_pga = 0;

-      gain_eq  = coarseGain;

-    }

-    else

-    {

-      gain_pga = coarseGain;

-      gain_eq = 0;

-    }

-  }

-

-  /*

-  ** Lookup PGA Appopriate PGA Gain

-  */

-  i=0;

-  do

-  {

-    if(coarseGainScaleTable[i].gain >= gain_pga)

-    {

-      break;

-    }

-    i++;

-  }

-  while (coarseGainScaleTable[i].gain!=0xff);

-

-  /* Set to maximum value if exceeding maximum value from table */

-  if(coarseGainScaleTable[i].gain == 0xff)

-  {

-    i--;

-    errVal = RC_GAIN_DELTA_TOO_LARGE;

-  }

-

-  coarseGainIndex = i;  /* Store coarse index */

-

-  /* Find fineGain */

-  i = 0;

-  do

-  {

-    if(fineGainScaleTable[i].gain >= fineGain)

-    {

-      break;

-    }

-    i++;

-  }

-  while (fineGainScaleTable[i].gain!=0xff);

-

-  /* Set to maximum value if exceeding maximum value from table */

-  if(fineGainScaleTable[i].gain == 0xff)

-  {

-    i--;

-    errVal = RC_GAIN_DELTA_TOO_LARGE;

-  }

-

-  fineGainIndex = i;

-

-  if(tx_rx_sel == TXACGAIN_SEL)

-  {

-    Si3218x_audioGain_Presets[0].acgain = ((

-        Si3218x_Impedance_Presets[impedance_preset].txgain/1000L)

-                                           *coarseGainScaleTable[coarseGainIndex].scale);

-  }

-  else

-  {

-    Si3218x_audioGain_Presets[1].acgain = ((

-        Si3218x_Impedance_Presets[impedance_preset].rxgain/1000L)

-        * coarseGainScaleTable[coarseGainIndex].scale)/1000L 

-        * fineGainScaleTable[fineGainIndex].scale;

-  }

-

-  /*

-  ** Lookup EQ Gain

-  */

-  i=0;

-  do

-  {

-    if(coarseGainScaleTable[i].gain >= gain_eq)

-    {

-      break;

-    }

-    i++;

-  }

-  while (coarseGainScaleTable[i].gain!=0xff);

-

-  /* Set to maximum value if exceeding maximum value from table */

-  if(coarseGainScaleTable[i].gain == 0xff)

-  {

-    i--;

-    errVal = RC_GAIN_DELTA_TOO_LARGE;

-  }

-

-  coarseGainIndex = i;  /* Store coarse index */

-

-  if(tx_rx_sel == TXACGAIN_SEL)

-  {

-    /*sign extend negative numbers*/

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c0 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c0 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c1 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c1 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c2 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c2 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c3 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c3 |= 0xf0000000L;

-    }

-

-    tmp = (((int32)

-            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c0/1000L)

-           *coarseGainScaleTable[coarseGainIndex].scale);

-    tmp = tmp / (int32)1000L;

-    tmp = tmp * (int32)fineGainScaleTable[fineGainIndex].scale;

-    Si3218x_audioGain_Presets[0].aceq_c0 = tmp;

-

-    tmp = (((int32)

-            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c1/1000L)

-           *coarseGainScaleTable[coarseGainIndex].scale);

-    tmp = tmp / (int32)1000L;

-    tmp = tmp * (int32)fineGainScaleTable[fineGainIndex].scale;

-    Si3218x_audioGain_Presets[0].aceq_c1 = tmp;

-

-    tmp = (((int32)

-            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c2/1000L)

-           *coarseGainScaleTable[coarseGainIndex].scale);

-    tmp = tmp / (int32)1000L;

-    tmp = tmp * (int32)fineGainScaleTable[fineGainIndex].scale;

-    Si3218x_audioGain_Presets[0].aceq_c2 = tmp;

-

-    tmp = (((int32)

-            Si3218x_Impedance_Presets[impedance_preset].audioEQ.txaceq_c3/1000L)

-           *coarseGainScaleTable[coarseGainIndex].scale);

-    tmp = tmp / (int32)1000L;

-    tmp = tmp * (int32)fineGainScaleTable[fineGainIndex].scale;

-    Si3218x_audioGain_Presets[0].aceq_c3 = tmp;

-  }

-  else

-  {

-    /*sign extend negative numbers*/

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c0 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c0 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c1 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c1 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c2 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c2 |= 0xf0000000L;

-    }

-    if (Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c3 & 0x10000000L)

-    {

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c3 |= 0xf0000000L;

-    }

-

-    Si3218x_audioGain_Presets[1].aceq_c0 = ((int32)

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c0/1000)

-                                           *coarseGainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[1].aceq_c1 = ((int32)

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c1/1000)

-      * coarseGainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[1].aceq_c2 = ((int32)

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c2/1000)

-      * coarseGainScaleTable[i].scale;

-    Si3218x_audioGain_Presets[1].aceq_c3 = ((int32)

-      Si3218x_Impedance_Presets[impedance_preset].audioEQ.rxaceq_c3/1000)

-      * coarseGainScaleTable[i].scale;

-  }

-

-  return errVal;

-}

-#endif /* ENABLE_HIRES_GAIN */

-

-/*

-** Function: PROSLIC_dbgSetTXGain

-**

-** Description:

-** Provision function for setting up

-** TX gain

-*/

-

-int Si3218x_dbgSetTXGain (proslicChanType *pProslic, int32 gain,

-                          int impedance_preset, int audio_gain_preset)

-{

-  SILABS_UNREFERENCED_PARAMETER(audio_gain_preset);

-#ifdef ENABLE_HIRES_GAIN

-  return Si3218x_dbgSetGainHiRes(pProslic,gain,impedance_preset,TXACGAIN_SEL);

-#else

-  return Si3218x_dbgSetGain(pProslic,gain,impedance_preset,TXACGAIN_SEL);

-#endif

-}

-

-/*

-** Function: PROSLIC_dbgSetRXGain

-**

-** Description:

-** Provision function for setting up

-** RX gain

-*/

-int Si3218x_dbgSetRXGain (proslicChanType *pProslic, int32 gain,

-                          int impedance_preset, int audio_gain_preset)

-{

-  SILABS_UNREFERENCED_PARAMETER(audio_gain_preset);

-#ifdef ENABLE_HIRES_GAIN

-  return Si3218x_dbgSetGainHiRes(pProslic,gain,impedance_preset,RXACGAIN_SEL);

-#else

-  return Si3218x_dbgSetGain(pProslic,gain,impedance_preset,RXACGAIN_SEL);

-#endif

-}

-

-/*

-** Function: Si3218x_GetRAMScale

-**

-** Description:

-** Read scale factor for passed RAM location

-**

-** Return Value:

-** int32 scale

-*/

-static int32 Si3218x_GetRAMScale(uInt16 addr)

-{

-  int32 scale;

-

-  switch(addr)

-  {

-    case SI3218X_RAM_MADC_ILOOP:

-    case SI3218X_RAM_MADC_ITIP:

-    case SI3218X_RAM_MADC_IRING:

-    case SI3218X_RAM_MADC_ILONG:

-      scale = SCALE_I_MADC;

-      break;

-

-    case SI3218X_RAM_MADC_VTIPC:

-    case SI3218X_RAM_MADC_VRINGC:

-    case SI3218X_RAM_MADC_VBAT:

-    case SI3218X_RAM_MADC_VDC:

-    case SI3218X_RAM_MADC_VDC_OS:

-    case SI3218X_RAM_MADC_VLONG:

-    case SI3218X_RAM_VDIFF_SENSE:

-    case SI3218X_RAM_VDIFF_FILT:

-    case SI3218X_RAM_VDIFF_COARSE:

-    case SI3218X_RAM_VTIP:

-    case SI3218X_RAM_VRING:

-      scale = SCALE_V_MADC;

-      break;

-

-    default:

-      scale = 1;

-      break;

-  }

-

-  return scale;

-}

-

-/*

-** Function: Si3218x_ReadMADCScaled

-**

-** Description:

-** Read MADC (or other sensed voltages/currents) and

-** return scaled value in int32 format.

-**

-** Return Value:

-** int32 voltage in mV or

-** int32 current in uA

-*/

-int32 Si3218x_ReadMADCScaled(proslicChanType_ptr pProslic,uInt16 addr,

-                             int32 scale)

-{

-  int32 data;

-

-  /*

-  ** Read 29-bit RAM and sign extend to 32-bits

-  */

-  data = ReadRAM(pProHW,pProslic->channel,addr);

-  if(data & 0x10000000L)

-  {

-    data |= 0xF0000000L;

-  }

-

-  /*

-  ** Scale to provided value, or use defaults if scale = 0

-  */

-  if(scale == 0)

-  {

-    scale = Si3218x_GetRAMScale(addr);

-  }

-

-  data /= scale;

-

-  return data;

-}

-

-/*

-** Function: Si3218x_LineMonitor

-**

-** Description:

-** Monitor line voltages and currents

-*/

-int Si3218x_LineMonitor(proslicChanType *pProslic, proslicMonitorType *monitor)

-{

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;

-  }

-

-  if(pProslic->channelEnable)

-  {

-    monitor->vtr    = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_VDIFF_FILT);

-    if(monitor->vtr & 0x10000000L)

-    {

-      monitor->vtr |= 0xf0000000L;

-    }

-    monitor->vtr /= SCALE_V_MADC;

-

-    monitor->vtip    = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_VTIP);

-    if(monitor->vtip & 0x10000000L)

-    {

-      monitor->vtip |= 0xf0000000L;

-    }

-    monitor->vtip /= SCALE_V_MADC;

-

-    monitor->vring    = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_VRING);

-    if(monitor->vring & 0x10000000L)

-    {

-      monitor->vring |= 0xf0000000L;

-    }

-    monitor->vring /= SCALE_V_MADC;

-

-    monitor->vlong    = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_VLONG);

-    if(monitor->vlong & 0x10000000L)

-    {

-      monitor->vlong |= 0xf0000000L;

-    }

-    monitor->vlong /= SCALE_V_MADC;

-

-    monitor->vbat    = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_VBAT);

-    if(monitor->vbat & 0x10000000L)

-    {

-      monitor->vbat |= 0xf0000000L;

-    }

-    monitor->vbat /= SCALE_V_MADC;

-

-    monitor->vdc = 0; /* Si3218x has no SVDC */

-

-    monitor->itr  = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_ILOOP);

-    if(monitor->itr & 0x10000000L)

-    {

-      monitor->itr |= 0xf0000000L;

-    }

-    monitor->itr /= SCALE_I_MADC;

-

-    monitor->itip  = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_ITIP);

-    if(monitor->itip & 0x10000000L)

-    {

-      monitor->itip |= 0xf0000000L;

-    }

-    monitor->itip /= SCALE_I_MADC;

-

-    monitor->iring  = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_IRING);

-    if(monitor->iring & 0x10000000L)

-    {

-      monitor->iring |= 0xf0000000L;

-    }

-    monitor->iring /= SCALE_I_MADC;

-

-    monitor->ilong  = ReadRAM(pProHW,pProslic->channel,SI3218X_RAM_MADC_ILONG);

-    if(monitor->ilong & 0x10000000L)

-    {

-      monitor->ilong |= 0xf0000000L;

-    }

-    monitor->ilong /= SCALE_I_MADC;

-

-    monitor->p_hvic  = ReadRAM(pProHW,pProslic->channel,

-                               SI3218X_RAM_P_Q1_D); /* P_HVIC_LPF */

-    if(monitor->p_hvic & 0x10000000L)

-    {

-      monitor->p_hvic |= 0xf0000000L;

-    }

-    monitor->p_hvic /= SCALE_P_MADC;

-  }

-

-  return RC_NONE;

-}

-

-/*

-** Function: Si3218x_PSTNCheck

-**

-** Description:

-** Continuous monitoring of longitudinal current.

-** If an average of N samples exceed avgThresh or a

-** single sample exceeds singleThresh, the linefeed

-** is forced into the open state.

-**

-** This protects the port from connecting to a live

-** pstn line (faster than power alarm).

-**

-*/

-int Si3218x_PSTNCheck (proslicChanType *pProslic,

-                       proslicPSTNCheckObjType *pPSTNCheck)

-{

-  uInt8 i;

-

-  if( (pProslic->channelType != PROSLIC)

-      || (pPSTNCheck->samples == 0) )

-  {

-    return RC_NONE;    /* Ignore DAA channels */

-  }

-

-  /* Adjust buffer index */

-  if(pPSTNCheck->count >= pPSTNCheck->samples)

-  {

-    pPSTNCheck->buffFull = TRUE;

-    pPSTNCheck->count = 0;   /* reset buffer ptr */

-  }

-

-  /* Read next sample */

-  pPSTNCheck->ilong[pPSTNCheck->count]  = ReadRAM(pProHW,pProslic->channel,

-                                          SI3218X_RAM_MADC_ILONG);

-  if(pPSTNCheck->ilong[pPSTNCheck->count] & 0x10000000L)

-  {

-    pPSTNCheck->ilong[pPSTNCheck->count] |= 0xf0000000L;

-  }

-  pPSTNCheck->ilong[pPSTNCheck->count] /= SCALE_I_MADC;

-

-  /* Monitor magnitude only */

-  if(pPSTNCheck->ilong[pPSTNCheck->count] < 0)

-  {

-    pPSTNCheck->ilong[pPSTNCheck->count] = -pPSTNCheck->ilong[pPSTNCheck->count];

-  }

-

-  /* Quickly test for single measurement violation */

-  if(pPSTNCheck->ilong[pPSTNCheck->count] > pPSTNCheck->singleThresh)

-  {

-    return RC_PSTN_CHECK_SINGLE_FAIL;  /* fail */

-  }

-

-  /* Average once buffer is full */

-  if(pPSTNCheck->buffFull == TRUE)

-  {

-    pPSTNCheck->avgIlong = 0;

-    for(i=0; i<pPSTNCheck->samples; i++)

-    {

-      pPSTNCheck->avgIlong += pPSTNCheck->ilong[i];

-    }

-    pPSTNCheck->avgIlong /= pPSTNCheck->samples;

-

-    if(pPSTNCheck->avgIlong > pPSTNCheck->avgThresh)

-    {

-      /* reinit obj and return fail */

-      pPSTNCheck->count = 0;

-      pPSTNCheck->buffFull = FALSE;

-      return RC_PSTN_CHECK_AVG_FAIL;

-    }

-    else

-    {

-      pPSTNCheck->count++;

-      return RC_NONE;

-    }

-  }

-  else

-  {

-    pPSTNCheck->count++;

-    return RC_NONE;

-  }

-}

-

-#ifdef PSTN_DET_ENABLE

-/*

-** Function: abs_int32

-**

-** Description:

-** abs implementation for int32 type

-*/

-static int32 abs_int32(int32 a)

-{

-  if(a < 0)

-  {

-    return -1*a;

-  }

-  return a;

-}

-

-/*

-** Function: Si3218x_DiffPSTNCheck

-**

-** Description:

-** Monitor for excessive longitudinal current, which

-** would be present if a live pstn line was connected

-** to the port.

-**

-** Returns:

-** RC_NONE             - test in progress

-** RC_COMPLETE_NO_ERR  - test complete, no alarms or errors

-** RC_POWER_ALARM_HVIC - test interrupted by HVIC power alarm

-** RC_

-**

-*/

-

-int Si3218x_DiffPSTNCheck (proslicChanType *pProslic,

-                           proslicDiffPSTNCheckObjType *pPSTNCheck)

-{

-  uInt8 loop_status;

-  int i;

-

-  if(pProslic->channelType != PROSLIC)

-  {

-    return RC_CHANNEL_TYPE_ERR;    /* Ignore DAA channels */

-  }

-

-

-  switch(pPSTNCheck->pState.stage)

-  {

-    case 0:

-      /* Optional OPEN foreign voltage measurement - only execute if LCS = 0 */

-      /* Disable low power mode */

-      pPSTNCheck->enhanceRegSave = ReadReg(pProHW,pProslic->channel, PROSLIC_REG_ENHANCE);

-      WriteReg(pProHW,pProslic->channel, PROSLIC_REG_ENHANCE,

-               pPSTNCheck->enhanceRegSave&0x07); /* Disable powersave */

-      pPSTNCheck->vdiff1_avg = 0;

-      pPSTNCheck->vdiff2_avg = 0;

-      pPSTNCheck->iloop1_avg = 0;

-      pPSTNCheck->iloop2_avg = 0;

-      pPSTNCheck->return_status = RC_COMPLETE_NO_ERR;

-      /* Do OPEN state hazardous voltage measurement if enabled and ONHOOK */

-      Si3218x_ReadHookStatus(pProslic,&loop_status);

-      if((loop_status == PROSLIC_ONHOOK)&&(pPSTNCheck->femf_enable == 1))

-      {

-        pPSTNCheck->pState.stage++;

-      }

-      else

-      {

-        pPSTNCheck->pState.stage = 10;

-      }

-

-      return RC_NONE;

-

-    case 1:

-      /* Change linefeed to OPEN state for HAZV measurement, setup coarse sensors */

-      pPSTNCheck->lfstate_entry = ReadReg(pProHW,pProslic->channel, PROSLIC_REG_LINEFEED);

-      ProSLIC_SetLinefeedStatus(pProslic,LF_OPEN);

-      pPSTNCheck->pState.stage++;

-      return RC_NONE;

-

-    case 2:

-      /* Settle */

-      ProSLIC_PSTN_delay_poll(&(pPSTNCheck->pState), PSTN_DET_OPEN_FEMF_SETTLE);

-      return RC_NONE;

-

-    case 3:

-      /* Measure HAZV */

-      pPSTNCheck->vdiff_open = Si3218x_ReadMADCScaled(pProslic,SI3218X_RAM_VDIFF_COARSE,0);

-      DEBUG_PRINT(pProslic, "%sDiff PSTN : Vopen = %d mV\n", LOGPRINT_PREFIX,

-                  pPSTNCheck->vdiff_open);

-

-      /* Stop PSTN check if differential voltage > max_femf_vopen present */

-      if(abs_int32(pPSTNCheck->vdiff_open) > pPSTNCheck->max_femf_vopen)

-      {

-        pPSTNCheck->pState.stage = 70;

-        pPSTNCheck->return_status = RC_PSTN_OPEN_FEMF;

-      }

-      else

-      {

-        pPSTNCheck->pState.stage = 10;

-      }

-      return 0;

-

-    case 10:

-      /* Load first DC feed preset */

-      ProSLIC_DCFeedSetup(pProslic,pPSTNCheck->dcfPreset1);

-      ProSLIC_SetLinefeedStatus(pProslic,LF_FWD_ACTIVE);

-      pPSTNCheck->pState.stage++;

-      return RC_NONE;

-

-    case 11:

-      /* Settle */

-      ProSLIC_PSTN_delay_poll(&(pPSTNCheck->pState), PSTN_DET_DIFF_IV1_SETTLE);

-      return RC_NONE;

-

-    case 12:

-      /* Measure VDIFF and ILOOP, switch to 2nd DCFEED setup */

-      pPSTNCheck->vdiff1[pPSTNCheck->pState.sampleIterations] =

-        Si3218x_ReadMADCScaled(pProslic,SI3218X_RAM_VDIFF_FILT,0);

-      pPSTNCheck->iloop1[pPSTNCheck->pState.sampleIterations] =

-        Si3218x_ReadMADCScaled(pProslic,SI3218X_RAM_MADC_ILOOP,0);

-#ifdef ENABLE_DEBUG

-      if ( DEBUG_ENABLED(pProslic) )

-      {

-        LOGPRINT("%sDiff PSTN: Vdiff1[%d] = %d mV\n", LOGPRINT_PREFIX,

-                 pPSTNCheck->pState.sampleIterations,

-                 pPSTNCheck->vdiff1[pPSTNCheck->pState.sampleIterations]);

-        LOGPRINT("%sDiff PSTN: Iloop1[%d] = %d uA\n", LOGPRINT_PREFIX,

-                 pPSTNCheck->pState.sampleIterations,

-                 pPSTNCheck->iloop1[pPSTNCheck->pState.sampleIterations]);

-      }

-#endif

-      pPSTNCheck->pState.sampleIterations++;

-      if(pPSTNCheck->pState.sampleIterations >= pPSTNCheck->samples)

-      {

-        ProSLIC_DCFeedSetup(pProslic,pPSTNCheck->dcfPreset2);

-        pPSTNCheck->pState.stage++;

-        pPSTNCheck->pState.sampleIterations = 0;

-      }

-      return RC_NONE;

-

-    case 13:

-      /* Settle feed 500ms */

-      ProSLIC_PSTN_delay_poll(&(pPSTNCheck->pState), PSTN_DET_DIFF_IV2_SETTLE);

-      return RC_NONE;

-

-    case 14:

-      /* Measure VDIFF and ILOOP*/

-      pPSTNCheck->vdiff2[pPSTNCheck->pState.sampleIterations] =

-        Si3218x_ReadMADCScaled(pProslic,SI3218X_RAM_VDIFF_FILT,0);

-      pPSTNCheck->iloop2[pPSTNCheck->pState.sampleIterations] =

-        Si3218x_ReadMADCScaled(pProslic,SI3218X_RAM_MADC_ILOOP,0);

-#ifdef ENABLE_DEBUG

-      if ( DEBUG_ENABLED(pProslic) )

-      {

-        LOGPRINT("%sDiff PSTN: Vdiff2[%d] = %d mV\n", LOGPRINT_PREFIX,

-                 pPSTNCheck->pState.sampleIterations,

-                 pPSTNCheck->vdiff2[pPSTNCheck->pState.sampleIterations]);

-        LOGPRINT("%sDiff PSTN: Iloop2[%d] = %d uA\n", LOGPRINT_PREFIX,

-                 pPSTNCheck->pState.sampleIterations,

-                 pPSTNCheck->iloop2[pPSTNCheck->pState.sampleIterations]);

-      }

-#endif

-      pPSTNCheck->pState.sampleIterations++;

-      if(pPSTNCheck->pState.sampleIterations >= pPSTNCheck->samples)

-      {

-        /* Compute averages */

-        for (i=0; i<pPSTNCheck->samples; i++)

-        {

-          pPSTNCheck->vdiff1_avg += pPSTNCheck->vdiff1[i];

-          pPSTNCheck->iloop1_avg += pPSTNCheck->iloop1[i];

-          pPSTNCheck->vdiff2_avg += pPSTNCheck->vdiff2[i];

-          pPSTNCheck->iloop2_avg += pPSTNCheck->iloop2[i];

-        }

-

-        pPSTNCheck->vdiff1_avg /= pPSTNCheck->samples;

-        pPSTNCheck->iloop1_avg /= pPSTNCheck->samples;

-        pPSTNCheck->vdiff2_avg /= pPSTNCheck->samples;

-        pPSTNCheck->iloop2_avg /= pPSTNCheck->samples;

-

-        /* Force small (probably offset) currents to minimum value */

-        if(abs_int32(pPSTNCheck->iloop1_avg) < PSTN_DET_MIN_ILOOP)

-        {

-          pPSTNCheck->iloop1_avg = PSTN_DET_MIN_ILOOP;

-        }

-        if(abs_int32(pPSTNCheck->iloop2_avg) < PSTN_DET_MIN_ILOOP)

-        {

-          pPSTNCheck->iloop2_avg = PSTN_DET_MIN_ILOOP;

-        }

-

-        /* Calculate measured loop impedance */

-        pPSTNCheck->rl1 = abs_int32((

-                                      pPSTNCheck->vdiff1_avg*1000L)/pPSTNCheck->iloop1_avg);

-        pPSTNCheck->rl2 = abs_int32((

-                                      pPSTNCheck->vdiff2_avg*1000L)/pPSTNCheck->iloop2_avg);

-

-        /* Force non-zero loop resistance */

-        if(pPSTNCheck->rl1 == 0)

-        {

-          pPSTNCheck->rl1 = 1;

-        }

-        if(pPSTNCheck->rl2 == 0)

-        {

-          pPSTNCheck->rl2 = 1;

-        }

-

-        /* Qualify loop impedances */

-        pPSTNCheck->rl_ratio = (pPSTNCheck->rl1*1000L)/pPSTNCheck->rl2;

-#ifdef ENABLE_DEBUG

-        if ( DEBUG_ENABLED(pProslic) )

-        {

-          const char fmt_string[] = "%sDiffPSTN: %s = %d %s\n";

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "VDIFF1", pPSTNCheck->vdiff1_avg, "mV");

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "ILOOP1",pPSTNCheck->iloop1_avg, "uA");

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "VDIFF2",pPSTNCheck->vdiff2_avg, "mV");

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "ILOOP2",pPSTNCheck->iloop2_avg, "uA");

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "RL1",pPSTNCheck->rl1, "ohm");

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "RL2",pPSTNCheck->rl2, "ohm");

-          LOGPRINT(fmt_string, LOGPRINT_PREFIX, "RL_Ratio",pPSTNCheck->rl_ratio, " ");

-        }

-#endif

-

-        /* Restore */

-        pPSTNCheck->pState.sampleIterations = 0;

-        pPSTNCheck->pState.stage = 70;

-      }

-      return RC_NONE;

-

-    case 70:  /* Reset test state, restore entry conditions */

-      ProSLIC_DCFeedSetup(pProslic,pPSTNCheck->entryDCFeedPreset);

-      ProSLIC_SetLinefeedStatus(pProslic,pPSTNCheck->lfstate_entry);

-      WriteReg(pProHW,pProslic->channel,PROSLIC_REG_ENHANCE, pPSTNCheck->enhanceRegSave);

-      pPSTNCheck->pState.stage = 0;

-      pPSTNCheck->pState.waitIterations = 0;

-      pPSTNCheck->pState.sampleIterations = 0;

-      return pPSTNCheck->return_status;

-

-  }

-  return RC_NONE;

-}

-

-#endif

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si_voice.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si_voice.c
deleted file mode 100644
index c30ee2c..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si_voice.c
+++ /dev/null
@@ -1,563 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Author(s):
- * laj
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- * File Description:
- * This file contains common (ProSIC + DAA) functions.
- *
- */
-
-#include "../config_inc/si_voice_datatypes.h"
-#include "../inc/si_voice.h"
-#include "../config_inc/proslic_api_config.h"
-
-#ifdef ENABLE_DEBUG
-#define LOGPRINT_PREFIX "SiVoice: "
-#endif
-
-#ifdef SI3217X
-#include "si3217x.h"
-#include "si3217x_intf.h"
-#endif
-
-#ifdef SI3218X
-#include "../inc/si3218x.h"
-#include "../inc/si3218x_intf.h"
-#endif
-
-#ifdef SI3219X
-#include "si3219x.h"
-#include "si3219x_intf.h"
-#endif
-
-#ifdef SI3226X
-#include "si3226x.h"
-#include "si3226x_intf.h"
-#endif
-
-#ifdef SI3228X
-#include "si3228x.h"
-#include "si3228x_intf.h"
-#endif
-
-#define pCtrl(X)           (X)->deviceId->ctrlInterface
-#define pProHW(X)          pCtrl((X))->hCtrl
-#define ReadReg(PCHAN, CHANNEL, REGADDR) (PCHAN)->deviceId->ctrlInterface->ReadRegister_fptr(pProHW(PCHAN), (CHANNEL), (REGADDR))
-#define WriteReg(PCHAN, CHANNEL, REGADDR, REGDATA) (PCHAN)->deviceId->ctrlInterface->WriteRegister_fptr(pProHW(PCHAN), (CHANNEL), (REGADDR), (REGDATA))
-
-/*
-** Control object constructor/destructor
-*/
-int SiVoice_createControlInterfaces (SiVoiceControlInterfaceType **pCtrlIntf,
-                                     uInt32 interface_count)
-{
-  TRACEPRINT_NOCHAN("count = %lu\n", (unsigned long)interface_count);
-#ifndef DISABLE_MALLOC
-  *pCtrlIntf = SIVOICE_CALLOC(sizeof(SiVoiceControlInterfaceType),
-                              interface_count);
-  if(*pCtrlIntf == NULL)
-  {
-#ifdef ENABLE_DEBUG
-    LOGPRINT("%s%s: failed to allocate memory", LOGPRINT_PREFIX, __FUNCTION__);
-#endif
-    return RC_NO_MEM;
-  }
-
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pCtrlIntf);
-  SILABS_UNREFERENCED_PARAMETER(interface_count);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-int SiVoice_destroyControlInterfaces ( SiVoiceControlInterfaceType **pCtrlIntf )
-{
-
-  TRACEPRINT_NOCHAN("\n",NULL);
-#ifndef DISABLE_MALLOC
-  if( pCtrlIntf && *pCtrlIntf)
-  {
-    SIVOICE_FREE ((SiVoiceControlInterfaceType *)*pCtrlIntf);
-    *pCtrlIntf = NULL;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pCtrlIntf);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-/*
-** Device object constructor/destructor
-*/
-int SiVoice_createDevices (SiVoiceDeviceType **pDevice, uInt32 device_count)
-{
-
-  TRACEPRINT_NOCHAN("\n",NULL);
-#ifndef DISABLE_MALLOC
-  *pDevice = SIVOICE_CALLOC (sizeof(SiVoiceDeviceType), device_count);
-
-  if(*pDevice == NULL)
-  {
-#ifdef ENABLE_DEBUG
-    LOGPRINT("%s%s: failed to allocate memory", LOGPRINT_PREFIX, __FUNCTION__);
-#endif
-    return RC_NO_MEM;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pDevice);
-  SILABS_UNREFERENCED_PARAMETER(device_count);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-int SiVoice_destroyDevices (SiVoiceDeviceType **pDevice)
-{
-
-  TRACEPRINT_NOCHAN("\n", NULL);
-#ifndef DISABLE_MALLOC
-  if(pDevice && *pDevice)
-  {
-    SIVOICE_FREE ((SiVoiceDeviceType *)*pDevice);
-    *pDevice = NULL;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pDevice);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-/*
-** Channel object constructor/destructor
-*/
-int SiVoice_createChannels (SiVoiceChanType_ptr *pChan, uInt32 channel_count)
-{
-
-  TRACEPRINT_NOCHAN("count = %lu\n", (unsigned long) channel_count);
-#ifndef DISABLE_MALLOC
-  *pChan = SIVOICE_CALLOC(sizeof(SiVoiceChanType),channel_count);
-  if(*pChan == NULL)
-  {
-#ifdef ENABLE_DEBUG
-    LOGPRINT("%s%s: failed to allocate memory", LOGPRINT_PREFIX, __FUNCTION__);
-#endif
-    return RC_NO_MEM;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(pChan);
-  SILABS_UNREFERENCED_PARAMETER(channel_count);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-int SiVoice_destroyChannels (SiVoiceChanType_ptr *hProslic)
-{
-
-  TRACEPRINT_NOCHAN("\n",NULL);
-#ifndef DISABLE_MALLOC
-  if(hProslic && *hProslic)
-  {
-    SIVOICE_FREE ((SiVoiceChanType_ptr)*hProslic);
-    *hProslic = NULL;
-  }
-  return RC_NONE;
-#else
-  SILABS_UNREFERENCED_PARAMETER(hProslic);
-  return RC_UNSUPPORTED_FEATURE;
-#endif
-}
-
-/*
-** Host control linkage
-*/
-int SiVoice_setControlInterfaceCtrlObj (SiVoiceControlInterfaceType *pCtrlIntf,
-                                        void *hCtrl)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->hCtrl = hCtrl;
-  return RC_NONE;
-}
-
-/*
-** Host reset linkage
-*/
-int SiVoice_setControlInterfaceReset (SiVoiceControlInterfaceType *pCtrlIntf,
-                                      ctrl_Reset_fptr Reset_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->Reset_fptr = Reset_fptr;
-  return RC_NONE;
-}
-
-/*
-** Host register/RAM read/write linkage
-*/
-int SiVoice_setControlInterfaceWriteRegister (SiVoiceControlInterfaceType
-    *pCtrlIntf, ctrl_WriteRegister_fptr WriteRegister_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->WriteRegister_fptr = WriteRegister_fptr;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceReadRegister (SiVoiceControlInterfaceType
-    *pCtrlIntf, ctrl_ReadRegister_fptr ReadRegister_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->ReadRegister_fptr = ReadRegister_fptr;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceWriteRAM (SiVoiceControlInterfaceType *pCtrlIntf,
-    ctrl_WriteRAM_fptr WriteRAM_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->WriteRAM_fptr = WriteRAM_fptr;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceReadRAM (SiVoiceControlInterfaceType *pCtrlIntf,
-                                        ctrl_ReadRAM_fptr ReadRAM_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->ReadRAM_fptr = ReadRAM_fptr;
-  return RC_NONE;
-}
-
-/*
-** Host timer linkage
-*/
-int SiVoice_setControlInterfaceTimerObj (SiVoiceControlInterfaceType *pCtrlIntf,
-    void *hTimer)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->hTimer = hTimer;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceDelay (SiVoiceControlInterfaceType *pCtrlIntf,
-                                      system_delay_fptr Delay_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->Delay_fptr = Delay_fptr;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceSemaphore (SiVoiceControlInterfaceType
-    *pCtrlIntf, ctrl_Semaphore_fptr semaphore_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->Semaphore_fptr = semaphore_fptr;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceTimeElapsed (SiVoiceControlInterfaceType
-    *pCtrlIntf, system_timeElapsed_fptr timeElapsed_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->timeElapsed_fptr = timeElapsed_fptr;
-  return RC_NONE;
-}
-
-int SiVoice_setControlInterfaceGetTime (SiVoiceControlInterfaceType *pCtrlIntf,
-                                        system_getTime_fptr getTime_fptr)
-{
-  TRACEPRINT_NOCHAN("\n",NULL);
-  pCtrlIntf->getTime_fptr = getTime_fptr;
-  return RC_NONE;
-}
-
-/*
-** Channel object initialization
-*/
-int SiVoice_SWInitChan (SiVoiceChanType_ptr pChan,int channel,int chipType,
-                        SiVoiceDeviceType *pDeviceObj, SiVoiceControlInterfaceType *pCtrlIntf)
-{
-  TRACEPRINT_NOCHAN( "channel = %d chipType = %d\n", channel, chipType);
-  pChan->channel = (uInt8)channel;
-  pChan->deviceId = pDeviceObj;
-  pChan->deviceId->ctrlInterface = pCtrlIntf;
-  pChan->channelEnable=1;
-  pChan->error = RC_NONE;
-  pChan->debugMode = 0;
-  pChan->dcdc_polarity_invert = 0;
-#ifdef PROSLIC_BOM_DEFAULT
-  pChan->bomOption = PROSLIC_BOM_DEFAULT;
-#else
-  pChan->bomOption = 0;
-#endif
-
-  switch (chipType)
-  {
-    case SI3217X_TYPE:
-      pChan->deviceId->chipType = SI32171;
-      break;
-
-    case SI3218X_TYPE:
-      pChan->deviceId->chipType = SI32180;
-      break;
-
-    case SI3219X_TYPE:
-      pChan->deviceId->chipType = SI32190;
-      break;
-
-    case SI3226X_TYPE:
-      pChan->deviceId->chipType = SI32260;
-      break;
-
-    case SI3228X_TYPE:
-      pChan->deviceId->chipType = SI32280;
-      break;
-
-    case SI3050_TYPE:
-      pChan->deviceId->chipType = SI3050;
-      break;
-
-    default:
-      return RC_UNSUPPORTED_FEATURE;
-  }
-  return RC_NONE;
-}
-
-/*
-** Reset control
-*/
-int SiVoice_Reset (SiVoiceChanType_ptr pChan)
-{
-  TRACEPRINT_NOCHAN( "\n", NULL);
-  /*
-  ** assert reset, wait 250ms, release reset, wait 250ms
-  */
-  pChan->deviceId->ctrlInterface->Reset_fptr(
-    pChan->deviceId->ctrlInterface->hCtrl,1);
-
-  pChan->deviceId->ctrlInterface->Delay_fptr(
-    pChan->deviceId->ctrlInterface->hTimer,250);
-
-  pChan->deviceId->ctrlInterface->Reset_fptr(
-    pChan->deviceId->ctrlInterface->hCtrl,0);
-
-  pChan->deviceId->ctrlInterface->Delay_fptr(
-    pChan->deviceId->ctrlInterface->hTimer,250);
-
-  return RC_NONE;
-}
-
-/*
-** Debug Mode Control
-*/
-int SiVoice_setSWDebugMode (SiVoiceChanType_ptr pChan, int debugEn)
-{
-#ifdef ENABLE_DEBUG
-  TRACEPRINT_NOCHAN( "debugEn %d\n", debugEn);
-  pChan->debugMode = (0xFE & pChan->debugMode) | (debugEn != 0);
-#else
-  SILABS_UNREFERENCED_PARAMETER(pChan);
-  SILABS_UNREFERENCED_PARAMETER(debugEn);
-#endif
-  return RC_NONE;
-}
-
-/*
-** Trace Mode Control
-*/
-int SiVoice_setTraceMode (SiVoiceChanType_ptr pChan, int traceEn)
-{
-#ifdef ENABLE_TRACES
-  TRACEPRINT_NOCHAN( "debugEn %d\n", traceEn);
-  pChan->debugMode = (0xFD & pChan->debugMode) | ((traceEn != 0)<<1);
-#else
-  SILABS_UNREFERENCED_PARAMETER(pChan);
-  SILABS_UNREFERENCED_PARAMETER(traceEn);
-#endif
-  return RC_NONE;
-}
-
-/*
-** Error status
-*/
-int SiVoice_getErrorFlag (SiVoiceChanType_ptr pChan, int *error)
-{
-  TRACEPRINT( pChan, "\n", NULL);
-  *error = pChan->error;
-  return RC_NONE;
-}
-
-int SiVoice_clearErrorFlag (SiVoiceChanType_ptr pChan)
-{
-  TRACEPRINT( pChan, "\n", NULL);
-  pChan->error = RC_NONE;
-  return RC_NONE;
-}
-
-/*
-** Channel status
-*/
-int SiVoice_setChannelEnable (SiVoiceChanType_ptr pChan, int chanEn)
-{
-  TRACEPRINT( pChan, "enable = %d\n", chanEn);
-  pChan->channelEnable = chanEn;
-  return RC_NONE;
-}
-
-int SiVoice_getChannelEnable (SiVoiceChanType_ptr pChan, int *chanEn)
-{
-  TRACEPRINT( pChan, "\n", NULL);
-  *chanEn = pChan->channelEnable;
-  return RC_NONE;
-}
-
-uInt8 SiVoice_ReadReg(SiVoiceChanType_ptr hProslic,uInt8 addr)
-{
-  TRACEPRINT( hProslic, "addr = %u\n", (unsigned int)addr);
-  return ReadReg(hProslic, hProslic->channel, addr);
-}
-
-int SiVoice_WriteReg(SiVoiceChanType_ptr hProslic,uInt8 addr,uInt8 data)
-{
-  TRACEPRINT( hProslic, "addr = %u data = 0x%02X\n", (unsigned int)addr,
-              (unsigned int) data);
-  return WriteReg(hProslic, hProslic->channel, addr, data);
-}
-
-/*****************************************************************************************************/
-#if defined(SI3217X) || defined(SI3218X) || defined(SI3219X) || defined(SI3226X) || defined(SI3228X) 
-#include "../inc/proslic.h"
-
-/* Iterate through the number of channels to determine if it's a SLIC, DAA, or unknown. Rev ID and chiptype is
- * also filled in.
- */
-int SiVoice_IdentifyChannels(SiVoiceChanType_ptr *pProslic, int size,
-                             int *slicCount, int *daaCount)
-{
-  int i;
-  int rc = RC_NONE;
-  SiVoiceChanType_ptr currentChannel;
-
-  TRACEPRINT( *pProslic, "size = %d\n", size);
-
-  if(slicCount)
-  {
-    *slicCount = 0;
-  }
-  if(daaCount)
-  {
-    *daaCount = 0;
-  }
-
-  for(i = 0; i < size; i++)
-  {
-    currentChannel = pProslic[i];
-    /* SiVoice_SWInitChan() fills in the chipType initially with something the user provided, fill it
-     * in with the correct info.. The GetChipInfo may probe registers to compare them with their
-     * initial values, so this function MUST only be called after a chipset reset.
-     */
-#ifdef SI3217X
-    if (currentChannel->deviceId->chipType >= SI32171
-        && currentChannel->deviceId->chipType <= SI32179)
-    {
-      rc = Si3217x_GetChipInfo(currentChannel);
-    }
-#endif
-
-#ifdef SI3218X
-    if (currentChannel->deviceId->chipType >= SI32180
-        && currentChannel->deviceId->chipType <= SI32189)
-    {
-      rc = Si3218x_GetChipInfo(currentChannel);
-    }
-#endif
-
-#ifdef SI3219X
-    if ( IS_SI3219X(currentChannel->deviceId) )
-    {
-      rc = Si3219x_GetChipInfo(currentChannel);
-    }
-#endif
-
-#ifdef SI3226X
-    if (currentChannel->deviceId->chipType >= SI32260
-        && currentChannel->deviceId->chipType <= SI32269)
-    {
-      rc = Si3226x_GetChipInfo(currentChannel);
-    }
-#endif
-
-#ifdef SI3228X
-    if (currentChannel->deviceId->chipType >= SI32280
-        && currentChannel->deviceId->chipType <= SI32289)
-    {
-      rc = Si3228x_GetChipInfo(currentChannel);
-    }
-#endif
-
-    if(rc != RC_NONE)
-    {
-      return rc;
-    }
-
-    currentChannel->channelType = ProSLIC_identifyChannelType(currentChannel);
-    if(currentChannel->channelType == PROSLIC)
-    {
-      if(slicCount)
-      {
-        (*slicCount)++;
-      }
-    }
-    else if(currentChannel->channelType == DAA)
-    {
-      if(daaCount)
-      {
-        (*daaCount)++;
-      }
-    }
-#ifdef ENABLE_DEBUG
-    {
-      const char *dev_type = "UNKNOWN";
-      if(currentChannel->channelType == PROSLIC)
-      {
-        dev_type = "PROSLIC";
-      }
-      else if(currentChannel->channelType == DAA)
-      {
-        dev_type = "DAA";
-      }
-      LOGPRINT("%sChannel %d: Type = %s Rev = %d\n",
-               LOGPRINT_PREFIX, currentChannel->channel, dev_type,
-               currentChannel->deviceId->chipRev);
-
-    }
-#endif /* ENABLE_DEBUG */
-  }
-  return RC_NONE;
-}
-#endif
-
-/*
-** Function: ProSLIC_Version
-**
-** Description:
-** Return API version
-**
-** Returns:
-** string of the API release.
-*/
-
-extern const char *SiVoiceAPIVersion;
-char *SiVoice_Version()
-{
-  return (char *)SiVoiceAPIVersion;
-}
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si_voice_version.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si_voice_version.c
deleted file mode 100644
index 5d4aaaa..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/si_voice_version.c
+++ /dev/null
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * file: si_voice_version.c
- *
- * Distributed by: 
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.	 
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- * 
- * THIS FILE IS AUTOGENERATED - DO NOT MODIFY
- *
- */
-
-
-
-char *SiVoiceAPIVersion = "9.2.0";
-
-
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/vdaa.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/vdaa.c
deleted file mode 100644
index 9a73c44..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/vdaa.c
+++ /dev/null
@@ -1,1350 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Vdaa  VoiceDAA interface implementation file
- *
- * Distributed by:
- * Silicon Laboratories, Inc
- *
- * This file contains proprietary information.
- * No dissemination allowed without prior written permission from
- * Silicon Laboratories, Inc.
- *
- * File Description:
- * This is the implementation file for the main VoiceDAA API.
- *
- */
-
-#include "../config_inc/si_voice_datatypes.h"
-#include "../inc/si_voice_ctrl.h"
-#include "../inc/si_voice_timer_intf.h"
-#include "../inc/vdaa.h"
-#include "../inc/vdaa_registers.h"
-#include "../config_inc/vdaa_api_config.h"
-
-#define WriteReg      pVdaa->deviceId->ctrlInterface->WriteRegister_fptr
-#define ReadReg        pVdaa->deviceId->ctrlInterface->ReadRegister_fptr
-#define pVdaaHW        pVdaa->deviceId->ctrlInterface->hCtrl
-
-#define WriteRegX      deviceId->ctrlInterface->WriteRegister_fptr
-#define ReadRegX      deviceId->ctrlInterface->ReadRegister_fptr
-#define pVdaaHWX      deviceId->ctrlInterface->hCtrl
-#define LOGPRINT_PREFIX "VDAA: "
-
-/*
-** Static VDAA driver functions
-*/
-
-/*
-** Function: isVerifiedDAA
-**
-** Description:
-** Verifies addressed channel is DAA
-**
-** Input Parameters:
-** pVdaa: pointer to SiVoiceChanType or vdaaChanType
-**
-** Return:
-** Verified DAA
-** Not DAA          RC_CHANNEL_TYPE_ERR
-**
-*/
-
-static int isVerifiedDAA(vdaaChanType *pVdaa)
-{
-  uInt8 data = ReadReg(pVdaaHW,pVdaa->channel,LSIDE_REV);
-  if ( (data & 0x40) == 0 ) /*This bit is always 1 for DAA*/
-  {
-    LOGPRINT("%sDAA device not detected\n",LOGPRINT_PREFIX);
-    return RC_CHANNEL_TYPE_ERR;
-  }
-  else
-  {
-    /* For Si3050, the value will be zero initially (calloc), for Si32178/9, this will
-     * be non-zero (Rev B).
-     */
-    if(pVdaa->deviceId->chipRev == 0)
-    {
-      /* Read Device ID and store it */
-      /* NOTE: in earlier releases we also read the line side info here.  This is now done
-         Vdaa_duringPowerUpLineside since the information we read was always 0.
-       */
-      data = pVdaa->ReadRegX(pVdaa->pVdaaHWX,pVdaa->channel,SYS_LINE_DEV_REV);
-      pVdaa->deviceId->chipRev= data&0xF;
-#ifdef ENABLE_DEBUG
-      LOGPRINT("%sChipRev = 0x%x\n", LOGPRINT_PREFIX, pVdaa->deviceId->chipRev);
-#endif
-    }
-  }
-
-  return RC_NONE;
-}
-
-#if 0 /* Removed for now since it isn't used, keeping code as reference */
-/*
-** Function: probeDaisyChain
-**
-** Description:
-** Identify how many VDAA devices are in daisychain
-** Only called if channel 0 has be previously qualified
-** as a VDAA.
-**
-** Input Parameters:
-** pVdaa:       pointer to SiVoiceChanType or vdaaChanType
-**
-** Return:
-** number of channels in daisy chain
-**
-*/
-
-static int probeDaisyChain (vdaaChanType *pVdaa)
-{
-  int i=0;
-  WriteReg(pVdaaHW,BROADCAST,PCMRX_CNT_LO,0x23);        /* Broadcast */
-  while ((ReadReg(pVdaaHW,(uInt8)i++,PCMRX_CNT_LO) == 0x23)
-         &&(i<=16));  /* Count number of channels */
-  return i-1;                          /* Return number of channels */
-}
-#endif
-
-/*
-**
-**  ------ VDAA CONFIGURATION FUNCTIONS -----
-**
-*/
-
-/*
-** Function:  Vdaa_RingDetectSetup
-**
-** Description:
-** configure ring detect setup
-**
-** Returns:
-**
-*/
-
-#ifndef DISABLE_VDAA_RING_DETECT_SETUP
-extern vdaa_Ring_Detect_Cfg Vdaa_Ring_Detect_Presets[];
-int Vdaa_RingDetectSetup (vdaaChanType *pVdaa,int32 preset)
-{
-
-  uInt8 regTemp = 0;
-  TRACEPRINT( pVdaa, "preset = %d\n", (unsigned int) preset);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,CTRL2) & 0xfB;
-  regTemp |= Vdaa_Ring_Detect_Presets[preset].rdi<<2;
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,INTL_CTRL1) & 0xfe;
-  regTemp |= Vdaa_Ring_Detect_Presets[preset].rt&1;
-  WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL1,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,INTL_CTRL2) & 0xef;
-  regTemp |= ((Vdaa_Ring_Detect_Presets[preset].rt>>1)<<4);
-  WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL2,regTemp);
-
-  WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL3,
-           Vdaa_Ring_Detect_Presets[preset].rfwe<<1);
-
-  regTemp = (Vdaa_Ring_Detect_Presets[preset].rdly&0x3) << 6;
-  regTemp |= Vdaa_Ring_Detect_Presets[preset].rmx ;
-  WriteReg(pVdaaHW,pVdaa->channel,RNG_VLD_CTRL1,regTemp);
-
-  regTemp = (Vdaa_Ring_Detect_Presets[preset].rdly>>2) << 7;
-  regTemp |= Vdaa_Ring_Detect_Presets[preset].rto << 3 ;
-  regTemp |= Vdaa_Ring_Detect_Presets[preset].rcc ;
-  WriteReg(pVdaaHW,pVdaa->channel,RNG_VLD_CTRL2,regTemp);
-
-  regTemp = Vdaa_Ring_Detect_Presets[preset].rngv << 7;
-  regTemp |= Vdaa_Ring_Detect_Presets[preset].ras ;
-  WriteReg(pVdaaHW,pVdaa->channel,RNG_VLD_CTRL3,regTemp);
-
-  regTemp = Vdaa_Ring_Detect_Presets[preset].rpol<<1;
-  WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL4,regTemp);
-
-  return RC_NONE;
-}
-#endif
-
-/*
-** Function:  Vdaa_TXAudioGainSetup
-**
-** Description:
-** configure tx audio gain
-**
-** Returns:
-**
-**
-*/
-#ifndef DISABLE_VDAA_AUDIO_GAIN_SETUP
-extern vdaa_audioGain_Cfg Vdaa_audioGain_Presets[];
-
-int Vdaa_TXAudioGainSetup (vdaaChanType *pVdaa,int32 preset)
-{
-  uInt8 regTemp = 0;
-  TRACEPRINT( pVdaa, "preset = %d\n", (unsigned int) preset);
-
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  if(Vdaa_audioGain_Presets[preset].xga2 == XGA_ATTEN)
-  {
-    regTemp = 0x10;
-  }
-
-  regTemp |= Vdaa_audioGain_Presets[preset].acgain2 ;
-  WriteReg(pVdaaHW,pVdaa->channel,TX_GN_CTRL2,regTemp);
-
-  regTemp = 0;
-  if(Vdaa_audioGain_Presets[preset].xga3 == XGA_ATTEN)
-  {
-    regTemp = 0x10 ;
-  }
-
-  regTemp |= Vdaa_audioGain_Presets[preset].acgain3 ;
-  WriteReg(pVdaaHW,pVdaa->channel,TX_GN_CTRL3,regTemp);
-
-  if(Vdaa_audioGain_Presets[preset].cpEn)
-  {
-    WriteReg(pVdaaHW,pVdaa->channel,TXCALL_PROG_ATTEN,
-             Vdaa_audioGain_Presets[preset].callProgress);
-  }
-
-  return RC_NONE;
-}
-# endif
-
-
-/*
-** Function:  Vdaa_RXAudioGainSetup
-**
-** Description:
-** configure rx audio gain
-**
-** Returns:
-**
-**
-*/
-#ifndef DISABLE_VDAA_AUDIO_GAIN_SETUP
-extern vdaa_audioGain_Cfg Vdaa_audioGain_Presets[];
-
-int Vdaa_RXAudioGainSetup (vdaaChanType *pVdaa,int32 preset)
-{
-  uInt8 regTemp = 0;
-
-  TRACEPRINT( pVdaa, "preset = %d\n", (unsigned int) preset);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  if(Vdaa_audioGain_Presets[preset].xga2 == XGA_ATTEN)
-  {
-    regTemp = 0x10;
-  }
-  regTemp |= Vdaa_audioGain_Presets[preset].acgain2 ;
-  WriteReg(pVdaaHW,pVdaa->channel,RX_GN_CTRL2,regTemp);
-
-  regTemp = 0;
-  if(Vdaa_audioGain_Presets[preset].xga3 == XGA_ATTEN)
-  {
-    regTemp = 0x10;
-  }
-  regTemp |= Vdaa_audioGain_Presets[preset].acgain3 ;
-  WriteReg(pVdaaHW,pVdaa->channel,RX_GN_CTRL3,regTemp);
-
-  if(Vdaa_audioGain_Presets[preset].cpEn)
-  {
-    WriteReg(pVdaaHW,pVdaa->channel,RXCALL_PROG_ATTEN,
-             Vdaa_audioGain_Presets[preset].callProgress);
-  }
-
-  return RC_NONE;
-}
-#endif
-
-
-/*
-** Function:  Vdaa_PCMSetup
-**
-** Description:
-** configure pcm format, clocking and edge placement
-**
-** Returns:
-**
-**
-*/
-#ifndef DISABLE_VDAA_PCM_SETUP
-extern vdaa_PCM_Cfg Vdaa_PCM_Presets [];
-
-int Vdaa_PCMSetup (vdaaChanType *pVdaa,int32 preset)
-{
-  uInt8 regTemp = 0;
-
-  TRACEPRINT( pVdaa, "preset = %d\n", (unsigned int) preset);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL)&0xe0;
-  regTemp |= Vdaa_PCM_Presets[preset].pcm_tri;
-  regTemp |= Vdaa_PCM_Presets[preset].pcmHwy << 1;
-  regTemp |= Vdaa_PCM_Presets[preset].pcmFormat << 3;
-  WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL,regTemp);
-
-  return RC_NONE;
-}
-#endif
-
-/*
-** Function:  Vdaa_PCMTimeSlotSetup
-**
-** Description:
-** configure pcm timeslot
-**
-** Returns:
-**
-*/
-int Vdaa_PCMTimeSlotSetup (vdaaChanType *pVdaa, uInt16 rxcount, uInt16 txcount)
-{
-  uInt8 data = 0;
-  uInt8 pcmStatus;
-
-  TRACEPRINT( pVdaa, "rxcount = %u txcount = %u\n", (unsigned int)rxcount,
-              (unsigned int)txcount);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  /* Disable PCM if enabled - restore after updating timeslots */
-  pcmStatus = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL);
-  if (pcmStatus&0x20)
-  {
-    WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL,pcmStatus&~(0x20));
-  }
-
-  /*Storing 10 bit value of Transmit PCM sample in REG 34 and REG 35[0:1]*/
-  data = (uInt8)(txcount & 0xff);
-  WriteReg(pVdaaHW,pVdaa->channel,PCMTX_CNT_LO,data);
-  data = (uInt8)(txcount >> 8) ;
-  WriteReg(pVdaaHW,pVdaa->channel,PCMTX_CNT_HI,data);
-
-  /*Storing 10 bit value of Receive PCM sample in REG 34 and REG 35[0:1]*/
-  data = (uInt8)(rxcount & 0xff);
-  WriteReg(pVdaaHW,pVdaa->channel,PCMRX_CNT_LO,data);
-  data = (uInt8)(rxcount >> 8);
-  WriteReg(pVdaaHW,pVdaa->channel,PCMRX_CNT_HI,data);
-
-  /* Enable back the PCM after storing the values*/
-  WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL,pcmStatus);
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_CountrySetup
-**
-** Description:
-** configure country specific settings
-**
-** Returns:
-**
-**
-*/
-
-#ifndef DISABLE_VDAA_COUNTRY_SETUP
-extern vdaa_Country_Cfg Vdaa_Country_Presets [];
-
-int Vdaa_CountrySetup (vdaaChanType *pVdaa,int32 preset)
-{
-  uInt8 regTemp = 0;
-
-  TRACEPRINT( pVdaa, "preset = %d\n", (unsigned int) preset);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,CTRL2) & 0xFD;
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regTemp); /* disable hybrid */
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,INTL_CTRL1) & 0xFD;
-  regTemp |= Vdaa_Country_Presets[preset].rz << 1 ;
-  WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL1,regTemp);
-
-  regTemp = Vdaa_Country_Presets[preset].dcr;
-  regTemp |= Vdaa_Country_Presets[preset].ilim<<1;
-  regTemp |= Vdaa_Country_Presets[preset].mini<<4;
-  regTemp |= Vdaa_Country_Presets[preset].dcv<<6;
-  WriteReg(pVdaaHW,pVdaa->channel,DC_TERM_CTRL,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,AC_TERM_CTRL) & 0xF0;
-  regTemp |= Vdaa_Country_Presets[preset].acim;
-  WriteReg(pVdaaHW,pVdaa->channel,AC_TERM_CTRL,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,SPRK_QNCH_CTRL) & 0xAF;
-  regTemp |= ((Vdaa_Country_Presets[preset].ohs_sq >> 2)&1)<<4 ;
-  regTemp |= ((Vdaa_Country_Presets[preset].ohs_sq >> 3)&1)<<6 ;
-  WriteReg(pVdaaHW,pVdaa->channel,SPRK_QNCH_CTRL,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,INTL_CTRL1) & 0xBF;
-  regTemp |= ((Vdaa_Country_Presets[preset].ohs_sq >> 1)&1)<<6 ;
-  WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL1,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL5) & 0xE7;
-  regTemp |= (Vdaa_Country_Presets[preset].ohs_sq&1)<<3 ;
-  WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL5,regTemp);
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,CTRL2) & 0xFD;
-  regTemp |= (Vdaa_Country_Presets[preset].hbe)<<1 ;
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regTemp);
-
-  return RC_NONE;
-}
-#endif
-
-/*
-** Function:  Vdaa_HybridSetup
-**
-** Description:
-** configure hybrid
-**
-*/
-
-#ifndef DISABLE_VDAA_HYBRID_SETUP
-extern vdaa_Hybrid_Cfg Vdaa_Hybrid_Presets [];
-
-int Vdaa_HybridSetup (vdaaChanType *pVdaa,int32 preset)
-{
-  uInt8 regSave = 0;
-
-  TRACEPRINT( pVdaa, "preset = %d\n", (unsigned int) preset);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regSave = ReadReg(pVdaaHW,pVdaa->channel,CTRL2);
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regSave&0xFD); /* disable hybrid */
-
-  WriteReg(pVdaaHW,pVdaa->channel,HYB1,Vdaa_Hybrid_Presets[preset].hyb1);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB2,Vdaa_Hybrid_Presets[preset].hyb2);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB3,Vdaa_Hybrid_Presets[preset].hyb3);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB4,Vdaa_Hybrid_Presets[preset].hyb4);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB5,Vdaa_Hybrid_Presets[preset].hyb5);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB6,Vdaa_Hybrid_Presets[preset].hyb6);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB7,Vdaa_Hybrid_Presets[preset].hyb7);
-  WriteReg(pVdaaHW,pVdaa->channel,HYB8,Vdaa_Hybrid_Presets[preset].hyb8);
-
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL2,
-           regSave); /* Restore hybrid enable state at entry */
-
-  return RC_NONE;
-}
-#endif
-
-/*
-** Function:  Vdaa_SetAudioMute
-**
-** Description:
-** Control RX and TX mute
-**
-*/
-
-int Vdaa_SetAudioMute(vdaaChanType *pVdaa, tMUTE mute)
-{
-  uInt8 regData;
-
-  TRACEPRINT( pVdaa, "mode = %u\n", (unsigned int) mute);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regData = ReadReg(pVdaaHW,pVdaa->channel,TXRX_GN_CTRL);
-
-  switch(mute)
-  {
-    case MUTE_DISABLE_ALL:
-      regData = 0;
-      break;
-
-    case MUTE_DISABLE_RX:
-      regData &= 0x80;
-      break;
-
-    case MUTE_DISABLE_TX:
-      regData &= 0x08;
-      break;
-
-    case MUTE_ENABLE_RX:
-      regData |= 0x08;
-      break;
-
-    case MUTE_ENABLE_TX:
-      regData |= 0x80;
-      break;
-
-    case MUTE_ENABLE_ALL:
-      regData = 0x88;
-      break;
-  }
-
-  WriteReg(pVdaaHW,pVdaa->channel,TXRX_GN_CTRL,regData);
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_PCMStart
-**
-** Description:
-** Enables PCM bus
-**
-*/
-
-int Vdaa_PCMStart (vdaaChanType *pVdaa)
-{
-  uInt8 data = 0;
-
-  TRACEPRINT( pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  /*Enable PCM transfers by setting REG 33[5]=1 */
-  data = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL);
-  data |= 0x20;
-  WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL,data);
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_PCMStop
-**
-** Description:
-** Disables PCM bus
-**
-*/
-
-int Vdaa_PCMStop (vdaaChanType *pVdaa)
-{
-  uInt8 data = 0;
-
-  TRACEPRINT( pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  /*disable PCM transfers by setting REG 33[5]=0 */
-  data = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL);
-  data &= ~(0x20);
-  WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL,data);
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_SetInterruptMask
-**
-** Description:
-** Enables interrupts based on passed 9-bit bitmask.  Bit
-** values defined by vdaaIntMask enum.
-**
-*/
-
-int Vdaa_SetInterruptMask(vdaaChanType *pVdaa, vdaaIntMask bitmask)
-{
-  uInt8 intMaskReg = 0;
-  uInt8 cviReg = 0;
-
-  TRACEPRINT( pVdaa, "mask = 0x%03x\n", (unsigned int)bitmask);
-  /* Channel validation */
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_CHANNEL_TYPE_ERR;
-  }
-
-  intMaskReg = (uInt8)(bitmask & 0x00ff);
-  cviReg = ReadReg(pVdaaHW,pVdaa->channel,LN_VI_THRESH_INTE_CTRL);
-  cviReg |= (uInt8) ((bitmask >> 7) & 0x0002);
-
-  WriteReg (pVdaaHW,pVdaa->channel,INTE_MSK,intMaskReg);
-  WriteReg(pVdaaHW,pVdaa->channel,LN_VI_THRESH_INTE_CTRL,cviReg);
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_ReadRingDetectStatus
-**
-** Description:
-** Reads ring detect/hook status
-**
-** Returns:
-**
-**
-*/
-
-int Vdaa_ReadRingDetectStatus (vdaaChanType *pVdaa,
-                               vdaaRingDetectStatusType *pStatus)
-{
-  uInt8 reg;
-
-  TRACEPRINT( pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  reg = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL1);
-  pStatus->offhook = reg & 0x01;
-  pStatus->ringDetected = (reg & 0x4)>>2;
-  pStatus->onhookLineMonitor = (reg & 0x8)>>3;
-  pStatus->ringDetectedPos = (reg & 0x20)>>5;
-  pStatus->ringDetectedNeg = (reg & 0x40)>>6;
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_Init
-**
-** Description:
-** Initialize VDAA, load general config parameters
-**
-*/
-
-extern vdaa_General_Cfg Vdaa_General_Configuration;
-
-int Vdaa_Init (vdaaChanType_ptr *pVdaa,int size)
-{
-  uInt8 data;
-  int k;
-  int num_devices = 0;
-
-  TRACEPRINT( *pVdaa, "size = %d\n", size);
-
-  for (k=0; k<size; k++)
-  {
-
-    if(pVdaa[k]->channelType == PROSLIC)
-    {
-      continue;  /* Skip if we know this is a ProSLIC, else check the device out */
-    }
-
-    if (isVerifiedDAA(pVdaa[k]) == RC_CHANNEL_TYPE_ERR)
-    {
-      pVdaa[k]->channelEnable = FALSE;
-      pVdaa[k]->error = RC_CHANNEL_TYPE_ERR;
-      pVdaa[k]->channelType = UNKNOWN;
-      DEBUG_PRINT(pVdaa[k], "%sVDAA not supported on this device\n",LOGPRINT_PREFIX);
-      continue;
-    }
-    else
-    {
-      pVdaa[k]->channelType = DAA;
-    }
-
-    if (pVdaa[k]->channelEnable)
-    {
-      /*Try to write innocuous register to test SPI is working*/
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,PCMRX_CNT_LO,0x5A);
-      data = pVdaa[k]->ReadRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,PCMRX_CNT_LO);
-      if (data != 0x5A)
-      {
-        pVdaa[k]->error = RC_SPI_FAIL;
-        pVdaa[k]->channelEnable = FALSE;
-        DEBUG_PRINT(pVdaa[k], "%sVDAA %d not communicating\n",LOGPRINT_PREFIX,
-                    pVdaa[k]->channel);
-      }
-      else
-      {
-        num_devices++;
-      }
-    }
-  }
-
-  if(num_devices == 0)
-  {
-    DEBUG_PRINT(*pVdaa, "%sNo DAA devices detected\n", LOGPRINT_PREFIX);
-    return RC_SPI_FAIL;
-  }
-
-  for (k=0; k<size; k++)
-  {
-    if(pVdaa[k]->channelType != DAA)
-    {
-      continue;  /* Skip PROSLIC or UNDEFINED ports */
-    }
-    if (pVdaa[k]->channelEnable)
-    {
-
-      /* Apply General Configuration parameters */
-
-      /* No need to read-modify-write here since registers are in their reset state */
-      data = (Vdaa_General_Configuration.pwmm << 4) |
-             (Vdaa_General_Configuration.pwmEnable << 3);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,CTRL1, data);
-
-      data = (Vdaa_General_Configuration.inte << 7) | (Vdaa_General_Configuration.intp
-             << 6) | 0x03;
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,CTRL2, data);
-
-      data = (Vdaa_General_Configuration.hssm << 3);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,SMPL_CTRL, data);
-
-      data = (Vdaa_General_Configuration.iire << 4);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,INTL_CTRL1, data);
-
-      data = (Vdaa_General_Configuration.rcald << 4);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,RES_CALIB, data);
-
-      data = (Vdaa_General_Configuration.full2 << 4);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,AC_TERM_CTRL, data);
-
-      data = (Vdaa_General_Configuration.lvfd) | (Vdaa_General_Configuration.filt <<
-             1) |
-             (Vdaa_General_Configuration.foh << 5) | (Vdaa_General_Configuration.full << 7);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,DAA_CTRL5, data);
-
-      data = (Vdaa_General_Configuration.spim << 6);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,PCM_SPI_CTRL, data);
-
-      data = (Vdaa_General_Configuration.cvp) | (Vdaa_General_Configuration.cvs << 2);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,LN_VI_THRESH_INTE_CTRL,
-                          data);
-
-      data = (Vdaa_General_Configuration.gce << 1) | (Vdaa_General_Configuration.rg1
-             << 2);
-      pVdaa[k]->WriteRegX(pVdaa[k]->pVdaaHWX,pVdaa[k]->channel,SPRK_QNCH_CTRL, data);
-
-      /* Enable Lineside Device */
-      Vdaa_PowerupLineside(pVdaa[k]);
-    }
-  }
-  DEBUG_PRINT(*pVdaa,"%sDAA initialization completed\n",LOGPRINT_PREFIX);
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_ReadLinefeedStatus
-**
-** Description:
-** Read Status of Line Feed
-**
-** Returns:
-** RC_VDAA_ILOOP_OVLD if LCS >= 0x1F
-**      - no overload
-**
-*/
-
-int Vdaa_ReadLinefeedStatus (vdaaChanType *pVdaa,int8 *vloop, int16 *iloop)
-{
-  int16 regTemp = 0x1F;
-  uInt8 iloop_reg; /* REG 12[4:0] = Loop current*/
-
-  TRACEPRINT( pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-  regTemp &= ReadReg(pVdaaHW,pVdaa->channel,LSIDE_STAT);
-  iloop_reg = (uInt8)regTemp;
-  *iloop = (regTemp*LCS_SCALE_NUM) /
-           LCS_SCALE_DEN; /* Multiply the read result by 3.3mA/bit*/
-
-  *vloop = (int8) ReadReg(pVdaaHW,pVdaa->channel,LINE_VOLT_STAT);
-  if(*vloop & 0x80)
-  {
-    *vloop = ~(*vloop - 1)*(-1);
-  }
-
-  if (iloop_reg == 0x1F)
-  {
-    return RC_VDAA_ILOOP_OVLD;
-  }
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_GetInterrupts
-**
-** Description:
-** Get Interrupts
-**
-** Returns:
-** number of interrupts
-**
-*/
-
-int Vdaa_GetInterrupts (vdaaChanType *pVdaa,vdaaIntType *pIntData)
-{
-  uInt8 data = 0;
-  int j;
-  TRACEPRINT( pVdaa, "\n", NULL);
-  pIntData->number = 0;
-
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  data = ReadReg(pVdaaHW,pVdaa->channel,INTE_SRC);      /*Snapshot Interrupts*/
-  WriteReg(pVdaaHW,pVdaa->channel,INTE_SRC,~(data));      /*Clear interrupts*/
-
-  for (j=0; j<8; j++)
-  {
-    if (data &(1<<j))
-    {
-
-      pIntData->irqs[pIntData->number] =   j;
-      pIntData->number++;
-
-    }
-  }
-  data = ReadReg(pVdaaHW,pVdaa->channel,LN_VI_THRESH_INTE_CTRL);
-
-  if (data &(0x08))                   /*to determine if CVI Interrupt is set*/
-  {
-    pIntData->irqs[pIntData->number] =   CVI;
-    pIntData->number++;
-    data &= ~(0x08);
-    WriteReg(pVdaaHW,pVdaa->channel,LN_VI_THRESH_INTE_CTRL,data);
-
-  }
-
-  return pIntData->number;
-}
-
-/*
-** Function:  Vdaa_ClearInterrupts
-**
-** Description:
-** Clear Interrupts
-**
-** Returns:
-**
-**
-*/
-
-int Vdaa_ClearInterrupts (vdaaChanType *pVdaa)
-{
-  uInt8 data = 0;
-
-  TRACEPRINT( pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteReg(pVdaaHW,pVdaa->channel,INTE_SRC,
-           0x00);    /* Clear interrupts in REG 4 by writing 0's*/
-
-  /*Clear CVI interrupt by writing 0 at REG 44[3]*/
-  data = ReadReg(pVdaaHW,pVdaa->channel,LN_VI_THRESH_INTE_CTRL);
-  WriteReg(pVdaaHW,pVdaa->channel,LN_VI_THRESH_INTE_CTRL,data&0xF7);
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_GetHookStatus
-**
-** Description:
-** Read VDAA Hook Status
-**
-** Return Values -
-**      VDAA_ONHOOK
-**      VDAA_OFFHOOK
-**      VDAA_ONHOOK_MONITOR
-**      RC_INVALID_HOOK_STATUS
-*/
-
-uInt8 Vdaa_GetHookStatus (vdaaChanType *pVdaa)
-{
-  uInt8 data;
-
-  TRACEPRINT( pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL1);
-  data &= 0x09;  /* Look at only ONHM and OH */
-
-  if((data & 0x80)&&(data & 0x01))
-  {
-    return VDAA_ONHOOK_MONITOR;
-  }
-  else if (data & 0x01)
-  {
-    return VDAA_OFFHOOK;
-  }
-  else
-  {
-    return VDAA_ONHOOK;
-  }
-}
-
-/*
-** Function:  Vdaa_SetHookStatus
-**
-** Description:
-** Set VDAA Hook switch to ONHOOK, OFFHOOK,
-** or ONHOOK_MONITOR
-**
-*/
-
-int Vdaa_SetHookStatus (vdaaChanType *pVdaa,uInt8 newHookStatus)
-{
-  uInt8 data= 0 ;
-
-  TRACEPRINT( pVdaa, "hookstate = %u\n", (unsigned int) newHookStatus);
-
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  switch (newHookStatus)
-  {
-    case VDAA_DIG_LOOPBACK:
-      /*Setting REG6[4]=1,REG5[0]=0,REG5[3]=0*/
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL2);
-      data |= 0x10;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL2,data);
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL1);
-      data &= ~(0x09);
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL1,data);
-      break;
-
-    case VDAA_ONHOOK:
-      /*Setting REG6[4]=0,REG5[0]=0,REG5[3]=0*/
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL1);
-      data &= 0xF6;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL1,data);
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL2);
-      data &= 0xEF;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL2,data);
-      break;
-
-    case VDAA_OFFHOOK:
-      /*Setting REG6[4]=0,REG5[0]=1,REG5[3]=0*/
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL1);
-      data &= 0xF7;
-      data |= 0x01;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL1,data);
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL2);
-      data &= 0xEF;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL2,data);
-      break;
-
-    case VDAA_ONHOOK_MONITOR:
-      /*Setting REG6[4]=0,REG5[0]=0,REG5[3]=1*/
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL1);
-      data &= 0xFE;
-      data |= 0x08;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL1,data);
-      data = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL2);
-      data &= 0xEF;
-      WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL2,data);
-      break;
-
-    default:
-      return RC_UNSUPPORTED_OPTION;
-  }
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_SetLoopbackMode
-**
-** Description:
-** Loopback mode control
-**
-*/
-
-int Vdaa_SetLoopbackMode(vdaaChanType_ptr pVdaa, tLpbkMode lpbk_mode,
-                         tLpbkStatus lpbk_status)
-{
-  uInt8 regData;
-
-  TRACEPRINT(pVdaa, "lpbk_mode = %u lpbk_status = %d\n", (unsigned int) lpbk_mode,
-             (unsigned int) lpbk_status);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  switch(lpbk_mode)
-  {
-    case LPBK_NONE:
-      /* Disable all loopback types, regardless of lpbk_status */
-      regData = ReadReg(pVdaaHW,pVdaa->channel,CTRL1);
-      if(regData & 0x02)
-      {
-        WriteReg(pVdaaHW,pVdaa->channel,CTRL1, regData & ~(0x02));
-      }
-
-      regData = ReadReg(pVdaaHW,pVdaa->channel,DAA_CTRL3);
-      if(regData & 0x01)
-      {
-        WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL3,0);
-      }
-
-      regData = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL);
-      if(regData & 0x80)
-      {
-        WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL, regData & ~(0x80));
-      }
-      break;
-
-    case LPBK_IDL:
-      if(lpbk_status)
-      {
-        regData = ReadReg(pVdaaHW,pVdaa->channel,CTRL1);
-        WriteReg(pVdaaHW,pVdaa->channel,CTRL1, regData | 0x02);
-      }
-      else
-      {
-        regData = ReadReg(pVdaaHW,pVdaa->channel,CTRL1);
-        WriteReg(pVdaaHW,pVdaa->channel,CTRL1, regData & ~(0x02));
-      }
-      break;
-
-    case LPBK_DDL:
-      if(lpbk_status)
-      {
-        WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL3, 0x01);
-      }
-      else
-      {
-        WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL3, 0);
-      }
-      break;
-
-    case LPBK_PCML:
-      if(lpbk_status)
-      {
-        regData = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL);
-        WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL, regData | 0x80);
-      }
-      else
-      {
-        regData = ReadReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL);
-        WriteReg(pVdaaHW,pVdaa->channel,PCM_SPI_CTRL, regData & ~(0x80));
-      }
-      break;
-
-    default:
-      return RC_UNSUPPORTED_OPTION;
-  }
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_ADCCal
-**
-** Description:
-** This function calibrates the VDAA ADC manually
-**
-*/
-
-int Vdaa_ADCCal (vdaaChanType_ptr pVdaa, int32 size)
-{
-  uInt8 regTemp = 0;
-  int32 i;
-
-  TRACEPRINT(pVdaa, "size = %d\n", (int) size);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  for(i = 0; i < size; i++)
-  {
-    /* Clear the previous ADC Calibration data by toggling CALZ*/
-    regTemp = ReadReg(pVdaaHW,pVdaa->channel,INTL_CTRL2);
-    regTemp |= 0x80;
-    WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL2,regTemp);
-    regTemp &= ~0x80;
-    WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL2,regTemp);
-
-    regTemp = ReadReg(pVdaaHW,pVdaa->channel,INTL_CTRL2); /*disable auto cal*/
-    regTemp |= 0x20;
-    WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL2,regTemp);
-
-    regTemp |= 0x40;                  /*initiate manual cal*/
-    WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL2,regTemp);
-    regTemp &= ~0x40;
-    WriteReg(pVdaaHW,pVdaa->channel,INTL_CTRL2,regTemp);
-    pVdaa++;
-  }
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_EnableWatchdog
-**
-** Description:
-** Enables watchdog timer
-**
-*/
-
-int Vdaa_EnableWatchdog(vdaaChanType_ptr pVdaa)
-{
-  uInt8 regTemp;
-
-  TRACEPRINT(pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,CTRL2);
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regTemp | 0x10);
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_SetHybridEnable
-**
-** Description:
-** Enables watchdog timer
-**
-*/
-
-int Vdaa_SetHybridEnable(vdaaChanType_ptr pVdaa, int enable)
-{
-  uInt8 regTemp;
-  TRACEPRINT(pVdaa, "enable = %d\n", enable);
-
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  regTemp = ReadReg(pVdaaHW,pVdaa->channel,CTRL2);
-  if(enable)
-  {
-    WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regTemp | 0x02);
-  }
-  else
-  {
-    WriteReg(pVdaaHW,pVdaa->channel,CTRL2,regTemp & ~(0x02));
-  }
-
-  return RC_NONE;
-}
-
-
-/*
-** Function:  Vdaa_SoftReset
-**
-** Description:
-** Execute soft reset
-**
-*/
-
-int Vdaa_SoftReset(vdaaChanType_ptr pVdaa)
-{
-  TRACEPRINT(pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteReg(pVdaaHW,pVdaa->channel,CTRL1,0x80);
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_ReadFDTStatus
-**
-** Description:
-** Read FDT bit
-**
-** Returns:
-** 0 - Frame Not Detected
-** 1 - Frame Detected
-**
-*/
-
-int Vdaa_ReadFDTStatus(vdaaChanType_ptr pVdaa)
-{
-  TRACEPRINT(pVdaa, "\n", NULL);
-  return (ReadReg(pVdaaHW,pVdaa->channel,LSIDE_REV) & 0x40);
-}
-
-/*
-** Function:  Vdaa_PowerupLineside
-**
-** Description:
-** Power up lineside device
-**
-*/
-
-int Vdaa_PowerupLineside(vdaaChanType_ptr pVdaa)
-{
-  uInt8 data; 
-
-  TRACEPRINT(pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL2,0); /* Powerup lineside device */
-  /* We do a double read to give the front end time to power up and sync up with the system side.. */
-  data = ReadReg(pVdaaHW,pVdaa->channel,LSIDE_REV);
-  data = 0;
-  data = ReadReg(pVdaaHW,pVdaa->channel,LSIDE_REV);
-  pVdaa->deviceId->lsRev= ((data&0x3C)>>2);
-  data = pVdaa->ReadRegX(pVdaa->pVdaaHWX,pVdaa->channel,SYS_LINE_DEV_REV);
-  pVdaa->deviceId->lsType= ((data&~(0xF))>>4);
-
-  return RC_NONE;
-}
-
-/*
-** Function:  Vdaa_PowerdownLineside
-**
-** Description:
-** Power down lineside device
-**
-*/
-
-int Vdaa_PowerdownLineside(vdaaChanType_ptr pVdaa)
-{
-  TRACEPRINT(pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  WriteReg(pVdaaHW,pVdaa->channel,DAA_CTRL2,0x10);
-  return RC_NONE;
-}
-
-/*
-** Function: Vdaa_PrintDebugData
-**
-** Description:
-** Dump of VDAA register space
-**
-** Input Parameters:
-** pVdaa:       pointer to SiVoiceChanType or vdaaChanType
-**
-*/
-
-int Vdaa_PrintDebugData (vdaaChanType *pVdaa)
-{
-#ifdef ENABLE_DEBUG
-  int i;
-  for (i=0; i<60; i++)
-  {
-    LOGPRINT ("%sRegister %d = %X\n",LOGPRINT_PREFIX,i,ReadReg(pVdaaHW,
-              pVdaa->channel,i));
-  }
-#endif
-  return RC_NONE;
-}
-
-/*
-** Function: Vdaa_InitLineInUseCheck
-**
-** Description:
-** Set line in use test limits
-**
-** Input Parameters:
-** liuCfg:      pointer to vdaa_LIU_Config
-** minOnV:      minimum acceptable onhook voltage (below indicates parallel handset)
-** minOffV:     minimum acceptable offhook voltage (below indicates parallel handset)
-** minOffI:     minimum acceptable offhook loop current (below indicates parallel handset)
-**
-*/
-
-int Vdaa_InitLineInUseCheck(vdaa_LIU_Config *liuCfg, int8 minOnV, int8 minOffV,
-                            int16 minOffI)
-{
-  TRACEPRINT_NOCHAN("min0nV = %d minoffV = %d minOffI = %d\n", minOnV, minOffV,
-                    minOffI);
-  liuCfg->status = PAR_HANDSET_NOT_DETECTED;
-  liuCfg->min_onhook_vloop = minOnV;
-  liuCfg->min_offhook_vloop = minOffV;
-  liuCfg->min_offhook_iloop = minOffI;
-  return RC_NONE;
-}
-
-/*
-** Function: Vdaa_CheckForLineInUse
-**
-** Description:
-** Monitor LVCS to detect intrusion or parallel handset
-**
-** Input Parameters:
-** pVdaa:       pointer to SiVoiceChanType or vdaaChanType
-** liuCfg:      pointer to vdaa_LIU_Config
-**
-** Output Parameters:
-**
-** Return:
-** VDAA_ONHOOK    -   line is onhook
-** VDAA_OFFHOOK   -   line is offhook (in use)
-**
-*/
-
-uInt8 Vdaa_CheckForLineInUse(vdaaChanType *pVdaa, vdaa_LIU_Config *liuCfg)
-{
-  int8 vloop;
-  int16 iloop;
-
-  TRACEPRINT(pVdaa, "\n", NULL);
-  if(pVdaa->channelType != DAA)
-  {
-    return RC_IGNORE;
-  }
-
-  /* Check voltage and current */
-  Vdaa_ReadLinefeedStatus(pVdaa, &vloop,&iloop);
-  if(vloop < 0)
-  {
-    vloop *= -1;
-  }
-  liuCfg->measured_iloop = iloop;
-  liuCfg->measured_vloop = vloop;
-  liuCfg->status = PAR_HANDSET_NOT_DETECTED;
-
-  /* Read hookswitch status */
-  if(Vdaa_GetHookStatus(pVdaa) == VDAA_OFFHOOK)
-  {
-    if((vloop < liuCfg->min_offhook_vloop)||(iloop < liuCfg->min_offhook_iloop))
-    {
-      liuCfg->status = PAR_HANDSET_DETECTED;
-    }
-
-    return VDAA_OFFHOOK;
-  }
-  else
-  {
-    if(vloop < liuCfg->min_onhook_vloop)
-    {
-      liuCfg->status = PAR_HANDSET_DETECTED;
-    }
-
-    return VDAA_ONHOOK;
-  }
-}
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/vdaa_constants.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/vdaa_constants.c
deleted file mode 100644
index 9c4606b..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/src/vdaa_constants.c
+++ /dev/null
@@ -1,201 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0

-/*

- * Si3217x ProSLIC API Configuration Tool Version 4.2.1

- * Last Updated in API Release: 9.2.0

- * source XML file: si3217x_FLBK_GDRV_constants.xml

- *

- * Auto generated file from configuration tool.

- */

-

-#include "../inc/vdaa.h"

-

-vdaa_General_Cfg Vdaa_General_Configuration  = {

-    INTE_DISABLED,

-    INTE_ACTIVE_LOW,

-    RES_CAL_ENABLED,

-    FS_8KHZ,

-    FOH_128,

-    LVS_FORCE_ENABLED,

-    CVS_CURRENT,

-    CVP_ABOVE,

-    GCE_DISABLED,

-    IIR_DISABLED,

-    FULL2_ENABLED,

-    FULL_DISABLED,

-    FILT_HPF_200HZ,

-    RG1_DISABLED,

-    PWM_DELTA_SIGMA,

-    PWM_DISABLED,

-    SPIM_TRI_CS

-};

-

-vdaa_Country_Cfg Vdaa_Country_Presets[] ={

-    {

-    RZ_MAX,

-    DC_50,

-    AC_600,

-    DCV3_5,

-    MINI_10MA,

-    ILIM_DISABLED,

-    OHS_LESS_THAN_0_5MS,

-    HYBRID_ENABLED

-    },  /* COU_USA */

-    {

-    RZ_MAX,

-    DC_50,

-    AC_270__750_150,

-    DCV3_5,

-    MINI_10MA,

-    ILIM_ENABLED,

-    OHS_3MS,

-    HYBRID_ENABLED

-    },  /* COU_GERMANY */

-    {

-    RZ_MAX,

-    DC_50,

-    AC_200__680_100,

-    DCV3_5,

-    MINI_10MA,

-    ILIM_DISABLED,

-    OHS_LESS_THAN_0_5MS,

-    HYBRID_ENABLED

-    },  /* COU_CHINA */

-    {

-    RZ_MAX,

-    DC_50,

-    AC_220__820_120,

-    DCV3_2,

-    MINI_12MA,

-    ILIM_DISABLED,

-    OHS_26MS,

-    HYBRID_ENABLED

-    }   /* COU_AUSTRALIA */

-};

-

-vdaa_audioGain_Cfg Vdaa_audioGain_Presets[] ={

-    {

-    0,    /* mute */

-    XGA_GAIN,    /* xXGA2 */

-    0,    /* xXG2 */

-    XGA_GAIN,    /* xXGA3 */

-    0,    /* xXG3 */

-    64,    /* AxM */

-    0     /* cpEn */

-    },  /* AUDIO_GAIN_0DB */

-    {

-    0,    /* mute */

-    XGA_ATTEN,    /* xXGA2 */

-    4,    /* xXG2 */

-    XGA_GAIN,    /* xXGA3 */

-    0,    /* xXG3 */

-    64,    /* AxM */

-    0     /* cpEn */

-    },  /* AUDIO_ATTEN_4DB */

-    {

-    0,    /* mute */

-    XGA_ATTEN,    /* xXGA2 */

-    6,    /* xXG2 */

-    XGA_GAIN,    /* xXGA3 */

-    0,    /* xXG3 */

-    64,    /* AxM */

-    0     /* cpEn */

-    },  /* AUDIO_ATTEN_6DB */

-    {

-    0,    /* mute */

-    XGA_ATTEN,    /* xXGA2 */

-    11,    /* xXG2 */

-    XGA_GAIN,    /* xXGA3 */

-    0,    /* xXG3 */

-    64,    /* AxM */

-    0     /* cpEn */

-    }   /* AUDIO_ATTEN_11DB */

-};

-

-vdaa_Ring_Detect_Cfg Vdaa_Ring_Detect_Presets[] ={

-    {

-    RDLY_512MS,

-    RT__13_5VRMS_16_5VRMS,

-    12,    /* RMX */

-    RTO_1408MS,

-    RCC_640MS,

-    RNGV_DISABLED,

-    17,    /* RAS */

-    RFWE_HALF_WAVE,

-    RDI_BEG_END_BURST, 

-    RGDT_ACTIVE_LOW 

-    },  /* RING_DET_NOVAL_LOWV */

-    {

-    RDLY_512MS,

-    RT__40_5VRMS_49_5VRMS,

-    12,    /* RMX */

-    RTO_1408MS,

-    RCC_640MS,

-    RNGV_ENABLED,

-    17,    /* RAS */

-    RFWE_RNGV_RING_ENV,

-    RDI_BEG_END_BURST, 

-    RGDT_ACTIVE_LOW 

-    }   /* RING_DET_VAL_HIGHV */

-};

-

-vdaa_PCM_Cfg Vdaa_PCM_Presets[] ={

-    {

-    U_LAW,

-    PCLK_1_PER_BIT,

-    TRI_POS_EDGE

-    },  /* DAA_PCM_8ULAW */

-    {

-    A_LAW,

-    PCLK_1_PER_BIT,

-    TRI_POS_EDGE

-    },  /* DAA_PCM_8ALAW */

-    {

-    LINEAR_16_BIT,

-    PCLK_1_PER_BIT,

-    TRI_POS_EDGE

-    }   /* DAA_PCM_16LIN */

-};

-

-vdaa_Hybrid_Cfg Vdaa_Hybrid_Presets[] ={

-    {

-       0,    /* HYB1 */

-     254,    /* HYB2 */

-       0,    /* HYB3 */

-       1,    /* HYB4 */

-     255,    /* HYB5 */

-       1,    /* HYB6 */

-       0,    /* HYB7 */

-       0    /* HYB8 */

-    },  /* HYB_600_0_0_500FT_24AWG */

-    {

-       4,    /* HYB1 */

-     246,    /* HYB2 */

-     242,    /* HYB3 */

-       4,    /* HYB4 */

-     254,    /* HYB5 */

-     255,    /* HYB6 */

-       1,    /* HYB7 */

-     255    /* HYB8 */

-    },  /* HYB_270_750_150_500FT_24AWG */

-    {

-       4,    /* HYB1 */

-     245,    /* HYB2 */

-     243,    /* HYB3 */

-       7,    /* HYB4 */

-     253,    /* HYB5 */

-       0,    /* HYB6 */

-       1,    /* HYB7 */

-     255    /* HYB8 */

-    },  /* HYB_200_680_100_500FT_24AWG */

-    {

-       4,    /* HYB1 */

-     244,    /* HYB2 */

-     241,    /* HYB3 */

-       6,    /* HYB4 */

-     253,    /* HYB5 */

-     255,    /* HYB6 */

-       2,    /* HYB7 */

-     255    /* HYB8 */

-    }   /* HYB_220_820_120_500FT_24AWG */

-};

-

diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/timer.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/timer.h
deleted file mode 100644
index 02b8a01..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/sound/soc/codecs/si3218x/timer.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * $Id: Timer.h 109 2008-10-22 19:45:09Z lajordan@SILABS.COM $
- * 
- * This file is system specific and should be edited for your hardware platform
- *
- * This file is used by proslic_timer_intf.h and proslic_spiGci.h
- */
-#ifndef TIME_TYPE_H
-#define TIME_TYPE_H
-
-typedef long long _int64;
-
-/*
-** System timer interface structure 
-*/
-typedef struct{
-	_int64 ticksPerSecond;
-} systemTimer_S;
-
-/*
-** System time stamp
-*/
-typedef struct{
-	_int64 time;
-} timeStamp;
-
-/*
-** Function: SYSTEM_TimerInit
-**
-** Description: 
-** Initializes the timer used in the delay and time measurement functions
-** by doing a long inaccurate sleep and counting the ticks
-**
-** Input Parameters: 
-**
-** Return:
-** none
-*/
-void TimerInit (systemTimer_S *pTimerObj);
-/*
-** Function: DelayWrapper
-**
-** Description: 
-** Waits the specified number of ms
-**
-** Input Parameters: 
-** hTimer: timer pointer
-** timeInMs: time in ms to wait
-**
-** Return:
-** none
-*/
-int time_DelayWrapper (void *hTimer, int timeInMs);
-
-
-/*
-** Function: TimeElapsedWrapper
-**
-** Description: 
-** Calculates number of ms that have elapsed
-**
-** Input Parameters: 
-** hTImer: pointer to timer object
-** startTime: timer value when function last called
-** timeInMs: pointer to time elapsed
-**
-** Return:
-** timeInMs: time elapsed since start time
-*/
-int time_TimeElapsedWrapper (void *hTimer, void *startTime, int *timeInMs);
-
-int time_GetTimeWrapper (void *hTimer, void *time);
-#endif
-/*
-** $Log: Timer.h,v $
-** Revision 1.2  2007/02/21 16:55:18  lajordan
-** moved function prototypes here
-**
-** Revision 1.1  2007/02/16 23:55:07  lajordan
-** no message
-**
-** Revision 1.2  2007/02/15 23:33:25  lajordan
-** no message
-**
-** Revision 1.1.1.1  2006/07/13 20:26:08  lajordan
-** no message
-**
-*/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0402-sound-add-mt7986-driver-and-slic-driver.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0402-sound-add-mt7986-driver-and-slic-driver.patch
deleted file mode 100644
index ee5ea6f..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0402-sound-add-mt7986-driver-and-slic-driver.patch
+++ /dev/null
@@ -1,91 +0,0 @@
---- a/sound/soc/codecs/Kconfig
-+++ b/sound/soc/codecs/Kconfig
-@@ -164,6 +164,7 @@
- 	select SND_SOC_RT5677 if I2C && SPI_MASTER
- 	select SND_SOC_RT5682 if I2C
- 	select SND_SOC_SGTL5000 if I2C
-+	select SND_SOC_SI3218X_SPI
- 	select SND_SOC_SI476X if MFD_SI476X_CORE
- 	select SND_SOC_SIMPLE_AMPLIFIER
- 	select SND_SOC_SIRF_AUDIO_CODEC
-@@ -1484,6 +1485,14 @@
- config SND_SOC_NAU8825
- 	tristate
- 
-+config SND_SOC_SI3218X
-+	tristate
-+
-+config SND_SOC_SI3218X_SPI
-+	tristate "Proslic SI3218X"
-+	depends on SPI
-+	select SND_SOC_SI3218X
-+
- config SND_SOC_TPA6130A2
- 	tristate "Texas Instruments TPA6130A2 headphone amplifier"
- 	depends on I2C
---- a/sound/soc/codecs/Makefile
-+++ b/sound/soc/codecs/Makefile
-@@ -176,6 +176,7 @@
- snd-soc-sigmadsp-objs := sigmadsp.o
- snd-soc-sigmadsp-i2c-objs := sigmadsp-i2c.o
- snd-soc-sigmadsp-regmap-objs := sigmadsp-regmap.o
-+snd-soc-si3218x-spi-objs := si3218x-spi.o
- snd-soc-si476x-objs := si476x.o
- snd-soc-sirf-audio-codec-objs := sirf-audio-codec.o
- snd-soc-spdif-tx-objs := spdif_transmitter.o
-@@ -563,3 +564,7 @@
- obj-$(CONFIG_SND_SOC_MAX98504)	+= snd-soc-max98504.o
- obj-$(CONFIG_SND_SOC_SIMPLE_AMPLIFIER)	+= snd-soc-simple-amplifier.o
- obj-$(CONFIG_SND_SOC_TPA6130A2)	+= snd-soc-tpa6130a2.o
-+
-+# Proslic si3218x
-+obj-$(CONFIG_SND_SOC_SI3218X)	+= si3218x/
-+obj-$(CONFIG_SND_SOC_SI3218X_SPI)	+= snd-soc-si3218x-spi.o
---- a/sound/soc/mediatek/Kconfig
-+++ b/sound/soc/mediatek/Kconfig
-@@ -53,6 +53,36 @@
- 	  Select Y if you have such device.
- 	  If unsure select "N".
- 
-+config SND_SOC_MT79XX
-+	tristate "ASoC support for Mediatek MT79XX chip"
-+	depends on ARCH_MEDIATEK
-+	select SND_SOC_MEDIATEK
-+	help
-+	  This adds ASoC platform driver support for Mediatek MT79XX chip
-+	  that can be used with other codecs.
-+	  Select Y if you have such device.
-+	  If unsure select "N".
-+
-+config SND_SOC_MT79XX_WM8960
-+	tristate "ASoc Audio driver for MT79XX with WM8960 codec"
-+	depends on SND_SOC_MT79XX && I2C
-+	select SND_SOC_WM8960
-+	help
-+	  This adds ASoC driver for Mediatek MT79XX boards
-+	  with the WM8960 codecs.
-+	  Select Y if you have such device.
-+	  If unsure select "N".
-+
-+config SND_SOC_MT79XX_SI3218X
-+	tristate "ASoc Audio driver for MT79XX with SI3218X codec"
-+	depends on SND_SOC_MT79XX && SPI
-+	select SND_SOC_SI3218X_SPI
-+	help
-+	  This adds ASoC driver for Mediatek MT79XX boards
-+	  with the SI3218X codecs.
-+	  Select Y if you have such device.
-+	  If unsure select "N".
-+
- config SND_SOC_MT8173
- 	tristate "ASoC support for Mediatek MT8173 chip"
- 	depends on ARCH_MEDIATEK
---- a/sound/soc/mediatek/Makefile
-+++ b/sound/soc/mediatek/Makefile
-@@ -2,5 +2,6 @@
- obj-$(CONFIG_SND_SOC_MEDIATEK) += common/
- obj-$(CONFIG_SND_SOC_MT2701) += mt2701/
- obj-$(CONFIG_SND_SOC_MT6797) += mt6797/
-+obj-$(CONFIG_SND_SOC_MT79XX) += mt79xx/
- obj-$(CONFIG_SND_SOC_MT8173) += mt8173/
- obj-$(CONFIG_SND_SOC_MT8183) += mt8183/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0402-sound-add-mt7986-driver.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0402-sound-add-mt7986-driver.patch
new file mode 100644
index 0000000..973f565
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0402-sound-add-mt7986-driver.patch
@@ -0,0 +1,48 @@
+--- a/sound/soc/mediatek/Kconfig
++++ b/sound/soc/mediatek/Kconfig
+@@ -53,6 +53,36 @@
+ 	  Select Y if you have such device.
+ 	  If unsure select "N".
+ 
++config SND_SOC_MT79XX
++	tristate "ASoC support for Mediatek MT79XX chip"
++	depends on ARCH_MEDIATEK
++	select SND_SOC_MEDIATEK
++	help
++	  This adds ASoC platform driver support for Mediatek MT79XX chip
++	  that can be used with other codecs.
++	  Select Y if you have such device.
++	  If unsure select "N".
++
++config SND_SOC_MT79XX_WM8960
++	tristate "ASoc Audio driver for MT79XX with WM8960 codec"
++	depends on SND_SOC_MT79XX && I2C
++	select SND_SOC_WM8960
++	help
++	  This adds ASoC driver for Mediatek MT79XX boards
++	  with the WM8960 codecs.
++	  Select Y if you have such device.
++	  If unsure select "N".
++
++config SND_SOC_MT79XX_SI3218X
++	tristate "ASoc Audio driver for MT79XX with SI3218X codec"
++	depends on SND_SOC_MT79XX && SPI
++	select SND_SOC_SI3218X_SPI
++	help
++	  This adds ASoC driver for Mediatek MT79XX boards
++	  with the SI3218X codecs.
++	  Select Y if you have such device.
++	  If unsure select "N".
++
+ config SND_SOC_MT8173
+ 	tristate "ASoC support for Mediatek MT8173 chip"
+ 	depends on ARCH_MEDIATEK
+--- a/sound/soc/mediatek/Makefile
++++ b/sound/soc/mediatek/Makefile
+@@ -2,5 +2,6 @@
+ obj-$(CONFIG_SND_SOC_MEDIATEK) += common/
+ obj-$(CONFIG_SND_SOC_MT2701) += mt2701/
+ obj-$(CONFIG_SND_SOC_MT6797) += mt6797/
++obj-$(CONFIG_SND_SOC_MT79XX) += mt79xx/
+ obj-$(CONFIG_SND_SOC_MT8173) += mt8173/
+ obj-$(CONFIG_SND_SOC_MT8183) += mt8183/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch
new file mode 100644
index 0000000..8a2af8d
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch
@@ -0,0 +1,191 @@
+--- a/drivers/mtd/nand/spi/winbond.c
++++ b/drivers/mtd/nand/spi/winbond.c
+@@ -15,6 +15,25 @@
+ 
+ #define WINBOND_CFG_BUF_READ		BIT(3)
+ 
++#define W25N02_N04KV_STATUS_ECC_MASK		(3 << 4)
++#define W25N02_N04KV_STATUS_ECC_NO_BITFLIPS	(0 << 4)
++#define W25N02_N04KV_STATUS_ECC_1_4_BITFLIPS	(1 << 4)
++#define W25N02_N04KV_STATUS_ECC_5_8_BITFLIPS	(3 << 4)
++#define W25N02_N04KV_STATUS_ECC_UNCOR_ERROR	(2 << 4)
++
++#define W25N01_M02GV_STATUS_ECC_MASK		(3 << 4)
++#define W25N01_M02GV_STATUS_ECC_NO_BITFLIPS	(0 << 4)
++#define W25N01_M02GV_STATUS_ECC_1_BITFLIPS	(1 << 4)
++#define W25N01_M02GV_STATUS_ECC_UNCOR_ERROR	(2 << 4)
++
++#if IS_ENABLED(CONFIG_MTD_SPI_NAND_W25N01KV)
++#define W25N01KV_STATUS_ECC_MASK		(3 << 4)
++#define W25N01KV_STATUS_ECC_NO_BITFLIPS		(0 << 4)
++#define W25N01KV_STATUS_ECC_1_3_BITFLIPS	(1 << 4)
++#define W25N01KV_STATUS_ECC_4_BITFLIPS		(3 << 4)
++#define W25N01KV_STATUS_ECC_UNCOR_ERROR		(2 << 4)
++#endif
++
+ static SPINAND_OP_VARIANTS(read_cache_variants,
+ 		SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
+ 		SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+@@ -31,6 +50,29 @@ static SPINAND_OP_VARIANTS(update_cache_
+ 		SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
+ 		SPINAND_PROG_LOAD(false, 0, NULL, 0));
+ 
++static int w25n02kv_n04kv_ooblayout_ecc(struct mtd_info *mtd, int section,
++				  struct mtd_oob_region *region)
++{
++	return -ERANGE;
++}
++
++static int w25n02kv_n04kv_ooblayout_free(struct mtd_info *mtd, int section,
++				   struct mtd_oob_region *region)
++{
++	if (section > 3)
++		return -ERANGE;
++
++	region->offset = (16 * section) + 2;
++	region->length = 14;
++
++	return 0;
++}
++
++static const struct mtd_ooblayout_ops w25n02kv_n04kv_ooblayout = {
++	.ecc = w25n02kv_n04kv_ooblayout_ecc,
++	.free = w25n02kv_n04kv_ooblayout_free,
++};
++
+ static int w25m02gv_ooblayout_ecc(struct mtd_info *mtd, int section,
+ 				  struct mtd_oob_region *region)
+ {
+@@ -74,9 +116,63 @@ static int w25m02gv_select_target(struct
+ 	return spi_mem_exec_op(spinand->spimem, &op);
+ }
+ 
++#if IS_ENABLED(CONFIG_MTD_SPI_NAND_W25N01KV)
++static int w25n01kv_ecc_get_status(struct spinand_device *spinand,
++					u8 status)
++{
++	switch (status & W25N01KV_STATUS_ECC_MASK) {
++	case W25N01KV_STATUS_ECC_NO_BITFLIPS:
++		return 0;
++
++	case W25N01KV_STATUS_ECC_1_3_BITFLIPS:
++		return 3;
++
++	case W25N01KV_STATUS_ECC_4_BITFLIPS:
++		return 4;
++
++	case W25N01KV_STATUS_ECC_UNCOR_ERROR:
++		return -EBADMSG;
++
++	default:
++		break;
++	}
++
++	return -EINVAL;
++}
++#endif
++
++static int w25n02kv_n04kv_ecc_get_status(struct spinand_device *spinand,
++					u8 status)
++{
++	switch (status & W25N02_N04KV_STATUS_ECC_MASK) {
++	case W25N02_N04KV_STATUS_ECC_NO_BITFLIPS:
++		return 0;
++
++	case W25N02_N04KV_STATUS_ECC_1_4_BITFLIPS:
++		return 3;
++
++	case W25N02_N04KV_STATUS_ECC_5_8_BITFLIPS:
++		return 4;
++
++	/* W25N02_N04KV_use internal 8bit ECC algorithm.
++	 * But the ECC strength is 4 bit requried.
++	 * Return 3 if the bit bit flip count less than 5.
++	 * Return 4 if the bit bit flip count more than 5 to 8.
++	*/
++
++	case W25N02_N04KV_STATUS_ECC_UNCOR_ERROR:
++		return -EBADMSG;
++
++	default:
++		break;
++	}
++
++	return -EINVAL;
++}
++
+ static const struct spinand_info winbond_spinand_table[] = {
+ 	SPINAND_INFO("W25M02GV",
+-		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xab),
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xab, 0x21),
+ 		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 2),
+ 		     NAND_ECCREQ(1, 512),
+ 		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+@@ -85,8 +181,20 @@ static const struct spinand_info winbond
+ 		     0,
+ 		     SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL),
+ 		     SPINAND_SELECT_TARGET(w25m02gv_select_target)),
++#if IS_ENABLED(CONFIG_MTD_SPI_NAND_W25N01KV)
++	SPINAND_INFO("W25N01KV",
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x21),
++		     NAND_MEMORG(1, 2048, 96, 64, 1024, 20, 1, 1, 1),
++		     NAND_ECCREQ(4, 512),
++		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++					      &write_cache_variants,
++					      &update_cache_variants),
++		     0,
++		     SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout,
++				     w25n01kv_ecc_get_status)),
++#else
+ 	SPINAND_INFO("W25N01GV",
+-		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa),
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x21),
+ 		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+ 		     NAND_ECCREQ(1, 512),
+ 		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+@@ -94,6 +202,30 @@ static const struct spinand_info winbond
+ 					      &update_cache_variants),
+ 		     0,
+ 		     SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
++#endif
++	SPINAND_INFO("W25N02KV",
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x22),
++		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
++		     NAND_ECCREQ(4, 512),
++		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++					      &write_cache_variants,
++					      &update_cache_variants),
++		     0,
++		     SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout,
++				     w25n02kv_n04kv_ecc_get_status)),
++	/* W25N04KV has 2-die(lun), however, it can select die automatically.
++	 * Treat it as single die here and double block size.
++	 */
++	SPINAND_INFO("W25N04KV",
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x23),
++		     NAND_MEMORG(1, 2048, 128, 64, 4096, 40, 2, 1, 1),
++		     NAND_ECCREQ(4, 512),
++		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++					      &write_cache_variants,
++					      &update_cache_variants),
++		     0,
++		     SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout,
++				     w25n02kv_n04kv_ecc_get_status)),
+ };
+ 
+ static int winbond_spinand_init(struct spinand_device *spinand)
+--- a/drivers/mtd/nand/spi/Kconfig
++++ b/drivers/mtd/nand/spi/Kconfig
+@@ -6,3 +6,12 @@ menuconfig MTD_SPI_NAND
+ 	select SPI_MEM
+ 	help
+ 	  This is the framework for the SPI NAND device drivers.
++
++config MTD_SPI_NAND_W25N01KV
++	tristate "Winbond W25N01KV Support"
++	select MTD_SPI_NAND
++	default n
++	help
++	  Winbond W25N01KV share the same ID with W25N01GV. However, they have
++	  different attributes.
++
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0505-crypto-add-eip197-inside-secure-support.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0505-crypto-add-eip197-inside-secure-support.patch
new file mode 100644
index 0000000..ed30817
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0505-crypto-add-eip197-inside-secure-support.patch
@@ -0,0 +1,194 @@
+--- a/drivers/crypto/inside-secure/safexcel.c
++++ b/drivers/crypto/inside-secure/safexcel.c
+@@ -304,6 +304,11 @@
+ 		/* Enable access to all IFPP program memories */
+ 		writel(EIP197_PE_ICE_RAM_CTRL_FPP_PROG_EN,
+ 		       EIP197_PE(priv) + EIP197_PE_ICE_RAM_CTRL(pe));
++
++		/* bypass the OCE, if present */
++		if (priv->flags & EIP197_OCE)
++			writel(EIP197_DEBUG_OCE_BYPASS, EIP197_PE(priv) +
++							EIP197_PE_DEBUG(pe));
+ 	}
+ 
+ }
+@@ -409,7 +414,7 @@
+ 		dir = "eip197d";
+ 	else if (priv->version == EIP197B_MRVL ||
+ 		 priv->version == EIP197_DEVBRD)
+-		dir = "eip197b";
++		dir = "eip197_minifw";
+ 	else
+ 		return -ENODEV;
+ 
+@@ -792,6 +797,12 @@
+ 			return ret;
+ 	}
+ 
++	/* Allow clocks to be forced on for EIP197 */
++	if (priv->flags & SAFEXCEL_HW_EIP197) {
++		writel(0xffffffff, EIP197_HIA_GEN_CFG(priv) + EIP197_FORCE_CLOCK_ON);
++		writel(0xffffffff, EIP197_HIA_GEN_CFG(priv) + EIP197_FORCE_CLOCK_ON2);
++	}
++
+ 	return safexcel_hw_setup_cdesc_rings(priv) ?:
+ 	       safexcel_hw_setup_rdesc_rings(priv) ?:
+ 	       0;
+@@ -1498,6 +1509,9 @@
+ 	hwopt = readl(EIP197_GLOBAL(priv) + EIP197_OPTIONS);
+ 	hiaopt = readl(EIP197_HIA_AIC(priv) + EIP197_HIA_OPTIONS);
+ 
++	priv->hwconfig.icever = 0;
++	priv->hwconfig.ocever = 0;
++	priv->hwconfig.psever = 0;
+ 	if (priv->flags & SAFEXCEL_HW_EIP197) {
+ 		/* EIP197 */
+ 		peopt = readl(EIP197_PE(priv) + EIP197_PE_OPTIONS(0));
+@@ -1516,8 +1530,37 @@
+ 					    EIP197_N_RINGS_MASK;
+ 		if (hiaopt & EIP197_HIA_OPT_HAS_PE_ARB)
+ 			priv->flags |= EIP197_PE_ARB;
+-		if (EIP206_OPT_ICE_TYPE(peopt) == 1)
++		if (EIP206_OPT_ICE_TYPE(peopt) == 1) {
+ 			priv->flags |= EIP197_ICE;
++			/* Detect ICE EIP207 class. engine and version */
++			version = readl(EIP197_PE(priv) +
++				  EIP197_PE_ICE_VERSION(0));
++			if (EIP197_REG_LO16(version) != EIP207_VERSION_LE) {
++				dev_err(dev, "EIP%d: ICE EIP207 not detected.\n",
++					peid);
++				return -ENODEV;
++			}
++			priv->hwconfig.icever = EIP197_VERSION_MASK(version);
++		}
++		if (EIP206_OPT_OCE_TYPE(peopt) == 1) {
++			priv->flags |= EIP197_OCE;
++			/* Detect EIP96PP packet stream editor and version */
++			version = readl(EIP197_PE(priv) + EIP197_PE_PSE_VERSION(0));
++			if (EIP197_REG_LO16(version) != EIP96_VERSION_LE) {
++				dev_err(dev, "EIP%d: EIP96PP not detected.\n", peid);
++				return -ENODEV;
++			}
++			priv->hwconfig.psever = EIP197_VERSION_MASK(version);
++			/* Detect OCE EIP207 class. engine and version */
++			version = readl(EIP197_PE(priv) +
++				  EIP197_PE_ICE_VERSION(0));
++			if (EIP197_REG_LO16(version) != EIP207_VERSION_LE) {
++				dev_err(dev, "EIP%d: OCE EIP207 not detected.\n",
++					peid);
++				return -ENODEV;
++			}
++			priv->hwconfig.ocever = EIP197_VERSION_MASK(version);
++		}
+ 		/* If not a full TRC, then assume simple TRC */
+ 		if (!(hwopt & EIP197_OPT_HAS_TRC))
+ 			priv->flags |= EIP197_SIMPLE_TRC;
+@@ -1555,13 +1598,14 @@
+ 				    EIP197_PE_EIP96_OPTIONS(0));
+ 
+ 	/* Print single info line describing what we just detected */
+-	dev_info(priv->dev, "EIP%d:%x(%d,%d,%d,%d)-HIA:%x(%d,%d,%d),PE:%x/%x,alg:%08x\n",
++	dev_info(priv->dev, "EIP%d:%x(%d,%d,%d,%d)-HIA:%x(%d,%d,%d),PE:%x/%x(alg:%08x)/%x/%x/%x\n",
+ 		 peid, priv->hwconfig.hwver, hwctg, priv->hwconfig.hwnumpes,
+ 		 priv->hwconfig.hwnumrings, priv->hwconfig.hwnumraic,
+ 		 priv->hwconfig.hiaver, priv->hwconfig.hwdataw,
+ 		 priv->hwconfig.hwcfsize, priv->hwconfig.hwrfsize,
+ 		 priv->hwconfig.ppver, priv->hwconfig.pever,
+-		 priv->hwconfig.algo_flags);
++		 priv->hwconfig.algo_flags, priv->hwconfig.icever,
++		 priv->hwconfig.ocever, priv->hwconfig.psever);
+ 
+ 	safexcel_configure(priv);
+ 
+@@ -1690,6 +1734,7 @@
+ {
+ 	struct device *dev = &pdev->dev;
+ 	struct safexcel_crypto_priv *priv;
++	struct resource *res;
+ 	int ret;
+ 
+ 	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+@@ -1701,7 +1746,11 @@
+ 
+ 	platform_set_drvdata(pdev, priv);
+ 
+-	priv->base = devm_platform_ioremap_resource(pdev, 0);
++	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++	if (!res)
++		return -EINVAL;
++
++	priv->base = devm_ioremap(dev, res->start, resource_size(res));
+ 	if (IS_ERR(priv->base)) {
+ 		dev_err(dev, "failed to get resource\n");
+ 		return PTR_ERR(priv->base);
+--- a/drivers/crypto/inside-secure/safexcel.h
++++ b/drivers/crypto/inside-secure/safexcel.h
+@@ -22,6 +22,7 @@
+ #define EIP96_VERSION_LE			0x9f60
+ #define EIP201_VERSION_LE			0x36c9
+ #define EIP206_VERSION_LE			0x31ce
++#define EIP207_VERSION_LE			0x30cf
+ #define EIP197_REG_LO16(reg)			(reg & 0xffff)
+ #define EIP197_REG_HI16(reg)			((reg >> 16) & 0xffff)
+ #define EIP197_VERSION_MASK(reg)		((reg >> 16) & 0xfff)
+@@ -34,6 +35,7 @@
+ 
+ /* EIP206 OPTIONS ENCODING */
+ #define EIP206_OPT_ICE_TYPE(n)			((n>>8)&3)
++#define EIP206_OPT_OCE_TYPE(n)			((n>>10)&3)
+ 
+ /* EIP197 OPTIONS ENCODING */
+ #define EIP197_OPT_HAS_TRC			BIT(31)
+@@ -168,6 +170,7 @@
+ #define EIP197_PE_ICE_FPP_CTRL(n)		(0x0d80 + (0x2000 * (n)))
+ #define EIP197_PE_ICE_PPTF_CTRL(n)		(0x0e00 + (0x2000 * (n)))
+ #define EIP197_PE_ICE_RAM_CTRL(n)		(0x0ff0 + (0x2000 * (n)))
++#define EIP197_PE_ICE_VERSION(n)		(0x0ffc + (0x2000 * (n)))
+ #define EIP197_PE_EIP96_TOKEN_CTRL(n)		(0x1000 + (0x2000 * (n)))
+ #define EIP197_PE_EIP96_FUNCTION_EN(n)		(0x1004 + (0x2000 * (n)))
+ #define EIP197_PE_EIP96_CONTEXT_CTRL(n)		(0x1008 + (0x2000 * (n)))
+@@ -176,10 +179,15 @@
+ #define EIP197_PE_EIP96_FUNCTION2_EN(n)		(0x1030 + (0x2000 * (n)))
+ #define EIP197_PE_EIP96_OPTIONS(n)		(0x13f8 + (0x2000 * (n)))
+ #define EIP197_PE_EIP96_VERSION(n)		(0x13fc + (0x2000 * (n)))
++#define EIP197_PE_OCE_VERSION(n)		(0x1bfc + (0x2000 * (n)))
+ #define EIP197_PE_OUT_DBUF_THRES(n)		(0x1c00 + (0x2000 * (n)))
+ #define EIP197_PE_OUT_TBUF_THRES(n)		(0x1d00 + (0x2000 * (n)))
++#define EIP197_PE_PSE_VERSION(n)		(0x1efc + (0x2000 * (n)))
++#define EIP197_PE_DEBUG(n)			(0x1ff4 + (0x2000 * (n)))
+ #define EIP197_PE_OPTIONS(n)			(0x1ff8 + (0x2000 * (n)))
+ #define EIP197_PE_VERSION(n)			(0x1ffc + (0x2000 * (n)))
++#define EIP197_FORCE_CLOCK_ON2			0xffd8
++#define EIP197_FORCE_CLOCK_ON			0xffe8
+ #define EIP197_MST_CTRL				0xfff4
+ #define EIP197_OPTIONS				0xfff8
+ #define EIP197_VERSION				0xfffc
+@@ -353,6 +361,9 @@
+ /* EIP197_PE_EIP96_TOKEN_CTRL2 */
+ #define EIP197_PE_EIP96_TOKEN_CTRL2_CTX_DONE	BIT(3)
+ 
++/* EIP197_PE_DEBUG */
++#define EIP197_DEBUG_OCE_BYPASS			BIT(1)
++
+ /* EIP197_STRC_CONFIG */
+ #define EIP197_STRC_CONFIG_INIT			BIT(31)
+ #define EIP197_STRC_CONFIG_LARGE_REC(s)		(s<<8)
+@@ -777,6 +788,7 @@
+ 	EIP197_PE_ARB		= BIT(2),
+ 	EIP197_ICE		= BIT(3),
+ 	EIP197_SIMPLE_TRC	= BIT(4),
++	EIP197_OCE		= BIT(5),
+ };
+ 
+ struct safexcel_hwconfig {
+@@ -784,7 +796,10 @@
+ 	int hwver;
+ 	int hiaver;
+ 	int ppver;
++	int icever;
+ 	int pever;
++	int ocever;
++	int psever;
+ 	int hwdataw;
+ 	int hwcfsize;
+ 	int hwrfsize;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0601-net-dsa-propagate-resolved-link-config-via-mac_link_.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0601-net-dsa-propagate-resolved-link-config-via-mac_link_.patch
index ee5a52e..3505231 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0601-net-dsa-propagate-resolved-link-config-via-mac_link_.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0601-net-dsa-propagate-resolved-link-config-via-mac_link_.patch
@@ -51,7 +51,7 @@
  	struct ethtool_eee *p = &priv->dev->ports[port].eee;
 --- a/drivers/net/dsa/lantiq_gswip.c
 +++ b/drivers/net/dsa/lantiq_gswip.c
-@@ -1664,7 +1664,9 @@ static void gswip_phylink_mac_link_down(
+@@ -1661,7 +1661,9 @@ static void gswip_phylink_mac_link_down(
  static void gswip_phylink_mac_link_up(struct dsa_switch *ds, int port,
  				      unsigned int mode,
  				      phy_interface_t interface,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0802-mtk-sd-Add-subsys-clock-control.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0802-mtk-sd-Add-subsys-clock-control.patch
new file mode 100644
index 0000000..8732cef
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0802-mtk-sd-Add-subsys-clock-control.patch
@@ -0,0 +1,125 @@
+--- a/drivers/mmc/host/mtk-sd.c
++++ b/drivers/mmc/host/mtk-sd.c
+@@ -33,6 +33,7 @@
+ #include <linux/mmc/slot-gpio.h>
+ 
+ #define MAX_BD_NUM          1024
++#define MSDC_NR_CLOCKS	    3
+ 
+ /*--------------------------------------------------------------------------*/
+ /* Common Definition                                                        */
+@@ -419,6 +420,8 @@ struct msdc_host {
+ 	struct clk *h_clk;      /* msdc h_clk */
+ 	struct clk *bus_clk;	/* bus clock which used to access register */
+ 	struct clk *src_clk_cg; /* msdc source clock control gate */
++	struct clk *sys_clk_cg; /* msdc subsys clock control gate */
++	struct clk_bulk_data bulk_clks[MSDC_NR_CLOCKS];
+ 	u32 mclk;		/* mmc subsystem clock frequency */
+ 	u32 src_clk_freq;	/* source clock frequency */
+ 	unsigned char timing;
+@@ -745,6 +748,7 @@ static void msdc_set_timeout(struct msdc
+ 
+ static void msdc_gate_clock(struct msdc_host *host)
+ {
++	clk_bulk_disable_unprepare(MSDC_NR_CLOCKS, host->bulk_clks);
+ 	clk_disable_unprepare(host->src_clk_cg);
+ 	clk_disable_unprepare(host->src_clk);
+ 	clk_disable_unprepare(host->bus_clk);
+@@ -753,10 +757,18 @@ static void msdc_gate_clock(struct msdc_
+ 
+ static void msdc_ungate_clock(struct msdc_host *host)
+ {
++	int ret;
++
+ 	clk_prepare_enable(host->h_clk);
+ 	clk_prepare_enable(host->bus_clk);
+ 	clk_prepare_enable(host->src_clk);
+ 	clk_prepare_enable(host->src_clk_cg);
++	ret = clk_bulk_prepare_enable(MSDC_NR_CLOCKS, host->bulk_clks);
++	if (ret) {
++		dev_err(host->dev, "Cannot enable pclk/axi/ahb clock gates\n");
++		return;
++	}
++
+ 	while (!(readl(host->base + MSDC_CFG) & MSDC_CFG_CKSTB))
+ 		cpu_relax();
+ }
+@@ -2195,6 +2207,50 @@ static void msdc_of_property_parse(struc
+ 		host->hs400_cmd_resp_sel_rising = false;
+ }
+ 
++static int msdc_of_clock_parse(struct platform_device *pdev,
++			       struct msdc_host *host)
++{
++	int ret;
++
++	host->src_clk = devm_clk_get(&pdev->dev, "source");
++	if (IS_ERR(host->src_clk))
++		return PTR_ERR(host->src_clk);
++
++	host->h_clk = devm_clk_get(&pdev->dev, "hclk");
++	if (IS_ERR(host->h_clk))
++		return PTR_ERR(host->h_clk);
++
++	host->bus_clk = devm_clk_get_optional(&pdev->dev, "bus_clk");
++	if (IS_ERR(host->bus_clk))
++		host->bus_clk = NULL;
++
++
++	/*source clock control gate is optional clock*/
++	host->src_clk_cg = devm_clk_get_optional(&pdev->dev, "source_cg");
++	if (IS_ERR(host->src_clk_cg))
++		host->src_clk_cg = NULL;
++
++	host->sys_clk_cg = devm_clk_get_optional(&pdev->dev, "sys_cg");
++	if (IS_ERR(host->sys_clk_cg))
++		host->sys_clk_cg = NULL;
++
++	/* If present, always enable for this clock gate */
++	clk_prepare_enable(host->sys_clk_cg);
++
++	host->bulk_clks[0].id = "pclk_cg";
++	host->bulk_clks[1].id = "axi_cg";
++	host->bulk_clks[2].id = "ahb_cg";
++
++	ret = devm_clk_bulk_get_optional(&pdev->dev, MSDC_NR_CLOCKS,
++					 host->bulk_clks);
++	if (ret) {
++		dev_err(&pdev->dev, "Cannot get pclk/axi/ahb clock gates\n");
++		return ret;
++	}
++
++	return 0;
++}
++
+ static int msdc_drv_probe(struct platform_device *pdev)
+ {
+ 	struct mmc_host *mmc;
+@@ -2235,25 +2291,9 @@ static int msdc_drv_probe(struct platfor
+ 	if (ret)
+ 		goto host_free;
+ 
+-	host->src_clk = devm_clk_get(&pdev->dev, "source");
+-	if (IS_ERR(host->src_clk)) {
+-		ret = PTR_ERR(host->src_clk);
+-		goto host_free;
+-	}
+-
+-	host->h_clk = devm_clk_get(&pdev->dev, "hclk");
+-	if (IS_ERR(host->h_clk)) {
+-		ret = PTR_ERR(host->h_clk);
++	ret = msdc_of_clock_parse(pdev, host);
++	if (ret)
+ 		goto host_free;
+-	}
+-
+-	host->bus_clk = devm_clk_get(&pdev->dev, "bus_clk");
+-	if (IS_ERR(host->bus_clk))
+-		host->bus_clk = NULL;
+-	/*source clock control gate is optional clock*/
+-	host->src_clk_cg = devm_clk_get(&pdev->dev, "source_cg");
+-	if (IS_ERR(host->src_clk_cg))
+-		host->src_clk_cg = NULL;
+ 
+ 	host->reset = devm_reset_control_get_optional_exclusive(&pdev->dev,
+ 								"hrst");
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0900-bt-mtk-serial-fix.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0900-bt-mtk-serial-fix.patch
index 2b3a4ae..420feac 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0900-bt-mtk-serial-fix.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0900-bt-mtk-serial-fix.patch
@@ -19,7 +19,7 @@
  	},
  	[PORT_NPCM] = {
  		.name		= "Nuvoton 16550",
-@@ -2598,6 +2598,11 @@ serial8250_do_set_termios(struct uart_po
+@@ -2610,6 +2610,11 @@ serial8250_do_set_termios(struct uart_po
  	unsigned long flags;
  	unsigned int baud, quot, frac = 0;
  
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0931-pwm-add-mt7981-support.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0931-pwm-add-mt7981-support.patch
index b926383..0de7966 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0931-pwm-add-mt7981-support.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0931-pwm-add-mt7981-support.patch
@@ -113,7 +113,7 @@
  static const struct pwm_mediatek_of_data mt7986_pwm_data = {
  	.num_pwms = 2,
  	.pwm45_fixup = false,
-+	.reg_ver = REG_V2,
++	.reg_ver = REG_V1,
  };
  
  static const struct pwm_mediatek_of_data mt8516_pwm_data = {
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/414-mtd-spinand-fix-gigadevice-read-dummy.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/414-mtd-spinand-fix-gigadevice-read-dummy.patch
new file mode 100644
index 0000000..5c5af56
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/414-mtd-spinand-fix-gigadevice-read-dummy.patch
@@ -0,0 +1,32 @@
+--- a/drivers/mtd/nand/spi/gigadevice.c
++++ b/drivers/mtd/nand/spi/gigadevice.c
+@@ -379,7 +379,7 @@ static const struct spinand_info gigadev
+ 		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x31),
+ 		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+ 		     NAND_ECCREQ(4, 512),
+-		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++		     SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants,
+ 					      &write_cache_variants,
+ 					      &update_cache_variants),
+ 		     SPINAND_HAS_QE_BIT,
+@@ -389,17 +389,17 @@ static const struct spinand_info gigadev
+ 		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32),
+ 		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
+ 		     NAND_ECCREQ(4, 512),
+-		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++		     SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants,
+ 					      &write_cache_variants,
+ 					      &update_cache_variants),
+ 		     SPINAND_HAS_QE_BIT,
+ 		     SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
+ 				     gd5fxgq5xexxg_ecc_get_status)),
+ 	SPINAND_INFO("GD5F4GQ6UExxH",
+-		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32),
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35),
+ 		     NAND_MEMORG(1, 2048, 64, 64, 4096, 80, 1, 1, 1),
+ 		     NAND_ECCREQ(4, 512),
+-		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++		     SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants,
+ 					      &write_cache_variants,
+ 					      &update_cache_variants),
+ 		     SPINAND_HAS_QE_BIT,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/415-mtd-spinand-fix-F50L1G41LB-ecc-check.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/415-mtd-spinand-fix-F50L1G41LB-ecc-check.patch
new file mode 100644
index 0000000..e4e51bb
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/415-mtd-spinand-fix-F50L1G41LB-ecc-check.patch
@@ -0,0 +1,12 @@
+--- a/drivers/mtd/nand/spi/gigadevice.c
++++ b/drivers/mtd/nand/spi/gigadevice.c
+@@ -263,8 +263,7 @@ static const struct spinand_info gigadev
+ 					      &write_cache_variants,
+ 					      &update_cache_variants),
+ 		     0,
+-		     SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout,
+-				     gd5fxgq4xa_ecc_get_status)),
++		     SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, NULL)),
+ 	SPINAND_INFO("GD5F1GQ4xA",
+ 		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf1),
+ 		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9011-Modify-tick_delay-for-spi-work-safety.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9011-Modify-tick_delay-for-spi-work-safety.patch
new file mode 100644
index 0000000..dd73f82
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9011-Modify-tick_delay-for-spi-work-safety.patch
@@ -0,0 +1,25 @@
+From 02205bef8a645d4374d2869e3a5a5a1d7c2e693a Mon Sep 17 00:00:00 2001
+From: Qii Wang <qii.wang@mediatek.com>
+Date: Sat, 14 May 2022 14:18:13 +0800
+Subject: [PATCH] [Modify tick_delay for spi work safety]
+
+---
+ drivers/spi/spi-mt65xx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c
+index bef03bd8c..c19e2d4d7 100644
+--- a/drivers/spi/spi-mt65xx.c
++++ b/drivers/spi/spi-mt65xx.c
+@@ -195,7 +195,7 @@ static const struct mtk_spi_compatible mt8183_compat = {
+  */
+ static const struct mtk_chip_config mtk_default_chip_info = {
+ 	.sample_sel = 0,
+-	.get_tick_dly = 1,
++	.get_tick_dly = 2,
+ };
+ 
+ static const struct of_device_id mtk_spi_of_match[] = {
+-- 
+2.18.0
+
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc
index c99ccdc..c7955d2 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc
@@ -25,12 +25,14 @@
     file://0310-dts-add-wmac-support-for-mt7622-rfb1.patch \
     file://0400-sound-add-some-helpers-to-control-mtk_memif.patch \
     file://0401-sound-refine-hw-params-and-hw-prepare.patch \
-    file://0402-sound-add-mt7986-driver-and-slic-driver.patch \
+    file://0402-sound-add-mt7986-driver.patch \
+    file://0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch \
     file://0500-v5.6-crypto-backport-inside-secure.patch \
     file://0501-crypto-add-eip97-inside-secure-support.patch \
     file://0502-dts-mt7623-eip97-inside-secure-support.patch \
     file://0503-crypto-fix-eip97-cache-incoherent.patch \
     file://0504-macsec-revert-async-support.patch \
+    file://0505-crypto-add-eip197-inside-secure-support.patch \
     file://0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch;apply=no \
     file://0601-net-dsa-propagate-resolved-link-config-via-mac_link_.patch \
     file://0602-net-dsa-mt7530-use-resolved-link-config-in-mac_link_.patch \
@@ -45,6 +47,7 @@
     file://0670-fix-SPIM-dma-buffer-not-aligned.patch \
     file://0701-fix-mtk-nfi-driver-dependency.patch \
     file://0801-mtk-sd-add-mt7986-support.patch \
+    file://0802-mtk-sd-Add-subsys-clock-control.patch \
     file://0900-bt-mtk-serial-fix.patch \
     file://0900-i2c-busses-add-mt7986-support.patch \
     file://0901-i2c-busses-add-mt7981-support.patch \
@@ -72,6 +75,8 @@
     file://402-pinctrl-add-mt7981-driver.patch \
     file://412-mtd-spinand-gigadevice-Add-support-for-F50L1G41LB-and-GD5F1GQ5UExxG.patch \
     file://413-mtd-spinand-gigadevice-Add-support-for-GD5FxGQxUExxG-GD5FxGQxUExxH-and-GD5FxGMxUExxG-series.patch \
+    file://414-mtd-spinand-fix-gigadevice-read-dummy.patch \
+    file://415-mtd-spinand-fix-F50L1G41LB-ecc-check.patch \
     file://500-auxadc-add-auxadc-32k-clk.patch \
     file://730-net-ethernet-mtk_eth_soc-add-mtk-dsa-tag-rx-offload.patch \
     file://738-mt7531-gsw-internal_phy_calibration.patch \
@@ -94,4 +99,5 @@
     file://9002-PATCH-1-1-usb-add-embedded-Host-feature-support.patch \
     file://9009-Add-spi-runtime-PM-support.patch \
     file://9010-iwconfig-wireless-rate-fix.patch;apply=no \
+    file://9011-Modify-tick_delay-for-spi-work-safety.patch \
     "
diff --git a/recipes-kernel/linux/linux-mediatek_5.4.bb b/recipes-kernel/linux/linux-mediatek_5.4.bb
index 7bcc946..ff50b19 100644
--- a/recipes-kernel/linux/linux-mediatek_5.4.bb
+++ b/recipes-kernel/linux/linux-mediatek_5.4.bb
@@ -6,8 +6,8 @@
 
 KBRANCH ?= "v5.4/standard/base"
 
-LINUX_VERSION ?= "5.4.188"
-SRCREV_machine ?= "d47303abd67e589778c28f3ccc688a0e12ba5692"
+LINUX_VERSION ?= "5.4.194"
+SRCREV_machine ?= "1bd3be748c4520bf71481081d86e0e7f1c9467de"
 KMETA = "kernel-meta"
 SRCREV_meta ?= "feeb59687bc0f054af837a5061f8d413ec7c93e9"