From patchwork Mon Dec 3 02:48:41 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 1831831 X-Patchwork-Delegate: rui.zhang@intel.com Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id AAFD3DF254 for ; Mon, 3 Dec 2012 02:48:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754546Ab2LCCso (ORCPT ); Sun, 2 Dec 2012 21:48:44 -0500 Received: from mail-da0-f46.google.com ([209.85.210.46]:46354 "EHLO mail-da0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754530Ab2LCCsn (ORCPT ); Sun, 2 Dec 2012 21:48:43 -0500 Received: by mail-da0-f46.google.com with SMTP id p5so1099302dak.19 for ; Sun, 02 Dec 2012 18:48:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:sender:message-id:from:to:cc:in-reply-to:references:from :subject:user-agent:mime-version:content-type; bh=SxbnWyc0yr7AmDNkfR0/IpV18tRvMK00bZkbTfdxKzY=; b=H3cTOqCrdYkf2h/MMDzcS6o2bHcYTyugIAvlddXl6NlHxSQL6ZCrhLeuQRM5q9SLKS ToeABi8w+q9LQM2sgE9B0IdDPpeZJm37ErorLQw0T5SV8UG6iTYdOp+82o+mx6s6bS/s qL/wLjb7AMPsSTHwLtD1k0TH9uKdKHZHAbQvEGnHMtU2mV2fNsxKA3aTD691OyV+uOSE iheA3rrEup0AVDWL5MxkuUXpD7Gc2KX2pl9maEeCN/5vV8ZJutfW1nIdRLKecewUjeN0 hbnCiE+otHsw0qto4FzHL4wKvsgsvfh/f+sXg7f/42kA4vkRZ6XeMYwghG+KmtFr98n5 lTGw== Received: by 10.66.88.197 with SMTP id bi5mr21854904pab.36.1354502922724; Sun, 02 Dec 2012 18:48:42 -0800 (PST) Received: from morimoto-Dell-XPS420.gmail.com (49.14.32.202.bf.2iij.net. [202.32.14.49]) by mx.google.com with ESMTPS id bh9sm7185565pab.12.2012.12.02.18.48.40 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 02 Dec 2012 18:48:41 -0800 (PST) Date: Sun, 02 Dec 2012 18:48:41 -0800 (PST) Message-ID: <87fw3nrgu1.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto To: Zhang Rui Cc: Simon , Magnus , linux-pm@vger.kernel.org, Kuninori Morimoto In-Reply-To: <87hao3rh9t.wl%kuninori.morimoto.gx@renesas.com> References: <87sj82uo7o.wl%kuninori.morimoto.gx@renesas.com> <87pq36uo5v.wl%kuninori.morimoto.gx@renesas.com> <1353652189.2111.7.camel@rzhang1-mobl4> <87k3t9w39m.wl%kuninori.morimoto.gx@renesas.com> <1353894734.2299.16.camel@rzhang1-mobl4> <87ip8tw0x1.wl%kuninori.morimoto.gx@renesas.com> <87ehjhw0ty.wl%kuninori.morimoto.gx@renesas.com> <1354496556.1936.7.camel@rzhang1-mobl4> <87ip8jri4f.wl%kuninori.morimoto.gx@renesas.com> <1354501553.1936.38.camel@rzhang1-mobl4> <87hao3rh9t.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v2] thermal: rcar: add .get_trip_type/temp and .notify support User-Agent: Wanderlust/2.14.0 Emacs/23.3 Mule/6.0 MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org This patch adds .get_trip_type(), .get_trip_temp(), and .notify() on rcar_thermal_zone_ops. Driver will try platform power OFF if it reached to critical temperature. Signed-off-by: Kuninori Morimoto --- v1 -> v2 - fixup (90 - 1) -> (90) - fixup comment /* +90 <= temp <= +135 */ -> /* +90 <= temp */ drivers/thermal/rcar_thermal.c | 68 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/drivers/thermal/rcar_thermal.c b/drivers/thermal/rcar_thermal.c index 90db951..89979ff 100644 --- a/drivers/thermal/rcar_thermal.c +++ b/drivers/thermal/rcar_thermal.c @@ -22,10 +22,13 @@ #include #include #include +#include #include #include #include +#define IDLE_INTERVAL 5000 + #define THSCR 0x2c #define THSSR 0x30 @@ -176,8 +179,66 @@ static int rcar_thermal_get_temp(struct thermal_zone_device *zone, return 0; } +static int rcar_thermal_get_trip_type(struct thermal_zone_device *zone, + int trip, enum thermal_trip_type *type) +{ + struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone); + + /* see rcar_thermal_get_temp() */ + switch (trip) { + case 0: /* +90 <= temp */ + *type = THERMAL_TRIP_CRITICAL; + break; + default: + dev_err(priv->dev, "rcar driver trip error\n"); + return -EINVAL; + } + + return 0; +} + +static int rcar_thermal_get_trip_temp(struct thermal_zone_device *zone, + int trip, unsigned long *temp) +{ + struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone); + + /* see rcar_thermal_get_temp() */ + switch (trip) { + case 0: /* +90 <= temp */ + *temp = MCELSIUS(90); + break; + default: + dev_err(priv->dev, "rcar driver trip error\n"); + return -EINVAL; + } + + return 0; +} + +static int rcar_thermal_notify(struct thermal_zone_device *zone, + int trip, enum thermal_trip_type type) +{ + struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone); + + switch (type) { + case THERMAL_TRIP_CRITICAL: + /* FIXME */ + dev_warn(priv->dev, + "Thermal reached to critical temperature\n"); + machine_power_off(); + break; + default: + break; + } + + return 0; +} + static struct thermal_zone_device_ops rcar_thermal_zone_ops = { - .get_temp = rcar_thermal_get_temp, + .get_temp = rcar_thermal_get_temp, + .get_trip_type = rcar_thermal_get_trip_type, + .get_trip_temp = rcar_thermal_get_trip_temp, + .notify = rcar_thermal_notify, }; /* @@ -211,8 +272,9 @@ static int rcar_thermal_probe(struct platform_device *pdev) return -ENOMEM; } - zone = thermal_zone_device_register("rcar_thermal", 0, 0, priv, - &rcar_thermal_zone_ops, NULL, 0, 0); + zone = thermal_zone_device_register("rcar_thermal", 1, 0, priv, + &rcar_thermal_zone_ops, NULL, 0, + IDLE_INTERVAL); if (IS_ERR(zone)) { dev_err(&pdev->dev, "thermal zone device is NULL\n"); return PTR_ERR(zone);