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>,
"Krzysztof Kozlowski" <krzysztof.kozlowski@linaro.org>
Subject: [PATCH v4 17/32] mfd: sec-i2c: Rework platform data and regmap instantiating
Date: Wed, 09 Apr 2025 21:37:38 +0100 [thread overview]
Message-ID: <20250409-s2mpg10-v4-17-d66d5f39b6bf@linaro.org> (raw)
In-Reply-To: <20250409-s2mpg10-v4-0-d66d5f39b6bf@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.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
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.604.gff1f9ca942-goog
next prev parent reply other threads:[~2025-04-09 20:37 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-09 20:37 [PATCH v4 00/32] Samsung S2MPG10 PMIC MFD-based drivers André Draszik
2025-04-09 20:37 ` [PATCH v4 01/32] dt-bindings: mfd: samsung,s2mps11: add s2mpg10 André Draszik
2025-04-09 20:37 ` [PATCH v4 02/32] dt-bindings: clock: " André Draszik
2025-06-16 11:43 ` André Draszik
2025-06-27 12:15 ` André Draszik
2025-07-10 6:13 ` André Draszik
2025-04-09 20:37 ` [PATCH v4 03/32] dt-bindings: firmware: google,gs101-acpm-ipc: add PMIC child node André Draszik
2025-04-10 6:27 ` (subset) " Krzysztof Kozlowski
2025-04-09 20:37 ` [PATCH v4 04/32] mfd: sec-core: Drop non-existing forward declarations André Draszik
2025-04-09 20:37 ` [PATCH v4 05/32] mfd: sec: Sort includes alphabetically André Draszik
2025-04-09 20:37 ` [PATCH v4 06/32] mfd: sec: Update includes to add missing and remove superfluous ones André Draszik
2025-04-09 20:37 ` [PATCH v4 07/32] mfd: sec: Move private internal API to internal header André Draszik
2025-04-09 20:37 ` [PATCH v4 08/32] mfd: sec: Split into core and transport (i2c) drivers André Draszik
2025-04-09 20:37 ` [PATCH v4 09/32] mfd: sec: Add support for S2MPG10 PMIC André Draszik
2025-04-09 20:37 ` [PATCH v4 10/32] mfd: sec: Merge separate core and irq modules André Draszik
2025-04-09 20:37 ` [PATCH v4 11/32] mfd: sec-common: Fix multiple trivial whitespace issues André Draszik
2025-04-09 20:37 ` [PATCH v4 12/32] mfd: sec-i2c: Sort struct of_device_id entries and the device type switch André Draszik
2025-04-09 20:37 ` [PATCH v4 13/32] mfd: sec: Use dev_err_probe() where appropriate André Draszik
2025-04-09 20:37 ` [PATCH v4 14/32] mfd: sec-i2c: s2dos05/s2mpu05: Use explicit regmap config and drop default André Draszik
2025-04-09 20:37 ` [PATCH v4 15/32] mfd: sec-irq: s2dos05 doesn't support interrupts André Draszik
2025-04-09 20:37 ` [PATCH v4 16/32] mfd: sec-common: Don't ignore errors from sec_irq_init() André Draszik
2025-04-09 20:37 ` André Draszik [this message]
2025-04-09 20:37 ` [PATCH v4 18/32] mfd: sec: Change device_type to int André Draszik
2025-04-09 20:37 ` [PATCH v4 19/32] mfd: sec: Don't compare against NULL / 0 for errors, use ! André Draszik
2025-04-09 20:37 ` [PATCH v4 20/32] mfd: sec-common: Use sizeof(*var), not sizeof(struct type_of_var) André Draszik
2025-04-09 20:37 ` [PATCH v4 21/32] mfd: sec-common: Convert to using MFD_CELL macros André Draszik
2025-04-09 20:37 ` [PATCH v4 22/32] mfd: sec-irq: Convert to using REGMAP_IRQ_REG() macros André Draszik
2025-04-09 20:37 ` [PATCH v4 23/32] mfd: sec: Add myself as module author André Draszik
2025-04-09 20:37 ` [PATCH v4 24/32] clk: s2mps11: add support for S2MPG10 PMIC clock André Draszik
2025-07-10 6:13 ` André Draszik
2025-04-09 20:37 ` [PATCH v4 25/32] rtc: s5m: cache device type during probe André Draszik
2025-04-09 20:37 ` [PATCH v4 26/32] rtc: s5m: prepare for external regmap André Draszik
2025-04-09 20:37 ` [PATCH v4 27/32] rtc: s5m: add support for S2MPG10 RTC André Draszik
2025-04-09 20:37 ` [PATCH v4 28/32] rtc: s5m: fix a typo: peding -> pending André Draszik
2025-04-09 20:37 ` [PATCH v4 29/32] rtc: s5m: switch to devm_device_init_wakeup André Draszik
2025-04-09 20:37 ` [PATCH v4 30/32] rtc: s5m: replace regmap_update_bits with regmap_clear/set_bits André Draszik
2025-04-09 20:37 ` [PATCH v4 31/32] rtc: s5m: replace open-coded read/modify/write registers with regmap helpers André Draszik
2025-04-09 20:37 ` [PATCH v4 32/32] MAINTAINERS: add myself as reviewer for Samsung S2M MFD André Draszik
2025-04-10 6:18 ` [PATCH v4 00/32] Samsung S2MPG10 PMIC MFD-based drivers Krzysztof Kozlowski
2025-04-28 18:03 ` André Draszik
2025-04-15 16:02 ` Lee Jones
2025-04-17 15:42 ` Alexandre Belloni
2025-04-28 18:17 ` André Draszik
2025-05-19 14:41 ` André Draszik
2025-06-16 11:33 ` André Draszik
2025-06-23 22:19 ` Alexandre Belloni
2025-06-24 6:38 ` André Draszik
2025-04-24 15:11 ` (subset) " Lee Jones
2025-06-23 22:17 ` Alexandre Belloni
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=20250409-s2mpg10-v4-17-d66d5f39b6bf@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=krzysztof.kozlowski@linaro.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).