Message ID | 20211220144654.926112-1-pgwipeout@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] mfd: rk808: add reboot support to rk808.c | expand |
20.12.2021 17:46, Peter Geis пишет: > +static int rk808_restart_notify(struct notifier_block *this, unsigned long mode, void *cmd) > +{ > + int ret; > + unsigned int reg, bit; > + struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); Such code usually should be written in a form of reverse Xmas tree in kernel, but no need to respin just because of it. The patch looks good to me, thank you. Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
Hi > Gesendet: Montag, 20. Dezember 2021 um 15:46 Uhr > Von: "Peter Geis" <pgwipeout@gmail.com> > @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client *client) > if (pm_power_off == rk808_pm_power_off) > pm_power_off = NULL; > > + if (of_property_read_bool(np, "rockchip,system-power-controller")) > + unregister_restart_handler(&rk808_restart_handler); > + > return 0; > } this change misses a declaration struct device_node *np = client->dev.of_node; regards Frank
20.12.2021 19:33, Frank Wunderlich пишет: > Hi > >> Gesendet: Montag, 20. Dezember 2021 um 15:46 Uhr >> Von: "Peter Geis" <pgwipeout@gmail.com> >> @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client *client) >> if (pm_power_off == rk808_pm_power_off) >> pm_power_off = NULL; >> >> + if (of_property_read_bool(np, "rockchip,system-power-controller")) >> + unregister_restart_handler(&rk808_restart_handler); >> + >> return 0; >> } > > this change misses a declaration > > struct device_node *np = client->dev.of_node; Good catch, technically the whole of_property_read_bool() could be dropped from rk808_remove() since unregister_restart_handler() survives if handler wasn't registered.
On Mon, Dec 20, 2021 at 11:36 AM Dmitry Osipenko <digetx@gmail.com> wrote: > > 20.12.2021 19:33, Frank Wunderlich пишет: > > Hi > > > >> Gesendet: Montag, 20. Dezember 2021 um 15:46 Uhr > >> Von: "Peter Geis" <pgwipeout@gmail.com> > >> @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client *client) > >> if (pm_power_off == rk808_pm_power_off) > >> pm_power_off = NULL; > >> > >> + if (of_property_read_bool(np, "rockchip,system-power-controller")) > >> + unregister_restart_handler(&rk808_restart_handler); > >> + > >> return 0; > >> } > > > > this change misses a declaration > > > > struct device_node *np = client->dev.of_node; > > Good catch, technically the whole of_property_read_bool() could be > dropped from rk808_remove() since unregister_restart_handler() survives > if handler wasn't registered. Thank you all!
On Mon, 20 Dec 2021, Frank Wunderlich wrote: > Hi > > > Gesendet: Montag, 20. Dezember 2021 um 15:46 Uhr > > Von: "Peter Geis" <pgwipeout@gmail.com> > > @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client *client) > > if (pm_power_off == rk808_pm_power_off) > > pm_power_off = NULL; > > > > + if (of_property_read_bool(np, "rockchip,system-power-controller")) > > + unregister_restart_handler(&rk808_restart_handler); > > + > > return 0; > > } > > this change misses a declaration > > struct device_node *np = client->dev.of_node; How did this compile when you tested it?
Am 21. Dezember 2021 09:48:43 MEZ schrieb Lee Jones <lee.jones@linaro.org>: >On Mon, 20 Dec 2021, Frank Wunderlich wrote: > >> Hi >> >> > Gesendet: Montag, 20. Dezember 2021 um 15:46 Uhr >> > Von: "Peter Geis" <pgwipeout@gmail.com> >> > @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client >*client) >> > if (pm_power_off == rk808_pm_power_off) >> > pm_power_off = NULL; >> > >> > + if (of_property_read_bool(np, >"rockchip,system-power-controller")) >> > + unregister_restart_handler(&rk808_restart_handler); >> > + >> > return 0; >> > } >> >> this change misses a declaration >> >> struct device_node *np = client->dev.of_node; > >How did this compile when you tested it? Here i have squashed the change in: https://github.com/frank-w/BPI-R2-4.14/commit/06430ffcb6d58d33014fb940256de77807ed620f With the change i can compile it... But in v4 (patch is tagged as v3 too) the of_property_read_bool was dropped completely. regards Frank
On Tue, 21 Dec 2021, Frank Wunderlich wrote: > Am 21. Dezember 2021 09:48:43 MEZ schrieb Lee Jones <lee.jones@linaro.org>: > >On Mon, 20 Dec 2021, Frank Wunderlich wrote: > > > >> Hi > >> > >> > Gesendet: Montag, 20. Dezember 2021 um 15:46 Uhr > >> > Von: "Peter Geis" <pgwipeout@gmail.com> > >> > @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client > >*client) > >> > if (pm_power_off == rk808_pm_power_off) > >> > pm_power_off = NULL; > >> > > >> > + if (of_property_read_bool(np, > >"rockchip,system-power-controller")) > >> > + unregister_restart_handler(&rk808_restart_handler); > >> > + > >> > return 0; > >> > } > >> > >> this change misses a declaration > >> > >> struct device_node *np = client->dev.of_node; > > > >How did this compile when you tested it? > > Here i have squashed the change in: > > https://github.com/frank-w/BPI-R2-4.14/commit/06430ffcb6d58d33014fb940256de77807ed620f > > With the change i can compile it... Not sure I understand. Please make sure all patches you send for inclusion into the Linux kernel are fully tested. They should also be bisectable i.e. not depend on patches applied *on top*. > But in v4 (patch is tagged as v3 too) the of_property_read_bool was dropped completely. > regards Frank
> Gesendet: Mittwoch, 22. Dezember 2021 um 12:09 Uhr > Von: "Lee Jones" <lee.jones@linaro.org> > An: "Frank Wunderlich" <frank-w@public-files.de> > > Here i have squashed the change in: > > > > https://github.com/frank-w/BPI-R2-4.14/commit/06430ffcb6d58d33014fb940256de77807ed620f > > > > With the change i can compile it... > > Not sure I understand. > > Please make sure all patches you send for inclusion into the Linux > kernel are fully tested. They should also be bisectable i.e. not > depend on patches applied *on top*. > > > But in v4 (patch is tagged as v3 too) the of_property_read_bool was dropped completely. > > regards Frank only v1 was sent by me :) v4 is compilable and works on rk809 (Bananapi r2 pro) regards Frank
On Wed, 22 Dec 2021, Frank Wunderlich wrote: > > Gesendet: Mittwoch, 22. Dezember 2021 um 12:09 Uhr > > Von: "Lee Jones" <lee.jones@linaro.org> > > An: "Frank Wunderlich" <frank-w@public-files.de> > > > Here i have squashed the change in: > > > > > > https://github.com/frank-w/BPI-R2-4.14/commit/06430ffcb6d58d33014fb940256de77807ed620f > > > > > > With the change i can compile it... > > > > Not sure I understand. > > > > Please make sure all patches you send for inclusion into the Linux > > kernel are fully tested. They should also be bisectable i.e. not > > depend on patches applied *on top*. > > > > > But in v4 (patch is tagged as v3 too) the of_property_read_bool was dropped completely. > > > regards Frank > > only v1 was sent by me :) > > v4 is compilable and works on rk809 (Bananapi r2 pro) My comments are directed at whoever sent patches without testing.
On Wed, Dec 22, 2021 at 7:54 AM Lee Jones <lee.jones@linaro.org> wrote: > > On Wed, 22 Dec 2021, Frank Wunderlich wrote: > > > > Gesendet: Mittwoch, 22. Dezember 2021 um 12:09 Uhr > > > Von: "Lee Jones" <lee.jones@linaro.org> > > > An: "Frank Wunderlich" <frank-w@public-files.de> > > > > Here i have squashed the change in: > > > > > > > > https://github.com/frank-w/BPI-R2-4.14/commit/06430ffcb6d58d33014fb940256de77807ed620f > > > > > > > > With the change i can compile it... > > > > > > Not sure I understand. > > > > > > Please make sure all patches you send for inclusion into the Linux > > > kernel are fully tested. They should also be bisectable i.e. not > > > depend on patches applied *on top*. > > > > > > > But in v4 (patch is tagged as v3 too) the of_property_read_bool was dropped completely. > > > > regards Frank > > > > only v1 was sent by me :) > > > > v4 is compilable and works on rk809 (Bananapi r2 pro) > > My comments are directed at whoever sent patches without testing. Apologies, due to an unfortunate set of circumstances I missed the build failed and I was using a stale kernel. > > -- > Lee Jones [李琼斯] > Senior Technical Lead - Developer Services > Linaro.org │ Open source software for Arm SoCs > Follow Linaro: Facebook | Twitter | Blog
diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c index b181fe401330..f3a79e23ac6e 100644 --- a/drivers/mfd/rk808.c +++ b/drivers/mfd/rk808.c @@ -19,6 +19,7 @@ #include <linux/module.h> #include <linux/of_device.h> #include <linux/regmap.h> +#include <linux/reboot.h> struct rk808_reg_data { int addr; @@ -543,6 +544,7 @@ static void rk808_pm_power_off(void) reg = RK808_DEVCTRL_REG, bit = DEV_OFF_RST; break; + case RK809_ID: case RK817_ID: reg = RK817_SYS_CFG(3); bit = DEV_OFF; @@ -559,6 +561,34 @@ static void rk808_pm_power_off(void) dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); } +static int rk808_restart_notify(struct notifier_block *this, unsigned long mode, void *cmd) +{ + int ret; + unsigned int reg, bit; + struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); + + switch (rk808->variant) { + case RK809_ID: + case RK817_ID: + reg = RK817_SYS_CFG(3); + bit = DEV_RST; + break; + + default: + return NOTIFY_DONE; + } + ret = regmap_update_bits(rk808->regmap, reg, bit, bit); + if (ret) + dev_err(&rk808_i2c_client->dev, "Failed to restart device!\n"); + + return NOTIFY_DONE; +} + +static struct notifier_block rk808_restart_handler = { + .notifier_call = rk808_restart_notify, + .priority = 192, +}; + static void rk8xx_shutdown(struct i2c_client *client) { struct rk808 *rk808 = i2c_get_clientdata(client); @@ -727,6 +757,18 @@ static int rk808_probe(struct i2c_client *client, if (of_property_read_bool(np, "rockchip,system-power-controller")) { rk808_i2c_client = client; pm_power_off = rk808_pm_power_off; + + switch (rk808->variant) { + case RK809_ID: + case RK817_ID: + ret = register_restart_handler(&rk808_restart_handler); + if (ret) + dev_warn(&client->dev, "failed to register restart handler, %d\n", ret); + break; + default: + dev_dbg(&client->dev, "pmic controlled board reset not supported\n"); + break; + } } return 0; @@ -749,6 +791,9 @@ static int rk808_remove(struct i2c_client *client) if (pm_power_off == rk808_pm_power_off) pm_power_off = NULL; + if (of_property_read_bool(np, "rockchip,system-power-controller")) + unregister_restart_handler(&rk808_restart_handler); + return 0; } diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h index a96e6d43ca06..58602032e642 100644 --- a/include/linux/mfd/rk808.h +++ b/include/linux/mfd/rk808.h @@ -373,6 +373,7 @@ enum rk805_reg { #define SWITCH2_EN BIT(6) #define SWITCH1_EN BIT(5) #define DEV_OFF_RST BIT(3) +#define DEV_RST BIT(2) #define DEV_OFF BIT(0) #define RTC_STOP BIT(0)