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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5ADA5C77B7C for ; Wed, 31 May 2023 11:35:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+C904ONk5hONtv8jncxeCTPJdIkHAdoZz795nnjdjno=; b=qoXxLLMWXuI9ul oZLHtt5GQoqNe8ooOQUQ3KqQydQckgqmdPlbRihsYaZ6p4nWnhgCI8Pfn2TQTRfmQSJo7h0yp/D+N ibLsliIKjI8YIBmd1+J3gEs/zUSw935cl2Z/BaPzaCwh+u0e15XdS5UoyANRSSz3Gu/LYm7birGZ9 Oukoql4+kskbxduy3THN7R4PKrb7DrLnCtkziXqsB0CsQ++GbWjVytSs0EI+WErHf8sPGtAsLKjZB +NC+83ona/kxBzFEHaKqVirtVdom/Bqhu5sEhxajPFp1dWlixOcNqpV+beq9vSYxGqPPE0wZ7feMN ziuCKc3/W38LBHpHsa5A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q4K6S-00HFQv-0t; Wed, 31 May 2023 11:34:56 +0000 Received: from mx1.tq-group.com ([93.104.207.81]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q4K6J-00HFOs-1h for linux-arm-kernel@lists.infradead.org; Wed, 31 May 2023 11:34:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1685532887; x=1717068887; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DUGv+xMCQg6U9dZBPdbVk2kTCvbNzMJsb2Y5MfrpPnA=; b=i+BvBqyEf+rHfMUpD4FnJm4YtwHPglPpfZfpi33Rd7Gz1KrB76hj6NvD lrrD1UcxgnlmkDcLqRPm6/MM+ePvBAf9hf0cVoW417RO56rdD+f3FVHoJ iF1wThlnGDbu9ITC5cC4Jm8QW65T/GcKDVneRODzWPImqPUEuo9F85rOm HkQgjOyTPn3LW4DS+sal+Y/YCNIIXSHlbtq2w/d5dwmq35YslRRt7Z+OY ZAz4HHQhBNvw+a4p2uBUUQ2KcpT9xreiydIjr+Rxpy9UX/b14Njlf8jLa FnV4Bs9y/xqq0hnKir/RD0BRsJNfPPFQ6hvp1Msv4rwO5H578s6TNQgPw g==; X-IronPort-AV: E=Sophos;i="6.00,207,1681164000"; d="scan'208";a="31194083" Received: from unknown (HELO tq-pgp-pr1.tq-net.de) ([192.168.6.15]) by mx1-pgp.tq-group.com with ESMTP; 31 May 2023 13:34:42 +0200 Received: from mx1.tq-group.com ([192.168.6.7]) by tq-pgp-pr1.tq-net.de (PGP Universal service); Wed, 31 May 2023 13:34:42 +0200 X-PGP-Universal: processed; by tq-pgp-pr1.tq-net.de on Wed, 31 May 2023 13:34:42 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1685532882; x=1717068882; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DUGv+xMCQg6U9dZBPdbVk2kTCvbNzMJsb2Y5MfrpPnA=; b=hloaGETWQKadDGE7VFsT8a3y+O3vkyAiWPBUJYdQQSL7jf6SFFZd88Ob QtPkTILTtZUZk8NB8GeJPLxd8NdIcWVej+feKjFlvlY8q1OtTv+83XF+l bFMRNWIPcPt/NTZcKxiafklMNESZbqm8z35n/FXFJrHElGhlshDGqg5Zd /eJnmv9s81HRXsuPe7Ilvpdq5LAhkpYLnci3aTKL6HbfbrXaFf2r4fj+2 77qr4/+A5+sNyw1KCaRZxhqrRr9rbMWIH6rkLUYSuZyFnRS9BcFytr/WD C53Kl0Y8PbIVxCgDbmc6uQjpeV59k3JpWqGY4Qjad4dnsNJi13WwT3qz6 A==; X-IronPort-AV: E=Sophos;i="6.00,207,1681164000"; d="scan'208";a="31194082" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 31 May 2023 13:34:42 +0200 Received: from steina-w.localnet (unknown [10.123.53.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id C7594280099; Wed, 31 May 2023 13:34:41 +0200 (CEST) From: Alexander Stein To: ping.bai@nxp.com, lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, linux-arm-kernel@lists.infradead.org Cc: kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joy Zou Subject: Re: [PATCH v1 2/3] regulator: pca9450: add pca9451a support Date: Wed, 31 May 2023 13:34:41 +0200 Message-ID: <3505527.iIbC2pHGDl@steina-w> Organization: TQ-Systems GmbH In-Reply-To: <20230531065724.3671795-3-joy.zou@nxp.com> References: <20230531065724.3671795-1-joy.zou@nxp.com> <20230531065724.3671795-3-joy.zou@nxp.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230531_043448_442262_339DEF00 X-CRM114-Status: GOOD ( 27.68 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, Am Mittwoch, 31. Mai 2023, 08:57:23 CEST schrieb Joy Zou: > Adding support for pmic pca9451a. > = > This patch support old and new pmic pca9451a. The new pmic trimed BUCK1. > The default value of Toff_Deb is used to distinguish the old and new pmic. > = > Signed-off-by: Joy Zou > --- > drivers/regulator/pca9450-regulator.c | 262 ++++++++++++++++++++++++-- > include/linux/regulator/pca9450.h | 2 + > 2 files changed, 252 insertions(+), 12 deletions(-) > = > diff --git a/drivers/regulator/pca9450-regulator.c > b/drivers/regulator/pca9450-regulator.c index 91bfb7e026c9..654aa4fbe494 > 100644 > --- a/drivers/regulator/pca9450-regulator.c > +++ b/drivers/regulator/pca9450-regulator.c > @@ -104,7 +104,15 @@ static const struct regulator_ops > pca9450_ldo_regulator_ops =3D { * 0.60 to 2.1875V (12.5mV step) > */ > static const struct linear_range pca9450_dvs_buck_volts[] =3D { > - REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500), > + REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500), > +}; > + > +/* > + * BUCK1/3 > + * 0.65 to 2.2375V (12.5mV step) Reading this comment, it seems the same distinction needs to be done for BU= CK3 = as well, no? > + */ > +static const struct linear_range pca9450_trim_dvs_buck_volts[] =3D { > + REGULATOR_LINEAR_RANGE(650000, 0x00, 0x7F, 12500), > }; > = > /* > @@ -663,6 +671,207 @@ static const struct pca9450_regulator_desc > pca9450bc_regulators[] =3D { }, > }; > = > +static const struct pca9450_regulator_desc pca9451a_regulators[] =3D { > + { > + .desc =3D { > + .name =3D "buck1", > + .of_match =3D of_match_ptr("BUCK1"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_BUCK1, > + .ops =3D &pca9450_dvs_buck_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_BUCK1_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_dvs_buck_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_dvs_buck_volts), > + .vsel_reg =3D PCA9450_REG_BUCK1OUT_DVS0, > + .vsel_mask =3D BUCK1OUT_DVS0_MASK, > + .enable_reg =3D PCA9450_REG_BUCK1CTRL, > + .enable_mask =3D BUCK1_ENMODE_MASK, > + .enable_val =3D BUCK_ENMODE_ONREQ, > + .ramp_mask =3D BUCK1_RAMP_MASK, > + .ramp_delay_table =3D pca9450_dvs_buck_ramp_table, > + .n_ramp_values =3D = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), > + .owner =3D THIS_MODULE, > + .of_parse_cb =3D pca9450_set_dvs_levels, > + }, > + .dvs =3D { > + .run_reg =3D PCA9450_REG_BUCK1OUT_DVS0, > + .run_mask =3D BUCK1OUT_DVS0_MASK, > + .standby_reg =3D PCA9450_REG_BUCK1OUT_DVS1, > + .standby_mask =3D BUCK1OUT_DVS1_MASK, > + }, > + }, > + { > + .desc =3D { > + .name =3D "buck1_trim", > + .of_match =3D of_match_ptr("BUCK1"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_BUCK1, > + .ops =3D &pca9450_dvs_buck_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_BUCK1_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_trim_dvs_buck_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_trim_dvs_buck_volts), > + .vsel_reg =3D PCA9450_REG_BUCK1OUT_DVS0, > + .vsel_mask =3D BUCK1OUT_DVS0_MASK, > + .enable_reg =3D PCA9450_REG_BUCK1CTRL, > + .enable_mask =3D BUCK1_ENMODE_MASK, > + .enable_val =3D BUCK_ENMODE_ONREQ, > + .ramp_mask =3D BUCK1_RAMP_MASK, > + .ramp_delay_table =3D pca9450_dvs_buck_ramp_table, > + .n_ramp_values =3D = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), > + .owner =3D THIS_MODULE, > + .of_parse_cb =3D pca9450_set_dvs_levels, > + }, > + .dvs =3D { > + .run_reg =3D PCA9450_REG_BUCK1OUT_DVS0, > + .run_mask =3D BUCK1OUT_DVS0_MASK, > + .standby_reg =3D PCA9450_REG_BUCK1OUT_DVS1, > + .standby_mask =3D BUCK1OUT_DVS1_MASK, > + }, > + }, > + { > + .desc =3D { > + .name =3D "buck2", > + .of_match =3D of_match_ptr("BUCK2"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_BUCK2, > + .ops =3D &pca9450_dvs_buck_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_BUCK2_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_dvs_buck_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_dvs_buck_volts), > + .vsel_reg =3D PCA9450_REG_BUCK2OUT_DVS0, > + .vsel_mask =3D BUCK2OUT_DVS0_MASK, > + .enable_reg =3D PCA9450_REG_BUCK2CTRL, > + .enable_mask =3D BUCK2_ENMODE_MASK, > + .enable_val =3D BUCK_ENMODE_ONREQ_STBYREQ, > + .ramp_mask =3D BUCK2_RAMP_MASK, > + .ramp_delay_table =3D pca9450_dvs_buck_ramp_table, > + .n_ramp_values =3D = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), > + .owner =3D THIS_MODULE, > + .of_parse_cb =3D pca9450_set_dvs_levels, > + }, > + .dvs =3D { > + .run_reg =3D PCA9450_REG_BUCK2OUT_DVS0, > + .run_mask =3D BUCK2OUT_DVS0_MASK, > + .standby_reg =3D PCA9450_REG_BUCK2OUT_DVS1, > + .standby_mask =3D BUCK2OUT_DVS1_MASK, > + }, > + }, > + { > + .desc =3D { > + .name =3D "buck4", > + .of_match =3D of_match_ptr("BUCK4"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_BUCK4, > + .ops =3D &pca9450_buck_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_BUCK4_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_buck_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_buck_volts), > + .vsel_reg =3D PCA9450_REG_BUCK4OUT, > + .vsel_mask =3D BUCK4OUT_MASK, > + .enable_reg =3D PCA9450_REG_BUCK4CTRL, > + .enable_mask =3D BUCK4_ENMODE_MASK, > + .enable_val =3D BUCK_ENMODE_ONREQ, > + .owner =3D THIS_MODULE, > + }, > + }, > + { > + .desc =3D { > + .name =3D "buck5", > + .of_match =3D of_match_ptr("BUCK5"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_BUCK5, > + .ops =3D &pca9450_buck_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_BUCK5_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_buck_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_buck_volts), > + .vsel_reg =3D PCA9450_REG_BUCK5OUT, > + .vsel_mask =3D BUCK5OUT_MASK, > + .enable_reg =3D PCA9450_REG_BUCK5CTRL, > + .enable_mask =3D BUCK5_ENMODE_MASK, > + .enable_val =3D BUCK_ENMODE_ONREQ, > + .owner =3D THIS_MODULE, > + }, > + }, > + { > + .desc =3D { > + .name =3D "buck6", > + .of_match =3D of_match_ptr("BUCK6"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_BUCK6, > + .ops =3D &pca9450_buck_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_BUCK6_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_buck_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_buck_volts), > + .vsel_reg =3D PCA9450_REG_BUCK6OUT, > + .vsel_mask =3D BUCK6OUT_MASK, > + .enable_reg =3D PCA9450_REG_BUCK6CTRL, > + .enable_mask =3D BUCK6_ENMODE_MASK, > + .enable_val =3D BUCK_ENMODE_ONREQ, > + .owner =3D THIS_MODULE, > + }, > + }, > + { > + .desc =3D { > + .name =3D "ldo1", > + .of_match =3D of_match_ptr("LDO1"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_LDO1, > + .ops =3D &pca9450_ldo_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_LDO1_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_ldo1_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_ldo1_volts), > + .vsel_reg =3D PCA9450_REG_LDO1CTRL, > + .vsel_mask =3D LDO1OUT_MASK, > + .enable_reg =3D PCA9450_REG_LDO1CTRL, > + .enable_mask =3D LDO1_EN_MASK, > + .owner =3D THIS_MODULE, > + }, > + }, > + { > + .desc =3D { > + .name =3D "ldo4", > + .of_match =3D of_match_ptr("LDO4"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_LDO4, > + .ops =3D &pca9450_ldo_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_LDO4_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_ldo34_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_ldo34_volts), > + .vsel_reg =3D PCA9450_REG_LDO4CTRL, > + .vsel_mask =3D LDO4OUT_MASK, > + .enable_reg =3D PCA9450_REG_LDO4CTRL, > + .enable_mask =3D LDO4_EN_MASK, > + .owner =3D THIS_MODULE, > + }, > + }, > + { > + .desc =3D { > + .name =3D "ldo5", > + .of_match =3D of_match_ptr("LDO5"), > + .regulators_node =3D of_match_ptr("regulators"), > + .id =3D PCA9450_LDO5, > + .ops =3D &pca9450_ldo_regulator_ops, > + .type =3D REGULATOR_VOLTAGE, > + .n_voltages =3D PCA9450_LDO5_VOLTAGE_NUM, > + .linear_ranges =3D pca9450_ldo5_volts, > + .n_linear_ranges =3D = ARRAY_SIZE(pca9450_ldo5_volts), > + .vsel_reg =3D PCA9450_REG_LDO5CTRL_H, > + .vsel_mask =3D LDO5HOUT_MASK, > + .enable_reg =3D PCA9450_REG_LDO5CTRL_H, > + .enable_mask =3D LDO5H_EN_MASK, > + .owner =3D THIS_MODULE, > + }, > + }, > +}; > + > static irqreturn_t pca9450_irq_handler(int irq, void *data) > { > struct pca9450 *pca9450 =3D data; > @@ -708,8 +917,9 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > const struct pca9450_regulator_desc *regulator_desc; > struct regulator_config config =3D { }; > struct pca9450 *pca9450; > - unsigned int device_id, i; > + unsigned int device_id, i, val; > unsigned int reset_ctrl; > + bool pmic_trim =3D false; > int ret; > = > if (!i2c->irq) { > @@ -721,6 +931,22 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > if (!pca9450) > return -ENOMEM; > = > + pca9450->regmap =3D devm_regmap_init_i2c(i2c, > + = &pca9450_regmap_config); > + if (IS_ERR(pca9450->regmap)) { > + dev_err(&i2c->dev, "regmap initialization failed\n"); > + return PTR_ERR(pca9450->regmap); > + } > + > + ret =3D regmap_read(pca9450->regmap, PCA9450_REG_PWRCTRL, &val); > + if (ret) { > + dev_err(&i2c->dev, "Read device id error\n"); > + return ret; > + } > + > + if (val & PCA9450_REG_PWRCTRL_TOFF_DEB) > + pmic_trim =3D true; PCA9450_REG_PWRCTRL is a read/write register. How is it possible to detect = a = chip revision using a bit which can be changed by software e.g. bootloader? Despite that this bit sets debounce time for PMIC_ON_REQ, how is this relat= ed = to BUCK1 voltage range? > + > switch (type) { > case PCA9450_TYPE_PCA9450A: > regulator_desc =3D pca9450a_regulators; > @@ -730,6 +956,10 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > regulator_desc =3D pca9450bc_regulators; > pca9450->rcnt =3D ARRAY_SIZE(pca9450bc_regulators); > break; > + case PCA9450_TYPE_PCA9451A: > + regulator_desc =3D pca9451a_regulators; > + pca9450->rcnt =3D ARRAY_SIZE(pca9451a_regulators); > + break; > default: > dev_err(&i2c->dev, "Unknown device type"); > return -EINVAL; > @@ -741,13 +971,6 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > = > dev_set_drvdata(&i2c->dev, pca9450); > = > - pca9450->regmap =3D devm_regmap_init_i2c(i2c, > - = &pca9450_regmap_config); > - if (IS_ERR(pca9450->regmap)) { > - dev_err(&i2c->dev, "regmap initialization failed\n"); > - return PTR_ERR(pca9450->regmap); > - } > - > ret =3D regmap_read(pca9450->regmap, PCA9450_REG_DEV_ID, &device_id); > if (ret) { > dev_err(&i2c->dev, "Read device id error\n"); > @@ -756,7 +979,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > = > /* Check your board and dts for match the right pmic */ > if (((device_id >> 4) !=3D 0x1 && type =3D=3D PCA9450_TYPE_PCA9450A) || > - ((device_id >> 4) !=3D 0x3 && type =3D=3D PCA9450_TYPE_PCA9450BC)) { > + ((device_id >> 4) !=3D 0x3 && type =3D=3D PCA9450_TYPE_PCA9450BC) || > + ((device_id >> 4) !=3D 0x9 && type =3D=3D PCA9450_TYPE_PCA9451A)) { > dev_err(&i2c->dev, "Device id(%x) mismatched\n", > device_id >> 4); > return -EINVAL; > @@ -767,7 +991,16 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > struct regulator_dev *rdev; > const struct pca9450_regulator_desc *r; > = > - r =3D ®ulator_desc[i]; > + if (type =3D=3D PCA9450_TYPE_PCA9451A && > + !strcmp((®ulator_desc[i])->desc.name, "buck1") && = pmic_trim) { > + r =3D ®ulator_desc[i + 1]; > + i =3D i + 1; > + } else if (type =3D=3D PCA9450_TYPE_PCA9451A && > + !strcmp((®ulator_desc[i])->desc.name, = "buck1")) { > + r =3D ®ulator_desc[i]; > + i =3D i + 1; I would put this in a single 'type =3D=3D PCA9450_TYPE_PCA9451A' branch, to = indicate that only PCA9451A needs some kind of special handling. > + } else > + r =3D ®ulator_desc[i]; > desc =3D &r->desc; > = > config.regmap =3D pca9450->regmap; > @@ -847,7 +1080,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c) > } > = > dev_info(&i2c->dev, "%s probed.\n", > - type =3D=3D PCA9450_TYPE_PCA9450A ? "pca9450a" : "pca9450bc"); > + type =3D=3D PCA9450_TYPE_PCA9450A ? "pca9450a" : > + (type =3D=3D PCA9450_TYPE_PCA9451A ? "pca9451a" : = "pca9450bc")); > = > return 0; > } > @@ -865,6 +1099,10 @@ static const struct of_device_id pca9450_of_match[]= =3D > { .compatible =3D "nxp,pca9450c", > .data =3D (void *)PCA9450_TYPE_PCA9450BC, > }, > + { > + .compatible =3D "nxp,pca9451a", > + .data =3D (void *)PCA9450_TYPE_PCA9451A, > + }, > { } > }; > MODULE_DEVICE_TABLE(of, pca9450_of_match); > diff --git a/include/linux/regulator/pca9450.h > b/include/linux/regulator/pca9450.h index 3c01c2bf84f5..5dd79f52165a 1006= 44 > --- a/include/linux/regulator/pca9450.h > +++ b/include/linux/regulator/pca9450.h > @@ -9,6 +9,7 @@ > enum pca9450_chip_type { > PCA9450_TYPE_PCA9450A =3D 0, > PCA9450_TYPE_PCA9450BC, > + PCA9450_TYPE_PCA9451A, > PCA9450_TYPE_AMOUNT, > }; > = > @@ -93,6 +94,7 @@ enum { > PCA9450_MAX_REGISTER =3D 0x2F, > }; > = > +#define PCA9450_REG_PWRCTRL_TOFF_DEB BIT(5) Newline here please. Best regards, Alexander > /* PCA9450 BUCK ENMODE bits */ > #define BUCK_ENMODE_OFF 0x00 > #define BUCK_ENMODE_ONREQ 0x01 -- = TQ-Systems GmbH | M=FChlstra=DFe 2, Gut Delling | 82229 Seefeld, Germany Amtsgericht M=FCnchen, HRB 105018 Gesch=E4ftsf=FChrer: Detlef Schneider, R=FCdiger Stahl, Stefan Schneider http://www.tq-group.com/ _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel