mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00

The regulator constraints for most MSM8916 devices (except DB410c) were originally taken from Qualcomm's msm-3.10 vendor device tree (for lack of better documentation). Unfortunately it turns out that Qualcomm's voltages are slightly off as well and do not match the voltage constraints applied by the RPM firmware. This means that we sometimes request a specific voltage but the RPM firmware actually applies a much lower or higher voltage. This is particularly critical for pm8916_l11 which is used as SD card VMMC regulator: The SD card can choose a voltage from the current range of 1.8 - 2.95V. If it chooses to run at 1.8V we pretend that this is fine but the RPM firmware will still silently end up configuring 2.95V. This can be easily reproduced with a multimeter or by checking the SPMI hardware registers of the regulator. Fix this by making the voltages match the actual "specified range" in the PM8916 Device Specification which is enforced by the RPM firmware. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> Signed-off-by: Bjorn Andersson <andersson@kernel.org> Link: https://lore.kernel.org/r/20230510-msm8916-regulators-v1-3-54d4960a05fc@gerhold.net
388 lines
7.2 KiB
Text
388 lines
7.2 KiB
Text
// SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
/dts-v1/;
|
|
|
|
#include "msm8916-pm8916.dtsi"
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/leds/common.h>
|
|
|
|
/ {
|
|
model = "Alcatel OneTouch Idol 3 (4.7)";
|
|
compatible = "alcatel,idol347", "qcom,msm8916";
|
|
chassis-type = "handset";
|
|
|
|
aliases {
|
|
serial0 = &blsp1_uart2;
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = "serial0";
|
|
};
|
|
|
|
gpio-keys {
|
|
compatible = "gpio-keys";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&gpio_keys_default>;
|
|
|
|
label = "GPIO Buttons";
|
|
|
|
button-volume-up {
|
|
label = "Volume Up";
|
|
gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
|
|
linux,code = <KEY_VOLUMEUP>;
|
|
};
|
|
};
|
|
|
|
gpio-leds {
|
|
compatible = "gpio-leds";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&gpio_leds_default>;
|
|
|
|
led-0 {
|
|
gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>;
|
|
linux,default-trigger = "torch";
|
|
function = LED_FUNCTION_TORCH;
|
|
};
|
|
};
|
|
|
|
usb_id: usb-id {
|
|
compatible = "linux,extcon-usb-gpio";
|
|
id-gpio = <&msmgpio 69 GPIO_ACTIVE_HIGH>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&usb_id_default>;
|
|
};
|
|
};
|
|
|
|
&blsp1_uart2 {
|
|
status = "okay";
|
|
};
|
|
|
|
&blsp_i2c4 {
|
|
status = "okay";
|
|
|
|
touchscreen@26 {
|
|
compatible = "mstar,msg2638";
|
|
reg = <0x26>;
|
|
interrupt-parent = <&msmgpio>;
|
|
interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
|
|
reset-gpios = <&msmgpio 100 GPIO_ACTIVE_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&ts_int_reset_default>;
|
|
vdd-supply = <&pm8916_l17>;
|
|
vddio-supply = <&pm8916_l5>;
|
|
touchscreen-size-x = <2048>;
|
|
touchscreen-size-y = <2048>;
|
|
};
|
|
};
|
|
|
|
&blsp_i2c5 {
|
|
status = "okay";
|
|
|
|
magnetometer@c {
|
|
compatible = "asahi-kasei,ak09911";
|
|
reg = <0x0c>;
|
|
vdd-supply = <&pm8916_l17>;
|
|
vid-supply = <&pm8916_l6>;
|
|
reset-gpios = <&msmgpio 8 GPIO_ACTIVE_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mag_reset_default>;
|
|
mount-matrix = "0", "1", "0",
|
|
"-1", "0", "0",
|
|
"0", "0", "1";
|
|
};
|
|
|
|
accelerometer@f {
|
|
compatible = "kionix,kxtj21009";
|
|
reg = <0x0f>;
|
|
vdd-supply = <&pm8916_l17>;
|
|
vddio-supply = <&pm8916_l6>;
|
|
interrupt-parent = <&msmgpio>;
|
|
interrupts = <31 IRQ_TYPE_EDGE_RISING>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&accel_int_default>;
|
|
mount-matrix = "-1", "0", "0",
|
|
"0", "1", "0",
|
|
"0", "0", "-1";
|
|
};
|
|
|
|
proximity@48 {
|
|
compatible = "sensortek,stk3310";
|
|
reg = <0x48>;
|
|
interrupt-parent = <&msmgpio>;
|
|
interrupts = <12 IRQ_TYPE_EDGE_FALLING>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&proximity_int_default>;
|
|
};
|
|
|
|
gyroscope@68 {
|
|
compatible = "bosch,bmg160";
|
|
reg = <0x68>;
|
|
vdd-supply = <&pm8916_l17>;
|
|
vddio-supply = <&pm8916_l6>;
|
|
interrupt-parent = <&msmgpio>;
|
|
interrupts = <97 IRQ_TYPE_EDGE_RISING>,
|
|
<98 IRQ_TYPE_EDGE_RISING>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&gyro_int_default>;
|
|
};
|
|
};
|
|
|
|
&blsp_i2c6 {
|
|
status = "okay";
|
|
|
|
led-controller@68 {
|
|
compatible = "si-en,sn3190";
|
|
reg = <0x68>;
|
|
shutdown-gpios = <&msmgpio 89 GPIO_ACTIVE_HIGH>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&led_enable_default &led_shutdown_default>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
led@1 {
|
|
reg = <1>;
|
|
led-max-microamp = <5000>;
|
|
function = LED_FUNCTION_INDICATOR;
|
|
color = <LED_COLOR_ID_WHITE>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&pm8916_resin {
|
|
status = "okay";
|
|
linux,code = <KEY_VOLUMEDOWN>;
|
|
};
|
|
|
|
&pm8916_vib {
|
|
status = "okay";
|
|
};
|
|
|
|
&sdhc_1 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default", "sleep";
|
|
pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
|
|
pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
|
|
};
|
|
|
|
&sdhc_2 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default", "sleep";
|
|
pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
|
|
pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
|
|
|
|
cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
&usb {
|
|
status = "okay";
|
|
extcon = <&usb_id>, <&usb_id>;
|
|
};
|
|
|
|
&usb_hs_phy {
|
|
extcon = <&usb_id>;
|
|
};
|
|
|
|
&wcnss {
|
|
status = "okay";
|
|
};
|
|
|
|
&wcnss_iris {
|
|
compatible = "qcom,wcn3620";
|
|
};
|
|
|
|
&smd_rpm_regulators {
|
|
vdd_l1_l2_l3-supply = <&pm8916_s3>;
|
|
vdd_l4_l5_l6-supply = <&pm8916_s4>;
|
|
vdd_l7-supply = <&pm8916_s4>;
|
|
|
|
s3 {
|
|
regulator-min-microvolt = <1250000>;
|
|
regulator-max-microvolt = <1350000>;
|
|
};
|
|
|
|
s4 {
|
|
regulator-min-microvolt = <1850000>;
|
|
regulator-max-microvolt = <2150000>;
|
|
};
|
|
|
|
l1 {
|
|
regulator-min-microvolt = <1225000>;
|
|
regulator-max-microvolt = <1225000>;
|
|
};
|
|
|
|
l2 {
|
|
regulator-min-microvolt = <1200000>;
|
|
regulator-max-microvolt = <1200000>;
|
|
};
|
|
|
|
l4 {
|
|
regulator-min-microvolt = <2050000>;
|
|
regulator-max-microvolt = <2050000>;
|
|
};
|
|
|
|
l5 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
};
|
|
|
|
l6 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
};
|
|
|
|
l7 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
};
|
|
|
|
l8 {
|
|
regulator-min-microvolt = <2900000>;
|
|
regulator-max-microvolt = <2900000>;
|
|
};
|
|
|
|
l9 {
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
};
|
|
|
|
l10 {
|
|
regulator-min-microvolt = <2800000>;
|
|
regulator-max-microvolt = <2800000>;
|
|
};
|
|
|
|
l11 {
|
|
regulator-min-microvolt = <2950000>;
|
|
regulator-max-microvolt = <2950000>;
|
|
regulator-allow-set-load;
|
|
regulator-system-load = <200000>;
|
|
};
|
|
|
|
l12 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <2950000>;
|
|
};
|
|
|
|
l13 {
|
|
regulator-min-microvolt = <3075000>;
|
|
regulator-max-microvolt = <3075000>;
|
|
};
|
|
|
|
l14 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
};
|
|
|
|
l15 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
};
|
|
|
|
l16 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
};
|
|
|
|
l17 {
|
|
regulator-min-microvolt = <2850000>;
|
|
regulator-max-microvolt = <2850000>;
|
|
};
|
|
|
|
l18 {
|
|
regulator-min-microvolt = <2700000>;
|
|
regulator-max-microvolt = <2700000>;
|
|
};
|
|
};
|
|
|
|
&msmgpio {
|
|
accel_int_default: accel-int-default-state {
|
|
pins = "gpio31";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
};
|
|
|
|
gpio_keys_default: gpio-keys-default-state {
|
|
pins = "gpio107";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-pull-up;
|
|
};
|
|
|
|
gpio_leds_default: gpio-leds-default-state {
|
|
pins = "gpio32";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
};
|
|
|
|
gyro_int_default: gyro-int-default-state {
|
|
pins = "gpio97", "gpio98";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
};
|
|
|
|
/*
|
|
* The OEM wired an additional GPIO to be asserted so that
|
|
* the si-en,sn3190 LED IC works. Since this GPIO is not
|
|
* part of the IC datasheet nor supported by the driver,
|
|
* force it asserted here.
|
|
*/
|
|
led_enable_default: led-enable-default-state {
|
|
pins = "gpio102";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
output-high;
|
|
};
|
|
|
|
led_shutdown_default: led-shutdown-default-state {
|
|
pins = "gpio89";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
};
|
|
|
|
mag_reset_default: mag-reset-default-state {
|
|
pins = "gpio8";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
};
|
|
|
|
proximity_int_default: proximity-int-default-state {
|
|
pins = "gpio12";
|
|
function = "gpio";
|
|
|
|
drive-strength = <6>;
|
|
bias-pull-up;
|
|
};
|
|
|
|
ts_int_reset_default: ts-int-reset-default-state {
|
|
pins = "gpio13", "gpio100";
|
|
function = "gpio";
|
|
|
|
drive-strength = <2>;
|
|
bias-disable;
|
|
};
|
|
|
|
usb_id_default: usb-id-default-state {
|
|
pins = "gpio69";
|
|
function = "gpio";
|
|
|
|
drive-strength = <8>;
|
|
bias-pull-up;
|
|
};
|
|
};
|