Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

power: reset: ltc2952: make trigger delay configurable

Make trigger delay configurable through device tree with
trigger-delay-ms property.

Trigger delay is the time to wait before starting shutdown
sequence after trigger line assertion.
Trigger delay must take into account the OFFT time configured
with the capacitor connected to OFFT pin of the LTC2952 chip.
Basically, the higher the capacitance connected to OFFT pin,
the larger trigger delay must be.

Signed-off-by: Marek Czerski <ma.czerski@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>

authored by

Marek Czerski and committed by
Sebastian Reichel
52473b07 816aacd5

+12
+4
Documentation/devicetree/bindings/power/reset/ltc2952-poweroff.txt
··· 17 17 chip's trigger line. If this property is not set, the 18 18 trigger function is ignored and the chip is kept alive 19 19 until an explicit kill signal is received 20 + - trigger-delay-ms The number of milliseconds to wait after trigger line 21 + assertion before executing shut down procedure. 22 + The default is 2500ms. 20 23 21 24 Example: 22 25 ··· 27 24 compatible = "lltc,ltc2952"; 28 25 29 26 trigger-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>; 27 + trigger-delay-ms = <2000>; 30 28 watchdog-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; 31 29 kill-gpios = <&gpio0 2 GPIO_ACTIVE_LOW>; 32 30 };
+8
drivers/power/reset/ltc2952-poweroff.c
··· 55 55 #include <linux/mod_devicetable.h> 56 56 #include <linux/gpio/consumer.h> 57 57 #include <linux/reboot.h> 58 + #include <linux/property.h> 58 59 59 60 struct ltc2952_poweroff { 60 61 struct hrtimer timer_trigger; ··· 173 172 static int ltc2952_poweroff_init(struct platform_device *pdev) 174 173 { 175 174 int ret; 175 + u32 trigger_delay_ms; 176 176 struct ltc2952_poweroff *data = platform_get_drvdata(pdev); 177 177 178 178 ltc2952_poweroff_default(data); 179 + 180 + if (!device_property_read_u32(&pdev->dev, "trigger-delay-ms", 181 + &trigger_delay_ms)) { 182 + data->trigger_delay = ktime_set(trigger_delay_ms / MSEC_PER_SEC, 183 + (trigger_delay_ms % MSEC_PER_SEC) * NSEC_PER_MSEC); 184 + } 179 185 180 186 data->gpio_watchdog = devm_gpiod_get(&pdev->dev, "watchdog", 181 187 GPIOD_OUT_LOW);