Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1614055ybh; Mon, 20 Jul 2020 02:54:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzfB2+OBNliJ4xsb3gEVrSYTwDHWdTMgfdVKDVDtL4+Bklw0mloIq41M86Hum90ghD2ZfRF X-Received: by 2002:a05:6402:1ca6:: with SMTP id cz6mr19856673edb.171.1595238852015; Mon, 20 Jul 2020 02:54:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595238852; cv=none; d=google.com; s=arc-20160816; b=NQW13J0XeUKbn6OMnnQEz1G1cfbC5EWa1GTAYQNdVbNGTPEPI4OEupuHcsvC6vJp5o fgiLkoRFkV7HPUmsyTiU+YmfMnxzvwdGXnGpEid7gP6ZWsclJBe8DRhGxPSUd14iGD8B L+bLyuXTmpTDb7E7UrSePSFUnGWusFQU/OFiRZxWGwavLjvzb/rbRdt4c9ZEVQ9evdz0 K3cHXk4X+PH4p7zHQsUu6zcVGBJ+RsKDRZ6RtN6TzEvspJp6KAWDRjrxl1dceWVDicYF i1TKWciNUW6Dno2d80sn0ppMA/zjL73N0eoemnQjlUxjOk+6NJouL60CcqX9OSSttBR+ tMzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=n2cHmL53yXV3ZmDO+QNpbRpa2tPzqP3N0L07wSX88PE=; b=JAxRdRTmMdtj15LyuL2imw4897uJ430RkQskdWpz2duyan7Dp0YHJYex/Ilqsc83S+ zJr6kgWxamf/SMgAblbyhUJ9o0OyJeZWxe58W8GEqFEeZ5tj1rKOjCImQ4YEDioHe7uP RH3DE+XQpJeJKqsbpo4+h7z2e8zcJmPD4k9KHX2mU42+Yp+31YBuECK7cC2LWQiJNQT7 hO6jHULprYPcKHw2x/M61JVCTMzGYiecJt33aL6pVtHBObJrBgHmSIAGqf8ltudL1GBN 6yYqCyGRS2FfN3ztFozpsZE5uKDgkCSCV0P9c+b6y0AqZEUXeRw4eDRVM9t9aecFT0wM ZIWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IfiNG7l2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bo14si10242800edb.112.2020.07.20.02.53.48; Mon, 20 Jul 2020 02:54:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IfiNG7l2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728264AbgGTJvb (ORCPT + 99 others); Mon, 20 Jul 2020 05:51:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728077AbgGTJva (ORCPT ); Mon, 20 Jul 2020 05:51:30 -0400 Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D12CC0619D2 for ; Mon, 20 Jul 2020 02:51:30 -0700 (PDT) Received: by mail-lf1-x142.google.com with SMTP id j21so9362806lfe.6 for ; Mon, 20 Jul 2020 02:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=n2cHmL53yXV3ZmDO+QNpbRpa2tPzqP3N0L07wSX88PE=; b=IfiNG7l2QCoIIBYQIiXB7cuqj8YvM0E+GxhUNlmAueCh58ojnh7mImhk1rIhrSx/9L kIU6UIBqX2uwsA/8RIOE5UI4WU16+n/gIgJghQ7CdfUKclw1MZJjjQgChKmeyxtZInEP vgBymwFw35a/YsXJNeVdbECx0JgCplmxQGoC4UTP7y74HGynJiykkShfHmYPIIdfGncg ikvKl2XCCxwSWjAYIkxsLbrhgaXaT90iQgnAcv2IOpIJs5+nQslQucxTSY2t2puoFexu HaIlQ/s5klVrvRTG6tpRTqWLjY1Ah4/EGHGeKrYSG2raKu8qjw1+fD5OeGyTI3TgYDZ3 4DQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=n2cHmL53yXV3ZmDO+QNpbRpa2tPzqP3N0L07wSX88PE=; b=CClG8ID442WdT0QKyErT1mV1TCX8+89RGYLEzHCk4GMobdsFaYR4X7In7jLACJjbpn 3veNI/O+y6mSOFA3QdhQI99j/6ur6jWmfDzMvlElW4KMogE0jUNzvW0Vo9BwqZCZSRc1 wUcFWemxg++LER5YK7vy4zTk6jAPT3Q0kFMiamqo+6/DQlpPEkoWiHnLQgfcXqibfOcB 8Ubg2pW3GXm6ruAv/wwcPsje9GUoGxTsuaUIBDi9DFmoWrMdJPuP/AS62LsiHvxjWaSZ cvmOliS9f2pCxLCHkxF3VKrOOx81ZjMdexTjMPH/uA2kdsUOl06kgdvRqKWydfRMk7Ys 0DRw== X-Gm-Message-State: AOAM532aWLB0mfX0BzdLfHck2f8rpxIYTbl4aCLl+cSQ5xbk+KizkWIi SK5PYUPC9cghFcArcMrFWxekj1PzIiHNod6gJtVINw== X-Received: by 2002:a19:8505:: with SMTP id h5mr4819390lfd.7.1595238688501; Mon, 20 Jul 2020 02:51:28 -0700 (PDT) MIME-Version: 1.0 References: <20200716022817.30439-1-ansuelsmth@gmail.com> <20200716022817.30439-8-ansuelsmth@gmail.com> In-Reply-To: <20200716022817.30439-8-ansuelsmth@gmail.com> From: Amit Kucheria Date: Mon, 20 Jul 2020 15:21:17 +0530 Message-ID: Subject: Re: [PATCH v4 7/7] drivers: thermal: tsens: add set_trip support for 8960 To: Ansuel Smith Cc: Rob Herring , Andy Gross , Bjorn Andersson , Zhang Rui , Daniel Lezcano , Michael Turquette , Stephen Boyd , linux-arm-msm , Linux PM list , DTML , Linux Kernel Mailing List , linux-clk Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ansuel, On Thu, Jul 16, 2020 at 7:58 AM Ansuel Smith wrote: > > Add custom set_trip function for 8960 needed to set trip point to the > tsens driver for 8960 driver. Please describe why it needs a custom function please. > > Signed-off-by: Ansuel Smith > --- > drivers/thermal/qcom/tsens-8960.c | 78 +++++++++++++++++++++++++++++++ > 1 file changed, 78 insertions(+) > > diff --git a/drivers/thermal/qcom/tsens-8960.c b/drivers/thermal/qcom/tsens-8960.c > index 20d0bfb10f1f..4ad65ab3fd18 100644 > --- a/drivers/thermal/qcom/tsens-8960.c > +++ b/drivers/thermal/qcom/tsens-8960.c > @@ -93,6 +93,15 @@ > TSENS_8064_SENSOR9_EN | \ > TSENS_8064_SENSOR10_EN) > > +/* Trips: from very hot to very cold */ > +enum tsens_trip_type { > + TSENS_TRIP_STAGE3 = 0, > + TSENS_TRIP_STAGE2, > + TSENS_TRIP_STAGE1, > + TSENS_TRIP_STAGE0, > + TSENS_TRIP_NUM, > +}; > + > u32 tsens_8960_slope[] = { > 1176, 1176, 1154, 1176, > 1111, 1132, 1132, 1199, > @@ -110,6 +119,16 @@ static inline int code_to_mdegC(u32 adc_code, const struct tsens_sensor *s) > return adc_code * slope + offset; > } > > +static int mdegC_to_code(int degC, const struct tsens_sensor *s) > +{ > + int slope, offset; > + > + slope = thermal_zone_get_slope(s->tzd); > + offset = CAL_MDEGC - slope * s->offset; > + > + return degC / slope - offset; > +} > + > static void notify_uspace_tsens_fn(struct work_struct *work) > { > struct tsens_sensor *s = container_of(work, struct tsens_sensor, > @@ -448,6 +467,64 @@ static int get_temp_8960(const struct tsens_sensor *s, int *temp) > return -ETIMEDOUT; > } > > +static int set_trip_temp_ipq8064(void *data, int trip, int temp) > +{ > + unsigned int reg_th, reg_cntl; > + int ret, code, code_chk, hi_code, lo_code; > + const struct tsens_sensor *s = data; > + struct tsens_priv *priv = s->priv; > + > + code = mdegC_to_code(temp, s); > + code_chk = code; > + > + if (code < THRESHOLD_MIN_CODE || code > THRESHOLD_MAX_CODE) > + return -EINVAL; > + > + ret = regmap_read(priv->tm_map, STATUS_CNTL_ADDR_8064, ®_cntl); > + if (ret) > + return ret; > + > + ret = regmap_read(priv->tm_map, THRESHOLD_ADDR, ®_th); > + if (ret) > + return ret; > + > + hi_code = (reg_th & THRESHOLD_UPPER_LIMIT_MASK) > + >> THRESHOLD_UPPER_LIMIT_SHIFT; > + lo_code = (reg_th & THRESHOLD_LOWER_LIMIT_MASK) > + >> THRESHOLD_LOWER_LIMIT_SHIFT; > + > + switch (trip) { > + case TSENS_TRIP_STAGE3: > + code <<= THRESHOLD_MAX_LIMIT_SHIFT; > + reg_th &= ~THRESHOLD_MAX_LIMIT_MASK; > + break; > + case TSENS_TRIP_STAGE2: > + if (code_chk <= lo_code) > + return -EINVAL; > + code <<= THRESHOLD_UPPER_LIMIT_SHIFT; > + reg_th &= ~THRESHOLD_UPPER_LIMIT_MASK; > + break; > + case TSENS_TRIP_STAGE1: > + if (code_chk >= hi_code) > + return -EINVAL; > + code <<= THRESHOLD_LOWER_LIMIT_SHIFT; > + reg_th &= ~THRESHOLD_LOWER_LIMIT_MASK; > + break; > + case TSENS_TRIP_STAGE0: > + code <<= THRESHOLD_MIN_LIMIT_SHIFT; > + reg_th &= ~THRESHOLD_MIN_LIMIT_MASK; > + break; > + default: > + return -EINVAL; > + } > + > + ret = regmap_write(priv->tm_map, THRESHOLD_ADDR, reg_th | code); > + if (ret) > + return ret; > + > + return 0; > +} > + > static const struct tsens_ops ops_8960 = { > .init = init_8960, > .calibrate = calibrate_8960, > @@ -456,6 +533,7 @@ static const struct tsens_ops ops_8960 = { > .disable = disable_8960, > .suspend = suspend_8960, > .resume = resume_8960, > + .set_trip_temp = set_trip_temp_ipq8064, > }; > > struct tsens_plat_data data_8960 = { > -- > 2.27.0 >