blob: 2c0c546e2c8a09aec374ba8ed6e27c17a10b163c [file] [log] [blame]
/*
* Copyright (C) 2014 Marvell Technology Group Ltd.
* Author: Dongjiu Geng <djgeng@marvell.com>
*
* 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
* publishhed by the Free Software Foundation.
*/
#include "pxa1908.dtsi"
#include "pxa1908-pinfunc.h"
#include <dt-bindings/mmc/pxa_sdhci.h>
/ {
chosen {
bootargs = "console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on";
};
memory {
reg = <0x00000000 0x10000000>;
};
soc {
devfreq-ddr {
status = "okay";
};
pd_display: pd_display@0xd4282800 {
compatible = "marvell,power-domain-display-pxa1u88";
reg = <0xd4282800 0x1000>;
clocks = <&soc_clocks PXA1U88_CLK_DISP_HCLK>,
<&soc_clocks PXA1U88_CLK_DSI_ESC>;
clock-names = "LCDCIHCLK", "esc_clk";
};
smmu { /* iommu in vpu */
clocks = <&soc_clocks PXA1U88_CLK_VPU>,
<&soc_clocks PXA1U88_CLK_VPUBUS>;
clock-names = "VPUCLK", "VPUACLK";
marvell,power-domain = <&pd_vpu>;
status = "okay";
};
axi@d4200000 { /* AXI */
pd_gc: pd_gc@d4282800 {
compatible = "marvell,power-domain-common-gc";
reg = <0xd4282800 0x1000>;
clocks = <&soc_clocks PXA1U88_CLK_GC3D>;
lpm-qos = <PM_QOS_CPUIDLE_BLOCK_DDR>;
};
pd_gc2d: pd_gc2d@d4282800 {
compatible = "marvell,power-domain-common-gc2d";
reg = <0xd4282800 0x1000>;
clocks = <&soc_clocks PXA1U88_CLK_GC2D>;
lpm-qos = <PM_QOS_CPUIDLE_BLOCK_DDR>;
};
gpu: gpu@C0400000 {
marvell,power-domain = <&pd_gc>;
marvell,gpu-mem-base = <0x09000000>;
marvell,gpu-mem-size = <0x1000000>;
clocks = <&soc_clocks PXA1U88_CLK_GC3D>,
<&soc_clocks PXA1U88_CLK_GCSH>,
<&soc_clocks PXA1U88_CLK_GCBUS>;
clock-names = "GC3DFCLK", "GCSHCLK", "GC3DACLK";
status = "okay";
};
gpu2d: gpu2d@d420c000 {
marvell,power-domain = <&pd_gc2d>;
clocks = <&soc_clocks PXA1U88_CLK_GC2D>,
<&soc_clocks PXA1U88_CLK_GCBUS>;
clock-names = "GC2DFCLK", "GC2DACLK";
status = "okay";
};
pd_vpu: pd_vpu@d4282800 {
compatible = "marvell,power-domain-common-vpu";
reg = <0xd4282800 0x1000>;
clocks = <&soc_clocks PXA1U88_CLK_VPU>;
lpm-qos = <PM_QOS_CPUIDLE_BLOCK_DDR>;
};
pd_smmu: pd_smmu@c0010000 {
compatible = "marvell,power-domain-smmu-pxa1u88";
reg = <0xc0010000 0x10000>;
marvell,power-domain-parent = <&pd_vpu>;
clocks = <&soc_clocks PXA1U88_CLK_VPU>,
<&soc_clocks PXA1U88_CLK_VPUBUS>;
clock-names = "VPUCLK", "VPUACLK";
};
coda7542: coda7542@d420d000 {
marvell,sram-internal = <0>;
marvell,nv21_support = <1>;
marvell,seconddaxi_none = <1>;
marvell,power-domain = <&pd_smmu>;
clocks = <&soc_clocks PXA1U88_CLK_VPU>,
<&soc_clocks PXA1U88_CLK_VPUBUS>;
clock-names = "VPUCLK", "VPUACLK";
status = "okay";
};
devfreq-vpu {
marvell,power-domain = <&pd_vpu>;
status = "okay";
};
dsi: dsi@d420b800 {
marvell,phy-name = "mmp_dsi1";
marvell,plat-path-name = "mmp_pnpath";
marvell,dsi-lanes = <4>;
marvell,burst-mode = <2>;
marvell,hbp-en;
status = "okay";
};
asram: asram@d12a0000 {
status = "okay";
};
adma0: adma@d128d800 {
status = "okay";
};
ccic1: ccic@d420a000 {
pinctrl-names = "default","twsi","sccb";
pinctrl-0 = <&ccic1_pmx_func1>;
pinctrl-1 = <&ccic1_pmx_func2>;
pinctrl-2 = <&ccic1_pmx_func3>;
interrupts = <0 42 0x4>;
status = "okay";
};
ccic2: ccic@d420a800 {
pinctrl-names = "default","twsi","sccb";
pinctrl-0 = <&ccic2_pmx_func1>;
pinctrl-1 = <&ccic2_pmx_func2>;
pinctrl-2 = <&ccic2_pmx_func3>;
/*ccic2 use ccic1 I2C pin on pxa1908dkb */
sync_ccic1_pin;
interrupts = <0 77 0x4>;
status = "okay";
};
sc2mmu1: sc2mmu@d420F000 {
interrupts = <0 15 0x4>;
status = "okay";
};
b52isp: b52isp@0xC0200000 {
interrupts = <0 11 0x4>;
status = "okay";
};
vdma: vdma@d4209000 {
marvell,vdma-num = <1>;
marvell,vdma-axi = <1>;
status = "okay";
vdma1 {
marvell,vdma-id = <0>;
marvell,sram-size = <15360>;
marvell,is_vid = <0>;
};
};
disp: disp@d420b000 {
pinctrl-names = "default";
marvell,disp-name = "disp_name";
marvell,path-num = <1>;
marvell,power-domain = <&pd_display>;
clocks = <&soc_clocks PXA1U88_CLK_DISP_HCLK>,
<&soc_clocks PXA1U88_CLK_PLL4VCO>,
/* parent1-clk-tbl clk */
<&soc_clocks PXA1U88_CLK_DISP1>,
<&soc_clocks PXA1U88_CLK_DISP4>,
/* parent2-clk-tbl clk */
<&soc_clocks PXA1U88_CLK_PLL1_624>,
<&soc_clocks PXA1U88_CLK_PLL1_832>,
<&soc_clocks PXA1U88_CLK_PLL1_499_EN>,
<&soc_clocks PXA1U88_CLK_PLL1_499>,
<&soc_clocks PXA1U88_CLK_PLL4>,
<&soc_clocks PXA1U88_CLK_PLL4VCODIV3>;
clock-names = "LCDCIHCLK", "pll4_vco",
/* parent1-clk-tbl clk */
"disp1_clk", "dsipll_clk",
/* parent2-clk-tbl clk */
"pll1_624", "pll1_832", "pll1_499_en", "pll1_499", "pll4", "pll4_div3";
status = "okay";
path1 {
marvell,path-name = "mmp_pnpath";
marvell,overlay-num = <1>;
marvell,overlay-table = <1>;
marvell,output-type = <1>;
marvell,path-config = <0x10>;
marvell,link-config = <0x1>;
disp_apmu {
plat = <4>;
apmu-reg = <0xd428284c>;
clksrc-bit = <9>;
parent1-clk-tbl = "disp1_clk", "dsipll_clk";
parent2-clk-tbl = "pll1_624", "pll1_832", "pll1_499_en", "pll4", "pll4_div3";
};
};
};
fb0: fbbase {
marvell,fb-name = "mmp-fb";
marvell,path-name = "mmp_pnpath";
marvell,overlay-id = <1>;
marvell,default-pixfmt = <0x109>;
marvell,buffer-num = <3>;
marvell,fb-mem = <0x17000000>;
status = "okay";
};
/* eMMC */
sdh2: sdh@d4281000 {
pinctrl-names = "default", "fast";
pinctrl-0 = <&sdh2_pmx_func1 &sdh2_pmx_func2>;
pinctrl-1 = <&sdh2_pmx_func1_fast &sdh2_pmx_func2_fast>;
bus-width = <8>;
non-removable;
marvell,sdh-pm-runtime-en;
marvell,sdh-quirks = <(
SDHCI_QUIRK_BROKEN_ADMA |
SDHCI_QUIRK_BROKEN_CARD_DETECTION
)>;
marvell,sdh-quirks2 = <(
SDHCI_QUIRK2_TUNING_ADMA_BROKEN |
/* SDHCI_QUIRK2_BROKEN_HS200 | */
SDHCI_QUIRK2_TIMEOUT_SHORT
)>;
marvell,sdh-host-caps = <(MMC_CAP_1_8V_DDR)>;
marvell,sdh-host-caps2 = <(
MMC_CAP2_DISABLE_BLK_ASYNC |
MMC_CAP2_SKIP_SD |
MMC_CAP2_SKIP_SDIO
)>;
marvell,sdh-flags = <(
PXA_FLAG_NEW_RX_CFG_REG |
PXA_FLAG_SD_8_BIT_CAPABLE_SLOT |
PXA_FLAG_ENABLE_CLOCK_GATING |
PXA_FLAG_TX_SEL_BUS_CLK
)>;
/* prop "sdh-dtr-data": <timing preset_rate src_rate tx_delay rx_delay sdclk_sel0 sdclk_sel1 fakeclk_en> */
marvell,sdh-dtr-data = <PXA_MMC_TIMING_LEGACY PXA_SDH_DTR_26M PXA_SDH_DTR_52M 0 0 0 0 0>,
<PXA_MMC_TIMING_MMC_HS PXA_SDH_DTR_52M PXA_SDH_DTR_104M 0 0 0 0 0>,
<PXA_MMC_TIMING_UHS_DDR50 PXA_SDH_DTR_52M PXA_SDH_DTR_104M 0 0 0 0 0>,
<PXA_MMC_TIMING_MMC_HS200 PXA_SDH_DTR_156M PXA_SDH_DTR_156M 0 0 3 0 0>,
<PXA_MMC_TIMING_MAX PXA_SDH_DTR_PS_NONE PXA_SDH_DTR_104M 0 0 0 0 0>;
marvell,sdh-tuning-win-limit = <100>;
marvell,sdh-dvfs-levels = <1 7>; /* tuning from dvfs level 1 to 7 */
marvell,sdh-tuning-mode = <PXA_SDH_TUNING_DVFS>;
status = "okay";
};
/* SD card */
sdh0: sdh@d4280000 {
pinctrl-names = "default", "fast";
pinctrl-0 = <&sdh0_pmx_func1 &sdh0_pmx_func2 &sdh0_pmx_func3>;
pinctrl-1 = <&sdh0_pmx_func1 &sdh0_pmx_func2_fast &sdh0_pmx_func3_fast>;
vqmmc-supply = <&ldo6>;
vmmc-supply = <&ldo14>;
cd-gpios = <&gpio 92 0>;
cd-inverted;
bus-width = <4>;
wp-inverted;
marvell,sdh-pm-runtime-en;
marvell,sdh-host-caps-disable = <(MMC_CAP_UHS_SDR104)>;
marvell,sdh-quirks = <(
SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
SDHCI_QUIRK_BROKEN_CARD_DETECTION
)>;
/* as HW design, only SD Card's host has AIB_MMC register */
marvell,sdh-quirks2 = <(
SDHCI_QUIRK2_HOST_NO_CMD23 |
SDHCI_QUIRK2_SET_AIB_MMC |
SDHCI_QUIRK2_TUNING_ADMA_BROKEN |
SDHCI_QUIRK2_TIMEOUT_SHORT |
SDHCI_QUIRK2_DMA_CLOCK_FORCE_ON
)>;
marvell,sdh-host-caps2 = <(
MMC_CAP2_SKIP_MMC |
MMC_CAP2_SKIP_SDIO
)>;
marvell,sdh-flags = <(
PXA_FLAG_NEW_RX_CFG_REG |
PXA_FLAG_TX_SEL_BUS_CLK |
PXA_FLAG_ENABLE_CLOCK_GATING
)>;
/* prop "sdh-dtr-data": <timing preset_rate src_rate tx_delay rx_delay sdclk_sel0 sdclk_sel1 fakeclk_en> */
marvell,sdh-dtr-data = <PXA_MMC_TIMING_LEGACY PXA_SDH_DTR_26M PXA_SDH_DTR_52M 0 0 0 0 0>,
<PXA_MMC_TIMING_SD_HS PXA_SDH_DTR_52M PXA_SDH_DTR_104M 0 0 0 0 0>,
<PXA_MMC_TIMING_UHS_DDR50 PXA_SDH_DTR_52M PXA_SDH_DTR_104M 0 0 0 0 0>,
<PXA_MMC_TIMING_UHS_SDR104 PXA_SDH_DTR_208M PXA_SDH_DTR_208M 0 0 3 0 0>,
<PXA_MMC_TIMING_MAX PXA_SDH_DTR_PS_NONE PXA_SDH_DTR_104M 0 0 0 0 0>;
marvell,sdh-tuning-win-limit = <120>;
marvell,sdh-dvfs-levels = <1 7>; /* tuning from dvfs level 1 to 7 */
marvell,sdh-tuning-mode = <PXA_SDH_TUNING_DVFS>;
status = "okay";
};
/* SDIO */
sdh1: sdh@d4280800 {
pinctrl-names = "default", "fast", "sleep";
pinctrl-0 = <&sdh1_pmx_func1 &sdh1_pmx_func2 &sdh1_pmx_func3 &sdh1_pmx_func4>;
pinctrl-1 = <&sdh1_pmx_func1_fast &sdh1_pmx_func2_fast &sdh1_pmx_func3 &sdh1_pmx_func4>;
pinctrl-2 = <&sdh1_pmx_edge_wakeup>;
bus-width = <4>;
marvell,sdh-pm-runtime-en;
marvell,sdh-host-caps-disable = <(MMC_CAP_UHS_SDR50)>;
marvell,sdh-quirks = <(SDHCI_QUIRK_BROKEN_CARD_DETECTION)>;
marvell,sdh-quirks2 = <(SDHCI_QUIRK2_HOLDSUSPEND_AFTER_REQUEST |
SDHCI_QUIRK2_FAKE_SDIO_IRQ_IN_UHS |
SDHCI_QUIRK2_TUNING_ADMA_BROKEN |
SDHCI_QUIRK2_TIMEOUT_SHORT
)>;
marvell,sdh-pm-caps = <(MMC_PM_KEEP_POWER)>;
marvell,sdh-host-caps2 = <(
MMC_CAP2_NO_VOLTAGE_SWITCH |
MMC_CAP2_SKIP_MMC |
MMC_CAP2_SKIP_SD
)>;
marvell,sdh-flags = <(
PXA_FLAG_NEW_RX_CFG_REG |
PXA_FLAG_WAKEUP_HOST |
PXA_FLAG_TX_SEL_BUS_CLK |
PXA_FLAG_EN_PM_RUNTIME |
PXA_FLAG_DISABLE_PROBE_CDSCAN
)>;
/* prop "sdh-dtr-data": <timing preset_rate src_rate tx_delay rx_delay sdclk_sel0 sdclk_sel1 fakeclk_en> */
marvell,sdh-dtr-data = <PXA_MMC_TIMING_LEGACY PXA_SDH_DTR_26M PXA_SDH_DTR_52M 0 0 0 0 0>,
<PXA_MMC_TIMING_SD_HS PXA_SDH_DTR_45M PXA_SDH_DTR_89M 0 0 0 0 0>,
<PXA_MMC_TIMING_UHS_DDR50 PXA_SDH_DTR_52M PXA_SDH_DTR_104M 0 0 0 0 0>,
<PXA_MMC_TIMING_UHS_SDR50 PXA_SDH_DTR_104M PXA_SDH_DTR_104M 0 0 0 0 0>,
<PXA_MMC_TIMING_UHS_SDR104 PXA_SDH_DTR_156M PXA_SDH_DTR_156M 0 0 3 0 0>,
<PXA_MMC_TIMING_MAX PXA_SDH_DTR_PS_NONE PXA_SDH_DTR_89M 0 0 0 0 0>;
marvell,sdh-tuning-win-limit = <120>;
marvell,sdh-dvfs-levels = <1 7>; /* tuning from dvfs level 1 to 7 */
marvell,sdh-tuning-mode = <PXA_SDH_TUNING_DVFS>;
status = "okay";
};
};
apb@d4000000 {
pdma0: pdma@d4000000 {
status = "okay";
};
timer0: timer@d4014000 {
status = "disabled";
};
timer1: timer@d4016000 {
status = "disabled";
};
edgewakeup: edgewakeup@d4019800 {
status = "okay";
};
uart0: uart@d4017000 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&uart0_pmx_func1 &uart0_pmx_func2>;
pinctrl-1 = <&uart0_pmx_func1_sleep &uart0_pmx_func2>;
edge-wakeup-gpio = <47>; /* GPIO47: UART rx pin */
};
thermal: thermal@d4013300 {
/*
One line indicate for one cooling state
first column for cpufreq constraint,
second column for hotplug constraint.
example:
core-p0 = <1 0
3 0>;
means: when temp get higher, apply 4 * 1.5G -> 4 * 1.2G
when temp get more higher, apply 4 * 1.2G -> 4 * 0.8G
From SV model, supported cooling state is as below:
<1 0 <0 2 <1 0 <0 2
3 0> 3 0> 2 2> 2 2>
*/
core-p0 = <1 0
3 0>;
/*
thermal safe 624M *4 or 800M * 2, thus supported
<4 0> <3 2>
*/
thermal_safe-p0 = <4 0>;
status = "okay";
};
pmx: pinmux@d401e000 {
/* pin base, nr pins & gpio function */
pinctrl-single,gpio-range = <
/*
* GPIO number is hardcoded for range at here.
* In gpio chip, GPIO number is not hardcoded for range.
* Since one gpio pin may be routed to multiple pins,
* define these gpio range in pxa910-dkb.dts not pxa910.dtsi.
*/
&range 55 55 0 /* GPIO0 ~ GPIO54 */
&range 110 32 0 /* GPIO67 ~ GPIO98 */
&range 52 1 0 /* GPIO124 */
&range 6 1 0 /* GPIO65 */
>;
pinctrl-names = "default";
pinctrl-0 = <&mfp_pins_group_0 &mfp_pins_group_1>;
/*
* these unused pins have been pulled down external
* We can set them as PULL_FLOAT
*
* But in fact, these registers can be removed in the
* future, considering the cost down
*
* So we just set them as PULL_DOWN here
* (Suitable for external PULL_DOWN and FLOATING)
*
* after remove external registers, no change is need
*/
mfp_pins_group_0: mfp_pins_group_0 {
pinctrl-single,pins = <
/* DF_IO8 AF0 */
DF_IO13 AF0
DF_IO15 AF0
>;
DS_MEDIUM;PULL_DOWN;EDGE_NONE;LPM_NONE;
};
/*
* these unused pins have been pulled up external
* We can set them as PULL_FLOAT
*
* But in fact, these registers can be removed in the
* future, considering the cost down *
*
* So we just set them as PULL_UP here
* (Suitable for external PULL_UP and FLOATING)
*
* after remove external registers, no change is need
*/
mfp_pins_group_1: mfp_pins_group_1 {
pinctrl-single,pins = <
DF_IO14 AF0
DF_IO8 AF1 /* GPIO100 */
GPIO0 AF0
GPIO1 AF0
GPIO2 AF0
GPIO3 AF0
>;
DS_MEDIUM;PULL_UP;EDGE_NONE;LPM_NONE;
};
uart0_pmx_func1: uart0_pmx_func1 {
pinctrl-single,pins = <
GPIO47 AF6
>;
MFP_DEFAULT;
};
uart0_pmx_func2: uart0_pmx_func2 {
pinctrl-single,pins = <
GPIO48 AF6
>;
MFP_DEFAULT;
};
uart0_pmx_func1_sleep: uart0_pmx_func1_sleep {
pinctrl-single,pins = <
GPIO47 AF6
>;
DS_MEDIUM;PULL_NONE;EDGE_BOTH;LPM_NONE;
};
keypad_in_func: keypad_in_func {
pinctrl-single,pins = <
GPIO16 AF1 /* GPIO016_KP_DKIN1 */
GPIO17 AF1 /* GPIO017_KP_DKIN2 */
>;
DS_MEDIUM;PULL_UP;EDGE_NONE;LPM_DRIVE_HIGH;
};
/* MFP_DEFAULT */
sdh0_pmx_func1: sdh0_pmx_func1 {
pinctrl-single,pins = <
MMC1_DAT7 AF1
MMC1_DAT6 AF1
MMC1_DAT5 AF1
MMC1_DAT4 AF1
MMC1_WP AF1
MMC1_CD AF1 /* Above pins not used by sdh1, configured as GPIO */
GPIO92 AF0 /* GPIO92, used for sd card detect */
>;
MFP_DEFAULT;
};
/* no pull, no LPM */
sdh0_pmx_func2: sdh0_pmx_func2 {
pinctrl-single,pins = <
MMC1_DAT3 AF0
MMC1_DAT2 AF0
MMC1_DAT1 AF0
MMC1_DAT0 AF0
MMC1_CMD AF0
>;
MFP_DEFAULT;
};
/* MFP_LPM_DRIVE_LOW */
sdh0_pmx_func3: sdh0_pmx_func3 {
pinctrl-single,pins = <
MMC1_CLK AF0
>;
MFP_LPM_DRIVE_LOW;
};
/* ds fast, no pull, no LPM */
sdh0_pmx_func2_fast: sdh0_pmx_func2_fast {
pinctrl-single,pins = <
MMC1_DAT3 AF0
MMC1_DAT2 AF0
MMC1_DAT1 AF0
MMC1_DAT0 AF0
MMC1_CMD AF0
>;
DS_FAST;PULL_NONE;EDGE_NONE;LPM_NONE;
};
/* ds fast, LPM_DRIVE_LOW */
sdh0_pmx_func3_fast: sdh0_pmx_func3_fast {
pinctrl-single,pins = <
MMC1_CLK AF0
>;
DS_FAST;PULL_NONE;EDGE_NONE;LPM_DRIVE_LOW;
};
sdh1_pmx_func1_fast: sdh1_pmx_func1_fast {
pinctrl-single,pins = <
GPIO37 AF1
GPIO38 AF1
GPIO39 AF1
GPIO40 AF1
GPIO41 AF1
>;
DS_FAST;PULL_NONE;EDGE_NONE;LPM_NONE;
};
sdh1_pmx_func2_fast: sdh1_pmx_func2_fast {
pinctrl-single,pins = <
GPIO42 AF1
>;
DS_FAST;PULL_NONE;EDGE_NONE;LPM_DRIVE_LOW;
};
sdh1_pmx_func1: sdh1_pmx_func1 {
pinctrl-single,pins = <
GPIO37 AF1
GPIO38 AF1
GPIO39 AF1
GPIO40 AF1
GPIO41 AF1
>;
MFP_DEFAULT;
};
sdh1_pmx_func2: sdh1_pmx_func2 {
pinctrl-single,pins = <
GPIO42 AF1
>;
DS_SLOW0;PULL_NONE;EDGE_NONE;LPM_DRIVE_LOW;
};
sdh1_pmx_func3: sdh1_pmx_func3 {
pinctrl-single,pins = <
GPIO7 AF0
>;
DS_MEDIUM;PULL_FLOAT;EDGE_NONE;LPM_NONE;
};
sdh1_pmx_func4: sdh1_pmx_func4 {
pinctrl-single,pins = <
GPIO8 AF0
GPIO5 AF0
>;
DS_MEDIUM;PULL_DOWN;EDGE_NONE;LPM_NONE;
};
sdh1_pmx_edge_wakeup: sdh1_pmx_edge_wakeup {
pinctrl-single,pins = <
GPIO39 AF1
>;
DS_MEDIUM;PULL_NONE;EDGE_BOTH;LPM_NONE;
};
/* no pull, no LPM */
sdh2_pmx_func1: sdh2_pmx_func1 {
pinctrl-single,pins = <
ND_IO7 AF1
ND_IO6 AF1
ND_IO5 AF1
ND_IO4 AF1
ND_IO3 AF1
ND_IO2 AF1
ND_IO1 AF1
ND_IO0 AF1
ND_CLE_SM_OEN AF1
>;
MFP_DEFAULT;
};
/* MFP_LPM_DRIVE_LOW */
sdh2_pmx_func2: sdh2_pmx_func2 {
pinctrl-single,pins = <
SM_SCLK AF1
>;
MFP_LPM_DRIVE_LOW;
};
/* ds fast, no pull, no LPM */
sdh2_pmx_func1_fast: sdh2_pmx_func1_fast {
pinctrl-single,pins = <
ND_IO7 AF1
ND_IO6 AF1
ND_IO5 AF1
ND_IO4 AF1
ND_IO3 AF1
ND_IO2 AF1
ND_IO1 AF1
ND_IO0 AF1
ND_CLE_SM_OEN AF1
>;
DS_FAST;PULL_NONE;EDGE_NONE;LPM_NONE;
};
/* ds fast, LPM_DRIVE_LOW */
sdh2_pmx_func2_fast: sdh2_pmx_func2_fast {
pinctrl-single,pins = <
SM_SCLK AF1
>;
DS_FAST;PULL_NONE;EDGE_NONE;LPM_DRIVE_LOW;
};
spi0_pmx_func: spi0_pmx_func {
pinctrl-single,pins = <
GPIO33 AF2 /* GPIO33 SSP0_CLK */
GPIO34 AF2 /* GPIO34 SSP0_FRM */
GPIO35 AF2 /* GPIO35 SSP0_RX */
GPIO36 AF2 /* GPIO36 SSP0_TX */
>;
MFP_DEFAULT;
};
spi2_pmx_func: spi2_pmx_func {
pinctrl-single,pins = <
DF_IO9 AF2 /* GPIO66 SSP2_CLK */
DF_IO10 AF1 /* GPIO65 SSP2_FRM */
DF_IO11 AF2 /* GPIO64 SSP2_TX */
DF_IO12 AF2 /* GPIO63 SSP2_RX */
>;
MFP_DEFAULT;
};
sspa0_gpio: sspa0_gpio {
pinctrl-single,pins = <
GPIO21 AF0
GPIO22 AF0
GPIO23 AF0
GPIO24 AF0
>;
DS_MEDIUM;PULL_NONE;EDGE_NONE;LPM_FLOAT;
};
sspa0_func: sspa0_func {
pinctrl-single,pins = <
GPIO21 AF7
GPIO22 AF7
GPIO23 AF7
GPIO24 AF7
>;
DS_MEDIUM;PULL_NONE;EDGE_NONE;LPM_NONE;
};
twsi0_pmx_func: twsi0_pmx_func {
pinctrl-single,pins = <
GPIO53 AF2
GPIO54 AF2
>;
MFP_LPM_FLOAT;
};
twsi0_pmx_gpio: twsi0_pmx_gpio {
pinctrl-single,pins = <
GPIO53 AF0
GPIO54 AF0
>;
MFP_LPM_FLOAT;
};
twsi1_pmx_func: twsi1_pmx_func {
/* gpio87/88: AF5 */
pinctrl-single,pins = <
GPIO87 AF5
GPIO88 AF5
>;
MFP_LPM_FLOAT;
};
twsi1_pmx_gpio: twsi1_pmx_gpio {
pinctrl-single,pins = <
GPIO87 AF0
GPIO88 AF0
>;
MFP_LPM_FLOAT;
};
twsi3_pmx_func: twsi3_pmx_func {
/* gpio73/74: AF5 */
pinctrl-single,pins = <
GPIO73 AF5
GPIO74 AF5
>;
MFP_LPM_FLOAT;
};
twsi3_pmx_gpio: twsi3_pmx_gpio {
pinctrl-single,pins = <
GPIO73 AF0
GPIO74 AF0
>;
MFP_LPM_FLOAT;
};
touch_pins: touch_pins {
pinctrl-single,pins = <
GPIO72 0x0
GPIO75 0x0
>;
MFP_LPM_FLOAT;
};
gnss_pmx_def: gnss_pmx_def {
pinctrl-single,pins = <
GPIO81 AF0
GPIO82 AF0
GPIO83 AF0
GPIO84 AF0
GPIO85 AF0
>;
MFP_LPM_PULL_DW;
};
gnss_pmx_power_on: gnss_pmx_power_on {
pinctrl-single,pins = <
GPIO81 AF6
GPIO82 AF6
GPIO83 AF6
GPIO84 AF6
GPIO85 AF6
>;
MFP_DEFAULT;
};
twsi3_pmx_senhb_def: twsi3_pmx_senhb_def {
pinctrl-single,pins = <
GPIO73 AF7
GPIO74 AF7
>;
MFP_LPM_FLOAT;
};
twsi3_pmx_senhb: twsi3_pmx_senhb {
pinctrl-single,pins = <
GPIO73 AF7
GPIO74 AF7
>;
MFP_DEFAULT;
};
senhb_irq_pins_def: senhb_irq_pins_def {
pinctrl-single,pins = <
GPIO11 AF0
GPIO91 AF3
>;
MFP_DEFAULT;
};
gpio10_pull_up: gpio10_pull_up {
pinctrl-single,pins = <
GPIO10 AF0
>;
MFP_LPM_PULL_UP;
};
dvc_pmx_func: dvc_pmx_func {
pinctrl-single,pins = <
GPIO93 AF5
GPIO94 AF5
GPIO95 AF5
>;
MFP_DEFAULT;
};
ccic1_pmx_func1: ccic1_pmx_func1 {
pinctrl-single,pins = <
GPIO77 AF1
GPIO67 AF0
GPIO68 AF0
>;
MFP_DEFAULT;
};
ccic1_pmx_func3: ccic1_pmx_func3 {
pinctrl-single,pins = <
GPIO77 AF1
GPIO53 AF7
GPIO54 AF7
/* GPIO67 AF5
GPIO68 AF5 */
>;
MFP_LPM_FLOAT;
};
ccic1_pmx_func2: ccic1_pmx_func2 {
pinctrl-single,pins = <
GPIO77 AF1
GPIO53 AF2
GPIO54 AF2
GPIO67 AF0
GPIO68 AF0
>;
MFP_LPM_FLOAT;
};
ccic2_pmx_func1: ccic2_pmx_func1 {
pinctrl-single,pins = <
GPIO69 AF0
GPIO70 AF0
>;
MFP_DEFAULT;
};
ccic2_pmx_func2: ccic2_pmx_func2 {
pinctrl-single,pins = <
/*
GPIO51 AF7
GPIO52 AF7
*/
GPIO69 AF0
GPIO70 AF0
>;
MFP_LPM_FLOAT;
};
ccic2_pmx_func3: cic2_pmx_func3 {
pinctrl-single,pins = <
GPIO69 AF0
GPIO70 AF0
>;
MFP_DEFAULT;
};
};
coresight: coresight@d4100000 {
status = "okay";
};
twsi0: i2c@d4011000 {
pinctrl-names = "default","gpio";
pinctrl-0 = <&twsi0_pmx_func>;
pinctrl-1 = <&twsi0_pmx_gpio>;
i2c-gpio = <&gpio 53 0 &gpio 54 0>;
status = "okay";
};
twsi1: i2c@d4010800 {
pinctrl-names = "default","gpio";
pinctrl-0 = <&twsi1_pmx_func>;
pinctrl-1 = <&twsi1_pmx_gpio>;
i2c-gpio = <&gpio 87 0 &gpio 88 0>;
status = "okay";
touch1: s3202@720p {
compatible = "synaptics,s3202-touch";
pinctrl-names = "default"; pinctrl-0 = <&touch_pins>;
reg = <0x22>;
interrupt-parent = <&gpio>;
interrupts = <72 0x1>;
/* IRQF_ONESHOT | IRQF_TRIGGER_FALLING */
synaptics,irq-flags = <0x2002>;
synaptics,irq-gpios = <&gpio 72 0>;
synaptics,reset-gpios = <&gpio 75 0>;
synaptics,sensor_res_x = <720>;
synaptics,sensor_res_y = <1280>;
synaptics,sensor_max_x = <798>;
synaptics,sensor_max_y = <1392>;
synaptics,sensor_margin_x = <39>;
synaptics,sensor_margin_y = <0>;
avdd-supply = <&ldo11>;
status = "disabled";
};
touch2: msg2133@26 {
compatible = "focaltech,msg2133";
pinctrl-names = "default"; pinctrl-0 = <&touch_pins>;
reg = <0x26>;
interrupt-parent = <&gpio>;
interrupts = <72 0x1>;
focaltech,abs-x-max = <480>;
focaltech,abs-y-max = <854>;
focaltech,irq-gpios = <&gpio 72 0>;
focaltech,reset-gpios = <&gpio 75 0>;
focaltech,v_tsp-supply = <&ldo11>;
status = "disabled";
};
touch3: 88ms100@720p {
compatible = "marvell,88ms100-touch";
pinctrl-names = "default"; pinctrl-0 = <&touch_pins>;
reg = <0x18>;
interrupt-parent = <&gpio>;
interrupts = <72 0x1>;
irq-gpios = <&gpio 72 0>;
reset-gpios = <&gpio 75 0>;
marvell,max-height = <1280>;
marvell,max-width = <720>;
avdd-supply = <&ldo11>;
status = "disabled";
};
touch4: mstar@26 {
compatible = "mstar,msg2238";
pinctrl-names = "default";
pinctrl-0 = <&touch_pins>;
reg = <0x26>;
interrupt-parent = <&gpio>;
interrupts = <72 0x1>;
mstar,abs-x-max = <720>;
mstar,abs-y-max = <1280>;
mstar,irq-gpios = <&gpio 72 0>;
mstar,reset-gpios = <&gpio 75 0>;
mstar,v_tsp-supply = <&ldo11>;
status = "disabled";
};
};
twsi2: i2c@d4037000 {
status = "okay";
pmic0: 88pm886@30 {
reg = <0x30>;
interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>;
status = "disabled";
dvc {
pinctrl-names = "default";
pinctrl-0 = <&dvc_pmx_func>;
};
};
pmic2: 88pm860@38 {
compatible = "marvell,88pm860";
reg = <0x38>;
marvell,pmic-type = <1>;
status = "disabled";
/* no codec_int currently, comment out now */
/*
interrupt-parent = <&gpio>;
interrupts = <124 0x1>;
marvell,88pm805-irq-write-clear;
*/
pm860_codec: pm860_codec {
compatible = "marvell,88pm860-codec";
#dailink-cells = <1>;
};
};
};
twsi3: i2c@d4013800 {
pinctrl-names = "default", "gpio";
pinctrl-0 = <&twsi3_pmx_func>;
pinctrl-1 = <&twsi3_pmx_gpio>;
i2c-gpio = <&gpio 73 0 &gpio 74 0>;
status = "okay";
sensor1: apds9930@39 {
compatible = "avago,apds9930";
reg = <0x39>;
interrupt-parent = <&gpio>;
interrupts = <20 0x1>;
irq-gpios = <&gpio 20 0>;
avdd-supply = <&ldo4>;
status = "disabled";
};
sensor2: bmi160@68 {
compatible = "bosch-sensortec,bmi160";
reg = <0x68>;
interrupt-parent = <&gpio>;
interrupts = <91 0x1>;
irq-gpios = <&gpio 91 0>;
avdd-supply = <&ldo4>;
bmi160-place = <2>;
status = "disabled";
};
sensor3: bme280@76 {
compatible = "bosch-sensortec,bme280";
reg = <0x76>;
avdd-supply = <&ldo4>;
status = "disabled";
};
sensor4: icm20628@69 {
compatible = "invensense,icm20628";
reg = <0x69>;
interrupt-parent = <&gpio>;
interrupts = <91 0x1>;
inven,irq-gpios = <&gpio 91 0x00>;
avdd-supply = <&ldo4>;
axis_map_x = <1>;
negate_x = <0>;
axis_map_y = <0>;
negate_y = <1>;
axis_map_z = <2>;
negate_z = <1>;
inven,secondary_axis_map_x = <1>;
inven,secondary_negate_x = <0>;
inven,secondary_axis_map_y = <0>;
inven,secondary_negate_y = <0>;
inven,secondary_axis_map_z = <2>;
inven,secondary_negate_z = <1>;
inven,secondary_type = "compass";
inven,secondary_name = "ak09912";
inven,secondary_reg = <0x0D>;
status = "disabled";
};
sensor5: mxc400x@15 {
compatible = "memsic,mxc400x";
reg = <0x15>;
acdd-supply = <&ldo4>;
status = "disabled";
};
sensor6: mmc3524x@30 {
compatible = "memsic,mmc3524x";
reg = <0x30>;
acdd-supply = <&ldo4>;
status = "disabled";
};
sensor7: ap3426@1E {
compatible = "dyna,ap3426";
reg = <0x1E>;
interrupt-parent = <&gpio>;
interrupts = <20 0x1>;
irq-gpios = <&gpio 20 0>;
avdd-supply = <&ldo4>;
status = "disabled";
};
};
spi_0: ssp@d401b000 {
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&spi0_pmx_func>;
#address-cells = <1>;
#size-cells = <0>;
spidev {
spi-max-frequency = <52000000>;
reg = <0>;
compatible = "rohm,dh2228fv";
status = "okay";
};
};
spi_2: ssp@d401c000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi2_pmx_func>;
#address-cells = <1>;
#size-cells = <0>;
flash: m25p80@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "sst,sst25wf040b";
spi-max-frequency = <40000000>;
reg = <0>;
};
};
/* SSPA port 0 */
sspa0: sspa@d128dc00 {
pinctrl-names = "default";
pinctrl-0 = <&sspa0_func>;
playback_period_bytes = <4096>;
playback_buffer_bytes = <16384>;
capture_period_bytes = <4096>;
capture_buffer_bytes = <12288>;
burst_size = <4>;
#dailink-cells = <1>;
status = "okay";
};
map: map@d1200000 {
marvell,b0_fix;
marvell,apll = <1>;
lpm-qos = <PM_QOS_CPUIDLE_BLOCK_UDR_VCTCXO>;
status = "okay";
mmp_map_codec: mmp_map_codec {
compatible = "marvell,mmp-map-codec";
#dailink-cells = <1>;
};
mmp_map_be: mmp_map_be {
compatible = "marvell,mmp-map-be";
pinctrl-names = "default";
pinctrl-0 = <&sspa1_func>;
#dailink-cells = <1>;
};
mmp_map_be_tdm: mmp_map_be_tdm {
compatible = "marvell,mmp-map-be-tdm";
marvell,single-out;
#dailink-cells = <1>;
};
};
acipc: acipc@d401d000 {
status = "okay";
};
seh: seh@d4080000 {
status = "okay";
};
cp-load {
status = "okay";
};
};
/*
* ramoops:
* 256 KB memory starts at 0x8100000
* pstore dump: 2 chunks, total 64 KB, 32 KB each
* console size: 192 KB
* no dump_oops
*/
ramoops {
compatible = "pstore,ramoops";
mem-size = <0x40000>;
mem-address = <0x8100000>;
record-size = <0x8000>;
console-size = <0x30000>;
dump-oops = <0>;
status = "okay";
};
};
mmp_pcm_hostless: mmp_pcm_hostless {
bus_number = <0>;
compatible = "marvell,mmp-pcm-hostless";
#dailink-cells = <1>;
status = "okay";
};
snd_soc_dummy: snd_soc_dummy {
compatible = "snd-soc-dummy";
#dailink-cells = <1>;
status = "okay";
};
sound {
compatible = "marvell,map-card";
map,dapm-route =
"ADC input1", "TDM_MIC1_CAP",
"ADC input2", "TDM_MIC2_CAP",
"ADC input3", "BT_VC_UL",
"TDM_OUT1_PLAYBACK", "out1_hs_en",
"TDM_OUT2_PLAYBACK", "out1_spkr_en",
"BT_VC_DL", "i2s3_bt_vc";
fe_i2s1: fe_i2s1 {
compatible = "marvell,map-dailink-1";
dai-name = "MAP I2S1 audio";
stream-name = "map i2s1";
marvell,cpu-dai = <&sspa0 0>;
marvell,codec-dai = <&mmp_map_codec 4>;
};
fe_i2s3: fe_i2s3 {
compatible = "marvell,map-dailink-2";
dai-name = "MAP I2S2 audio";
stream-name = "map i2s2";
marvell,cpu-dai = <&mmp_pcm_hostless 0>;
marvell,codec-dai = <&mmp_map_codec 2>;
marvell,dai-no-host-mode;
};
fe_i2s4: fe_i2s4 {
compatible = "marvell,map-dailink-7";
dai-name = "MAP I2S3 audio";
stream-name = "map i2s3";
marvell,cpu-dai = <&mmp_pcm_hostless 1>;
marvell,codec-dai = <&mmp_map_codec 3>;
marvell,dai-no-host-mode;
};
fe_i2s5: fe_i2s5 {
compatible = "marvell,map-dailink-2";
dai-name = "MAP I2S5 audio";
stream-name = "map i2s5";
marvell,cpu-dai = <&mmp_pcm_hostless 2>;
marvell,codec-dai = <&mmp_map_codec 5>;
marvell,dai-dynamic;
marvell,dai-no-host-mode;
};
be_i2s1: be_i2s1 {
compatible = "marvell,map-dailink-3";
dai-name = "MAP AUXI2S audio";
stream-name = "BT audio";
marvell,cpu-dai = <&mmp_map_be 1>;
marvell,codec-dai = <&snd_soc_dummy 0>;
marvell,codec-name = "snd-soc-dummy";
marvell,codec-dai-name = "snd-soc-dummy-dai";
marvell,dai-no-pcm;
marvell,dai-fixup = <0>;
};
be_i2s2: be_i2s2 {
compatible = "marvell,map-dailink-6";
dai-name = "MAP TDM hs audio";
stream-name = "codec hs audio";
marvell,cpu-dai = <&mmp_map_be_tdm 1>;
marvell,codec-dai = <&pm860_codec 3>;
marvell,playback-only;
marvell,dai-no-pcm;
marvell,dai-fixup = <1>;
};
be_i2s3: be_i2s3 {
compatible = "marvell,map-dailink-4";
dai-name = "MAP TDM speaker audio";
stream-name = "codec speaker audio";
marvell,cpu-dai = <&mmp_map_be_tdm 2>;
marvell,codec-dai = <&pm860_codec 4>;
marvell,playback-only;
marvell,dai-no-pcm;
marvell,dai-fixup = <1>;
};
be_i2s4: be_i2s4 {
compatible = "marvell,map-dailink-5";
dai-name = "MAP TDM mic1 audio";
stream-name = "codec mic1 audio";
marvell,cpu-dai = <&mmp_map_be_tdm 3>;
marvell,codec-dai = <&pm860_codec 1>;
marvell,capture-only;
marvell,dai-no-pcm;
};
be_i2s5: be_i2s5 {
compatible = "marvell,map-dailink-5";
dai-name = "MAP TDM mic2 audio";
stream-name = "codec mic2 audio";
marvell,cpu-dai = <&mmp_map_be_tdm 4>;
marvell,codec-dai = <&pm860_codec 2>;
marvell,capture-only;
marvell,dai-no-pcm;
};
};
ion {
marvell,ion-nr = <2>;
status = "okay";
marvell,ion-iommu = <1>;
marvell,power-domain = <&pd_smmu>;
heap1 {
marvell,ion-name = "carveout_heap";
marvell,ion-type = <2>;
marvell,ion-id = <2>;
marvell,ion-base = <0>;
marvell,ion-size = <0>;
};
heap2 {
marvell,ion-name = "system_heap";
marvell,ion-type = <0>;
marvell,ion-id = <0>;
};
};
sd8xxx-wlan {
drv_mode = <0x5>;
cfg80211_wext = <0xc>;
sta_name = "wlan";
wfd_name = "p2p";
max_vir_bss = <1>;
drvdbg = <0x80007>;
dev_cap_mask = <0xffffcfff>;
init_cfg = "mrvl/wifi_init_cfg.conf";
txpwrlimit_cfg = "mrvl/txpwrlimit_cfg.bin";
cal_data_cfg = "mrvl/WlanCalData_ext.conf";
reg_alpha2 = "US";
p2p_enh = <1>;
};
sd8xxx-bt {
init_cfg = "mrvl/bt_init_cfg.conf";
};
mmp_m3_1: apsenhb {
compatible = "marvell,mmp-m3";
pmicver = <2>;
/* 950000 for CM3 on, 700000 for CM3 off */
vccmain = <950000 700000>;
vm3pwr-supply = <&ldo3>;
antpwr-supply = <&ldo4>;
vccmain-supply = <&buck1slp>;
pinctrl-names = "default", "poweron";
pinctrl-0 = <&gnss_pmx_def &gpio10_pull_up>;
pinctrl-1 = <&gnss_pmx_power_on>;
status = "okay";
};
mmp_m3_2: cm3senhb {
compatible = "marvell,mmp-m3";
pmicver = <2>;
/* 950000 for CM3 on, 700000 for CM3 off */
vccmain = <950000 700000>;
vm3pwr-supply = <&ldo3>;
antpwr-supply = <&ldo4>;
senpwr-supply = <&ldo4>;
vccmain-supply = <&buck1slp>;
pinctrl-names = "default", "poweron";
pinctrl-0 = <&gnss_pmx_def &twsi3_pmx_senhb_def &senhb_irq_pins_def
&gpio10_pull_up>;
pinctrl-1 = <&gnss_pmx_power_on &twsi3_pmx_senhb>;
status = "okay";
};
tzdd {
status = "okay";
};
dip {
compatible = "marvell,simple-dip";
clocks = <&soc_clocks PXA1U88_CLK_CPU>,
<&soc_clocks PXA1U88_CLK_DDR>;
clock-names = "cpu", "ddr";
};
iml: iml@7ffffe0{
status = "okay";
};
mmplog {
status = "okay";
mmplog-base = <0x08000000>;
mmplog-size = <0x100000>;
};
};