Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10783565imu; Thu, 6 Dec 2018 06:46:11 -0800 (PST) X-Google-Smtp-Source: AFSGD/XP45oLU/F+8IAvLtICg6cHtMGiP2l9kz4vj/nCS/2reaLoCNbgtFtlsRLzt8V5ugLgGJGX X-Received: by 2002:a63:ee4c:: with SMTP id n12mr23589992pgk.21.1544107571277; Thu, 06 Dec 2018 06:46:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544107571; cv=none; d=google.com; s=arc-20160816; b=AmK2mbfgqAw+VHQLLY77f9fAcMXrwOld+1VlxhyqnuAkj4ZuBUgtH2FHsa53IFeoq+ whbX8AWZHiz3D3pe4RuCXUML+BKWNMcQ5+f8yxrzI6geBEobWyVjeSOk8oP7EUu/Igpd AixF2Yx/7YURzdwI7t2wrNPi7V6HH4xKeVwQYD24hPwJP1rp7GPrSXvfRxpcdius0m40 e1F9uSRMPwr3Ri1O/jq2Kmz0rMk31al4KoJIMkfO9DtMsiuNR0WjMpgkgcevSSH24Sqi xmPf0s/dTbmL5BEirAE8AuMZbP8WdRTw3KXpRquNDAP/cp/CXbDiVsnYF6YQxg8ELxWU FqNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=H9PR5hDczzSZJry3nwEurreKAQjfx4vQqabz5LI64WY=; b=a2vky56JYYOt90u3YSvI+9PuODvht9MehJ3xI0K7CXOzXav8aPWBsksBbsP3RJSDb3 Dxx1M418XKahcgzAQeesCctHUn+CQyZxCwoMD14npPe5/Rc78SFo0AhAc17Cw2TaLz0N X83f0Ixnujeg1jj6bGeBRPOPC6YUR6b4tCrS+LTMNFhFPQAAASBE5jkd1PFy614O4Wyp 8u0ZrorUu8Yg9emIK1YHYm/QantmMTaXSFrPzHOAo7lToOekhLj6iAxGxXcSAyLEoMF5 PCsfkUgwl47F27485bVuLQrb9YosoRO61zzeCa7Jn9/PsI+xVtM5+YU9VT1hgx7E8BrH WVXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QlJZf1Dp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v13si399578pgn.355.2018.12.06.06.45.42; Thu, 06 Dec 2018 06:46:11 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QlJZf1Dp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730672AbeLFOn3 (ORCPT + 99 others); Thu, 6 Dec 2018 09:43:29 -0500 Received: from mail.kernel.org ([198.145.29.99]:47864 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730657AbeLFOn1 (ORCPT ); Thu, 6 Dec 2018 09:43:27 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 96640214E0; Thu, 6 Dec 2018 14:43:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544107406; bh=enkqHnl505A2Wrv1Df9nEW0vCpC36NsjFN0HKGm3Ago=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QlJZf1DpZEvWyBRAqtnW99AnGOS+1+xVnDgY0wfoTjjq7MXvs7WgSMFcZoFHYn7Gu vQZlpuYwaybIKkUZWIiFOC8tvUtY34yEGYQyJuTwUKLTET+Gt7tyTwBUZgYpHjilH7 1tRmtdzhRm9Ho3UZw/NGSXiV7H8NO2sDzQvVySi4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Daniel Lezcano , Leo Yan , "Wangtao (Kevin, Kirin)" , Eduardo Valentin , Rafael David Tinoco Subject: [PATCH 4.14 48/55] thermal/drivers/hisi: Remove the multiple sensors support Date: Thu, 6 Dec 2018 15:39:22 +0100 Message-Id: <20181206143004.335300031@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181206143001.749982936@linuxfoundation.org> References: <20181206143001.749982936@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Daniel Lezcano commit ff4ec2997df8fe7cc40513dbe5f86d9f88fb6be7 upstream. By essence, the tsensor does not really support multiple sensor at the same time. It allows to set a sensor and use it to get the temperature, another sensor could be switched but with a delay of 3-5ms. It is difficult to read simultaneously several sensors without a big delay. Today, just one sensor is used, it is not necessary to deal with multiple sensors in the code. Remove them and if it is needed in the future add them on top of a code which will be clean up in the meantime. Signed-off-by: Daniel Lezcano Reviewed-by: Leo Yan Acked-by: Wangtao (Kevin, Kirin) Signed-off-by: Eduardo Valentin Signed-off-by: Rafael David Tinoco Signed-off-by: Greg Kroah-Hartman --- drivers/thermal/hisi_thermal.c | 75 ++++++++++------------------------------- 1 file changed, 19 insertions(+), 56 deletions(-) --- a/drivers/thermal/hisi_thermal.c +++ b/drivers/thermal/hisi_thermal.c @@ -40,6 +40,7 @@ #define HISI_TEMP_STEP (784) #define HISI_MAX_SENSORS 4 +#define HISI_DEFAULT_SENSOR 2 struct hisi_thermal_sensor { struct hisi_thermal_data *thermal; @@ -54,9 +55,8 @@ struct hisi_thermal_data { struct mutex thermal_lock; /* protects register data */ struct platform_device *pdev; struct clk *clk; - struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS]; - - int irq, irq_bind_sensor; + struct hisi_thermal_sensor sensors; + int irq; bool irq_enabled; void __iomem *regs; @@ -133,7 +133,7 @@ static void hisi_thermal_enable_bind_irq mutex_lock(&data->thermal_lock); - sensor = &data->sensors[data->irq_bind_sensor]; + sensor = &data->sensors; /* setting the hdak time */ writel(0x0, data->regs + TEMP0_CFG); @@ -181,31 +181,8 @@ static int hisi_thermal_get_temp(void *_ struct hisi_thermal_sensor *sensor = _sensor; struct hisi_thermal_data *data = sensor->thermal; - int sensor_id = -1, i; - long max_temp = 0; - *temp = hisi_thermal_get_sensor_temp(data, sensor); - sensor->sensor_temp = *temp; - - for (i = 0; i < HISI_MAX_SENSORS; i++) { - if (!data->sensors[i].tzd) - continue; - - if (data->sensors[i].sensor_temp >= max_temp) { - max_temp = data->sensors[i].sensor_temp; - sensor_id = i; - } - } - - /* If no sensor has been enabled, then skip to enable irq */ - if (sensor_id == -1) - return 0; - - mutex_lock(&data->thermal_lock); - data->irq_bind_sensor = sensor_id; - mutex_unlock(&data->thermal_lock); - dev_dbg(&data->pdev->dev, "id=%d, irq=%d, temp=%d, thres=%d\n", sensor->id, data->irq_enabled, *temp, sensor->thres_temp); /* @@ -218,7 +195,7 @@ static int hisi_thermal_get_temp(void *_ return 0; } - if (max_temp < sensor->thres_temp) { + if (*temp < sensor->thres_temp) { data->irq_enabled = true; hisi_thermal_enable_bind_irq_sensor(data); enable_irq(data->irq); @@ -245,22 +222,16 @@ static irqreturn_t hisi_thermal_alarm_ir { struct hisi_thermal_data *data = dev; struct hisi_thermal_sensor *sensor; - int i; mutex_lock(&data->thermal_lock); - sensor = &data->sensors[data->irq_bind_sensor]; + sensor = &data->sensors; dev_crit(&data->pdev->dev, "THERMAL ALARM: T > %d\n", sensor->thres_temp); mutex_unlock(&data->thermal_lock); - for (i = 0; i < HISI_MAX_SENSORS; i++) { - if (!data->sensors[i].tzd) - continue; - - thermal_zone_device_update(data->sensors[i].tzd, - THERMAL_EVENT_UNSPECIFIED); - } + thermal_zone_device_update(data->sensors.tzd, + THERMAL_EVENT_UNSPECIFIED); return IRQ_HANDLED; } @@ -317,7 +288,6 @@ static int hisi_thermal_probe(struct pla { struct hisi_thermal_data *data; struct resource *res; - int i; int ret; data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); @@ -359,14 +329,13 @@ static int hisi_thermal_probe(struct pla hisi_thermal_enable_bind_irq_sensor(data); data->irq_enabled = true; - for (i = 0; i < HISI_MAX_SENSORS; ++i) { - ret = hisi_thermal_register_sensor(pdev, data, - &data->sensors[i], i); - if (ret) - dev_err(&pdev->dev, - "failed to register thermal sensor: %d\n", ret); - else - hisi_thermal_toggle_sensor(&data->sensors[i], true); + ret = hisi_thermal_register_sensor(pdev, data, + &data->sensors, + HISI_DEFAULT_SENSOR); + if (ret) { + dev_err(&pdev->dev, "failed to register thermal sensor: %d\n", + ret); + return ret; } ret = devm_request_threaded_irq(&pdev->dev, data->irq, @@ -378,6 +347,8 @@ static int hisi_thermal_probe(struct pla return ret; } + hisi_thermal_toggle_sensor(&data->sensors, true); + enable_irq(data->irq); return 0; @@ -386,17 +357,9 @@ static int hisi_thermal_probe(struct pla static int hisi_thermal_remove(struct platform_device *pdev) { struct hisi_thermal_data *data = platform_get_drvdata(pdev); - int i; - - for (i = 0; i < HISI_MAX_SENSORS; i++) { - struct hisi_thermal_sensor *sensor = &data->sensors[i]; - - if (!sensor->tzd) - continue; - - hisi_thermal_toggle_sensor(sensor, false); - } + struct hisi_thermal_sensor *sensor = &data->sensors; + hisi_thermal_toggle_sensor(sensor, false); hisi_thermal_disable_sensor(data); clk_disable_unprepare(data->clk);