power: reset: pwr-mlxbf: support graceful reboot instead of emergency reset
Replace the soft reset with a graceful reboot. An acpi event will be triggered by the irq in the pwr-mlxbf.c to trigger the graceful reboot. Signed-off-by: Asmaa Mnebhi <asmaa@nvidia.com> Link: https://lore.kernel.org/r/20231030203058.8056-1-asmaa@nvidia.com Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
b85ea95d08
commit
b9afaa069e
@ -17,11 +17,17 @@
|
||||
#include <linux/types.h>
|
||||
|
||||
struct pwr_mlxbf {
|
||||
struct work_struct send_work;
|
||||
struct work_struct reboot_work;
|
||||
struct work_struct shutdown_work;
|
||||
const char *hid;
|
||||
};
|
||||
|
||||
static void pwr_mlxbf_send_work(struct work_struct *work)
|
||||
static void pwr_mlxbf_reboot_work(struct work_struct *work)
|
||||
{
|
||||
acpi_bus_generate_netlink_event("button/reboot.*", "Reboot Button", 0x80, 1);
|
||||
}
|
||||
|
||||
static void pwr_mlxbf_shutdown_work(struct work_struct *work)
|
||||
{
|
||||
acpi_bus_generate_netlink_event("button/power.*", "Power Button", 0x80, 1);
|
||||
}
|
||||
@ -33,10 +39,10 @@ static irqreturn_t pwr_mlxbf_irq(int irq, void *ptr)
|
||||
struct pwr_mlxbf *priv = ptr;
|
||||
|
||||
if (!strncmp(priv->hid, rst_pwr_hid, 8))
|
||||
emergency_restart();
|
||||
schedule_work(&priv->reboot_work);
|
||||
|
||||
if (!strncmp(priv->hid, low_pwr_hid, 8))
|
||||
schedule_work(&priv->send_work);
|
||||
schedule_work(&priv->shutdown_work);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@ -64,7 +70,11 @@ static int pwr_mlxbf_probe(struct platform_device *pdev)
|
||||
if (irq < 0)
|
||||
return dev_err_probe(dev, irq, "Error getting %s irq.\n", priv->hid);
|
||||
|
||||
err = devm_work_autocancel(dev, &priv->send_work, pwr_mlxbf_send_work);
|
||||
err = devm_work_autocancel(dev, &priv->shutdown_work, pwr_mlxbf_shutdown_work);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devm_work_autocancel(dev, &priv->reboot_work, pwr_mlxbf_reboot_work);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user