[PATCH v4 2/9] hwmon: (amc6821) dev_err using amc6821 device struct

Farouk Bouabid farouk.bouabid at cherry.de
Tue Jun 18 09:06:44 PDT 2024


If probed as platform device, the i2c_client.dev is the parent device
(eg. MFD) and not the actual amc6821 device. Use the latter to log errors
instead.

Signed-off-by: Farouk Bouabid <farouk.bouabid at cherry.de>
---
 drivers/hwmon/amc6821.c | 62 +++++++++++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 30 deletions(-)

diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
index 464991fd7fc9..17456d7c7cfe 100644
--- a/drivers/hwmon/amc6821.c
+++ b/drivers/hwmon/amc6821.c
@@ -290,7 +290,7 @@ static ssize_t temp_store(struct device *dev, struct device_attribute *attr,
 	mutex_lock(&data->update_lock);
 	data->temp[ix] = val;
 	if (i2c_smbus_write_byte_data(client, temp_reg[ix], data->temp[ix])) {
-		dev_err(&client->dev, "Register write error, aborting.\n");
+		dev_err(dev, "Register write error, aborting.\n");
 		count = -EIO;
 	}
 	mutex_unlock(&data->update_lock);
@@ -389,10 +389,10 @@ static ssize_t pwm1_enable_store(struct device *dev,
 	mutex_lock(&data->update_lock);
 	config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF1);
 	if (config < 0) {
-			dev_err(&client->dev,
+		dev_err(dev,
 			"Error reading configuration register, aborting.\n");
-			count = config;
-			goto unlock;
+		count = config;
+		goto unlock;
 	}
 
 	switch (val) {
@@ -413,9 +413,9 @@ static ssize_t pwm1_enable_store(struct device *dev,
 		goto unlock;
 	}
 	if (i2c_smbus_write_byte_data(client, AMC6821_REG_CONF1, config)) {
-			dev_err(&client->dev,
+		dev_err(dev,
 			"Configuration register write error, aborting.\n");
-			count = -EIO;
+		count = -EIO;
 	}
 unlock:
 	mutex_unlock(&data->update_lock);
@@ -459,11 +459,13 @@ static ssize_t pwm1_auto_point_pwm_show(struct device *dev,
 	return sprintf(buf, "%d\n", data->pwm1_auto_point_pwm[ix]);
 }
 
-static inline ssize_t set_slope_register(struct i2c_client *client,
+static inline ssize_t set_slope_register(struct device *dev,
 		u8 reg,
 		u8 dpwm,
 		u8 *ptemp)
 {
+	struct amc6821_data *data = dev_get_drvdata(dev);
+	struct i2c_client *client = data->client;
 	int dt;
 	u8 tmp;
 
@@ -475,7 +477,7 @@ static inline ssize_t set_slope_register(struct i2c_client *client,
 	tmp |= (ptemp[1] & 0x7C) << 1;
 	if (i2c_smbus_write_byte_data(client,
 			reg, tmp)) {
-		dev_err(&client->dev, "Register write error, aborting.\n");
+		dev_err(dev, "Register write error, aborting.\n");
 		return -EIO;
 	}
 	return 0;
@@ -525,7 +527,7 @@ static ssize_t temp_auto_point_temp_store(struct device *dev,
 					client,
 					AMC6821_REG_PSV_TEMP,
 					ptemp[0])) {
-				dev_err(&client->dev,
+				dev_err(dev,
 					"Register write error, aborting.\n");
 				count = -EIO;
 		}
@@ -544,7 +546,7 @@ static ssize_t temp_auto_point_temp_store(struct device *dev,
 		goto EXIT;
 	}
 	dpwm = data->pwm1_auto_point_pwm[2] - data->pwm1_auto_point_pwm[1];
-	if (set_slope_register(client, reg, dpwm, ptemp))
+	if (set_slope_register(dev, reg, dpwm, ptemp))
 		count = -EIO;
 
 EXIT:
@@ -568,17 +570,17 @@ static ssize_t pwm1_auto_point_pwm_store(struct device *dev,
 	data->pwm1_auto_point_pwm[1] = clamp_val(val, 0, 254);
 	if (i2c_smbus_write_byte_data(client, AMC6821_REG_DCY_LOW_TEMP,
 			data->pwm1_auto_point_pwm[1])) {
-		dev_err(&client->dev, "Register write error, aborting.\n");
+		dev_err(dev, "Register write error, aborting.\n");
 		count = -EIO;
 		goto EXIT;
 	}
 	dpwm = data->pwm1_auto_point_pwm[2] - data->pwm1_auto_point_pwm[1];
-	if (set_slope_register(client, AMC6821_REG_LTEMP_FAN_CTRL, dpwm,
+	if (set_slope_register(dev, AMC6821_REG_LTEMP_FAN_CTRL, dpwm,
 			data->temp1_auto_point_temp)) {
 		count = -EIO;
 		goto EXIT;
 	}
-	if (set_slope_register(client, AMC6821_REG_RTEMP_FAN_CTRL, dpwm,
+	if (set_slope_register(dev, AMC6821_REG_RTEMP_FAN_CTRL, dpwm,
 			data->temp2_auto_point_temp)) {
 		count = -EIO;
 		goto EXIT;
@@ -626,13 +628,13 @@ static ssize_t fan_store(struct device *dev, struct device_attribute *attr,
 	data->fan[ix] = (u16) clamp_val(val, 1, 0xFFFF);
 	if (i2c_smbus_write_byte_data(client, fan_reg_low[ix],
 			data->fan[ix] & 0xFF)) {
-		dev_err(&client->dev, "Register write error, aborting.\n");
+		dev_err(dev, "Register write error, aborting.\n");
 		count = -EIO;
 		goto EXIT;
 	}
 	if (i2c_smbus_write_byte_data(client,
 			fan_reg_hi[ix], data->fan[ix] >> 8)) {
-		dev_err(&client->dev, "Register write error, aborting.\n");
+		dev_err(dev, "Register write error, aborting.\n");
 		count = -EIO;
 	}
 EXIT:
@@ -661,7 +663,7 @@ static ssize_t fan1_div_store(struct device *dev,
 	mutex_lock(&data->update_lock);
 	config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF4);
 	if (config < 0) {
-		dev_err(&client->dev,
+		dev_err(dev,
 			"Error reading configuration register, aborting.\n");
 		count = config;
 		goto EXIT;
@@ -680,7 +682,7 @@ static ssize_t fan1_div_store(struct device *dev,
 		goto EXIT;
 	}
 	if (i2c_smbus_write_byte_data(client, AMC6821_REG_CONF4, config)) {
-		dev_err(&client->dev,
+		dev_err(dev,
 			"Configuration register write error, aborting.\n");
 		count = -EIO;
 	}
@@ -815,7 +817,7 @@ static int amc6821_detect(
 	return 0;
 }
 
-static int amc6821_init_client(struct i2c_client *client)
+static int amc6821_init_client(struct device *dev, struct i2c_client *client)
 {
 	int config;
 	int err = -EIO;
@@ -824,16 +826,16 @@ static int amc6821_init_client(struct i2c_client *client)
 		config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF4);
 
 		if (config < 0) {
-				dev_err(&client->dev,
-			"Error reading configuration register, aborting.\n");
-				return err;
+			dev_err(dev,
+				"Error reading configuration register, aborting.\n");
+			return err;
 		}
 
 		config |= AMC6821_CONF4_MODE;
 
 		if (i2c_smbus_write_byte_data(client, AMC6821_REG_CONF4,
 				config)) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Configuration register write error, aborting.\n");
 			return err;
 		}
@@ -841,18 +843,18 @@ static int amc6821_init_client(struct i2c_client *client)
 		config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF3);
 
 		if (config < 0) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Error reading configuration register, aborting.\n");
 			return err;
 		}
 
-		dev_info(&client->dev, "Revision %d\n", config & 0x0f);
+		dev_info(dev, "Revision %d\n", config & 0x0f);
 
 		config &= ~AMC6821_CONF3_THERM_FAN_EN;
 
 		if (i2c_smbus_write_byte_data(client, AMC6821_REG_CONF3,
 				config)) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Configuration register write error, aborting.\n");
 			return err;
 		}
@@ -860,7 +862,7 @@ static int amc6821_init_client(struct i2c_client *client)
 		config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF2);
 
 		if (config < 0) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Error reading configuration register, aborting.\n");
 			return err;
 		}
@@ -870,7 +872,7 @@ static int amc6821_init_client(struct i2c_client *client)
 		config &= ~AMC6821_CONF2_RTOIE;
 		if (i2c_smbus_write_byte_data(client,
 				AMC6821_REG_CONF2, config)) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Configuration register write error, aborting.\n");
 			return err;
 		}
@@ -878,7 +880,7 @@ static int amc6821_init_client(struct i2c_client *client)
 		config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF1);
 
 		if (config < 0) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Error reading configuration register, aborting.\n");
 			return err;
 		}
@@ -893,7 +895,7 @@ static int amc6821_init_client(struct i2c_client *client)
 
 		if (i2c_smbus_write_byte_data(
 				client, AMC6821_REG_CONF1, config)) {
-			dev_err(&client->dev,
+			dev_err(dev,
 			"Configuration register write error, aborting.\n");
 			return err;
 		}
@@ -917,7 +919,7 @@ static int probe(struct device *dev, struct i2c_client *client)
 	/*
 	 * Initialize the amc6821 chip
 	 */
-	err = amc6821_init_client(client);
+	err = amc6821_init_client(dev, client);
 	if (err)
 		return err;
 

-- 
2.34.1




More information about the Linux-rockchip mailing list