[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <8ac6b3f9-7e08-470f-ad46-982a88623ba3@roeck-us.net>
Date: Mon, 1 Jul 2024 11:24:48 -0700
From: Guenter Roeck <linux@...ck-us.net>
To: Quentin Schulz <quentin.schulz@...rry.de>, linux-hwmon@...r.kernel.org
Cc: linux-kernel@...r.kernel.org, Farouk Bouabid <farouk.bouabid@...rry.de>
Subject: Re: [PATCH 10/10] hwmon: (amc6821) Convert to with_info API
Hi uentin,
On 7/1/24 10:46, Quentin Schulz wrote:
>> return err;
>> - return sysfs_emit(buf, "%d\n", !!(regval & mask));
>> + *val = (int8_t)regval * 1000;
>
> The discussed signed_extended32() in another patch would need to make it here too.
>
Yes. Thanks for the reminder, I had missed that one.
>> - return sprintf(buf, "%d\n", val);
>> + err = regmap_bulk_read(regmap, reg, regs, 2);
>> + if (err)
>> + return err;
>> +
>> + regval = (regs[1] << 8) | regs[0];
>> + *val = 6000000 / (regval ? : 1);
>> +
>
> Just putting a "bookmark" here since we're having a discussion about this logic in another thread for another patch.
>
> Also... missing 0 here between the question mark and the colon?
>
It translates to
*val = 6000000 / (regval ? regval : 1);
which is what I had wanted (divide by regval if regval != 0,
otherwise divide by 1 [i.e., return 6000000]).
I have it now as
*val = regval ? 6000000 / regval : 0;
>> +static int amc6821_fan_write(struct device *dev, u32 attr, long val)
>> +{
>> + struct amc6821_data *data = dev_get_drvdata(dev);
>> + struct regmap *regmap = data->regmap;
>> + u8 regs[2];
>> + int reg;
>> +
>> + if (attr == hwmon_fan_pulses) {
>> + if (val != 2 && val != 4)
>> + return -EINVAL;
>> + return regmap_update_bits(regmap, AMC6821_REG_CONF4,
>> + AMC6821_CONF4_PSPR,
>> + val == 4 ? AMC6821_CONF4_PSPR : 0);
>> + }
>> +
>> + if (val < 0)
>> + return -EINVAL;
>> +
>> + val = clamp_val(6000000 / (val ? : 1), 0, 0xffff);
>> +
>
> And another "bookmark" here.
>
That is now
val = val ? 6000000 / clamp_val(val, 1, 6000000) : 0;
val = clamp_val(val, 0, 0xffff);
'val' is checked earlier and must be > 0 for the minimum
and target fan speed.
>> + switch (attr) {
>> + case hwmon_fan_min:
>> + reg = AMC6821_REG_TACH_LLIMITL;
>> + break;
>> + case hwmon_fan_max:
>> + reg = AMC6821_REG_TACH_HLIMITL;
>> + break;
>> + case hwmon_fan_target:
>> + reg = AMC6821_REG_TACH_SETTINGL;
>> + break;
>> + default:
>> + return -EOPNOTSUPP;
>> + }
>> +
>> + regs[0] = val & 0xff;
>> + regs[1] = val >> 8;
>> +
>> + return regmap_bulk_write(data->regmap, reg, regs, 2);
>> }
>> static ssize_t temp_auto_point_temp_show(struct device *dev,
>> struct device_attribute *devattr,
>> char *buf)
>> {
>> + struct amc6821_data *data = dev_get_drvdata(dev);
>> int ix = to_sensor_dev_attr_2(devattr)->index;
>> int nr = to_sensor_dev_attr_2(devattr)->nr;
>> - struct amc6821_data *data = dev_get_drvdata(dev);
>
> Should be squashed with the appropriate commit?
>
Yes, the previous one.
>> switch (nr) {
>> case 1:
>> @@ -423,7 +495,6 @@ static ssize_t temp_auto_point_temp_show(struct device *dev,
>> return sprintf(buf, "%d\n",
>> data->temp2_auto_point_temp[ix] * 1000);
>> default:
>> - dev_dbg(dev, "Unknown attr->nr (%d).\n", nr);
>
> Not sure this is related? Maybe a separate commit?
>
It should have been part of the previous commit, where it is explained ("remove
spurious debug messages which would only be seen as result of a bug in the code")
>> @@ -872,7 +902,6 @@ static int amc6821_probe(struct i2c_client *client)
>> if (!data)
>> return -ENOMEM;
>> -
>
> Should be squashed with the previous commit.
>
Ok.
> Nice clean-up albeit very difficult to review in patch form, not sure there's anything we can do about it though. Maybe migrating one attribute at a time, but I would myself not be very happy if I was asked to do it :)
>
Yes, that is always the problem with the conversion to the with_info API.
I don't think it would make much sense to try to split it further.
Thanks a lot for the detailed review!
Guenter
Powered by blists - more mailing lists