116e8e807SStephan Gerhold// SPDX-License-Identifier: GPL-2.0-only 216e8e807SStephan Gerhold 316e8e807SStephan Gerhold/dts-v1/; 416e8e807SStephan Gerhold 5bfe9d754SStephan Gerhold#include "msm8916-pm8916.dtsi" 616e8e807SStephan Gerhold#include <dt-bindings/gpio/gpio.h> 73ba8bbc4SNikita Travkin#include <dt-bindings/input/input.h> 86eb81528SNikita Travkin#include <dt-bindings/interrupt-controller/irq.h> 96b4ad4beSNikita Travkin#include <dt-bindings/leds/common.h> 1016e8e807SStephan Gerhold 1116e8e807SStephan Gerhold/ { 1216e8e807SStephan Gerhold model = "Longcheer L8150"; 1316e8e807SStephan Gerhold compatible = "longcheer,l8150", "qcom,msm8916-v1-qrd/9-v1", "qcom,msm8916"; 14*eaa744b1SArnaud Ferraris chassis-type = "handset"; 1516e8e807SStephan Gerhold 1616e8e807SStephan Gerhold aliases { 1716e8e807SStephan Gerhold serial0 = &blsp1_uart2; 1816e8e807SStephan Gerhold }; 1916e8e807SStephan Gerhold 2016e8e807SStephan Gerhold chosen { 2116e8e807SStephan Gerhold stdout-path = "serial0"; 2216e8e807SStephan Gerhold }; 2316e8e807SStephan Gerhold 24b0e1600dSNikita Travkin reserved-memory { 25b0e1600dSNikita Travkin // wcnss.mdt is not relocatable, so it must be loaded at 0x8b600000 26b0e1600dSNikita Travkin /delete-node/ wcnss@89300000; 27b0e1600dSNikita Travkin 28b0e1600dSNikita Travkin wcnss_mem: wcnss@8b600000 { 29b0e1600dSNikita Travkin reg = <0x0 0x8b600000 0x0 0x600000>; 30b0e1600dSNikita Travkin no-map; 31b0e1600dSNikita Travkin }; 32b0e1600dSNikita Travkin }; 33b0e1600dSNikita Travkin 343ba8bbc4SNikita Travkin gpio-keys { 353ba8bbc4SNikita Travkin compatible = "gpio-keys"; 363ba8bbc4SNikita Travkin 373ba8bbc4SNikita Travkin pinctrl-names = "default"; 383ba8bbc4SNikita Travkin pinctrl-0 = <&gpio_keys_default>; 393ba8bbc4SNikita Travkin 403ba8bbc4SNikita Travkin label = "GPIO Buttons"; 413ba8bbc4SNikita Travkin 423ba8bbc4SNikita Travkin volume-up { 433ba8bbc4SNikita Travkin label = "Volume Up"; 443ba8bbc4SNikita Travkin gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>; 453ba8bbc4SNikita Travkin linux,code = <KEY_VOLUMEUP>; 463ba8bbc4SNikita Travkin }; 473ba8bbc4SNikita Travkin }; 486eb81528SNikita Travkin 496eb81528SNikita Travkin reg_ctp: regulator-ctp { 506eb81528SNikita Travkin compatible = "regulator-fixed"; 516eb81528SNikita Travkin regulator-name = "ctp"; 526eb81528SNikita Travkin 536eb81528SNikita Travkin regulator-min-microvolt = <2800000>; 546eb81528SNikita Travkin regulator-max-microvolt = <2800000>; 556eb81528SNikita Travkin 566eb81528SNikita Travkin gpio = <&msmgpio 17 GPIO_ACTIVE_HIGH>; 576eb81528SNikita Travkin enable-active-high; 586eb81528SNikita Travkin 596eb81528SNikita Travkin pinctrl-names = "default"; 606eb81528SNikita Travkin pinctrl-0 = <&ctp_pwr_en_default>; 616eb81528SNikita Travkin }; 626b4ad4beSNikita Travkin 636b4ad4beSNikita Travkin flash-led-controller { 646b4ad4beSNikita Travkin compatible = "sgmicro,sgm3140"; 656b4ad4beSNikita Travkin flash-gpios = <&msmgpio 31 GPIO_ACTIVE_HIGH>; 666b4ad4beSNikita Travkin enable-gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>; 676b4ad4beSNikita Travkin 686b4ad4beSNikita Travkin pinctrl-names = "default"; 696b4ad4beSNikita Travkin pinctrl-0 = <&camera_flash_default>; 706b4ad4beSNikita Travkin 716b4ad4beSNikita Travkin flash_led: led { 726b4ad4beSNikita Travkin function = LED_FUNCTION_FLASH; 736b4ad4beSNikita Travkin color = <LED_COLOR_ID_WHITE>; 746b4ad4beSNikita Travkin flash-max-timeout-us = <250000>; 756b4ad4beSNikita Travkin }; 766b4ad4beSNikita Travkin }; 776eb81528SNikita Travkin}; 786eb81528SNikita Travkin 7938260b9eSNikita Travkin&blsp_i2c1 { 8038260b9eSNikita Travkin status = "okay"; 8138260b9eSNikita Travkin 8238260b9eSNikita Travkin led-controller@45 { 8338260b9eSNikita Travkin compatible = "awinic,aw2013"; 8438260b9eSNikita Travkin reg = <0x45>; 8538260b9eSNikita Travkin #address-cells = <1>; 8638260b9eSNikita Travkin #size-cells = <0>; 8738260b9eSNikita Travkin 8838260b9eSNikita Travkin vcc-supply = <&pm8916_l17>; 8938260b9eSNikita Travkin 9038260b9eSNikita Travkin led@0 { 9138260b9eSNikita Travkin reg = <0>; 9238260b9eSNikita Travkin led-max-microamp = <5000>; 9338260b9eSNikita Travkin function = LED_FUNCTION_INDICATOR; 9438260b9eSNikita Travkin color = <LED_COLOR_ID_RED>; 9538260b9eSNikita Travkin }; 9638260b9eSNikita Travkin 9738260b9eSNikita Travkin led@1 { 9838260b9eSNikita Travkin reg = <1>; 9938260b9eSNikita Travkin led-max-microamp = <5000>; 10038260b9eSNikita Travkin function = LED_FUNCTION_INDICATOR; 10138260b9eSNikita Travkin color = <LED_COLOR_ID_GREEN>; 10238260b9eSNikita Travkin }; 10338260b9eSNikita Travkin 10438260b9eSNikita Travkin led@2 { 10538260b9eSNikita Travkin reg = <2>; 10638260b9eSNikita Travkin led-max-microamp = <5000>; 10738260b9eSNikita Travkin function = LED_FUNCTION_INDICATOR; 10838260b9eSNikita Travkin color = <LED_COLOR_ID_BLUE>; 10938260b9eSNikita Travkin }; 11038260b9eSNikita Travkin }; 11138260b9eSNikita Travkin}; 11238260b9eSNikita Travkin 1136bd2cae7SNikita Travkin&blsp_i2c2 { 1146bd2cae7SNikita Travkin status = "okay"; 1156bd2cae7SNikita Travkin 1166bd2cae7SNikita Travkin accelerometer@10 { 11751c7786fSStephan Gerhold compatible = "bosch,bmc156_accel"; 1186bd2cae7SNikita Travkin reg = <0x10>; 1196bd2cae7SNikita Travkin 12051c7786fSStephan Gerhold /* 12151c7786fSStephan Gerhold * For some reason the interrupt line is usually not connected 12251c7786fSStephan Gerhold * to the BMC156. However, there are two pads next to the chip 12351c7786fSStephan Gerhold * that can be shorted to make it work if needed. 12451c7786fSStephan Gerhold * 12551c7786fSStephan Gerhold * interrupt-parent = <&msmgpio>; 12651c7786fSStephan Gerhold * interrupts = <116 IRQ_TYPE_EDGE_RISING>; 12751c7786fSStephan Gerhold */ 12851c7786fSStephan Gerhold 12951c7786fSStephan Gerhold pinctrl-names = "default"; 13051c7786fSStephan Gerhold pinctrl-0 = <&accel_int_default>; 13151c7786fSStephan Gerhold 1326bd2cae7SNikita Travkin vdd-supply = <&pm8916_l17>; 1336bd2cae7SNikita Travkin vddio-supply = <&pm8916_l6>; 1346bd2cae7SNikita Travkin 1356bd2cae7SNikita Travkin mount-matrix = "0", "1", "0", 1366bd2cae7SNikita Travkin "-1", "0", "0", 1376bd2cae7SNikita Travkin "0", "0", "1"; 1386bd2cae7SNikita Travkin }; 1396bd2cae7SNikita Travkin 1406bd2cae7SNikita Travkin magnetometer@12 { 14151c7786fSStephan Gerhold compatible = "bosch,bmc156_magn"; 1426bd2cae7SNikita Travkin reg = <0x12>; 1436bd2cae7SNikita Travkin 14451c7786fSStephan Gerhold interrupt-parent = <&msmgpio>; 14551c7786fSStephan Gerhold interrupts = <113 IRQ_TYPE_EDGE_RISING>; 14651c7786fSStephan Gerhold 14751c7786fSStephan Gerhold pinctrl-names = "default"; 14851c7786fSStephan Gerhold pinctrl-0 = <&magn_int_default>; 14951c7786fSStephan Gerhold 1506bd2cae7SNikita Travkin vdd-supply = <&pm8916_l17>; 1516bd2cae7SNikita Travkin vddio-supply = <&pm8916_l6>; 1526bd2cae7SNikita Travkin }; 1536bd2cae7SNikita Travkin 1546bd2cae7SNikita Travkin gyroscope@68 { 1556bd2cae7SNikita Travkin compatible = "bosch,bmg160"; 1566bd2cae7SNikita Travkin reg = <0x68>; 1576bd2cae7SNikita Travkin 1586bd2cae7SNikita Travkin interrupt-parent = <&msmgpio>; 15951c7786fSStephan Gerhold interrupts = <23 IRQ_TYPE_EDGE_RISING>, 16051c7786fSStephan Gerhold <22 IRQ_TYPE_EDGE_RISING>; 1616bd2cae7SNikita Travkin 1626bd2cae7SNikita Travkin pinctrl-names = "default"; 1636bd2cae7SNikita Travkin pinctrl-0 = <&gyro_int_default>; 1646bd2cae7SNikita Travkin 1656bd2cae7SNikita Travkin vdd-supply = <&pm8916_l17>; 1666bd2cae7SNikita Travkin vddio-supply = <&pm8916_l6>; 1676bd2cae7SNikita Travkin }; 1686bd2cae7SNikita Travkin}; 1696bd2cae7SNikita Travkin 1706eb81528SNikita Travkin&blsp_i2c5 { 1716eb81528SNikita Travkin status = "okay"; 1726eb81528SNikita Travkin 1736eb81528SNikita Travkin rmi4@20 { 1746eb81528SNikita Travkin compatible = "syna,rmi4-i2c"; 1756eb81528SNikita Travkin reg = <0x20>; 1766eb81528SNikita Travkin #address-cells = <1>; 1776eb81528SNikita Travkin #size-cells = <0>; 1786eb81528SNikita Travkin 1796eb81528SNikita Travkin interrupt-parent = <&msmgpio>; 1806eb81528SNikita Travkin interrupts = <13 IRQ_TYPE_EDGE_FALLING>; 1816eb81528SNikita Travkin 1826eb81528SNikita Travkin vdd-supply = <®_ctp>; 1836eb81528SNikita Travkin vio-supply = <&pm8916_l6>; 1846eb81528SNikita Travkin 1856eb81528SNikita Travkin pinctrl-names = "default"; 1866eb81528SNikita Travkin pinctrl-0 = <&tp_int_default>; 1876eb81528SNikita Travkin 1886eb81528SNikita Travkin syna,startup-delay-ms = <10>; 1896eb81528SNikita Travkin 1906eb81528SNikita Travkin rmi4-f01@1 { 1916eb81528SNikita Travkin reg = <0x1>; 1926eb81528SNikita Travkin syna,nosleep-mode = <1>; // Allow sleeping 1936eb81528SNikita Travkin }; 1946eb81528SNikita Travkin 1956eb81528SNikita Travkin rmi4-f12@12 { 1966eb81528SNikita Travkin reg = <0x12>; 1976eb81528SNikita Travkin syna,sensor-type = <1>; // Touchscreen 1986eb81528SNikita Travkin }; 1996eb81528SNikita Travkin }; 20016e8e807SStephan Gerhold}; 20116e8e807SStephan Gerhold 202e2f6482aSStephan Gerhold&blsp1_uart2 { 203e2f6482aSStephan Gerhold status = "okay"; 204e2f6482aSStephan Gerhold}; 205e2f6482aSStephan Gerhold 2064eb7b63dSStephan Gerhold&pm8916_resin { 2074eb7b63dSStephan Gerhold status = "okay"; 2084eb7b63dSStephan Gerhold linux,code = <KEY_VOLUMEDOWN>; 2094eb7b63dSStephan Gerhold}; 2104eb7b63dSStephan Gerhold 211b30cad26SStephan Gerhold&pm8916_usbin { 212b30cad26SStephan Gerhold status = "okay"; 213b30cad26SStephan Gerhold}; 214b30cad26SStephan Gerhold 2150af8bbdbSNikita Travkin&pm8916_vib { 2160af8bbdbSNikita Travkin status = "okay"; 2170af8bbdbSNikita Travkin}; 2180af8bbdbSNikita Travkin 219e2f6482aSStephan Gerhold&pronto { 220e2f6482aSStephan Gerhold status = "okay"; 221e2f6482aSStephan Gerhold}; 222e2f6482aSStephan Gerhold 223e2f6482aSStephan Gerhold&sdhc_1 { 224e2f6482aSStephan Gerhold status = "okay"; 225e2f6482aSStephan Gerhold 226e2f6482aSStephan Gerhold pinctrl-names = "default", "sleep"; 227e2f6482aSStephan Gerhold pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>; 228e2f6482aSStephan Gerhold pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>; 229e2f6482aSStephan Gerhold}; 230e2f6482aSStephan Gerhold 231e2f6482aSStephan Gerhold&sdhc_2 { 232e2f6482aSStephan Gerhold status = "okay"; 233e2f6482aSStephan Gerhold 234e2f6482aSStephan Gerhold pinctrl-names = "default", "sleep"; 235e2f6482aSStephan Gerhold pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>; 236e2f6482aSStephan Gerhold pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>; 237e2f6482aSStephan Gerhold 238e2f6482aSStephan Gerhold non-removable; 239e2f6482aSStephan Gerhold}; 240e2f6482aSStephan Gerhold 241e2f6482aSStephan Gerhold&usb { 242e2f6482aSStephan Gerhold status = "okay"; 243e2f6482aSStephan Gerhold dr_mode = "peripheral"; 244b30cad26SStephan Gerhold extcon = <&pm8916_usbin>; 245e2f6482aSStephan Gerhold}; 246e2f6482aSStephan Gerhold 247e2f6482aSStephan Gerhold&usb_hs_phy { 248b30cad26SStephan Gerhold extcon = <&pm8916_usbin>; 249e2f6482aSStephan Gerhold}; 250e2f6482aSStephan Gerhold 25116e8e807SStephan Gerhold&smd_rpm_regulators { 25216e8e807SStephan Gerhold vdd_l1_l2_l3-supply = <&pm8916_s3>; 25316e8e807SStephan Gerhold vdd_l4_l5_l6-supply = <&pm8916_s4>; 25416e8e807SStephan Gerhold vdd_l7-supply = <&pm8916_s4>; 25516e8e807SStephan Gerhold 25616e8e807SStephan Gerhold s3 { 25716e8e807SStephan Gerhold regulator-min-microvolt = <1200000>; 25816e8e807SStephan Gerhold regulator-max-microvolt = <1300000>; 25916e8e807SStephan Gerhold }; 26016e8e807SStephan Gerhold 26116e8e807SStephan Gerhold s4 { 26216e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 26316e8e807SStephan Gerhold regulator-max-microvolt = <2100000>; 26416e8e807SStephan Gerhold }; 26516e8e807SStephan Gerhold 26616e8e807SStephan Gerhold l1 { 26716e8e807SStephan Gerhold regulator-min-microvolt = <1225000>; 26816e8e807SStephan Gerhold regulator-max-microvolt = <1225000>; 26916e8e807SStephan Gerhold }; 27016e8e807SStephan Gerhold 27116e8e807SStephan Gerhold l2 { 27216e8e807SStephan Gerhold regulator-min-microvolt = <1200000>; 27316e8e807SStephan Gerhold regulator-max-microvolt = <1200000>; 27416e8e807SStephan Gerhold }; 27516e8e807SStephan Gerhold 27616e8e807SStephan Gerhold l4 { 27716e8e807SStephan Gerhold regulator-min-microvolt = <2050000>; 27816e8e807SStephan Gerhold regulator-max-microvolt = <2050000>; 27916e8e807SStephan Gerhold }; 28016e8e807SStephan Gerhold 28116e8e807SStephan Gerhold l5 { 28216e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 28316e8e807SStephan Gerhold regulator-max-microvolt = <1800000>; 28416e8e807SStephan Gerhold }; 28516e8e807SStephan Gerhold 28616e8e807SStephan Gerhold l6 { 28716e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 28816e8e807SStephan Gerhold regulator-max-microvolt = <1800000>; 28916e8e807SStephan Gerhold }; 29016e8e807SStephan Gerhold 29116e8e807SStephan Gerhold l7 { 29216e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 29316e8e807SStephan Gerhold regulator-max-microvolt = <1800000>; 29416e8e807SStephan Gerhold }; 29516e8e807SStephan Gerhold 29616e8e807SStephan Gerhold l8 { 29716e8e807SStephan Gerhold regulator-min-microvolt = <2850000>; 29816e8e807SStephan Gerhold regulator-max-microvolt = <2900000>; 29916e8e807SStephan Gerhold }; 30016e8e807SStephan Gerhold 30116e8e807SStephan Gerhold l9 { 30216e8e807SStephan Gerhold regulator-min-microvolt = <3300000>; 30316e8e807SStephan Gerhold regulator-max-microvolt = <3300000>; 30416e8e807SStephan Gerhold }; 30516e8e807SStephan Gerhold 30616e8e807SStephan Gerhold l10 { 30716e8e807SStephan Gerhold regulator-min-microvolt = <2700000>; 30816e8e807SStephan Gerhold regulator-max-microvolt = <2800000>; 30916e8e807SStephan Gerhold }; 31016e8e807SStephan Gerhold 31116e8e807SStephan Gerhold l11 { 31216e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 31316e8e807SStephan Gerhold regulator-max-microvolt = <2950000>; 31416e8e807SStephan Gerhold regulator-allow-set-load; 31516e8e807SStephan Gerhold regulator-system-load = <200000>; 31616e8e807SStephan Gerhold }; 31716e8e807SStephan Gerhold 31816e8e807SStephan Gerhold l12 { 31916e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 32016e8e807SStephan Gerhold regulator-max-microvolt = <2950000>; 32116e8e807SStephan Gerhold }; 32216e8e807SStephan Gerhold 32316e8e807SStephan Gerhold l13 { 32416e8e807SStephan Gerhold regulator-min-microvolt = <3075000>; 32516e8e807SStephan Gerhold regulator-max-microvolt = <3075000>; 32616e8e807SStephan Gerhold }; 32716e8e807SStephan Gerhold 32816e8e807SStephan Gerhold l14 { 32916e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 33016e8e807SStephan Gerhold regulator-max-microvolt = <3300000>; 33116e8e807SStephan Gerhold }; 33216e8e807SStephan Gerhold 33316e8e807SStephan Gerhold l15 { 33416e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 33516e8e807SStephan Gerhold regulator-max-microvolt = <3300000>; 33616e8e807SStephan Gerhold }; 33716e8e807SStephan Gerhold 33816e8e807SStephan Gerhold l16 { 33916e8e807SStephan Gerhold regulator-min-microvolt = <1800000>; 34016e8e807SStephan Gerhold regulator-max-microvolt = <3300000>; 34116e8e807SStephan Gerhold }; 34216e8e807SStephan Gerhold 34316e8e807SStephan Gerhold l17 { 34416e8e807SStephan Gerhold regulator-min-microvolt = <2850000>; 34516e8e807SStephan Gerhold regulator-max-microvolt = <2850000>; 34616e8e807SStephan Gerhold }; 34716e8e807SStephan Gerhold 34816e8e807SStephan Gerhold l18 { 34916e8e807SStephan Gerhold regulator-min-microvolt = <2700000>; 35016e8e807SStephan Gerhold regulator-max-microvolt = <2700000>; 35116e8e807SStephan Gerhold }; 35216e8e807SStephan Gerhold}; 353f7f394f0SStephan Gerhold 354f7f394f0SStephan Gerhold&msmgpio { 35551c7786fSStephan Gerhold accel_int_default: accel-int-default { 35651c7786fSStephan Gerhold pins = "gpio116"; 35751c7786fSStephan Gerhold function = "gpio"; 35851c7786fSStephan Gerhold 35951c7786fSStephan Gerhold drive-strength = <2>; 36051c7786fSStephan Gerhold bias-disable; 36151c7786fSStephan Gerhold }; 36251c7786fSStephan Gerhold 3636b4ad4beSNikita Travkin camera_flash_default: camera-flash-default { 3646b4ad4beSNikita Travkin pins = "gpio31", "gpio32"; 3656b4ad4beSNikita Travkin function = "gpio"; 3666b4ad4beSNikita Travkin 3676b4ad4beSNikita Travkin drive-strength = <2>; 3686b4ad4beSNikita Travkin bias-disable; 3696b4ad4beSNikita Travkin }; 3706b4ad4beSNikita Travkin 3716eb81528SNikita Travkin ctp_pwr_en_default: ctp-pwr-en-default { 3726eb81528SNikita Travkin pins = "gpio17"; 3736eb81528SNikita Travkin function = "gpio"; 3746eb81528SNikita Travkin 3756eb81528SNikita Travkin drive-strength = <2>; 3766eb81528SNikita Travkin bias-disable; 3776eb81528SNikita Travkin }; 3786eb81528SNikita Travkin 379f7f394f0SStephan Gerhold gpio_keys_default: gpio-keys-default { 3806554a295SStephan Gerhold pins = "gpio107"; 381f7f394f0SStephan Gerhold function = "gpio"; 3826554a295SStephan Gerhold 383f7f394f0SStephan Gerhold drive-strength = <2>; 384f7f394f0SStephan Gerhold bias-pull-up; 385f7f394f0SStephan Gerhold }; 386f7f394f0SStephan Gerhold 3876bd2cae7SNikita Travkin gyro_int_default: gyro-int-default { 38851c7786fSStephan Gerhold pins = "gpio22", "gpio23"; 38951c7786fSStephan Gerhold function = "gpio"; 39051c7786fSStephan Gerhold 39151c7786fSStephan Gerhold drive-strength = <2>; 39251c7786fSStephan Gerhold bias-disable; 39351c7786fSStephan Gerhold }; 39451c7786fSStephan Gerhold 39551c7786fSStephan Gerhold magn_int_default: magn-int-default { 39651c7786fSStephan Gerhold pins = "gpio113"; 3976bd2cae7SNikita Travkin function = "gpio"; 3986bd2cae7SNikita Travkin 3996bd2cae7SNikita Travkin drive-strength = <2>; 4006bd2cae7SNikita Travkin bias-disable; 4016bd2cae7SNikita Travkin }; 4026bd2cae7SNikita Travkin 4036eb81528SNikita Travkin tp_int_default: tp-int-default { 4046eb81528SNikita Travkin pins = "gpio13"; 4056eb81528SNikita Travkin function = "gpio"; 4066eb81528SNikita Travkin 4076eb81528SNikita Travkin drive-strength = <2>; 4086eb81528SNikita Travkin bias-disable; 4096eb81528SNikita Travkin }; 410f7f394f0SStephan Gerhold}; 411