]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
misc: amd-sbi: Add helper function to prepare I3C support
authorAkshay Gupta <akshay.gupta@amd.com>
Mon, 15 Sep 2025 10:36:44 +0000 (10:36 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Oct 2025 05:59:57 +0000 (07:59 +0200)
New AMD processors support APML connection over I3C.
Move the code, common for both I2C and I3C to new helper
function, "sbrmi_common_probe()"
While at it, renaming the static structure regmap_config "sbrmi_i2c_regmap_config"
to "sbrmi_regmap_config" to avoid confusion.

Reviewed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
Signed-off-by: Akshay Gupta <akshay.gupta@amd.com>
Link: https://patch.msgid.link/20250915103649.1705078-1-akshay.gupta@amd.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/amd-sbi/rmi-i2c.c

index f891f5af4bc6d0e5f9ab840fa913a73dad97ea43..d41457a5237610c3ec7d10473ba31becf3c34edf 100644 (file)
@@ -50,26 +50,18 @@ static int sbrmi_get_max_pwr_limit(struct sbrmi_data *data)
        return ret;
 }
 
-static int sbrmi_i2c_probe(struct i2c_client *client)
+static int sbrmi_common_probe(struct device *dev, struct regmap *regmap, uint8_t address)
 {
-       struct device *dev = &client->dev;
        struct sbrmi_data *data;
-       struct regmap_config sbrmi_i2c_regmap_config = {
-               .reg_bits = 8,
-               .val_bits = 8,
-       };
        int ret;
 
        data = devm_kzalloc(dev, sizeof(struct sbrmi_data), GFP_KERNEL);
        if (!data)
                return -ENOMEM;
 
+       data->regmap = regmap;
        mutex_init(&data->lock);
 
-       data->regmap = devm_regmap_init_i2c(client, &sbrmi_i2c_regmap_config);
-       if (IS_ERR(data->regmap))
-               return PTR_ERR(data->regmap);
-
        /* Enable alert for SB-RMI sequence */
        ret = sbrmi_enable_alert(data);
        if (ret < 0)
@@ -80,7 +72,8 @@ static int sbrmi_i2c_probe(struct i2c_client *client)
        if (ret < 0)
                return ret;
 
-       data->dev_static_addr = client->addr;
+       data->dev_static_addr = address;
+
        dev_set_drvdata(dev, data);
 
        ret = create_hwmon_sensor_device(dev, data);
@@ -89,6 +82,23 @@ static int sbrmi_i2c_probe(struct i2c_client *client)
        return create_misc_rmi_device(data, dev);
 }
 
+static struct regmap_config sbrmi_regmap_config = {
+       .reg_bits = 8,
+       .val_bits = 8,
+};
+
+static int sbrmi_i2c_probe(struct i2c_client *client)
+{
+       struct device *dev = &client->dev;
+       struct regmap *regmap;
+
+       regmap = devm_regmap_init_i2c(client, &sbrmi_regmap_config);
+       if (IS_ERR(regmap))
+               return PTR_ERR(regmap);
+
+       return sbrmi_common_probe(dev, regmap, client->addr);
+}
+
 static void sbrmi_i2c_remove(struct i2c_client *client)
 {
        struct sbrmi_data *data = dev_get_drvdata(&client->dev);