Message ID | 20230515162604.649203-1-quic_bjorande@quicinc.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp7047235vqo; Mon, 15 May 2023 09:33:07 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5osw3ucZkaZ8GbYnqyvv/mCaShhQ2Z6l8e7ctJjrSq7Iv2Cxvl+lJrL75rQs9VTiJuIib+ X-Received: by 2002:a05:6a00:cc4:b0:647:4dee:62b7 with SMTP id b4-20020a056a000cc400b006474dee62b7mr33862885pfv.29.1684168387504; Mon, 15 May 2023 09:33:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684168387; cv=none; d=google.com; s=arc-20160816; b=XHibZn2mtw8asrc6CxIVha7+5k9X/d2SjDTnrSVEC/5bHiIKKooQWGR3uQsG20vl12 VUC1k7Qvh1ppssxE8J42lrWlKO1vfbbstKtvjHKiNvoYF2e81aBGOWIUtJjJ3OFtnHxB VT25vqzTnqDvi0aUsDEf4iuj3KpC0Wxba3UvkL2Ri96sVYzUEDTddLaLrsfq0EFnisw3 SaCqlJQLq7Gjqp8Mrk+0F8VLzrdXUpaN02QTsANeZcAEm/LznRYK1tMTncFgapqlqHyJ NJOf2mGBmF71q5/iOxTZCzKUwukMPyqUx4yrE1Z5isA2mnznCbnNwep0KrLLNUblpGXF O0tQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=41opc/0UrQd/HOm8o9Kr2RoTJPOV3lSeWNpIRjNplSw=; b=XXF47hLhXpSWCgZZG9uYgUG8bpoFGHrpRtVxiU8pGPRXVbtUdsBlePuJR9cwuC4SZF ydqAieI5ZL1/UD/FsYFdfZrvSBs8mGB9xK0JiEhnGTDtgllVrpH2ObHLjexNy+20WMCf tlq1/VJMJUhiy1w7fvoVrR4g2dSdCP4Ecbjy0dA5toYAn2puqvdcwxs7ZYv/sX4dQPLM R+imJZ3IaaONtDF+r5bINOESzo0iU9ifpQmVbEwR/wn7EhJKQAW3v+NYLOlznwECVPeF kmen9sqSC3LfgKmy5P0nrItcHqM2cDwL1aj3gyWV0uLz8Of18lAi4E3BMvEPWlo1LG3k 7ckg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=J11sgL98; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 15-20020a62170f000000b0063b5f25dd95si17998178pfx.391.2023.05.15.09.32.55; Mon, 15 May 2023 09:33:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=J11sgL98; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237573AbjEOQ0f (ORCPT <rfc822;peekingduck44@gmail.com> + 99 others); Mon, 15 May 2023 12:26:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242501AbjEOQ0d (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Mon, 15 May 2023 12:26:33 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE67A2136; Mon, 15 May 2023 09:26:29 -0700 (PDT) Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34FEdtd7028319; Mon, 15 May 2023 16:26:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=41opc/0UrQd/HOm8o9Kr2RoTJPOV3lSeWNpIRjNplSw=; b=J11sgL98b0XZeK5XnnfKT+Ml2Zx/IWGgySJPLbvh4t83ki+c+AGQzk4KbVqAlku6RdUf s6Er41Bqp7aCiF+x1i+8IJx/UJQWbt1W+8rIN7Ckyctir0e+LD5cTPt5cIAzOmmH8Z4q n9oXav3V2JNxLLdZILa7ftP4LetBwTX7F0/nLY3k533dZswH/J6XdxR4qogvtwzwCU5d 9eqZ5ePQNdqcGQeaPS3Db5c3fiafxdk95SeJxulTqpxqQmGdUMAZVTi4Yog9qpQslG+D iCDH0uRuZ0YTKzc5zAr1YcLMKAybi4J+1bkp6c/1Lt301Dng4mbHuDwqmvC6wAWnhlFT CQ== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3qkgq6se8p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 May 2023 16:26:10 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 34FGQ9gS014052 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 May 2023 16:26:09 GMT Received: from hu-bjorande-lv.qualcomm.com (10.49.16.6) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Mon, 15 May 2023 09:26:09 -0700 From: Bjorn Andersson <quic_bjorande@quicinc.com> To: Pavel Machek <pavel@ucw.cz>, Lee Jones <lee@kernel.org>, "Anjelique Melendez" <quic_amelende@quicinc.com> CC: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>, <linux-leds@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-arm-msm@vger.kernel.org>, Caleb Connolly <caleb.connolly@linaro.org>, Steev Klimaszewski <steev@kali.org> Subject: [PATCH v2] leds: qcom-lpg: Fix PWM period limits Date: Mon, 15 May 2023 09:26:04 -0700 Message-ID: <20230515162604.649203-1-quic_bjorande@quicinc.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01b.na.qualcomm.com (10.47.209.197) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: 1_n6mVl2ihmA9SLfs40B1k1h90FUV1-y X-Proofpoint-GUID: 1_n6mVl2ihmA9SLfs40B1k1h90FUV1-y X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-05-15_14,2023-05-05_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=790 clxscore=1011 lowpriorityscore=0 malwarescore=0 priorityscore=1501 impostorscore=0 adultscore=0 mlxscore=0 bulkscore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305150137 X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765978550824555711?= X-GMAIL-MSGID: =?utf-8?q?1765978550824555711?= |
Series |
[v2] leds: qcom-lpg: Fix PWM period limits
|
|
Commit Message
Bjorn Andersson
May 15, 2023, 4:26 p.m. UTC
The introduction of high resolution PWM support changed the order of the operations in the calculation of min and max period. The result in both divisions is in most cases a truncation to 0, which limits the period to the range of [0, 0]. Both numerators (and denominators) are within 64 bits, so the whole expression can be put directly into the div64_u64, instead of doing it partially. Fixes: b00d2ed37617 ("leds: rgb: leds-qcom-lpg: Add support for high resolution PWM") Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> Tested-by: Steev Klimaszewski <steev@kali.org> Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> --- Changes since v1: - Reworded first sentence to express that it's the order and not the previously non-existent parenthesis that changed... - Picked up review tags. drivers/leds/rgb/leds-qcom-lpg.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
Comments
On Mon, May 15, 2023 at 09:26:04AM -0700, Bjorn Andersson wrote: > The introduction of high resolution PWM support changed the order of the > operations in the calculation of min and max period. The result in both > divisions is in most cases a truncation to 0, which limits the period to > the range of [0, 0]. > > Both numerators (and denominators) are within 64 bits, so the whole > expression can be put directly into the div64_u64, instead of doing it > partially. > > Fixes: b00d2ed37617 ("leds: rgb: leds-qcom-lpg: Add support for high resolution PWM") > Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> > Tested-by: Steev Klimaszewski <steev@kali.org> > Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> Tested-by: Johan Hovold <johan+linaro@kernel.org> Pavel or Lee, could you pick this one up for 6.4 as it fixes a regression (e.g. broken backlight on a number of laptops like the X13s)? > --- > > Changes since v1: > - Reworded first sentence to express that it's the order and not the > previously non-existent parenthesis that changed... > - Picked up review tags. > > drivers/leds/rgb/leds-qcom-lpg.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c > index c9cea797a697..7287fadc00df 100644 > --- a/drivers/leds/rgb/leds-qcom-lpg.c > +++ b/drivers/leds/rgb/leds-qcom-lpg.c > @@ -312,14 +312,14 @@ static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period) > max_res = LPG_RESOLUTION_9BIT; > } > > - min_period = (u64)NSEC_PER_SEC * > - div64_u64((1 << pwm_resolution_arr[0]), clk_rate_arr[clk_len - 1]); > + min_period = div64_u64((u64)NSEC_PER_SEC * (1 << pwm_resolution_arr[0]), > + clk_rate_arr[clk_len - 1]); > if (period <= min_period) > return -EINVAL; > > /* Limit period to largest possible value, to avoid overflows */ > - max_period = (u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * > - div64_u64((1 << LPG_MAX_M), 1024); > + max_period = div64_u64((u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * (1 << LPG_MAX_M), > + 1024); > if (period > max_period) > period = max_period; Johan
On 15/05/2023 18:26, Bjorn Andersson wrote: > The introduction of high resolution PWM support changed the order of the > operations in the calculation of min and max period. The result in both > divisions is in most cases a truncation to 0, which limits the period to > the range of [0, 0]. > > Both numerators (and denominators) are within 64 bits, so the whole > expression can be put directly into the div64_u64, instead of doing it > partially. > > Fixes: b00d2ed37617 ("leds: rgb: leds-qcom-lpg: Add support for high resolution PWM") > Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> > Tested-by: Steev Klimaszewski <steev@kali.org> > Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> > --- > > Changes since v1: > - Reworded first sentence to express that it's the order and not the > previously non-existent parenthesis that changed... > - Picked up review tags. > > drivers/leds/rgb/leds-qcom-lpg.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c > index c9cea797a697..7287fadc00df 100644 > --- a/drivers/leds/rgb/leds-qcom-lpg.c > +++ b/drivers/leds/rgb/leds-qcom-lpg.c > @@ -312,14 +312,14 @@ static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period) > max_res = LPG_RESOLUTION_9BIT; > } > > - min_period = (u64)NSEC_PER_SEC * > - div64_u64((1 << pwm_resolution_arr[0]), clk_rate_arr[clk_len - 1]); > + min_period = div64_u64((u64)NSEC_PER_SEC * (1 << pwm_resolution_arr[0]), > + clk_rate_arr[clk_len - 1]); > if (period <= min_period) > return -EINVAL; > > /* Limit period to largest possible value, to avoid overflows */ > - max_period = (u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * > - div64_u64((1 << LPG_MAX_M), 1024); > + max_period = div64_u64((u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * (1 << LPG_MAX_M), > + 1024); > if (period > max_period) > period = max_period; > Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
On Wed, 24 May 2023, Johan Hovold wrote: > On Mon, May 15, 2023 at 09:26:04AM -0700, Bjorn Andersson wrote: > > The introduction of high resolution PWM support changed the order of the > > operations in the calculation of min and max period. The result in both > > divisions is in most cases a truncation to 0, which limits the period to > > the range of [0, 0]. > > > > Both numerators (and denominators) are within 64 bits, so the whole > > expression can be put directly into the div64_u64, instead of doing it > > partially. > > > > Fixes: b00d2ed37617 ("leds: rgb: leds-qcom-lpg: Add support for high resolution PWM") > > Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> > > Tested-by: Steev Klimaszewski <steev@kali.org> > > Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> > > Tested-by: Johan Hovold <johan+linaro@kernel.org> > > Pavel or Lee, could you pick this one up for 6.4 as it fixes a > regression (e.g. broken backlight on a number of laptops like the X13s)? I don't presently have any plans for a -fixes submission. If anyone else would like to submit it, please be my guest: Acked-by: Lee Jones <lee@kernel.org>
On Fri, Jun 02, 2023 at 10:19:28AM +0100, Lee Jones wrote: > On Wed, 24 May 2023, Johan Hovold wrote: > > Pavel or Lee, could you pick this one up for 6.4 as it fixes a > > regression (e.g. broken backlight on a number of laptops like the X13s)? > > I don't presently have any plans for a -fixes submission. > > If anyone else would like to submit it, please be my guest: > > Acked-by: Lee Jones <lee@kernel.org> That was not the answer I expected, but sure, I've sent it on to Linus: https://lore.kernel.org/lkml/ZHte5sPkB6-D-94G@hovoldconsulting.com/ Johan
On Sat, 03 Jun 2023, Johan Hovold wrote: > On Fri, Jun 02, 2023 at 10:19:28AM +0100, Lee Jones wrote: > > On Wed, 24 May 2023, Johan Hovold wrote: > > > > Pavel or Lee, could you pick this one up for 6.4 as it fixes a > > > regression (e.g. broken backlight on a number of laptops like the X13s)? > > > > I don't presently have any plans for a -fixes submission. > > > > If anyone else would like to submit it, please be my guest: > > > > Acked-by: Lee Jones <lee@kernel.org> > > That was not the answer I expected, but sure, I've sent it on to Linus: Sorry, soooo busy right now. Trying not to drop too many plates. > https://lore.kernel.org/lkml/ZHte5sPkB6-D-94G@hovoldconsulting.com/ *fist bump*
diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c index c9cea797a697..7287fadc00df 100644 --- a/drivers/leds/rgb/leds-qcom-lpg.c +++ b/drivers/leds/rgb/leds-qcom-lpg.c @@ -312,14 +312,14 @@ static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period) max_res = LPG_RESOLUTION_9BIT; } - min_period = (u64)NSEC_PER_SEC * - div64_u64((1 << pwm_resolution_arr[0]), clk_rate_arr[clk_len - 1]); + min_period = div64_u64((u64)NSEC_PER_SEC * (1 << pwm_resolution_arr[0]), + clk_rate_arr[clk_len - 1]); if (period <= min_period) return -EINVAL; /* Limit period to largest possible value, to avoid overflows */ - max_period = (u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * - div64_u64((1 << LPG_MAX_M), 1024); + max_period = div64_u64((u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * (1 << LPG_MAX_M), + 1024); if (period > max_period) period = max_period;