On Thu, 2008-06-12 at 00:42 +0800, Matthew Garrett wrote: > The state management functions in the thermal API also pass strings > around. Change them to ints and do the conversion at the sysfs point. just some codingstyle problems. :) thanks, rui > Signed-off-by: Matthew Garrett <mjg@xxxxxxxxxx> > > --- > > diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c > index 6cf10cb..f3db49e 100644 > --- a/drivers/acpi/fan.c > +++ b/drivers/acpi/fan.c > @@ -69,27 +69,30 @@ static struct acpi_driver acpi_fan_driver = { > }; > > /* thermal cooling device callbacks */ > -static int fan_get_max_state(struct thermal_cooling_device *cdev, > char *buf) > +static int fan_get_max_state(struct thermal_cooling_device *cdev, > unsigned int > + *state) > { > /* ACPI fan device only support two states: ON/OFF */ > - return sprintf(buf, "1\n"); > + *state = 1; > + return 0; > } > > -static int fan_get_cur_state(struct thermal_cooling_device *cdev, > char *buf) > +static int fan_get_cur_state(struct thermal_cooling_device *cdev, > unsigned int > + *state) > { > struct acpi_device *device = cdev->devdata; > - int state; > int result; > > if (!device) > return -EINVAL; > > - result = acpi_bus_get_power(device->handle, &state); > + result = acpi_bus_get_power(device->handle, state); > if (result) > return result; > > - return sprintf(buf, "%s\n", state == ACPI_STATE_D3 ? "0" : > - (state == ACPI_STATE_D0 ? "1" : "unknown")); > + *state = (*state == ACPI_STATE_D3 ? 0 : > + (*state == ACPI_STATE_D0 ? 1 : -1)); > + return 0; > } > > static int > diff --git a/drivers/acpi/processor_thermal.c > b/drivers/acpi/processor_thermal.c > index ef34b18..2a3721d 100644 > --- a/drivers/acpi/processor_thermal.c > +++ b/drivers/acpi/processor_thermal.c > @@ -374,7 +374,8 @@ static int acpi_processor_max_state(struct > acpi_processor *pr) > return max_state; > } > static int > -processor_get_max_state(struct thermal_cooling_device *cdev, char > *buf) > +processor_get_max_state(struct thermal_cooling_device *cdev, unsigned > int > + *state) > { > struct acpi_device *device = cdev->devdata; > struct acpi_processor *pr = acpi_driver_data(device); > @@ -382,24 +383,24 @@ processor_get_max_state(struct > thermal_cooling_device *cdev, char *buf) > if (!device || !pr) > return -EINVAL; > > - return sprintf(buf, "%d\n", acpi_processor_max_state(pr)); > + *state = acpi_processor_max_state(pr); > + return 0; > } > > static int > -processor_get_cur_state(struct thermal_cooling_device *cdev, char > *buf) > +processor_get_cur_state(struct thermal_cooling_device *cdev, unsigned > int > + *cur_state) > { > struct acpi_device *device = cdev->devdata; > struct acpi_processor *pr = acpi_driver_data(device); > - int cur_state; > > if (!device || !pr) > return -EINVAL; > > - cur_state = cpufreq_get_cur_state(pr->id); > + *cur_state = cpufreq_get_cur_state(pr->id); > if (pr->flags.throttling) > - cur_state += pr->throttling.state; > - > - return sprintf(buf, "%d\n", cur_state); > + *cur_state += pr->throttling.state; > + return 0; > } > > static int > diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c > index 5e5dda3..d8d7596 100644 > --- a/drivers/acpi/video.c > +++ b/drivers/acpi/video.c > @@ -358,26 +358,30 @@ static struct output_properties > acpi_output_properties = { > > > /* thermal cooling device callbacks */ > -static int video_get_max_state(struct thermal_cooling_device *cdev, > char *buf) > +static int video_get_max_state(struct thermal_cooling_device *cdev, > unsigned > + int *state) > { > struct acpi_device *device = cdev->devdata; > struct acpi_video_device *video = acpi_driver_data(device); > > - return sprintf(buf, "%d\n", video->brightness->count - 3); > + *state = video->brightness->count - 3; > + return 0; > } > > -static int video_get_cur_state(struct thermal_cooling_device *cdev, > char *buf) > +static int video_get_cur_state(struct thermal_cooling_device *cdev, > unsigned > + int *state) > { > struct acpi_device *device = cdev->devdata; > struct acpi_video_device *video = acpi_driver_data(device); > unsigned long level; > - int state; > + int offset; > > acpi_video_device_lcd_get_level_current(video, &level); > - for (state = 2; state < video->brightness->count; state++) > - if (level == video->brightness->levels[state]) > - return sprintf(buf, "%d\n", > - video->brightness->count - > state - 1); > + for (offset = 2; offset < video->brightness->count; offset++) > + if (level == video->brightness->levels[offset]) { > + *state = video->brightness->count - offset - > 1; > + return 0; > + } > > return -EINVAL; > } > diff --git a/drivers/thermal/thermal_sys.c > b/drivers/thermal/thermal_sys.c > index c537a5b..02abaf0 100644 > --- a/drivers/thermal/thermal_sys.c > +++ b/drivers/thermal/thermal_sys.c > @@ -249,8 +249,12 @@ thermal_cooling_device_max_state_show(struct > device *dev, > struct device_attribute *attr, > char *buf) > { > struct thermal_cooling_device *cdev = to_cooling_device(dev); > + int state, ret; > > - return cdev->ops->get_max_state(cdev, buf); > + ret = cdev->ops->get_max_state(cdev, &state); > + if (ret) > + return ret; > + return sprintf(buf, "%d\n", state); > } > > static ssize_t > @@ -258,8 +262,12 @@ thermal_cooling_device_cur_state_show(struct > device *dev, > struct device_attribute *attr, > char *buf) > { > struct thermal_cooling_device *cdev = to_cooling_device(dev); > + int state, ret; > > - return cdev->ops->get_cur_state(cdev, buf); > + ret = cdev->ops->get_cur_state(cdev, &state); > + if (ret) > + return ret; > + return sprintf(buf, "%d\n", state); > } > > static ssize_t > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > index 63e6619..5ddbd4f 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -46,8 +46,8 @@ struct thermal_zone_device_ops { > }; > > struct thermal_cooling_device_ops { > - int (*get_max_state) (struct thermal_cooling_device *, char > *); > - int (*get_cur_state) (struct thermal_cooling_device *, char > *); > + int (*get_max_state) (struct thermal_cooling_device *, > unsigned int *); > + int (*get_cur_state) (struct thermal_cooling_device *, > unsigned int *); > int (*set_cur_state) (struct thermal_cooling_device *, > unsigned int); > }; > > -- > Matthew Garrett | mjg59@xxxxxxxxxxxxx > > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html