From: "Uwe Kleine-König (The Capable Hub)" <u.kleine-koenig@baylibre.com>
To: Lee Jones <lee@kernel.org>
Cc: mfd@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: [PATCH v3 03/23] mfd: kempld: Simplify device abstraction
Date: Thu, 9 Jul 2026 18:58:22 +0200 [thread overview]
Message-ID: <03fa806b7c0fa6a68d34384f694cbe83a17fba90.1783615311.git.u.kleine-koenig@baylibre.com> (raw)
In-Reply-To: <cover.1783615311.git.u.kleine-koenig@baylibre.com>
The devices that are created by the driver from DMI data and also ACPI
devices all use the same platform data. Other devices don't exist. (A
provider of such a device would need to know about struct
kempld_platform_data, but none of the other consumers of
<linux/mfd/kempld.h> creates devices.)
Simplify the driver by hardcoding this instead of using the ACPI
abstraction for multi-variant support without real variants.
Then apart from .gpio_base all members of `struct kempld_platform_data`
are only used in drivers/mfd/kempld-core.c, so they can be dropped.
Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
---
drivers/mfd/kempld-core.c | 66 ++++++++++----------------------------
include/linux/mfd/kempld.h | 12 -------
2 files changed, 17 insertions(+), 61 deletions(-)
diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
index b64729918dfd..839328bce150 100644
--- a/drivers/mfd/kempld-core.c
+++ b/drivers/mfd/kempld-core.c
@@ -118,25 +118,19 @@ static struct resource kempld_ioresource = {
};
static const struct kempld_platform_data kempld_platform_data_generic = {
- .pld_clock = KEMPLD_CLK,
- .ioresource = &kempld_ioresource,
- .get_hardware_mutex = kempld_get_hardware_mutex,
- .release_hardware_mutex = kempld_release_hardware_mutex,
- .get_info = kempld_get_info_generic,
- .register_cells = kempld_register_cells_generic,
};
static struct platform_device *kempld_pdev;
-static int kempld_create_platform_device(const struct kempld_platform_data *pdata)
+static int kempld_create_platform_device(void)
{
const struct platform_device_info pdevinfo = {
.name = "kempld",
.id = PLATFORM_DEVID_NONE,
- .res = pdata->ioresource,
+ .res = &kempld_ioresource,
.num_res = 1,
- .data = pdata,
- .size_data = sizeof(*pdata),
+ .data = &kempld_platform_data_generic,
+ .size_data = sizeof(kempld_platform_data_generic),
};
kempld_pdev = platform_device_register_full(&pdevinfo);
@@ -235,10 +229,8 @@ EXPORT_SYMBOL_GPL(kempld_write32);
*/
void kempld_get_mutex(struct kempld_device_data *pld)
{
- const struct kempld_platform_data *pdata = dev_get_platdata(pld->dev);
-
mutex_lock(&pld->lock);
- pdata->get_hardware_mutex(pld);
+ kempld_get_hardware_mutex(pld);
}
EXPORT_SYMBOL_GPL(kempld_get_mutex);
@@ -248,9 +240,7 @@ EXPORT_SYMBOL_GPL(kempld_get_mutex);
*/
void kempld_release_mutex(struct kempld_device_data *pld)
{
- const struct kempld_platform_data *pdata = dev_get_platdata(pld->dev);
-
- pdata->release_hardware_mutex(pld);
+ kempld_release_hardware_mutex(pld);
mutex_unlock(&pld->lock);
}
EXPORT_SYMBOL_GPL(kempld_release_mutex);
@@ -266,10 +256,9 @@ EXPORT_SYMBOL_GPL(kempld_release_mutex);
static int kempld_get_info(struct kempld_device_data *pld)
{
int ret;
- const struct kempld_platform_data *pdata = dev_get_platdata(pld->dev);
char major, minor;
- ret = pdata->get_info(pld);
+ ret = kempld_get_info_generic(pld);
if (ret)
return ret;
@@ -296,20 +285,6 @@ static int kempld_get_info(struct kempld_device_data *pld)
return 0;
}
-/*
- * kempld_register_cells - register cell drivers
- *
- * This function registers cell drivers for the detected hardware by calling
- * the configured kempld_register_cells_XXXX function which is responsible
- * to detect and register the needed cell drivers.
- */
-static int kempld_register_cells(struct kempld_device_data *pld)
-{
- const struct kempld_platform_data *pdata = dev_get_platdata(pld->dev);
-
- return pdata->register_cells(pld);
-}
-
static const char *kempld_get_type_string(struct kempld_device_data *pld)
{
const char *version_type;
@@ -399,12 +374,12 @@ static int kempld_detect_device(struct kempld_device_data *pld)
pld->info.version, kempld_get_type_string(pld),
pld->info.spec_major, pld->info.spec_minor);
- return kempld_register_cells(pld);
+ return kempld_register_cells_generic(pld);
}
static int kempld_probe(struct platform_device *pdev)
{
- const struct kempld_platform_data *pdata;
+ const struct kempld_platform_data *pdata = &kempld_platform_data_generic;
struct device *dev = &pdev->dev;
struct kempld_device_data *pld;
struct resource *ioport;
@@ -415,16 +390,10 @@ static int kempld_probe(struct platform_device *pdev)
* No kempld_pdev device has been registered in kempld_init,
* so we seem to be probing an ACPI platform device.
*/
- pdata = device_get_match_data(dev);
- if (!pdata)
- return -ENODEV;
-
- ret = platform_device_add_data(pdev, pdata, sizeof(*pdata));
+ ret = platform_device_add_data(pdev, pdata, sizeof(pdata));
if (ret)
return ret;
- } else if (kempld_pdev == pdev) {
- pdata = dev_get_platdata(dev);
- } else {
+ } else if (kempld_pdev != pdev) {
/*
* The platform device we are probing is not the one we
* registered in kempld_init using the DMI table, so this one
@@ -451,7 +420,7 @@ static int kempld_probe(struct platform_device *pdev)
pld->io_index = pld->io_base;
pld->io_data = pld->io_base + 1;
- pld->pld_clock = pdata->pld_clock;
+ pld->pld_clock = KEMPLD_CLK;
pld->dev = dev;
mutex_init(&pld->lock);
@@ -463,15 +432,14 @@ static int kempld_probe(struct platform_device *pdev)
static void kempld_remove(struct platform_device *pdev)
{
struct kempld_device_data *pld = platform_get_drvdata(pdev);
- const struct kempld_platform_data *pdata = dev_get_platdata(pld->dev);
mfd_remove_devices(&pdev->dev);
- pdata->release_hardware_mutex(pld);
+ kempld_release_hardware_mutex(pld);
}
static const struct acpi_device_id kempld_acpi_table[] = {
- { "KEM0000", (kernel_ulong_t)&kempld_platform_data_generic },
- { "KEM0001", (kernel_ulong_t)&kempld_platform_data_generic },
+ { "KEM0000" },
+ { "KEM0001" },
{}
};
MODULE_DEVICE_TABLE(acpi, kempld_acpi_table);
@@ -787,13 +755,13 @@ static int __init kempld_init(void)
if (force_device_id[0]) {
for (id = kempld_dmi_table; id->matches[0].slot != DMI_NONE; id++)
if (strstr(id->ident, force_device_id))
- if (!kempld_create_platform_device(&kempld_platform_data_generic))
+ if (!kempld_create_platform_device())
break;
if (id->matches[0].slot == DMI_NONE)
return -ENODEV;
} else {
for (id = dmi_first_match(kempld_dmi_table); id; id = dmi_first_match(id+1))
- if (kempld_create_platform_device(&kempld_platform_data_generic))
+ if (kempld_create_platform_device())
break;
}
return platform_driver_register(&kempld_driver);
diff --git a/include/linux/mfd/kempld.h b/include/linux/mfd/kempld.h
index 5d75071eaaea..d7a823ba1a7a 100644
--- a/include/linux/mfd/kempld.h
+++ b/include/linux/mfd/kempld.h
@@ -97,22 +97,10 @@ struct kempld_device_data {
/**
* struct kempld_platform_data - PLD hardware configuration structure
- * @pld_clock: PLD clock frequency
* @gpio_base: GPIO base pin number
- * @ioresource: IO addresses of the PLD
- * @get_hardware_mutex: PLD specific get_mutex callback
- * @release_hardware_mutex: PLD specific release_mutex callback
- * @get_info: PLD specific get_info callback
- * @register_cells: PLD specific register_cells callback
*/
struct kempld_platform_data {
- u32 pld_clock;
int gpio_base;
- struct resource *ioresource;
- void (*get_hardware_mutex) (struct kempld_device_data *);
- void (*release_hardware_mutex) (struct kempld_device_data *);
- int (*get_info) (struct kempld_device_data *);
- int (*register_cells) (struct kempld_device_data *);
};
extern void kempld_get_mutex(struct kempld_device_data *pld);
--
2.55.0.11.g153666a7d9bb
next prev parent reply other threads:[~2026-07-09 17:00 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-09 16:58 [PATCH v3 00/23] mfd: Use named initializers for arrays of *_device_data Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 01/23] mfd: bcm2835-pm: Remove member of struct bcm2835_pm that is only used locally Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 02/23] mfd: bcm2835-pm: Drop unused header Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` Uwe Kleine-König (The Capable Hub) [this message]
2026-07-09 16:58 ` [PATCH v3 04/23] mfd: lp87565: Explicitly set driver data for the generic dt compatible Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 05/23] mfd: mt6360: Drop irrelevant __maybe_unused Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 06/23] mfd: rt4831: " Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 07/23] mfd: loongson-se: Drop unused assignment of acpi_device_id driver data Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 08/23] mfd: Drop unused assignment of i2c_device_id " Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 09/23] mfd: Drop unused assignment of platform_device_id " Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 10/23] mfd: Drop unused assignment of spi_device_id " Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 11/23] mfd: Use named initializers for acpi_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 12/23] mfd: intel-m10-bmc-pmci: Use named initializers for dfl_device_id array Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 13/23] mfd: Use named initializers for arrays of i2c_device_id Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 14/23] mfd: twl6030: Use named initializers for of_device_id Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 15/23] mfd: Use PCI_DEVICE* macros to initialize pci_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 16/23] mfd: Use named initializers for platform_device_id array Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 17/23] mfd: Use named initializers for arrays of spi_device_id Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 18/23] mfd: Unify style of acpi_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 19/23] mfd: Unify style of dmi_system_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 20/23] mfd: Unify style of i2c_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 21/23] mfd: Unify style of of_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-10 10:21 ` Geert Uytterhoeven
2026-07-10 13:00 ` Mathieu Dubois-Briand
2026-07-10 13:15 ` Krzysztof Kozlowski
2026-07-10 16:54 ` Charles Keepax
2026-07-09 16:58 ` [PATCH v3 22/23] mfd: Unify style of pci_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-09 16:58 ` [PATCH v3 23/23] mfd: Unify style of spi_device_id arrays Uwe Kleine-König (The Capable Hub)
2026-07-10 19:45 ` [PATCH v3 00/23] mfd: Use named initializers for arrays of *_device_data Linus Walleij
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=03fa806b7c0fa6a68d34384f694cbe83a17fba90.1783615311.git.u.kleine-koenig@baylibre.com \
--to=u.kleine-koenig@baylibre.com \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mfd@lists.linux.dev \
/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