Received: by 2002:ac0:de83:0:0:0:0:0 with SMTP id b3csp902895imk; Sun, 3 Jul 2022 11:44:31 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uX6gZG61dhIJeqk2tyd4X4JC3jvjbSQ8/Izqc3/NOIT1B2Wp1BTHShmPCHgPNEflQhnIa/ X-Received: by 2002:a05:6a00:21c8:b0:4c4:4bd:dc17 with SMTP id t8-20020a056a0021c800b004c404bddc17mr31488227pfj.57.1656873870924; Sun, 03 Jul 2022 11:44:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656873870; cv=none; d=google.com; s=arc-20160816; b=cfjla0/d1Fho+D9VjrJ8qSba7VHp30IjLxE/1O4V6W2PV32/TqlE1F7lOGqqXONqQn bG+yXIjmqdEFnIORW3Y6gn5UALR7h05YfuUez7U+CGh6LIsFuqr/8h2ZTl7aC0ryv0KQ 4B/ePpAOOjefgu2UV0r8WXqS5wbGbirxStlQJD7+rj5pCevg1NAVKKT6rfJPCkoX2eXA /dIjzHZpi3m4PXskUv7/EMjs0TGr2LjeE9QQ95oZ1rM99pDajqSO772h+qW22WZTSV2o UAg1li/t+XphOixN0GS/dNJNC8Q+QVzcZb99CbUwHW0jeYb4tJs8HEWbUw1y1mo29PqY cnAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=0c9qHlWoBwCGs7JGuVHwAzNgwf4Be2qCjsOeezEPK2c=; b=jhZH9e3f4lAn9A4RX7QwqHWs/JSpIdXmSkI1NYxfh+1z3KBt0HT0CpXh2vChqwn7fu MgstC4sOBoxYjdrIovHIfM2K0A0Ws6IYswWvzx1lGdt0aWfPsKCxfoc9PQjL9Lgi0Kn+ 7MtNAJ0RmqIpe3hYknU2uAq1XSATllFjy5mjTPxh448wt9c+BSQs889Yym7nr+lNaFqX Aujgn+rQe/q16hxcRu3Yp/DzcKRoj71ZH2L70UhPtSGehz5ySXct1BfcH3lblzR2tG8P Rd706jCKuyEKc8UyyUPCtMmro4Ou1jaDass+9+X/ouw3dvek7rqReTPEW2coT/V2ImjA +olw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linexp-org.20210112.gappssmtp.com header.s=20210112 header.b=UlEcX9eT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u18-20020a17090341d200b0016a605ad59csi40494199ple.398.2022.07.03.11.44.17; Sun, 03 Jul 2022 11:44:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linexp-org.20210112.gappssmtp.com header.s=20210112 header.b=UlEcX9eT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232679AbiGCSbf (ORCPT + 99 others); Sun, 3 Jul 2022 14:31:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232280AbiGCSbb (ORCPT ); Sun, 3 Jul 2022 14:31:31 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B2C092DE4 for ; Sun, 3 Jul 2022 11:31:29 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id l68so4194676wml.3 for ; Sun, 03 Jul 2022 11:31:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linexp-org.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0c9qHlWoBwCGs7JGuVHwAzNgwf4Be2qCjsOeezEPK2c=; b=UlEcX9eTZYXVEmQ/yq54/rTJFbnHWDcSzcSJW8KW4S6Nu5lJKppccNEcxt/crItNCo c4PQW59ZNDz/EvkXTrN0GmuY1kFx0Fxxia37q/mKl5KAHZZxwEVZibmvFUKW0107y6PW fyuvOIAptFakGOW+L2qmSNTV6iXVFNxG70UzhpvzE3L7c0kbQFhp6JCFf3HjC/t3bzSZ hZzAk1HSJFGEicCjxYGcYmPscb1Ry5x2LSBFX3XcU8pRRmakFZoc5mektURNSfpB3Ftl x2D+5YAND3MuBMM5QfXXA0e3yK8F1Y1IuDof0DLaRwWA5jcFkLchfTko88wqHxMLmXxe x/9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0c9qHlWoBwCGs7JGuVHwAzNgwf4Be2qCjsOeezEPK2c=; b=6Hn4D6VTw4giBbYMzzYst+hJt+jblLCBnaq8GEU4+/Ft2WTDzmU9q6TKqNuMA8emOI mRshcl2hSEKRPjfpvIB/UIIfFDK6NVmeg+94vuooJ8KeAqzL9USB9az/XvZGt11kegwK gza2R8gZakHfWYsJzNxV4qvWeITFIHTip/30DTnVPK1+YV94Ha/HHHIG3lRSXWS488jO my5QY/MmWnYoB9ciy/yJh/7kJpbtPHTH7Nz5KAE9Lu2mb7puoo3o8uSRadpvO2yp+wjG 0VZP3yl4IANoFXwEmu5I8OSPpXw++lRlAbdxE0/yR8feF1nMYDv7b1oBRq7bMd2KSsBH ygGQ== X-Gm-Message-State: AJIora8yLwCFiCCDOaMzdzMjtb+ph6fMuqUsdTIRFJof3FOsgVncq1+D GTgilBRd54C0HLDQTZup2rPzMQ== X-Received: by 2002:a05:600c:27cd:b0:3a1:8b8c:b156 with SMTP id l13-20020a05600c27cd00b003a18b8cb156mr15358093wmb.156.1656873088277; Sun, 03 Jul 2022 11:31:28 -0700 (PDT) Received: from localhost.localdomain (146725694.box.freepro.com. [130.180.211.218]) by smtp.gmail.com with ESMTPSA id x10-20020a5d54ca000000b0021b85664636sm27504258wrv.16.2022.07.03.11.31.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Jul 2022 11:31:28 -0700 (PDT) From: Daniel Lezcano To: daniel.lezcano@linaro.org, rafael@kernel.org Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, khilman@baylibre.com, abailon@baylibre.com, Amit Kucheria , Zhang Rui Subject: [PATCH v3 02/12] thermal/of: Replace device node match with device node search Date: Sun, 3 Jul 2022 20:30:49 +0200 Message-Id: <20220703183059.4133659-3-daniel.lezcano@linexp.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220703183059.4133659-1-daniel.lezcano@linexp.org> References: <20220703183059.4133659-1-daniel.lezcano@linexp.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The thermal_of code builds a trip array associated with the node pointer in order to compare the trip point phandle with the list. The thermal trip is a thermal zone property and should be moved there. If some sensors have hardcoded trip points, they should use the exported structure instead of redefining again and again their own structure and data to describe exactly the same things. In order to move this to the thermal.h header and allow more cleanup, we need to remove the node pointer from the structure. Instead of building storing the device node, we search directly in the device tree the corresponding node. That results in a simplification of the code and allows to move the structure to thermal.h Cc: Alexandre Bailon Cc: Kevin Hilman Cc; Eduardo Valentin Signed-off-by: Daniel Lezcano --- drivers/thermal/thermal_of.c | 62 ++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c index b65d435cb92f..04c910ca8623 100644 --- a/drivers/thermal/thermal_of.c +++ b/drivers/thermal/thermal_of.c @@ -671,6 +671,35 @@ EXPORT_SYMBOL_GPL(devm_thermal_zone_of_sensor_unregister); /*** functions parsing device tree nodes ***/ +static int of_find_trip_id(struct device_node *np, struct device_node *trip) +{ + struct device_node *trips; + struct device_node *t; + int i = 0; + + trips = of_get_child_by_name(np, "trips"); + if (!trips) { + pr_err("Failed to find 'trips' node\n"); + return -EINVAL; + } + + /* + * Find the trip id point associated with the cooling device map + */ + for_each_child_of_node(trips, t) { + + if (t == trip) + goto out; + i++; + } + + i = -ENXIO; +out: + of_node_put(trips); + + return i; +} + /** * thermal_of_populate_bind_params - parse and fill cooling map data * @np: DT node containing a cooling-map node @@ -686,14 +715,13 @@ EXPORT_SYMBOL_GPL(devm_thermal_zone_of_sensor_unregister); * Return: 0 on success, proper error code otherwise */ static int thermal_of_populate_bind_params(struct device_node *np, - struct __thermal_bind_params *__tbp, - struct thermal_trip *trips, - int ntrips) + struct __thermal_bind_params *__tbp) { struct of_phandle_args cooling_spec; struct __thermal_cooling_bind_param *__tcbp; struct device_node *trip; int ret, i, count; + int trip_id; u32 prop; /* Default weight. Usage is optional */ @@ -708,18 +736,14 @@ static int thermal_of_populate_bind_params(struct device_node *np, return -ENODEV; } - /* match using device_node */ - for (i = 0; i < ntrips; i++) - if (trip == trips[i].np) { - __tbp->trip_id = i; - break; - } - - if (i == ntrips) { - ret = -ENODEV; + trip_id = of_find_trip_id(np, trip); + if (trip_id < 0) { + ret = trip_id; goto end; } + __tbp->trip_id = trip_id; + count = of_count_phandle_with_args(np, "cooling-device", "#cooling-cells"); if (count <= 0) { @@ -868,6 +892,7 @@ static struct __thermal_zone __init *thermal_of_build_thermal_zone(struct device_node *np) { struct device_node *child = NULL, *gchild; + struct device_node *trips; struct __thermal_zone *tz; int ret, i; u32 prop, coef[2]; @@ -910,13 +935,13 @@ __init *thermal_of_build_thermal_zone(struct device_node *np) } /* trips */ - child = of_get_child_by_name(np, "trips"); + trips = of_get_child_by_name(np, "trips"); /* No trips provided */ - if (!child) + if (!trips) goto finish; - tz->ntrips = of_get_child_count(child); + tz->ntrips = of_get_child_count(trips); if (tz->ntrips == 0) /* must have at least one child */ goto finish; @@ -927,14 +952,12 @@ __init *thermal_of_build_thermal_zone(struct device_node *np) } i = 0; - for_each_child_of_node(child, gchild) { + for_each_child_of_node(trips, gchild) { ret = thermal_of_populate_trip(gchild, &tz->trips[i++]); if (ret) goto free_trips; } - of_node_put(child); - /* cooling-maps */ child = of_get_child_by_name(np, "cooling-maps"); @@ -954,8 +977,7 @@ __init *thermal_of_build_thermal_zone(struct device_node *np) i = 0; for_each_child_of_node(child, gchild) { - ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++], - tz->trips, tz->ntrips); + ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++]); if (ret) goto free_tbps; } -- 2.25.1