drivers: power: reset: add msm restart support
PATCH 1/1 drivers: power: reset: add msm restart support
Add support for restart and poweroff functionality present on MSM chipsets with the MPM2 ps-hold hardware.
--- .../bindings/power_supply/msm-poweroff.txt | 17 +++++ drivers/power/reset/Kconfig | 6 ++ drivers/power/reset/Makefile | 1 + drivers/power/reset/msm-poweroff.c | 73 ++++++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 Documentation/devicetree/bindings/power_supply/msm-poweroff.txt create mode 100644 drivers/power/reset/msm-poweroff.c
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt new file +17 -0
@@ -0,0 +1,17 @@ +MSM Poweroff Driver + +A power supply hold (ps-hold) bit is set to power the msm chipsets. +Clearing that bit enables us to restart/poweroff. The difference +between poweroff and restart is determined by unique power manager IC +settings. + +Required Properties: +-compatible: "qcom,pshold" +-reg: Specifies the physical address of the ps-hold register + +Example: + + restart@800820 { + compatible = "qcom,pshold"; + reg = <0x00800820 0x4>; + };
drivers/power/reset/Kconfig +6 -0
@@ -37,3 +37,9 @@ config POWER_RESET_VEXPRESS help Power off and reset support for the ARM Ltd. Versatile Express boards. + +config POWER_RESET_MSM + bool "Qualcomm MSM power-off driver" + depends on POWER_RESET && ARCH_MSM + help + Power off and restart support for Qualcomm boards.
drivers/power/reset/Makefile +1 -0
@@ -1,4 +1,5 @@ obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o +obj-$(CONFIG_POWER_RESET_MSM) += msm-poweroff.o obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
drivers/power/reset/msm-poweroff.c new file +73 -0
73 lines not on this page · raw message
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt line 4
Quoted 10 lines · Abhimanyu Kapur
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt new file +4
-0@@ -0,0 +1,17 @@ +MSM Poweroff Driver + +A power supply hold (ps-hold) bit is set to power the msm chipsets. +Clearing that bit enables us to restart/poweroff. The difference
s/enables us/allows us/ perhaps?
Quoted 18 lines
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt new file +13
-0+between poweroff and restart is determined by unique power manager IC +settings. + +Required Properties: +-compatible: "qcom,pshold" +-reg: Specifies the physical address of the ps-hold register + +Example: + + restart@800820 { + compatible = "qcom,pshold"; + reg = <0x00800820 0x4>; + };drivers/power/reset/Kconfig +0
-0
drivers/power/reset/Kconfig config POWER_RESET_VEXPRESS · line 45
Quoted 9 lines
drivers/power/reset/Kconfig +6
-0@@ -37,3 +37,9 @@ config POWER_RESET_VEXPRESS help Power off and reset support for the ARM Ltd. Versatile Express boards. + +config POWER_RESET_MSM + bool "Qualcomm MSM power-off driver" + depends on POWER_RESET && ARCH_MSM + help + Power off and restart support for Qualcomm boards.
It looks like this Kconfig file is trying to be alphabetically ordered. Please make sure that it's maintained.
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Hi,
Quoted 4 lines · Abhimanyu Kapur
Add support for restart and poweroff functionality present on MSM chipsets with the MPM2 ps-hold hardware.
Signed-off-by Abhimanyu Kapur <[email protected]>
Quoted 8 lines
--- .../bindings/power_supply/msm-poweroff.txt | 17 +++++ drivers/power/reset/Kconfig | 6 ++ drivers/power/reset/Makefile | 1 + drivers/power/reset/msm-poweroff.c | 73 ++++++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 Documentation/devicetree/bindings/power_supply/msm-poweroff.txt create mode 100644 drivers/power/reset/msm-poweroff.c
Thank you for this. I was not aware how important is the reboot command until I get board which did not have reset button :-)
Quoted 13 lines
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt new file +6
-0@@ -0,0 +1,17 @@ +MSM Poweroff Driver + +A power supply hold (ps-hold) bit is set to power the msm chipsets. +Clearing that bit enables us to restart/poweroff. The difference +between poweroff and restart is determined by unique power manager IC +settings.
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt line 16
Quoted 10 lines
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt new file +10
-0+ +Required Properties: +-compatible: "qcom,pshold" +-reg: Specifies the physical address of the ps-hold register + +Example: + + restart@800820 { + compatible = "qcom,pshold"; + reg = <0x00800820 0x4>;
It will be nice if this address could be used straight a way. If I use this address module can not be loaded, because:
"can't request region for resource [mem 0x00800820-0x00800823]"
Not sure, but when address is 0xfa107000 my 8074 based dragonboard perform reboot successfully.
Quoted 41 lines
Documentation/devicetree/bindings/power_supply/msm-poweroff.txt new file +1
-0+ };drivers/power/reset/Kconfig +6
-0@@ -37,3 +37,9 @@ config POWER_RESET_VEXPRESS help Power off and reset support for the ARM Ltd. Versatile Express boards. + +config POWER_RESET_MSM + bool "Qualcomm MSM power-off driver" + depends on POWER_RESET && ARCH_MSM + help + Power off and restart support for Qualcomm boards.drivers/power/reset/Makefile +1
-0@@ -1,4 +1,5 @@ obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o +obj-$(CONFIG_POWER_RESET_MSM) += msm-poweroff.o obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.odrivers/power/reset/msm-poweroff.c new file +10
-0@@ -0,0 +1,73 @@ +/* Copyright (c) 2013, The Linux Foundation. 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 version 2 and +* only version 2 as published by the Free Software Foundation. +* +* 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.
drivers/power/reset/msm-poweroff.c line 20
Quoted 10 lines
drivers/power/reset/msm-poweroff.c new file +10
-0+* +*/ + +#include <linux/delay.h> +#include <linux/err.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/platform_device.h>
missing #include <linux/module.h>
drivers/power/reset/msm-poweroff.c line 26
Quoted 6 lines
drivers/power/reset/msm-poweroff.c new file +6
-0+ +#include <asm/system_misc.h> + +static void __iomem *msm_ps_hold; + +static void do_msm_restart (char mode,const char *cmd)
the right prototype is:
void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd)
Regards,
Ivan
Quoted 47 lines
drivers/power/reset/msm-poweroff.c new file +47
-0+{ +writel (0 , msm_ps_hold); +mdelay (10000 ); +} + +static void do_msm_poweroff (void ) +{ +/* TODO: Add poweroff capability */ + +do_msm_restart ('p' ,NULL ); +} + +static int msm_restart_probe (struct platform_device *pdev) +{ +struct device *dev = &pdev->dev; +struct resource *mem; + + mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + msm_ps_hold =devm_ioremap_resource (dev, mem); +if (IS_ERR (msm_ps_hold)) +return PTR_ERR (msm_ps_hold); + + pm_power_off = do_msm_poweroff; + arm_pm_restart = do_msm_restart; +return 0 ; +} + +static const struct of_device_id of_msm_restart_match[] = { + { .compatible ="qcom,pshold" , }, + {}, +}; + +MODULE_DEVICE_TABLE (of, of_msm_restart_match); + +static struct platform_driver msm_restart_driver = { + .probe = msm_restart_probe, + .driver = { + .name ="msm-restart" , + .of_match_table =of_match_ptr (of_msm_restart_match), + }, +}; + +static int __init msm_restart_init (void ) +{ +return platform_driver_register (&msm_restart_driver); +} +device_initcall (msm_restart_init);