From patchwork Fri Dec 4 03:17:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 7765191 X-Patchwork-Delegate: horms@verge.net.au Return-Path: X-Original-To: patchwork-linux-sh@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id A5CEF9FCA2 for ; Fri, 4 Dec 2015 03:17:54 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 82588204A7 for ; Fri, 4 Dec 2015 03:17:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 63D0120454 for ; Fri, 4 Dec 2015 03:17:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755198AbbLDDRv (ORCPT ); Thu, 3 Dec 2015 22:17:51 -0500 Received: from relmlor3.renesas.com ([210.160.252.173]:31433 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755102AbbLDDRu (ORCPT ); Thu, 3 Dec 2015 22:17:50 -0500 Received: from unknown (HELO relmlir1.idc.renesas.com) ([10.200.68.151]) by relmlie2.idc.renesas.com with ESMTP; 04 Dec 2015 12:17:48 +0900 Received: from relmlac3.idc.renesas.com (relmlac3.idc.renesas.com [10.200.69.23]) by relmlir1.idc.renesas.com (Postfix) with ESMTP id DDB6D44361; Fri, 4 Dec 2015 12:17:48 +0900 (JST) Received: by relmlac3.idc.renesas.com (Postfix, from userid 0) id D88CD1806F; Fri, 4 Dec 2015 12:17:48 +0900 (JST) Received: from relmlac3.idc.renesas.com (localhost [127.0.0.1]) by relmlac3.idc.renesas.com (Postfix) with ESMTP id D37B01800A; Fri, 4 Dec 2015 12:17:48 +0900 (JST) Received: from relmlii1.idc.renesas.com [10.200.68.65] by relmlac3.idc.renesas.com with ESMTP id NBZ04165; Fri, 4 Dec 2015 12:17:48 +0900 X-IronPort-AV: E=Sophos;i="5.20,378,1444662000"; d="scan'";a="199869502" Received: from mail-hk2apc01lp0214.outbound.protection.outlook.com (HELO APC01-HK2-obe.outbound.protection.outlook.com) ([65.55.88.214]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA; 04 Dec 2015 12:17:48 +0900 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.144) by HKXPR06MB1016.apcprd06.prod.outlook.com (10.161.181.156) with Microsoft SMTP Server (TLS) id 15.1.331.20; Fri, 4 Dec 2015 03:17:43 +0000 Message-ID: <87y4dagb0i.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH 2/4] thermal: rcar: enable to use thermal-zone on DT User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 To: Simon , Zhang Rui , Eduardo Valentin CC: Magnus , , , In-Reply-To: <871tb2hpn2.wl%kuninori.morimoto.gx@renesas.com> References: <871tb2hpn2.wl%kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Fri, 4 Dec 2015 03:17:43 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: HKXPR02CA0052.apcprd02.prod.outlook.com (25.161.48.37) To HKXPR06MB1016.apcprd06.prod.outlook.com (25.161.181.156) X-Microsoft-Exchange-Diagnostics: 1; HKXPR06MB1016; 2:04km38btlMFISmtgpySj1uMjy2RNOItw0d76v4UI/bqcy4+N6WBCf8pr/1u0IYZrP33QUac7HzpC2OnaTFkGSBVGfDRv+R64bxpkBxTFFz8y9xso0dsuCuWCUgaNon6t/rjsQmEIBFslAleVOqZ2gw==; 3:kCxFobU5C5wHhxJ9QJbcjZBPSEE9vQOGmBUlf0pgrqGFBCRJay31zskDsEaS/PZIVrssn+uZzPIYNzxmnEUMU8VScbvjFGvlNzC91JZXpF22CCjBJJaJRP9dSGA5ViMw; 25:Fhq8sTKxXdCqGvEH6pu83nx563DGmHZanN+ERalWUZzMbDFaN8huLNFTG5Sv92Su35AjQSZnuuZ3QT3XltKNvAojWHJGq6wUAD5ZB8+fWezLOHvwsQewWkBnM2YjdqqCnPNTo3/PmEcYi8L009LMyt7fvAy+GYTf7ZoYYDlXhE6mrMYycnbnGd3JbRu1MpNjx7X1qkxSMEJfzs6DXC3hB/yCOee79cOHcc8YBt6ujjX/NEL/S6DjNh1Fc4pwyBW+SySkkwWH+RvenZxCO2pVIQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HKXPR06MB1016; X-Microsoft-Exchange-Diagnostics: 1; HKXPR06MB1016; 20:X+s03BKDwnJhs/ll+GfG65bc7u5rEoVrFyC5iU6vSiUI6KRWGmD9EleAcg6reGPiSkBYeBX6RdjY+qNCup/uz8LJRwpSvhpbEeSZdPDt+tTcJDUR109EhZgCJYDN5FuXHDTiq7gRzFf0nv+2UXAV0d88e1o4QyKAzp4GZL89mOgWAqayjy57AOexfOnQdEVY3WgN4Gy6v2EUUsmuIq8ZTT0dd6lGljQ5FtUDXSWwyQcTJ7MAwg2iMXl50L98mSwH1jVBCzKm58TtXn6RQlTXhI7eoY1lxXeydwIli9lSxJGPGbkuPPY3DqSo/PHneAwItEjY8J8tjpNm6dDAK9CTfsbNsnnsoGlWQnNjNDNyPHJx2vWClDWoHQae5iQ4aJZruNfFTm6QViPkVdkQAQVCim+W3JGdfrsYOTFbIEfxFsy0HhzqTvE2s1EOjhZJU3pVhAkN678OewnouBNnAcfWjtUinW/V9TVadWYavwFwoILp4JNyQp6Blk9mHnvCnxVx; 4:Vy0TKecZDOCObT7MSNrtBjJPJzxcU+nAdvODd5XF0GRp1pNxioRS8OrWbWO5d18yQ7hKEB0xqwDwwkVPowO3nfVL1HyOKEYowSZ0KWPMe3cOSwA7dLRla5fhFXy4FKbAwR3AUgFsAKozq7okeGKVaoqc2ShIcsarEn7nfJpupvEzC54jVMU+y3/kHdrTVsDjgUPiNmSaHFnYtk4XIu+CwJYuURgh5+7d79DlbKFEkdSTQzD19CIh0tYUpGISnBojk6gnLYVWsiOtUqC4QbQPn8OghiAAQdNzi5/Pb75O57A/UE1AHJmrpjKxlWSb2PcrlebFBTD1XlCCBk5pEH4pLhOexs+tLlvqHjr1zWas6ekpArar0d7FOs3eWLEdhxpMDQYVzCNLXTlcCW2NjsF2VeKvbwFOJswUKGEpyn Kl4MIEgvebf9tgobDoTtFeYlgf X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(85106069007906); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001)(10201501046); SRVR:HKXPR06MB1016; BCL:0; PCL:0; RULEID:; SRVR:HKXPR06MB1016; X-Forefront-PRVS: 07807C55DC X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(189002)(199003)(33646002)(69596002)(106356001)(83506001)(19580405001)(40100003)(19580395003)(77096005)(229853001)(53416004)(86362001)(42186005)(586003)(92566002)(36756003)(46406003)(105586002)(5004730100002)(81156007)(4001350100001)(6116002)(97736004)(1096002)(5001770100001)(66066001)(76176999)(50986999)(54356999)(50466002)(2950100001)(3846002)(23726003)(47776003)(101416001)(189998001)(87976001)(5008740100001)(122386002)(5001960100002); DIR:OUT; SFP:1102; SCL:1; SRVR:HKXPR06MB1016; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HKXPR06MB1016; 23:NvF3kFkTJCJlu0enabyAqwDLOdcYoq7SSS3fQh9jz?= =?us-ascii?Q?Kdhyp1QCwPUNeuSz6WxNJFy5dee7UDg7AspQVrYcbaD7dpU+bU3963kDsJgt?= =?us-ascii?Q?UPNel/zT/qgT8gUIxHSdV8km5UAi9uggXb7/e8ZjRhrSyFnq2/yIU7esso0y?= =?us-ascii?Q?+lKK1W3rFRrc1O7uI7EZ7/ufp/vTieVxBCnH4ehogA5bmEdxmhlXIl/epJ8U?= =?us-ascii?Q?Uoz3OPTw4Wg//nr2P+lhFYycHF7ZF767prV2hbcs5rq0Y0UziuD9rpFQyv12?= =?us-ascii?Q?f2Tc4Aa3Rm4oWIJo9SLQVJpap9heK7xvDRo5yCfISFJfLmAgrLnESbbhtGdO?= =?us-ascii?Q?xfM8TiC++vow44cNZ9hyUcj5A37VdPrh7rNoL/RlzWBS0zoWValPVktH3QX8?= =?us-ascii?Q?ezVL6KGR0Hg7ILaRAqA/LiKlfb21KRtpx4UOHQHu7NFnAWBbUPP8QQbAswke?= =?us-ascii?Q?tRcmsq2im86b2a9ak/ChJAwylSCun8x9d/7Z6uaDesXYTCnygyLoORfbU4y6?= =?us-ascii?Q?TseaaD4pDaVB8Q+Xz7Tk6R01VOpqCm6yW3u4ZgP/80Zs8v+8SzOBcDOSbY5j?= =?us-ascii?Q?9to/Yr3MFD6UkflJwH48P5tt3ZZbfBT6M1Q1LePBSQfTx0StFGY/FlBLSxa8?= =?us-ascii?Q?4DskVTwBvf2fsPu+OMpRa63loeAC0MstWRHdlsNiEzzE0YFbJhWSEE7dx9wo?= =?us-ascii?Q?SLWl8216nvzk5+nkMfqviSUyQjF76qn8ytuH+/1iqgJytNastvpItWgMaOFh?= =?us-ascii?Q?A3DgkrVojXVPzxJPFK79dqRbDJqKXMzFEqedBKXs5cS7fvmpY7OYw5rIr6mz?= =?us-ascii?Q?ZavyCu502g7WHaJ71R/FaYmcg/EKNZVd6HS7W6owWhmxDlEGxLUa0lcvnr86?= =?us-ascii?Q?V3UHAOSEoyxsmEyPFALGDk5HcFheWBxdFuXbgpudNWYgV8edR9/sQqnsCM1J?= =?us-ascii?Q?Rcv2d9wY1WGp8Wz/jXxZdJ3/IRzjwfheVcmvBOA2uzl8JZqrt5oj882lLJFO?= =?us-ascii?Q?5kjvp8nX5S+eCyeIy/jvrQz/SZq2z/bf4CJmF6RpaUesh4R6nIDpz667Aqkq?= =?us-ascii?Q?TfxoWI4PuZCWOeuv2UgVhr3eSHv+f+XwU82Z1VqX44ByFEi5N2P1TSbXvEeT?= =?us-ascii?Q?fS+X8Jcysc=3D?= X-Microsoft-Exchange-Diagnostics: 1; HKXPR06MB1016; 5:X6r/E4BrosqXEM05ArUR38dcAJSPUH/Vru4gpnJkMXGRF4vA+K78hZVq+DSutLitL3eh4QF0bOhoubAWJGK7d5mgAXGJu4fp5XfOS+oyJItZxpLAaIomhOdtnM6a2APl44sSc0WJ1Os26rWN7+H11A==; 24:jB+X5bB1MwRGB3IHnj4OYjl55NEfSnUMz4CZeBxOK1Kt7lpRjeaz8E9omN1xswP+CgxfMP6At/fq9MF61eH2Fprt6bHFSbDAEtIuTsyGXGM=; 20:EvewOYOtEgUwoFwoHk2q48+LGzhk3NAHp4AXnlFBBmaO/AF/5raKQXi6l3W4q39dWoAiSS2n2HiBr/sctv/Bf3odWNmAwwvbh7A0TjiCPgryKwzC198W0ur314ozgRYzkn2Hmsn1X0lrQhNYj0Vz3ril9Aeem1m9E3nhAyGZhrQ= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2015 03:17:43.8506 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HKXPR06MB1016 Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Kuninori Morimoto This patch enables to use thermal-zone on DT if it was call as "renesas,rcar-thermal-gen2". Previous style is still supported by "renesas,rcar-thermal". Signed-off-by: Kuninori Morimoto --- .../devicetree/bindings/thermal/rcar-thermal.txt | 37 +++++++++++++++++- drivers/thermal/rcar_thermal.c | 45 +++++++++++++++++++--- 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/Documentation/devicetree/bindings/thermal/rcar-thermal.txt b/Documentation/devicetree/bindings/thermal/rcar-thermal.txt index 332e625..904f204 100644 --- a/Documentation/devicetree/bindings/thermal/rcar-thermal.txt +++ b/Documentation/devicetree/bindings/thermal/rcar-thermal.txt @@ -1,8 +1,9 @@ * Renesas R-Car Thermal Required properties: -- compatible : "renesas,thermal-", "renesas,rcar-thermal" - as fallback. +- compatible : "renesas,thermal-", + "renesas,rcar-thermal-gen2" (with thermal-zone) or + "renesas,rcar-thermal" (without thermal-zone) as fallback. Examples with soctypes are: - "renesas,thermal-r8a73a4" (R-Mobile APE6) - "renesas,thermal-r8a7779" (R-Car H1) @@ -36,3 +37,35 @@ thermal@e61f0000 { 0xe61f0300 0x38>; interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>; }; + +Example (with thermal-zone): + +thermal-zones { + cpu_thermal: cpu-thermal { + polling-delay-passive = <1000>; + polling-delay = <5000>; + + thermal-sensors = <&thermal>; + + trips { + cpu-crit { + temperature = <1150000>; + hysteresis = <0>; + type = "critical"; + }; + }; + cooling-maps { + }; + }; +}; + +thermal: thermal@e61f0000 { + compatible = "renesas,thermal-r8a7790", + "renesas,rcar-thermal-gen2", + "renesas,rcar-thermal"; + reg = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>; + interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&mstp5_clks R8A7790_CLK_THERMAL>; + power-domains = <&cpg_clocks>; + #thermal-sensor-cells = <0>; +}; diff --git a/drivers/thermal/rcar_thermal.c b/drivers/thermal/rcar_thermal.c index 96707a6..9c9e38b 100644 --- a/drivers/thermal/rcar_thermal.c +++ b/drivers/thermal/rcar_thermal.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -81,8 +82,10 @@ struct rcar_thermal_priv { # define rcar_force_update_temp(priv) 0 #endif +#define USE_OF_THERMAL 1 static const struct of_device_id rcar_thermal_dt_ids[] = { { .compatible = "renesas,rcar-thermal", }, + { .compatible = "renesas,rcar-thermal-gen2", .data = (void *)USE_OF_THERMAL }, {}, }; MODULE_DEVICE_TABLE(of, rcar_thermal_dt_ids); @@ -206,17 +209,35 @@ err_out_unlock: return ret; } -static int rcar_thermal_get_temp(struct thermal_zone_device *zone, int *temp) +static int rcar_thermal_get_current_temp(struct rcar_thermal_priv *priv) { - struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone); + int temp; if (!rcar_has_irq_support(priv) || rcar_force_update_temp(priv)) rcar_thermal_update_temp(priv); mutex_lock(&priv->lock); - *temp = MCELSIUS((priv->ctemp * 5) - 65); + temp = MCELSIUS((priv->ctemp * 5) - 65); mutex_unlock(&priv->lock); + return temp; +} + +static int rcar_thermal_of_get_temp(void *data, int *temp) +{ + struct rcar_thermal_priv *priv = data; + + *temp = rcar_thermal_get_current_temp(priv); + + return 0; +} + +static int rcar_thermal_get_temp(struct thermal_zone_device *zone, int *temp) +{ + struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone); + + *temp = rcar_thermal_get_current_temp(priv); + return 0; } @@ -276,6 +297,10 @@ static int rcar_thermal_notify(struct thermal_zone_device *zone, return 0; } +static const struct thermal_zone_of_device_ops rcar_thermal_zone_of_ops = { + .get_temp = rcar_thermal_of_get_temp, +}; + static struct thermal_zone_device_ops rcar_thermal_zone_ops = { .get_temp = rcar_thermal_get_temp, .get_trip_type = rcar_thermal_get_trip_type, @@ -308,11 +333,11 @@ static void rcar_thermal_work(struct work_struct *work) priv = container_of(work, struct rcar_thermal_priv, work.work); - rcar_thermal_get_temp(priv->zone, &cctemp); + cctemp = rcar_thermal_get_current_temp(priv); rcar_thermal_update_temp(priv); rcar_thermal_irq_enable(priv); - rcar_thermal_get_temp(priv->zone, &nctemp); + nctemp = rcar_thermal_get_current_temp(priv); if (nctemp != cctemp) thermal_zone_device_update(priv->zone); } @@ -391,6 +416,8 @@ static int rcar_thermal_probe(struct platform_device *pdev) struct rcar_thermal_priv *priv; struct device *dev = &pdev->dev; struct resource *res, *irq; + const struct of_device_id *of_id = of_match_device(rcar_thermal_dt_ids, dev); + unsigned long of_data = (unsigned long)of_id->data; int mres = 0; int i; int ret = -ENODEV; @@ -449,7 +476,13 @@ static int rcar_thermal_probe(struct platform_device *pdev) INIT_DELAYED_WORK(&priv->work, rcar_thermal_work); rcar_thermal_update_temp(priv); - priv->zone = thermal_zone_device_register("rcar_thermal", + if (of_data == USE_OF_THERMAL) + priv->zone = thermal_zone_of_sensor_register( + dev, i, priv, + &rcar_thermal_zone_of_ops); + else + priv->zone = thermal_zone_device_register( + "rcar_thermal", 1, 0, priv, &rcar_thermal_zone_ops, NULL, 0, idle);