From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933206AbcFPD15 (ORCPT ); Wed, 15 Jun 2016 23:27:57 -0400 Received: from mga11.intel.com ([192.55.52.93]:28048 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753270AbcFPD14 (ORCPT ); Wed, 15 Jun 2016 23:27:56 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,478,1459839600"; d="scan'208";a="829008012" Message-ID: <1466047670.9422.16.camel@intel.com> Subject: Re: [PATCHv4 07/48] thermal: core: move passive attr to tz->device.groups From: Zhang Rui To: Eduardo Valentin Cc: Linux PM , LKML , Keerthy Date: Thu, 16 Jun 2016 11:27:50 +0800 In-Reply-To: <1464675535-2433-8-git-send-email-edubezval@gmail.com> References: <1464675535-2433-1-git-send-email-edubezval@gmail.com> <1464675535-2433-8-git-send-email-edubezval@gmail.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.5.2-0ubuntu3 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 一, 2016-05-30 at 23:18 -0700, Eduardo Valentin wrote: > This patch moves the passive attribute to tz->device.groups. Moving > the > passive attribute also requires a .is_visible() callback > implementation > for its attribute group. > > The logic behind the visibility of passive attribute is kept the > same. > We only expose the passive attribute if the thermal driver has > exposed > at least one passive trip point. > No, the passive attribute is only present for zones in which the passive cooling policy is not supported by native thermal driver. > Cc: Zhang Rui > Cc: linux-pm@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Eduardo Valentin > --- >  drivers/thermal/thermal_core.c | 42 > +++++++++++++++++++++++++++++++++--------- >  1 file changed, 33 insertions(+), 9 deletions(-) > > diff --git a/drivers/thermal/thermal_core.c > b/drivers/thermal/thermal_core.c > index 19fea9e..efc190c 100644 > --- a/drivers/thermal/thermal_core.c > +++ b/drivers/thermal/thermal_core.c > @@ -1056,9 +1056,42 @@ static struct attribute_group > thermal_zone_mode_attribute_group = { >   .is_visible = thermal_zone_mode_is_visible, >  }; >   > +/* We expose passive only if passive trips are present */ > +static struct attribute *thermal_zone_passive_attrs[] = { > + &dev_attr_passive.attr, > + NULL, > +}; > + > +static umode_t thermal_zone_passive_is_visible(struct kobject *kobj, > +        struct attribute > *attr, > +        int attrno) > +{ > + struct device *dev = container_of(kobj, struct device, > kobj); > + struct thermal_zone_device *tz; > + enum thermal_trip_type trip_type; > + int count; > + > + tz = container_of(dev, struct thermal_zone_device, device); > + > + for (count = 0; count < tz->trips; count++) { > + tz->ops->get_trip_type(tz, count, &trip_type); > + > + if (trip_type == THERMAL_TRIP_PASSIVE) > + return attr->mode; we should return 0; > + } > + > + return 0; and return attr->mode; thanks, rui > +} > + > +static struct attribute_group thermal_zone_passive_attribute_group = > { > + .attrs = thermal_zone_passive_attrs, > + .is_visible = thermal_zone_passive_is_visible, > +}; > + >  static const struct attribute_group *thermal_zone_attribute_groups[] > = { >   &thermal_zone_attribute_group, >   &thermal_zone_mode_attribute_group, > + &thermal_zone_passive_attribute_group, >   NULL >  }; >   > @@ -1843,7 +1876,6 @@ struct thermal_zone_device > *thermal_zone_device_register(const char *type, >   int trip_temp; >   int result; >   int count; > - int passive = 0; >   struct thermal_governor *governor; >   >   if (!type || strlen(type) == 0) > @@ -1904,8 +1936,6 @@ struct thermal_zone_device > *thermal_zone_device_register(const char *type, >   for (count = 0; count < trips; count++) { >   if (tz->ops->get_trip_type(tz, count, &trip_type)) >   set_bit(count, &tz->trips_disabled); > - if (trip_type == THERMAL_TRIP_PASSIVE) > - passive = 1; >   if (tz->ops->get_trip_temp(tz, count, &trip_temp)) >   set_bit(count, &tz->trips_disabled); >   /* Check for bogus trip points */ > @@ -1913,12 +1943,6 @@ struct thermal_zone_device > *thermal_zone_device_register(const char *type, >   set_bit(count, &tz->trips_disabled); >   } >   > - if (!passive) { > - result = device_create_file(&tz->device, > &dev_attr_passive); > - if (result) > - goto unregister; > - } > - >   /* Update 'this' zone's governor information */ >   mutex_lock(&thermal_governor_lock); >