mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Uwe Kleine-König" <u.kleine-koenig@baylibre.com>
To: Eddie James <eajames@linux.ibm.com>
Cc: Ninad Palsule <ninad@linux.ibm.com>,
	linux-fsi@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: [PATCH 07/12] fsi: Create bus specific probe and remove functions
Date: Sat, 29 Nov 2025 17:57:43 +0100	[thread overview]
Message-ID: <20fbddeac9962e35db315a731c3a7ea360803efc.1764434226.git.ukleinek@kernel.org> (raw)
In-Reply-To: <cover.1764434226.git.ukleinek@kernel.org>

Introduce a bus specific probe and remove function. For now this only
allows to get rid of a cast of the generic device to an fsi device in the
drivers and changes the remove prototype to return void---a non-zero
return value is ignored anyhow.

The objective is to get rid of users of struct device callbacks
.probe(), .remove() and .shutdown() to eventually remove these.

Until all fsi drivers are converted this results in a runtime warning
about the drivers needing an update because there is a bus probe
function and a driver probe function.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
---
 drivers/fsi/fsi-core.c | 50 ++++++++++++++++++++++++++++++++++++++++++
 include/linux/fsi.h    |  2 ++
 2 files changed, 52 insertions(+)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index 4e60d4b17c11..83599a1c548b 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -128,9 +128,31 @@ static int fsi_bus_match(struct device *dev, const struct device_driver *drv)
 	return 0;
 }
 
+static int fsi_probe(struct device *dev)
+{
+	struct fsi_device *fsidev = to_fsi_dev(dev);
+	struct fsi_driver *fsidrv = to_fsi_drv(dev->driver);
+
+	if (fsidrv->probe)
+		return fsidrv->probe(fsidev);
+	else
+		return 0;
+}
+
+static void fsi_remove(struct device *dev)
+{
+	struct fsi_device *fsidev = to_fsi_dev(dev);
+	struct fsi_driver *fsidrv = to_fsi_drv(dev->driver);
+
+	if (fsidrv->remove)
+		fsidrv->remove(fsidev);
+}
+
 static const struct bus_type fsi_bus_type = {
 	.name = "fsi",
 	.match = fsi_bus_match,
+	.probe = fsi_probe,
+	.remove = fsi_remove,
 };
 
 /*
@@ -1392,6 +1414,25 @@ void fsi_master_unregister(struct fsi_master *master)
 }
 EXPORT_SYMBOL_GPL(fsi_master_unregister);
 
+static int fsi_legacy_probe(struct fsi_device *fsidev)
+{
+	struct device *dev = &fsidev->dev;
+	struct device_driver *driver = dev->driver;
+
+	return driver->probe(dev);
+}
+
+static void fsi_legacy_remove(struct fsi_device *fsidev)
+{
+	struct device *dev = &fsidev->dev;
+	struct device_driver *driver = dev->driver;
+	int ret;
+
+	ret = driver->remove(dev);
+	if (unlikely(ret))
+		dev_warn(dev, "Ignoring return value of remove callback (%pe)\n", ERR_PTR(ret));
+}
+
 int fsi_driver_register(struct fsi_driver *fsi_drv)
 {
 	if (!fsi_drv)
@@ -1401,6 +1442,15 @@ int fsi_driver_register(struct fsi_driver *fsi_drv)
 
 	fsi_drv->drv.bus = &fsi_bus_type;
 
+	/*
+	 * This driver needs updating. Note that driver_register() warns about
+	 * this, so we're not adding another warning here.
+	 */
+	if (!fsi_drv->probe && fsi_drv->drv.probe)
+		fsi_drv->probe = fsi_legacy_probe;
+	if (!fsi_drv->remove && fsi_drv->drv.remove)
+		fsi_drv->remove = fsi_legacy_remove;
+
 	return driver_register(&fsi_drv->drv);
 }
 EXPORT_SYMBOL_GPL(fsi_driver_register);
diff --git a/include/linux/fsi.h b/include/linux/fsi.h
index 3e3a8f3adac3..9c67c43f9e6c 100644
--- a/include/linux/fsi.h
+++ b/include/linux/fsi.h
@@ -49,6 +49,8 @@ struct fsi_device_id {
 	.engine_type = (t), .version = (v),
 
 struct fsi_driver {
+	int (*probe)(struct fsi_device *fsidev);
+	void (*remove)(struct fsi_device *fsidev);
 	struct device_driver		drv;
 	const struct fsi_device_id	*id_table;
 };
-- 
2.47.3


  parent reply	other threads:[~2025-11-29 16:58 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-29 16:57 [PATCH 00/12] fsi: Convert to bus probe mechanism Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 01/12] fsi: Make use of module_fsi_driver() Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 02/12] fsi: Assign driver's bus in fsi_driver_register() Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 03/12] fsi: Provide thin wrappers around dev_[gs]et_data() for fsi devices Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 04/12] i2c: fsi: Drop assigning fsi bus Uwe Kleine-König
2025-12-03 17:07   ` Andi Shyti
2025-12-04 11:18     ` Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 05/12] spi: " Uwe Kleine-König
2025-12-02 17:46   ` Mark Brown
2025-11-29 16:57 ` [PATCH 06/12] fsi: Make fsi_bus_type a private variable to the core Uwe Kleine-König
2025-11-29 16:57 ` Uwe Kleine-König [this message]
2025-11-29 16:57 ` [PATCH 08/12] fsi: master: Convert to fsi bus probe mechanism Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 09/12] fsi: sbefifo: " Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 10/12] fsi: scom: " Uwe Kleine-König
2025-11-29 16:57 ` [PATCH 11/12] i2c: fsi: " Uwe Kleine-König
2025-12-03 17:12   ` Andi Shyti
2025-11-29 16:57 ` [PATCH 12/12] spi: " Uwe Kleine-König
2025-12-02 17:46   ` Mark Brown
2025-12-05 15:30 ` [PATCH 00/12] fsi: Convert to " Uwe Kleine-König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20fbddeac9962e35db315a731c3a7ea360803efc.1764434226.git.ukleinek@kernel.org \
    --to=u.kleine-koenig@baylibre.com \
    --cc=eajames@linux.ibm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-fsi@lists.ozlabs.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ninad@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®