mbox series

[v3,0/5] Add the cat24c208 EDID EEPROM driver + new EDID capability

Message ID 20220928112147.358745-1-hljunggr@cisco.com
Headers show
Series Add the cat24c208 EDID EEPROM driver + new EDID capability | expand

Message

Erling Ljunggren Sept. 28, 2022, 11:21 a.m. UTC
This series adds support for the standalone cat24c208 EDID EEPROM i2c device.
Usually EDID support is part of an HDMI receiver, but this is a standalone EEPROM.

Note that EEPROMs for EDIDs are not regular EEPROM devices, these are dual port
devices that follow the VESA E-DDC standard.

Since this is a standalone device that does not capture any video a new
V4L2_CAP_EDID capability is introduced to represent such devices.
Note that such a device doesn't have to be an EEPROM, it can also be
implemented using a microcontroller, for example.

v3:
 - use old V4L2_CAP_ASYNCIO (0x02000000) capability bit
 - validate physical address of edid in driver
 - handle empty edid in driver
 - add cec notifier support to driver
 - update driver and bindings with hpd gpio support
 - removed references to "memory" in capability and docs
 - associate ioctls based on device direction

v2:
 - fix dt binding example
 - rename i2c client variables in data struct
 - fix include: of_device.h -> mod_devicetable.h
 - Sorted makefile
 - used define EDID_OFFSET_EXT_FLAG instead of magic number
 - removed of_match_ptr
 - added bus_info
 - remove unneeded headers
 - add depends on OF to Kconfig


Erling Ljunggren (4):
  media: videodev2.h: add V4L2_CAP_EDID
  media: docs: Add V4L2_CAP_EDID
  dt-bindings: media: add cat24c208 bindings
  media: v4l2-dev: handle V4L2_CAP_EDID

Jonathan Selnes (1):
  media: i2c: cat24c208: driver for the cat24c208 EDID EEPROM

 .../bindings/media/i2c/onnn,cat24c208.yaml    |  48 ++
 .../userspace-api/media/v4l/biblio.rst        |  11 +
 .../media/v4l/vidioc-querycap.rst             |  11 +
 .../media/videodev2.h.rst.exceptions          |   1 +
 MAINTAINERS                                   |   7 +
 drivers/media/i2c/Kconfig                     |   9 +
 drivers/media/i2c/Makefile                    |   1 +
 drivers/media/i2c/cat24c208.c                 | 480 ++++++++++++++++++
 drivers/media/v4l2-core/v4l2-dev.c            |  15 +
 include/uapi/linux/videodev2.h                |   1 +
 10 files changed, 584 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
 create mode 100644 drivers/media/i2c/cat24c208.c

Comments

Rob Herring Sept. 28, 2022, 10:37 p.m. UTC | #1
On Wed, 28 Sep 2022 13:21:45 +0200, Erling Ljunggren wrote:
> Add devicetree bindings for new cat24c208 EDID EEPROM driver.
> 
> Signed-off-by: Erling Ljunggren <hljunggr@cisco.com>
> ---
>  .../bindings/media/i2c/onnn,cat24c208.yaml    | 48 +++++++++++++++++++
>  1 file changed, 48 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
Error: Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.example.dts:25.39-40 syntax error
FATAL ERROR: Unable to parse input tree
make[1]: *** [scripts/Makefile.lib:384: Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.example.dtb] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1420: dt_binding_check] Error 2

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit.
Rob Herring Sept. 29, 2022, 1:26 p.m. UTC | #2
On Wed, Sep 28, 2022 at 01:21:45PM +0200, Erling Ljunggren wrote:
> Add devicetree bindings for new cat24c208 EDID EEPROM driver.
> 
> Signed-off-by: Erling Ljunggren <hljunggr@cisco.com>
> ---
>  .../bindings/media/i2c/onnn,cat24c208.yaml    | 48 +++++++++++++++++++
>  1 file changed, 48 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> 
> diff --git a/Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml b/Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> new file mode 100644
> index 000000000000..fcfaccb5e39f
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> @@ -0,0 +1,48 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/media/i2c/onnn,cat24c208.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: ON Semiconductor CAT24C208 EDID EEPROM driver
> +
> +maintainers:
> +  - Hans Verkuil <hverkuil-cisco@xs4all.nl>
> +
> +description: |
> +  CAT24C208 is a dual port i2c EEPROM designed for EDID storage.
> +
> +
> +properties:
> +  compatible:
> +    const: onnn,cat24c208
> +
> +  reg:
> +    maxItems: 1
> +
> +  hpd-gpios:
> +    maxItems: 1
> +    description:
> +      References to the GPIO that controls the HDMI hot-plug detection pin.
> +      The active flag indicates the GPIO level that enables hot-plug detection.

This node is supposed to represent a device, cat24c208, but that device 
I'm guessing knows nothing about HPD. That's a property of the connector 
and belongs in a connector node much like we have for the other side of 
display connections. It may seem like overkill, but it frequently 
evolves such that not having a connector node becomes a problem. See 
'hdmi-connector' binding for example.

Rob
Erling Ljunggren Oct. 4, 2022, 8:02 a.m. UTC | #3
On Thu, 2022-09-29 at 08:26 -0500, Rob Herring wrote:
> On Wed, Sep 28, 2022 at 01:21:45PM +0200, Erling Ljunggren wrote:
> > Add devicetree bindings for new cat24c208 EDID EEPROM driver.
> > 
> > Signed-off-by: Erling Ljunggren <hljunggr@cisco.com>
> > ---
> >  .../bindings/media/i2c/onnn,cat24c208.yaml    | 48
> > +++++++++++++++++++
> >  1 file changed, 48 insertions(+)
> >  create mode 100644
> > Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> > 
> > diff --git
> > a/Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> > b/Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> > new file mode 100644
> > index 000000000000..fcfaccb5e39f
> > --- /dev/null
> > +++
> > b/Documentation/devicetree/bindings/media/i2c/onnn,cat24c208.yaml
> > @@ -0,0 +1,48 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/media/i2c/onnn,cat24c208.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: ON Semiconductor CAT24C208 EDID EEPROM driver
> > +
> > +maintainers:
> > +  - Hans Verkuil <hverkuil-cisco@xs4all.nl>
> > +
> > +description: |
> > +  CAT24C208 is a dual port i2c EEPROM designed for EDID storage.
> > +
> > +
> > +properties:
> > +  compatible:
> > +    const: onnn,cat24c208
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  hpd-gpios:
> > +    maxItems: 1
> > +    description:
> > +      References to the GPIO that controls the HDMI hot-plug
> > detection pin.
> > +      The active flag indicates the GPIO level that enables hot-
> > plug detection.
> 
> This node is supposed to represent a device, cat24c208, but that
> device 
> I'm guessing knows nothing about HPD. That's a property of the
> connector 
> and belongs in a connector node much like we have for the other side
> of 
> display connections. It may seem like overkill, but it frequently 
> evolves such that not having a connector node becomes a problem. See 
> 'hdmi-connector' binding for example.
> 
> Rob

Is this what you had in mind?

cat24c208: cat24c208@31 {
	compatible = "onnn,cat24c208";
	reg = <0x31>;
	status = "okay";
	connector-phandle = <&hdmi_in_node>;
};

hdmi_in_node: hdmi-in {
	compatible = "hdmi-connector";
	label = "HDMI IN";
	type = "a";
	hpd-gpios = <&pca9554 4 GPIO_ACTIVE_HIGH>;
	port {
		hdmi_in: endpoint {
			remote-endpoint = <&hdmi_out>;
		};
	};
};

- Erling