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

Configure Feed

Select the types of activity you want to include in your feed.

mfd: rk808: Convert to device managed resources

Fully convert the driver to device managed resources.

Tested-by: Diederik de Haas <didi.debian@cknow.org> # Rock64, Quartz64 Model A + B
Tested-by: Vincent Legoll <vincent.legoll@gmail.com> # Pine64 QuartzPro64
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Link: https://lore.kernel.org/r/20230504173618.142075-3-sebastian.reichel@collabora.com
Signed-off-by: Lee Jones <lee@kernel.org>

authored by

Sebastian Reichel and committed by
Lee Jones
4fec8a5a 2dc51ca8

+22 -42
+22 -42
drivers/mfd/rk808.c
··· 548 548 .init_ack_masked = true, 549 549 }; 550 550 551 - static struct i2c_client *rk808_i2c_client; 552 - 553 - static void rk808_pm_power_off(void) 551 + static int rk808_power_off(struct sys_off_data *data) 554 552 { 553 + struct rk808 *rk808 = data->cb_data; 555 554 int ret; 556 555 unsigned int reg, bit; 557 - struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); 558 556 559 557 switch (rk808->variant) { 560 558 case RK805_ID: ··· 573 575 bit = DEV_OFF; 574 576 break; 575 577 default: 576 - return; 578 + return NOTIFY_DONE; 577 579 } 578 580 ret = regmap_update_bits(rk808->regmap, reg, bit, bit); 579 581 if (ret) 580 - dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); 582 + dev_err(&rk808->i2c->dev, "Failed to shutdown device!\n"); 583 + 584 + return NOTIFY_DONE; 581 585 } 582 586 583 - static int rk808_restart_notify(struct notifier_block *this, unsigned long mode, void *cmd) 587 + static int rk808_restart(struct sys_off_data *data) 584 588 { 585 - struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); 589 + struct rk808 *rk808 = data->cb_data; 586 590 unsigned int reg, bit; 587 591 int ret; 588 592 ··· 600 600 } 601 601 ret = regmap_update_bits(rk808->regmap, reg, bit, bit); 602 602 if (ret) 603 - dev_err(&rk808_i2c_client->dev, "Failed to restart device!\n"); 603 + dev_err(&rk808->i2c->dev, "Failed to restart device!\n"); 604 604 605 605 return NOTIFY_DONE; 606 606 } 607 - 608 - static struct notifier_block rk808_restart_handler = { 609 - .notifier_call = rk808_restart_notify, 610 - .priority = 192, 611 - }; 612 607 613 608 static void rk8xx_shutdown(struct i2c_client *client) 614 609 { ··· 740 745 return -EINVAL; 741 746 } 742 747 743 - ret = regmap_add_irq_chip(rk808->regmap, client->irq, 744 - IRQF_ONESHOT, -1, 745 - rk808->regmap_irq_chip, &rk808->irq_data); 748 + ret = devm_regmap_add_irq_chip(&client->dev, rk808->regmap, client->irq, 749 + IRQF_ONESHOT, -1, 750 + rk808->regmap_irq_chip, &rk808->irq_data); 746 751 if (ret) { 747 752 dev_err(&client->dev, "Failed to add irq_chip %d\n", ret); 748 753 return ret; ··· 766 771 regmap_irq_get_domain(rk808->irq_data)); 767 772 if (ret) { 768 773 dev_err(&client->dev, "failed to add MFD devices %d\n", ret); 769 - goto err_irq; 774 + return ret; 770 775 } 771 776 772 777 if (of_property_read_bool(np, "rockchip,system-power-controller")) { 773 - rk808_i2c_client = client; 774 - pm_power_off = rk808_pm_power_off; 778 + ret = devm_register_sys_off_handler(&client->dev, 779 + SYS_OFF_MODE_POWER_OFF_PREPARE, SYS_OFF_PRIO_HIGH, 780 + &rk808_power_off, rk808); 781 + if (ret) 782 + return dev_err_probe(&client->dev, ret, 783 + "failed to register poweroff handler\n"); 775 784 776 785 switch (rk808->variant) { 777 786 case RK809_ID: 778 787 case RK817_ID: 779 - ret = register_restart_handler(&rk808_restart_handler); 788 + ret = devm_register_sys_off_handler(&client->dev, 789 + SYS_OFF_MODE_RESTART, SYS_OFF_PRIO_HIGH, 790 + &rk808_restart, rk808); 780 791 if (ret) 781 792 dev_warn(&client->dev, "failed to register rst handler, %d\n", ret); 782 793 break; ··· 793 792 } 794 793 795 794 return 0; 796 - 797 - err_irq: 798 - regmap_del_irq_chip(client->irq, rk808->irq_data); 799 - return ret; 800 - } 801 - 802 - static void rk808_remove(struct i2c_client *client) 803 - { 804 - struct rk808 *rk808 = i2c_get_clientdata(client); 805 - 806 - regmap_del_irq_chip(client->irq, rk808->irq_data); 807 - 808 - /** 809 - * pm_power_off may points to a function from another module. 810 - * Check if the pointer is set by us and only then overwrite it. 811 - */ 812 - if (pm_power_off == rk808_pm_power_off) 813 - pm_power_off = NULL; 814 - 815 - unregister_restart_handler(&rk808_restart_handler); 816 795 } 817 796 818 797 static int __maybe_unused rk8xx_suspend(struct device *dev) ··· 849 868 .pm = &rk8xx_pm_ops, 850 869 }, 851 870 .probe_new = rk808_probe, 852 - .remove = rk808_remove, 853 871 .shutdown = rk8xx_shutdown, 854 872 }; 855 873