Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
On Thu, Jul 04, 2024 at 11:16:20AM +0000, Akshay Gupta wrote:
- AMD provides socket power information from out of bandSo you are "splitting" a real device into different ones using a
which can be read by sensors.
- platform driver will probe drivers/hwmon/sbrmi as a platform device
and share the sbrmi device data.
platform device? THat's not ok, and an abuse of the platform api.
Please use the correct one for that instead.
Yes, will update.
Signed-off-by: Akshay Gupta <akshay.gupta@xxxxxxx>No need to cast, right?
Reviewed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@xxxxxxx>
---
drivers/misc/amd-sb/sbrmi-i2c.c | 25 ++++++++++++++++++++++++-
include/misc/amd-sb.h | 2 ++
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/drivers/misc/amd-sb/sbrmi-i2c.c b/drivers/misc/amd-sb/sbrmi-i2c.c
index c4903d9e9f0f..b593bbdd78e0 100644
--- a/drivers/misc/amd-sb/sbrmi-i2c.c
+++ b/drivers/misc/amd-sb/sbrmi-i2c.c
@@ -72,7 +72,29 @@ static int sbrmi_i2c_probe(struct i2c_client *client)
return ret;
/* Cache maximum power limit */
- return sbrmi_get_max_pwr_limit(data);
+ ret = sbrmi_get_max_pwr_limit(data);
+ if (ret < 0)
+ return ret;
+
+ dev_set_drvdata(dev, (void *)data);
Yes, not required.
+ data->pdev = platform_device_register_data(dev, "sbrmi-hwmon",Yeah, that's not ok. Please do this correctly, as this is NOT a
+ PLATFORM_DEVID_NONE,
platform device, but rather a made-up one that you just created out of
no where. Instead use the correct apis for that.
+ data,You don't need to unwind anything else here?
+ sizeof(struct sbrmi_data));
+ if (IS_ERR(data->pdev)) {
+ pr_err("unable to register platform device for sbrmi-hwmon\n");
+ return PTR_ERR(data->pdev);
Its just a safe check, once we remove platform driver this will not be required.
+ }How can that happen?
+ return ret;
+}
+
+static void sbrmi_i2c_remove(struct i2c_client *client)
+{
+ struct sbrmi_data *data = dev_get_drvdata(&client->dev);
+
+ if (!data)
+ return;
greg k-h