I got what you meant. I"ll fix it El dia 20/04/2017 08:47, "Oscar Salvador" <osalvador.vilard...@gmail.com> va escriure:
> Hi Karol, > > I don't get what you mean with return due to fallthrough. I mean, I > know what is it, but I don't see how I can do it there. > Moving the check before the switch looks like that: > > if (!iccsense) > return 0; > > switch (attr) { > case hwmon_power_input: > if (iccsense->data_valid && > !list_empty(&iccsense->rails)) > return 0444; > case hwmon_power_max: > if (iccsense->power_w_max) > return 0444; > case hwmon_power_crit: > if (iccsense->power_w_crit) > return 0444; > default: > return 0; > } > > Could you drop me a hint? > > > On 18 April 2017 at 09:56, Karol Herbst <karolher...@gmail.com> wrote: > > 2017-04-17 9:47 GMT+02:00 Oscar Salvador <osalvador.vilard...@gmail.com > >: > >> This patch introduces the nouveau_hwmon_ops structure, sets up > >> .is_visible and .read_string operations and adds all the functions > >> for these operations. > >> This is also a preparation for the next patches, where most of the > >> work is being done. > >> This code doesn't interacture with the old one. > >> It's just to make easier the review of all patches. > >> --- > >> drivers/gpu/drm/nouveau/nouveau_hwmon.c | 166 > ++++++++++++++++++++++++++++++++ > >> 1 file changed, 166 insertions(+) > >> > >> diff --git a/drivers/gpu/drm/nouveau/nouveau_hwmon.c > b/drivers/gpu/drm/nouveau/nouveau_hwmon.c > >> index 24b40c5..9b6423c 100644 > >> --- a/drivers/gpu/drm/nouveau/nouveau_hwmon.c > >> +++ b/drivers/gpu/drm/nouveau/nouveau_hwmon.c > >> @@ -764,6 +764,172 @@ static const struct hwmon_channel_info > *nouveau_info[] = { > >> &nouveau_power, > >> NULL > >> }; > >> + > >> +static umode_t > >> +nouveau_chip_is_visible(const void *data, u32 attr, int channel) > >> +{ > >> + switch (attr) { > >> + case hwmon_chip_update_interval: > >> + return 0444; > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static umode_t > >> +nouveau_power_is_visible(const void *data, u32 attr, int channel) > >> +{ > >> + struct nouveau_drm *drm = nouveau_drm((struct drm_device > *)data); > >> + struct nvkm_iccsense *iccsense = nvxx_iccsense(&drm->client. > device); > >> + > >> + switch (attr) { > >> + case hwmon_power_input: > >> + if (iccsense && > > > > move the pointer check before the switch, because you need to check it > > in every case (or move it to every case, but doing it once is > > simplier/cleaner) > > > >> + iccsense->data_valid && > >> + !list_empty(&iccsense->rails)) > >> + return 0444; > > > > add return due to fallthrough > > > >> + case hwmon_power_max: > >> + if (iccsense->power_w_max) > >> + return 0444; > > > > add return due to fallthrough > > > >> + case hwmon_power_crit: > >> + if (iccsense->power_w_crit) > >> + return 0444; > > > > add return due to fallthrough > > > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static umode_t > >> +nouveau_temp_is_visible(const void *data, u32 attr, int channel) > >> +{ > >> + struct nouveau_drm *drm = nouveau_drm((struct drm_device > *)data); > >> + struct nvkm_therm *therm = nvxx_therm(&drm->client.device); > >> + > >> + if (therm && > >> + therm->attr_get && > >> + therm->attr_set && > >> + nvkm_therm_temp_get(therm) < 0) > >> + return 0; > >> + > >> + switch (attr) { > >> + case hwmon_temp_input: > >> + case hwmon_temp_max: > >> + case hwmon_temp_max_hyst: > >> + case hwmon_temp_crit: > >> + case hwmon_temp_crit_hyst: > >> + case hwmon_temp_emergency: > >> + case hwmon_temp_emergency_hyst: > >> + return 0444; > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static umode_t > >> +nouveau_pwm_is_visible(const void *data, u32 attr, int channel) > >> +{ > >> + struct nouveau_drm *drm = nouveau_drm((struct drm_device > *)data); > >> + struct nvkm_therm *therm = nvxx_therm(&drm->client.device); > >> + > >> + if (therm && > >> + therm->attr_get && > >> + therm->fan_get && > >> + therm->fan_get(therm) < 0) > >> + return 0; > >> + > >> + switch (attr) { > >> + case hwmon_pwm_enable: > >> + case hwmon_pwm_input: > >> + return 0644; > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static umode_t > >> +nouveau_input_is_visible(const void *data, u32 attr, int channel) > >> +{ > >> + struct nouveau_drm *drm = nouveau_drm((struct drm_device > *)data); > >> + struct nvkm_volt *volt = nvxx_volt(&drm->client.device); > >> + > >> + if (!volt || nvkm_volt_get(volt) < 0) > >> + return 0; > >> + > >> + switch (attr) { > >> + case hwmon_in_input: > >> + case hwmon_in_label: > >> + case hwmon_in_min: > >> + case hwmon_in_max: > >> + return 0444; > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static umode_t > >> +nouveau_fan_is_visible(const void *data, u32 attr, int channel) > >> +{ > >> + struct nouveau_drm *drm = nouveau_drm((struct drm_device > *)data); > >> + struct nvkm_therm *therm = nvxx_therm(&drm->client.device); > >> + > >> + if (!therm || !therm->attr_get || nvkm_therm_fan_sense(therm) < > 0) > >> + return 0; > >> + > >> + switch (attr) { > >> + case hwmon_fan_input: > >> + return 0444; > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static umode_t > >> +nouveau_is_visible(const void *data, enum hwmon_sensor_types type, u32 > attr, > >> + int > channel) > >> +{ > >> + switch (type) { > >> + case hwmon_chip: > >> + return nouveau_chip_is_visible(data, attr, channel); > >> + case hwmon_temp: > >> + return nouveau_temp_is_visible(data, attr, channel); > >> + case hwmon_fan: > >> + return nouveau_fan_is_visible(data, attr, channel); > >> + case hwmon_in: > >> + return nouveau_input_is_visible(data, attr, channel); > >> + case hwmon_pwm: > >> + return nouveau_pwm_is_visible(data, attr, channel); > >> + case hwmon_power: > >> + return nouveau_power_is_visible(data, attr, channel); > >> + default: > >> + return 0; > >> + } > >> +} > >> + > >> +static char *input_label = "GPU core"; > >> + > >> +static int > >> +nouveau_read_string(struct device *dev, enum hwmon_sensor_types type, > u32 attr, > >> + int channel, > char **buf) > >> +{ > >> + if (type == hwmon_in && attr == hwmon_in_label) { > >> + *buf = input_label; > >> + return 0; > >> + } > >> + > >> + return -EOPNOTSUPP; > >> +} > >> + > >> +static const struct hwmon_ops nouveau_hwmon_ops = { > >> + .is_visible = nouveau_is_visible, > >> + .read = NULL, > >> + .read_string = nouveau_read_string, > >> + .write = NULL, > >> +}; > >> + > >> +static const struct hwmon_chip_info nouveau_chip_info = { > >> + .ops = &nouveau_hwmon_ops, > >> + .info = nouveau_info, > >> +}; > >> #endif > >> > >> int > >> -- > >> 2.1.4 > >> > >> _______________________________________________ > >> Nouveau mailing list > >> nouv...@lists.freedesktop.org > >> https://lists.freedesktop.org/mailman/listinfo/nouveau >
_______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel