From: Richard Leitner <richard.leitner@linux.dev>
To: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Alexander Stein <alexander.stein@ew.tq-group.com>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-media@vger.kernel.org
Subject: Re: [PATCH 2/3] dt-bindings: media: i2c: Add vision-components,mipi-module-controller
Date: Thu, 17 Sep 2026 09:55:45 +0200 [thread overview]
Message-ID: <aquan_6JiKkEw-Kp@bombadil> (raw)
In-Reply-To: <f20daf57-88cf-44e1-a2af-8769d3500176@kernel.org>
On Thu, Sep 17, 2026 at 08:18:23AM +0200, Krzysztof Kozlowski wrote:
> On 16/09/2026 18:52, Laurent Pinchart wrote:
> > On Wed, Sep 16, 2026 at 03:41:16PM +0200, Krzysztof Kozlowski wrote:
> >> On 16/09/2026 11:01, Richard Leitner wrote:
> >>> On Wed, Sep 16, 2026 at 10:35:22AM +0200, Krzysztof Kozlowski wrote:
> >>>> On 16/09/2026 09:33, Richard Leitner wrote:
> >>>>> On Wed, Sep 16, 2026 at 09:00:46AM +0200, Krzysztof Kozlowski wrote:
> >>>>>> On Tue, Sep 15, 2026 at 10:20:24PM +0200, Richard Leitner wrote:
[...]
> >>>>>>> Add bindings for the Vision Components MIPI Camera Module Controller.
> >>>>>>> +
> >>>>>>> + vcc-supply:
> >>>>>>> + description: Power supply of the module (3.3V)
> >>>>>>> +
> >>>>>>> + '#address-cells':
> >>>>>>> + const: 1
> >>>>>>> +
> >>>>>>> + '#size-cells':
> >>>>>>> + const: 0
> >>>>>>
> >>>>>> No children allowed, so why these two?
> >>>>>
> >>>>> Based on your and the bot feedback I would suggest for v2 to change this
> >>>>> "generic i2c bus" to a simple "i2c-tunnel" property which has
> >>>>> "$ref: /schemas/i2c/i2c-controller.yaml".
> >>>>>
> >>>>> This would better reflect the actual hardware, as there is only this one,
> >>>>> in firmware hard-coded I2C downstream bus.
> >>>>>
> >>>>> Would this be a sane approach?
> >>>>
> >>>> If the underlying I2C bus and sensor are important, then yes. But I have
> >>>> doubts that you need to describe the sensor if it is truly
> >>>> unadressable/invisible to the OS.
> >
> > To be clear, the sensor *is* addressable from the OS. The FPGA sits in
> > the middle on the I2C bus instead of being a separate I2C device on the
> > same bus as the sensor, but it forwards all I2C writes addressed to the
> > sensor onto the backend I2C bus. This is why the DT binding is modelled
> > with a child I2C bus. The sensor DT node is located on that node, and
> > uses the regular DT bindings for the sensor.
>
> Thanks, this should be explained in the description of the binding. It
> does mention "the sensor device reachable through the tunnel" but the
> rest about optionality of the sensor feels confusing in this case.
Thanks Laurent for the additional clarification!
I will adapt the description accordingly for v2.
>
> >
> >>> Yes, the I2C bus and sensor is important. The device driver of the sensor
> >>> talks (via the tunneled I2C interface) directly to the sensor.
> >>>
> >>> The separate I2C controller/bus description is necessary as the tunneled
> >>> I2C bus has some quirks unfortunately. Those need to be addressed as
> >>> otherwise the sensor drivers do not work.
> >>>
> >>> So the idea is to not have a vc-mipi module binding per "sensor variant"
> >>> of the camera modules, but provide a common controller driver which
> >>> provides the I2C bus for the sensor driver.
> >>
> >> Bindings must accurately describe the device and so far - based on the
> >> website - there is no device as mipi-module-controller alone.
> >>
> >> I don't get why you assume that all of the variants are exactly
> >> identical, thus sensor variant is not applicable.
> >>
> >> If they are identical in all aspects, then why clock-frequency property?
> >> That's obviously rhetorical question, because they are not identical in
> >> all aspects and must produce different clock at least.
> >
> > The FPGA has an input clock whose frequency depends on the module. It
>
> There is no "clocks" property in the binding. If there is input, then
> there is a "clocks".
>
> Then we never describe external oscillators with "clock-frequency"
> property. ACPI does, but not DT.
So how would that be best solved in DT?
Should there be a "fixed-clock" child node for that external oscillator?
Something like:
vc_mipi_ctrl: controller@10 {
...
vc_mipi_clk: clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <37125000>;
};
i2c-tunnel {
...
vc_mipi_sensor: camera@60 {
...
clocks = <&vc_mipi_clk>;
clock-names = "inck";
};
};
Or should (as discussed in the other branch of this thread) there be a
separate compatible for every vc-mipi sensor variant board? Then this
could also be part of the compatible-dependent driver data.
Or are there any other/better approaches to this?
>
>
> > uses it for internal purpose, and also to provide a clock to the sensor.
> > Very roughly speaking, and ignoring power supplies as we focus on the
> > clocks, the camera module is architectured this way:
> >
> > Connector
> > || +--------+
> > || <------------ MIPI CSI-2 ------------ | |
> > || +-------+ | |
> > || <--- I2C ---> | | <--- I2C ---> | Sensor |
> > || | FPGA | | |
> > || | | --- Clock --> | |
> > || +-------+ +--------+
> > ^
> > |
> > +-------+
> > | Clock |
> > | Osc. |
> > +-------+
> >
> > The frequency of the external clock oscillator is what the
> > clock-frequency models.
> >
> >>>>>>> +
> >>>>>>> +required:
> >>>>>>> + - compatible
> >>>>>>> + - reg
> >>>>>>> + - '#clock-cells'
> >>>>>>> + - clock-frequency
> >>>>>>> + - vcc-supply
> >>>>>>> + - '#address-cells'
> >>>>>>> + - '#size-cells'
> >>>>>>> +
> >>>>>>> +unevaluatedProperties: false
> >>>>>>
> >>>>>> additionalProperties instead, see writing bindings or writing schema.
> >>>>>> Unless you miss here some other schema $ref.
> >>>>>>
> >>>>>>> +
> >>>>>>> +examples:
> >>>>>>> + - |
> >>>>>>> + i2c {
> >>>>>>> + #address-cells = <1>;
> >>>>>>> + #size-cells = <0>;
> >>>>>>> +
> >>>>>>> + vc_mipi_ctrl: controller@10 {
> >>>>>>> + compatible = "vision-components,mipi-module-controller";
> >>>>>>> + reg = <0x10>;
> >>>>>>> + #clock-cells = <0>;
> >>>>>>> + clock-frequency = <37125000>;
> >>>>>>> + vcc-supply = <&cam_3v3>;
> >>>>>>> +
> >>>>>>> + #address-cells = <1>;
> >>>>>>> + #size-cells = <0>;
> >>>>>>> +
> >>>>>>> + i2c@0 {
> >>>>>>> + #address-cells = <1>;
> >>>>>>> + #size-cells = <0>;
> >>>>>>> +
> >>>>>>> + vc_mipi_sensor: camera@60 {
> >>>>>>> + compatible = "ovti,ov9281";
> >>>>>>> + reg = <0x60>;
> >>>>>>
> >>>>>> Why having the child abstraction if it is completely abstracted? I don't
> >>>>>> fully get the explanation from description. Completely optional means no
> >>>>>> benefits, no point in it, no?
> >>>>>
> >>>>> I will try to improve the description. The idea behind this device
> >>>>> driver/devicetree node is to not rely on the sensor abstraction from
> >>>>> vision components, but to use the upstream sensor specific driver.
> >>>>
> >>>> You can use driver even without these nodes... but fine, let's assume
> >>>> you have them, so driver will talk with OV9281 sensor for example?
> >>>
> >>> The vc-mipi driver does not talk to sensor at all. This is done by the
> >>> dedicated sensor driver. The vc-mipi driver is only controlling the
> >>> regulator, clock, etc. as described and sets up the "quirk aware"
> >>> tunneled i2c interface.
> >>
> >> I meant, driver for the sensor. So who controls sensor supplies? Not the
> >> sensor driver? It tells something how the hardware is managed, no?
> >
> > Power supplies are managed in a similar way as the clock in the above
> > diagram. There's one input supply to the camera module on the connector.
> > Individual supplies for the sensor are generated from that main supply,
> > and are controlled by the FPGA which exposes a register over I2C to
> > enable/disable the supplies from the host (there's a single bit to
> > enable/disable them all, they can't be controlled individually).
> >
>
> Thanks, I see this also shown in the example DTS. I think the sensor
> node is redundant here, but removing it would require moving all of this
> to swnodes, so not that much better either. It's fine to keep the sensor
> subnode for me.
ACK.
Thanks Krzysztof!
regards;rl
>
> Best regards,
> Krzysztof
next prev parent reply other threads:[~2026-09-17 7:56 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 20:20 [PATCH 0/3] Add Vision Components MIPI Camera Module support Richard Leitner
2026-09-15 20:20 ` [PATCH 1/3] dt-bindings: vendor-prefixes: add Vision Components GmbH Richard Leitner
2026-09-15 20:20 ` [PATCH 2/3] dt-bindings: media: i2c: Add vision-components,mipi-module-controller Richard Leitner
2026-09-15 21:57 ` Rob Herring (Arm)
2026-09-16 7:00 ` Krzysztof Kozlowski
2026-09-16 7:33 ` Richard Leitner
2026-09-16 7:45 ` Laurent Pinchart
2026-09-16 8:30 ` Krzysztof Kozlowski
2026-09-16 8:35 ` Krzysztof Kozlowski
2026-09-16 9:01 ` Richard Leitner
2026-09-16 13:41 ` Krzysztof Kozlowski
2026-09-16 14:57 ` Richard Leitner
2026-09-17 6:30 ` Krzysztof Kozlowski
2026-09-17 8:46 ` Laurent Pinchart
2026-09-16 16:52 ` Laurent Pinchart
2026-09-17 6:18 ` Krzysztof Kozlowski
2026-09-17 7:55 ` Richard Leitner [this message]
2026-09-17 8:08 ` Krzysztof Kozlowski
2026-09-17 8:19 ` Laurent Pinchart
2026-09-17 8:28 ` Krzysztof Kozlowski
2026-09-17 8:17 ` Laurent Pinchart
2026-09-15 20:20 ` [PATCH 3/3] media: i2c: vc-mipi: add Vision Components MIPI Module Controller Richard Leitner
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=aquan_6JiKkEw-Kp@bombadil \
--to=richard.leitner@linux.dev \
--cc=alexander.stein@ew.tq-group.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=robh@kernel.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
all inboxes | Powered by JetHome®