mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
mach-snapdragon: switch to PMIC button driver
The PMIC button driver is a much better representation of the hardware here, adjust the boards to use upstream DT and the PMIC button driver instead of exposing the buttons as GPIOs and relying on the GPIO-button driver. Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Reviewed-by: Sumit Garg <sumit.garg@linaro.org> Tested-by: Sumit Garg <sumit.garg@linaro.org> Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
@@ -42,14 +42,3 @@
|
||||
gpios = <&pm8916_gpios 3 0>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
&pm8916_pon {
|
||||
key_vol_down {
|
||||
gpios = <&pm8916_pon 1 0>;
|
||||
};
|
||||
|
||||
key_power {
|
||||
gpios = <&pm8916_pon 0 0>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -147,11 +147,23 @@
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x1>;
|
||||
|
||||
pm8916_pon: pm8916_pon@800 {
|
||||
compatible = "qcom,pm8916-pwrkey";
|
||||
reg = <0x800 0x96>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
pon@800 {
|
||||
compatible = "qcom,pm8916-pon";
|
||||
reg = <0x800 0x100>;
|
||||
mode-bootloader = <0x2>;
|
||||
mode-recovery = <0x1>;
|
||||
|
||||
pwrkey {
|
||||
compatible = "qcom,pm8941-pwrkey";
|
||||
debounce = <15625>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
pm8916_resin: resin {
|
||||
compatible = "qcom,pm8941-resin";
|
||||
debounce = <15625>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
pm8916_gpios: pm8916_gpios@c000 {
|
||||
|
||||
@@ -30,15 +30,3 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pm8994_pon {
|
||||
key_vol_down {
|
||||
gpios = <&pm8994_pon 1 0>;
|
||||
label = "key_vol_down";
|
||||
};
|
||||
|
||||
key_power {
|
||||
gpios = <&pm8994_pon 0 0>;
|
||||
label = "key_power";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -109,12 +109,23 @@
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x1>;
|
||||
|
||||
pm8994_pon: pm8994_pon@800 {
|
||||
compatible = "qcom,pm8994-pwrkey";
|
||||
reg = <0x800 0x96>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-bank-name="pm8994_key.";
|
||||
pm8994_pon: pon@800 {
|
||||
compatible = "qcom,pm8916-pon";
|
||||
reg = <0x800 0x100>;
|
||||
mode-bootloader = <0x2>;
|
||||
mode-recovery = <0x1>;
|
||||
|
||||
pwrkey {
|
||||
compatible = "qcom,pm8941-pwrkey";
|
||||
debounce = <15625>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
pm8994_resin: resin {
|
||||
compatible = "qcom,pm8941-resin";
|
||||
debounce = <15625>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
pm8994_gpios: pm8994_gpios@c000 {
|
||||
|
||||
@@ -24,14 +24,3 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pm8998_pon {
|
||||
key_vol_down {
|
||||
gpios = <&pm8998_pon 1 0>;
|
||||
label = "key_vol_down";
|
||||
};
|
||||
key_power {
|
||||
gpios = <&pm8998_pon 0 0>;
|
||||
label = "key_power";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -41,4 +41,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
&pm8998_resin {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
#include "dragonboard845c-uboot.dtsi"
|
||||
|
||||
@@ -78,12 +78,25 @@
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x1>;
|
||||
|
||||
pm8998_pon: pm8998_pon@800 {
|
||||
compatible = "qcom,pm8998-pwrkey";
|
||||
pm8998_pon: pon@800 {
|
||||
compatible = "qcom,pm8998-pon";
|
||||
|
||||
reg = <0x800 0x100>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-bank-name = "pm8998_key.";
|
||||
mode-bootloader = <0x2>;
|
||||
mode-recovery = <0x1>;
|
||||
|
||||
pm8998_pwrkey: pwrkey {
|
||||
compatible = "qcom,pm8941-pwrkey";
|
||||
debounce = <15625>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
pm8998_resin: resin {
|
||||
compatible = "qcom,pm8941-resin";
|
||||
debounce = <15625>;
|
||||
bias-pull-up;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
pm8998_gpios: pm8998_gpios@c000 {
|
||||
|
||||
@@ -25,13 +25,3 @@
|
||||
};
|
||||
};
|
||||
|
||||
&pm8998_pon {
|
||||
key_vol_down {
|
||||
gpios = <&pm8998_pon 1 0>;
|
||||
label = "key_vol_down";
|
||||
};
|
||||
key_power {
|
||||
gpios = <&pm8998_pon 0 0>;
|
||||
label = "key_power";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -45,22 +45,6 @@
|
||||
format = "a8r8g8b8";
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
key-pwr {
|
||||
label = "Power";
|
||||
linux,code = <KEY_ENTER>;
|
||||
gpios = <&pm8998_pon 0 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
key-vol-down {
|
||||
label = "Volume Down";
|
||||
linux,code = <KEY_DOWN>;
|
||||
gpios = <&pm8998_pon 1 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
soc: soc {
|
||||
serial@a84000 {
|
||||
status = "okay";
|
||||
@@ -68,6 +52,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
&pm8998_resin {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tlmm {
|
||||
muic_i2c: muic-i2c-n {
|
||||
pins = "GPIO_33", "GPIO_34";
|
||||
|
||||
@@ -17,6 +17,7 @@ config SDM845
|
||||
select LINUX_KERNEL_IMAGE_HEADER
|
||||
imply CLK_QCOM_SDM845
|
||||
imply PINCTRL_QCOM_SDM845
|
||||
imply BUTTON_QCOM_PMIC
|
||||
|
||||
config LNX_KRNL_IMG_TEXT_OFFSET_BASE
|
||||
default 0x80000000
|
||||
@@ -30,6 +31,7 @@ config TARGET_DRAGONBOARD410C
|
||||
select ENABLE_ARM_SOC_BOOT0_HOOK
|
||||
imply CLK_QCOM_APQ8016
|
||||
imply PINCTRL_QCOM_APQ8016
|
||||
imply BUTTON_QCOM_PMIC
|
||||
help
|
||||
Support for 96Boards Dragonboard 410C. This board complies with
|
||||
96Board Open Platform Specifications. Features:
|
||||
@@ -45,6 +47,7 @@ config TARGET_DRAGONBOARD820C
|
||||
bool "96Boards Dragonboard 820C"
|
||||
imply CLK_QCOM_APQ8096
|
||||
imply PINCTRL_QCOM_APQ8096
|
||||
imply BUTTON_QCOM_PMIC
|
||||
help
|
||||
Support for 96Boards Dragonboard 820C. This board complies with
|
||||
96Board Open Platform Specifications. Features:
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* (C) Copyright 2021 Dzmitry Sankouski <dsankouski@gmail.com>
|
||||
*/
|
||||
|
||||
#include <button.h>
|
||||
#include <init.h>
|
||||
#include <env.h>
|
||||
#include <common.h>
|
||||
@@ -32,46 +33,18 @@ __weak int board_init(void)
|
||||
/* Check for vol- and power buttons */
|
||||
__weak int misc_init_r(void)
|
||||
{
|
||||
struct udevice *pon;
|
||||
struct gpio_desc resin;
|
||||
int node, ret;
|
||||
struct udevice *btn;
|
||||
int ret;
|
||||
enum button_state_t state;
|
||||
|
||||
ret = uclass_get_device_by_name(UCLASS_GPIO, "pm8998_pon@800", &pon);
|
||||
ret = button_get_by_label("pwrkey", &btn);
|
||||
if (ret < 0) {
|
||||
printf("Failed to find PMIC pon node. Check device tree\n");
|
||||
return 0;
|
||||
printf("Couldn't find power button!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon),
|
||||
"key_vol_down");
|
||||
if (node < 0) {
|
||||
printf("Failed to find key_vol_down node. Check device tree\n");
|
||||
return 0;
|
||||
}
|
||||
if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0,
|
||||
&resin, 0)) {
|
||||
printf("Failed to request key_vol_down button.\n");
|
||||
return 0;
|
||||
}
|
||||
if (dm_gpio_get_value(&resin)) {
|
||||
env_set("key_vol_down", "1");
|
||||
printf("Volume down button pressed\n");
|
||||
} else {
|
||||
env_set("key_vol_down", "0");
|
||||
}
|
||||
|
||||
node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon),
|
||||
"key_power");
|
||||
if (node < 0) {
|
||||
printf("Failed to find key_power node. Check device tree\n");
|
||||
return 0;
|
||||
}
|
||||
if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0,
|
||||
&resin, 0)) {
|
||||
printf("Failed to request key_power button.\n");
|
||||
return 0;
|
||||
}
|
||||
if (dm_gpio_get_value(&resin)) {
|
||||
state = button_get_state(btn);
|
||||
if (state == BUTTON_ON) {
|
||||
env_set("key_power", "1");
|
||||
printf("Power button pressed\n");
|
||||
} else {
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
|
||||
*/
|
||||
|
||||
#include <button.h>
|
||||
#include <common.h>
|
||||
#include <cpu_func.h>
|
||||
#include <dm.h>
|
||||
@@ -108,32 +109,20 @@ int board_usb_init(int index, enum usb_init_type init)
|
||||
/* Check for vol- button - if pressed - stop autoboot */
|
||||
int misc_init_r(void)
|
||||
{
|
||||
struct udevice *pon;
|
||||
struct gpio_desc resin;
|
||||
int node, ret;
|
||||
struct udevice *btn;
|
||||
int ret;
|
||||
enum button_state_t state;
|
||||
|
||||
ret = uclass_get_device_by_name(UCLASS_GPIO, "pm8916_pon@800", &pon);
|
||||
ret = button_get_by_label("vol_down", &btn);
|
||||
if (ret < 0) {
|
||||
printf("Failed to find PMIC pon node. Check device tree\n");
|
||||
return 0;
|
||||
printf("Couldn't find power button!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon),
|
||||
"key_vol_down");
|
||||
if (node < 0) {
|
||||
printf("Failed to find key_vol_down node. Check device tree\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0,
|
||||
&resin, 0)) {
|
||||
printf("Failed to request key_vol_down button.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dm_gpio_get_value(&resin)) {
|
||||
state = button_get_state(btn);
|
||||
if (state == BUTTON_ON) {
|
||||
env_set("preboot", "setenv preboot; fastboot 0");
|
||||
printf("key_vol_down pressed - Starting fastboot.\n");
|
||||
printf("vol_down pressed - Starting fastboot.\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* (C) Copyright 2017 Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
|
||||
*/
|
||||
|
||||
#include <button.h>
|
||||
#include <cpu_func.h>
|
||||
#include <init.h>
|
||||
#include <env.h>
|
||||
@@ -139,30 +140,18 @@ void reset_cpu(void)
|
||||
/* Check for vol- button - if pressed - stop autoboot */
|
||||
int misc_init_r(void)
|
||||
{
|
||||
struct udevice *pon;
|
||||
struct gpio_desc resin;
|
||||
int node, ret;
|
||||
struct udevice *btn;
|
||||
int ret;
|
||||
enum button_state_t state;
|
||||
|
||||
ret = uclass_get_device_by_name(UCLASS_GPIO, "pm8994_pon@800", &pon);
|
||||
ret = button_get_by_label("pwrkey", &btn);
|
||||
if (ret < 0) {
|
||||
printf("Failed to find PMIC pon node. Check device tree\n");
|
||||
return 0;
|
||||
printf("Couldn't find power button!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon),
|
||||
"key_vol_down");
|
||||
if (node < 0) {
|
||||
printf("Failed to find key_vol_down node. Check device tree\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0,
|
||||
&resin, 0)) {
|
||||
printf("Failed to request key_vol_down button.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dm_gpio_get_value(&resin)) {
|
||||
state = button_get_state(btn);
|
||||
if (state == BUTTON_ON) {
|
||||
env_set("bootdelay", "-1");
|
||||
printf("Power button pressed - dropping to console.\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user