From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 714D6C433F5 for ; Tue, 26 Apr 2022 22:16:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355778AbiDZWTV (ORCPT ); Tue, 26 Apr 2022 18:19:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355691AbiDZWSu (ORCPT ); Tue, 26 Apr 2022 18:18:50 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 943233F321 for ; Tue, 26 Apr 2022 15:15:40 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id t6so18066wra.4 for ; Tue, 26 Apr 2022 15:15:40 -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=41FtLqXJtllH7xzlv+T0azZoKG0dXHd+GSbdHbIp2ZQ=; b=Qrx3aJq7oPrN3VOcAhWURj9uRchyOfXcnjt7XkCbjy86TY4IV44E9sNytIqUuD1LWW HcDGQd5fcaQGYVr+uK0U3/dH9gNrQNwtMpK0lX3SPYEDXV0EDF9ayFeieMYFlTR1xH6j 2Fpmnn3XNdjV54YfUaAtZve6ogxsiuHSd/RWwfQRAXsv/vfbPf+//Jz+J9ReVQ+TrBhk vSF99rMa203saHyDF9Lh1Qwc5M4SRc9JDEQ5HEKK1y51TBFJrXPg7CRj0pFTD9kM84A3 xUtjr6oxbPe1hfkiguGUn+awReJqWF86k76pYGgmMPCSs69F25PODV5piJYI1tSVpKZ/ eHbA== 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=41FtLqXJtllH7xzlv+T0azZoKG0dXHd+GSbdHbIp2ZQ=; b=N/+8PEyDIMXfNMBVkEiYmZfOBSSszafZlMSxIZbghL4JtN2QuvMs34wD1f6YtJReRq 3byo4G7LUtz9rmZoKp++rZ479vUMN4RgABJh9mWiD2io0U10NBYS0Z5FSsWWSJuYa27j kB2/cIgbMPyYF24jJBiHjRZIRHmNLQt2ibviW5ji3CPBMmerZOiqYJAYwzg64flpqLNb BvrAUiLbITcHFvDnCjTdLHDSpybhqrqJeeOS03IjEhPGrhpRyS/0z3xNCzM1ProzkDwD qIoqfvPK7qjCIDMeMBP0EeFEJr00qVm5rwqDV3zRTxPId/vKoSW4qVIj45s3lOc3xk+m Du1g== X-Gm-Message-State: AOAM533vSiDrAGY/H+7h/d4LLA51JEI0xXQHLb8df6RRZoD1NgSXV3Vd kUkHYpkwqKCT48a4DvzB2OoiXg== X-Google-Smtp-Source: ABdhPJxHFpPzEug/JTYETIxBAjfSmRQW5zreh13yKs3zUkckoRjpvcKR0axofcLLoAiexADnNr2okg== X-Received: by 2002:a5d:4d8e:0:b0:20a:c54d:242c with SMTP id b14-20020a5d4d8e000000b0020ac54d242cmr19795892wru.338.1651011339135; Tue, 26 Apr 2022 15:15:39 -0700 (PDT) Received: from localhost.localdomain (static-176-182-171-101.ncc.abo.bbox.fr. [176.182.171.101]) by smtp.gmail.com with ESMTPSA id j19-20020adfb313000000b0020aed8ece65sm393314wrd.32.2022.04.26.15.15.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Apr 2022 15:15:38 -0700 (PDT) From: Daniel Lezcano To: rafael@kernel.org, daniel.lezcano@linaro.org Cc: khilman@baylibre.com, abailon@baylibre.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 05/15] thermal/of: Replace device node match with device node search Date: Wed, 27 Apr 2022 00:15:13 +0200 Message-Id: <20220426221523.3056696-6-daniel.lezcano@linexp.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220426221523.3056696-1-daniel.lezcano@linexp.org> References: <20220426221523.3056696-1-daniel.lezcano@linexp.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 932b6450eac4..84c37493e27f 100644 --- a/drivers/thermal/thermal_of.c +++ b/drivers/thermal/thermal_of.c @@ -659,6 +659,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 @@ -674,14 +703,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 */ @@ -696,18 +724,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) { @@ -856,6 +880,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]; @@ -898,13 +923,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; @@ -915,14 +940,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"); @@ -942,8 +965,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