Re: [PATCH v2 1/6] drm: Add SCDC helpers
Hi Shashank, On 07-02-2017 16:09, Sharma, Shashank wrote: > Thanks for the review Jose, my comments inline. > > > Regards > > Shashank > > > On 2/7/2017 4:24 PM, Jose Abreu wrote: >> Hi Shashank, >> >> >> Sorry for the late review. >> >> >> On 06-02-2017 13:59, Shashank Sharma wrote: >>> From: Thierry Reding >>> >>> SCDC is a mechanism defined in the HDMI 2.0 specification >>> that allows >>> the source and sink devices to communicate. >>> >>> This commit introduces helpers to access the SCDC and >>> provides the >>> symbolic names for the various registers defined in the >>> specification. >>> >>> Signed-off-by: Thierry Reding >>> Signed-off-by: Shashank Sharma >>> --- >>> Documentation/gpu/drm-kms-helpers.rst | 12 >>> drivers/gpu/drm/Makefile | 3 +- >>> drivers/gpu/drm/drm_scdc_helper.c | 111 >>> >>> include/drm/drm_scdc_helper.h | 132 >>> ++ >>> 4 files changed, 257 insertions(+), 1 deletion(-) >>> create mode 100644 drivers/gpu/drm/drm_scdc_helper.c >>> create mode 100644 include/drm/drm_scdc_helper.h >>> >>> diff --git a/Documentation/gpu/drm-kms-helpers.rst >>> b/Documentation/gpu/drm-kms-helpers.rst >>> index 03040aa..7592756 100644 >>> --- a/Documentation/gpu/drm-kms-helpers.rst >>> +++ b/Documentation/gpu/drm-kms-helpers.rst >>> @@ -217,6 +217,18 @@ EDID Helper Functions Reference >>> .. kernel-doc:: drivers/gpu/drm/drm_edid.c >>> :export: >>> +SCDC Helper Functions Reference >>> +=== >>> + >>> +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c >>> + :doc: scdc helpers >>> + >>> +.. kernel-doc:: include/drm/drm_scdc_helper.h >>> + :internal: >>> + >>> +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c >>> + :export: >>> + >>> Rectangle Utilities Reference >>> = >>> diff --git a/drivers/gpu/drm/Makefile >>> b/drivers/gpu/drm/Makefile >>> index 92de399..ad91cd9 100644 >>> --- a/drivers/gpu/drm/Makefile >>> +++ b/drivers/gpu/drm/Makefile >>> @@ -31,7 +31,8 @@ drm-$(CONFIG_DEBUG_FS) += drm_debugfs.o >>> drm_debugfs_crc.o >>> drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o >>> drm_probe_helper.o \ >>> drm_plane_helper.o drm_dp_mst_topology.o >>> drm_atomic_helper.o \ >>> drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ >>> -drm_simple_kms_helper.o drm_modeset_helper.o >>> +drm_simple_kms_helper.o drm_modeset_helper.o \ >>> +drm_scdc_helper.o >>> drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += >>> drm_edid_load.o >>> drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += >>> drm_fb_helper.o >>> diff --git a/drivers/gpu/drm/drm_scdc_helper.c >>> b/drivers/gpu/drm/drm_scdc_helper.c >>> new file mode 100644 >>> index 000..fe0e121 >>> --- /dev/null >>> +++ b/drivers/gpu/drm/drm_scdc_helper.c >>> @@ -0,0 +1,111 @@ >>> +/* >>> + * Copyright (c) 2015 NVIDIA Corporation. All rights reserved. >>> + * >>> + * Permission is hereby granted, free of charge, to any >>> person obtaining a >>> + * copy of this software and associated documentation files >>> (the "Software"), >>> + * to deal in the Software without restriction, including >>> without limitation >>> + * the rights to use, copy, modify, merge, publish, >>> distribute, sub license, >>> + * and/or sell copies of the Software, and to permit persons >>> to whom the >>> + * Software is furnished to do so, subject to the following >>> conditions: >>> + * >>> + * The above copyright notice and this permission notice >>> (including the >>> + * next paragraph) shall be included in all copies or >>> substantial portions >>> + * of the Software. >>> + * >>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY >>> KIND, EXPRESS OR >>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >>> MERCHANTABILITY, >>> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN >>> NO EVENT SHALL >>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, >>> DAMAGES OR OTHER >>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR >>> OTHERWISE, ARISING >>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE >>> USE OR OTHER >>> + * DEALINGS IN THE SOFTWARE. >>> + */ >>> + >>> +#include >>> + >>> +#include >>> + >>> +/** >>> + * DOC: scdc helpers >>> + * >>> + * Status and Control Data Channel (SCDC) is a mechanism >>> introduced by the >>> + * HDMI 2.0 specification. It is a point-to-point protocol >>> that allows the >>> + * HDMI source and HDMI sink to exchange data. The same I2C >>> interface that >>> + * is used to access EDID serves as the transport mechanism >>> for SCDC. >>> + */ >>> + >>> +#define SCDC_I2C_SLAVE_ADDRESS 0x54 >>> + >>> +/** >>> + * drm_scdc_read - read a block of data from SCDC >>> + * @adapter: I2C controller >>> + * @offset: start offset of block to read >>> + * @buffer: return location for the block to read >>> + * @size: size of the block to read >>> + * >>> + *
Re: [PATCH v2 1/6] drm: Add SCDC helpers
Hi Shashank, On 08-02-2017 12:59, Sharma, Shashank wrote: > Regards > > Shashank > > > On 2/8/2017 4:57 PM, Jose Abreu wrote: >> Hi Shashank, >> >> >> >> On 07-02-2017 16:09, Sharma, Shashank wrote: >>> Thanks for the review Jose, my comments inline. >>> >>> >>> Regards >>> >>> Shashank >>> >>> >>> On 2/7/2017 4:24 PM, Jose Abreu wrote: Hi Shashank, Sorry for the late review. On 06-02-2017 13:59, Shashank Sharma wrote: > From: Thierry Reding > > SCDC is a mechanism defined in the HDMI 2.0 specification > that allows > the source and sink devices to communicate. > > This commit introduces helpers to access the SCDC and > provides the > symbolic names for the various registers defined in the > specification. > > Signed-off-by: Thierry Reding > Signed-off-by: Shashank Sharma > --- >Documentation/gpu/drm-kms-helpers.rst | 12 >drivers/gpu/drm/Makefile | 3 +- >drivers/gpu/drm/drm_scdc_helper.c | 111 > >include/drm/drm_scdc_helper.h | 132 > ++ >4 files changed, 257 insertions(+), 1 deletion(-) >create mode 100644 drivers/gpu/drm/drm_scdc_helper.c >create mode 100644 include/drm/drm_scdc_helper.h > > diff --git a/Documentation/gpu/drm-kms-helpers.rst > b/Documentation/gpu/drm-kms-helpers.rst > index 03040aa..7592756 100644 > --- a/Documentation/gpu/drm-kms-helpers.rst > +++ b/Documentation/gpu/drm-kms-helpers.rst > @@ -217,6 +217,18 @@ EDID Helper Functions Reference >.. kernel-doc:: drivers/gpu/drm/drm_edid.c > :export: >+SCDC Helper Functions Reference > +=== > + > +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c > + :doc: scdc helpers > + > +.. kernel-doc:: include/drm/drm_scdc_helper.h > + :internal: > + > +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c > + :export: > + >Rectangle Utilities Reference >= >diff --git a/drivers/gpu/drm/Makefile > b/drivers/gpu/drm/Makefile > index 92de399..ad91cd9 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -31,7 +31,8 @@ drm-$(CONFIG_DEBUG_FS) += drm_debugfs.o > drm_debugfs_crc.o >drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o > drm_probe_helper.o \ >drm_plane_helper.o drm_dp_mst_topology.o > drm_atomic_helper.o \ >drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ > -drm_simple_kms_helper.o drm_modeset_helper.o > +drm_simple_kms_helper.o drm_modeset_helper.o \ > +drm_scdc_helper.o > drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += > drm_edid_load.o >drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += > drm_fb_helper.o > diff --git a/drivers/gpu/drm/drm_scdc_helper.c > b/drivers/gpu/drm/drm_scdc_helper.c > new file mode 100644 > index 000..fe0e121 > --- /dev/null > +++ b/drivers/gpu/drm/drm_scdc_helper.c > @@ -0,0 +1,111 @@ > +/* > + * Copyright (c) 2015 NVIDIA Corporation. All rights > reserved. > + * > + * Permission is hereby granted, free of charge, to any > person obtaining a > + * copy of this software and associated documentation files > (the "Software"), > + * to deal in the Software without restriction, including > without limitation > + * the rights to use, copy, modify, merge, publish, > distribute, sub license, > + * and/or sell copies of the Software, and to permit persons > to whom the > + * Software is furnished to do so, subject to the following > conditions: > + * > + * The above copyright notice and this permission notice > (including the > + * next paragraph) shall be included in all copies or > substantial portions > + * of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY > KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN > NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, > DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR > OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE > USE OR OTHER > + * DEALINGS IN THE SOFTWARE. > + */ > + > +#include > + > +#include > + > +/** > + * DOC: scdc helpers > + * > + * Status and Control Data Channel (SCDC) is a mechanism > introduced by the > + * HDMI 2.0 specification. It is a point-to-point protocol > that allows the > + * HDMI source and HDMI sink to exchan
Re: [PATCH v2 1/6] drm: Add SCDC helpers
Regards Shashank On 2/8/2017 4:57 PM, Jose Abreu wrote: Hi Shashank, On 07-02-2017 16:09, Sharma, Shashank wrote: Thanks for the review Jose, my comments inline. Regards Shashank On 2/7/2017 4:24 PM, Jose Abreu wrote: Hi Shashank, Sorry for the late review. On 06-02-2017 13:59, Shashank Sharma wrote: From: Thierry Reding SCDC is a mechanism defined in the HDMI 2.0 specification that allows the source and sink devices to communicate. This commit introduces helpers to access the SCDC and provides the symbolic names for the various registers defined in the specification. Signed-off-by: Thierry Reding Signed-off-by: Shashank Sharma --- Documentation/gpu/drm-kms-helpers.rst | 12 drivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/drm_scdc_helper.c | 111 include/drm/drm_scdc_helper.h | 132 ++ 4 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/drm_scdc_helper.c create mode 100644 include/drm/drm_scdc_helper.h diff --git a/Documentation/gpu/drm-kms-helpers.rst b/Documentation/gpu/drm-kms-helpers.rst index 03040aa..7592756 100644 --- a/Documentation/gpu/drm-kms-helpers.rst +++ b/Documentation/gpu/drm-kms-helpers.rst @@ -217,6 +217,18 @@ EDID Helper Functions Reference .. kernel-doc:: drivers/gpu/drm/drm_edid.c :export: +SCDC Helper Functions Reference +=== + +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c + :doc: scdc helpers + +.. kernel-doc:: include/drm/drm_scdc_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c + :export: + Rectangle Utilities Reference = diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 92de399..ad91cd9 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -31,7 +31,8 @@ drm-$(CONFIG_DEBUG_FS) += drm_debugfs.o drm_debugfs_crc.o drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_probe_helper.o \ drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \ drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ -drm_simple_kms_helper.o drm_modeset_helper.o +drm_simple_kms_helper.o drm_modeset_helper.o \ +drm_scdc_helper.o drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o diff --git a/drivers/gpu/drm/drm_scdc_helper.c b/drivers/gpu/drm/drm_scdc_helper.c new file mode 100644 index 000..fe0e121 --- /dev/null +++ b/drivers/gpu/drm/drm_scdc_helper.c @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2015 NVIDIA Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include + +#include + +/** + * DOC: scdc helpers + * + * Status and Control Data Channel (SCDC) is a mechanism introduced by the + * HDMI 2.0 specification. It is a point-to-point protocol that allows the + * HDMI source and HDMI sink to exchange data. The same I2C interface that + * is used to access EDID serves as the transport mechanism for SCDC. + */ + +#define SCDC_I2C_SLAVE_ADDRESS 0x54 + +/** + * drm_scdc_read - read a block of data from SCDC + * @adapter: I2C controller + * @offset: start offset of block to read + * @buffer: return location for the block to read + * @size: size of the block to read + * + * Reads a block of data from SCDC, starting at a given offset. + * + * Returns: + * The number of bytes read from SCDC or a negative error code on failure. + */ +ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer, + size_t size) +{ +struct i2c_msg msgs[2] = { +{ +.addr = SCDC_I2C_SLAVE_ADDRESS, +.flags = 0, +.len = 1, .len = sizeof(offset) ? Technically correct, but wouldn't that mean that we are exp
Re: [PATCH v2 1/6] drm: Add SCDC helpers
Hi Shashank, Sorry for the late review. On 06-02-2017 13:59, Shashank Sharma wrote: > From: Thierry Reding > > SCDC is a mechanism defined in the HDMI 2.0 specification that allows > the source and sink devices to communicate. > > This commit introduces helpers to access the SCDC and provides the > symbolic names for the various registers defined in the specification. > > Signed-off-by: Thierry Reding > Signed-off-by: Shashank Sharma > --- > Documentation/gpu/drm-kms-helpers.rst | 12 > drivers/gpu/drm/Makefile | 3 +- > drivers/gpu/drm/drm_scdc_helper.c | 111 > include/drm/drm_scdc_helper.h | 132 > ++ > 4 files changed, 257 insertions(+), 1 deletion(-) > create mode 100644 drivers/gpu/drm/drm_scdc_helper.c > create mode 100644 include/drm/drm_scdc_helper.h > > diff --git a/Documentation/gpu/drm-kms-helpers.rst > b/Documentation/gpu/drm-kms-helpers.rst > index 03040aa..7592756 100644 > --- a/Documentation/gpu/drm-kms-helpers.rst > +++ b/Documentation/gpu/drm-kms-helpers.rst > @@ -217,6 +217,18 @@ EDID Helper Functions Reference > .. kernel-doc:: drivers/gpu/drm/drm_edid.c > :export: > > +SCDC Helper Functions Reference > +=== > + > +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c > + :doc: scdc helpers > + > +.. kernel-doc:: include/drm/drm_scdc_helper.h > + :internal: > + > +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c > + :export: > + > Rectangle Utilities Reference > = > > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > index 92de399..ad91cd9 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -31,7 +31,8 @@ drm-$(CONFIG_DEBUG_FS) += drm_debugfs.o drm_debugfs_crc.o > drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_probe_helper.o \ > drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \ > drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ > - drm_simple_kms_helper.o drm_modeset_helper.o > + drm_simple_kms_helper.o drm_modeset_helper.o \ > + drm_scdc_helper.o > > drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o > drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o > diff --git a/drivers/gpu/drm/drm_scdc_helper.c > b/drivers/gpu/drm/drm_scdc_helper.c > new file mode 100644 > index 000..fe0e121 > --- /dev/null > +++ b/drivers/gpu/drm/drm_scdc_helper.c > @@ -0,0 +1,111 @@ > +/* > + * Copyright (c) 2015 NVIDIA Corporation. All rights reserved. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sub license, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the > + * next paragraph) shall be included in all copies or substantial portions > + * of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > + * DEALINGS IN THE SOFTWARE. > + */ > + > +#include > + > +#include > + > +/** > + * DOC: scdc helpers > + * > + * Status and Control Data Channel (SCDC) is a mechanism introduced by the > + * HDMI 2.0 specification. It is a point-to-point protocol that allows the > + * HDMI source and HDMI sink to exchange data. The same I2C interface that > + * is used to access EDID serves as the transport mechanism for SCDC. > + */ > + > +#define SCDC_I2C_SLAVE_ADDRESS 0x54 > + > +/** > + * drm_scdc_read - read a block of data from SCDC > + * @adapter: I2C controller > + * @offset: start offset of block to read > + * @buffer: return location for the block to read > + * @size: size of the block to read > + * > + * Reads a block of data from SCDC, starting at a given offset. > + * > + * Returns: > + * The number of bytes read from SCDC or a negative error code on failure. > + */ > +ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer, > + size_t size) > +{ > + struct i2c_msg msgs[2] = { > + { > + .addr = SCDC_I2C_SLAVE_ADDRESS, > + .flags = 0, > + .len = 1, .len = sizeof(offset) ? > +
Re: [PATCH v2 1/6] drm: Add SCDC helpers
Thanks for the review Jose, my comments inline. Regards Shashank On 2/7/2017 4:24 PM, Jose Abreu wrote: Hi Shashank, Sorry for the late review. On 06-02-2017 13:59, Shashank Sharma wrote: From: Thierry Reding SCDC is a mechanism defined in the HDMI 2.0 specification that allows the source and sink devices to communicate. This commit introduces helpers to access the SCDC and provides the symbolic names for the various registers defined in the specification. Signed-off-by: Thierry Reding Signed-off-by: Shashank Sharma --- Documentation/gpu/drm-kms-helpers.rst | 12 drivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/drm_scdc_helper.c | 111 include/drm/drm_scdc_helper.h | 132 ++ 4 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/drm_scdc_helper.c create mode 100644 include/drm/drm_scdc_helper.h diff --git a/Documentation/gpu/drm-kms-helpers.rst b/Documentation/gpu/drm-kms-helpers.rst index 03040aa..7592756 100644 --- a/Documentation/gpu/drm-kms-helpers.rst +++ b/Documentation/gpu/drm-kms-helpers.rst @@ -217,6 +217,18 @@ EDID Helper Functions Reference .. kernel-doc:: drivers/gpu/drm/drm_edid.c :export: +SCDC Helper Functions Reference +=== + +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c + :doc: scdc helpers + +.. kernel-doc:: include/drm/drm_scdc_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c + :export: + Rectangle Utilities Reference = diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 92de399..ad91cd9 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -31,7 +31,8 @@ drm-$(CONFIG_DEBUG_FS) += drm_debugfs.o drm_debugfs_crc.o drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_probe_helper.o \ drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \ drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ - drm_simple_kms_helper.o drm_modeset_helper.o + drm_simple_kms_helper.o drm_modeset_helper.o \ + drm_scdc_helper.o drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o diff --git a/drivers/gpu/drm/drm_scdc_helper.c b/drivers/gpu/drm/drm_scdc_helper.c new file mode 100644 index 000..fe0e121 --- /dev/null +++ b/drivers/gpu/drm/drm_scdc_helper.c @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2015 NVIDIA Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include + +#include + +/** + * DOC: scdc helpers + * + * Status and Control Data Channel (SCDC) is a mechanism introduced by the + * HDMI 2.0 specification. It is a point-to-point protocol that allows the + * HDMI source and HDMI sink to exchange data. The same I2C interface that + * is used to access EDID serves as the transport mechanism for SCDC. + */ + +#define SCDC_I2C_SLAVE_ADDRESS 0x54 + +/** + * drm_scdc_read - read a block of data from SCDC + * @adapter: I2C controller + * @offset: start offset of block to read + * @buffer: return location for the block to read + * @size: size of the block to read + * + * Reads a block of data from SCDC, starting at a given offset. + * + * Returns: + * The number of bytes read from SCDC or a negative error code on failure. + */ +ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer, + size_t size) +{ + struct i2c_msg msgs[2] = { + { + .addr = SCDC_I2C_SLAVE_ADDRESS, + .flags = 0, + .len = 1, .len = sizeof(offset) ? Technically correct, but wouldn't that mean that we are expecting to have I2C offsets with length more than