From patchwork Mon May 30 21:27:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eduardo Valentin X-Patchwork-Id: 9142561 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 93D0660757 for ; Mon, 30 May 2016 21:37:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8637427F17 for ; Mon, 30 May 2016 21:37:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7B0312819C; Mon, 30 May 2016 21:37:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2CB5F27F17 for ; Mon, 30 May 2016 21:37:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423270AbcE3V2g (ORCPT ); Mon, 30 May 2016 17:28:36 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:34345 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423023AbcE3V2a (ORCPT ); Mon, 30 May 2016 17:28:30 -0400 Received: by mail-pf0-f194.google.com with SMTP id c84so15825168pfc.1; Mon, 30 May 2016 14:28:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uta5L7nyLpCizvY3BE2g7V1KZq62gJMkPuriFThuKH4=; b=qh1GrnUW4mAlU3NqTVEosE7q9L54xn3FmAU/iD23cNXkKrI0OmUFZLkI0MFQ7aPSV9 5RV+Hc36kk9WOF6rlFu1Uc7XhvamQGK96kyIT0w/h1qB1qY1pbAoj+J/yYABeWLku4pt KxlNG8ia+LR3SrEnbv3hVjb8I9WM5dy8+s2U5fbDSdDZqlmFCCNk8jkMUvVNrNPbVN85 5hDEXuf4ujMfHlA0rTflj9oEQ3ssLatwj1m6/sldfAIX1uqqsf3Utx8qDsfQTXSZHJvq U6LfSFatrQvHKR3BRPXjQqo0gTeMHHfK9rlUkEuwPrnIP7mQuHQYbzj94jFQ9WZBnf0P UBPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=uta5L7nyLpCizvY3BE2g7V1KZq62gJMkPuriFThuKH4=; b=aGknqbqKsy3XETlb9/yd2pjRlFze4Jl9Pkf1vWpFwE2tX7I3MF96jlXiO2s1TIerTt iauI6UePbnM0WX9jcn67JYMJ3Wq4UC3YarKrp8Y26gihvlAIbKXMaNeJBu81BDSXMBH4 O3sYWIC6XJSfGWguAHGRlM986CNKOl/H7bevyK9SlMETmwDIh7sVxlWHVMUbkFFwVOo8 BKJd6B2PyN+ZvrP17jz5jYpgkSFT7sPTAW2PDmA8lEKOdbhOxz1G5s6j9RWJN3mqCbrp 9AHJjI1dYf5jT64xnGNSdwiTko4pdqqwnrtV/scmGStn6nNwCwG2RFkePK6WsHk22GOh Gtew== X-Gm-Message-State: ALyK8tKFM9u/bTq0VaW2W0fCvRs9wnN75lAsCpunRZhV9KTVxpeYBJtDwuiN/ijLFpxoBg== X-Received: by 10.98.8.69 with SMTP id c66mr49821788pfd.47.1464643704112; Mon, 30 May 2016 14:28:24 -0700 (PDT) Received: from localhost ([2601:b00:c501:3660:7256:81ff:febd:926d]) by smtp.gmail.com with ESMTPSA id zj2sm49624691pac.6.2016.05.30.14.28.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 May 2016 14:28:23 -0700 (PDT) From: Eduardo Valentin To: Rui Zhang Cc: Linux PM , LKML , Eduardo Valentin Subject: [PATCHv2 07/40] thermal: core: move passive attr to tz->device.groups Date: Mon, 30 May 2016 14:27:26 -0700 Message-Id: <1464643679-2733-8-git-send-email-edubezval@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1464643679-2733-1-git-send-email-edubezval@gmail.com> References: <1464643679-2733-1-git-send-email-edubezval@gmail.com> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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. 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 | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index e65c9b8..3cbb208 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -1054,9 +1054,41 @@ 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, +}; + +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; + } + + return 0; +} + +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 }; @@ -1841,7 +1873,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) @@ -1902,8 +1933,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 */ @@ -1911,12 +1940,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);