From patchwork Thu Dec 17 15:00:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ChiYuan Huang X-Patchwork-Id: 11979983 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 6CE0CC2BB9A for ; Thu, 17 Dec 2020 15:02:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2EB7F2396F for ; Thu, 17 Dec 2020 15:02:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728755AbgLQPBm (ORCPT ); Thu, 17 Dec 2020 10:01:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41258 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728086AbgLQPBk (ORCPT ); Thu, 17 Dec 2020 10:01:40 -0500 Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92CADC0617A7; Thu, 17 Dec 2020 07:01:00 -0800 (PST) Received: by mail-pg1-x535.google.com with SMTP id f17so20486218pge.6; Thu, 17 Dec 2020 07:01:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=UER7F44VA6+CVzOh95HoaBZK/JzVvCMaSOED9S3uJJU=; b=arFz/JT1mmmCBByLiELMCkMGGUJ5eD9gy5ohK7x7YjZwxdRwwarqml3g+3n80rdhoY lFKClPTqiyUH8s/OEpE+KkBxNogJYOebb/UJJ4XcgWXEe8W4bvKKmLgM2KnFj34EUC4X 38aTFtFbYDnTrbRm+WZUQUu9Tsi1RyMjF5dHCADb5mOWtaPQzdveH+J7DvuzUnfWb0Lm TVRBlcpWHMMfuCDnAj0DtER0kCe73rnTu+vBi0QdcFZFQV5+pmRfGgtUBEKuThhDHx+2 o57mY9bGSHE7OLvyKOPnMem5L/zOPWXROzO5UcdbB79gpKbKl2ryyXmLGwkFc1POfp6f aRHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=UER7F44VA6+CVzOh95HoaBZK/JzVvCMaSOED9S3uJJU=; b=V3Ny/IFbKX4GBopTrzwZn39/PGjP9jS128uARIJpKOrO1K+xeSoUdRJuVnieUZg/I7 FqMmexxh9WTipmFi5AKSZufzJ523wOOIcAOfMtcVX0qYpi6Z/ptzgND/vqgrQLu6mVBm pavbiGGpyfmodC7XRr3eVl9KjCd8a+CA2DoSIpT1O7PwU8VXwrwVQCvL7tJ1SYnM+nJI CgzYzX1aThOFFSvqWC0TKGV1AsNx7n8PDtp7pkxvrC22pJP8giVtK2WVH+ST++hutS7K xKJ87u9Jkmqs8nzRd3gtDiLQQnkpR/Z8p1NgDJub7y5IK1/774MYnMtrXqOME4E+DyV2 plJQ== X-Gm-Message-State: AOAM531cPyfItb/R6OOT2j1UO7FQ6HnVkd9APBHhLsODBYB6PhUgCwVT 0opnMOyn1ASlI4Av7l1pHqk= X-Google-Smtp-Source: ABdhPJx5DP5kKYy4bW+Smpn5gDOcd0+HeLhTsQqwtg8bxX2HBah3tReDiTHgyJ46nO10A/DqJrdghQ== X-Received: by 2002:a63:e20:: with SMTP id d32mr11975752pgl.94.1608217259818; Thu, 17 Dec 2020 07:00:59 -0800 (PST) Received: from localhost.localdomain (1-171-2-187.dynamic-ip.hinet.net. [1.171.2.187]) by smtp.gmail.com with ESMTPSA id o140sm6189074pfd.26.2020.12.17.07.00.55 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 07:00:58 -0800 (PST) From: cy_huang To: lee.jones@linaro.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, ChiYuan Huang Subject: [PATCH v5 1/6] mfd: rt4831: Adds support for Richtek RT4831 core Date: Thu, 17 Dec 2020 23:00:39 +0800 Message-Id: <1608217244-314-1-git-send-email-u0084500@gmail.com> X-Mailer: git-send-email 2.7.4 Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org From: ChiYuan Huang This adds support Richtek RT4831 core. It includes four channel WLED driver and Display Bias Voltage outputs. Signed-off-by: ChiYuan Huang --- since v5 - Rename file name from rt4831-core.c to rt4831.c - Change RICHTEK_VID to RICHTEK_VENDOR_ID. - Change gpio_desc nameing from 'enable' to 'enable_gpio' in probe. - Change variable 'val' to the meaningful name 'chip_id'. - Refine the error log when vendor id is not matched. - Remove of_match_ptr. since v2 - Refine Kconfig descriptions. - Add copyright. - Refine error logs in probe. - Refine comment lines in remove and shutdown. --- drivers/mfd/Kconfig | 10 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/rt4831.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 drivers/mfd/rt4831.c diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 8b99a13..dfb2640 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1088,6 +1088,16 @@ config MFD_RDC321X southbridge which provides access to GPIOs and Watchdog using the southbridge PCI device configuration space. +config MFD_RT4831 + tristate "Richtek RT4831 four channel WLED and Display Bias Voltage" + depends on I2C + select MFD_CORE + select REGMAP_I2C + help + This enables support for the Richtek RT4831 that includes 4 channel + WLED driving and Display Bias Voltage. It's commonly used to provide + power to the LCD display and LCD backlight. + config MFD_RT5033 tristate "Richtek RT5033 Power Management IC" depends on I2C diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 1780019..28d247b 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -235,6 +235,7 @@ obj-$(CONFIG_MFD_MENF21BMC) += menf21bmc.o obj-$(CONFIG_MFD_HI6421_PMIC) += hi6421-pmic-core.o obj-$(CONFIG_MFD_HI655X_PMIC) += hi655x-pmic.o obj-$(CONFIG_MFD_DLN2) += dln2.o +obj-$(CONFIG_MFD_RT4831) += rt4831.o obj-$(CONFIG_MFD_RT5033) += rt5033.o obj-$(CONFIG_MFD_SKY81452) += sky81452.o diff --git a/drivers/mfd/rt4831.c b/drivers/mfd/rt4831.c new file mode 100644 index 00000000..2bf8364 --- /dev/null +++ b/drivers/mfd/rt4831.c @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2020 Richtek Technology Corp. + * + * Author: ChiYuan Huang + */ + +#include +#include +#include +#include +#include +#include + +#define RT4831_REG_REVISION 0x01 +#define RT4831_REG_ENABLE 0x08 +#define RT4831_REG_I2CPROT 0x15 + +#define RICHTEK_VENDOR_ID 0x03 +#define RT4831_VID_MASK GENMASK(1, 0) +#define RT4831_RESET_MASK BIT(7) +#define RT4831_I2CSAFETMR_MASK BIT(0) + +static const struct mfd_cell rt4831_subdevs[] = { + OF_MFD_CELL("rt4831-backlight", NULL, NULL, 0, 0, "richtek,rt4831-backlight"), + MFD_CELL_NAME("rt4831-regulator") +}; + +static bool rt4831_is_accessible_reg(struct device *dev, unsigned int reg) +{ + if (reg >= RT4831_REG_REVISION && reg <= RT4831_REG_I2CPROT) + return true; + return false; +} + +static const struct regmap_config rt4831_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .max_register = RT4831_REG_I2CPROT, + + .readable_reg = rt4831_is_accessible_reg, + .writeable_reg = rt4831_is_accessible_reg, +}; + +static int rt4831_probe(struct i2c_client *client) +{ + struct gpio_desc *enable_gpio; + struct regmap *regmap; + unsigned int chip_id; + int ret; + + enable_gpio = devm_gpiod_get_optional(&client->dev, "enable", GPIOD_OUT_HIGH); + if (IS_ERR(enable_gpio)) { + dev_err(&client->dev, "Failed to get 'enable' GPIO\n"); + return PTR_ERR(enable_gpio); + } + + regmap = devm_regmap_init_i2c(client, &rt4831_regmap_config); + if (IS_ERR(regmap)) { + dev_err(&client->dev, "Failed to initialize regmap\n"); + return PTR_ERR(regmap); + } + + ret = regmap_read(regmap, RT4831_REG_REVISION, &chip_id); + if (ret) { + dev_err(&client->dev, "Failed to get H/W revision\n"); + return ret; + } + + if ((chip_id & RT4831_VID_MASK) != RICHTEK_VENDOR_ID) { + dev_err(&client->dev, "Chip vendor ID 0x%02x not matched\n", chip_id); + return -ENODEV; + } + + /* + * Used to prevent the abnormal shutdown. + * If SCL/SDA both keep low for one second to reset HW. + */ + ret = regmap_update_bits(regmap, RT4831_REG_I2CPROT, RT4831_I2CSAFETMR_MASK, + RT4831_I2CSAFETMR_MASK); + if (ret) { + dev_err(&client->dev, "Failed to enable I2C safety timer\n"); + return ret; + } + + return devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_AUTO, rt4831_subdevs, + ARRAY_SIZE(rt4831_subdevs), NULL, 0, NULL); +} + +static int rt4831_remove(struct i2c_client *client) +{ + struct regmap *regmap = dev_get_regmap(&client->dev, NULL); + + /* Disable WLED and DSV outputs */ + return regmap_update_bits(regmap, RT4831_REG_ENABLE, RT4831_RESET_MASK, RT4831_RESET_MASK); +} + +static void rt4831_shutdown(struct i2c_client *client) +{ + struct regmap *regmap = dev_get_regmap(&client->dev, NULL); + + /* Disable WLED and DSV outputs */ + regmap_update_bits(regmap, RT4831_REG_ENABLE, RT4831_RESET_MASK, RT4831_RESET_MASK); +} + +static const struct of_device_id __maybe_unused rt4831_of_match[] = { + { .compatible = "richtek,rt4831", }, + {} +}; +MODULE_DEVICE_TABLE(of, rt4831_of_match); + +static struct i2c_driver rt4831_driver = { + .driver = { + .name = "rt4831", + .of_match_table = rt4831_of_match, + }, + .probe_new = rt4831_probe, + .remove = rt4831_remove, + .shutdown = rt4831_shutdown, +}; +module_i2c_driver(rt4831_driver); + +MODULE_AUTHOR("ChiYuan Huang "); +MODULE_LICENSE("GPL v2"); From patchwork Thu Dec 17 15:00:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ChiYuan Huang X-Patchwork-Id: 11979985 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 BAA99C2BBCA for ; Thu, 17 Dec 2020 15:02:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7D4D82396F for ; Thu, 17 Dec 2020 15:02:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728813AbgLQPBp (ORCPT ); Thu, 17 Dec 2020 10:01:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728086AbgLQPBn (ORCPT ); Thu, 17 Dec 2020 10:01:43 -0500 Received: from mail-pl1-x632.google.com (mail-pl1-x632.google.com [IPv6:2607:f8b0:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95DCDC061282; Thu, 17 Dec 2020 07:01:03 -0800 (PST) Received: by mail-pl1-x632.google.com with SMTP id j1so15290866pld.3; Thu, 17 Dec 2020 07:01:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uLokb1zRx1pVQtgPWP34wo6n/+dXy4QhhwmVGwjuvfc=; b=ub6jL/E+F3B6rndOOnb07mdMaDUhiJvCATbBW0ySIpaiDYgDNmn0vEZpCK59yNodtO M1abDcM0naQBhhNh7mp0FtTTDoc6oD2a7s3fzoyeOaqeogrTex91gRJ8Aa+zG9aJA0g6 mJEIB0RYNQPZMSAtOj9dh6E/SxFRBhpxVk23IqoS2k+MxIsew4o+SZqRdRTZnthI1XFF 12v7tpZYYxClhN6h4eaafwPoDQgoiEdtRSSVsjhbpVEsTg9tCSZ8moyD68rzelTc2dNP vLE2BKWzxwEThKyT3OsFf+PJPeGgP1FVKQHxHVsRebp1w2k8t7KCQkrSf3ytJ4gToJDX aCRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=uLokb1zRx1pVQtgPWP34wo6n/+dXy4QhhwmVGwjuvfc=; b=Hw3IHVZilROWeL0Z+mTd4WDtsvWAuqz/l0tosD2w7STZB4uDsQ1bvRACaOAVlg42HZ +aB16uo13TafFrR5XX8KxtKOUPVhDyhfeZfE2k+7a0DAK9wyZEEnwj1ZS/RZmU4jaEHO npv0nYe5/RcOQFNNvt7LoF1YEWcIXrjNH25aIQddb356zgxG7gbV1flZ+p8WtvBJ7QsL szufG8Jl911Zf6AFDutboyu/zmCZ+sDTZwPwjraTx4/PXOeCksFPNgmHEla1H2097L9h zvGI8WkjT1fW8N/C1TioTEGafzmYjnFz2ka45C6Wt825BeZ1EI3Kafj5HtePmOqhrE/A aWHg== X-Gm-Message-State: AOAM532DjejIucce+JtAv8+K+UMcOrTxx/XsZlGBcYV48IBC/wjLsZ3R BcWH0fkzOH2fi/pZ2ocod3JpaUzPsACCHg== X-Google-Smtp-Source: ABdhPJwmZX7FmTkkEOY4Zsnrlt9rHB7T7g1cBvG+lCLqSPtLnUp2X8/P6HQuqalmt/fZ/tBY4ZBb2Q== X-Received: by 2002:a17:90a:2a42:: with SMTP id d2mr8261488pjg.42.1608217263011; Thu, 17 Dec 2020 07:01:03 -0800 (PST) Received: from localhost.localdomain (1-171-2-187.dynamic-ip.hinet.net. [1.171.2.187]) by smtp.gmail.com with ESMTPSA id o140sm6189074pfd.26.2020.12.17.07.01.00 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 07:01:02 -0800 (PST) From: cy_huang To: lee.jones@linaro.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, ChiYuan Huang Subject: [PATCH v5 2/6] backlight: rt4831: Adds DT binding document for Richtek RT4831 backlight Date: Thu, 17 Dec 2020 23:00:40 +0800 Message-Id: <1608217244-314-2-git-send-email-u0084500@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1608217244-314-1-git-send-email-u0084500@gmail.com> References: <1608217244-314-1-git-send-email-u0084500@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org From: ChiYuan Huang Adds DT binding document for Richtek RT4831 backlight. Signed-off-by: ChiYuan Huang --- since v5 - Drop the example in dt-binding. Aready full example in mfd dt-binding. since v3 - Move inlcude/dt-bindings/leds/rt4831-backlight.h from patch 0004 to here. - Add dual license tag in header and backlight binding document. - Left backlight dt-binding example only. --- .../leds/backlight/richtek,rt4831-backlight.yaml | 65 ++++++++++++++++++++++ include/dt-bindings/leds/rt4831-backlight.h | 23 ++++++++ 2 files changed, 88 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/backlight/richtek,rt4831-backlight.yaml create mode 100644 include/dt-bindings/leds/rt4831-backlight.h diff --git a/Documentation/devicetree/bindings/leds/backlight/richtek,rt4831-backlight.yaml b/Documentation/devicetree/bindings/leds/backlight/richtek,rt4831-backlight.yaml new file mode 100644 index 00000000..4da6a66 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/backlight/richtek,rt4831-backlight.yaml @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/leds/backlight/richtek,rt4831-backlight.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Richtek RT4831 Backlight + +maintainers: + - ChiYuan Huang + +description: | + RT4831 is a mutifunctional device that can provide power to the LCD display + and LCD backlight. + + For the LCD backlight, it can provide four channel WLED driving capability. + Each channel driving current is up to 30mA + + Datasheet is available at + https://www.richtek.com/assets/product_file/RT4831A/DS4831A-05.pdf + +properties: + compatible: + const: richtek,rt4831-backlight + + default-brightness: + description: | + The default brightness that applied to the system on start-up. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 2048 + + max-brightness: + description: | + The max brightness for the H/W limit + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 2048 + + richtek,pwm-enable: + description: | + Specify the backlight dimming following by PWM duty or by SW control. + type: boolean + + richtek,bled-ovp-sel: + description: | + Backlight OVP level selection, currently support 17V/21V/25V/29V. + $ref: /schemas/types.yaml#/definitions/uint8 + default: 1 + minimum: 0 + maximum: 3 + + richtek,channel-use: + description: | + Backlight LED channel to be used. + BIT 0/1/2/3 is used to indicate led channel 1/2/3/4 enable or disable. + $ref: /schemas/types.yaml#/definitions/uint8 + minimum: 1 + maximum: 15 + +required: + - compatible + - richtek,channel-use + +additionalProperties: false diff --git a/include/dt-bindings/leds/rt4831-backlight.h b/include/dt-bindings/leds/rt4831-backlight.h new file mode 100644 index 00000000..125c635 --- /dev/null +++ b/include/dt-bindings/leds/rt4831-backlight.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * This header provides constants for rt4831 backlight bindings. + * + * Copyright (C) 2020, Richtek Technology Corp. + * Author: ChiYuan Huang + */ + +#ifndef _DT_BINDINGS_RT4831_BACKLIGHT_H +#define _DT_BINDINGS_RT4831_BACKLIGHT_H + +#define RT4831_BLOVPLVL_17V 0 +#define RT4831_BLOVPLVL_21V 1 +#define RT4831_BLOVPLVL_25V 2 +#define RT4831_BLOVPLVL_29V 3 + +#define RT4831_BLED_CH1EN (1 << 0) +#define RT4831_BLED_CH2EN (1 << 1) +#define RT4831_BLED_CH3EN (1 << 2) +#define RT4831_BLED_CH4EN (1 << 3) +#define RT4831_BLED_ALLCHEN ((1 << 4) - 1) + +#endif /* _DT_BINDINGS_RT4831_BACKLIGHT_H */ From patchwork Thu Dec 17 15:00:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ChiYuan Huang X-Patchwork-Id: 11979989 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 C800FC3526C for ; Thu, 17 Dec 2020 15:02:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 92F2C23975 for ; Thu, 17 Dec 2020 15:02:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729041AbgLQPCJ (ORCPT ); Thu, 17 Dec 2020 10:02:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727769AbgLQPCI (ORCPT ); Thu, 17 Dec 2020 10:02:08 -0500 Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EAE8DC0611CA; Thu, 17 Dec 2020 07:01:06 -0800 (PST) Received: by mail-pg1-x533.google.com with SMTP id f17so20486451pge.6; Thu, 17 Dec 2020 07:01:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Uq92YfzmtWSjZTbKFkuyonM+askUzHgnNcGZZh6OIBk=; b=BZ/pEkAG2NSByMExePG8ilUyRCSSNLjLpFGVBDJgunvDWIBCGRvq9Eg3RdCFLiV4AX b9OsRc+j4Oh+dgQlS6IKu7e+hkC9FNpm0NekwiTIqgg8oQKXSi1LGNtn9eAknivM0fwQ H+LcSKm3w63za0QJB3miz243UCoNHnJKgd7I5ITL+eT7Xa0aoMJJAc0SqRNYG7xib5jw tjQP16Gr93TIuiLfpOkTJS4K5Ui/U76P5LQhpjRnLiUhic6Xpf5ixRBcMF0yzmc1D1XH yz3zrKARqerJNAFIVLmabyAijU/WHSftexQ9DCzpkaayL/slFQDlYRtH1oBsNDuLCBys nfXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Uq92YfzmtWSjZTbKFkuyonM+askUzHgnNcGZZh6OIBk=; b=my3KPu/HM/H1BOKOXpzML45sOYsni36OSHIZmABxmurlx/Kq+xgliQvhiXKwIxeHjk VHyF+1Pt6W1cBfQFsRUpuVViAe+0crMzuBMqhgEVH55Xqep8Yahg9emXUpszpd6M8ZrD c7F02vy/K13m3RD86PDjXtkVZ3O1COAiLGnxGLCurtUbz62IQXvMsOdqrXLp3dCU4tKA bPyQQqQkg9bw5JD+RsxzBwOtqLmsp4cgoFB2u72QqZedx1/2X4/xIRasyKRZMS35FMGu Cv6qaXw3UBmYYMRCxS54wG29FPOVItzRcbrI4eyAs8SLztU+pYRggfD1zp/uFEDXoyud VKYg== X-Gm-Message-State: AOAM531O5Yp8VeVJ7yx6llWfCQt88sqxB7leHZnNNGzb46ax3zXXPJwX 5MOdF8ZPXRO7RQktoLF9bH8= X-Google-Smtp-Source: ABdhPJyMsnxzPBCQ1rN+mgfhydGddI2u2yYvHW7qgN9qbI6bCHKjO9xDQd7uK9+yjYyoCKSxJUWz3g== X-Received: by 2002:a63:924f:: with SMTP id s15mr7726183pgn.360.1608217266388; Thu, 17 Dec 2020 07:01:06 -0800 (PST) Received: from localhost.localdomain (1-171-2-187.dynamic-ip.hinet.net. [1.171.2.187]) by smtp.gmail.com with ESMTPSA id o140sm6189074pfd.26.2020.12.17.07.01.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 07:01:05 -0800 (PST) From: cy_huang To: lee.jones@linaro.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, ChiYuan Huang Subject: [PATCH v5 3/6] regulator: rt4831: Adds DT binding document for Richtek RT4831 DSV regulator Date: Thu, 17 Dec 2020 23:00:41 +0800 Message-Id: <1608217244-314-3-git-send-email-u0084500@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1608217244-314-1-git-send-email-u0084500@gmail.com> References: <1608217244-314-1-git-send-email-u0084500@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org From: ChiYuan Huang Adds DT binding document for Richtek RT4831 DSV regulator. Signed-off-by: ChiYuan Huang --- since v5 - Revert it back from v3 patch. - Drop the example in dt-binding, Already full example in mfd dt-binding. --- .../regulator/richtek,rt4831-regulator.yaml | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt4831-regulator.yaml diff --git a/Documentation/devicetree/bindings/regulator/richtek,rt4831-regulator.yaml b/Documentation/devicetree/bindings/regulator/richtek,rt4831-regulator.yaml new file mode 100644 index 00000000..d9c2333 --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/richtek,rt4831-regulator.yaml @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/richtek,rt4831-regulator.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Richtek RT4831 Display Bias Voltage Regulator + +maintainers: + - ChiYuan Huang + +description: | + RT4831 is a multifunctional device that can provide power to the LCD display + and LCD backlight. + + For Display Bias Voltage DSVP and DSVN, the output range is about 4V to 6.5V. + It is sufficient to meet the current LCD power requirement. + + DSVLCM is a boost regulator in IC internal as DSVP and DSVN input power. + Its voltage should be configured above 0.15V to 0.2V gap larger than the + voltage needed for DSVP and DSVN. Too much voltage gap could improve the + voltage drop from the heavy loading scenario. But it also make the power + efficiency worse. It's a trade-off. + + Datasheet is available at + https://www.richtek.com/assets/product_file/RT4831A/DS4831A-05.pdf + +patternProperties: + "^DSV(LCM|P|N)$": + type: object + $ref: regulator.yaml# + description: + Properties for single Display Bias Voltage regulator. + +additionalProperties: false From patchwork Thu Dec 17 15:00:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ChiYuan Huang X-Patchwork-Id: 11979987 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 E153CC3526B for ; Thu, 17 Dec 2020 15:02:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B5293235F9 for ; Thu, 17 Dec 2020 15:02:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729044AbgLQPCK (ORCPT ); Thu, 17 Dec 2020 10:02:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729037AbgLQPCJ (ORCPT ); Thu, 17 Dec 2020 10:02:09 -0500 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4E9AC0611CC; Thu, 17 Dec 2020 07:01:11 -0800 (PST) Received: by mail-pj1-x1030.google.com with SMTP id f14so3788474pju.4; Thu, 17 Dec 2020 07:01:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mvtZ/A2o5dxmBEUAMb5gj2Nsf7pPvcRBvo5uPvFwDHA=; b=P5S84wnBWrc+jI977mdnBx8BHjwaLXu+wGQZucy9i+KHvwtgAq3f6PmSQf45pmX9u4 6tw1v33TxjIdmApm69r1aNbvKfTb3FXd0XI87QmRmpV02qsbFwWZf0ouK1bjIQYGhAND q90Uj8kZ8zePACluJZTkaMHlyLrX6YApLih33jpLc9/31+a2kje1lG2LHVFmxLuRcKc2 pfMrwLhFSGBPCNRf03x+9e3yJjKV5hzH+o/8A/NMQy6gVw3KXPMUVPY0dYzEx99xQoUs cpQT6saVYrbtqZHtxcY29gUBJnF8OuFjqEy6dC9rXGuUNEp38tKHx5JBzK2n5ZGGwI5d ycCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mvtZ/A2o5dxmBEUAMb5gj2Nsf7pPvcRBvo5uPvFwDHA=; b=Q3Clnre9Vmmz6GfZ8PH0LLwSMRn15HQ7WvGxISbKVVOvzVTbMd83SETvgbmhQsO6iq s5/ch+fFWTu9Gp5nLWVZ4aAP8QoE8bhMoPZr/MFN28ifs4PgfJs5omWzjN9SHUwuJHUv 5vwPbrbzngdpD5VUANG6dxl9HXRw8hx3fqC5Q1sX7w9twBWyjMufjYqPCAk88wq46hEF j5lTcOWdk6RmPrhNFclm/uYH2e27pJ8qGUEDDgAbopIGmT1K24+7bbFLuivcldbtN1jY bN83hl/D63Y3DoRSM06bu0esFkE9TCiFvsd3dczsczBfwwI7A9t/0i6aX8akNCTKrnDm tp1w== X-Gm-Message-State: AOAM533tHP17YhXxDI39/FD4lgJS5+RFsu5TePU9AVuo/E3rz4i7gYWh jmRRf9hSHwG4ajSyoYRo9Q4= X-Google-Smtp-Source: ABdhPJxEqwPbhdTjXuC65gja94BfYxBMGCw0JrdDxIOxyieZUWD2PMka+Egar82GTDNdonGuOay/Wg== X-Received: by 2002:a17:902:d716:b029:dc:24a1:77a2 with SMTP id w22-20020a170902d716b02900dc24a177a2mr3917114ply.64.1608217269785; Thu, 17 Dec 2020 07:01:09 -0800 (PST) Received: from localhost.localdomain (1-171-2-187.dynamic-ip.hinet.net. [1.171.2.187]) by smtp.gmail.com with ESMTPSA id o140sm6189074pfd.26.2020.12.17.07.01.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 07:01:09 -0800 (PST) From: cy_huang To: lee.jones@linaro.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, ChiYuan Huang Subject: [PATCH v5 4/6] mfd: rt4831: Adds DT binding document for Richtek RT4831 core Date: Thu, 17 Dec 2020 23:00:42 +0800 Message-Id: <1608217244-314-4-git-send-email-u0084500@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1608217244-314-1-git-send-email-u0084500@gmail.com> References: <1608217244-314-1-git-send-email-u0084500@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org From: ChiYuan Huang Adds DT binding document for Richtek RT4831 core. Signed-off-by: ChiYuan Huang --- This patch depends on "backlight: rt4831: Adds DT binding document for Richtek RT4831 backlight" "regulator: rt4831: Adds DT binding document for Richtek RT4831 DSV regulator" since v5 - Revert mfd dt-binding to v3 patch. since v4 - remove v3 regulator binding patch, directly merge it into mfd binding. since v3 - Move include/dt-bindings/leds/rt4831-backlight.h to patch 0002. - Add dual license tag in mfd binding document. since v2 - Add regulator-allow-bypass flag in DSVLCM. --- .../devicetree/bindings/mfd/richtek,rt4831.yaml | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt4831.yaml diff --git a/Documentation/devicetree/bindings/mfd/richtek,rt4831.yaml b/Documentation/devicetree/bindings/mfd/richtek,rt4831.yaml new file mode 100644 index 00000000..4762eb1 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/richtek,rt4831.yaml @@ -0,0 +1,90 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/richtek,rt4831.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Richtek RT4831 DSV and Backlight Integrated IC + +maintainers: + - ChiYuan Huang + +description: | + RT4831 is a multifunctional device that can provide power to the LCD display + and LCD backlight. + + For Display Bias Voltage DSVP and DSVN, the output range is about 4V to 6.5V. + It's sufficient to meet the current LCD power requirement. + + For the LCD backlight, it can provide four channel WLED driving capability. + Each channel driving current is up to 30mA + + Datasheet is available at + https://www.richtek.com/assets/product_file/RT4831A/DS4831A-05.pdf + +properties: + compatible: + const: richtek,rt4831 + + reg: + description: I2C device address. + maxItems: 1 + + enable-gpios: + description: | + GPIO to enable/disable the chip. It is optional. + Some usage directly tied this pin to follow VIO 1.8V power on sequence. + maxItems: 1 + + regulators: + $ref: ../regulator/richtek,rt4831-regulator.yaml + + backlight: + $ref: ../leds/backlight/richtek,rt4831-backlight.yaml + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + #include + i2c { + #address-cells = <1>; + #size-cells = <0>; + + rt4831@11 { + compatible = "richtek,rt4831"; + reg = <0x11>; + + regulators { + DSVLCM { + regulator-min-microvolt = <4000000>; + regulator-max-microvolt = <7150000>; + regulator-allow-bypass; + }; + DSVP { + regulator-name = "rt4831-dsvp"; + regulator-min-microvolt = <4000000>; + regulator-max-microvolt = <6500000>; + regulator-boot-on; + }; + DSVN { + regulator-name = "rt4831-dsvn"; + regulator-min-microvolt = <4000000>; + regulator-max-microvolt = <6500000>; + regulator-boot-on; + }; + }; + + backlight { + compatible = "richtek,rt4831-backlight"; + default-brightness = <1024>; + max-brightness = <2048>; + richtek,bled-ovp-sel = /bits/ 8 ; + richtek,channel-use = /bits/ 8 ; + }; + }; + }; From patchwork Thu Dec 17 15:00:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ChiYuan Huang X-Patchwork-Id: 11979993 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 BD373C35273 for ; Thu, 17 Dec 2020 15:02:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 942B9235F9 for ; Thu, 17 Dec 2020 15:02:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725871AbgLQPCZ (ORCPT ); Thu, 17 Dec 2020 10:02:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729038AbgLQPCJ (ORCPT ); Thu, 17 Dec 2020 10:02:09 -0500 Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1E2AAC0611CD; Thu, 17 Dec 2020 07:01:14 -0800 (PST) Received: by mail-pf1-x429.google.com with SMTP id 11so19184719pfu.4; Thu, 17 Dec 2020 07:01:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+rkU+wTPks8mGex7CneP0KoGMUtaXEvQW+a/FZWhgH0=; b=NomBT5bJplK8om/UkF3SUxdTgRXV2dWxPp0wFbflZHjY+4ewKKX9LPqn6tR8A2H6pC IZl2lqeOAcwjuf5+sy1nEHHXiqFQkeA+GVc5cPs9IW14C4dXrtM0NFc2Wiqvm/Nx4oW5 sCjOkVtCWyhyVGI1ljxRM/mpnGGoNE+xEGMC7zp0gSymGJkKGidBBAB369c4n0KKIAQU 4nv6IAcXUChYAHQoBVDYwZj6f1yXCJun41dDIISnOU6lFa06UMwa7y2+NDtdcSucKxEf VTTqtXsqd08UKTUcG29UUCuTcsi3P22a5P/B2AalP1lzhJMe9wQlD6hjNMkd7EOr9vkR ngiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+rkU+wTPks8mGex7CneP0KoGMUtaXEvQW+a/FZWhgH0=; b=QgNVZqUOgKJL1aUpJfbHgBghigtS3+vKY9lxxsrN/o4dTwC2renO4P1Da3k628uRlm cXnKeFj1sDV+3L877Wq5qkZEuSuuGB/dgwOyd5AoJ6Jau0NfW9Gb9rYBAu2bHNm8W4S+ 9WYfsMsnN3uUBfcniZSjeOQOHPptA/NC4qu4DrKNR4298m+0sknFQylz8KWwjaMmwwgm Urk/NkisH74p7ZeqR33v45ZQ4gg/LNU3DE+J5KZSybzPki8MYb83XzZf1k1A7TgWqu/9 j3WNsDM4/PNyOFmJBXT1IXdL0j735bJrLPtt866DzGvexr9e57DTocArUirWJNq0uX8z /wag== X-Gm-Message-State: AOAM530Ntoq9Ge6R5UhchmFw0+Qx5Grtd6nGueFKbR/v7Wg55TLK3spe MA/ZxLXw6VJCa+uA1VLAZ6o= X-Google-Smtp-Source: ABdhPJzjsmuY9Mybp+PcPxwixLrv9uwglmwk2qnNUYI4vTCLWwQ5GffE8QQ01lEJYMiVWnQs/C7AcA== X-Received: by 2002:a62:764a:0:b029:19d:9fa8:5bc6 with SMTP id r71-20020a62764a0000b029019d9fa85bc6mr8558552pfc.76.1608217273317; Thu, 17 Dec 2020 07:01:13 -0800 (PST) Received: from localhost.localdomain (1-171-2-187.dynamic-ip.hinet.net. [1.171.2.187]) by smtp.gmail.com with ESMTPSA id o140sm6189074pfd.26.2020.12.17.07.01.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 07:01:12 -0800 (PST) From: cy_huang To: lee.jones@linaro.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, ChiYuan Huang Subject: [PATCH v5 5/6] backlight: rt4831: Adds support for Richtek RT4831 backlight Date: Thu, 17 Dec 2020 23:00:43 +0800 Message-Id: <1608217244-314-5-git-send-email-u0084500@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1608217244-314-1-git-send-email-u0084500@gmail.com> References: <1608217244-314-1-git-send-email-u0084500@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org From: ChiYuan Huang Adds support for Richtek RT4831 backlight. Signed-off-by: ChiYuan Huang --- drivers/video/backlight/Kconfig | 8 ++ drivers/video/backlight/Makefile | 1 + drivers/video/backlight/rt4831-backlight.c | 219 +++++++++++++++++++++++++++++ 3 files changed, 228 insertions(+) create mode 100644 drivers/video/backlight/rt4831-backlight.c diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig index d83c87b..666bdb0 100644 --- a/drivers/video/backlight/Kconfig +++ b/drivers/video/backlight/Kconfig @@ -289,6 +289,14 @@ config BACKLIGHT_QCOM_WLED If you have the Qualcomm PMIC, say Y to enable a driver for the WLED block. Currently it supports PM8941 and PMI8998. +config BACKLIGHT_RT4831 + tristate "Richtek RT4831 Backlight Driver" + depends on MFD_RT4831 + help + This enables support for Richtek RT4831 Backlight driver. + It's commont used to drive the display WLED. There're four channels + inisde, and each channel can provide up to 30mA current. + config BACKLIGHT_SAHARA tristate "Tabletkiosk Sahara Touch-iT Backlight Driver" depends on X86 diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile index 685f3f1..cae2c83 100644 --- a/drivers/video/backlight/Makefile +++ b/drivers/video/backlight/Makefile @@ -49,6 +49,7 @@ obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o obj-$(CONFIG_BACKLIGHT_QCOM_WLED) += qcom-wled.o +obj-$(CONFIG_BACKLIGHT_RT4831) += rt4831-backlight.o obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o obj-$(CONFIG_BACKLIGHT_SKY81452) += sky81452-backlight.o obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o diff --git a/drivers/video/backlight/rt4831-backlight.c b/drivers/video/backlight/rt4831-backlight.c new file mode 100644 index 00000000..816c4d6 --- /dev/null +++ b/drivers/video/backlight/rt4831-backlight.c @@ -0,0 +1,219 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RT4831_REG_BLCFG 0x02 +#define RT4831_REG_BLDIML 0x04 +#define RT4831_REG_ENABLE 0x08 + +#define BL_MAX_BRIGHTNESS 2048 + +#define RT4831_BLOVP_MASK GENMASK(7, 5) +#define RT4831_BLOVP_SHIFT 5 +#define RT4831_BLPWMEN_MASK BIT(0) +#define RT4831_BLEN_MASK BIT(4) +#define RT4831_BLCH_MASK GENMASK(3, 0) +#define RT4831_BLDIML_MASK GENMASK(2, 0) +#define RT4831_BLDIMH_MASK GENMASK(10, 3) +#define RT4831_BLDIMH_SHIFT 3 + +struct rt4831_priv { + struct regmap *regmap; + struct mutex lock; + struct backlight_device *bl; +}; + +static int rt4831_bl_update_status(struct backlight_device *bl_dev) +{ + struct rt4831_priv *priv = bl_get_data(bl_dev); + int brightness = backlight_get_brightness(bl_dev); + unsigned int enable = brightness ? RT4831_BLEN_MASK : 0; + u8 v[2]; + int ret; + + mutex_lock(&priv->lock); + + if (brightness) { + v[0] = (brightness - 1) & RT4831_BLDIML_MASK; + v[1] = ((brightness - 1) & RT4831_BLDIMH_MASK) >> RT4831_BLDIMH_SHIFT; + + ret = regmap_raw_write(priv->regmap, RT4831_REG_BLDIML, v, sizeof(v)); + if (ret) + goto unlock; + } + + ret = regmap_update_bits(priv->regmap, RT4831_REG_ENABLE, RT4831_BLEN_MASK, enable); + +unlock: + mutex_unlock(&priv->lock); + return ret; +} + +static int rt4831_bl_get_brightness(struct backlight_device *bl_dev) +{ + struct rt4831_priv *priv = bl_get_data(bl_dev); + unsigned int val; + u8 v[2]; + int ret; + + mutex_lock(&priv->lock); + + ret = regmap_read(priv->regmap, RT4831_REG_ENABLE, &val); + if (ret) + return ret; + + if (!(val & RT4831_BLEN_MASK)) { + ret = 0; + goto unlock; + } + + ret = regmap_raw_read(priv->regmap, RT4831_REG_BLDIML, v, sizeof(v)); + if (ret) + goto unlock; + + ret = (v[1] << RT4831_BLDIMH_SHIFT) + (v[0] & RT4831_BLDIML_MASK) + 1; + +unlock: + mutex_unlock(&priv->lock); + return ret; +} + +static const struct backlight_ops rt4831_bl_ops = { + .options = BL_CORE_SUSPENDRESUME, + .update_status = rt4831_bl_update_status, + .get_brightness = rt4831_bl_get_brightness, +}; + +static int rt4831_init_device_properties(struct rt4831_priv *priv, struct device *dev, + struct backlight_properties *bl_props) +{ + u8 propval; + u32 brightness; + unsigned int val = 0; + int ret; + + /* common properties */ + ret = device_property_read_u32(dev, "max-brightness", &brightness); + if (ret) { + dev_warn(dev, "max-brightness DT property missing, use HW max as default\n"); + brightness = BL_MAX_BRIGHTNESS; + } + + bl_props->max_brightness = min_t(u32, brightness, BL_MAX_BRIGHTNESS); + + ret = device_property_read_u32(dev, "default-brightness", &brightness); + if (ret) { + dev_warn(dev, "default-brightness DT property missing, use max limit as default\n"); + brightness = bl_props->max_brightness; + } + + bl_props->brightness = min_t(u32, brightness, bl_props->max_brightness); + + /* vendor properties */ + if (device_property_read_bool(dev, "richtek,pwm-enable")) + val = RT4831_BLPWMEN_MASK; + + ret = regmap_update_bits(priv->regmap, RT4831_REG_BLCFG, RT4831_BLPWMEN_MASK, val); + if (ret) + return ret; + + ret = device_property_read_u8(dev, "richtek,bled-ovp-sel", &propval); + if (ret) { + dev_warn(dev, "richtek,bled-ovp-sel DT property missing, use default 21V\n"); + propval = RT4831_BLOVPLVL_21V; + } + + propval = min_t(u8, propval, RT4831_BLOVPLVL_29V); + ret = regmap_update_bits(priv->regmap, RT4831_REG_BLCFG, RT4831_BLOVP_MASK, + propval << RT4831_BLOVP_SHIFT); + if (ret) + return ret; + + ret = device_property_read_u8(dev, "richtek,channel-use", &propval); + if (ret) { + dev_err(dev, "richtek,channel-use DT property missing\n"); + return ret; + } + + if (!(propval & RT4831_BLCH_MASK)) { + dev_err(dev, "No channel specified\n"); + return -EINVAL; + } + + return regmap_update_bits(priv->regmap, RT4831_REG_ENABLE, RT4831_BLCH_MASK, propval); +} + +static int rt4831_bl_probe(struct platform_device *pdev) +{ + struct rt4831_priv *priv; + struct backlight_properties bl_props = { .type = BACKLIGHT_RAW, }; + int ret; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + mutex_init(&priv->lock); + + priv->regmap = dev_get_regmap(pdev->dev.parent, NULL); + if (IS_ERR(priv->regmap)) { + dev_err(&pdev->dev, "Failed to init regmap\n"); + return PTR_ERR(priv->regmap); + } + + ret = rt4831_init_device_properties(priv, &pdev->dev, &bl_props); + if (ret) { + dev_err(&pdev->dev, "Failed to init device properties\n"); + return ret; + } + + priv->bl = devm_backlight_device_register(&pdev->dev, pdev->name, &pdev->dev, priv, + &rt4831_bl_ops, &bl_props); + if (IS_ERR(priv->bl)) { + dev_err(&pdev->dev, "Failed to register backlight\n"); + return PTR_ERR(priv->bl); + } + + backlight_update_status(priv->bl); + platform_set_drvdata(pdev, priv); + + return 0; +} + +static int rt4831_bl_remove(struct platform_device *pdev) +{ + struct rt4831_priv *priv = platform_get_drvdata(pdev); + struct backlight_device *bl_dev = priv->bl; + + bl_dev->props.brightness = 0; + backlight_update_status(priv->bl); + + return 0; +} + +static const struct of_device_id __maybe_unused rt4831_bl_of_match[] = { + { .compatible = "richtek,rt4831-backlight", }, + {} +}; +MODULE_DEVICE_TABLE(of, rt4831_bl_of_match); + +static struct platform_driver rt4831_bl_driver = { + .driver = { + .name = "rt4831-backlight", + .of_match_table = rt4831_bl_of_match, + }, + .probe = rt4831_bl_probe, + .remove = rt4831_bl_remove, +}; +module_platform_driver(rt4831_bl_driver); + +MODULE_AUTHOR("ChiYuan Huang "); +MODULE_LICENSE("GPL v2"); From patchwork Thu Dec 17 15:00:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ChiYuan Huang X-Patchwork-Id: 11979991 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 75F78C3526D for ; Thu, 17 Dec 2020 15:02:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 474EA235F9 for ; Thu, 17 Dec 2020 15:02:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729037AbgLQPCR (ORCPT ); Thu, 17 Dec 2020 10:02:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41356 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725930AbgLQPCK (ORCPT ); Thu, 17 Dec 2020 10:02:10 -0500 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [IPv6:2607:f8b0:4864:20::1034]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 803B5C0611CE; Thu, 17 Dec 2020 07:01:17 -0800 (PST) Received: by mail-pj1-x1034.google.com with SMTP id w1so3390985pjc.0; Thu, 17 Dec 2020 07:01:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4SrPDmHG0As/OwzJdej+CW/T5rDD9USMymspHe9EwBg=; b=X0kCkrqAT7KPt0gVo7ypcvogPfcJNnuOkWBf/Vw9ovHm4Ak8SUtve66eG9jvTKqYhx 5IrJy6TJgT/Vo9msMYmnZcliucX3SkgZr0lfwJbOCGOIfie6yI9jyITeOiy7lWHz0WCi HP0qlQ7RXxQ8P8ZdL5G7L1F4KlhKONCuzwU2UQN/DESFirH+ADjAf6lX9nXTikijHA03 leGsN+bZWGhbQA3DXsn2RazypZquOSeLjfZjb4XWFia0EvW1nNpVmRYZDVJAJXH7r0m8 qANqBrdXnGdjHHSsiwyCuOh04ijx0/tECJIwK7KaR+75n5OdOmgOjTkxG7CEiBz3/bR0 ckRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4SrPDmHG0As/OwzJdej+CW/T5rDD9USMymspHe9EwBg=; b=WeC2Jb16OL5z7WAkcTAp114Xa8UD2VRy4ujZfx3KKm6kD9X0pNL9gFO1Fkludg8GYA Cx98PGJSZkMKph5q2Pk1IBpydmw4X2aCkyUcTL9GdbPRgDZTWVlamoEzcZ8ARCd8swpk TtMDoz7LTovGrr1ENwRld1LrqP/1TAJ90Nvqb0Tia5j/iqC2y5LjlpTOxt53S5lNDBLs YkH6FseISIZ6ag1kevxUpXQD4nepSAo5G6DzdNZr25jjuYGkDr//Ug3rblfx1SvyWkwV JMC8CkLCzMy4YCdfLuNOw6FYGPi4kpZTJmKvaBoHhL+SKtQLEcxrBylHF3iaP0E8fHld 7AtA== X-Gm-Message-State: AOAM531neekUyEnSPD9yyV/N5j293ZR0wfyys3VucDhJ2AZp37pN8a/C zWUQMbvne4evVYxap/+ID8DxkGh0rwQobQ== X-Google-Smtp-Source: ABdhPJyXbxS0F8jlUr5S3Q0HkjVcZZ5vpKYGTn4vLlO/8SnFTqlCfi2LGZR80GifsR0hpd7vrYaoEA== X-Received: by 2002:a17:90a:248:: with SMTP id t8mr8536346pje.193.1608217276960; Thu, 17 Dec 2020 07:01:16 -0800 (PST) Received: from localhost.localdomain (1-171-2-187.dynamic-ip.hinet.net. [1.171.2.187]) by smtp.gmail.com with ESMTPSA id o140sm6189074pfd.26.2020.12.17.07.01.13 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 07:01:16 -0800 (PST) From: cy_huang To: lee.jones@linaro.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, ChiYuan Huang Subject: [PATCH v5 6/6] regulator: rt4831: Adds support for Richtek RT4831 DSV regulator Date: Thu, 17 Dec 2020 23:00:44 +0800 Message-Id: <1608217244-314-6-git-send-email-u0084500@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1608217244-314-1-git-send-email-u0084500@gmail.com> References: <1608217244-314-1-git-send-email-u0084500@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org From: ChiYuan Huang Adds support for Richtek RT4831 DSV Regulator Signed-off-by: ChiYuan Huang --- drivers/regulator/Kconfig | 10 ++ drivers/regulator/Makefile | 1 + drivers/regulator/rt4831-regulator.c | 198 +++++++++++++++++++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 drivers/regulator/rt4831-regulator.c diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 020a00d..3e875ad 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -931,6 +931,16 @@ config REGULATOR_RT4801 This adds support for voltage regulators in Richtek RT4801 Display Bias IC. The device supports two regulators (DSVP/DSVN). +config REGULATOR_RT4831 + tristate "Richtek RT4831 DSV Regulators" + depends on MFD_RT4831 + help + This adds support for voltage regulators in Richtek RT4831. + There are three regulators (VLCM/DSVP/DSVN). + VLCM is a virtual voltage input for DSVP/DSVN inside IC. + And DSVP/DSVN is the real Vout range from 4V to 6.5V. + It's common used to provide the power for the display panel. + config REGULATOR_RT5033 tristate "Richtek RT5033 Regulators" depends on MFD_RT5033 diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile index 6ebae51..eb587d4 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -115,6 +115,7 @@ obj-$(CONFIG_REGULATOR_RK808) += rk808-regulator.o obj-$(CONFIG_REGULATOR_RN5T618) += rn5t618-regulator.o obj-$(CONFIG_REGULATOR_ROHM) += rohm-regulator.o obj-$(CONFIG_REGULATOR_RT4801) += rt4801-regulator.o +obj-$(CONFIG_REGULATOR_RT4831) += rt4831-regulator.o obj-$(CONFIG_REGULATOR_RT5033) += rt5033-regulator.o obj-$(CONFIG_REGULATOR_RTMV20) += rtmv20-regulator.o obj-$(CONFIG_REGULATOR_S2MPA01) += s2mpa01.o diff --git a/drivers/regulator/rt4831-regulator.c b/drivers/regulator/rt4831-regulator.c new file mode 100644 index 00000000..3d4695d --- /dev/null +++ b/drivers/regulator/rt4831-regulator.c @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + DSV_OUT_VLCM = 0, + DSV_OUT_VPOS, + DSV_OUT_VNEG, + DSV_OUT_MAX +}; + +#define RT4831_REG_DSVEN 0x09 +#define RT4831_REG_VLCM 0x0c +#define RT4831_REG_VPOS 0x0d +#define RT4831_REG_VNEG 0x0e +#define RT4831_REG_FLAGS 0x0f + +#define RT4831_VOLT_MASK GENMASK(5, 0) +#define RT4831_DSVMODE_SHIFT 5 +#define RT4831_DSVMODE_MASK GENMASK(7, 5) +#define RT4831_POSADEN_MASK BIT(4) +#define RT4831_NEGADEN_MASK BIT(3) +#define RT4831_POSEN_MASK BIT(2) +#define RT4831_NEGEN_MASK BIT(1) + +#define RT4831_OTP_MASK BIT(6) +#define RT4831_LCMOVP_MASK BIT(5) +#define RT4831_VPOSSCP_MASK BIT(3) +#define RT4831_VNEGSCP_MASK BIT(2) + +#define DSV_MODE_NORMAL (0x4 << RT4831_DSVMODE_SHIFT) +#define DSV_MODE_BYPASS (0x6 << RT4831_DSVMODE_SHIFT) +#define STEP_UV 50000 +#define VLCM_MIN_UV 4000000 +#define VLCM_MAX_UV 7150000 +#define VLCM_N_VOLTAGES ((VLCM_MAX_UV - VLCM_MIN_UV) / STEP_UV + 1) +#define VPN_MIN_UV 4000000 +#define VPN_MAX_UV 6500000 +#define VPN_N_VOLTAGES ((VPN_MAX_UV - VPN_MIN_UV) / STEP_UV + 1) + +static int rt4831_get_error_flags(struct regulator_dev *rdev, unsigned int *flags) +{ + struct regmap *regmap = rdev_get_regmap(rdev); + int rid = rdev_get_id(rdev); + unsigned int val, events = 0; + int ret; + + ret = regmap_read(regmap, RT4831_REG_FLAGS, &val); + if (ret) + return ret; + + if (val & RT4831_OTP_MASK) + events |= REGULATOR_ERROR_OVER_TEMP; + + if (rid == DSV_OUT_VLCM && (val & RT4831_LCMOVP_MASK)) + events |= REGULATOR_ERROR_OVER_CURRENT; + + if (rid == DSV_OUT_VPOS && (val & RT4831_VPOSSCP_MASK)) + events |= REGULATOR_ERROR_OVER_CURRENT; + + if (rid == DSV_OUT_VNEG && (val & RT4831_VNEGSCP_MASK)) + events |= REGULATOR_ERROR_OVER_CURRENT; + + *flags = events; + return 0; +} + +static const struct regulator_ops rt4831_dsvlcm_ops = { + .list_voltage = regulator_list_voltage_linear, + .set_voltage_sel = regulator_set_voltage_sel_regmap, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_bypass = regulator_set_bypass_regmap, + .get_bypass = regulator_get_bypass_regmap, + .get_error_flags = rt4831_get_error_flags, +}; + +static const struct regulator_ops rt4831_dsvpn_ops = { + .list_voltage = regulator_list_voltage_linear, + .set_voltage_sel = regulator_set_voltage_sel_regmap, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, + .set_active_discharge = regulator_set_active_discharge_regmap, + .get_error_flags = rt4831_get_error_flags, +}; + +static const struct regulator_desc rt4831_regulator_descs[] = { + { + .name = "DSVLCM", + .ops = &rt4831_dsvlcm_ops, + .of_match = of_match_ptr("DSVLCM"), + .regulators_node = of_match_ptr("regulators"), + .type = REGULATOR_VOLTAGE, + .id = DSV_OUT_VLCM, + .n_voltages = VLCM_N_VOLTAGES, + .min_uV = VLCM_MIN_UV, + .uV_step = STEP_UV, + .vsel_reg = RT4831_REG_VLCM, + .vsel_mask = RT4831_VOLT_MASK, + .bypass_reg = RT4831_REG_DSVEN, + .bypass_val_on = DSV_MODE_BYPASS, + .bypass_val_off = DSV_MODE_NORMAL, + }, + { + .name = "DSVP", + .ops = &rt4831_dsvpn_ops, + .of_match = of_match_ptr("DSVP"), + .regulators_node = of_match_ptr("regulators"), + .type = REGULATOR_VOLTAGE, + .id = DSV_OUT_VPOS, + .n_voltages = VPN_N_VOLTAGES, + .min_uV = VPN_MIN_UV, + .uV_step = STEP_UV, + .vsel_reg = RT4831_REG_VPOS, + .vsel_mask = RT4831_VOLT_MASK, + .enable_reg = RT4831_REG_DSVEN, + .enable_mask = RT4831_POSEN_MASK, + .active_discharge_reg = RT4831_REG_DSVEN, + .active_discharge_mask = RT4831_POSADEN_MASK, + }, + { + .name = "DSVN", + .ops = &rt4831_dsvpn_ops, + .of_match = of_match_ptr("DSVN"), + .regulators_node = of_match_ptr("regulators"), + .type = REGULATOR_VOLTAGE, + .id = DSV_OUT_VNEG, + .n_voltages = VPN_N_VOLTAGES, + .min_uV = VPN_MIN_UV, + .uV_step = STEP_UV, + .vsel_reg = RT4831_REG_VNEG, + .vsel_mask = RT4831_VOLT_MASK, + .enable_reg = RT4831_REG_DSVEN, + .enable_mask = RT4831_NEGEN_MASK, + .active_discharge_reg = RT4831_REG_DSVEN, + .active_discharge_mask = RT4831_NEGADEN_MASK, + } +}; + +static int rt4831_regulator_probe(struct platform_device *pdev) +{ + struct regmap *regmap; + struct regulator_dev *rdev; + struct regulator_config config = {}; + int i, ret; + + regmap = dev_get_regmap(pdev->dev.parent, NULL); + if (IS_ERR(regmap)) { + dev_err(&pdev->dev, "Failed to init regmap\n"); + return PTR_ERR(regmap); + } + + /* Configure DSV mode to normal by default */ + ret = regmap_update_bits(regmap, RT4831_REG_DSVEN, RT4831_DSVMODE_MASK, DSV_MODE_NORMAL); + if (ret) { + dev_err(&pdev->dev, "Failed to configure dsv mode to normal\n"); + return ret; + } + + config.dev = pdev->dev.parent; + config.regmap = regmap; + + for (i = 0; i < DSV_OUT_MAX; i++) { + rdev = devm_regulator_register(&pdev->dev, rt4831_regulator_descs + i, &config); + if (IS_ERR(rdev)) { + dev_err(&pdev->dev, "Failed to register %d regulator\n", i); + return PTR_ERR(rdev); + } + } + + return 0; +} + +static const struct platform_device_id rt4831_regulator_match[] = { + { "rt4831-regulator", 0 }, + {} +}; +MODULE_DEVICE_TABLE(platform, rt4831_regulator_match); + +static struct platform_driver rt4831_regulator_driver = { + .driver = { + .name = "rt4831-regulator", + }, + .id_table = rt4831_regulator_match, + .probe = rt4831_regulator_probe, +}; +module_platform_driver(rt4831_regulator_driver); + +MODULE_AUTHOR("ChiYuan Huang "); +MODULE_LICENSE("GPL v2");