diff mbox series

[12/19] firmware: turris-mox-rwtm: Convert rest to devm_* and get rid of driver .remove()

Message ID 20240612135443.30239-13-kabel@kernel.org (mailing list archive)
State Superseded
Headers show
Series Updates for turris-mox-rwtm driver | expand

Commit Message

Marek Behún June 12, 2024, 1:54 p.m. UTC
Use devm resource management for driver's kobject and mailbox. This
allows us to get rid of driver's .remove() method and gotos in .probe().

Signed-off-by: Marek Behún <kabel@kernel.org>
---
 drivers/firmware/turris-mox-rwtm.c | 41 +++++++++++++++---------------
 1 file changed, 20 insertions(+), 21 deletions(-)
diff mbox series

Patch

diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index cdbe244be694..153772721901 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -139,6 +139,11 @@  static const struct kobj_type mox_kobj_ktype = {
 	.default_groups	= mox_rwtm_groups,
 };
 
+static void mox_devm_kobj_release(void *kobj)
+{
+	kobject_put(kobj);
+}
+
 static int mox_kobj_create(struct mox_rwtm *rwtm)
 {
 	struct kobject *kobj = &rwtm->kobj;
@@ -146,11 +151,11 @@  static int mox_kobj_create(struct mox_rwtm *rwtm)
 
 	kobject_init(kobj, &mox_kobj_ktype);
 
-	ret = kobject_add(kobj, firmware_kobj, "turris-mox-rwtm");
+	ret = devm_add_action_or_reset(rwtm->dev, mox_devm_kobj_release, kobj);
 	if (ret)
-		kobject_put(kobj);
+		return ret;
 
-	return ret;
+	return kobject_add(kobj, firmware_kobj, "turris-mox-rwtm");
 }
 
 static int mox_get_status(enum mbox_cmd cmd, u32 retval)
@@ -453,6 +458,11 @@  static inline void rwtm_register_debugfs(struct mox_rwtm *rwtm)
 }
 #endif
 
+static void rwtm_devm_mbox_release(void *mbox)
+{
+	mbox_free_channel(mbox);
+}
+
 static int turris_mox_rwtm_probe(struct platform_device *pdev)
 {
 	struct mox_rwtm *rwtm;
@@ -488,9 +498,13 @@  static int turris_mox_rwtm_probe(struct platform_device *pdev)
 		if (ret != -EPROBE_DEFER)
 			dev_err(dev, "Cannot request mailbox channel: %i\n",
 				ret);
-		goto put_kobj;
+		return ret;
 	}
 
+	ret = devm_add_action_or_reset(dev, rwtm_devm_mbox_release, rwtm->mbox);
+	if (ret < 0)
+		return ret;
+
 	init_completion(&rwtm->cmd_done);
 
 	ret = mox_get_board_info(rwtm);
@@ -501,7 +515,7 @@  static int turris_mox_rwtm_probe(struct platform_device *pdev)
 	if (ret < 0) {
 		dev_notice(dev,
 			   "Firmware does not support the GET_RANDOM command\n");
-		goto free_channel;
+		return ret;
 	}
 
 	rwtm->hwrng.name = DRIVER_NAME "_hwrng";
@@ -511,7 +525,7 @@  static int turris_mox_rwtm_probe(struct platform_device *pdev)
 	ret = devm_hwrng_register(dev, &rwtm->hwrng);
 	if (ret < 0) {
 		dev_err(dev, "Cannot register HWRNG: %i\n", ret);
-		goto free_channel;
+		return ret;
 	}
 
 	rwtm_register_debugfs(rwtm);
@@ -519,20 +533,6 @@  static int turris_mox_rwtm_probe(struct platform_device *pdev)
 	dev_info(dev, "HWRNG successfully registered\n");
 
 	return 0;
-
-free_channel:
-	mbox_free_channel(rwtm->mbox);
-put_kobj:
-	kobject_put(&rwtm->kobj);
-	return ret;
-}
-
-static void turris_mox_rwtm_remove(struct platform_device *pdev)
-{
-	struct mox_rwtm *rwtm = platform_get_drvdata(pdev);
-
-	kobject_put(&rwtm->kobj);
-	mbox_free_channel(rwtm->mbox);
 }
 
 static const struct of_device_id turris_mox_rwtm_match[] = {
@@ -545,7 +545,6 @@  MODULE_DEVICE_TABLE(of, turris_mox_rwtm_match);
 
 static struct platform_driver turris_mox_rwtm_driver = {
 	.probe	= turris_mox_rwtm_probe,
-	.remove_new = turris_mox_rwtm_remove,
 	.driver	= {
 		.name		= DRIVER_NAME,
 		.of_match_table	= turris_mox_rwtm_match,