Message ID | 20230707123005.956415-2-frank@crawford.emu.id.au (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | hwmon: (it87) Separate temperature type to separate funtion and detect AMDTSI | expand |
On Fri, Jul 07, 2023 at 10:29:50PM +1000, Frank Crawford wrote: > The temperature sensor type will need to be used in multiple places, so > split it out into its own function. > > Signed-off-by: Frank Crawford <frank@crawford.emu.id.au> Applied. Nit inline. > --- > > v2: > * Split single patch into multi-patch set following review. > > --- > drivers/hwmon/it87.c | 43 ++++++++++++++++++++++++++++++------------- > 1 file changed, 30 insertions(+), 13 deletions(-) > > diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c > index 5deff5e5f693..7a1224ddc8b1 100644 > --- a/drivers/hwmon/it87.c > +++ b/drivers/hwmon/it87.c > @@ -1159,28 +1159,45 @@ static SENSOR_DEVICE_ATTR_2(temp4_input, S_IRUGO, show_temp, NULL, 3, 0); > static SENSOR_DEVICE_ATTR_2(temp5_input, S_IRUGO, show_temp, NULL, 4, 0); > static SENSOR_DEVICE_ATTR_2(temp6_input, S_IRUGO, show_temp, NULL, 5, 0); > > +static int get_temp_type(struct it87_data *data, int index) > +{ > + /* > + * 2 is deprecated; > + * 3 = thermal diode; > + * 4 = thermistor; > + * 5 = AMDTSI; > + * 6 = Intel PECI; > + * 0 = disabled > + */ > + u8 reg, extra; > + int type = 0; > + > + reg = data->sensor; /* In case value is updated while used */ > + extra = data->extra; > + > + if ((has_temp_peci(data, index) && (reg >> 6 == index + 1)) || > + (has_temp_old_peci(data, index) && (extra & 0x80))) > + type = 6; /* Intel PECI */ > + else if (reg & BIT(index)) > + type = 3; /* thermal diode */ > + else if (reg & BIT(index + 3)) > + type = 4; /* thermistor */ > + > + return type; > +} > + > static ssize_t show_temp_type(struct device *dev, struct device_attribute *attr, > char *buf) > { > struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); > - int nr = sensor_attr->index; > struct it87_data *data = it87_update_device(dev); > - u8 reg, extra; > + int type; > > if (IS_ERR(data)) > return PTR_ERR(data); > > - reg = data->sensor; /* In case value is updated while used */ > - extra = data->extra; > - > - if ((has_temp_peci(data, nr) && (reg >> 6 == nr + 1)) || > - (has_temp_old_peci(data, nr) && (extra & 0x80))) > - return sprintf(buf, "6\n"); /* Intel PECI */ > - if (reg & (1 << nr)) > - return sprintf(buf, "3\n"); /* thermal diode */ > - if (reg & (8 << nr)) > - return sprintf(buf, "4\n"); /* thermistor */ > - return sprintf(buf, "0\n"); /* disabled */ > + type = get_temp_type(data, sensor_attr->index); > + return sprintf(buf, "%d\n", type); The type variable is really unnecessary. I dropped that while applying. Thanks, Guenter
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 5deff5e5f693..7a1224ddc8b1 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c @@ -1159,28 +1159,45 @@ static SENSOR_DEVICE_ATTR_2(temp4_input, S_IRUGO, show_temp, NULL, 3, 0); static SENSOR_DEVICE_ATTR_2(temp5_input, S_IRUGO, show_temp, NULL, 4, 0); static SENSOR_DEVICE_ATTR_2(temp6_input, S_IRUGO, show_temp, NULL, 5, 0); +static int get_temp_type(struct it87_data *data, int index) +{ + /* + * 2 is deprecated; + * 3 = thermal diode; + * 4 = thermistor; + * 5 = AMDTSI; + * 6 = Intel PECI; + * 0 = disabled + */ + u8 reg, extra; + int type = 0; + + reg = data->sensor; /* In case value is updated while used */ + extra = data->extra; + + if ((has_temp_peci(data, index) && (reg >> 6 == index + 1)) || + (has_temp_old_peci(data, index) && (extra & 0x80))) + type = 6; /* Intel PECI */ + else if (reg & BIT(index)) + type = 3; /* thermal diode */ + else if (reg & BIT(index + 3)) + type = 4; /* thermistor */ + + return type; +} + static ssize_t show_temp_type(struct device *dev, struct device_attribute *attr, char *buf) { struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); - int nr = sensor_attr->index; struct it87_data *data = it87_update_device(dev); - u8 reg, extra; + int type; if (IS_ERR(data)) return PTR_ERR(data); - reg = data->sensor; /* In case value is updated while used */ - extra = data->extra; - - if ((has_temp_peci(data, nr) && (reg >> 6 == nr + 1)) || - (has_temp_old_peci(data, nr) && (extra & 0x80))) - return sprintf(buf, "6\n"); /* Intel PECI */ - if (reg & (1 << nr)) - return sprintf(buf, "3\n"); /* thermal diode */ - if (reg & (8 << nr)) - return sprintf(buf, "4\n"); /* thermistor */ - return sprintf(buf, "0\n"); /* disabled */ + type = get_temp_type(data, sensor_attr->index); + return sprintf(buf, "%d\n", type); } static ssize_t set_temp_type(struct device *dev, struct device_attribute *attr,
The temperature sensor type will need to be used in multiple places, so split it out into its own function. Signed-off-by: Frank Crawford <frank@crawford.emu.id.au> --- v2: * Split single patch into multi-patch set following review. --- drivers/hwmon/it87.c | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-)