lkml.org 
[lkml]   [2013]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/16] drivers: thermal: allow registering without .get_temp
    Date
    This patch changes the thermal core driver to allow
    registration of thermal zones without the .get_temp callback.

    The idea behind this change is to allow lazy registration
    of sensor callbacks.

    The thermal zone will be disabled whenever the ops
    does not contain a .get_temp callback. The sysfs interface
    will be returning -EINVAL on any temperature read operation.

    Cc: Zhang Rui <rui.zhang@intel.com>
    Cc: linux-pm@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
    ---
    drivers/thermal/thermal_core.c | 10 ++++++++--
    1 file changed, 8 insertions(+), 2 deletions(-)

    diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
    index 4962a6a..8a94300 100644
    --- a/drivers/thermal/thermal_core.c
    +++ b/drivers/thermal/thermal_core.c
    @@ -402,7 +402,7 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, unsigned long *temp)
    enum thermal_trip_type type;
    #endif

    - if (!tz || IS_ERR(tz))
    + if (!tz || IS_ERR(tz) || !tz->ops->get_temp)
    goto exit;

    mutex_lock(&tz->lock);
    @@ -455,6 +455,9 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
    {
    int count;

    + if (!tz->ops->get_temp)
    + return;
    +
    update_temperature(tz);

    for (count = 0; count < tz->trips; count++)
    @@ -1384,7 +1387,7 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
    if (trips > THERMAL_MAX_TRIPS || trips < 0 || mask >> trips)
    return ERR_PTR(-EINVAL);

    - if (!ops || !ops->get_temp)
    + if (!ops)
    return ERR_PTR(-EINVAL);

    if (trips > 0 && (!ops->get_trip_type || !ops->get_trip_temp))
    @@ -1488,6 +1491,9 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,

    INIT_DELAYED_WORK(&(tz->poll_queue), thermal_zone_device_check);

    + if (!tz->ops->get_temp)
    + thermal_zone_device_set_polling(tz, 0);
    +
    thermal_zone_device_update(tz);

    if (!result)
    --
    1.8.2.1.342.gfa7285d


    \
     
     \ /
      Last update: 2013-09-16 00:41    [W:4.020 / U:0.484 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site