diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c index e88bdb889d3a..823803df2d7b 100644 --- a/drivers/mfd/rk808.c +++ b/drivers/mfd/rk808.c @@ -448,36 +448,7 @@ static const struct regmap_irq_chip rk818_irq_chip = { static struct i2c_client *rk808_i2c_client; -static void rk808_device_shutdown(void) -{ - int ret; - unsigned int reg, bit; - struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); - - if (!rk808) - return; - - switch (rk808->variant) { - case RK805_ID: - reg = RK805_DEV_CTRL_REG; - bit = DEV_OFF; - break; - case RK808_ID: - reg = RK808_DEVCTRL_REG, - bit = DEV_OFF_RST; - break; - case RK818_ID: - reg = RK818_DEVCTRL_REG; - bit = DEV_OFF; - break; - default: - return; - } - ret = regmap_update_bits(rk808->regmap, reg, bit, bit); - if (ret) - dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); -} - +#if 0 static void rk8xx_syscore_shutdown(void) { struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); @@ -511,6 +482,7 @@ static void rk8xx_syscore_shutdown(void) static struct syscore_ops rk808_syscore_ops = { .shutdown = rk8xx_syscore_shutdown, }; +#endif static const struct of_device_id rk808_of_match[] = { { .compatible = "rockchip,rk805" }, @@ -643,8 +615,9 @@ static int rk808_probe(struct i2c_client *client, } rk808_i2c_client = client; +#if 0 register_syscore_ops(&rk808_syscore_ops); - +#endif ret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, cells, nr_cells, NULL, 0, regmap_irq_get_domain(rk808->irq_data)); @@ -653,13 +626,16 @@ static int rk808_probe(struct i2c_client *client, goto err_irq; } +#if 0 if (of_property_read_bool(np, "rockchip,system-power-controller")) pm_power_off = rk808_device_shutdown; - +#endif return 0; err_irq: +#if 0 unregister_syscore_ops(&rk808_syscore_ops); +#endif regmap_del_irq_chip(client->irq, rk808->irq_data); return ret; } @@ -670,18 +646,48 @@ static int rk808_remove(struct i2c_client *client) regmap_del_irq_chip(client->irq, rk808->irq_data); +#if 0 unregister_syscore_ops(&rk808_syscore_ops); - /** * pm_power_off may points to a function from another module. * Check if the pointer is set by us and only then overwrite it. */ if (pm_power_off == rk808_device_shutdown) pm_power_off = NULL; - +#endif return 0; } +static void rk808_shutdown(struct i2c_client *client) +{ + int ret; + unsigned int reg, bit; + struct rk808 *rk808 = i2c_get_clientdata(client); + + if (!rk808) + return; + + switch (rk808->variant) { + case RK805_ID: + reg = RK805_DEV_CTRL_REG; + bit = DEV_OFF; + break; + case RK808_ID: + reg = RK808_DEVCTRL_REG, + bit = DEV_OFF_RST; + break; + case RK818_ID: + reg = RK818_DEVCTRL_REG; + bit = DEV_OFF; + break; + default: + return; + } + ret = regmap_update_bits(rk808->regmap, reg, bit, bit); + if (ret) + dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); +} + static int __maybe_unused rk8xx_suspend(struct device *dev) { struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); @@ -737,6 +743,7 @@ static struct i2c_driver rk808_i2c_driver = { }, .probe = rk808_probe, .remove = rk808_remove, + .shutdown = rk808_shutdown, }; module_i2c_driver(rk808_i2c_driver);