From patchwork Mon Mar 9 13:25:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kiran Gunda X-Patchwork-Id: 190067 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E60D7C10F27 for ; Mon, 9 Mar 2020 13:26:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A7D9520873 for ; Mon, 9 Mar 2020 13:26:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mg.codeaurora.org header.i=@mg.codeaurora.org header.b="cCw+/NYO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726450AbgCIN0n (ORCPT ); Mon, 9 Mar 2020 09:26:43 -0400 Received: from mail27.static.mailgun.info ([104.130.122.27]:41055 "EHLO mail27.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726384AbgCIN0m (ORCPT ); Mon, 9 Mar 2020 09:26:42 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1583760402; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=wMMrzD7T/RIwHvzv+Ze2mZTFGghdcHPfBa6bIbLUCGs=; b=cCw+/NYO5h3G4BhK6kSIF/JAe8Y1qSbA1G7Ow6Vc6HUca5fwpJ9F/dEmFgskAlYQHf1q9fTw Ij2wrIaFWw3ZMXixDtJ5YfuKE5p/76LVYXKDkceKkZiujWWZ9kLzwdHtv94ibm9BPYO1ufFH v4CoYp9mNF23ABw9AE5ckIGMFYQ= X-Mailgun-Sending-Ip: 104.130.122.27 X-Mailgun-Sid: WyI1MzIzYiIsICJsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZyIsICJiZTllNGEiXQ== Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by mxa.mailgun.org with ESMTP id 5e664411.7fe1cfd17b20-smtp-out-n03; Mon, 09 Mar 2020 13:26:41 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id C4ACAC44795; Mon, 9 Mar 2020 13:26:39 +0000 (UTC) Received: from kgunda-linux.qualcomm.com (blr-c-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: kgunda) by smtp.codeaurora.org (Postfix) with ESMTPSA id 0FC46C44788; Mon, 9 Mar 2020 13:26:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 0FC46C44788 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=kgunda@codeaurora.org From: Kiran Gunda To: bjorn.andersson@linaro.org, jingoohan1@gmail.com, lee.jones@linaro.org, b.zolnierkie@samsung.com, dri-devel@lists.freedesktop.org, daniel.thompson@linaro.org, jacek.anaszewski@gmail.com, pavel@ucw.cz, robh+dt@kernel.org, mark.rutland@arm.com, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Dan Murphy Cc: linux-arm-msm@vger.kernel.org, Kiran Gunda Subject: [PATCH V3 1/4] backlight: qcom-wled: convert the wled bindings to .yaml format Date: Mon, 9 Mar 2020 18:55:59 +0530 Message-Id: <1583760362-26978-2-git-send-email-kgunda@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1583760362-26978-1-git-send-email-kgunda@codeaurora.org> References: <1583760362-26978-1-git-send-email-kgunda@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Convert the qcom-wled bindings from .txt to .yaml format. Signed-off-by: Kiran Gunda Acked-by: Daniel Thompson --- .../bindings/leds/backlight/qcom-wled.txt | 154 ----------------- .../bindings/leds/backlight/qcom-wled.yaml | 184 +++++++++++++++++++++ 2 files changed, 184 insertions(+), 154 deletions(-) delete mode 100644 Documentation/devicetree/bindings/leds/backlight/qcom-wled.txt create mode 100644 Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml diff --git a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.txt b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.txt deleted file mode 100644 index c06863b..0000000 --- a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.txt +++ /dev/null @@ -1,154 +0,0 @@ -Binding for Qualcomm Technologies, Inc. WLED driver - -WLED (White Light Emitting Diode) driver is used for controlling display -backlight that is part of PMIC on Qualcomm Technologies, Inc. reference -platforms. The PMIC is connected to the host processor via SPMI bus. - -- compatible - Usage: required - Value type: - Definition: should be one of: - "qcom,pm8941-wled" - "qcom,pmi8998-wled" - "qcom,pm660l-wled" - -- reg - Usage: required - Value type: - Definition: Base address of the WLED modules. - -- default-brightness - Usage: optional - Value type: - Definition: brightness value on boot, value from: 0-4095. - Default: 2048 - -- label - Usage: required - Value type: - Definition: The name of the backlight device - -- qcom,cs-out - Usage: optional - Value type: - Definition: enable current sink output. - This property is supported only for PM8941. - -- qcom,cabc - Usage: optional - Value type: - Definition: enable content adaptive backlight control. - -- qcom,ext-gen - Usage: optional - Value type: - Definition: use externally generated modulator signal to dim. - This property is supported only for PM8941. - -- qcom,current-limit - Usage: optional - Value type: - Definition: mA; per-string current limit; value from 0 to 25 with - 1 mA step. Default 20 mA. - This property is supported only for pm8941. - -- qcom,current-limit-microamp - Usage: optional - Value type: - Definition: uA; per-string current limit; value from 0 to 30000 with - 2500 uA step. Default 25 mA. - -- qcom,current-boost-limit - Usage: optional - Value type: - Definition: mA; boost current limit. - For pm8941: one of: 105, 385, 525, 805, 980, 1260, 1400, - 1680. Default: 805 mA. - For pmi8998: one of: 105, 280, 450, 620, 970, 1150, 1300, - 1500. Default: 970 mA. - -- qcom,switching-freq - Usage: optional - Value type: - Definition: kHz; switching frequency; one of: 600, 640, 685, 738, - 800, 872, 960, 1066, 1200, 1371, 1600, 1920, 2400, 3200, - 4800, 9600. - Default: for pm8941: 1600 kHz - for pmi8998: 800 kHz - -- qcom,ovp - Usage: optional - Value type: - Definition: V; Over-voltage protection limit; one of: - 27, 29, 32, 35. Default: 29V - This property is supported only for PM8941. - -- qcom,ovp-millivolt - Usage: optional - Value type: - Definition: mV; Over-voltage protection limit; - For pmi8998: one of 18100, 19600, 29600, 31100. - Default 29600 mV. - If this property is not specified for PM8941, it - falls back to "qcom,ovp" property. - -- qcom,num-strings - Usage: optional - Value type: - Definition: #; number of led strings attached; - value: For PM8941 from 1 to 3. Default: 2 - For PMI8998 from 1 to 4. - -- interrupts - Usage: optional - Value type: - Definition: Interrupts associated with WLED. This should be - "short" and "ovp" interrupts. Interrupts can be - specified as per the encoding listed under - Documentation/devicetree/bindings/spmi/ - qcom,spmi-pmic-arb.txt. - -- interrupt-names - Usage: optional - Value type: - Definition: Interrupt names associated with the interrupts. - Must be "short" and "ovp". The short circuit detection - is not supported for PM8941. - -- qcom,enabled-strings - Usage: optional - Value tyoe: - Definition: Array of the WLED strings numbered from 0 to 3. Each - string of leds are operated individually. Specify the - list of strings used by the device. Any combination of - led strings can be used. - -- qcom,external-pfet - Usage: optional - Value type: - Definition: Specify if external PFET control for short circuit - protection is used. This property is supported only - for PMI8998. - -- qcom,auto-string-detection - Usage: optional - Value type: - Definition: Enables auto-detection of the WLED string configuration. - This feature is not supported for PM8941. - - -Example: - -pm8941-wled@d800 { - compatible = "qcom,pm8941-wled"; - reg = <0xd800>; - label = "backlight"; - - qcom,cs-out; - qcom,current-limit = <20>; - qcom,current-boost-limit = <805>; - qcom,switching-freq = <1600>; - qcom,ovp = <29>; - qcom,num-strings = <2>; - qcom,enabled-strings = <0 1>; -}; diff --git a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml new file mode 100644 index 0000000..d334f81 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml @@ -0,0 +1,184 @@ +# SPDX-License-Identifier: GPL-2.0-only +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/bindings/leds/backlight/qcom-wled.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Binding for Qualcomm Technologies, Inc. WLED driver + +maintainers: + - Lee Jones + +description: | + WLED (White Light Emitting Diode) driver is used for controlling display + backlight that is part of PMIC on Qualcomm Technologies, Inc. reference + platforms. The PMIC is connected to the host processor via SPMI bus. + +properties: + compatible : + enum: + - qcom,pm8941-wled + - qcom,pmi8998-wled + - qcom,pm660l-wled + + reg: + maxItems: 1 + + default-brightness: + maxItems: 1 + description: + brightness value on boot, value from 0-4095. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + default: 2048 + + label: + maxItems: 1 + description: + The name of the backlight device. + allOf: + - $ref: /schemas/types.yaml#/definitions/string + + qcom,cs-out: + description: + enable current sink output. + This property is supported only for PM8941. + type: boolean + + qcom,cabc: + description: + enable content adaptive backlight control. + type: boolean + + qcom,ext-gen: + description: + use externally generated modulator signal to dim. + This property is supported only for PM8941. + type: boolean + + qcom,current-limit: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + mA; per-string current limit; value from 0 to 25 with + 1 mA step. This property is supported only for pm8941. + default: 20 + + qcom,current-limit-microamp: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + uA; per-string current limit; value from 0 to 30000 with + 2500 uA step. + default: 25 + + qcom,current-boost-limit: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + mA; boost current limit. + For pm8941 one of 105, 385, 525, 805, 980, 1260, 1400, 1680. + Default, 805 mA. + For pmi8998 one of 105, 280, 450, 620, 970, 1150, 1300, + 1500. Default 970 mA. + + qcom,switching-freq: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + kHz; switching frequency; one of 600, 640, 685, 738, + 800, 872, 960, 1066, 1200, 1371, 1600, 1920, 2400, 3200, + 4800, 9600. + Default for pm8941 1600 kHz + for pmi8998 800 kHz + + qcom,ovp: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + V; Over-voltage protection limit; one of 27, 29, 32, 35. Default 29V + This property is supported only for PM8941. + + qcom,ovp-millivolt: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + mV; Over-voltage protection limit; + For pmi8998 one of 18100, 19600, 29600, 31100. + Default 29600 mV. + If this property is not specified for PM8941, it + falls back to "qcom,ovp" property. + + qcom,num-strings: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + description: + number of led strings attached; + value for PM8941 from 1 to 3. Default 2 + For PMI8998 from 1 to 4. + + interrupts: + maxItems: 2 + description: + Interrupts associated with WLED. This should be + "short" and "ovp" interrupts. Interrupts can be + specified as per the encoding listed under + Documentation/devicetree/bindings/spmi/ + qcom,spmi-pmic-arb.txt. + + interrupt-names: + description: + Interrupt names associated with the interrupts. + Must be "short" and "ovp". The short circuit detection + is not supported for PM8941. + + qcom,enabled-strings: + maxItems: 1 + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32-array + description: + Array of the WLED strings numbered from 0 to 3. Each + string of leds are operated individually. Specify the + list of strings used by the device. Any combination of + led strings can be used. + + qcom,external-pfet: + description: + Specify if external PFET control for short circuit + protection is used. This property is supported only + for PMI8998. + type: boolean + + qcom,auto-string-detection: + description: + Enables auto-detection of the WLED string configuration. + This feature is not supported for PM8941. + type: boolean + +required: + - compatible + - reg + - label + +examples: + - | + pm8941-wled@d800 { + compatible = "qcom,pm8941-wled"; + reg = <0xd800 0x100>; + label = "backlight"; + + qcom,cs-out; + qcom,current-limit = <20>; + qcom,current-boost-limit = <805>; + qcom,switching-freq = <1600>; + qcom,ovp = <29>; + qcom,num-strings = <2>; + qcom,enabled-strings = <0 1>; + }; From patchwork Mon Mar 9 13:26:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kiran Gunda X-Patchwork-Id: 190065 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A880C10F27 for ; Mon, 9 Mar 2020 13:27:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5B8E021655 for ; Mon, 9 Mar 2020 13:27:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mg.codeaurora.org header.i=@mg.codeaurora.org header.b="i10TwGh1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726721AbgCIN1M (ORCPT ); Mon, 9 Mar 2020 09:27:12 -0400 Received: from mail27.static.mailgun.info ([104.130.122.27]:27369 "EHLO mail27.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726702AbgCIN1M (ORCPT ); Mon, 9 Mar 2020 09:27:12 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1583760431; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=68EsyXGUzdLIawLyIVCLBm8Bb1s9J5ol+wgvzvuPly0=; b=i10TwGh1dfBwi8/MulioWDoSuFuIM6jjcIAgSabXEzx/yOrw8lJ2yxsjyNeS90qIZkj6s2Xe ufeWCT9vE7Gw/G2FS/Qbzi5v6SSYSH1o2+giAwVbOX8L9kU+isMIxP9h/NRng+p6wadW/Zs9 /Rs7iSa/xv9TMBEvYVGhGWRSAFM= X-Mailgun-Sending-Ip: 104.130.122.27 X-Mailgun-Sid: WyI1MzIzYiIsICJsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZyIsICJiZTllNGEiXQ== Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by mxa.mailgun.org with ESMTP id 5e664426.7ff793b16618-smtp-out-n05; Mon, 09 Mar 2020 13:27:02 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 4085AC433CB; Mon, 9 Mar 2020 13:26:59 +0000 (UTC) Received: from kgunda-linux.qualcomm.com (blr-c-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: kgunda) by smtp.codeaurora.org (Postfix) with ESMTPSA id 91D1BC433CB; Mon, 9 Mar 2020 13:26:51 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 91D1BC433CB Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=kgunda@codeaurora.org From: Kiran Gunda To: bjorn.andersson@linaro.org, jingoohan1@gmail.com, lee.jones@linaro.org, b.zolnierkie@samsung.com, dri-devel@lists.freedesktop.org, daniel.thompson@linaro.org, jacek.anaszewski@gmail.com, pavel@ucw.cz, robh+dt@kernel.org, mark.rutland@arm.com, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Andy Gross , linux-arm-msm@vger.kernel.org, linux-fbdev@vger.kernel.org Cc: Kiran Gunda Subject: [PATCH V3 4/4] backlight: qcom-wled: Update auto calibration support for WLED5 Date: Mon, 9 Mar 2020 18:56:02 +0530 Message-Id: <1583760362-26978-5-git-send-email-kgunda@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1583760362-26978-1-git-send-email-kgunda@codeaurora.org> References: <1583760362-26978-1-git-send-email-kgunda@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Currently, auto calibration logic checks only for OVP_FAULT bit to be set in FAULT_STATUS register to detect OVP fault. This works well for WLED4 type. However, WLED5 type has OVP_PRE_ALARM bit which can indicate a potential OVP fault. Use that as well for detecting OVP fault and run auto calibration to fix the sink configuration. Signed-off-by: Kiran Gunda --- drivers/video/backlight/qcom-wled.c | 90 ++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c index edbbcb2..5079f1f 100644 --- a/drivers/video/backlight/qcom-wled.c +++ b/drivers/video/backlight/qcom-wled.c @@ -27,6 +27,7 @@ #define WLED3_CTRL_REG_ILIM_FAULT_BIT BIT(0) #define WLED3_CTRL_REG_OVP_FAULT_BIT BIT(1) #define WLED4_CTRL_REG_SC_FAULT_BIT BIT(2) +#define WLED5_CTRL_REG_OVP_PRE_ALARM_BIT BIT(4) #define WLED3_CTRL_REG_INT_RT_STS 0x10 #define WLED3_CTRL_REG_OVP_FAULT_STATUS BIT(1) @@ -104,6 +105,10 @@ #define WLED4_SINK_REG_BRIGHT(n) (0x57 + (n * 0x10)) +/* WLED5 specific control registers */ +#define WLED5_CTRL_REG_OVP_INT_CTL 0x5f +#define WLED5_CTRL_REG_OVP_INT_TIMER_MASK GENMASK(2, 0) + /* WLED5 specific sink registers */ #define WLED5_SINK_REG_MOD_A_EN 0x50 #define WLED5_SINK_REG_MOD_B_EN 0x60 @@ -394,11 +399,67 @@ static int wled4_ovp_fault_status(struct wled *wled, bool *fault_set) return rc; } +static int wled5_ovp_fault_status(struct wled *wled, bool *fault_set) +{ + int rc; + u32 int_rt_sts, fault_sts; + + *fault_set = false; + rc = regmap_read(wled->regmap, + wled->ctrl_addr + WLED3_CTRL_REG_INT_RT_STS, + &int_rt_sts); + if (rc < 0) { + dev_err(wled->dev, "Failed to read INT_RT_STS rc=%d\n", rc); + return rc; + } + + rc = regmap_read(wled->regmap, + wled->ctrl_addr + WLED3_CTRL_REG_FAULT_STATUS, + &fault_sts); + if (rc < 0) { + dev_err(wled->dev, "Failed to read FAULT_STATUS rc=%d\n", rc); + return rc; + } + + if (int_rt_sts & WLED3_CTRL_REG_OVP_FAULT_STATUS) + *fault_set = true; + + if (fault_sts & (WLED3_CTRL_REG_OVP_FAULT_BIT | + WLED5_CTRL_REG_OVP_PRE_ALARM_BIT)) + *fault_set = true; + + if (*fault_set) + dev_dbg(wled->dev, "WLED OVP fault detected, int_rt_sts=0x%x fault_sts=0x%x\n", + int_rt_sts, fault_sts); + + return rc; +} + static int wled4_ovp_delay(struct wled *wled) { return WLED_SOFT_START_DLY_US; } +static int wled5_ovp_delay(struct wled *wled) +{ + int rc, delay_us; + u32 val; + u8 ovp_timer_ms[8] = {1, 2, 4, 8, 12, 16, 20, 24}; + + /* For WLED5, get the delay based on OVP timer */ + rc = regmap_read(wled->regmap, wled->ctrl_addr + + WLED5_CTRL_REG_OVP_INT_CTL, &val); + if (rc < 0) + delay_us = + ovp_timer_ms[val & WLED5_CTRL_REG_OVP_INT_TIMER_MASK] * 1000; + else + delay_us = 2 * WLED_SOFT_START_DLY_US; + + dev_dbg(wled->dev, "delay_time_us: %d\n", *delay_us); + + return delay_us; +} + static int wled_update_status(struct backlight_device *bl) { struct wled *wled = bl_get_data(bl); @@ -736,9 +797,32 @@ static bool wled_auto_detection_required(struct wled *wled) if (!wled->auto_detection_ovp_count) { wled->start_ovp_fault_time = ktime_get(); wled->auto_detection_ovp_count++; - } else { + return false; + } + + if (wled->version == 5) { + /* + * WLED5 has OVP fault density interrupt configuration i.e. to + * count the number of OVP alarms for a certain duration before + * triggering OVP fault interrupt. By default, number of OVP + * fault events counted before an interrupt is fired is 32 and + * the time interval is 12 ms. If we see more than one OVP fault + * interrupt, then that should qualify for a real OVP fault + * condition to run auto calibration algorithm. + */ + + if (wled->auto_detection_ovp_count > 1) { + elapsed_time_us = ktime_us_delta(ktime_get(), + wled->start_ovp_fault_time); + wled->auto_detection_ovp_count = 0; + dev_dbg(wled->dev, "Elapsed time: %lld us\n", + elapsed_time_us); + return true; + } + wled->auto_detection_ovp_count++; + } else if (wled->version == 4) { elapsed_time_us = ktime_us_delta(ktime_get(), - wled->start_ovp_fault_time); + wled->start_ovp_fault_time); if (elapsed_time_us > WLED_AUTO_DETECT_CNT_DLY_US) wled->auto_detection_ovp_count = 0; else @@ -1424,6 +1508,8 @@ static int wled_configure(struct wled *wled) wled->wled_set_brightness = wled5_set_brightness; wled->wled_sync_toggle = wled5_sync_toggle; wled->cabc_config = wled5_cabc_config; + wled->wled_ovp_fault_status = wled5_ovp_fault_status; + wled->wled_ovp_delay = wled5_ovp_delay; wled->max_string_count = 4; prop_addr = of_get_address(dev->of_node, 1, NULL, NULL);