Received: by 2002:a05:6358:e9c4:b0:b2:91dc:71ab with SMTP id hc4csp5130176rwb; Mon, 8 Aug 2022 12:44:11 -0700 (PDT) X-Google-Smtp-Source: AA6agR5So4TlSRBMLv/RuztMd9kWgVi2UdFSAQJK3cb40I62s/qWF2YtZh5phNSMY9rV4IhmbCbl X-Received: by 2002:a05:6a00:1d84:b0:52f:4a8f:7381 with SMTP id z4-20020a056a001d8400b0052f4a8f7381mr6318578pfw.52.1659987851430; Mon, 08 Aug 2022 12:44:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659987851; cv=none; d=google.com; s=arc-20160816; b=cSD1sgdxqMn70n6QuRRngMjNEmD81YXhCQnTcd9LnYBbgrejitByRG0KtiJVHFTT7/ z2Ueq/+AMPO9sXQ0LoFU25Z7IB615Dy9/DVHia8enRwFm60hGnU+gsoJtahqndCR1Vmh 4uhTHoCk40FD3H2ECwyPimxjXcgpGyQsqd28K3kadM9++P88J7HfzR8GqHVCs0D6zCKW +dXC6hl417/CIHpDWe4/PhEQn2Df6uOz+Jh1Yjj28nxZMslXINkhA2hmrFuZRBLm15k5 iTK0hjcwxj1wNH0HEP9g4fncIRvoDVR6/nTr+3AnOASbXaiLonD0R3w9XJZ6Gbxfsdev Madw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:user-agent:from:references:in-reply-to:mime-version :dkim-signature; bh=4l9i4XlbJ+5mmKTKFgWECtlXoLq4GTjM56DrApQ3zMc=; b=jGK1ZMYlrTpqZtbn+f1hnBDtM+0sf89QCKZs3dpnfbcsY35vn/AAxM4yClO5nub5jD uVfoNczybI40OhHVRium6zBmOTiNjaI7L0vwgd2KAYlu8hE2bhbXbh6coeviQ/TCrHWE fPqacTXspffbVEXZolxY6I9Hd75qal/mFWbh16540JqndpkTQJysCTG7hM4V0zSwBU+A MjEUchHXwUVRYsAomocQg7rMsRhRO4xfqcYLfCwCRKhSC1+2qWItj4MlTjASabY5oxdZ xXT1SE1jfrH1Wkjo9SYZ1VuPxMRqgObctOWwvDGy+lHbB+mnezLtDk9fwd7LkFyeGY3N gJ2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=WXnldZ6i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u13-20020a17090341cd00b0016bf0171143si13941097ple.246.2022.08.08.12.43.56; Mon, 08 Aug 2022 12:44:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=WXnldZ6i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244214AbiHHTJT (ORCPT + 99 others); Mon, 8 Aug 2022 15:09:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238225AbiHHTJS (ORCPT ); Mon, 8 Aug 2022 15:09:18 -0400 Received: from mail-oa1-x32.google.com (mail-oa1-x32.google.com [IPv6:2001:4860:4864:20::32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D11C19C1C for ; Mon, 8 Aug 2022 12:09:17 -0700 (PDT) Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-10dc1b16c12so11582396fac.6 for ; Mon, 08 Aug 2022 12:09:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:cc:to:subject:message-id:date:user-agent :from:references:in-reply-to:mime-version:from:to:cc; bh=4l9i4XlbJ+5mmKTKFgWECtlXoLq4GTjM56DrApQ3zMc=; b=WXnldZ6iOBHOrddzUwoQRxgam/JBzwyx71/OjpN+S0nPQiCYjfVHsJak5hpqrKugdI sz6jv8KOXTrlq54eF2VH5UdV7Ril0q3866QyHAGP7YLmCKcZCn4etUrQKuvkYj3xEFbR IZrXnD+WpPDpLEeukyzKmLWA37sTIZb1PT660= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:user-agent :from:references:in-reply-to:mime-version:x-gm-message-state:from:to :cc; bh=4l9i4XlbJ+5mmKTKFgWECtlXoLq4GTjM56DrApQ3zMc=; b=qzM0/QiAMF2388zAJ71F8RdFbCn1cTxBuVLqCDAYVqNWxKhuS6Xy6j/NN5PTiPVe7l UoTziLKj0UB09oI/fAe6VIKhOakJvFSfH38VMo5QIMYgfHTiqYjRCVRtuH6trzxmWlWs pE5vRHeM9F2I9X4CI5C+EejzljTiwtM7OxUg7Drcoe2k9SDffiFIz8zOXzilqDFT9s5U shaFQbMDYW3wdOtDHnS0zMSGG59wQTfuF+bFAObHvcgzvYNCZ8m3wCL33aflKgKKQQid FhpKjHmS9zTXvKTSrbfmRNryhX9YWA2DPxGx/smDo+OM0CVRzlqI5mGVSL+OFv/WNMms sWoA== X-Gm-Message-State: ACgBeo1Mv0Yda9B8yq+VJol7wMS2h44FgT2GaU7ZyYQEKcG3Ha4LVxhl CBsREaUtWoOASrHd30+w9ORPJ+rfJolyCYNRsAVInA== X-Received: by 2002:a05:6870:9a17:b0:e9:3d1:f91a with SMTP id fo23-20020a0568709a1700b000e903d1f91amr9076366oab.44.1659985756290; Mon, 08 Aug 2022 12:09:16 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Mon, 8 Aug 2022 14:09:15 -0500 MIME-Version: 1.0 In-Reply-To: References: <0481d3cc-4bb9-4969-0232-76ba57ff260d@quicinc.com> <52039cd1-4390-7abb-d296-0eb7ac0c3b15@quicinc.com> From: Stephen Boyd User-Agent: alot/0.10 Date: Mon, 8 Aug 2022 14:09:15 -0500 Message-ID: Subject: Re: [PATCH V15 6/9] mfd: pm8008: Use i2c_new_dummy_device() API To: Lee Jones , Satya Priya Kakitapalli Cc: Mark Brown , Bjorn Andersson , Rob Herring , Liam Girdwood , linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, quic_collinsd@quicinc.com, quic_subbaram@quicinc.com, quic_jprakash@quicinc.com, Lee Jones Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting Lee Jones (2022-08-05 03:51:39) > On Tue, 02 Aug 2022, Satya Priya Kakitapalli (Temp) wrote: > > > > > On 7/27/2022 6:49 AM, Stephen Boyd wrote: > > > Quoting Satya Priya Kakitapalli (Temp) (2022-07-21 23:31:16) > > > > =C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 regulato= r-name =3D "pm8008_l6"; > > > > =C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 }; > > > > > > > > =C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 pm8008_l7: ldo7@4600 { > > > > =C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 reg =3D = <0x4600>; > > > > =C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 regulato= r-name =3D "pm8008_l7"; > > > > =C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 }; > > > > =C2=A0=C2=A0 =C2=A0}; > > > > }; > > > > > > > > > > > > Stephen/Mark, Please do let me know if you are OK with this design. > > > > > > > I was happy with the previous version of the DT node. That had one no= de > > > for the "pm8008 chip", which is important because it really is one > > > package. Why isn't that possible to implement and also register i2c > > > devices on the i2c bus for the second address? > > If devices have different addresses, they should have their own nodes, no= ? There are nodes for the devices at different addresses in the design we had settled on earlier. pm8008: pmic@8 { compatible =3D "qcom,pm8008"; reg =3D <0x8>; #address-cells =3D <2>; #size-cells =3D <0>; #interrupt-cells =3D <2>; pm8008_l1: ldo1@1,4000 { compatible =3D "qcom,pm8008-regulator"; reg =3D <0x1 0x4000>; regulator-name =3D "pm8008_ldo1"; }; ... }; pmic@8 is the i2c device at i2c address 8. ldo1@1,4000 is the i2c device at address 9 (8 + 1) with control for ldo1 at register offset 0x4000. I think your concern is more about the fact that the regulator sub-nodes are platform device drivers instead of i2c device drivers. I'm not an i2c expert but from what I can tell we only describe one i2c address in DT and then do something like this to describe the other i2c addresses when one physical chip responds to multiple addresses on the i2c bus. See i2c_new_dummy_device() and i2c_new_ancillary_device() kerneldoc for slightly more background. It may need some modifications to the i2c core to make the regulator nodes into i2c devices. I suspect the qcom,pm8008 i2c driver needs to look at the 'reg' property and translate that to the parent node's reg property (8) plus the first cell (1) to determine the i2c device's final i2c address. Then the i2c core needs to register i2c devices that are bound to the lifetime of the "primary" i2c device (pmic@8). The driver for the regulator can parse the second cell of the reg property to determine the register offset within that i2c address to use to control the regulator. That would make it possible to create an i2c device for each regulator node, but I don't think that is correct because the second reg property isn't an i2c address, it's a register offset inside the i2c address. It sort of looks like we need to use i2c_new_ancillary_device() here. IF we did that the DT would look like this: pm8008: pmic@8 { compatible =3D "qcom,pm8008"; reg =3D <0x8>, <0x9>; reg-names =3D "core", "regulators"; #address-cells =3D <2>; #size-cells =3D <0>; #interrupt-cells =3D <2>; pm8008_l1: ldo1@1,4000 { compatible =3D "qcom,pm8008-regulator"; reg =3D <0x1 0x4000>; regulator-name =3D "pm8008_ldo1"; }; ... }; And a dummy i2c device would be created for i2c address 0x9 bound to the dummy i2c driver when we called i2c_new_ancillary_device() with "regulators" for the name. The binding of the dummy driver is preventing us from binding another i2c driver to the i2c address. Why can't we call i2c_new_client_device() but avoid binding a dummy driver to it like i2c_new_ancillary_device() does? If that can be done, then the single i2c device at 0x9 can be a pm8008-regulators (plural) device that probes a single i2c driver that parses the subnodes looking for regulator nodes. Note: There is really one i2c device at address 0x9, that corresponds to the regulators, but in DT we need to have one node per regulator so we can configure constraints.