From ab6c251717f9a60c664340c45275edfd49cbe7c2 Mon Sep 17 00:00:00 2001 From: Michael Fincham <michael@hotplate.co.nz> Date: Thu, 7 Sep 2023 09:10:32 +0200 Subject: [PATCH] lpc/reform2_lpc.c: poweroff --- lpc/reform2_lpc.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lpc/reform2_lpc.c b/lpc/reform2_lpc.c index 61b5fcb..afc5ea5 100644 --- a/lpc/reform2_lpc.c +++ b/lpc/reform2_lpc.c @@ -8,6 +8,7 @@ static int lpcProbe(struct spi_device *spi); static void lpcRemove(struct spi_device *spi); +static void lpcPowerOff(void); static ssize_t showStatus(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t showCells(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t showFirmware(struct device *dev, struct device_attribute *attr, char *buf); @@ -58,6 +59,8 @@ static struct power_supply_desc bat_desc = { static struct power_supply_config psy_cfg = {}; +static struct device *poweroff_device; + static int lpcProbe(struct spi_device *spi) { struct lpc_driver_data *data; @@ -121,6 +124,10 @@ static int lpcProbe(struct spi_device *spi) return PTR_ERR(data->bat); } + // this overwrites something else that has already claimed pm_power_off on reform2 but it'll do for now + poweroff_device = &spi->dev; + pm_power_off = lpcPowerOff; + return ret; } @@ -137,6 +144,11 @@ static void lpcRemove(struct spi_device *spi) power_supply_unregister(data->bat); + if (pm_power_off == &lpcPowerOff) + { + pm_power_off = NULL; + } + kfree(data); } @@ -289,6 +301,14 @@ static ssize_t lpcCommand(struct device *dev, char command, uint8_t arg1, uint8_ return ret; } +static void lpcPowerOff(void) +{ + int ret = 0; + uint8_t buffer[8]; + + ret = lpcCommand(poweroff_device, 'p', 1, buffer); +} + static int getBatProperty(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) -- GitLab