From: Johan Hovold <johan+linaro@kernel.org>
To: Lee Jones <lee@kernel.org>, Mark Brown <broonie@kernel.org>,
Bjorn Andersson <andersson@kernel.org>
Cc: Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
Liam Girdwood <lgirdwood@gmail.com>,
Das Srinagesh <quic_gurus@quicinc.com>,
Satya Priya Kakitapalli <quic_skakitap@quicinc.com>,
Linus Walleij <linus.walleij@linaro.org>,
Stephen Boyd <swboyd@chromium.org>,
Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Andy Shevchenko <andy.shevchenko@gmail.com>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Johan Hovold <johan+linaro@kernel.org>
Subject: [PATCH v3 00/12] arm64: dts: qcom: sc8280xp-x13s: enable pm8008 camera pmic
Date: Sat, 8 Jun 2024 17:55:14 +0200 [thread overview]
Message-ID: <20240608155526.12996-1-johan+linaro@kernel.org> (raw)
The Qualcomm PM8008 PMIC is a so called QPNP PMIC with seven LDO
regulators, a temperature alarm block and two GPIO pins (which are also
used for interrupt signalling and reset).
Unlike previous QPNP PMICs it uses an I2C rather than SPMI interface,
which has implications for how interrupts are handled.
A previous attempt by Qualcomm to upstream support for PM8008 stalled
two years ago at version 15 after a lot of back and forth discussion on
how best to describe this device in the devicetree. [1]
After reviewing the backstory on this and surveying the current SPMI
PMIC bindings and implementation, I opted for a new approach that does
not describe internal details like register offsets and interrupts in
the devicetree.
The original decision to include registers offsets and internal
interrupts for SPMI PMICs has led to a number of PMIC dtsi being created
to avoid copying lots of boiler plate declarations. This in turn causes
trouble when the PMIC USID address is configurable as the address is
included in every interrupt specifier.
The current SPMI bindings still do not describe the devices fully and
additional data is therefore already provided by drivers (e.g.
additional register blocks, supplies, additional interrupt specifiers).
The fact that PMICs which use two USIDs (addresses) are modelled as two
separate devices causes trouble, for example, when there are
dependencies between subfunctions. [2]
Subfunctions also do not necessarily map neatly onto the 256-register
block partitioning of the SPMI register space, something which has lead
to unresolved inconsistencies in how functions like PWM are described.
[3]
In short, it's a bit of a mess.
With the new style of bindings, by contrast, only essential information
that actually differs between machines would be included in the
devicetree. The bindings would also be mostly decoupled from the
implementation, which has started to leak out into the binding (e.g. how
the QPNP interrupts are handled). This also allows for extending the
implementation without having to update the binding, which is especially
important as Qualcomm does not publish any documentation (e.g. to later
enable regulator over-current protection).
Some PMICs support both I2C and SPMI interfaces (e.g. PM8010) and we
want to be able to reuse the same bindings regardless of the interface.
As a proof concept I have written a new pmc8280 driver for one of the
SPMI PMICs in the Lenovo ThinkPad X13s that uses the new style of
bindings and I've been using that one to control backlight and
peripheral regulators for a while now. Specifically, the gpio and
temperature-alarm blocks can be used with some minor updates to the
current drivers.
That work still needs a bit of polish before posting, but my working PoC
means that I'm confident enough that the new model will work and that we
can go ahead and merge regulator support for the PM8008.
This series is specifically needed for the camera sensors in the X13s,
for which camera subsystem (camss) support has now been merged for 6.10.
The first seven patches are preparatory and can possibly be merged
separately from the rest of the series. The next two patches drop the
broken GPIO support for PM8008 which had already been upstreamed
(dropped in v3). The last five patches rework the binding and MFD
driver, add support for the regulators and enable the camera PMIC on the
X13s.
Johan
[1] https://lore.kernel.org/all/1655200111-18357-1-git-send-email-quic_c_skakit@quicinc.com
[2] https://lore.kernel.org/lkml/20231003152927.15000-3-johan+linaro@kernel.org
[3] https://lore.kernel.org/r/20220828132648.3624126-3-bryan.odonoghue@linaro.org
Changes in v3
- capitalise MFD commit summaries
- drop pinctrl patches which have been applied for 6.10
- amend binding commit message to clarify that the binding is unused
- move pinctrl subschema under pinctrl node in binding
Changes in v2
- use IRQ_TYPE_SENSE_MASK in regmap_irq table
- add post-reset delay
- reorder pinctrl binding and driver update
- split out binding cleanups
- use platform_device_id matching
- replace underscore in supply names with dash
- use more fine-grained includes in regulator driver
- rework regulator driver and update authorship
Johan Hovold (12):
dt-bindings: mfd: pm8008: Add reset gpio
mfd: pm8008: Fix regmap irq chip initialisation
mfd: pm8008: Deassert reset on probe
mfd: pm8008: Mark regmap structures as const
mfd: pm8008: Use lower case hex notation
mfd: pm8008: Rename irq chip
mfd: pm8008: Drop unused driver data
dt-bindings: mfd: pm8008: Drop redundant descriptions
dt-bindings: mfd: pm8008: Rework binding
mfd: pm8008: Rework to match new DT binding
regulator: add pm8008 pmic regulator driver
arm64: dts: qcom: sc8280xp-x13s: enable pm8008 camera pmic
.../devicetree/bindings/mfd/qcom,pm8008.yaml | 144 +++++++------
.../qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 123 +++++++++++
drivers/mfd/Kconfig | 1 +
drivers/mfd/qcom-pm8008.c | 169 ++++++++++-----
drivers/regulator/Kconfig | 7 +
drivers/regulator/Makefile | 1 +
drivers/regulator/qcom-pm8008-regulator.c | 198 ++++++++++++++++++
include/dt-bindings/mfd/qcom-pm8008.h | 19 --
8 files changed, 532 insertions(+), 130 deletions(-)
create mode 100644 drivers/regulator/qcom-pm8008-regulator.c
delete mode 100644 include/dt-bindings/mfd/qcom-pm8008.h
--
2.44.1
next reply other threads:[~2024-06-08 15:57 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-08 15:55 Johan Hovold [this message]
2024-06-08 15:55 ` [PATCH v3 01/12] dt-bindings: mfd: pm8008: Add reset gpio Johan Hovold
2024-06-08 15:55 ` [PATCH v3 02/12] mfd: pm8008: Fix regmap irq chip initialisation Johan Hovold
2024-06-08 15:55 ` [PATCH v3 03/12] mfd: pm8008: Deassert reset on probe Johan Hovold
2024-06-08 15:55 ` [PATCH v3 04/12] mfd: pm8008: Mark regmap structures as const Johan Hovold
2024-06-08 15:55 ` [PATCH v3 05/12] mfd: pm8008: Use lower case hex notation Johan Hovold
2024-06-08 15:55 ` [PATCH v3 06/12] mfd: pm8008: Rename irq chip Johan Hovold
2024-06-08 15:55 ` [PATCH v3 07/12] mfd: pm8008: Drop unused driver data Johan Hovold
2024-06-08 15:55 ` [PATCH v3 08/12] dt-bindings: mfd: pm8008: Drop redundant descriptions Johan Hovold
2024-06-08 15:55 ` [PATCH v3 09/12] dt-bindings: mfd: pm8008: Rework binding Johan Hovold
2024-06-13 16:34 ` Rob Herring (Arm)
2024-06-08 15:55 ` [PATCH v3 10/12] mfd: pm8008: Rework to match new DT binding Johan Hovold
2024-06-08 15:55 ` [PATCH v3 11/12] regulator: add pm8008 pmic regulator driver Johan Hovold
2024-06-10 14:25 ` Mark Brown
2024-06-08 15:55 ` [PATCH v3 12/12] arm64: dts: qcom: sc8280xp-x13s: enable pm8008 camera pmic Johan Hovold
2024-06-18 11:58 ` Konrad Dybcio
2024-06-13 17:44 ` [PATCH v3 00/12] " Lee Jones
2024-06-14 7:33 ` [GIT PULL] Immutable branch between MFD and Regulator due for the v6.10 merge window Lee Jones
2024-06-14 7:37 ` Lee Jones
2024-06-14 7:39 ` [GIT v2 PULL] Immutable branch between MFD and Regulator due for the v6.11 " Lee Jones
2024-06-14 9:03 ` (subset) [PATCH v3 00/12] arm64: dts: qcom: sc8280xp-x13s: enable pm8008 camera pmic Lee Jones
2024-06-21 6:11 ` Bjorn Andersson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240608155526.12996-1-johan+linaro@kernel.org \
--to=johan+linaro@kernel.org \
--cc=andersson@kernel.org \
--cc=andy.shevchenko@gmail.com \
--cc=broonie@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=quic_gurus@quicinc.com \
--cc=quic_skakitap@quicinc.com \
--cc=robh@kernel.org \
--cc=swboyd@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).