linux-stable/arch/arm/boot/dts/motorola-cpcap-mapphone.dtsi
Tony Lindgren 0df12a01f4 ARM: dts: omap4-droid4: Fix spi configuration and increase rate
We can currently sometimes get "RXS timed out" errors and "EOT timed out"
errors with spi transfers.

These errors can be made easy to reproduce by reading the cpcap iio
values in a loop while keeping the CPUs busy by also reading /dev/urandom.

The "RXS timed out" errors we can fix by adding spi-cpol and spi-cpha
in addition to the spi-cs-high property we already have.

The "EOT timed out" errors we can fix by increasing the spi clock rate
to 9.6 MHz. Looks similar MC13783 PMIC says it works at spi clock rates
up to 20 MHz, so let's assume we can pick any rate up to 20 MHz also
for cpcap.

Cc: maemo-leste@lists.dyne.org
Cc: Merlijn Wajer <merlijn@wizzup.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2020-06-02 09:26:25 -07:00

275 lines
6.5 KiB
Text

// SPDX-License-Identifier: GPL-2.0-only
/*
* Common CPCAP configuration used on Motorola phones
*/
&mcspi1 {
cpcap: pmic@0 {
compatible = "motorola,cpcap", "st,6556002";
reg = <0>; /* cs0 */
interrupt-parent = <&gpio1>;
interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
interrupt-controller;
#interrupt-cells = <2>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <9600000>;
spi-cs-high;
spi-cpol;
spi-cpha;
cpcap_adc: adc {
compatible = "motorola,mapphone-cpcap-adc";
interrupts-extended = <&cpcap 8 0>;
interrupt-names = "adcdone";
#io-channel-cells = <1>;
};
cpcap_battery: battery {
compatible = "motorola,cpcap-battery";
interrupts-extended = <
&cpcap 6 0 &cpcap 5 0 &cpcap 3 0
&cpcap 20 0 &cpcap 54 0 &cpcap 57 0
>;
interrupt-names =
"eol", "lowbph", "lowbpl",
"chrgcurr1", "battdetb",
"cccal";
io-channels = <&cpcap_adc 0 &cpcap_adc 1
&cpcap_adc 5 &cpcap_adc 6>;
io-channel-names = "battdetb", "battp",
"chg_isense", "batti";
power-supplies = <&cpcap_charger>;
};
cpcap_charger: charger {
compatible = "motorola,mapphone-cpcap-charger";
interrupts-extended = <
&cpcap 13 0 &cpcap 12 0 &cpcap 29 0 &cpcap 28 0
&cpcap 22 0 &cpcap 21 0 &cpcap 20 0 &cpcap 19 0
&cpcap 54 0
>;
interrupt-names =
"chrg_det", "rvrs_chrg", "chrg_se1b", "se0conn",
"rvrs_mode", "chrgcurr2", "chrgcurr1", "vbusvld",
"battdetb";
mode-gpios = <&gpio3 29 GPIO_ACTIVE_LOW
&gpio3 23 GPIO_ACTIVE_LOW>;
io-channels = <&cpcap_adc 0 &cpcap_adc 1
&cpcap_adc 2 &cpcap_adc 5
&cpcap_adc 6>;
io-channel-names = "battdetb", "battp",
"vbus", "chg_isense",
"batti";
};
cpcap_regulator: regulator {
compatible = "motorola,mapphone-cpcap-regulator";
cpcap_regulators: regulators {
};
};
cpcap_audio: audio-codec {
#sound-dai-cells = <1>;
port@0 {
cpcap_audio_codec0: endpoint {
};
};
port@1 {
cpcap_audio_codec1: endpoint {
};
};
};
cpcap_rtc: rtc {
compatible = "motorola,cpcap-rtc";
interrupt-parent = <&cpcap>;
interrupts = <39 IRQ_TYPE_NONE>, <26 IRQ_TYPE_NONE>;
};
power_button: button {
compatible = "motorola,cpcap-pwrbutton";
interrupts = <23 IRQ_TYPE_NONE>;
};
cpcap_usb2_phy: phy {
compatible = "motorola,mapphone-cpcap-usb-phy";
pinctrl-0 = <&usb_gpio_mux_sel1 &usb_gpio_mux_sel2>;
pinctrl-1 = <&usb_ulpi_pins>;
pinctrl-2 = <&usb_utmi_pins>;
pinctrl-3 = <&uart3_pins>;
pinctrl-names = "default", "ulpi", "utmi", "uart";
#phy-cells = <0>;
interrupts-extended = <
&cpcap 15 0 &cpcap 14 0 &cpcap 28 0 &cpcap 19 0
&cpcap 18 0 &cpcap 17 0 &cpcap 16 0 &cpcap 49 0
&cpcap 48 0
>;
interrupt-names =
"id_ground", "id_float", "se0conn", "vbusvld",
"sessvld", "sessend", "se1", "dm", "dp";
mode-gpios = <&gpio2 28 GPIO_ACTIVE_HIGH
&gpio1 0 GPIO_ACTIVE_HIGH>;
io-channels = <&cpcap_adc 2>, <&cpcap_adc 7>;
io-channel-names = "vbus", "id";
vusb-supply = <&vusb>;
};
led_red: led-red {
compatible = "motorola,cpcap-led-red";
vdd-supply = <&sw5>;
label = "status-led:red";
};
led_green: led-green {
compatible = "motorola,cpcap-led-green";
vdd-supply = <&sw5>;
label = "status-led:green";
};
led_blue: led-blue {
compatible = "motorola,cpcap-led-blue";
vdd-supply = <&sw5>;
label = "status-led:blue";
};
led_adl: led-adl {
compatible = "motorola,cpcap-led-adl";
vdd-supply = <&sw5>;
label = "button-backlight";
};
led_cp: led-cp {
compatible = "motorola,cpcap-led-cp";
vdd-supply = <&sw5>;
label = "shift-key-light";
};
};
};
&cpcap_regulators {
sw5: SW5 {
regulator-min-microvolt = <5050000>;
regulator-max-microvolt = <5050000>;
regulator-enable-ramp-delay = <50000>;
regulator-boot-on;
};
vcam: VCAM {
regulator-min-microvolt = <2900000>;
regulator-max-microvolt = <2900000>;
regulator-enable-ramp-delay = <1000>;
};
/* Used by DSS and is the "zerov_regulator" trigger for SoC off mode */
vcsi: VCSI {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-enable-ramp-delay = <1000>;
regulator-always-on;
};
vdac: VDAC {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-enable-ramp-delay = <1000>;
};
vdig: VDIG {
regulator-min-microvolt = <1875000>;
regulator-max-microvolt = <1875000>;
regulator-enable-ramp-delay = <1000>;
};
vfuse: VFUSE {
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <3150000>;
regulator-enable-ramp-delay = <1000>;
};
vhvio: VHVIO {
regulator-min-microvolt = <2775000>;
regulator-max-microvolt = <2775000>;
regulator-enable-ramp-delay = <1000>;
regulator-always-on;
};
/* Used by eMMC at mmc2 */
vsdio: VSDIO {
regulator-min-microvolt = <2900000>;
regulator-max-microvolt = <2900000>;
regulator-enable-ramp-delay = <1000>;
};
vpll: VPLL {
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1800000>;
regulator-enable-ramp-delay = <100>;
};
vrf1: VRF1 {
regulator-min-microvolt = <2775000>;
regulator-max-microvolt = <2775000>;
regulator-enable-ramp-delay = <1000>;
};
vrf2: VRF2 {
regulator-min-microvolt = <2775000>;
regulator-max-microvolt = <2775000>;
regulator-enable-ramp-delay = <1000>;
};
vrfref: VRFREF {
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <2775000>;
regulator-enable-ramp-delay = <100>;
};
vwlan1: VWLAN1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1900000>;
regulator-enable-ramp-delay = <1000>;
};
/* Used by micro-SDIO at mmc1 */
vwlan2: VWLAN2 {
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-enable-ramp-delay = <1000>;
};
vsim: VSIM {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <2900000>;
regulator-enable-ramp-delay = <1000>;
};
vsimcard: VSIMCARD {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <2900000>;
regulator-enable-ramp-delay = <1000>;
};
vvib: VVIB {
regulator-min-microvolt = <1300000>;
regulator-max-microvolt = <3000000>;
regulator-enable-ramp-delay = <500>;
};
vusb: VUSB {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <1000>;
};
vaudio: VAUDIO {
regulator-min-microvolt = <2775000>;
regulator-max-microvolt = <2775000>;
regulator-enable-ramp-delay = <1000>;
regulator-initial-mode = <0x00>; /* NORMAL */
};
};