On Fri, Jan 20, 2023 at 7:27 PM Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> wrote: > > On 20/01/2023 19:15, Rafael J. Wysocki wrote: > > On Fri, Jan 20, 2023 at 7:08 PM Daniel Lezcano > > <daniel.lezcano@xxxxxxxxxx> wrote: > >> > >> > >> Hi Rafael, > >> > >> > >> On 19/01/2023 14:15, Rafael J. Wysocki wrote: > >> > >> [ ... ] > >> > >>>> +static int thermal_acpi_get_temperature_object(struct acpi_device *adev, > >>>> + char *object, int *temperature) > >>> > >>> So this would become thermal_acpi_get_temp_object(). or even > >>> thermal_acpi_get_temp() because it really returns the temperature > >>> value. > >>> > >>> I also don't particularly like returning values via pointers, which is > >>> entirely avoidable here, because the temperature value obtained from > >>> the ACPI control methods must be a positive number. > >>> > >>> So I would make it > >>> > >>> static int thermal_acpi_get_temp(struct acpi_device *adev, char *object_name) > >>> { > >> > >> We are converting decikelvin -> millicelsius. Even it is very unlikely, > >> the result could be less than zero (eg. -1°C). We won't be able to > >> differentiate -ENODATA with a negative value, no ? > >> > >> In the future, it is possible we will have to deal with cold trip points > >> in order to warm a board. May be we should don't care for now ? > > > > My point is that the ACPI specification mandates that the return > > values be in deciK and so always non-negative. > > I understand that but the code does: > > static int thermal_acpi_get_temp(struct acpi_device *adev, char > *object_name) > { > ... > > return deci_kelvin_to_millicelsius(temp); > } > > All the callers do: > > ... > > ret = thermal_acpi_get_temp(adev, name); > if (ret < 0) > return ret; > /* This could be an error > * or negative millicelsius temperature > */ > > /* here we already have millicelsius */ > trip->temperature = ret; > ... > > So I guess we want to do: > > ... > > ret = thermal_acpi_get_temp(adev, name); > if (ret < 0) > return ret; > > /* we convert here instead in thermal_acpi_get_temp() */ > trip->temperature = deci_kelvin_to_millicelsius(ret); > ... > > Sounds good ? Yes, it does. Convert when it is known to be valid.