Created
May 10, 2019 19:45
-
-
Save alistairbill/9eb2055960c1f28f9ffa6ad9a54103b3 to your computer and use it in GitHub Desktop.
Linux kernel patch to boot mainline on Sony Xperia Z3 Compact
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile | |
index 4fe209cf6a3e..edb105f8d4be 100644 | |
--- a/arch/arm/boot/dts/Makefile | |
+++ b/arch/arm/boot/dts/Makefile | |
@@ -766,6 +766,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \ | |
qcom-msm8974-fairphone-fp2.dtb \ | |
qcom-msm8974-lge-nexus5-hammerhead.dtb \ | |
qcom-msm8974-samsung-klte.dtb \ | |
+ qcom-msm8974-sony-xperia-aries.dtb \ | |
qcom-msm8974-sony-xperia-castor.dtb \ | |
qcom-msm8974-sony-xperia-honami.dtb \ | |
qcom-mdm9615-wp8548-mangoh-green.dtb | |
diff --git a/arch/arm/boot/dts/qcom-msm8974-sony-xperia-aries.dts b/arch/arm/boot/dts/qcom-msm8974-sony-xperia-aries.dts | |
new file mode 100644 | |
index 000000000000..11bf230d09a0 | |
--- /dev/null | |
+++ b/arch/arm/boot/dts/qcom-msm8974-sony-xperia-aries.dts | |
@@ -0,0 +1,546 @@ | |
+#include "qcom-msm8974pro.dtsi" | |
+#include "qcom-pm8841.dtsi" | |
+#include "qcom-pm8941.dtsi" | |
+#include <dt-bindings/gpio/gpio.h> | |
+#include <dt-bindings/input/input.h> | |
+#include <dt-bindings/pinctrl/qcom,pmic-gpio.h> | |
+ | |
+/ { | |
+ model = "Sony Xperia Z3 Compact"; | |
+ compatible = "sony,xperia-aries", "qcom,msm8974"; | |
+ | |
+ aliases { | |
+ serial0 = &blsp1_uart2; | |
+ }; | |
+ | |
+ chosen { | |
+ stdout-path = "serial0:115200n8"; | |
+ }; | |
+ | |
+ gpio-keys { | |
+ compatible = "gpio-keys"; | |
+ input-name = "gpio-keys"; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&gpio_keys_pin_a>; | |
+ | |
+ volume-down { | |
+ label = "volume_down"; | |
+ gpios = <&pm8941_gpios 2 GPIO_ACTIVE_LOW>; | |
+ linux,input-type = <1>; | |
+ linux,code = <KEY_VOLUMEDOWN>; | |
+ }; | |
+ | |
+ camera-snapshot { | |
+ label = "camera_snapshot"; | |
+ gpios = <&pm8941_gpios 3 GPIO_ACTIVE_LOW>; | |
+ linux,input-type = <1>; | |
+ linux,code = <KEY_CAMERA>; | |
+ }; | |
+ | |
+ camera-focus { | |
+ label = "camera_focus"; | |
+ gpios = <&pm8941_gpios 4 GPIO_ACTIVE_LOW>; | |
+ linux,input-type = <1>; | |
+ linux,code = <KEY_CAMERA_FOCUS>; | |
+ }; | |
+ | |
+ volume-up { | |
+ label = "volume_up"; | |
+ gpios = <&pm8941_gpios 5 GPIO_ACTIVE_LOW>; | |
+ linux,input-type = <1>; | |
+ linux,code = <KEY_VOLUMEUP>; | |
+ }; | |
+ }; | |
+ | |
+ smd { | |
+ rpm { | |
+ rpm_requests { | |
+ pm8941-regulators { | |
+ vdd_l1_l3-supply = <&pm8941_s1>; | |
+ vdd_l2_lvs1_2_3-supply = <&pm8941_s3>; | |
+ vdd_l4_l11-supply = <&pm8941_s1>; | |
+ vdd_l5_l7-supply = <&pm8941_s2>; | |
+ vdd_l6_l12_l14_l15-supply = <&pm8941_s2>; | |
+ vdd_l9_l10_l17_l22-supply = <&vreg_boost>; | |
+ vdd_l13_l20_l23_l24-supply = <&vreg_boost>; | |
+ vdd_l21-supply = <&vreg_boost>; | |
+ | |
+ s1 { | |
+ regulator-min-microvolt = <1300000>; | |
+ regulator-max-microvolt = <1300000>; | |
+ regulator-always-on; | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ s2 { | |
+ regulator-min-microvolt = <2150000>; | |
+ regulator-max-microvolt = <2150000>; | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ s3 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ regulator-always-on; | |
+ regulator-boot-on; | |
+ | |
+ regulator-system-load = <154000>; | |
+ }; | |
+ | |
+ s4 { | |
+ regulator-min-microvolt = <5000000>; | |
+ regulator-max-microvolt = <5000000>; | |
+ }; | |
+ | |
+ l1 { | |
+ regulator-min-microvolt = <1225000>; | |
+ regulator-max-microvolt = <1225000>; | |
+ | |
+ regulator-always-on; | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ l2 { | |
+ regulator-min-microvolt = <1200000>; | |
+ regulator-max-microvolt = <1200000>; | |
+ }; | |
+ | |
+ l3 { | |
+ regulator-min-microvolt = <1200000>; | |
+ regulator-max-microvolt = <1200000>; | |
+ }; | |
+ | |
+ l4 { | |
+ regulator-min-microvolt = <1225000>; | |
+ regulator-max-microvolt = <1225000>; | |
+ }; | |
+ | |
+ l5 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ }; | |
+ | |
+ l6 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ l7 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ l8 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ }; | |
+ | |
+ l9 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <2950000>; | |
+ }; | |
+ | |
+ l11 { | |
+ regulator-min-microvolt = <1300000>; | |
+ regulator-max-microvolt = <1350000>; | |
+ }; | |
+ | |
+ l12 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ | |
+ regulator-always-on; | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ l13 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <2950000>; | |
+ | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ l14 { | |
+ regulator-min-microvolt = <1800000>; | |
+ regulator-max-microvolt = <1800000>; | |
+ }; | |
+ | |
+ l15 { | |
+ regulator-min-microvolt = <2050000>; | |
+ regulator-max-microvolt = <2050000>; | |
+ }; | |
+ | |
+ l16 { | |
+ regulator-min-microvolt = <2700000>; | |
+ regulator-max-microvolt = <2700000>; | |
+ }; | |
+ | |
+ l17 { | |
+ regulator-min-microvolt = <2700000>; | |
+ regulator-max-microvolt = <2700000>; | |
+ }; | |
+ | |
+ l18 { | |
+ regulator-min-microvolt = <2850000>; | |
+ regulator-max-microvolt = <2850000>; | |
+ }; | |
+ | |
+ l19 { | |
+ regulator-min-microvolt = <2900000>; | |
+ regulator-max-microvolt = <3350000>; | |
+ }; | |
+ | |
+ l20 { | |
+ regulator-min-microvolt = <2950000>; | |
+ regulator-max-microvolt = <2950000>; | |
+ | |
+ regulator-allow-set-load; | |
+ regulator-boot-on; | |
+ regulator-allow-set-load; | |
+ regulator-system-load = <500000>; | |
+ }; | |
+ | |
+ l21 { | |
+ regulator-min-microvolt = <2950000>; | |
+ regulator-max-microvolt = <2950000>; | |
+ | |
+ regulator-boot-on; | |
+ }; | |
+ | |
+ l22 { | |
+ regulator-min-microvolt = <3000000>; | |
+ regulator-max-microvolt = <3000000>; | |
+ }; | |
+ | |
+ l23 { | |
+ regulator-min-microvolt = <2800000>; | |
+ regulator-max-microvolt = <2800000>; | |
+ }; | |
+ | |
+ l24 { | |
+ regulator-min-microvolt = <3075000>; | |
+ regulator-max-microvolt = <3075000>; | |
+ | |
+ regulator-boot-on; | |
+ }; | |
+ }; | |
+ }; | |
+ }; | |
+ }; | |
+ | |
+ vreg_vsp: lcd-dcdc-regulator { | |
+ compatible = "regulator-fixed"; | |
+ regulator-name = "vreg_vsp"; | |
+ regulator-min-microvolt = <5600000>; | |
+ regulator-max-microvolt = <5600000>; | |
+ | |
+ gpio = <&pm8941_gpios 20 GPIO_ACTIVE_HIGH>; | |
+ enable-active-high; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&lcd_dcdc_en_pin_a>; | |
+ }; | |
+ | |
+ vreg_wlan: wlan-regulator { | |
+ compatible = "regulator-fixed"; | |
+ | |
+ regulator-name = "wl-reg"; | |
+ regulator-min-microvolt = <3300000>; | |
+ regulator-max-microvolt = <3300000>; | |
+ | |
+ gpio = <&pm8941_gpios 18 GPIO_ACTIVE_HIGH>; | |
+ enable-active-high; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&wlan_regulator_pin>; | |
+ }; | |
+}; | |
+ | |
+&soc { | |
+ sdhci@f9824900 { | |
+ status = "ok"; | |
+ | |
+ vmmc-supply = <&pm8941_l20>; | |
+ vqmmc-supply = <&pm8941_s3>; | |
+ | |
+ bus-width = <8>; | |
+ non-removable; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&sdhc1_pin_a>; | |
+ }; | |
+/* | |
+ sdhci@f9864900 { | |
+ status = "ok"; | |
+ | |
+ max-frequency = <100000000>; | |
+ non-removable; | |
+ vmmc-supply = <&vreg_wlan>; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&sdhc3_pin_a>; | |
+ | |
+ #address-cells = <1>; | |
+ #size-cells = <0>; | |
+ | |
+ bcrmf@1 { | |
+ compatible = "brcm,bcm4339-fmac", "brcm,bcm4329-fmac"; | |
+ reg = <1>; | |
+ | |
+ brcm,drive-strength = <10>; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&wlan_sleep_clk_pin>; | |
+ }; | |
+ }; | |
+*/ | |
+ sdhci@f98a4900 { | |
+ status = "ok"; | |
+ | |
+ bus-width = <4>; | |
+ | |
+ vmmc-supply = <&pm8941_l21>; | |
+ vqmmc-supply = <&pm8941_l13>; | |
+ | |
+ cd-gpios = <&msmgpio 62 GPIO_ACTIVE_LOW>; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&sdhc2_pin_a>, <&sdhc2_cd_pin_a>; | |
+ }; | |
+ | |
+ serial@f991e000 { | |
+ status = "ok"; | |
+ | |
+ pinctrl-names = "default"; | |
+ pinctrl-0 = <&blsp1_uart2_pin_a>; | |
+ }; | |
+ | |
+ usb@f9a55000 { | |
+ status = "ok"; | |
+ | |
+ phys = <&usb_hs1_phy>; | |
+ phy-select = <&tcsr 0xb000 0>; | |
+ extcon = <&smbb>, <&usb_id>; | |
+ vbus-supply = <&chg_otg>; | |
+ | |
+ hnp-disable; | |
+ srp-disable; | |
+ adp-disable; | |
+ | |
+ ulpi { | |
+ phy@a { | |
+ status = "ok"; | |
+ | |
+ v1p8-supply = <&pm8941_l6>; | |
+ v3p3-supply = <&pm8941_l24>; | |
+ | |
+ extcon = <&smbb>; | |
+ qcom,init-seq = /bits/ 8 <0x1 0x64>; | |
+ }; | |
+ }; | |
+ }; | |
+ | |
+ pinctrl@fd510000 { | |
+ blsp1_uart2_pin_a: blsp1-uart2-pin-active { | |
+ rx { | |
+ pins = "gpio5"; | |
+ function = "blsp_uart2"; | |
+ | |
+ drive-strength = <2>; | |
+ bias-pull-up; | |
+ }; | |
+ | |
+ tx { | |
+ pins = "gpio4"; | |
+ function = "blsp_uart2"; | |
+ | |
+ drive-strength = <4>; | |
+ bias-disable; | |
+ }; | |
+ }; | |
+ | |
+ i2c8_pins: i2c8 { | |
+ mux { | |
+ pins = "gpio47", "gpio48"; | |
+ function = "blsp_i2c8"; | |
+ | |
+ drive-strength = <2>; | |
+ bias-disable; | |
+ }; | |
+ }; | |
+ | |
+ i2c11_pins: i2c11 { | |
+ mux { | |
+ pins = "gpio83", "gpio84"; | |
+ function = "blsp_i2c11"; | |
+ | |
+ drive-strength = <2>; | |
+ bias-disable; | |
+ }; | |
+ }; | |
+ | |
+ sdhc1_pin_a: sdhc1-pin-active { | |
+ clk { | |
+ pins = "sdc1_clk"; | |
+ drive-strength = <16>; | |
+ bias-disable; | |
+ }; | |
+ | |
+ cmd-data { | |
+ pins = "sdc1_cmd", "sdc1_data"; | |
+ drive-strength = <10>; | |
+ bias-pull-up; | |
+ }; | |
+ }; | |
+ | |
+ sdhc2_cd_pin_a: sdhc2-cd-pin-active { | |
+ pins = "gpio62"; | |
+ function = "gpio"; | |
+ | |
+ drive-strength = <2>; | |
+ bias-disable; | |
+ }; | |
+ | |
+ sdhc2_pin_a: sdhc2-pin-active { | |
+ clk { | |
+ pins = "sdc2_clk"; | |
+ drive-strength = <6>; | |
+ bias-disable; | |
+ }; | |
+ | |
+ cmd-data { | |
+ pins = "sdc2_cmd", "sdc2_data"; | |
+ drive-strength = <6>; | |
+ bias-pull-up; | |
+ }; | |
+ }; | |
+ | |
+ sdhc3_pin_a: sdhc3-pin-active { | |
+ clk { | |
+ pins = "gpio40"; | |
+ function = "sdc3"; | |
+ | |
+ drive-strength = <10>; | |
+ bias-disable; | |
+ }; | |
+ | |
+ cmd { | |
+ pins = "gpio39"; | |
+ function = "sdc3"; | |
+ | |
+ drive-strength = <10>; | |
+ bias-pull-up; | |
+ }; | |
+ | |
+ data { | |
+ pins = "gpio35", "gpio36", "gpio37", "gpio38"; | |
+ function = "sdc3"; | |
+ | |
+ drive-strength = <10>; | |
+ bias-pull-up; | |
+ }; | |
+ }; | |
+ }; | |
+ mdss@fd900000 { | |
+ status = "ok"; | |
+ dsi@fd922800 { | |
+ ports { | |
+ port@1 { | |
+ dsi0_out: endpoint { | |
+ remote-endpoint = <&panel_in>; | |
+ data-lanes = <0 1 2 3>; | |
+ }; | |
+ }; | |
+ }; | |
+ | |
+ panel@0 { | |
+ compatible = "jdi,novatek-720p-vid"; | |
+ | |
+ reg = <0>; | |
+ power-supply = <&vreg_vsp>; | |
+ backlight = <&pm8941_wled>; | |
+ | |
+ port { | |
+ panel_in: endpoint { | |
+ remote-endpoint = <&dsi0_out>; | |
+ }; | |
+ }; | |
+ }; | |
+ }; | |
+ }; | |
+}; | |
+ | |
+&spmi_bus { | |
+ pm8941@0 { | |
+ charger@1000 { | |
+ qcom,fast-charge-safe-current = <1500000>; | |
+ qcom,fast-charge-current-limit = <1500000>; | |
+ qcom,dc-current-limit = <1800000>; | |
+ qcom,fast-charge-safe-voltage = <4400000>; | |
+ qcom,fast-charge-high-threshold-voltage = <4350000>; | |
+ qcom,fast-charge-low-threshold-voltage = <3400000>; | |
+ qcom,auto-recharge-threshold-voltage = <4200000>; | |
+ qcom,minimum-input-voltage = <4300000>; | |
+ }; | |
+ | |
+ gpios@c000 { | |
+ gpio_keys_pin_a: gpio-keys-active { | |
+ pins = "gpio2", "gpio5"; | |
+ function = "normal"; | |
+ | |
+ bias-pull-up; | |
+ power-source = <PM8941_GPIO_S3>; | |
+ }; | |
+ | |
+ wlan_sleep_clk_pin: wl-sleep-clk { | |
+ pins = "gpio17"; | |
+ function = "func2"; | |
+ | |
+ output-high; | |
+ power-source = <PM8941_GPIO_S3>; | |
+ }; | |
+ | |
+ wlan_regulator_pin: wl-reg-active { | |
+ pins = "gpio18"; | |
+ function = "normal"; | |
+ | |
+ bias-disable; | |
+ power-source = <PM8941_GPIO_S3>; | |
+ }; | |
+ | |
+ lcd_dcdc_en_pin_a: lcd-dcdc-en-active { | |
+ pins = "gpio20"; | |
+ function = "normal"; | |
+ | |
+ bias-disable; | |
+ power-source = <PM8941_GPIO_S3>; | |
+ input-disable; | |
+ output-low; | |
+ }; | |
+ | |
+ }; | |
+ | |
+ coincell@2800 { | |
+ status = "ok"; | |
+ qcom,rset-ohms = <2100>; | |
+ qcom,vset-millivolts = <3000>; | |
+ }; | |
+ }; | |
+ pm8941@1 { | |
+ pm8941_wled: wled@d800 { | |
+ status = "ok"; | |
+ | |
+ qcom,cs-out; | |
+ qcom,current-limit = <20>; | |
+ qcom,current-boost-limit = <805>; | |
+ qcom,switching-freq = <1600>; | |
+ qcom,ovp = <29>; | |
+ qcom,num-strings = <2>; | |
+ }; | |
+ }; | |
+}; | |
diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi | |
index d9019a49b292..386be8717542 100644 | |
--- a/arch/arm/boot/dts/qcom-msm8974.dtsi | |
+++ b/arch/arm/boot/dts/qcom-msm8974.dtsi | |
@@ -5,6 +5,7 @@ | |
#include <dt-bindings/clock/qcom,gcc-msm8974.h> | |
#include <dt-bindings/clock/qcom,rpmcc.h> | |
#include <dt-bindings/reset/qcom,gcc-msm8974.h> | |
+#include <dt-bindings/clock/qcom,mmcc-msm8974.h> | |
#include <dt-bindings/gpio/gpio.h> | |
#include "skeleton.dtsi" | |
@@ -1034,6 +1035,141 @@ | |
}; | |
}; | |
}; | |
+ | |
+ mdss: mdss@fd900000 { | |
+ compatible = "qcom,mdss"; | |
+ reg = <0xfd900000 0x100>, | |
+ <0xfd924000 0x1000>; | |
+ reg-names = "mdss_phys", "vbif_phys"; | |
+ | |
+ power-domains = <&mmcc MDSS_GDSC>; | |
+ | |
+ clocks = <&mmcc MDSS_AHB_CLK>, | |
+ <&mmcc MDSS_AXI_CLK>, | |
+ <&mmcc MDSS_VSYNC_CLK>; | |
+ clock-names = "iface", | |
+ "bus", | |
+ "vsync"; | |
+ | |
+ interrupts = <GIC_SPI 72 0>; | |
+ | |
+ interrupt-controller; | |
+ #interrupt-cells = <1>; | |
+ | |
+ #address-cells = <1>; | |
+ #size-cells = <1>; | |
+ ranges; | |
+ | |
+ status = "disabled"; | |
+ | |
+ mdp: mdp@fd900100 { | |
+ compatible = "qcom,mdp5"; | |
+ reg = <0xfd900100 0x22000>; | |
+ reg-names = "mdp_phys"; | |
+ | |
+ interrupt-parent = <&mdss>; | |
+ interrupts = <0 0>; | |
+ | |
+ clocks = <&mmcc MDSS_AHB_CLK>, | |
+ <&mmcc MDSS_AXI_CLK>, | |
+ <&mmcc MDSS_MDP_CLK>, | |
+ <&mmcc MDSS_VSYNC_CLK>; | |
+ clock-names = "iface", | |
+ "bus", | |
+ "core", | |
+ "vsync"; | |
+ | |
+ | |
+ ports { | |
+ #address-cells = <1>; | |
+ #size-cells = <0>; | |
+ | |
+ port@1 { | |
+ reg = <1>; | |
+ mdp5_intf1_out: endpoint { | |
+ remote-endpoint = <&dsi0_in>; | |
+ }; | |
+ }; | |
+ }; | |
+ }; | |
+ | |
+ dsi0: dsi@fd922800 { | |
+ compatible = "qcom,mdss-dsi-ctrl"; | |
+ reg = <0xfd922800 0x1f8>; | |
+ reg-names = "dsi_ctrl"; | |
+ | |
+ interrupt-parent = <&mdss>; | |
+ interrupts = <4 0>; | |
+ | |
+ assigned-clocks = <&mmcc BYTE0_CLK_SRC>, | |
+ <&mmcc PCLK0_CLK_SRC>; | |
+ assigned-clock-parents = <&dsi_phy0 0>, | |
+ <&dsi_phy0 1>; | |
+ | |
+ clocks = <&mmcc MDSS_MDP_CLK>, | |
+ <&mmcc MDSS_AHB_CLK>, | |
+ <&mmcc MDSS_AXI_CLK>, | |
+ <&mmcc MDSS_BYTE0_CLK>, | |
+ <&mmcc MDSS_PCLK0_CLK>, | |
+ <&mmcc MDSS_ESC0_CLK>, | |
+ <&mmcc MMSS_MISC_AHB_CLK>, | |
+ <&mmcc MMSS_S0_AXI_CLK>, | |
+ <&mmcc MMSS_MMSSNOC_AXI_CLK>; | |
+ clock-names = "mdp_core_clk", | |
+ "iface_clk", | |
+ "bus_clk", | |
+ "byte_clk", | |
+ "pixel_clk", | |
+ "core_clk", | |
+ "core_mmss_clk", | |
+ "s0_axi", | |
+ "mmssnoc"; | |
+ phys = <&dsi_phy0>; | |
+ phy-names = "dsi-phy"; | |
+ | |
+ vdda-supply = <&pm8941_l2>; | |
+ vdd-supply = <&pm8941_lvs3>; | |
+ vddio-supply = <&pm8941_l12>; | |
+ | |
+ #address-cells = <1>; | |
+ #size-cells = <0>; | |
+ | |
+ ports { | |
+ #address-cells = <1>; | |
+ #size-cells = <0>; | |
+ | |
+ port@0 { | |
+ reg = <0>; | |
+ dsi0_in: endpoint { | |
+ remote-endpoint = <&mdp5_intf1_out>; | |
+ }; | |
+ }; | |
+ | |
+ port@1 { | |
+ reg = <1>; | |
+ dsi0_out: endpoint { | |
+ }; | |
+ }; | |
+ }; | |
+ }; | |
+ | |
+ dsi_phy0: dsi-phy@fd922a00 { | |
+ compatible = "qcom,dsi-phy-28nm-hpm"; | |
+ reg = <0xfd922a00 0xd4>, | |
+ <0xfd922b00 0x280>, | |
+ <0xfd922d80 0x30>; | |
+ reg-names = "dsi_pll", | |
+ "dsi_phy", | |
+ "dsi_phy_regulator"; | |
+ | |
+ #clock-cells = <1>; | |
+ | |
+ clocks = <&mmcc MDSS_AHB_CLK>; | |
+ clock-names = "iface_clk"; | |
+ | |
+ vddio-supply = <&pm8941_l12>; | |
+ }; | |
+ }; | |
}; | |
smd { | |
diff --git a/arch/arm/configs/8974_defconfig b/arch/arm/configs/8974_defconfig | |
new file mode 100644 | |
index 000000000000..35b5d7992b6e | |
--- /dev/null | |
+++ b/arch/arm/configs/8974_defconfig | |
@@ -0,0 +1,427 @@ | |
+CONFIG_AUDIT=y | |
+CONFIG_NO_HZ=y | |
+CONFIG_HIGH_RES_TIMERS=y | |
+CONFIG_TASKSTATS=y | |
+CONFIG_TASK_DELAY_ACCT=y | |
+CONFIG_TASK_XACCT=y | |
+CONFIG_TASK_IO_ACCOUNTING=y | |
+CONFIG_IKCONFIG=y | |
+CONFIG_IKCONFIG_PROC=y | |
+CONFIG_LOG_BUF_SHIFT=22 | |
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=17 | |
+CONFIG_CGROUPS=y | |
+CONFIG_CGROUP_SCHED=y | |
+CONFIG_RT_GROUP_SCHED=y | |
+CONFIG_CGROUP_FREEZER=y | |
+CONFIG_CGROUP_CPUACCT=y | |
+CONFIG_CGROUP_DEBUG=y | |
+CONFIG_BLK_DEV_INITRD=y | |
+# CONFIG_SGETMASK_SYSCALL is not set | |
+CONFIG_SYSCTL_SYSCALL=y | |
+# CONFIG_FHANDLE is not set | |
+# CONFIG_AIO is not set | |
+CONFIG_KALLSYMS_ALL=y | |
+CONFIG_EMBEDDED=y | |
+# CONFIG_SLUB_DEBUG is not set | |
+# CONFIG_COMPAT_BRK is not set | |
+CONFIG_PROFILING=y | |
+CONFIG_OPROFILE=y | |
+CONFIG_KPROBES=y | |
+CONFIG_CC_STACKPROTECTOR_STRONG=y | |
+CONFIG_REFCOUNT_FULL=y | |
+CONFIG_MODULES=y | |
+CONFIG_MODULE_UNLOAD=y | |
+CONFIG_MODULE_FORCE_UNLOAD=y | |
+CONFIG_MODVERSIONS=y | |
+CONFIG_PARTITION_ADVANCED=y | |
+CONFIG_SMP=y | |
+CONFIG_NR_CPUS=4 | |
+# CONFIG_SCHED_MC is not set | |
+CONFIG_PREEMPT=y | |
+CONFIG_KSM=y | |
+CONFIG_CLEANCACHE=y | |
+CONFIG_CMA=y | |
+CONFIG_CMA_AREAS=10 | |
+CONFIG_HZ_100=y | |
+CONFIG_PM_AUTOSLEEP=y | |
+CONFIG_PM_WAKELOCKS=y | |
+CONFIG_PM_WAKELOCKS_LIMIT=0 | |
+# CONFIG_PM_WAKELOCKS_GC is not set | |
+CONFIG_PM_DEBUG=y | |
+CONFIG_CPU_FREQ=y | |
+CONFIG_CPU_FREQ_STAT=y | |
+CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y | |
+CONFIG_CPUFREQ_DT=y | |
+CONFIG_PCIEPORTBUS=y | |
+CONFIG_PCI_MSI=y | |
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | |
+CONFIG_NET=y | |
+CONFIG_PACKET=y | |
+CONFIG_UNIX=y | |
+CONFIG_XFRM_USER=y | |
+CONFIG_NET_KEY=y | |
+CONFIG_INET=y | |
+CONFIG_IP_MULTICAST=y | |
+CONFIG_IP_ADVANCED_ROUTER=y | |
+CONFIG_IP_MULTIPLE_TABLES=y | |
+CONFIG_IP_ROUTE_VERBOSE=y | |
+CONFIG_IP_PNP=y | |
+CONFIG_IP_PNP_DHCP=y | |
+CONFIG_INET_ESP=y | |
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set | |
+# CONFIG_INET_XFRM_MODE_BEET is not set | |
+CONFIG_INET_DIAG_DESTROY=y | |
+CONFIG_IPV6_ROUTER_PREF=y | |
+CONFIG_IPV6_ROUTE_INFO=y | |
+CONFIG_IPV6_OPTIMISTIC_DAD=y | |
+CONFIG_INET6_AH=y | |
+CONFIG_INET6_ESP=y | |
+CONFIG_INET6_IPCOMP=y | |
+CONFIG_IPV6_MIP6=y | |
+CONFIG_IPV6_MULTIPLE_TABLES=y | |
+CONFIG_NETFILTER=y | |
+CONFIG_NF_CONNTRACK=y | |
+CONFIG_NF_CONNTRACK_SECMARK=y | |
+CONFIG_NF_CONNTRACK_EVENTS=y | |
+CONFIG_NF_CONNTRACK_AMANDA=y | |
+CONFIG_NF_CONNTRACK_FTP=y | |
+CONFIG_NF_CONNTRACK_H323=y | |
+CONFIG_NF_CONNTRACK_IRC=y | |
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y | |
+CONFIG_NF_CONNTRACK_PPTP=y | |
+CONFIG_NF_CONNTRACK_SANE=y | |
+CONFIG_NF_CONNTRACK_TFTP=y | |
+CONFIG_NF_CT_NETLINK=y | |
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y | |
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y | |
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y | |
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y | |
+CONFIG_NETFILTER_XT_TARGET_MARK=y | |
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y | |
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y | |
+CONFIG_NETFILTER_XT_TARGET_TPROXY=y | |
+CONFIG_NETFILTER_XT_TARGET_TRACE=y | |
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y | |
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y | |
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y | |
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y | |
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y | |
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y | |
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y | |
+CONFIG_NETFILTER_XT_MATCH_HELPER=y | |
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y | |
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y | |
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y | |
+CONFIG_NETFILTER_XT_MATCH_MAC=y | |
+CONFIG_NETFILTER_XT_MATCH_MARK=y | |
+CONFIG_NETFILTER_XT_MATCH_POLICY=y | |
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y | |
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y | |
+CONFIG_NETFILTER_XT_MATCH_STATE=y | |
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y | |
+CONFIG_NETFILTER_XT_MATCH_STRING=y | |
+CONFIG_NETFILTER_XT_MATCH_TIME=y | |
+CONFIG_NETFILTER_XT_MATCH_U32=y | |
+CONFIG_NF_CONNTRACK_IPV4=y | |
+CONFIG_IP_NF_IPTABLES=y | |
+CONFIG_IP_NF_MATCH_AH=y | |
+CONFIG_IP_NF_MATCH_ECN=y | |
+CONFIG_IP_NF_MATCH_TTL=y | |
+CONFIG_IP_NF_FILTER=y | |
+CONFIG_IP_NF_TARGET_REJECT=y | |
+CONFIG_IP_NF_NAT=y | |
+CONFIG_IP_NF_TARGET_MASQUERADE=y | |
+CONFIG_IP_NF_TARGET_NETMAP=y | |
+CONFIG_IP_NF_TARGET_REDIRECT=y | |
+CONFIG_IP_NF_MANGLE=y | |
+CONFIG_IP_NF_RAW=y | |
+CONFIG_IP_NF_SECURITY=y | |
+CONFIG_IP_NF_ARPTABLES=y | |
+CONFIG_IP_NF_ARPFILTER=y | |
+CONFIG_IP_NF_ARP_MANGLE=y | |
+CONFIG_NF_CONNTRACK_IPV6=y | |
+CONFIG_IP6_NF_IPTABLES=y | |
+CONFIG_IP6_NF_FILTER=y | |
+CONFIG_IP6_NF_TARGET_REJECT=y | |
+CONFIG_IP6_NF_MANGLE=y | |
+CONFIG_IP6_NF_RAW=y | |
+CONFIG_NET_SCHED=y | |
+CONFIG_NET_SCH_HTB=y | |
+CONFIG_NET_CLS_U32=y | |
+CONFIG_NET_EMATCH=y | |
+CONFIG_NET_EMATCH_U32=y | |
+CONFIG_NET_CLS_ACT=y | |
+CONFIG_DNS_RESOLVER=y | |
+CONFIG_CFG80211=y | |
+CONFIG_CFG80211_WEXT=y | |
+CONFIG_MAC80211=y | |
+CONFIG_RFKILL=y | |
+CONFIG_DEVTMPFS=y | |
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y | |
+CONFIG_DMA_CMA=y | |
+CONFIG_CMA_SIZE_MBYTES=16 | |
+CONFIG_MTD=y | |
+CONFIG_MTD_BLOCK=y | |
+CONFIG_MTD_M25P80=y | |
+CONFIG_MTD_SPI_NOR=y | |
+CONFIG_OF=y | |
+CONFIG_BLK_DEV_LOOP=y | |
+CONFIG_BLK_DEV_RAM=y | |
+CONFIG_BLK_DEV_RAM_SIZE=8192 | |
+CONFIG_BLK_DEV_SD=y | |
+CONFIG_CHR_DEV_SG=y | |
+CONFIG_CHR_DEV_SCH=y | |
+CONFIG_SCSI_CONSTANTS=y | |
+CONFIG_SCSI_LOGGING=y | |
+CONFIG_SCSI_SCAN_ASYNC=y | |
+CONFIG_ATA=y | |
+CONFIG_SATA_AHCI=y | |
+CONFIG_SATA_AHCI_PLATFORM=y | |
+CONFIG_MD=y | |
+CONFIG_BLK_DEV_DM=y | |
+CONFIG_DM_CRYPT=y | |
+CONFIG_DM_UEVENT=y | |
+CONFIG_DM_VERITY=y | |
+CONFIG_DM_VERITY_FEC=y | |
+CONFIG_NETDEVICES=y | |
+CONFIG_DUMMY=y | |
+CONFIG_TUN=y | |
+CONFIG_ATL1C=y | |
+CONFIG_KS8851=y | |
+CONFIG_SMSC911X=y | |
+CONFIG_MDIO_BCM_UNIMAC=y | |
+CONFIG_MDIO_BITBANG=y | |
+CONFIG_MDIO_GPIO=y | |
+CONFIG_PPP=y | |
+CONFIG_PPP_BSDCOMP=y | |
+CONFIG_PPP_DEFLATE=y | |
+CONFIG_PPP_MPPE=y | |
+CONFIG_SLIP=y | |
+CONFIG_SLIP_COMPRESSED=y | |
+CONFIG_SLIP_MODE_SLIP6=y | |
+# CONFIG_USB_NET_AX8817X is not set | |
+# CONFIG_USB_NET_ZAURUS is not set | |
+CONFIG_BRCMFMAC=m | |
+CONFIG_USB_NET_RNDIS_WLAN=y | |
+CONFIG_INPUT_MATRIXKMAP=y | |
+CONFIG_INPUT_EVDEV=y | |
+CONFIG_INPUT_EVBUG=y | |
+# CONFIG_KEYBOARD_ATKBD is not set | |
+CONFIG_KEYBOARD_GPIO=y | |
+# CONFIG_INPUT_MOUSE is not set | |
+CONFIG_INPUT_JOYSTICK=y | |
+CONFIG_JOYSTICK_XPAD=y | |
+CONFIG_JOYSTICK_XPAD_FF=y | |
+CONFIG_JOYSTICK_XPAD_LEDS=y | |
+CONFIG_INPUT_TABLET=y | |
+CONFIG_TABLET_USB_ACECAD=y | |
+CONFIG_TABLET_USB_AIPTEK=y | |
+CONFIG_TABLET_USB_GTCO=y | |
+CONFIG_TABLET_USB_HANWANG=y | |
+CONFIG_TABLET_USB_KBTAB=y | |
+CONFIG_INPUT_TOUCHSCREEN=y | |
+CONFIG_INPUT_MISC=y | |
+CONFIG_INPUT_UINPUT=y | |
+CONFIG_RMI4_CORE=y | |
+CONFIG_RMI4_I2C=y | |
+CONFIG_RMI4_SPI=y | |
+CONFIG_RMI4_SMB=y | |
+CONFIG_RMI4_F03=y | |
+CONFIG_RMI4_F11=y | |
+CONFIG_RMI4_F12=y | |
+CONFIG_RMI4_F30=y | |
+CONFIG_RMI4_F34=y | |
+CONFIG_RMI4_F55=y | |
+CONFIG_SERIO_LIBPS2=y | |
+CONFIG_SERIO_RAW=y | |
+CONFIG_USERIO=y | |
+# CONFIG_VT is not set | |
+# CONFIG_LEGACY_PTYS is not set | |
+# CONFIG_DEVMEM is not set | |
+CONFIG_HW_RANDOM=y | |
+CONFIG_I2C_CHARDEV=y | |
+CONFIG_SPI=y | |
+CONFIG_SPMI=y | |
+# CONFIG_PTP_1588_CLOCK is not set | |
+CONFIG_PINCTRL=y | |
+CONFIG_GPIOLIB=y | |
+CONFIG_GPIO_SYSFS=y | |
+CONFIG_POWER_RESET=y | |
+CONFIG_SSB=y | |
+CONFIG_SSB_SDIOHOST=y | |
+CONFIG_SSB_DRIVER_PCICORE=y | |
+CONFIG_BCMA=y | |
+CONFIG_MFD_SYSCON=y | |
+CONFIG_REGULATOR=y | |
+CONFIG_REGULATOR_FIXED_VOLTAGE=y | |
+CONFIG_REGULATOR_QCOM_SPMI=y | |
+CONFIG_MEDIA_SUPPORT=y | |
+# CONFIG_VGA_ARB is not set | |
+CONFIG_DRM=y | |
+CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
+# CONFIG_LCD_CLASS_DEVICE is not set | |
+CONFIG_BACKLIGHT_CLASS_DEVICE=y | |
+CONFIG_BACKLIGHT_PM8941_WLED=y | |
+CONFIG_BACKLIGHT_LP855X=y | |
+CONFIG_LOGO=y | |
+CONFIG_SOUND=y | |
+CONFIG_SND=y | |
+CONFIG_SND_DYNAMIC_MINORS=y | |
+# CONFIG_SND_SPI is not set | |
+# CONFIG_SND_USB is not set | |
+CONFIG_SND_SOC=y | |
+CONFIG_SND_SOC_WCD9320=y | |
+CONFIG_HID_BATTERY_STRENGTH=y | |
+CONFIG_HIDRAW=y | |
+CONFIG_UHID=y | |
+CONFIG_HID_A4TECH=y | |
+CONFIG_HID_ACRUX=y | |
+CONFIG_HID_ACRUX_FF=y | |
+CONFIG_HID_APPLE=y | |
+CONFIG_HID_BELKIN=y | |
+CONFIG_HID_CHERRY=y | |
+CONFIG_HID_CHICONY=y | |
+CONFIG_HID_PRODIKEYS=y | |
+CONFIG_HID_CYPRESS=y | |
+CONFIG_HID_DRAGONRISE=y | |
+CONFIG_DRAGONRISE_FF=y | |
+CONFIG_HID_EMS_FF=y | |
+CONFIG_HID_ELECOM=y | |
+CONFIG_HID_EZKEY=y | |
+CONFIG_HID_HOLTEK=y | |
+CONFIG_HID_KEYTOUCH=y | |
+CONFIG_HID_KYE=y | |
+CONFIG_HID_UCLOGIC=y | |
+CONFIG_HID_WALTOP=y | |
+CONFIG_HID_GYRATION=y | |
+CONFIG_HID_TWINHAN=y | |
+CONFIG_HID_KENSINGTON=y | |
+CONFIG_HID_LCPOWER=y | |
+CONFIG_HID_LOGITECH=y | |
+CONFIG_HID_LOGITECH_DJ=y | |
+CONFIG_LOGITECH_FF=y | |
+CONFIG_LOGIRUMBLEPAD2_FF=y | |
+CONFIG_LOGIG940_FF=y | |
+CONFIG_HID_MAGICMOUSE=y | |
+CONFIG_HID_MICROSOFT=y | |
+CONFIG_HID_MONTEREY=y | |
+CONFIG_HID_MULTITOUCH=y | |
+CONFIG_HID_NTRIG=y | |
+CONFIG_HID_ORTEK=y | |
+CONFIG_HID_PANTHERLORD=y | |
+CONFIG_PANTHERLORD_FF=y | |
+CONFIG_HID_PETALYNX=y | |
+CONFIG_HID_PICOLCD=y | |
+CONFIG_HID_PRIMAX=y | |
+CONFIG_HID_ROCCAT=y | |
+CONFIG_HID_SAITEK=y | |
+CONFIG_HID_SAMSUNG=y | |
+CONFIG_HID_SONY=y | |
+CONFIG_HID_SPEEDLINK=y | |
+CONFIG_HID_SUNPLUS=y | |
+CONFIG_HID_GREENASIA=y | |
+CONFIG_GREENASIA_FF=y | |
+CONFIG_HID_SMARTJOYPLUS=y | |
+CONFIG_SMARTJOYPLUS_FF=y | |
+CONFIG_HID_TIVO=y | |
+CONFIG_HID_TOPSEED=y | |
+CONFIG_HID_THRUSTMASTER=y | |
+CONFIG_HID_WACOM=y | |
+CONFIG_HID_WIIMOTE=y | |
+CONFIG_HID_ZEROPLUS=y | |
+CONFIG_HID_ZYDACRON=y | |
+CONFIG_USB_HIDDEV=y | |
+CONFIG_I2C_HID=y | |
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | |
+CONFIG_USB_OTG=y | |
+CONFIG_USB_MON=y | |
+CONFIG_USB_EHCI_HCD=y | |
+CONFIG_USB_ACM=y | |
+CONFIG_USB_CHIPIDEA=y | |
+CONFIG_USB_CHIPIDEA_UDC=y | |
+CONFIG_USB_CHIPIDEA_HOST=y | |
+CONFIG_USB_CHIPIDEA_ULPI=y | |
+CONFIG_USB_SERIAL=y | |
+CONFIG_USB_HSIC_USB4604=y | |
+CONFIG_USB_GADGET=y | |
+CONFIG_USB_GADGET_DEBUG_FILES=y | |
+CONFIG_USB_GADGET_VBUS_DRAW=500 | |
+CONFIG_U_SERIAL_CONSOLE=y | |
+CONFIG_USB_G_SERIAL=y | |
+CONFIG_USB_ULPI_BUS=y | |
+CONFIG_MMC=y | |
+CONFIG_MMC_BLOCK_MINORS=32 | |
+CONFIG_MMC_SDHCI=y | |
+CONFIG_MMC_SDHCI_PLTFM=y | |
+CONFIG_LEDS_GPIO=y | |
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y | |
+CONFIG_RTC_CLASS=y | |
+# CONFIG_RTC_DRV_CMOS is not set | |
+CONFIG_DMADEVICES=y | |
+CONFIG_SW_SYNC=y | |
+# CONFIG_VIRTIO_MENU is not set | |
+CONFIG_STAGING=y | |
+CONFIG_ASHMEM=y | |
+CONFIG_ION=y | |
+CONFIG_HWSPINLOCK=y | |
+CONFIG_MAILBOX=y | |
+CONFIG_PLATFORM_MHU=y | |
+CONFIG_ALTERA_MBOX=y | |
+CONFIG_MAILBOX_TEST=y | |
+CONFIG_REMOTEPROC=y | |
+CONFIG_RPMSG_CHAR=y | |
+CONFIG_RPMSG_QCOM_GLINK_RPM=y | |
+CONFIG_QCOM_OCMEM=y | |
+CONFIG_IIO=y | |
+CONFIG_IIO_BUFFER_CB=y | |
+CONFIG_IIO_SW_TRIGGER=y | |
+CONFIG_KXSD9=y | |
+CONFIG_MPU3050_I2C=y | |
+CONFIG_AK8975=y | |
+CONFIG_IIO_HRTIMER_TRIGGER=y | |
+CONFIG_BMP280=y | |
+CONFIG_PWM=y | |
+CONFIG_PHY_QCOM_USB_HS=y | |
+CONFIG_PHY_QCOM_USB_HSIC=y | |
+CONFIG_ANDROID=y | |
+CONFIG_ANDROID_BINDER_IPC=y | |
+CONFIG_SLIMBUS=y | |
+CONFIG_SLIMBUS_MSM_CTRL=y | |
+CONFIG_SLIMBUS_MSM_NGD=y | |
+# CONFIG_FIRMWARE_MEMMAP is not set | |
+CONFIG_EXT2_FS=y | |
+CONFIG_EXT2_FS_XATTR=y | |
+CONFIG_EXT3_FS=y | |
+CONFIG_EXT4_FS_SECURITY=y | |
+CONFIG_QUOTA=y | |
+CONFIG_FUSE_FS=y | |
+CONFIG_MSDOS_FS=y | |
+CONFIG_VFAT_FS=y | |
+CONFIG_TMPFS=y | |
+CONFIG_TMPFS_POSIX_ACL=y | |
+CONFIG_JFFS2_FS=y | |
+CONFIG_PSTORE=y | |
+CONFIG_PSTORE_CONSOLE=y | |
+CONFIG_PSTORE_RAM=y | |
+CONFIG_CIFS=y | |
+CONFIG_NLS_CODEPAGE_437=y | |
+CONFIG_NLS_ASCII=y | |
+CONFIG_NLS_ISO8859_1=y | |
+CONFIG_NLS_UTF8=y | |
+CONFIG_PRINTK_TIME=y | |
+CONFIG_DYNAMIC_DEBUG=y | |
+CONFIG_DEBUG_INFO=y | |
+CONFIG_FRAME_WARN=1024 | |
+# CONFIG_UNUSED_SYMBOLS is not set | |
+CONFIG_MAGIC_SYSRQ=y | |
+CONFIG_PANIC_TIMEOUT=5 | |
+# CONFIG_SCHED_DEBUG is not set | |
+CONFIG_SCHEDSTATS=y | |
+CONFIG_ENABLE_DEFAULT_TRACERS=y | |
+# CONFIG_RUNTIME_TESTING_MENU is not set | |
+CONFIG_SECURITY=y | |
+CONFIG_SECURITY_NETWORK=y | |
+CONFIG_LSM_MMAP_MIN_ADDR=32768 | |
+CONFIG_HARDENED_USERCOPY=y | |
+CONFIG_SECURITY_SELINUX=y | |
+# CONFIG_VIRTUALIZATION is not set | |
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c | |
index 7a03a9489708..3c08926620c8 100644 | |
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c | |
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c | |
@@ -336,6 +336,8 @@ static int dsi_clk_init(struct msm_dsi_host *msm_host) | |
struct platform_device *pdev = msm_host->pdev; | |
const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; | |
const struct msm_dsi_config *cfg = cfg_hnd->cfg; | |
+ struct clk *s0_clk; | |
+ struct clk *mmssnoc_clk; | |
int i, ret = 0; | |
/* get bus clocks */ | |
@@ -350,6 +352,14 @@ static int dsi_clk_init(struct msm_dsi_host *msm_host) | |
} | |
} | |
+ mmssnoc_clk = msm_clk_get(pdev, "mmssnoc"); | |
+ clk_set_rate(mmssnoc_clk, 100000000); | |
+ clk_prepare_enable(mmssnoc_clk); | |
+ | |
+ s0_clk = msm_clk_get(pdev, "s0_axi"); | |
+ clk_set_rate(s0_clk, 100000000); | |
+ clk_prepare_enable(s0_clk); | |
+ | |
/* get link and source clocks */ | |
msm_host->byte_clk = msm_clk_get(pdev, "byte"); | |
if (IS_ERR(msm_host->byte_clk)) { | |
diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig | |
index 077bc58c1913..1621f45edea3 100644 | |
--- a/drivers/gpu/drm/panel/Kconfig | |
+++ b/drivers/gpu/drm/panel/Kconfig | |
@@ -176,4 +176,12 @@ config DRM_PANEL_SITRONIX_ST7789V | |
Say Y here if you want to enable support for the Sitronix | |
ST7789V controller for 240x320 LCD panels | |
+config DRM_PANEL_JDI_NOVATEK_720P | |
+ tristate "JDI Novatek 720p panel" | |
+ depends on OF | |
+ depends on DRM_MIPI_DSI | |
+ depends on BACKLIGHT_CLASS_DEVICE | |
+ help | |
+ Say Y here if you want to enable support for the JDI 720p Novatek | |
+ DSI panel as found in some Sony Xperia Z3 Compact devices | |
endmenu | |
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile | |
index f26efc11d746..e1947f35ced6 100644 | |
--- a/drivers/gpu/drm/panel/Makefile | |
+++ b/drivers/gpu/drm/panel/Makefile | |
@@ -18,3 +18,4 @@ obj-$(CONFIG_DRM_PANEL_SEIKO_43WVF1G) += panel-seiko-43wvf1g.o | |
obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o | |
obj-$(CONFIG_DRM_PANEL_SHARP_LS043T1LE01) += panel-sharp-ls043t1le01.o | |
obj-$(CONFIG_DRM_PANEL_SITRONIX_ST7789V) += panel-sitronix-st7789v.o | |
+obj-$(CONFIG_DRM_PANEL_JDI_NOVATEK_720P) += panel-jdi-novatek-720p.o | |
diff --git a/drivers/gpu/drm/panel/panel-jdi-novatek-720p.c b/drivers/gpu/drm/panel/panel-jdi-novatek-720p.c | |
new file mode 100644 | |
index 000000000000..fe1f8cf64c7c | |
--- /dev/null | |
+++ b/drivers/gpu/drm/panel/panel-jdi-novatek-720p.c | |
@@ -0,0 +1,430 @@ | |
+/* | |
+ * Copyright (C) 2015 Red Hat | |
+ * Copyright (C) 2018 Alistair Bill | |
+ * | |
+ * Author: Rob Clark <[email protected]> | |
+ * Author: Alistair Bill <[email protected]> | |
+ * | |
+ * 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. | |
+ * | |
+ * You should have received a copy of the GNU General Public License along with | |
+ * this program. If not, see <http://www.gnu.org/licenses/>. | |
+ */ | |
+ | |
+#include <linux/backlight.h> | |
+#include <linux/gpio/consumer.h> | |
+#include <linux/module.h> | |
+#include <linux/of.h> | |
+#include <linux/regulator/consumer.h> | |
+ | |
+#include <drm/drmP.h> | |
+#include <drm/drm_crtc.h> | |
+#include <drm/drm_mipi_dsi.h> | |
+#include <drm/drm_panel.h> | |
+ | |
+#include <video/mipi_display.h> | |
+ | |
+struct jdi_panel { | |
+ struct drm_panel base; | |
+ struct mipi_dsi_device *dsi; | |
+ | |
+ struct backlight_device *backlight; | |
+ struct regulator *supply; | |
+ | |
+ bool prepared; | |
+ bool enabled; | |
+ | |
+ const struct drm_display_mode *mode; | |
+}; | |
+ | |
+static inline struct jdi_panel *to_jdi_panel(struct drm_panel *panel) | |
+{ | |
+ return container_of(panel, struct jdi_panel, base); | |
+} | |
+ | |
+static int jdi_panel_init(struct jdi_panel *jdi) | |
+{ | |
+ struct mipi_dsi_device *dsi = jdi->dsi; | |
+ int ret; | |
+ | |
+ dsi->mode_flags |= MIPI_DSI_MODE_LPM; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xba, (u8[]){ 0x03 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xc2, (u8[]){ 0x08 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xfb, (u8[]){ 0x01 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xff, (u8[]){ 0x05 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0x02, (u8[]){ 0x8e }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xa2, (u8[]){ 0x00 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xfb, (u8[]){ 0x01 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xff, (u8[]){ 0xee }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0x12, (u8[]){ 0x50 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0x13, (u8[]){ 0x02 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0x6a, (u8[]){ 0x60 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xfb, (u8[]){ 0x01 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_write(dsi, 0xff, (u8[]){ 0x00 }, 1); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_exit_sleep_mode(dsi); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ msleep(30); | |
+ | |
+ printk("jdi_panel_init returned success"); | |
+ return 0; | |
+} | |
+ | |
+static int jdi_panel_on(struct jdi_panel *jdi) | |
+{ | |
+ struct mipi_dsi_device *dsi = jdi->dsi; | |
+ int ret; | |
+ | |
+ dsi->mode_flags |= MIPI_DSI_MODE_LPM; | |
+ | |
+ ret = mipi_dsi_dcs_set_display_on(dsi); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ msleep(40); | |
+ | |
+ printk("jdi_panel_on returned success"); | |
+ return 0; | |
+} | |
+ | |
+static int jdi_panel_off(struct jdi_panel *jdi) | |
+{ | |
+ struct mipi_dsi_device *dsi = jdi->dsi; | |
+ int ret; | |
+ | |
+ dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; | |
+ | |
+ ret = mipi_dsi_dcs_set_display_off(dsi); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ ret = mipi_dsi_dcs_enter_sleep_mode(dsi); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ msleep(100); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int jdi_panel_disable(struct drm_panel *panel) | |
+{ | |
+ struct jdi_panel *jdi = to_jdi_panel(panel); | |
+ | |
+ if (!jdi->enabled) | |
+ return 0; | |
+ | |
+ DRM_DEBUG("disable\n"); | |
+ | |
+ if (jdi->backlight) { | |
+ jdi->backlight->props.power = FB_BLANK_POWERDOWN; | |
+ backlight_update_status(jdi->backlight); | |
+ } | |
+ | |
+ jdi->enabled = false; | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int jdi_panel_unprepare(struct drm_panel *panel) | |
+{ | |
+ struct jdi_panel *jdi = to_jdi_panel(panel); | |
+ int ret; | |
+ | |
+ if (!jdi->prepared) | |
+ return 0; | |
+ | |
+ DRM_DEBUG("unprepare\n"); | |
+ | |
+ ret = jdi_panel_off(jdi); | |
+ if (ret) { | |
+ dev_err(panel->dev, "failed to set panel off: %d\n", ret); | |
+ return ret; | |
+ } | |
+ | |
+ regulator_disable(jdi->supply); | |
+ | |
+ jdi->prepared = false; | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int jdi_panel_prepare(struct drm_panel *panel) | |
+{ | |
+ struct jdi_panel *jdi = to_jdi_panel(panel); | |
+ int ret; | |
+ | |
+ if (jdi->prepared) | |
+ return 0; | |
+ | |
+ DRM_DEBUG("prepare\n"); | |
+ | |
+ ret = regulator_enable(jdi->supply); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ msleep(20); | |
+ | |
+ msleep(150); | |
+ | |
+ ret = jdi_panel_init(jdi); | |
+ if (ret) { | |
+ dev_err(panel->dev, "failed to init panel: %d\n", ret); | |
+ goto poweroff; | |
+ } | |
+ | |
+ ret = jdi_panel_on(jdi); | |
+ if (ret) { | |
+ dev_err(panel->dev, "failed to set panel on: %d\n", ret); | |
+ goto poweroff; | |
+ } | |
+ | |
+ jdi->prepared = true; | |
+ | |
+ printk("jdi_panel_prepare returned success"); | |
+ return 0; | |
+ | |
+poweroff: | |
+ regulator_disable(jdi->supply); | |
+ return ret; | |
+} | |
+ | |
+static int jdi_panel_enable(struct drm_panel *panel) | |
+{ | |
+ struct jdi_panel *jdi = to_jdi_panel(panel); | |
+ | |
+ if (jdi->enabled) | |
+ return 0; | |
+ | |
+ DRM_DEBUG("enable\n"); | |
+ | |
+ if (jdi->backlight) { | |
+ jdi->backlight->props.power = FB_BLANK_UNBLANK; | |
+ backlight_update_status(jdi->backlight); | |
+ } | |
+ | |
+ jdi->enabled = true; | |
+ | |
+ printk("jdi_panel_enable returned success"); | |
+ return 0; | |
+} | |
+ | |
+static const struct drm_display_mode default_mode = { | |
+ .clock = 71332, | |
+ .hdisplay = 720, | |
+ .hsync_start = 720 + 36, | |
+ .hsync_end = 720 + 36 + 8, | |
+ .htotal = 720 + 36 + 8 + 8, | |
+ .vdisplay = 1280, | |
+ .vsync_start = 1280 + 251, | |
+ .vsync_end = 1280 + 251 + 5, | |
+ .vtotal = 1280 + 251 + 5 + 4, | |
+ .vrefresh = 60, | |
+}; | |
+ | |
+static int jdi_panel_get_modes(struct drm_panel *panel) | |
+{ | |
+ struct drm_display_mode *mode; | |
+ | |
+ mode = drm_mode_duplicate(panel->drm, &default_mode); | |
+ if (!mode) { | |
+ dev_err(panel->drm->dev, "failed to add mode %ux%ux@%u\n", | |
+ default_mode.hdisplay, default_mode.vdisplay, | |
+ default_mode.vrefresh); | |
+ return -ENOMEM; | |
+ } | |
+ | |
+ drm_mode_set_name(mode); | |
+ | |
+ drm_mode_probed_add(panel->connector, mode); | |
+ | |
+ panel->connector->display_info.width_mm = 56; | |
+ panel->connector->display_info.height_mm = 100; | |
+ | |
+ return 1; | |
+} | |
+ | |
+static const struct drm_panel_funcs jdi_panel_funcs = { | |
+ .disable = jdi_panel_disable, | |
+ .unprepare = jdi_panel_unprepare, | |
+ .prepare = jdi_panel_prepare, | |
+ .enable = jdi_panel_enable, | |
+ .get_modes = jdi_panel_get_modes, | |
+}; | |
+ | |
+static const struct of_device_id jdi_of_match[] = { | |
+ { .compatible = "jdi,novatek-720p-vid", }, | |
+ { } | |
+}; | |
+MODULE_DEVICE_TABLE(of, jdi_of_match); | |
+ | |
+static int jdi_panel_add(struct jdi_panel *jdi) | |
+{ | |
+ struct device *dev= &jdi->dsi->dev; | |
+ struct device_node *np; | |
+ int ret; | |
+ | |
+ jdi->mode = &default_mode; | |
+ | |
+ jdi->supply = devm_regulator_get(dev, "power"); | |
+ if (IS_ERR(jdi->supply)) | |
+ return PTR_ERR(jdi->supply); | |
+ | |
+ np = of_parse_phandle(dev->of_node, "backlight", 0); | |
+ if (np) { | |
+ jdi->backlight = of_find_backlight_by_node(np); | |
+ of_node_put(np); | |
+ | |
+ if (!jdi->backlight) | |
+ return -EPROBE_DEFER; | |
+ } | |
+ | |
+ drm_panel_init(&jdi->base); | |
+ jdi->base.funcs = &jdi_panel_funcs; | |
+ jdi->base.dev = &jdi->dsi->dev; | |
+ | |
+ ret = drm_panel_add(&jdi->base); | |
+ if (ret < 0) | |
+ goto put_backlight; | |
+ | |
+ printk("jdi_panel_add returned success"); | |
+ return 0; | |
+ | |
+put_backlight: | |
+ if (jdi->backlight) | |
+ put_device(&jdi->backlight->dev); | |
+ | |
+ return ret; | |
+} | |
+ | |
+static void jdi_panel_del(struct jdi_panel *jdi) | |
+{ | |
+ if (jdi->base.dev) | |
+ drm_panel_remove(&jdi->base); | |
+ | |
+ if (jdi->backlight) | |
+ put_device(&jdi->backlight->dev); | |
+} | |
+ | |
+static int jdi_panel_probe(struct mipi_dsi_device *dsi) | |
+{ | |
+ struct jdi_panel *jdi; | |
+ int ret; | |
+ | |
+ dsi->lanes = 4; | |
+ dsi->format = MIPI_DSI_FMT_RGB888; | |
+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | | |
+ MIPI_DSI_MODE_VIDEO_HSE | | |
+ MIPI_DSI_CLOCK_NON_CONTINUOUS | | |
+ MIPI_DSI_MODE_EOT_PACKET; | |
+ | |
+ jdi = devm_kzalloc(&dsi->dev, sizeof(*jdi), GFP_KERNEL); | |
+ if (!jdi) { | |
+ return -ENOMEM; | |
+ } | |
+ | |
+ mipi_dsi_set_drvdata(dsi, jdi); | |
+ | |
+ jdi->dsi = dsi; | |
+ | |
+ ret = jdi_panel_add(jdi); | |
+ if (ret < 0) { | |
+ return ret; | |
+ } | |
+ | |
+ printk("jdi_panel_add returned success"); | |
+ return mipi_dsi_attach(dsi); | |
+} | |
+ | |
+static int jdi_panel_remove(struct mipi_dsi_device *dsi) | |
+{ | |
+ struct jdi_panel *jdi = mipi_dsi_get_drvdata(dsi); | |
+ int ret; | |
+ | |
+ ret = jdi_panel_disable(&jdi->base); | |
+ if (ret < 0) | |
+ dev_err(&dsi->dev, "failed to disable panel: %d\n", ret); | |
+ | |
+ ret = mipi_dsi_detach(dsi); | |
+ if (ret < 0) | |
+ dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); | |
+ | |
+ drm_panel_detach(&jdi->base); | |
+ jdi_panel_del(jdi); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static void jdi_panel_shutdown(struct mipi_dsi_device *dsi) | |
+{ | |
+ struct jdi_panel *jdi = mipi_dsi_get_drvdata(dsi); | |
+ | |
+ jdi_panel_disable(&jdi->base); | |
+} | |
+ | |
+static struct mipi_dsi_driver jdi_panel_driver = { | |
+ .driver = { | |
+ .name = "panel-jdi-novatek-720p", | |
+ .of_match_table = jdi_of_match, | |
+ }, | |
+ .probe = jdi_panel_probe, | |
+ .remove = jdi_panel_remove, | |
+ .shutdown = jdi_panel_shutdown, | |
+}; | |
+module_mipi_dsi_driver(jdi_panel_driver); | |
+ | |
+MODULE_AUTHOR("Alistair Bill <[email protected]>"); | |
+MODULE_DESCRIPTION("JDI Novatek 720p panel driver"); | |
+MODULE_LICENSE("GPL v2"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment