From mboxrd@z Thu Jan 1 00:00:00 1970 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=-16.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 3BAB7C433E0 for ; Fri, 29 Jan 2021 03:52:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E8F5364DBD for ; Fri, 29 Jan 2021 03:52:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231923AbhA2Dwe (ORCPT ); Thu, 28 Jan 2021 22:52:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231863AbhA2DwN (ORCPT ); Thu, 28 Jan 2021 22:52:13 -0500 Received: from mail-vs1-xe30.google.com (mail-vs1-xe30.google.com [IPv6:2607:f8b0:4864:20::e30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCDD6C061756 for ; Thu, 28 Jan 2021 19:51:32 -0800 (PST) Received: by mail-vs1-xe30.google.com with SMTP id b5so4219644vsh.3 for ; Thu, 28 Jan 2021 19:51:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Jnk1h+Zm6n/okb5cHmLykkrJZohbNZPfoHPOBcykkQs=; b=EPerR1sUvTgueO5i3ZL5veSEQxRiqidYCwlCtMXdymJZFv/4wOGX3bJ+YpBrykLm83 TiZ0aQR4xJdQokVBcc8zGsaUY2yHJk4HC12IIGvJ8NsAXE3Dn/mRER3oBgPrfewtGdVi +yvqYhHusXB91BB6wRqLGam6ZYjGhlJDUyRNY= 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=Jnk1h+Zm6n/okb5cHmLykkrJZohbNZPfoHPOBcykkQs=; b=ijUu3LjdIahpxzGFRKPhMdspl7S6qRn/SKvobqlHpXapNJT7oz9zHYyKpWiRkBcXAn gSxcbxKVM9ihudViBGVuF+Dwv7zGrDn0I2AWPxkDLQgKs0T0E/xHjK/5URq8rRuSu7D8 XT7O9d/DhdX/12TjGQLiXvNBnx3eS2lAoeB48svleGKViC7mcts4yh20F9wLldtuLWEX ZBKjDNC7znLyMjwFX9SgVbyvireN/dL01f0XohWspZrsL7dHRTUAaFL+egVjkVoh63Sh ovlYfMMFHOVrG90A/4S1p7u2hbGP835Qn6V/xuwckgTDUfIG351C4+VAwYoNcil6IPU5 Sm2Q== X-Gm-Message-State: AOAM532h+sv5TBf9gcG8aDyns9lrGwkMzd4Brwgf2hmStkjitoLK+eqx QqVNi0WsJbweWTVYFmykHj2HRe/OwWzxYRDvnOPfMg== X-Google-Smtp-Source: ABdhPJz1S0Q9ijxKCsprTFXXrokE0AtPeYZFD8kd0gdJkXUmfBjCwQ0j0zCQ3r/c4+iTeuCCbpUpE+NI5D+wNmlB0Iw= X-Received: by 2002:a67:8945:: with SMTP id l66mr1502828vsd.48.1611892291939; Thu, 28 Jan 2021 19:51:31 -0800 (PST) MIME-Version: 1.0 References: <1611314381-19517-1-git-send-email-hsin-hsiung.wang@mediatek.com> <1611314381-19517-7-git-send-email-hsin-hsiung.wang@mediatek.com> In-Reply-To: <1611314381-19517-7-git-send-email-hsin-hsiung.wang@mediatek.com> From: Nicolas Boichat Date: Fri, 29 Jan 2021 11:51:20 +0800 Message-ID: Subject: Re: [PATCH v5 6/8] regulator: mt6359: Add support for MT6359 regulator To: Hsin-Hsiung Wang Cc: Lee Jones , Rob Herring , Matthias Brugger , Liam Girdwood , Mark Brown , Alessandro Zummo , Alexandre Belloni , Fei Shao , linux-rtc@vger.kernel.org, Devicetree List , Wen Su , srv_heupstream , Ran Bi , Sean Wang , lkml , Project_Global_Chrome_Upstream_Group@mediatek.com, "moderated list:ARM/Mediatek SoC support" , linux-arm Mailing List , Yingjoe Chen , Eddie Huang , Yuchen Huang Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jan 22, 2021 at 7:27 PM Hsin-Hsiung Wang wrote: > > From: Wen Su > > The MT6359 is a regulator found on boards based on MediaTek MT6779 and > probably other SoCs. It is a so called pmic and connects as a slave to > SoC using SPI, wrapped inside the pmic-wrapper. > > Signed-off-by: Wen Su > Signed-off-by: Hsin-Hsiung Wang > --- > changes since v4: > - add enable time of ldo. > - use the device of mfd driver for the regulator_config. > - add the regulators_node support. This doesn't build at all, please at least compile test before sending new revisions. > --- > drivers/regulator/Kconfig | 9 + > drivers/regulator/Makefile | 1 + > drivers/regulator/mt6359-regulator.c | 669 +++++++++++++++++++++ > include/linux/regulator/mt6359-regulator.h | 58 ++ > 4 files changed, 737 insertions(+) > create mode 100644 drivers/regulator/mt6359-regulator.c > create mode 100644 include/linux/regulator/mt6359-regulator.h > > diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig > index 53fa84f4d1e1..3de7bb5be8ac 100644 > --- a/drivers/regulator/Kconfig > +++ b/drivers/regulator/Kconfig > @@ -750,6 +750,15 @@ config REGULATOR_MT6358 > This driver supports the control of different power rails of device > through regulator interface. > > +config REGULATOR_MT6359 > + tristate "MediaTek MT6359 PMIC" > + depends on MFD_MT6397 > + help > + Say y here to select this option to enable the power regulator of > + MediaTek MT6359 PMIC. > + This driver supports the control of different power rails of device > + through regulator interface. > + > config REGULATOR_MT6360 > tristate "MT6360 SubPMIC Regulator" > depends on MFD_MT6360 > diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile > index 680e539f6579..4f65eaead82d 100644 > --- a/drivers/regulator/Makefile > +++ b/drivers/regulator/Makefile > @@ -91,6 +91,7 @@ obj-$(CONFIG_REGULATOR_MPQ7920) += mpq7920.o > obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o > obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o > obj-$(CONFIG_REGULATOR_MT6358) += mt6358-regulator.o > +obj-$(CONFIG_REGULATOR_MT6359) += mt6359-regulator.o > obj-$(CONFIG_REGULATOR_MT6360) += mt6360-regulator.o > obj-$(CONFIG_REGULATOR_MT6380) += mt6380-regulator.o > obj-$(CONFIG_REGULATOR_MT6397) += mt6397-regulator.o > diff --git a/drivers/regulator/mt6359-regulator.c b/drivers/regulator/mt6359-regulator.c > new file mode 100644 > index 000000000000..fabc3f57f334 > --- /dev/null > +++ b/drivers/regulator/mt6359-regulator.c > @@ -0,0 +1,669 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// > +// Copyright (c) 2020 MediaTek Inc. > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define MT6359_BUCK_MODE_AUTO 0 > +#define MT6359_BUCK_MODE_FORCE_PWM 1 > +#define MT6359_BUCK_MODE_NORMAL 0 > +#define MT6359_BUCK_MODE_LP 2 > + > +/* > + * MT6359 regulators' information > + * > + * @desc: standard fields of regulator description. > + * @status_reg: for query status of regulators. > + * @qi: Mask for query enable signal status of regulators. > + * @modeset_reg: for operating AUTO/PWM mode register. > + * @modeset_mask: MASK for operating modeset register. > + * @modeset_shift: SHIFT for operating modeset register. > + */ > +struct mt6359_regulator_info { > + struct regulator_desc desc; > + u32 status_reg; > + u32 qi; > + u32 modeset_reg; > + u32 modeset_mask; > + u32 modeset_shift; > + u32 lp_mode_reg; > + u32 lp_mode_mask; > + u32 lp_mode_shift; > +}; > + > +#define MT6359_BUCK(match, _name, min, max, step, min_sel, \ > + volt_ranges, _enable_reg, _status_reg, \ > + _vsel_reg, _vsel_mask, \ > + _lp_mode_reg, _lp_mode_shift, \ > + _modeset_reg, _modeset_shift) \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_range_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .uV_step = (step), \ > + .linear_min_sel = (min_sel), \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .min_uV = (min), \ > + .linear_ranges = volt_ranges, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + .of_map_mode = mt6359_map_mode, \ > + .of_map_mode = mt6359_map_mode, \ > + }, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > + .lp_mode_reg = _lp_mode_reg, \ > + .lp_mode_reg = _lp_mode_reg, \ > + .lp_mode_mask = BIT(_lp_mode_shift), \ > + .lp_mode_reg = _lp_mode_reg, \ Repeated 3 times. > + .lp_mode_mask = BIT(_lp_mode_shift), \ Repeated twice. > + .lp_mode_shift = _lp_mode_shift, \ > + .modeset_reg = _modeset_reg, \ > + .modeset_mask = BIT(_modeset_shift), \ > + .modeset_shift = _modeset_shift \ > +} > + > +#define MT6359_LDO_LINEAR(match, _name, min, max, step, min_sel,\ > +#define MT6359_LDO_LINEAR(match, _name, min, max, step, min_sel,\ Repeated twice > + volt_ranges, _enable_reg, _status_reg, \ > + _vsel_reg, _vsel_mask) \ > + _vsel_reg, _vsel_mask) \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_range_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .owner = THIS_MODULE, \ > + .uV_step = (step), \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .min_uV = (min), \ > + .linear_ranges = volt_ranges, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + }, \ > + .status_reg = _status_reg, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +#define MT6359_LDO(match, _name, _volt_table, \ > + _enable_reg, _enable_mask, _status_reg, \ > + _vsel_reg, _vsel_mask, _en_delay) \ > +[MT6359_ID_##_name] = { \ > +[MT6359_ID_##_name] = { \ Repeated twice > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_table_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .volt_table = _volt_table, \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .volt_table = _volt_table, \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(_enable_mask), \ > + .enable_time = _en_delay, \ > + }, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +#define MT6359_REG_FIXED(match, _name, _enable_reg, \ > + _status_reg, _fixed_volt) \ > +[MT6359_ID_##_name] = { \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .name = #_name, \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_fixed_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .n_voltages = 1, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + .fixed_uV = (_fixed_volt), \ > + }, \ > + .status_reg = _status_reg, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +static const struct linear_range mt_volt_range1[] = { > + REGULATOR_LINEAR_RANGE(800000, 0, 0x70, 12500), > +}; > +}; > + > +static const struct linear_range mt_volt_range2[] = { > + REGULATOR_LINEAR_RANGE(400000, 0, 0x7f, 6250), > +}; > + > +static const struct linear_range mt_volt_range3[] = { > + REGULATOR_LINEAR_RANGE(400000, 0, 0x70, 6250), > +}; > + > +static const struct linear_range mt_volt_range4[] = { > + REGULATOR_LINEAR_RANGE(800000, 0, 0x40, 12500), > +}; > + > +static const struct linear_range mt_volt_range5[] = { > +static const struct linear_range mt_volt_range5[] = { This is repeated twice. > + REGULATOR_LINEAR_RANGE(500000, 0, 0x3F, 50000), > +}; > + > [snip] From mboxrd@z Thu Jan 1 00:00:00 1970 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=-14.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 A303CC433E0 for ; Fri, 29 Jan 2021 03:51:55 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0D31764DBD for ; Fri, 29 Jan 2021 03:51:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D31764DBD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Z3fnxKLlSPK4BpB6+p2p7wX0S9rTOokXEWgBAJo4xxU=; b=lc9r+RweNsoa3paiQFb5ZOChh m2FMETF4sEltVoP9k8cgnCpr6Y2QkfvAH+Fr++h8gtWrw6sJNm1pttlH1jeBvUGRm+DJLF//gUUTI dnWKUj0/LFn8XpUKuoyjCvYflqfIcrbjeBz7+kFyiJPpmYkwHiKtubO5S0aD0CFJnSur0CQl2RfSC hA0maRCrRi1rcJdguS/3Rvij4qncGe1NpFKDEgL3l3gIVQPG+JzA1on/xG6EUC8EaGBI9rSku+U4S 8auQeVme4y+EvTE6tg/hTRhZL2goYzobzbKWnrUHzySmkCk4n6YKCEW5ejF4+tX9K2za0BQ3Pjler tdFHIJDcw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l5Kow-0003FS-GT; Fri, 29 Jan 2021 03:51:42 +0000 Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l5Kop-0003Cz-9w for linux-mediatek@lists.infradead.org; Fri, 29 Jan 2021 03:51:38 +0000 Received: by mail-vs1-xe2d.google.com with SMTP id o186so4220404vso.1 for ; Thu, 28 Jan 2021 19:51:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Jnk1h+Zm6n/okb5cHmLykkrJZohbNZPfoHPOBcykkQs=; b=EPerR1sUvTgueO5i3ZL5veSEQxRiqidYCwlCtMXdymJZFv/4wOGX3bJ+YpBrykLm83 TiZ0aQR4xJdQokVBcc8zGsaUY2yHJk4HC12IIGvJ8NsAXE3Dn/mRER3oBgPrfewtGdVi +yvqYhHusXB91BB6wRqLGam6ZYjGhlJDUyRNY= 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=Jnk1h+Zm6n/okb5cHmLykkrJZohbNZPfoHPOBcykkQs=; b=Aznr7SdAMrtbuW8qh8faWCJ4+WQgyLWy4o8/npLM4Sa/dB/kj0RNs8E12gFQhjmKc0 gweLQWnX+/4E9T6AojxWzKHTHuq8yRgcmwUAVJ930qjqDRiPFwke/+RFDgPuFIHug6Yy xYP++X+SqK30ycc7oFoamVROBmnBo8aB0B+NisKcGVPtowqmU/oyJq9tCJ3EL0itkeq3 dpxh3mRnB0vbnzfWxhGXV9J2CScefpTdS/v50YIPfXDR3UPsvVHQx2ga7a2nOULYPYao Z0hyy7/P4+3B4Ery+tWZdhdpQu94M3i5GPsSOmeLdhcRkx6bzZMbCgAi5iHNdi6fSa4a B74w== X-Gm-Message-State: AOAM5337EgXnNqL1EXZrPgSkBRmOlPGkPhU886Z4VjIBWcPKxaTHtJ3M cNgpKyJUsn0M3UBKEhP1EZFYa+vjUTv1XuCJ035Wnw== X-Google-Smtp-Source: ABdhPJz1S0Q9ijxKCsprTFXXrokE0AtPeYZFD8kd0gdJkXUmfBjCwQ0j0zCQ3r/c4+iTeuCCbpUpE+NI5D+wNmlB0Iw= X-Received: by 2002:a67:8945:: with SMTP id l66mr1502828vsd.48.1611892291939; Thu, 28 Jan 2021 19:51:31 -0800 (PST) MIME-Version: 1.0 References: <1611314381-19517-1-git-send-email-hsin-hsiung.wang@mediatek.com> <1611314381-19517-7-git-send-email-hsin-hsiung.wang@mediatek.com> In-Reply-To: <1611314381-19517-7-git-send-email-hsin-hsiung.wang@mediatek.com> From: Nicolas Boichat Date: Fri, 29 Jan 2021 11:51:20 +0800 Message-ID: Subject: Re: [PATCH v5 6/8] regulator: mt6359: Add support for MT6359 regulator To: Hsin-Hsiung Wang X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210128_225135_453826_D5982177 X-CRM114-Status: GOOD ( 25.11 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rtc@vger.kernel.org, Alessandro Zummo , Alexandre Belloni , srv_heupstream , Wen Su , Fei Shao , Ran Bi , Sean Wang , Liam Girdwood , Rob Herring , lkml , Project_Global_Chrome_Upstream_Group@mediatek.com, Devicetree List , Mark Brown , "moderated list:ARM/Mediatek SoC support" , Matthias Brugger , Yingjoe Chen , Eddie Huang , Lee Jones , Yuchen Huang , linux-arm Mailing List Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Fri, Jan 22, 2021 at 7:27 PM Hsin-Hsiung Wang wrote: > > From: Wen Su > > The MT6359 is a regulator found on boards based on MediaTek MT6779 and > probably other SoCs. It is a so called pmic and connects as a slave to > SoC using SPI, wrapped inside the pmic-wrapper. > > Signed-off-by: Wen Su > Signed-off-by: Hsin-Hsiung Wang > --- > changes since v4: > - add enable time of ldo. > - use the device of mfd driver for the regulator_config. > - add the regulators_node support. This doesn't build at all, please at least compile test before sending new revisions. > --- > drivers/regulator/Kconfig | 9 + > drivers/regulator/Makefile | 1 + > drivers/regulator/mt6359-regulator.c | 669 +++++++++++++++++++++ > include/linux/regulator/mt6359-regulator.h | 58 ++ > 4 files changed, 737 insertions(+) > create mode 100644 drivers/regulator/mt6359-regulator.c > create mode 100644 include/linux/regulator/mt6359-regulator.h > > diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig > index 53fa84f4d1e1..3de7bb5be8ac 100644 > --- a/drivers/regulator/Kconfig > +++ b/drivers/regulator/Kconfig > @@ -750,6 +750,15 @@ config REGULATOR_MT6358 > This driver supports the control of different power rails of device > through regulator interface. > > +config REGULATOR_MT6359 > + tristate "MediaTek MT6359 PMIC" > + depends on MFD_MT6397 > + help > + Say y here to select this option to enable the power regulator of > + MediaTek MT6359 PMIC. > + This driver supports the control of different power rails of device > + through regulator interface. > + > config REGULATOR_MT6360 > tristate "MT6360 SubPMIC Regulator" > depends on MFD_MT6360 > diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile > index 680e539f6579..4f65eaead82d 100644 > --- a/drivers/regulator/Makefile > +++ b/drivers/regulator/Makefile > @@ -91,6 +91,7 @@ obj-$(CONFIG_REGULATOR_MPQ7920) += mpq7920.o > obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o > obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o > obj-$(CONFIG_REGULATOR_MT6358) += mt6358-regulator.o > +obj-$(CONFIG_REGULATOR_MT6359) += mt6359-regulator.o > obj-$(CONFIG_REGULATOR_MT6360) += mt6360-regulator.o > obj-$(CONFIG_REGULATOR_MT6380) += mt6380-regulator.o > obj-$(CONFIG_REGULATOR_MT6397) += mt6397-regulator.o > diff --git a/drivers/regulator/mt6359-regulator.c b/drivers/regulator/mt6359-regulator.c > new file mode 100644 > index 000000000000..fabc3f57f334 > --- /dev/null > +++ b/drivers/regulator/mt6359-regulator.c > @@ -0,0 +1,669 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// > +// Copyright (c) 2020 MediaTek Inc. > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define MT6359_BUCK_MODE_AUTO 0 > +#define MT6359_BUCK_MODE_FORCE_PWM 1 > +#define MT6359_BUCK_MODE_NORMAL 0 > +#define MT6359_BUCK_MODE_LP 2 > + > +/* > + * MT6359 regulators' information > + * > + * @desc: standard fields of regulator description. > + * @status_reg: for query status of regulators. > + * @qi: Mask for query enable signal status of regulators. > + * @modeset_reg: for operating AUTO/PWM mode register. > + * @modeset_mask: MASK for operating modeset register. > + * @modeset_shift: SHIFT for operating modeset register. > + */ > +struct mt6359_regulator_info { > + struct regulator_desc desc; > + u32 status_reg; > + u32 qi; > + u32 modeset_reg; > + u32 modeset_mask; > + u32 modeset_shift; > + u32 lp_mode_reg; > + u32 lp_mode_mask; > + u32 lp_mode_shift; > +}; > + > +#define MT6359_BUCK(match, _name, min, max, step, min_sel, \ > + volt_ranges, _enable_reg, _status_reg, \ > + _vsel_reg, _vsel_mask, \ > + _lp_mode_reg, _lp_mode_shift, \ > + _modeset_reg, _modeset_shift) \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_range_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .uV_step = (step), \ > + .linear_min_sel = (min_sel), \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .min_uV = (min), \ > + .linear_ranges = volt_ranges, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + .of_map_mode = mt6359_map_mode, \ > + .of_map_mode = mt6359_map_mode, \ > + }, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > + .lp_mode_reg = _lp_mode_reg, \ > + .lp_mode_reg = _lp_mode_reg, \ > + .lp_mode_mask = BIT(_lp_mode_shift), \ > + .lp_mode_reg = _lp_mode_reg, \ Repeated 3 times. > + .lp_mode_mask = BIT(_lp_mode_shift), \ Repeated twice. > + .lp_mode_shift = _lp_mode_shift, \ > + .modeset_reg = _modeset_reg, \ > + .modeset_mask = BIT(_modeset_shift), \ > + .modeset_shift = _modeset_shift \ > +} > + > +#define MT6359_LDO_LINEAR(match, _name, min, max, step, min_sel,\ > +#define MT6359_LDO_LINEAR(match, _name, min, max, step, min_sel,\ Repeated twice > + volt_ranges, _enable_reg, _status_reg, \ > + _vsel_reg, _vsel_mask) \ > + _vsel_reg, _vsel_mask) \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_range_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .owner = THIS_MODULE, \ > + .uV_step = (step), \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .min_uV = (min), \ > + .linear_ranges = volt_ranges, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + }, \ > + .status_reg = _status_reg, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +#define MT6359_LDO(match, _name, _volt_table, \ > + _enable_reg, _enable_mask, _status_reg, \ > + _vsel_reg, _vsel_mask, _en_delay) \ > +[MT6359_ID_##_name] = { \ > +[MT6359_ID_##_name] = { \ Repeated twice > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_table_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .volt_table = _volt_table, \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .volt_table = _volt_table, \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(_enable_mask), \ > + .enable_time = _en_delay, \ > + }, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +#define MT6359_REG_FIXED(match, _name, _enable_reg, \ > + _status_reg, _fixed_volt) \ > +[MT6359_ID_##_name] = { \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .name = #_name, \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_fixed_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .n_voltages = 1, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + .fixed_uV = (_fixed_volt), \ > + }, \ > + .status_reg = _status_reg, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +static const struct linear_range mt_volt_range1[] = { > + REGULATOR_LINEAR_RANGE(800000, 0, 0x70, 12500), > +}; > +}; > + > +static const struct linear_range mt_volt_range2[] = { > + REGULATOR_LINEAR_RANGE(400000, 0, 0x7f, 6250), > +}; > + > +static const struct linear_range mt_volt_range3[] = { > + REGULATOR_LINEAR_RANGE(400000, 0, 0x70, 6250), > +}; > + > +static const struct linear_range mt_volt_range4[] = { > + REGULATOR_LINEAR_RANGE(800000, 0, 0x40, 12500), > +}; > + > +static const struct linear_range mt_volt_range5[] = { > +static const struct linear_range mt_volt_range5[] = { This is repeated twice. > + REGULATOR_LINEAR_RANGE(500000, 0, 0x3F, 50000), > +}; > + > [snip] _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 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=-14.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 8295DC433E0 for ; Fri, 29 Jan 2021 03:53:35 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2319C64DFB for ; Fri, 29 Jan 2021 03:53:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2319C64DFB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ctqNxqqE2ZxZ7nGVtMUA3jj9nl8lXVuQpCAhkLJlB3o=; b=CCRBYPAm37ybX4q2G3svf636U OgG7HAjKQ4I8ol/NOCqkgDyuBtCXMtqdmf3lkoGKd8yz+MzAj4XUl0Ayhl778SzZHGmZUASSvqTjV pME3KoTum4J5Z0BHuhIvGARbeEo46Nm1ZSeHL/PdLV/NKfLn5hG5gnnsPQqdMkePJt+tv5JX8CVGm E/pmSLTbdrv+AUjy5HJj4Kk/E9bvy9klCAj4ymRU8Oz8moIISBYAU3adcyDRHGm8yNYC593FseZw4 Lh7kolrHWsawoPbUiNfxeSKzuQfRKTtszJ1bKBMLa6s7PQDp+kiFawSMqR2Fidw4rlfwXl8pBUGCw a7Mk5yXEg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l5Kou-0003FC-QH; Fri, 29 Jan 2021 03:51:40 +0000 Received: from mail-vs1-xe29.google.com ([2607:f8b0:4864:20::e29]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l5Koq-0003Cy-3I for linux-arm-kernel@lists.infradead.org; Fri, 29 Jan 2021 03:51:38 +0000 Received: by mail-vs1-xe29.google.com with SMTP id h11so4190097vsa.10 for ; Thu, 28 Jan 2021 19:51:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Jnk1h+Zm6n/okb5cHmLykkrJZohbNZPfoHPOBcykkQs=; b=EPerR1sUvTgueO5i3ZL5veSEQxRiqidYCwlCtMXdymJZFv/4wOGX3bJ+YpBrykLm83 TiZ0aQR4xJdQokVBcc8zGsaUY2yHJk4HC12IIGvJ8NsAXE3Dn/mRER3oBgPrfewtGdVi +yvqYhHusXB91BB6wRqLGam6ZYjGhlJDUyRNY= 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=Jnk1h+Zm6n/okb5cHmLykkrJZohbNZPfoHPOBcykkQs=; b=fU9nAODp5RQpUTp6lKayrAMKqKzNqAWJjw4FgG7bWBpgKMb//BaoqEeSg08t3s3L5O Zrd66JczYhkdEEILDVfsfOJJRuGknkLe0OmeO3K3zd0tCry5zLJQ9ax2VJvV+goCEDmy 9JDfUKTuYzPXvIxKpFPYTWYozRYV39f1Z0tDEZZisu1rb64VUkGrWoXsxERr94VK2Iv8 CwfT4O/QGmq5XMBxfsfO9+rZSfIS3BSI2bjIGnty/h0LF9iTQjTFH6E2KQSaDaUyMN3c PBq2206uT6bSOirxza9wbJKGKNZhXerqecy2rdm6r9hsVLgFa2Pj3mfNhPUwqjKVH/IW aouQ== X-Gm-Message-State: AOAM530HhvDNu2Sx1lGUme7A5m5W892uBZBW+cqmECugHozRIAYM62Xf oq3DIuC/pPjWfqyU45YjB31AqE5aakdpMFG5aMj1kw== X-Google-Smtp-Source: ABdhPJz1S0Q9ijxKCsprTFXXrokE0AtPeYZFD8kd0gdJkXUmfBjCwQ0j0zCQ3r/c4+iTeuCCbpUpE+NI5D+wNmlB0Iw= X-Received: by 2002:a67:8945:: with SMTP id l66mr1502828vsd.48.1611892291939; Thu, 28 Jan 2021 19:51:31 -0800 (PST) MIME-Version: 1.0 References: <1611314381-19517-1-git-send-email-hsin-hsiung.wang@mediatek.com> <1611314381-19517-7-git-send-email-hsin-hsiung.wang@mediatek.com> In-Reply-To: <1611314381-19517-7-git-send-email-hsin-hsiung.wang@mediatek.com> From: Nicolas Boichat Date: Fri, 29 Jan 2021 11:51:20 +0800 Message-ID: Subject: Re: [PATCH v5 6/8] regulator: mt6359: Add support for MT6359 regulator To: Hsin-Hsiung Wang X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210128_225136_185472_A8F5C178 X-CRM114-Status: GOOD ( 26.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rtc@vger.kernel.org, Alessandro Zummo , Alexandre Belloni , srv_heupstream , Wen Su , Fei Shao , Ran Bi , Sean Wang , Liam Girdwood , Rob Herring , lkml , Project_Global_Chrome_Upstream_Group@mediatek.com, Devicetree List , Mark Brown , "moderated list:ARM/Mediatek SoC support" , Matthias Brugger , Yingjoe Chen , Eddie Huang , Lee Jones , Yuchen Huang , linux-arm Mailing List Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Jan 22, 2021 at 7:27 PM Hsin-Hsiung Wang wrote: > > From: Wen Su > > The MT6359 is a regulator found on boards based on MediaTek MT6779 and > probably other SoCs. It is a so called pmic and connects as a slave to > SoC using SPI, wrapped inside the pmic-wrapper. > > Signed-off-by: Wen Su > Signed-off-by: Hsin-Hsiung Wang > --- > changes since v4: > - add enable time of ldo. > - use the device of mfd driver for the regulator_config. > - add the regulators_node support. This doesn't build at all, please at least compile test before sending new revisions. > --- > drivers/regulator/Kconfig | 9 + > drivers/regulator/Makefile | 1 + > drivers/regulator/mt6359-regulator.c | 669 +++++++++++++++++++++ > include/linux/regulator/mt6359-regulator.h | 58 ++ > 4 files changed, 737 insertions(+) > create mode 100644 drivers/regulator/mt6359-regulator.c > create mode 100644 include/linux/regulator/mt6359-regulator.h > > diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig > index 53fa84f4d1e1..3de7bb5be8ac 100644 > --- a/drivers/regulator/Kconfig > +++ b/drivers/regulator/Kconfig > @@ -750,6 +750,15 @@ config REGULATOR_MT6358 > This driver supports the control of different power rails of device > through regulator interface. > > +config REGULATOR_MT6359 > + tristate "MediaTek MT6359 PMIC" > + depends on MFD_MT6397 > + help > + Say y here to select this option to enable the power regulator of > + MediaTek MT6359 PMIC. > + This driver supports the control of different power rails of device > + through regulator interface. > + > config REGULATOR_MT6360 > tristate "MT6360 SubPMIC Regulator" > depends on MFD_MT6360 > diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile > index 680e539f6579..4f65eaead82d 100644 > --- a/drivers/regulator/Makefile > +++ b/drivers/regulator/Makefile > @@ -91,6 +91,7 @@ obj-$(CONFIG_REGULATOR_MPQ7920) += mpq7920.o > obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o > obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o > obj-$(CONFIG_REGULATOR_MT6358) += mt6358-regulator.o > +obj-$(CONFIG_REGULATOR_MT6359) += mt6359-regulator.o > obj-$(CONFIG_REGULATOR_MT6360) += mt6360-regulator.o > obj-$(CONFIG_REGULATOR_MT6380) += mt6380-regulator.o > obj-$(CONFIG_REGULATOR_MT6397) += mt6397-regulator.o > diff --git a/drivers/regulator/mt6359-regulator.c b/drivers/regulator/mt6359-regulator.c > new file mode 100644 > index 000000000000..fabc3f57f334 > --- /dev/null > +++ b/drivers/regulator/mt6359-regulator.c > @@ -0,0 +1,669 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// > +// Copyright (c) 2020 MediaTek Inc. > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define MT6359_BUCK_MODE_AUTO 0 > +#define MT6359_BUCK_MODE_FORCE_PWM 1 > +#define MT6359_BUCK_MODE_NORMAL 0 > +#define MT6359_BUCK_MODE_LP 2 > + > +/* > + * MT6359 regulators' information > + * > + * @desc: standard fields of regulator description. > + * @status_reg: for query status of regulators. > + * @qi: Mask for query enable signal status of regulators. > + * @modeset_reg: for operating AUTO/PWM mode register. > + * @modeset_mask: MASK for operating modeset register. > + * @modeset_shift: SHIFT for operating modeset register. > + */ > +struct mt6359_regulator_info { > + struct regulator_desc desc; > + u32 status_reg; > + u32 qi; > + u32 modeset_reg; > + u32 modeset_mask; > + u32 modeset_shift; > + u32 lp_mode_reg; > + u32 lp_mode_mask; > + u32 lp_mode_shift; > +}; > + > +#define MT6359_BUCK(match, _name, min, max, step, min_sel, \ > + volt_ranges, _enable_reg, _status_reg, \ > + _vsel_reg, _vsel_mask, \ > + _lp_mode_reg, _lp_mode_shift, \ > + _modeset_reg, _modeset_shift) \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_range_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .uV_step = (step), \ > + .linear_min_sel = (min_sel), \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .min_uV = (min), \ > + .linear_ranges = volt_ranges, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + .of_map_mode = mt6359_map_mode, \ > + .of_map_mode = mt6359_map_mode, \ > + }, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > + .lp_mode_reg = _lp_mode_reg, \ > + .lp_mode_reg = _lp_mode_reg, \ > + .lp_mode_mask = BIT(_lp_mode_shift), \ > + .lp_mode_reg = _lp_mode_reg, \ Repeated 3 times. > + .lp_mode_mask = BIT(_lp_mode_shift), \ Repeated twice. > + .lp_mode_shift = _lp_mode_shift, \ > + .modeset_reg = _modeset_reg, \ > + .modeset_mask = BIT(_modeset_shift), \ > + .modeset_shift = _modeset_shift \ > +} > + > +#define MT6359_LDO_LINEAR(match, _name, min, max, step, min_sel,\ > +#define MT6359_LDO_LINEAR(match, _name, min, max, step, min_sel,\ Repeated twice > + volt_ranges, _enable_reg, _status_reg, \ > + _vsel_reg, _vsel_mask) \ > + _vsel_reg, _vsel_mask) \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_range_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .owner = THIS_MODULE, \ > + .uV_step = (step), \ > + .linear_min_sel = (min_sel), \ > + .n_voltages = ((max) - (min)) / (step) + 1, \ > + .min_uV = (min), \ > + .linear_ranges = volt_ranges, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .n_linear_ranges = ARRAY_SIZE(volt_ranges), \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + }, \ > + .status_reg = _status_reg, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +#define MT6359_LDO(match, _name, _volt_table, \ > + _enable_reg, _enable_mask, _status_reg, \ > + _vsel_reg, _vsel_mask, _en_delay) \ > +[MT6359_ID_##_name] = { \ > +[MT6359_ID_##_name] = { \ Repeated twice > + .desc = { \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_table_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .volt_table = _volt_table, \ > + .n_voltages = ARRAY_SIZE(_volt_table), \ > + .volt_table = _volt_table, \ > + .vsel_reg = _vsel_reg, \ > + .vsel_mask = _vsel_mask, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(_enable_mask), \ > + .enable_time = _en_delay, \ > + }, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +#define MT6359_REG_FIXED(match, _name, _enable_reg, \ > + _status_reg, _fixed_volt) \ > +[MT6359_ID_##_name] = { \ > +[MT6359_ID_##_name] = { \ > + .desc = { \ > + .name = #_name, \ > + .name = #_name, \ > + .of_match = of_match_ptr(match), \ > + .regulators_node = of_match_ptr("regulators"), \ > + .ops = &mt6359_volt_fixed_ops, \ > + .type = REGULATOR_VOLTAGE, \ > + .id = MT6359_ID_##_name, \ > + .id = MT6359_ID_##_name, \ > + .owner = THIS_MODULE, \ > + .n_voltages = 1, \ > + .enable_reg = _enable_reg, \ > + .enable_mask = BIT(0), \ > + .fixed_uV = (_fixed_volt), \ > + }, \ > + .status_reg = _status_reg, \ > + .status_reg = _status_reg, \ > + .qi = BIT(0), \ > +} > + > +static const struct linear_range mt_volt_range1[] = { > + REGULATOR_LINEAR_RANGE(800000, 0, 0x70, 12500), > +}; > +}; > + > +static const struct linear_range mt_volt_range2[] = { > + REGULATOR_LINEAR_RANGE(400000, 0, 0x7f, 6250), > +}; > + > +static const struct linear_range mt_volt_range3[] = { > + REGULATOR_LINEAR_RANGE(400000, 0, 0x70, 6250), > +}; > + > +static const struct linear_range mt_volt_range4[] = { > + REGULATOR_LINEAR_RANGE(800000, 0, 0x40, 12500), > +}; > + > +static const struct linear_range mt_volt_range5[] = { > +static const struct linear_range mt_volt_range5[] = { This is repeated twice. > + REGULATOR_LINEAR_RANGE(500000, 0, 0x3F, 50000), > +}; > + > [snip] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel