Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From c15b21915dde58240d32e8cf2f739cb115919f84 Mon Sep 17 00:00:00 2001
- From: b19715 <[email protected]>
- Date: Wed, 17 Oct 2018 14:24:10 -0400
- Subject: [PATCH 04/11] Add ST7735R MPU LCD support for iMX7D board
- Updated for L4.9.11 release
- ---
- arch/arm/boot/dts/Makefile | 1 +
- arch/arm/boot/dts/imx7d-sdb-i80lcd.dts | 1059 +++++++++++++++++
- arch/arm/configs/imx_v7_defconfig | 1 +
- drivers/video/fbdev/mxc/Kconfig | 4 +
- drivers/video/fbdev/mxc/Makefile | 1 +
- .../video/fbdev/mxc/mxsfb_st7735r_square.c | 196 +++
- drivers/video/fbdev/mxsfb.c | 6 +
- drivers/video/fbdev/mxsfb.h | 7 +
- 8 files changed, 1275 insertions(+)
- create mode 100644 arch/arm/boot/dts/imx7d-sdb-i80lcd.dts
- create mode 100644 drivers/video/fbdev/mxc/mxsfb_st7735r_square.c
- diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
- index 4969795383df..459f03a2fa00 100644
- --- a/arch/arm/boot/dts/Makefile
- +++ b/arch/arm/boot/dts/Makefile
- @@ -564,6 +564,7 @@ dtb-$(CONFIG_SOC_IMX7D) += \
- imx7d-12x12-lpddr3-arm2-pcie.dtb \
- imx7d-19x19-lpddr2-arm2.dtb \
- imx7d-sdb.dtb \
- + imx7d-sdb-i80lcd.dtb \
- imx7d-sdb-epdc.dtb \
- imx7d-sdb-gpmi-weim.dtb \
- imx7d-sdb-m4.dtb \
- diff --git a/arch/arm/boot/dts/imx7d-sdb-i80lcd.dts b/arch/arm/boot/dts/imx7d-sdb-i80lcd.dts
- new file mode 100644
- index 000000000000..4cb2b77eaf78
- --- /dev/null
- +++ b/arch/arm/boot/dts/imx7d-sdb-i80lcd.dts
- @@ -0,0 +1,1059 @@
- +/*
- + * Copyright (C) 2016 Freescale Semiconductor, Inc.
- + *
- + * 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.
- + */
- +
- +/dts-v1/;
- +
- +#include <dt-bindings/input/input.h>
- +#include "imx7d.dtsi"
- +
- +/ {
- + model = "Freescale i.MX7 SabreSD Board";
- + compatible = "fsl,imx7d-sdb", "fsl,imx7d";
- +
- + memory {
- + reg = <0x80000000 0x80000000>;
- + };
- +
- + backlight {
- + compatible = "pwm-backlight";
- + pwms = <&pwm1 0 5000000>;
- + brightness-levels = <0 4 8 16 32 64 128 255>;
- + default-brightness-level = <6>;
- + status = "okay";
- + };
- +
- + pxp_v4l2_out {
- + compatible = "fsl,imx7d-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2";
- + status = "okay";
- + };
- +
- + regulators {
- + compatible = "simple-bus";
- + #address-cells = <1>;
- + #size-cells = <0>;
- +
- + reg_usb_otg1_vbus: regulator@0 {
- + compatible = "regulator-fixed";
- + reg = <0>;
- + regulator-name = "usb_otg1_vbus";
- + regulator-min-microvolt = <5000000>;
- + regulator-max-microvolt = <5000000>;
- + gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>;
- + enable-active-high;
- + };
- +
- + reg_usb_otg2_vbus: regulator@1 {
- + compatible = "regulator-fixed";
- + reg = <1>;
- + regulator-name = "usb_otg2_vbus";
- + regulator-min-microvolt = <5000000>;
- + regulator-max-microvolt = <5000000>;
- + gpio = <&gpio4 7 GPIO_ACTIVE_HIGH>;
- + enable-active-high;
- + };
- +
- + reg_can2_3v3: regulator@2 {
- + compatible = "regulator-fixed";
- + reg = <2>;
- + regulator-name = "can2-3v3";
- + regulator-min-microvolt = <3300000>;
- + regulator-max-microvolt = <3300000>;
- + gpio = <&gpio2 14 GPIO_ACTIVE_LOW>;
- + };
- +
- + reg_vref_1v8: regulator@3 {
- + compatible = "regulator-fixed";
- + regulator-name = "vref-1v8";
- + regulator-min-microvolt = <1800000>;
- + regulator-max-microvolt = <1800000>;
- + };
- +
- + reg_pcie: regulator@4 {
- + compatible = "regulator-fixed";
- + reg = <4>;
- + regulator-name = "MPCIE_3V3";
- + regulator-min-microvolt = <3300000>;
- + regulator-max-microvolt = <3300000>;
- + gpio = <&gpio_spi 6 GPIO_ACTIVE_HIGH>;
- + regulator-always-on;
- + enable-active-high;
- + };
- +
- + reg_sd1_vmmc: regulator@5 {
- + compatible = "regulator-fixed";
- + regulator-name = "VDD_SD1";
- + regulator-min-microvolt = <3300000>;
- + regulator-max-microvolt = <3300000>;
- + gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>;
- + startup-delay-us = <200000>;
- + enable-active-high;
- + };
- +
- + wlreg_on: fixedregulator@100 {
- + compatible = "regulator-fixed";
- + regulator-min-microvolt = <5000000>;
- + regulator-max-microvolt = <5000000>;
- + regulator-name = "wlreg_on";
- + gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
- + enable-active-high;
- + };
- + };
- +
- + bcmdhd_wlan_0: bcmdhd_wlan@0 {
- + compatible = "android,bcmdhd_wlan";
- + wlreg_on-supply = <&wlreg_on>;
- + };
- +
- + sound {
- + compatible = "fsl,imx7d-evk-wm8960",
- + "fsl,imx-audio-wm8960";
- + model = "wm8960-audio";
- + cpu-dai = <&sai1>;
- + audio-codec = <&codec>;
- + codec-master;
- + /* JD2: hp detect high for headphone*/
- + hp-det = <2 0>;
- + audio-routing =
- + "LINPUT1", "Main MIC",
- + "Main MIC", "MICB";
- + assigned-clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_SRC>,
- + <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
- + assigned-clock-parents = <&clks IMX7D_PLL_AUDIO_POST_DIV>;
- + assigned-clock-rates = <0>, <12288000>;
- +
- + };
- +
- + sound-hdmi {
- + compatible = "fsl,imx7d-sdb-sii902x",
- + "fsl,imx-audio-sii902x";
- + model = "sii902x-audio";
- + cpu-dai = <&sai1>;
- + hdmi-controler = <&sii902x>;
- + };
- +
- + spi4 {
- + compatible = "spi-gpio";
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_spi1>;
- + status = "okay";
- + gpio-sck = <&gpio1 13 0>;
- + gpio-mosi = <&gpio1 9 0>;
- + cs-gpios = <&gpio1 12 0>;
- + num-chipselects = <1>;
- + #address-cells = <1>;
- + #size-cells = <0>;
- +
- + gpio_spi: gpio_spi@0 {
- + compatible = "fairchild,74hc595";
- + gpio-controller;
- + #gpio-cells = <2>;
- + reg = <0>;
- + registers-number = <1>;
- + registers-default = /bits/ 8 <0x54>; /* Enable PERI_3V3, SENSOR_RST_B and HDMI_RST*/
- + spi-max-frequency = <100000>;
- + };
- + };
- +};
- +
- +&adc1 {
- + vref-supply = <®_vref_1v8>;
- + status = "okay";
- +};
- +
- +&adc2 {
- + vref-supply = <®_vref_1v8>;
- + status = "okay";
- +};
- +
- +&clks {
- + assigned-clocks = <&clks IMX7D_PLL_AUDIO_POST_DIV>;
- + assigned-clock-rates = <884736000>;
- +};
- +
- +&cpu0 {
- + arm-supply = <&sw1a_reg>;
- +};
- +
- +&csi1 {
- + csi-mux-mipi = <&gpr 0x14 4>;
- + status = "okay";
- +
- + port {
- + csi_ep: endpoint {
- + remote-endpoint = <&csi_mipi_ep>;
- + };
- + };
- +};
- +
- +&epdc {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_epdc0>;
- + V3P3-supply = <&V3P3_reg>;
- + VCOM-supply = <&VCOM_reg>;
- + DISPLAY-supply = <&DISPLAY_reg>;
- + en-gpios = <&gpio_spi 5 0>;
- + status = "disabled";
- +};
- +
- +&epxp {
- + status = "okay";
- +};
- +
- +&fec1 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_enet1>;
- + pinctrl-assert-gpios = <&gpio_spi 5 GPIO_ACTIVE_HIGH>;
- + assigned-clocks = <&clks IMX7D_ENET1_TIME_ROOT_SRC>,
- + <&clks IMX7D_ENET1_TIME_ROOT_CLK>;
- + assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>;
- + assigned-clock-rates = <0>, <100000000>;
- + phy-mode = "rgmii";
- + phy-handle = <ðphy0>;
- + fsl,magic-packet;
- + status = "okay";
- +
- + mdio {
- + #address-cells = <1>;
- + #size-cells = <0>;
- +
- + ethphy0: ethernet-phy@0 {
- + compatible = "ethernet-phy-ieee802.3-c22";
- + reg = <0>;
- + };
- +
- + ethphy1: ethernet-phy@1 {
- + compatible = "ethernet-phy-ieee802.3-c22";
- + reg = <1>;
- + };
- + };
- +};
- +
- +&fec2 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_enet2>;
- + assigned-clocks = <&clks IMX7D_ENET2_TIME_ROOT_SRC>,
- + <&clks IMX7D_ENET2_TIME_ROOT_CLK>;
- + assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>;
- + assigned-clock-rates = <0>, <100000000>;
- + phy-mode = "rgmii";
- + phy-handle = <ðphy1>;
- + fsl,magic-packet;
- + status = "disabled";
- +};
- +
- +&flexcan2 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_flexcan2>;
- + xceiver-supply = <®_can2_3v3>;
- + status = "okay";
- +};
- +
- +&gpmi {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_gpmi_nand_1>;
- + status = "disabled";
- + nand-on-flash-bbt;
- +};
- +
- +&mipi_csi {
- + clock-frequency = <240000000>;
- + status = "okay";
- + port {
- + mipi_sensor_ep: endpoint1 {
- + remote-endpoint = <&ov5647_mipi_ep>;
- + data-lanes = <2>;
- + csis-hs-settle = <13>;
- + csis-wclk;
- + };
- +
- + csi_mipi_ep: endpoint2 {
- + remote-endpoint = <&csi_ep>;
- + };
- + };
- +};
- +
- +&i2c1 {
- + clock-frequency = <100000>;
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_i2c1>;
- + status = "okay";
- +
- + pmic: pfuze3000@08 {
- + compatible = "fsl,pfuze3000";
- + reg = <0x08>;
- +
- + regulators {
- + sw1a_reg: sw1a {
- + regulator-min-microvolt = <700000>;
- + regulator-max-microvolt = <3300000>;
- + regulator-boot-on;
- + regulator-always-on;
- + regulator-ramp-delay = <6250>;
- + };
- +
- + /* use sw1c_reg to align with pfuze100/pfuze200 */
- + sw1c_reg: sw1b {
- + regulator-min-microvolt = <700000>;
- + regulator-max-microvolt = <1475000>;
- + regulator-boot-on;
- + regulator-always-on;
- + regulator-ramp-delay = <6250>;
- + };
- +
- + sw2_reg: sw2 {
- + regulator-min-microvolt = <1500000>;
- + regulator-max-microvolt = <1850000>;
- + regulator-boot-on;
- + regulator-always-on;
- + };
- +
- + sw3a_reg: sw3 {
- + regulator-min-microvolt = <900000>;
- + regulator-max-microvolt = <1650000>;
- + regulator-boot-on;
- + regulator-always-on;
- + };
- +
- + swbst_reg: swbst {
- + regulator-min-microvolt = <5000000>;
- + regulator-max-microvolt = <5150000>;
- + };
- +
- + snvs_reg: vsnvs {
- + regulator-min-microvolt = <1000000>;
- + regulator-max-microvolt = <3000000>;
- + regulator-boot-on;
- + regulator-always-on;
- + };
- +
- + vref_reg: vrefddr {
- + regulator-boot-on;
- + regulator-always-on;
- + };
- +
- + vgen1_reg: vldo1 {
- + regulator-min-microvolt = <1800000>;
- + regulator-max-microvolt = <3300000>;
- + regulator-always-on;
- + };
- +
- + vgen2_reg: vldo2 {
- + regulator-min-microvolt = <800000>;
- + regulator-max-microvolt = <1550000>;
- + regulator-always-on;
- + };
- +
- + vgen3_reg: vccsd {
- + regulator-min-microvolt = <2850000>;
- + regulator-max-microvolt = <3300000>;
- + regulator-always-on;
- + };
- +
- + vgen4_reg: v33 {
- + regulator-min-microvolt = <2850000>;
- + regulator-max-microvolt = <3300000>;
- + regulator-always-on;
- + };
- +
- + vgen5_reg: vldo3 {
- + regulator-min-microvolt = <1800000>;
- + regulator-max-microvolt = <3300000>;
- + regulator-always-on;
- + };
- +
- + vgen6_reg: vldo4 {
- + regulator-min-microvolt = <1800000>;
- + regulator-max-microvolt = <3300000>;
- + regulator-always-on;
- + };
- + };
- + };
- +};
- +
- +&i2c2 {
- + clock-frequency = <100000>;
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_i2c2>;
- + status = "okay";
- +
- + fxas2100x@20 {
- + compatible = "fsl,fxas2100x";
- + reg = <0x20>;
- + };
- +
- + fxos8700@1e {
- + compatible = "fsl,fxos8700";
- + reg = <0x1e>;
- + };
- +
- + mpl3115@60 {
- + compatible = "fsl,mpl3115";
- + reg = <0x60>;
- + };
- +};
- +
- +&i2c3 {
- + clock-frequency = <100000>;
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_i2c3>;
- + status = "okay";
- +
- + max17135: max17135@48 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_max17135>;
- + compatible = "maxim,max17135";
- + reg = <0x48>;
- + status = "disabled";
- +
- + vneg_pwrup = <1>;
- + gvee_pwrup = <2>;
- + vpos_pwrup = <10>;
- + gvdd_pwrup = <12>;
- + gvdd_pwrdn = <1>;
- + vpos_pwrdn = <2>;
- + gvee_pwrdn = <8>;
- + vneg_pwrdn = <10>;
- + gpio_pmic_pwrgood = <&gpio2 31 0>;
- + gpio_pmic_vcom_ctrl = <&gpio4 14 0>;
- + gpio_pmic_wakeup = <&gpio2 23 0>;
- + gpio_pmic_v3p3 = <&gpio2 30 0>;
- + gpio_pmic_intr = <&gpio2 22 0>;
- +
- + regulators {
- + DISPLAY_reg: DISPLAY {
- + regulator-name = "DISPLAY";
- + };
- +
- + GVDD_reg: GVDD {
- + /* 20v */
- + regulator-name = "GVDD";
- + };
- +
- + GVEE_reg: GVEE {
- + /* -22v */
- + regulator-name = "GVEE";
- + };
- +
- + HVINN_reg: HVINN {
- + /* -22v */
- + regulator-name = "HVINN";
- + };
- +
- + HVINP_reg: HVINP {
- + /* 20v */
- + regulator-name = "HVINP";
- + };
- +
- + VCOM_reg: VCOM {
- + regulator-name = "VCOM";
- + /* 2's-compliment, -4325000 */
- + regulator-min-microvolt = <0xffbe0178>;
- + /* 2's-compliment, -500000 */
- + regulator-max-microvolt = <0xfff85ee0>;
- + };
- +
- + VNEG_reg: VNEG {
- + /* -15v */
- + regulator-name = "VNEG";
- + };
- +
- + VPOS_reg: VPOS {
- + /* 15v */
- + regulator-name = "VPOS";
- + };
- +
- + V3P3_reg: V3P3 {
- + regulator-name = "V3P3";
- + };
- + };
- + };
- +
- + sii902x: sii902x@39 {
- + compatible = "SiI,sii902x";
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_sii902x>;
- + interrupt-parent = <&gpio2>;
- + interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
- + mode_str ="1280x720M@60";
- + bits-per-pixel = <16>;
- + reg = <0x39>;
- + status = "okay";
- + };
- +};
- +
- +&i2c4 {
- + clock-frequency = <100000>;
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_i2c4>;
- + status = "okay";
- +
- + codec: wm8960@1a {
- + compatible = "wlf,wm8960";
- + reg = <0x1a>;
- + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
- + clock-names = "mclk";
- + wlf,shared-lrclk;
- + };
- +
- + ov5647_mipi: ov5647_mipi@36 {
- + compatible = "ovti,ov5647_mipi";
- + reg = <0x36>;
- + clocks = <&clks IMX7D_CLK_DUMMY>;
- + clock-names = "csi_mclk";
- + csi_id = <0>;
- + pwn-gpios = <&gpio_spi 7 GPIO_ACTIVE_HIGH>;
- + mclk = <24000000>;
- + mclk_source = <0>;
- + port {
- + ov5647_mipi_ep: endpoint {
- + remote-endpoint = <&mipi_sensor_ep>;
- + };
- + };
- + };
- +};
- +
- +&iomuxc {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_hog_1>;
- +
- + imx7d-sdb {
- + pinctrl_hog_1: hoggrp-1 {
- + fsl,pins = <
- + MX7D_PAD_UART3_CTS_B__GPIO4_IO7 0x14
- + MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 0x80000000 /* bt reg on */
- + MX7D_PAD_GPIO1_IO08__SD1_VSELECT 0x59 /* VSELECT */
- + MX7D_PAD_SD1_CD_B__GPIO5_IO0 0x59 /* CD */
- + MX7D_PAD_SD1_WP__GPIO5_IO1 0x59 /* WP */
- + MX7D_PAD_SD1_RESET_B__GPIO5_IO2 0x59 /* vmmc */
- + >;
- + };
- +
- + pinctrl_epdc0: epdcgrp0 {
- + fsl,pins = <
- + MX7D_PAD_EPDC_DATA00__EPDC_DATA0 0x2
- + MX7D_PAD_EPDC_DATA01__EPDC_DATA1 0x2
- + MX7D_PAD_EPDC_DATA02__EPDC_DATA2 0x2
- + MX7D_PAD_EPDC_DATA03__EPDC_DATA3 0x2
- + MX7D_PAD_EPDC_DATA04__EPDC_DATA4 0x2
- + MX7D_PAD_EPDC_DATA05__EPDC_DATA5 0x2
- + MX7D_PAD_EPDC_DATA06__EPDC_DATA6 0x2
- + MX7D_PAD_EPDC_DATA07__EPDC_DATA7 0x2
- + MX7D_PAD_EPDC_DATA08__EPDC_DATA8 0x2
- + MX7D_PAD_EPDC_DATA09__EPDC_DATA9 0x2
- + MX7D_PAD_EPDC_DATA10__EPDC_DATA10 0x2
- + MX7D_PAD_EPDC_DATA11__EPDC_DATA11 0x2
- + MX7D_PAD_EPDC_DATA12__EPDC_DATA12 0x2
- + MX7D_PAD_EPDC_DATA13__EPDC_DATA13 0x2
- + MX7D_PAD_EPDC_DATA14__EPDC_DATA14 0x2
- + MX7D_PAD_EPDC_DATA15__EPDC_DATA15 0x2
- + MX7D_PAD_EPDC_SDCLK__EPDC_SDCLK 0x2
- + MX7D_PAD_EPDC_SDLE__EPDC_SDLE 0x2
- + MX7D_PAD_EPDC_SDOE__EPDC_SDOE 0x2
- + MX7D_PAD_EPDC_SDSHR__EPDC_SDSHR 0x2
- + MX7D_PAD_EPDC_SDCE0__EPDC_SDCE0 0x2
- + MX7D_PAD_EPDC_SDCE1__EPDC_SDCE1 0x2
- + MX7D_PAD_EPDC_GDCLK__EPDC_GDCLK 0x2
- + MX7D_PAD_EPDC_GDOE__EPDC_GDOE 0x2
- + MX7D_PAD_EPDC_GDRL__EPDC_GDRL 0x2
- + MX7D_PAD_EPDC_GDSP__EPDC_GDSP 0x2
- + MX7D_PAD_EPDC_BDR0__EPDC_BDR0 0x2
- + MX7D_PAD_EPDC_BDR1__EPDC_BDR1 0x2
- + >;
- + };
- +
- + pinctrl_enet1: enet1grp {
- + fsl,pins = <
- + MX7D_PAD_GPIO1_IO10__ENET1_MDIO 0x3
- + MX7D_PAD_GPIO1_IO11__ENET1_MDC 0x3
- + MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC 0x1
- + MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0 0x1
- + MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1 0x1
- + MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2 0x1
- + MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3 0x1
- + MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL 0x1
- + MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC 0x1
- + MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0 0x1
- + MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1 0x1
- + MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2 0x1
- + MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3 0x1
- + MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL 0x1
- + >;
- + };
- +
- + pinctrl_enet2: enet2grp {
- + fsl,pins = <
- + MX7D_PAD_EPDC_GDSP__ENET2_RGMII_TXC 0x1
- + MX7D_PAD_EPDC_SDCE2__ENET2_RGMII_TD0 0x1
- + MX7D_PAD_EPDC_SDCE3__ENET2_RGMII_TD1 0x1
- + MX7D_PAD_EPDC_GDCLK__ENET2_RGMII_TD2 0x1
- + MX7D_PAD_EPDC_GDOE__ENET2_RGMII_TD3 0x1
- + MX7D_PAD_EPDC_GDRL__ENET2_RGMII_TX_CTL 0x1
- + MX7D_PAD_EPDC_SDCE1__ENET2_RGMII_RXC 0x1
- + MX7D_PAD_EPDC_SDCLK__ENET2_RGMII_RD0 0x1
- + MX7D_PAD_EPDC_SDLE__ENET2_RGMII_RD1 0x1
- + MX7D_PAD_EPDC_SDOE__ENET2_RGMII_RD2 0x1
- + MX7D_PAD_EPDC_SDSHR__ENET2_RGMII_RD3 0x1
- + MX7D_PAD_EPDC_SDCE0__ENET2_RGMII_RX_CTL 0x1
- + >;
- + };
- +
- + pinctrl_ecspi3_cs: ecspi3_cs_grp {
- + fsl,pins = <
- + MX7D_PAD_SD2_CD_B__GPIO5_IO9 0x80000000
- + >;
- + };
- +
- + pinctrl_ecspi3: ecspi3grp {
- + fsl,pins = <
- + MX7D_PAD_SAI2_TX_SYNC__ECSPI3_MISO 0x2
- + MX7D_PAD_SAI2_TX_BCLK__ECSPI3_MOSI 0x2
- + MX7D_PAD_SAI2_RX_DATA__ECSPI3_SCLK 0x2
- + >;
- + };
- +
- + pinctrl_tsc2046_pendown: tsc2046_pendown {
- + fsl,pins = <
- + MX7D_PAD_EPDC_DATA13__GPIO2_IO13 0x59
- + >;
- + };
- +
- + pinctrl_flexcan2: flexcan2grp {
- + fsl,pins = <
- + MX7D_PAD_GPIO1_IO14__FLEXCAN2_RX 0x59
- + MX7D_PAD_GPIO1_IO15__FLEXCAN2_TX 0x59
- + >;
- + };
- +
- + pinctrl_gpmi_nand_1: gpmi-nand-1 {
- + fsl,pins = <
- + MX7D_PAD_SD3_CLK__NAND_CLE 0x71
- + MX7D_PAD_SD3_CMD__NAND_ALE 0x71
- + MX7D_PAD_SAI1_MCLK__NAND_WP_B 0x71
- + MX7D_PAD_SAI1_TX_BCLK__NAND_CE0_B 0x71
- + MX7D_PAD_SAI1_RX_DATA__NAND_CE1_B 0x71
- + MX7D_PAD_SAI1_TX_DATA__NAND_READY_B 0x74
- + MX7D_PAD_SD3_STROBE__NAND_RE_B 0x71
- + MX7D_PAD_SD3_RESET_B__NAND_WE_B 0x71
- + MX7D_PAD_SD3_DATA0__NAND_DATA00 0x71
- + MX7D_PAD_SD3_DATA1__NAND_DATA01 0x71
- + MX7D_PAD_SD3_DATA2__NAND_DATA02 0x71
- + MX7D_PAD_SD3_DATA3__NAND_DATA03 0x71
- + MX7D_PAD_SD3_DATA4__NAND_DATA04 0x71
- + MX7D_PAD_SD3_DATA5__NAND_DATA05 0x71
- + MX7D_PAD_SD3_DATA6__NAND_DATA06 0x71
- + MX7D_PAD_SD3_DATA7__NAND_DATA07 0x71
- +
- + >;
- + };
- +
- + pinctrl_i2c1: i2c1grp {
- + fsl,pins = <
- + MX7D_PAD_I2C1_SDA__I2C1_SDA 0x4000007f
- + MX7D_PAD_I2C1_SCL__I2C1_SCL 0x4000007f
- + >;
- + };
- +
- + pinctrl_i2c2: i2c2grp {
- + fsl,pins = <
- + MX7D_PAD_I2C2_SDA__I2C2_SDA 0x4000007f
- + MX7D_PAD_I2C2_SCL__I2C2_SCL 0x4000007f
- + >;
- + };
- +
- + pinctrl_i2c3: i2c3grp {
- + fsl,pins = <
- + MX7D_PAD_I2C3_SDA__I2C3_SDA 0x4000007f
- + MX7D_PAD_I2C3_SCL__I2C3_SCL 0x4000007f
- + >;
- + };
- +
- + pinctrl_i2c4: i2c4grp {
- + fsl,pins = <
- + MX7D_PAD_SAI1_RX_BCLK__I2C4_SDA 0x4000007f
- + MX7D_PAD_SAI1_RX_SYNC__I2C4_SCL 0x4000007f
- + >;
- + };
- +
- + pinctrl_lcdif_dat: lcdifdatgrp {
- + fsl,pins = <
- + MX7D_PAD_EPDC_DATA00__LCD_DATA0 0x79
- + MX7D_PAD_EPDC_DATA01__LCD_DATA1 0x79
- + MX7D_PAD_EPDC_DATA02__LCD_DATA2 0x79
- + MX7D_PAD_EPDC_DATA03__LCD_DATA3 0x79
- + MX7D_PAD_EPDC_DATA04__LCD_DATA4 0x79
- + MX7D_PAD_EPDC_DATA05__LCD_DATA5 0x79
- + MX7D_PAD_EPDC_DATA06__LCD_DATA6 0x79
- + MX7D_PAD_EPDC_DATA07__LCD_DATA7 0x79
- + >;
- + };
- +
- + pinctrl_lcdif_ctrl: lcdifctrlgrp {
- + fsl,pins = <
- + MX7D_PAD_EPDC_GDRL__LCD_RD_E 0x79
- + MX7D_PAD_EPDC_GDOE__LCD_WR_RWN 0x79
- + MX7D_PAD_EPDC_BDR0__LCD_CS 0x79
- + MX7D_PAD_LCD_RESET__LCD_RESET 0x79
- + MX7D_PAD_EPDC_DATA08__GPIO2_IO8 0x79
- + >;
- + };
- +
- + pinctrl_max17135: max17135grp-1 {
- + fsl,pins = <
- + MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 0x80000000 /* pwrgood */
- + MX7D_PAD_I2C4_SCL__GPIO4_IO14 0x80000000 /* vcom_ctrl */
- + MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 0x80000000 /* wakeup */
- + MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 0x80000000 /* v3p3 */
- + MX7D_PAD_EPDC_SDCE2__GPIO2_IO22 0x80000000 /* pwr int */
- + >;
- + };
- +
- + pinctrl_sii902x: hdmigrp-1 {
- + fsl,pins = <
- + MX7D_PAD_EPDC_DATA13__GPIO2_IO13 0x59
- + >;
- + };
- +
- + pinctrl_sim1_1: sim1grp-1 {
- + fsl,pins = <
- + MX7D_PAD_EPDC_DATA10__SIM1_PORT1_RST_B 0x77
- + MX7D_PAD_EPDC_DATA12__SIM1_PORT1_PD 0x77
- + MX7D_PAD_EPDC_DATA11__SIM1_PORT1_SVEN 0x77
- + MX7D_PAD_EPDC_DATA09__SIM1_PORT1_CLK 0x73
- + MX7D_PAD_EPDC_DATA08__SIM1_PORT1_TRXD 0x73
- + >;
- + };
- +
- + pinctrl_uart1: uart1grp {
- + fsl,pins = <
- + MX7D_PAD_UART1_TX_DATA__UART1_DCE_TX 0x79
- + MX7D_PAD_UART1_RX_DATA__UART1_DCE_RX 0x79
- + >;
- + };
- +
- + pinctrl_uart5: uart5grp {
- + fsl,pins = <
- + MX7D_PAD_SAI1_TX_BCLK__UART5_DCE_TX 0x79
- + MX7D_PAD_SAI1_RX_DATA__UART5_DCE_RX 0x79
- + MX7D_PAD_SAI1_TX_SYNC__UART5_DCE_CTS 0x79
- + MX7D_PAD_SAI1_TX_DATA__UART5_DCE_RTS 0x79
- + >;
- + };
- +
- + pinctrl_uart5dte: uart5dtegrp {
- + fsl,pins = <
- + MX7D_PAD_SAI1_TX_BCLK__UART5_DTE_RX 0x79
- + MX7D_PAD_SAI1_RX_DATA__UART5_DTE_TX 0x79
- + MX7D_PAD_SAI1_TX_SYNC__UART5_DTE_RTS 0x79
- + MX7D_PAD_SAI1_TX_DATA__UART5_DTE_CTS 0x79
- + >;
- + };
- +
- + pinctrl_uart6: uart6grp {
- + fsl,pins = <
- + MX7D_PAD_ECSPI1_MOSI__UART6_DCE_TX 0x79
- + MX7D_PAD_ECSPI1_SCLK__UART6_DCE_RX 0x79
- + MX7D_PAD_ECSPI1_SS0__UART6_DCE_CTS 0x79
- + MX7D_PAD_ECSPI1_MISO__UART6_DCE_RTS 0x79
- + >;
- + };
- +
- + pinctrl_usdhc1: usdhc1grp {
- + fsl,pins = <
- + MX7D_PAD_SD1_CMD__SD1_CMD 0x59
- + MX7D_PAD_SD1_CLK__SD1_CLK 0x19
- + MX7D_PAD_SD1_DATA0__SD1_DATA0 0x59
- + MX7D_PAD_SD1_DATA1__SD1_DATA1 0x59
- + MX7D_PAD_SD1_DATA2__SD1_DATA2 0x59
- + MX7D_PAD_SD1_DATA3__SD1_DATA3 0x59
- + >;
- + };
- +
- + pinctrl_usdhc1_100mhz: usdhc1grp_100mhz {
- + fsl,pins = <
- + MX7D_PAD_SD1_CMD__SD1_CMD 0x5a
- + MX7D_PAD_SD1_CLK__SD1_CLK 0x1a
- + MX7D_PAD_SD1_DATA0__SD1_DATA0 0x5a
- + MX7D_PAD_SD1_DATA1__SD1_DATA1 0x5a
- + MX7D_PAD_SD1_DATA2__SD1_DATA2 0x5a
- + MX7D_PAD_SD1_DATA3__SD1_DATA3 0x5a
- + >;
- + };
- +
- + pinctrl_usdhc1_200mhz: usdhc1grp_200mhz {
- + fsl,pins = <
- + MX7D_PAD_SD1_CMD__SD1_CMD 0x5b
- + MX7D_PAD_SD1_CLK__SD1_CLK 0x1b
- + MX7D_PAD_SD1_DATA0__SD1_DATA0 0x5b
- + MX7D_PAD_SD1_DATA1__SD1_DATA1 0x5b
- + MX7D_PAD_SD1_DATA2__SD1_DATA2 0x5b
- + MX7D_PAD_SD1_DATA3__SD1_DATA3 0x5b
- + >;
- + };
- +
- + pinctrl_usdhc2: usdhc2grp {
- + fsl,pins = <
- + MX7D_PAD_SD2_CMD__SD2_CMD 0x59
- + MX7D_PAD_SD2_CLK__SD2_CLK 0x19
- + MX7D_PAD_SD2_DATA0__SD2_DATA0 0x59
- + MX7D_PAD_SD2_DATA1__SD2_DATA1 0x59
- + MX7D_PAD_SD2_DATA2__SD2_DATA2 0x59
- + MX7D_PAD_SD2_DATA3__SD2_DATA3 0x59
- + MX7D_PAD_ECSPI2_MOSI__GPIO4_IO21 0x59 /* WL_REG_ON */
- + >;
- + };
- +
- + pinctrl_usdhc2_100mhz: usdhc2grp_100mhz {
- + fsl,pins = <
- + MX7D_PAD_SD2_CMD__SD2_CMD 0x5a
- + MX7D_PAD_SD2_CLK__SD2_CLK 0x1a
- + MX7D_PAD_SD2_DATA0__SD2_DATA0 0x5a
- + MX7D_PAD_SD2_DATA1__SD2_DATA1 0x5a
- + MX7D_PAD_SD2_DATA2__SD2_DATA2 0x5a
- + MX7D_PAD_SD2_DATA3__SD2_DATA3 0x5a
- + >;
- + };
- +
- + pinctrl_usdhc2_200mhz: usdhc2grp_200mhz {
- + fsl,pins = <
- + MX7D_PAD_SD2_CMD__SD2_CMD 0x5b
- + MX7D_PAD_SD2_CLK__SD2_CLK 0x1b
- + MX7D_PAD_SD2_DATA0__SD2_DATA0 0x5b
- + MX7D_PAD_SD2_DATA1__SD2_DATA1 0x5b
- + MX7D_PAD_SD2_DATA2__SD2_DATA2 0x5b
- + MX7D_PAD_SD2_DATA3__SD2_DATA3 0x5b
- + >;
- + };
- +
- + pinctrl_usdhc3: usdhc3grp {
- + fsl,pins = <
- + MX7D_PAD_SD3_CMD__SD3_CMD 0x59
- + MX7D_PAD_SD3_CLK__SD3_CLK 0x19
- + MX7D_PAD_SD3_DATA0__SD3_DATA0 0x59
- + MX7D_PAD_SD3_DATA1__SD3_DATA1 0x59
- + MX7D_PAD_SD3_DATA2__SD3_DATA2 0x59
- + MX7D_PAD_SD3_DATA3__SD3_DATA3 0x59
- + MX7D_PAD_SD3_DATA4__SD3_DATA4 0x59
- + MX7D_PAD_SD3_DATA5__SD3_DATA5 0x59
- + MX7D_PAD_SD3_DATA6__SD3_DATA6 0x59
- + MX7D_PAD_SD3_DATA7__SD3_DATA7 0x59
- + MX7D_PAD_SD3_STROBE__SD3_STROBE 0x19
- + >;
- + };
- +
- + pinctrl_usdhc3_100mhz: usdhc3grp_100mhz {
- + fsl,pins = <
- + MX7D_PAD_SD3_CMD__SD3_CMD 0x5a
- + MX7D_PAD_SD3_CLK__SD3_CLK 0x1a
- + MX7D_PAD_SD3_DATA0__SD3_DATA0 0x5a
- + MX7D_PAD_SD3_DATA1__SD3_DATA1 0x5a
- + MX7D_PAD_SD3_DATA2__SD3_DATA2 0x5a
- + MX7D_PAD_SD3_DATA3__SD3_DATA3 0x5a
- + MX7D_PAD_SD3_DATA4__SD3_DATA4 0x5a
- + MX7D_PAD_SD3_DATA5__SD3_DATA5 0x5a
- + MX7D_PAD_SD3_DATA6__SD3_DATA6 0x5a
- + MX7D_PAD_SD3_DATA7__SD3_DATA7 0x5a
- + MX7D_PAD_SD3_STROBE__SD3_STROBE 0x1a
- + >;
- + };
- +
- + pinctrl_usdhc3_200mhz: usdhc3grp_200mhz {
- + fsl,pins = <
- + MX7D_PAD_SD3_CMD__SD3_CMD 0x5b
- + MX7D_PAD_SD3_CLK__SD3_CLK 0x1b
- + MX7D_PAD_SD3_DATA0__SD3_DATA0 0x5b
- + MX7D_PAD_SD3_DATA1__SD3_DATA1 0x5b
- + MX7D_PAD_SD3_DATA2__SD3_DATA2 0x5b
- + MX7D_PAD_SD3_DATA3__SD3_DATA3 0x5b
- + MX7D_PAD_SD3_DATA4__SD3_DATA4 0x5b
- + MX7D_PAD_SD3_DATA5__SD3_DATA5 0x5b
- + MX7D_PAD_SD3_DATA6__SD3_DATA6 0x5b
- + MX7D_PAD_SD3_DATA7__SD3_DATA7 0x5b
- + MX7D_PAD_SD3_STROBE__SD3_STROBE 0x1b
- + >;
- + };
- +
- + pinctrl_sai1: sai1grp {
- + fsl,pins = <
- + MX7D_PAD_SAI1_MCLK__SAI1_MCLK 0x1f
- + MX7D_PAD_ENET1_RX_CLK__SAI1_TX_BCLK 0x1f
- + MX7D_PAD_ENET1_CRS__SAI1_TX_SYNC 0x1f
- + MX7D_PAD_ENET1_COL__SAI1_TX_DATA0 0x30
- + MX7D_PAD_ENET1_TX_CLK__SAI1_RX_DATA0 0x1f
- + >;
- + };
- +
- + pinctrl_sai2: sai2grp {
- + fsl,pins = <
- + MX7D_PAD_SAI2_TX_BCLK__SAI2_TX_BCLK 0x1f
- + MX7D_PAD_SAI2_TX_SYNC__SAI2_TX_SYNC 0x1f
- + MX7D_PAD_SAI2_TX_DATA__SAI2_TX_DATA0 0x30
- + MX7D_PAD_SAI2_RX_DATA__SAI2_RX_DATA0 0x1f
- + >;
- + };
- +
- + pinctrl_spi1: spi1grp {
- + fsl,pins = <
- + MX7D_PAD_GPIO1_IO09__GPIO1_IO9 0x59
- + MX7D_PAD_GPIO1_IO12__GPIO1_IO12 0x59
- + MX7D_PAD_GPIO1_IO13__GPIO1_IO13 0x59
- + >;
- + };
- + };
- +};
- +
- +&iomuxc_lpsr {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_hog_2>;
- +
- + imx7d-sdb {
- + pinctrl_hog_2: hoggrp-2 {
- + fsl,pins = <
- + MX7D_PAD_GPIO1_IO05__GPIO1_IO5 0x14
- + MX7D_PAD_EPDC_DATA14__GPIO2_IO14 0x59 /* CAN_STBY */
- + MX7D_PAD_GPIO1_IO00__WDOD1_WDOG_B 0x74
- + >;
- + };
- +
- + pinctrl_pwm1: pwm1grp {
- + fsl,pins = <
- + MX7D_PAD_GPIO1_IO01__PWM1_OUT 0x110b0
- + >;
- + };
- + };
- +};
- +
- +&lcdif {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_lcdif_dat
- + &pinctrl_lcdif_ctrl>;
- + display = <&display0>;
- + status = "okay";
- +
- + display0: display {
- + mpu-mode;
- + lcd_rs_gpio = <&gpio2 8 0>;
- + lcd_panel = "ST7735R-SQUARE";
- + };
- +};
- +
- +&pcie {
- + pinctrl-names = "default";
- + reset-gpio = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
- + disable-gpio = <&gpio_spi 0 GPIO_ACTIVE_LOW>;
- + status = "okay";
- +};
- +
- +&pwm1 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_pwm1>;
- + status = "okay";
- +};
- +
- +&sai1 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_sai1>;
- + assigned-clocks = <&clks IMX7D_SAI1_ROOT_SRC>,
- + <&clks IMX7D_SAI1_ROOT_CLK>;
- + assigned-clock-parents = <&clks IMX7D_PLL_AUDIO_POST_DIV>;
- + assigned-clock-rates = <0>, <36864000>;
- + status = "okay";
- +};
- +
- +&sdma {
- + status = "okay";
- +};
- +
- +&sim1 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_sim1_1>;
- + port = <0>;
- + sven_low_active;
- + status = "disabled";
- +};
- +
- +&uart1 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_uart1>;
- + assigned-clocks = <&clks IMX7D_UART1_ROOT_SRC>;
- + assigned-clock-parents = <&clks IMX7D_OSC_24M_CLK>;
- + status = "okay";
- +};
- +
- +&uart5 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_uart5>;
- + assigned-clocks = <&clks IMX7D_UART5_ROOT_SRC>;
- + assigned-clock-parents = <&clks IMX7D_PLL_SYS_MAIN_240M_CLK>;
- + fsl,uart-has-rtscts;
- + /* for DTE mode, add below change */
- + /* fsl,dte-mode; */
- + /* pinctrl-0 = <&pinctrl_uart5dte>; */
- + status = "okay";
- +};
- +
- +&uart6 {
- + pinctrl-names = "default";
- + pinctrl-0 = <&pinctrl_uart6>;
- + assigned-clocks = <&clks IMX7D_UART6_ROOT_SRC>;
- + assigned-clock-parents = <&clks IMX7D_PLL_SYS_MAIN_240M_CLK>;
- + fsl,uart-has-rtscts;
- + status = "okay";
- +};
- +
- +&usbotg1 {
- + vbus-supply = <®_usb_otg1_vbus>;
- + srp-disable;
- + hnp-disable;
- + adp-disable;
- + status = "okay";
- +};
- +
- +&usbotg2 {
- + vbus-supply = <®_usb_otg2_vbus>;
- + dr_mode = "host";
- + status = "okay";
- +};
- +
- +&usdhc1 {
- + pinctrl-names = "default", "state_100mhz", "state_200mhz";
- + pinctrl-0 = <&pinctrl_usdhc1>;
- + pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
- + pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
- + cd-gpios = <&gpio5 0 0>;
- + wp-gpios = <&gpio5 1 0>;
- + tuning-step = <2>;
- + vmmc-supply = <®_sd1_vmmc>;
- + enable-sdio-wakeup;
- + keep-power-in-suspend;
- + status = "okay";
- +};
- +
- +&usdhc2 {
- + pinctrl-names = "default", "state_100mhz", "state_200mhz";
- + pinctrl-0 = <&pinctrl_usdhc2>;
- + pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
- + pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
- + enable-sdio-wakeup;
- + keep-power-in-suspend;
- + tuning-step = <2>;
- + wifi-host;
- + status = "okay";
- +};
- +
- +&usdhc3 {
- + pinctrl-names = "default", "state_100mhz", "state_200mhz";
- + pinctrl-0 = <&pinctrl_usdhc3>;
- + pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
- + pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
- + assigned-clocks = <&clks IMX7D_USDHC3_ROOT_CLK>;
- + assigned-clock-rates = <400000000>;
- + bus-width = <8>;
- + tuning-step = <2>;
- + non-removable;
- + status = "okay";
- +};
- diff --git a/arch/arm/configs/imx_v7_defconfig b/arch/arm/configs/imx_v7_defconfig
- index 98b3ba8db058..cfbbc939bbee 100644
- --- a/arch/arm/configs/imx_v7_defconfig
- +++ b/arch/arm/configs/imx_v7_defconfig
- @@ -247,6 +247,7 @@ CONFIG_FB_MXC_LDB=y
- CONFIG_FB_MXC_HDMI=y
- CONFIG_FB_MXS_SII902X=y
- CONFIG_FB_MXS_ST7789S_QVGA=y
- +CONFIG_FB_MXS_ST7735R_SQUARE=y
- CONFIG_FB_MXC_DCIC=m
- CONFIG_FB_MXC_ADV7535=y
- CONFIG_HANNSTAR_CABC=y
- diff --git a/drivers/video/fbdev/mxc/Kconfig b/drivers/video/fbdev/mxc/Kconfig
- index a34c52393069..9762404c010c 100644
- --- a/drivers/video/fbdev/mxc/Kconfig
- +++ b/drivers/video/fbdev/mxc/Kconfig
- @@ -83,6 +83,10 @@ config FB_MXS_ST7789S_QVGA
- tristate "ST7789S QVGA MPU Display"
- depends on FB_MXS
- +config FB_MXS_ST7735R_SQUARE
- + tristate "ST7735R SQUARE MPU Display"
- + depends on FB_MXS
- +
- config FB_MXC_DCIC
- tristate "MXC DCIC"
- depends on FB_MXC_SYNC_PANEL
- diff --git a/drivers/video/fbdev/mxc/Makefile b/drivers/video/fbdev/mxc/Makefile
- index 81650ec53fcf..34c6e6249a1a 100644
- --- a/drivers/video/fbdev/mxc/Makefile
- +++ b/drivers/video/fbdev/mxc/Makefile
- @@ -13,5 +13,6 @@ obj-$(CONFIG_FB_MXC_EINK_PANEL) += mxc_epdc_fb.o
- obj-$(CONFIG_FB_MXC_EINK_V2_PANEL) += mxc_epdc_v2_fb.o
- obj-$(CONFIG_FB_MXS_SII902X) += mxsfb_sii902x.o
- obj-$(CONFIG_FB_MXS_ST7789S_QVGA) += mxsfb_st7789s_qvga.o
- +obj-$(CONFIG_FB_MXS_ST7735R_SQUARE) += mxsfb_st7735r_square.o
- obj-$(CONFIG_FB_MXC_DCIC) += mxc_dcic.o
- obj-$(CONFIG_HANNSTAR_CABC) += hannstar_cabc.o
- diff --git a/drivers/video/fbdev/mxc/mxsfb_st7735r_square.c b/drivers/video/fbdev/mxc/mxsfb_st7735r_square.c
- new file mode 100644
- index 000000000000..f45712bbce52
- --- /dev/null
- +++ b/drivers/video/fbdev/mxc/mxsfb_st7735r_square.c
- @@ -0,0 +1,196 @@
- +/*
- + * Copyright (C) 2016 Freescale Semiconductor, Inc. All Rights Reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- +
- + * 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, write to the Free Software Foundation, Inc.,
- + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- + */
- +
- +#include <linux/types.h>
- +#include <linux/init.h>
- +#include <linux/delay.h>
- +#include <linux/err.h>
- +#include <linux/io.h>
- +
- +#include "../mxsfb.h"
- +
- +static struct fb_videomode st7735r_lcd_modedb[] = {
- + {
- + "ST7735R-SQUARE", 60, 128, 128, 200000,
- + 0, 0,
- + 0, 0,
- + 0, 0,
- + 0,
- + FB_VMODE_NONINTERLACED,
- + 0,
- + },
- +};
- +
- +static struct mpu_lcd_config lcd_config = {
- + .bus_mode = MPU_BUS_8080,
- + .interface_width = 8,
- + .panel_bpp = 16,
- +};
- +void mpu_st7735r_get_lcd_videomode(struct fb_videomode **mode, int *size,
- + struct mpu_lcd_config **data)
- +{
- + *mode = &st7735r_lcd_modedb[0];
- + *size = ARRAY_SIZE(st7735r_lcd_modedb);
- + *data = &lcd_config;
- +}
- +
- +int mpu_st7735r_lcd_setup(struct mxsfb_info * mxsfb)
- +{
- + unsigned int val;
- +
- + if (mxsfb == NULL)
- + return -1;
- +
- + /* Software reset */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x01);
- + msleep(120);
- +
- + /* Read display ID */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x04);
- + val = mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_READ, 0x00);
- + val = mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_READ, 0x00);
- + printk(KERN_INFO "Manufacturer ID = 0x%02x.\n", val);
- + val = mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_READ, 0x00);
- + printk(KERN_INFO "Driver version ID = 0x%02x.\n", val);
- + val = mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_READ, 0x00);
- + printk(KERN_INFO "Driver ID = 0x%02x.\n", val);
- +
- + /* Sleep out */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x11);
- + msleep(120);
- +
- + /* Set frame rate */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xB1);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x08);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x05);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xB2);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x08);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x05);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xB3);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x08);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x05);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x08);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x05);
- +
- + /* Power sequence */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xC0);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0xA2);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x02);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x84);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xC1);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0xC5);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xC2);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x0A);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xC3);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x8A);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x2A);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xC4);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x8A);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0xEE);
- +
- + /* VCOM */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xC5);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x0E);
- +
- + /* Gamma sequence */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xE0);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x12);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x18);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x10);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x18);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x33);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x2C);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x25);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x28);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x28);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x27);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x2F);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x3C);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x03);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x03);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x10);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0xE1);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x12);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x18);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x10);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x18);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x2D);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x28);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x23);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x28);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x28);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x26);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x2F);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x3B);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x03);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x03);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x10);
- +
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x3A);
- + if (mxsfb->mpu_lcd_sigs->panel_bpp == 16)
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x55);
- + else
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x66); /* 18 bpp */
- +
- + /* Set row address */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x2A);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, (((st7735r_lcd_modedb[0].xres - 1) >> 8) & 0xFF));
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, ((st7735r_lcd_modedb[0].xres - 1) & 0xFF));
- +
- + /* Set column address */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x2B);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, 0x00);
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, (((st7735r_lcd_modedb[0].yres - 1) >> 8) & 0xFF));
- + mxsfb_mpu_access(mxsfb, MPU_DATA, MPU_WRITE, ((st7735r_lcd_modedb[0].yres - 1) & 0xFF));
- +
- + /* Display on */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x29);
- +
- + /* Memory write */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x2C);
- +
- + return 0;
- +}
- +
- +int mpu_st7735r_lcd_poweroff(struct mxsfb_info * mxsfb)
- +{
- + /* Display off */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x28);
- +
- + /* Sleep in */
- + mxsfb_mpu_access(mxsfb, MPU_CMD, MPU_WRITE, 0x10);
- +
- + return 0;
- +}
- diff --git a/drivers/video/fbdev/mxsfb.c b/drivers/video/fbdev/mxsfb.c
- index 17fe13e4b53b..875577aa9cdd 100644
- --- a/drivers/video/fbdev/mxsfb.c
- +++ b/drivers/video/fbdev/mxsfb.c
- @@ -73,6 +73,12 @@ static struct mpu_match_lcd mpu_lcd_db[] = {
- "ST7789S-QVGA",
- {mpu_st7789s_get_lcd_videomode, mpu_st7789s_lcd_setup, mpu_st7789s_lcd_poweroff}
- },
- +#endif
- +#ifdef CONFIG_FB_MXS_ST7735R_SQUARE
- + {
- + "ST7735R-SQUARE",
- + {mpu_st7735r_get_lcd_videomode, mpu_st7735r_lcd_setup, mpu_st7735r_lcd_poweroff}
- + },
- #endif
- {
- "", {NULL, NULL}
- diff --git a/drivers/video/fbdev/mxsfb.h b/drivers/video/fbdev/mxsfb.h
- index 822d4ebb9cc9..b922cc5fcf00 100644
- --- a/drivers/video/fbdev/mxsfb.h
- +++ b/drivers/video/fbdev/mxsfb.h
- @@ -368,4 +368,11 @@ int mpu_st7789s_lcd_setup(struct mxsfb_info * mxsfb);
- int mpu_st7789s_lcd_poweroff(struct mxsfb_info * mxsfb);
- #endif
- +#ifdef CONFIG_FB_MXS_ST7735R_SQUARE
- +void mpu_st7735r_get_lcd_videomode(struct fb_videomode **mode, int *size,
- + struct mpu_lcd_config **data);
- +int mpu_st7735r_lcd_setup(struct mxsfb_info * mxsfb);
- +int mpu_st7735r_lcd_poweroff(struct mxsfb_info * mxsfb);
- +#endif
- +
- #endif
- --
- 2.19.1
Advertisement
Add Comment
Please, Sign In to add comment