Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d01467a authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ARM: dts: msm: add node in device tree for yupik QRD"

parents f28745df 13421d7c
Loading
Loading
Loading
Loading
+164 −0
Original line number Diff line number Diff line
#include <dt-bindings/gpio/gpio.h>
#include "yupik-pmic-overlay.dtsi"
#include "pm8350b.dtsi"

&soc {
	gpio_keys {
		compatible = "gpio-keys";
		label = "gpio-keys";

		pinctrl-names = "default";
		pinctrl-0 = <&key_vol_up_default>;

		vol_up {
			label = "volume_up";
			gpios = <&pm7325_gpios 6 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <KEY_VOLUMEUP>;
			gpio-key,wakeup;
			debounce-interval = <15>;
			linux,can-disable;
		};
	};
};

&pmk8350_vadc {
	pm8350b_ref_gnd {
		reg = <PM8350B_ADC7_REF_GND>;
		label = "pm8350b_ref_gnd";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_vref_1p25 {
		reg = <PM8350B_ADC7_1P25VREF>;
		label = "pm8350b_vref_1p25";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_die_temp {
		reg = <PM8350B_ADC7_DIE_TEMP>;
		label = "pm8350b_die_temp";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_vph_pwr {
		reg = <PM8350B_ADC7_VPH_PWR>;
		label = "pm8350b_vph_pwr";
		qcom,pre-scaling = <1 3>;
	};

	pm8350b_vbat_sns {
		reg = <PM8350B_ADC7_VBAT_SNS>;
		label = "pm8350b_vbat_sns";
		qcom,pre-scaling = <1 3>;
	};

	pm8350b_usb_conn_therm {
		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
		label = "pm8350b_usb_conn_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_chg_skin_therm {
		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
		label = "pm8350b_chg_skin_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};
};

&pmk8350_adc_tm {
	io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM1_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM2_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM3_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM4_100K_PU>,
			<&pmk8350_vadc PMK8350_ADC7_AMUX_THM1_100K_PU>,
			<&pmk8350_vadc PM8350B_ADC7_AMUX_THM4_100K_PU>,
			<&pmk8350_vadc PM8350B_ADC7_GPIO2_100K_PU>;

	pm8350b_usb_conn_therm {
		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};

	pm8350b_chg_skin_therm {
		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};
};

&thermal_zones {
	conn-therm-usr {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pmk8350_adc_tm PM8350B_ADC7_AMUX_THM4_100K_PU>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};

	charger-therm-usr {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pmk8350_adc_tm PM8350B_ADC7_GPIO2_100K_PU>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};
};

&spmi_debug_bus {
	status = "ok";
};

&spmi_glink_debug {
	status = "ok";
};

&pm8350b_haptics {
	status = "ok";
};

&battery_charger {
	qcom,thermal-mitigation = <3000000 1500000 1000000 500000>;
};

&pm8350b_tz {
	io-channels = <&pmk8350_vadc PM8350B_ADC7_DIE_TEMP>;
	io-channel-names = "thermal";
};

&pm8008i_chip {
	status = "disabled";
};

&pm8008i_ldo {
	status = "disabled";
};

&pm8008j_chip {
	status = "disabled";
};

&pm8008j_ldo {
	status = "disabled";
};

&pm8350c_flash {
	status = "disabled";
};
+191 −0
Original line number Diff line number Diff line
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/iio/qcom,spmi-adc7-pm7325b.h>
#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
#include "yupik-pmic-overlay.dtsi"
#include "pm7325b.dtsi"

&soc {
	gpio_keys {
		compatible = "gpio-keys";
		label = "gpio-keys";

		pinctrl-names = "default";
		pinctrl-0 = <&key_vol_up_default>;

		vol_up {
			label = "volume_up";
			gpios = <&pm7325_gpios 6 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <KEY_VOLUMEUP>;
			gpio-key,wakeup;
			debounce-interval = <15>;
			linux,can-disable;
		};
	};
};

&pmk8350_vadc {
	pm7325b_ref_gnd {
		reg = <PM7325B_ADC7_REF_GND>;
		label = "pm7325b_ref_gnd";
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_vref_1p25 {
		reg = <PM7325B_ADC7_1P25VREF>;
		label = "pm7325b_vref_1p25";
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_die_temp {
		reg = <PM7325B_ADC7_DIE_TEMP>;
		label = "pm7325b_die_temp";
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_vph_pwr {
		reg = <PM7325B_ADC7_VPH_PWR>;
		label = "pm7325b_vph_pwr";
		qcom,pre-scaling = <1 3>;
	};

	pm7325b_vbat_sns {
		reg = <PM7325B_ADC7_VBAT_SNS>;
		label = "pm7325b_vbat_sns";
		qcom,pre-scaling = <1 3>;
	};

	pm7325b_usb_conn_therm {
		reg = <PM7325B_ADC7_AMUX_THM4_100K_PU>;
		label = "pm7325b_usb_conn_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_chg_skin_therm {
		reg = <PM7325B_ADC7_GPIO2_100K_PU>;
		label = "pm7325b_chg_skin_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_chg_temp {
		reg = <PM7325B_ADC7_CHG_TEMP>;
		label = "pm7325b_chg_temp";
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_ichg_fb {
		reg = <PM7325B_ADC7_ICHG_FB>;
		label = "pm7325b_ichg_fb";
		qcom,pre-scaling = <1000 305185>;
	};

	smb139x_1_smb_temp {
		reg = <SMB139x_1_ADC7_SMB_TEMP>;
		label = "smb139x_1_smb_temp";
		qcom,pre-scaling = <1 1>;
	};

	smb139x_2_smb_temp {
		reg = <SMB139x_2_ADC7_SMB_TEMP>;
		label = "smb139x_2_smb_temp";
		qcom,pre-scaling = <1 1>;
	};

	pm7325b_iin_fb {
		reg = <PM7325B_ADC7_SMB_IIN_IN>;
		label = "pm7325b_iin_fb";
		qcom,pre-scaling = <32 100>;
	};
};

&pmk8350_adc_tm {
	io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM1_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM2_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM3_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM4_100K_PU>,
			<&pmk8350_vadc PMK8350_ADC7_AMUX_THM1_100K_PU>,
			<&pmk8350_vadc PM7325B_ADC7_AMUX_THM4_100K_PU>,
			<&pmk8350_vadc PM7325B_ADC7_GPIO2_100K_PU>;

	pm7325b_usb_conn_therm {
		reg = <PM7325B_ADC7_AMUX_THM4_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};

	pm7325b_chg_skin_therm {
		reg = <PM7325B_ADC7_GPIO2_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};
};

&thermal_zones {
	conn-therm-usr {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pmk8350_adc_tm PM7325B_ADC7_AMUX_THM4_100K_PU>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};

	charger-therm-usr {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pmk8350_adc_tm PM7325B_ADC7_GPIO2_100K_PU>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};
};

&spmi_debug_bus {
	status = "ok";
};

&spmi_glink_debug {
	status = "ok";
};

&pm8350c_switch0 {
	qcom,led-mask = <9>; /* Channels 1 & 4 */
	qcom,symmetry-en;
};

&pm8350c_switch1 {
	qcom,led-mask = <6>; /* Channels 2 & 3 */
	qcom,symmetry-en;
};

&pm8350c_switch2 {
	qcom,led-mask = <15>; /* All Channels */
	qcom,symmetry-en;
};

&pm8350c_flash {
	status = "ok";
};

&battery_charger {
	qcom,thermal-mitigation = <3000000 1500000 1000000 500000>;
};

&pm7325b_tz {
	io-channels = <&pmk8350_vadc PM7325B_ADC7_DIE_TEMP>;
	io-channel-names = "thermal";
};
+397 −0
Original line number Diff line number Diff line
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
#include "yupik-pmic-overlay.dtsi"
#include "pm8350b.dtsi"
#include "yupik-audio-overlay.dtsi"

&soc {
	gpio_keys {
		compatible = "gpio-keys";
		label = "gpio-keys";

		pinctrl-names = "default";
		pinctrl-0 = <&key_vol_up_default>;

		vol_up {
			label = "volume_up";
			gpios = <&pm7325_gpios 6 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <KEY_VOLUMEUP>;
			gpio-key,wakeup;
			debounce-interval = <15>;
			linux,can-disable;
		};
	};
};

&pmk8350_vadc {
	pm8350b_ref_gnd {
		reg = <PM8350B_ADC7_REF_GND>;
		label = "pm8350b_ref_gnd";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_vref_1p25 {
		reg = <PM8350B_ADC7_1P25VREF>;
		label = "pm8350b_vref_1p25";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_die_temp {
		reg = <PM8350B_ADC7_DIE_TEMP>;
		label = "pm8350b_die_temp";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_vph_pwr {
		reg = <PM8350B_ADC7_VPH_PWR>;
		label = "pm8350b_vph_pwr";
		qcom,pre-scaling = <1 3>;
	};

	pm8350b_vbat_sns {
		reg = <PM8350B_ADC7_VBAT_SNS>;
		label = "pm8350b_vbat_sns";
		qcom,pre-scaling = <1 3>;
	};

	pm8350b_usb_conn_therm {
		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
		label = "pm8350b_usb_conn_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_chg_skin_therm {
		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
		label = "pm8350b_chg_skin_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_chg_temp {
		reg = <PM8350B_ADC7_CHG_TEMP>;
		label = "pm8350b_chg_temp";
		qcom,pre-scaling = <1 1>;
	};

	pm8350b_iin_fb {
		reg = <PM8350B_ADC7_IIN_FB>;
		label = "pm8350b_iin_fb";
		qcom,pre-scaling = <32 100>;
	};

	pm8350b_ichg_fb {
		reg = <PM8350B_ADC7_ICHG_FB>;
		label = "pm8350b_ichg_fb";
		qcom,pre-scaling = <1000 305185>;
	};

	smb139x_1_smb_temp {
		reg = <SMB139x_1_ADC7_SMB_TEMP>;
		label = "smb139x_1_smb_temp";
		qcom,pre-scaling = <1 1>;
	};

	smb139x_1_ichg_smb {
		reg = <SMB139x_1_ADC7_ICHG_SMB>;
		label = "smb139x_1_ichg_smb";
		qcom,pre-scaling = <14 100>;
	};

	smb139x_1_ichg_smb_pt {
		reg = <SMB139x_1_ADC7_ICHG_SMB>;
		label = "smb139x_1_ichg_smb_pt";
		qcom,pre-scaling = <32 100>;
	};

	smb139x_1_iin_smb {
		reg = <SMB139x_1_ADC7_IIN_SMB>;
		label = "smb139x_1_iin_smb";
		qcom,pre-scaling = <28 100>;
	};

	smb139x_2_smb_temp {
		reg = <SMB139x_2_ADC7_SMB_TEMP>;
		label = "smb139x_2_smb_temp";
		qcom,pre-scaling = <1 1>;
	};

	smb139x_2_ichg_smb {
		reg = <SMB139x_2_ADC7_ICHG_SMB>;
		label = "smb139x_2_ichg_smb";
		qcom,pre-scaling = <14 100>;
	};

	smb139x_2_ichg_smb_pt {
		reg = <SMB139x_2_ADC7_ICHG_SMB>;
		label = "smb139x_2_ichg_smb_pt";
		qcom,pre-scaling = <32 100>;
	};

	smb139x_2_iin_smb {
		reg = <SMB139x_2_ADC7_IIN_SMB>;
		label = "smb139x_2_iin_smb";
		qcom,pre-scaling = <28 100>;
	};
};

&pmk8350_adc_tm {
	io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM1_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM2_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM3_100K_PU>,
			<&pmk8350_vadc PM7325_ADC7_AMUX_THM4_100K_PU>,
			<&pmk8350_vadc PMK8350_ADC7_AMUX_THM1_100K_PU>,
			<&pmk8350_vadc PM8350B_ADC7_AMUX_THM4_100K_PU>,
			<&pmk8350_vadc PM8350B_ADC7_GPIO2_100K_PU>;

	pm8350b_usb_conn_therm {
		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};

	pm8350b_chg_skin_therm {
		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};
};

&thermal_zones {
	conn-therm-usr {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pmk8350_adc_tm PM8350B_ADC7_AMUX_THM4_100K_PU>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};

	charger-therm-usr {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pmk8350_adc_tm PM8350B_ADC7_GPIO2_100K_PU>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};
};

&spmi_debug_bus {
	status = "ok";
};

&spmi_glink_debug {
	status = "ok";
};

&pm8350c_switch0 {
	qcom,led-mask = <9>; /* Channels 1 & 4 */
	qcom,symmetry-en;
};

&pm8350c_switch1 {
	qcom,led-mask = <6>; /* Channels 2 & 3 */
	qcom,symmetry-en;
};

&pm8350c_switch2 {
	qcom,led-mask = <15>; /* All Channels */
	qcom,symmetry-en;
};

&pm8350c_flash {
	status = "ok";
};

&pmk8350_sdam_2 {
	hap_cl_brake: cl_brake@7c {
		reg = <0x7c 0x1>;
		bits = <0 8>;
	};
};

&pm8350b_haptics {
	nvmem-cell-names = "hap_cl_brake";
	nvmem-cells = <&hap_cl_brake>;
	nvmem-names = "hap_cfg_sdam";
	nvmem = <&pmk8350_sdam_46>;
	qcom,pbs-client = <&pm8350b_pbs2>;

	qcom,vmax-mv = <1300>;
	qcom,lra-period-us = <5880>;
	status = "ok";

	effect_0 {
		/* CLICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_1 {
		/* DOUBLE_CLICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_2 {
		/* TICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_3 {
		/* THUD */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_4 {
		/* POP */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_5 {
		/* HEAVY CLICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};
};

&battery_charger {
	qcom,thermal-mitigation = <10000000 9500000 9000000 8500000 8000000
				7500000 7000000 6500000 6000000 5500000
				5000000 4500000 4000000 3500000 3000000
				2500000 2000000 1500000 1000000 500000>;
};

&pm8350b_tz {
	io-channels = <&pmk8350_vadc PM8350B_ADC7_DIE_TEMP>;
	io-channel-names = "thermal";
};

&wsa883x_0221 {
	status = "disabled";
};

&swr_haptics {
	status = "okay";
};

&tx_macro {
	qcom,swr-phy-dev-addr = <0x0D 0x01170223>,
				<0x08 0x58350223>,
				<0x08 0x58350222>,
				<0x08 0x58350221>,
				<0x08 0x58350220>;
};

&wcd938x_rx_slave {
	status = "okay";
};

&wcd938x_tx_slave {
	status = "okay";
};

&wcd938x_codec {
	status = "okay";
};

&wcd937x_codec {
	status = "disabled";
};

&wcd937x_rx_slave {
	status = "disabled";
};

&wcd937x_tx_slave {
	status = "disabled";
};


&yupik_snd {
	qcom,model = "lahaina-yupikqrd-snd-card";
	qcom,audio-routing =
		"AMIC1", "Analog Mic1",
		"Analog Mic1", "MIC BIAS1",
		"AMIC2", "Analog Mic2",
		"Analog Mic2", "MIC BIAS2",
		"AMIC3", "Analog Mic3",
		"Analog Mic3", "MIC BIAS3",
		"AMIC4", "Analog Mic4",
		"Analog Mic4", "MIC BIAS1",
		"TX DMIC0", "Digital Mic0",
		"Digital Mic0", "MIC BIAS1",
		"TX DMIC1", "Digital Mic1",
		"Digital Mic1", "MIC BIAS1",
		"TX DMIC2", "Digital Mic2",
		"Digital Mic2", "MIC BIAS3",
		"TX DMIC3", "Digital Mic3",
		"Digital Mic3", "MIC BIAS3",
		"TX DMIC4", "Digital Mic4",
		"Digital Mic4", "MIC BIAS4",
		"TX DMIC5", "Digital Mic5",
		"Digital Mic5", "MIC BIAS4",
		"IN1_HPHL", "HPHL_OUT",
		"IN2_HPHR", "HPHR_OUT",
		"IN3_AUX", "AUX_OUT",
		"HAP_IN", "PCM_OUT",
		"WSA SRC0_INP", "SRC0",
		"WSA_TX DEC0_INP", "TX DEC0 MUX",
		"WSA_TX DEC1_INP", "TX DEC1 MUX",
		"RX_TX DEC0_INP", "TX DEC0 MUX",
		"RX_TX DEC1_INP", "TX DEC1 MUX",
		"RX_TX DEC2_INP", "TX DEC2 MUX",
		"RX_TX DEC3_INP", "TX DEC3 MUX",
		"SpkrRight IN", "WSA_SPK2 OUT",
		"TX SWR_INPUT", "WCD_TX_OUTPUT",
		"VA SWR_INPUT", "VA_SWR_CLK",
		"VA SWR_INPUT", "WCD_TX_OUTPUT",
		"VA_AIF1 CAP", "VA_SWR_CLK",
		"VA_AIF2 CAP", "VA_SWR_CLK",
		"VA_AIF3 CAP", "VA_SWR_CLK",
		"VA DMIC0", "Digital Mic0",
		"VA DMIC1", "Digital Mic1",
		"VA DMIC2", "Digital Mic2",
		"VA DMIC3", "Digital Mic3",
		"VA DMIC4", "Digital Mic4",
		"VA DMIC5", "Digital Mic5",
		"VA DMIC0", "VA MIC BIAS1",
		"VA DMIC1", "VA MIC BIAS3",
		"VA DMIC2", "VA MIC BIAS4",
		"VA DMIC3", "VA MIC BIAS1",
		"VA DMIC4", "VA MIC BIAS3",
		"VA DMIC5", "VA MIC BIAS4";
	qcom,swr-dmic-max-devs = <0>;

	qcom,msm-mbhc-usbc-audio-supported = <1>;
	qcom,msm-mbhc-hphl-swh = <0>;
	qcom,msm-mbhc-gnd-swh = <0>;

	asoc-codec  = <&stub_codec>, <&bolero>,
		      <&wcd938x_codec>, <&swr_haptics>,
		      <&wsa883x_0222>;
	asoc-codec-names = "msm-stub-codec.1", "bolero_codec",
			   "wcd938x_codec", "swr-haptics",
			   "wsa-codec2";
	qcom,wsa-max-devs = <1>;
	qcom,msm_audio_ssr_devs = <&audio_apr>, <&q6core>, <&lpi_tlmm>,
				  <&bolero>;
};