From: "André Draszik" <andre.draszik@linaro.org>
To: Krzysztof Kozlowski <krzk@kernel.org>, Lee Jones <lee@kernel.org>,
Rob Herring <robh@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Chanwoo Choi <cw00.choi@samsung.com>,
Alim Akhtar <alim.akhtar@samsung.com>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: "Peter Griffin" <peter.griffin@linaro.org>,
"Tudor Ambarus" <tudor.ambarus@linaro.org>,
"Will McVicker" <willmcvicker@google.com>,
kernel-team@android.com, linux-kernel@vger.kernel.org,
linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org,
linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-rtc@vger.kernel.org,
"André Draszik" <andre.draszik@linaro.org>
Subject: [PATCH v2 17/32] mfd: sec: rework platform data and regmap instantiating
Date: Fri, 28 Mar 2025 13:29:03 +0000 [thread overview]
Message-ID: <20250328-s2mpg10-v2-17-b54dee33fb6b@linaro.org> (raw)
In-Reply-To: <20250328-s2mpg10-v2-0-b54dee33fb6b@linaro.org>
Instead of a large open-coded switch statement, just add both regmap
config and device type to the OF match data. This allows us to have all
related information in one place, and avoids a long switch() statement.
Signed-off-by: André Draszik <andre.draszik@linaro.org>
---
v2: fix typo in platform data for "samsung,s2mps14-pmic"
---
drivers/mfd/sec-i2c.c | 133 +++++++++++++++++++++++++-------------------------
1 file changed, 66 insertions(+), 67 deletions(-)
diff --git a/drivers/mfd/sec-i2c.c b/drivers/mfd/sec-i2c.c
index 81f90003eea2a40f2caaebb49fc9494b89370e7f..41b09f5e3c49f410604a5d47e625cbb37d7f5fa2 100644
--- a/drivers/mfd/sec-i2c.c
+++ b/drivers/mfd/sec-i2c.c
@@ -20,11 +20,16 @@
#include <linux/mfd/samsung/s5m8767.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
-#include <linux/of.h>
#include <linux/pm.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include "sec-core.h"
+struct sec_pmic_i2c_platform_data {
+ const struct regmap_config *regmap_cfg;
+ unsigned long device_type;
+};
+
static bool s2mpa01_volatile(struct device *dev, unsigned int reg)
{
switch (reg) {
@@ -136,52 +141,20 @@ static const struct regmap_config s5m8767_regmap_config = {
static int sec_pmic_i2c_probe(struct i2c_client *client)
{
- const struct regmap_config *regmap;
- unsigned long device_type;
+ const struct sec_pmic_i2c_platform_data *pdata;
struct regmap *regmap_pmic;
- device_type = (unsigned long)of_device_get_match_data(&client->dev);
-
- switch (device_type) {
- case S2DOS05:
- regmap = &s2dos05_regmap_config;
- break;
- case S2MPA01:
- regmap = &s2mpa01_regmap_config;
- break;
- case S2MPS11X:
- regmap = &s2mps11_regmap_config;
- break;
- case S2MPS13X:
- regmap = &s2mps13_regmap_config;
- break;
- case S2MPS14X:
- regmap = &s2mps14_regmap_config;
- break;
- case S2MPS15X:
- regmap = &s2mps15_regmap_config;
- break;
- case S2MPU02:
- regmap = &s2mpu02_regmap_config;
- break;
- case S2MPU05:
- regmap = &s2mpu05_regmap_config;
- break;
- case S5M8767X:
- regmap = &s5m8767_regmap_config;
- break;
- default:
+ pdata = device_get_match_data(&client->dev);
+ if (!pdata)
return dev_err_probe(&client->dev, -ENODEV,
- "Unsupported device type %lu\n",
- device_type);
- }
+ "Unsupported device type\n");
- regmap_pmic = devm_regmap_init_i2c(client, regmap);
+ regmap_pmic = devm_regmap_init_i2c(client, pdata->regmap_cfg);
if (IS_ERR(regmap_pmic))
return dev_err_probe(&client->dev, PTR_ERR(regmap_pmic),
"regmap init failed\n");
- return sec_pmic_probe(&client->dev, device_type, client->irq,
+ return sec_pmic_probe(&client->dev, pdata->device_type, client->irq,
regmap_pmic, client);
}
@@ -190,35 +163,61 @@ static void sec_pmic_i2c_shutdown(struct i2c_client *i2c)
sec_pmic_shutdown(&i2c->dev);
}
+static const struct sec_pmic_i2c_platform_data s2dos05_data = {
+ .regmap_cfg = &s2dos05_regmap_config,
+ .device_type = S2DOS05
+};
+
+static const struct sec_pmic_i2c_platform_data s2mpa01_data = {
+ .regmap_cfg = &s2mpa01_regmap_config,
+ .device_type = S2MPA01,
+};
+
+static const struct sec_pmic_i2c_platform_data s2mps11_data = {
+ .regmap_cfg = &s2mps11_regmap_config,
+ .device_type = S2MPS11X,
+};
+
+static const struct sec_pmic_i2c_platform_data s2mps13_data = {
+ .regmap_cfg = &s2mps13_regmap_config,
+ .device_type = S2MPS13X,
+};
+
+static const struct sec_pmic_i2c_platform_data s2mps14_data = {
+ .regmap_cfg = &s2mps14_regmap_config,
+ .device_type = S2MPS14X,
+};
+
+static const struct sec_pmic_i2c_platform_data s2mps15_data = {
+ .regmap_cfg = &s2mps15_regmap_config,
+ .device_type = S2MPS15X,
+};
+
+static const struct sec_pmic_i2c_platform_data s2mpu02_data = {
+ .regmap_cfg = &s2mpu02_regmap_config,
+ .device_type = S2MPU02,
+};
+
+static const struct sec_pmic_i2c_platform_data s2mpu05_data = {
+ .regmap_cfg = &s2mpu05_regmap_config,
+ .device_type = S2MPU05,
+};
+
+static const struct sec_pmic_i2c_platform_data s5m8767_data = {
+ .regmap_cfg = &s5m8767_regmap_config,
+ .device_type = S5M8767X,
+};
+
static const struct of_device_id sec_pmic_i2c_of_match[] = {
- {
- .compatible = "samsung,s2dos05",
- .data = (void *)S2DOS05,
- }, {
- .compatible = "samsung,s2mpa01-pmic",
- .data = (void *)S2MPA01,
- }, {
- .compatible = "samsung,s2mps11-pmic",
- .data = (void *)S2MPS11X,
- }, {
- .compatible = "samsung,s2mps13-pmic",
- .data = (void *)S2MPS13X,
- }, {
- .compatible = "samsung,s2mps14-pmic",
- .data = (void *)S2MPS14X,
- }, {
- .compatible = "samsung,s2mps15-pmic",
- .data = (void *)S2MPS15X,
- }, {
- .compatible = "samsung,s2mpu02-pmic",
- .data = (void *)S2MPU02,
- }, {
- .compatible = "samsung,s2mpu05-pmic",
- .data = (void *)S2MPU05,
- }, {
- .compatible = "samsung,s5m8767-pmic",
- .data = (void *)S5M8767X,
- },
+ { .compatible = "samsung,s2dos05", .data = &s2dos05_data, },
+ { .compatible = "samsung,s2mpa01-pmic", .data = &s2mpa01_data, },
+ { .compatible = "samsung,s2mps11-pmic", .data = &s2mps11_data, },
+ { .compatible = "samsung,s2mps13-pmic", .data = &s2mps13_data, },
+ { .compatible = "samsung,s2mps14-pmic", .data = &s2mps14_data, },
+ { .compatible = "samsung,s2mps15-pmic", .data = &s2mps15_data, },
+ { .compatible = "samsung,s2mpu02-pmic", .data = &s2mpu02_data, },
+ { .compatible = "samsung,s2mpu05-pmic", .data = &s2mpu05_data, },
+ { .compatible = "samsung,s5m8767-pmic", .data = &s5m8767_data, },
{ },
};
MODULE_DEVICE_TABLE(of, sec_pmic_i2c_of_match);
--
2.49.0.472.ge94155a9ec-goog
next prev parent reply other threads:[~2025-03-28 13:31 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-28 13:28 [PATCH v2 00/32] Samsung S2MPG10 PMIC MFD-based drivers André Draszik
2025-03-28 13:28 ` [PATCH v2 01/32] dt-bindings: mfd: samsung,s2mps11: add s2mpg10 André Draszik
2025-03-31 7:34 ` Krzysztof Kozlowski
2025-03-31 9:50 ` André Draszik
2025-06-24 8:51 ` Krzysztof Kozlowski
2025-03-28 13:28 ` [PATCH v2 02/32] dt-bindings: clock: " André Draszik
2025-03-28 13:28 ` [PATCH v2 03/32] dt-bindings: firmware: google,gs101-acpm-ipc: add PMIC child node André Draszik
2025-03-31 7:35 ` Krzysztof Kozlowski
2025-03-28 13:28 ` [PATCH v2 04/32] mfd: sec: drop non-existing forward declarations André Draszik
2025-03-28 13:28 ` [PATCH v2 05/32] mfd: sec: sort includes alphabetically André Draszik
2025-03-28 13:28 ` [PATCH v2 06/32] mfd: sec: update includes to add missing and remove superfluous ones André Draszik
2025-03-28 13:28 ` [PATCH v2 07/32] mfd: sec: move private internal API to internal header André Draszik
2025-03-28 13:28 ` [PATCH v2 08/32] mfd: sec: split into core and transport (i2c) drivers André Draszik
2025-03-28 13:28 ` [PATCH v2 09/32] mfd: sec: add support for S2MPG10 PMIC André Draszik
2025-03-28 13:28 ` [PATCH v2 10/32] mfd: sec: merge separate core and irq modules André Draszik
2025-03-28 13:28 ` [PATCH v2 11/32] mfd: sec: fix open parenthesis alignment (multiple) André Draszik
2025-03-28 13:28 ` [PATCH v2 12/32] mfd: sec: sort struct of_device_id entries and the device type switch André Draszik
2025-03-28 13:28 ` [PATCH v2 13/32] mfd: sec: use dev_err_probe() where appropriate André Draszik
2025-03-28 13:29 ` [PATCH v2 14/32] mfd: sec: s2dos05/s2mpu05: use explicit regmap config and drop default André Draszik
2025-03-28 13:29 ` [PATCH v2 15/32] mfd: sec: s2dos05: doesn't support interrupts (it seems) André Draszik
2025-03-28 13:29 ` [PATCH v2 16/32] mfd: sec: don't ignore errors from sec_irq_init() André Draszik
2025-03-28 13:29 ` André Draszik [this message]
2025-03-28 13:29 ` [PATCH v2 18/32] mfd: sec: change device_type to int André Draszik
2025-03-28 13:29 ` [PATCH v2 19/32] mfd: sec: don't compare against NULL / 0 for errors, use ! André Draszik
2025-03-28 13:29 ` [PATCH v2 20/32] mfd: sec: use sizeof(*var), not sizeof(struct type_of_var) André Draszik
2025-03-28 13:29 ` [PATCH v2 21/32] mfd: sec: convert to using MFD_CELL macros André Draszik
2025-03-28 13:29 ` [PATCH v2 22/32] mfd: sec: convert to using REGMAP_IRQ_REG() macros André Draszik
2025-03-28 13:29 ` [PATCH v2 23/32] mfd: sec: add myself as module author André Draszik
2025-03-28 13:29 ` [PATCH v2 24/32] clk: s2mps11: add support for S2MPG10 PMIC clock André Draszik
2025-03-28 13:29 ` [PATCH v2 25/32] rtc: s5m: cache value of platform_get_device_id() during probe André Draszik
2025-03-28 13:29 ` [PATCH v2 26/32] rtc: s5m: prepare for external regmap André Draszik
2025-03-28 13:29 ` [PATCH v2 27/32] rtc: s5m: add support for S2MPG10 RTC André Draszik
2025-03-28 13:29 ` [PATCH v2 28/32] rtc: s5m: fix a typo: peding -> pending André Draszik
2025-03-28 13:29 ` [PATCH v2 29/32] rtc: s5m: switch to devm_device_init_wakeup André Draszik
2025-03-28 13:29 ` [PATCH v2 30/32] rtc: s5m: replace regmap_update_bits with regmap_clear/set_bits André Draszik
2025-03-28 13:29 ` [PATCH v2 31/32] rtc: s5m: replace open-coded read/modify/write registers with regmap helpers André Draszik
2025-03-28 13:29 ` [PATCH v2 32/32] MAINTAINERS: add myself as reviewer for Samsung S2M MFD André Draszik
2025-03-28 13:40 ` [PATCH v2 00/32] Samsung S2MPG10 PMIC MFD-based drivers André Draszik
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=20250328-s2mpg10-v2-17-b54dee33fb6b@linaro.org \
--to=andre.draszik@linaro.org \
--cc=alexandre.belloni@bootlin.com \
--cc=alim.akhtar@samsung.com \
--cc=catalin.marinas@arm.com \
--cc=conor+dt@kernel.org \
--cc=cw00.choi@samsung.com \
--cc=devicetree@vger.kernel.org \
--cc=kernel-team@android.com \
--cc=krzk@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rtc@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mturquette@baylibre.com \
--cc=peter.griffin@linaro.org \
--cc=robh@kernel.org \
--cc=s.nawrocki@samsung.com \
--cc=sboyd@kernel.org \
--cc=tudor.ambarus@linaro.org \
--cc=will@kernel.org \
--cc=willmcvicker@google.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;
as well as URLs for NNTP newsgroup(s).