Message ID | 8e9a05f2b1e0dd184132d636e1e778e8917ec25d.1698747331.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/edid: split out drm_eld.[ch], add some SAD helpers | expand |
> -----Original Message----- > From: Nikula, Jani <jani.nikula@intel.com> > Sent: Tuesday, October 31, 2023 3:47 PM > To: dri-devel@lists.freedesktop.org > Cc: intel-gfx@lists.freedesktop.org; Golani, Mitulkumar Ajitkumar > <mitulkumar.ajitkumar.golani@intel.com>; Nikula, Jani > <jani.nikula@intel.com> > Subject: [PATCH v2 6/6] drm/eld: add helpers to modify the SADs of an ELD > > Occasionally it's necessary for drivers to modify the SADs of an ELD, but it's > not so cool to have drivers poke at the ELD buffer directly. > > Using the helpers to translate between 3-byte SAD and struct cea_sad, add > ELD helpers to get/set the SADs from/to an ELD. > > v2: s/i/sad_index/ (Mitul) > > Cc: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> > Signed-off-by: Jani Nikula <jani.nikula@intel.com> > --- > Documentation/gpu/drm-kms-helpers.rst | 3 ++ > drivers/gpu/drm/Makefile | 1 + > drivers/gpu/drm/drm_eld.c | 55 +++++++++++++++++++++++++++ > include/drm/drm_eld.h | 5 +++ > 4 files changed, 64 insertions(+) > create mode 100644 drivers/gpu/drm/drm_eld.c > > diff --git a/Documentation/gpu/drm-kms-helpers.rst > b/Documentation/gpu/drm-kms-helpers.rst > index cfa8e6c399b6..59cfe8a7a8ba 100644 > --- a/Documentation/gpu/drm-kms-helpers.rst > +++ b/Documentation/gpu/drm-kms-helpers.rst > @@ -366,6 +366,9 @@ EDID Helper Functions Reference .. kernel-doc:: > include/drm/drm_eld.h > :internal: > > +.. kernel-doc:: drivers/gpu/drm/drm_eld.c > + :export: > + > SCDC Helper Functions Reference > =============================== > > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index > 8e1bde059170..cdbe91ac0bfc 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -22,6 +22,7 @@ drm-y := \ > drm_drv.o \ > drm_dumb_buffers.o \ > drm_edid.o \ > + drm_eld.o \ > drm_encoder.o \ > drm_file.o \ > drm_fourcc.o \ > diff --git a/drivers/gpu/drm/drm_eld.c b/drivers/gpu/drm/drm_eld.c new > file mode 100644 index 000000000000..5177991aa272 > --- /dev/null > +++ b/drivers/gpu/drm/drm_eld.c > @@ -0,0 +1,55 @@ > +// SPDX-License-Identifier: MIT > +/* > + * Copyright © 2023 Intel Corporation > + */ > + > +#include <drm/drm_edid.h> > +#include <drm/drm_eld.h> > + > +#include "drm_internal.h" > + > +/** > + * drm_eld_sad_get - get SAD from ELD to struct cea_sad > + * @eld: ELD buffer > + * @sad_index: SAD index > + * @cta_sad: destination struct cea_sad > + * > + * @return: 0 on success, or negative on errors */ int > +drm_eld_sad_get(const u8 *eld, int sad_index, struct cea_sad *cta_sad) > +{ > + const u8 *sad; > + > + if (sad_index >= drm_eld_sad_count(eld)) > + return -EINVAL; > + > + sad = eld + DRM_ELD_CEA_SAD(drm_eld_mnl(eld), sad_index); > + > + drm_edid_cta_sad_set(cta_sad, sad); > + > + return 0; > +} > +EXPORT_SYMBOL(drm_eld_sad_get); > + > +/** > + * drm_eld_sad_set - set SAD to ELD from struct cea_sad > + * @eld: ELD buffer > + * @sad_index: SAD index > + * @cta_sad: source struct cea_sad > + * > + * @return: 0 on success, or negative on errors */ int > +drm_eld_sad_set(u8 *eld, int sad_index, const struct cea_sad *cta_sad) > +{ > + u8 *sad; > + > + if (sad_index >= drm_eld_sad_count(eld)) > + return -EINVAL; > + > + sad = eld + DRM_ELD_CEA_SAD(drm_eld_mnl(eld), sad_index); > + > + drm_edid_cta_sad_get(cta_sad, sad); > + > + return 0; > +} > +EXPORT_SYMBOL(drm_eld_sad_set); > diff --git a/include/drm/drm_eld.h b/include/drm/drm_eld.h index > 7b674256b9aa..0a88d10b28b0 100644 > --- a/include/drm/drm_eld.h > +++ b/include/drm/drm_eld.h > @@ -8,6 +8,8 @@ > > #include <linux/types.h> > > +struct cea_sad; > + > /* ELD Header Block */ > #define DRM_ELD_HEADER_BLOCK_SIZE 4 > > @@ -75,6 +77,9 @@ static inline int drm_eld_mnl(const u8 *eld) > return (eld[DRM_ELD_CEA_EDID_VER_MNL] & > DRM_ELD_MNL_MASK) >> DRM_ELD_MNL_SHIFT; } > > +int drm_eld_sad_get(const u8 *eld, int sad_index, struct cea_sad > +*cta_sad); int drm_eld_sad_set(u8 *eld, int sad_index, const struct > +cea_sad *cta_sad); Changes LGTM. Thanks Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> > + > /** > * drm_eld_sad - Get ELD SAD structures. > * @eld: pointer to an eld memory structure with sad_count set > -- > 2.39.2
diff --git a/Documentation/gpu/drm-kms-helpers.rst b/Documentation/gpu/drm-kms-helpers.rst index cfa8e6c399b6..59cfe8a7a8ba 100644 --- a/Documentation/gpu/drm-kms-helpers.rst +++ b/Documentation/gpu/drm-kms-helpers.rst @@ -366,6 +366,9 @@ EDID Helper Functions Reference .. kernel-doc:: include/drm/drm_eld.h :internal: +.. kernel-doc:: drivers/gpu/drm/drm_eld.c + :export: + SCDC Helper Functions Reference =============================== diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 8e1bde059170..cdbe91ac0bfc 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -22,6 +22,7 @@ drm-y := \ drm_drv.o \ drm_dumb_buffers.o \ drm_edid.o \ + drm_eld.o \ drm_encoder.o \ drm_file.o \ drm_fourcc.o \ diff --git a/drivers/gpu/drm/drm_eld.c b/drivers/gpu/drm/drm_eld.c new file mode 100644 index 000000000000..5177991aa272 --- /dev/null +++ b/drivers/gpu/drm/drm_eld.c @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2023 Intel Corporation + */ + +#include <drm/drm_edid.h> +#include <drm/drm_eld.h> + +#include "drm_internal.h" + +/** + * drm_eld_sad_get - get SAD from ELD to struct cea_sad + * @eld: ELD buffer + * @sad_index: SAD index + * @cta_sad: destination struct cea_sad + * + * @return: 0 on success, or negative on errors + */ +int drm_eld_sad_get(const u8 *eld, int sad_index, struct cea_sad *cta_sad) +{ + const u8 *sad; + + if (sad_index >= drm_eld_sad_count(eld)) + return -EINVAL; + + sad = eld + DRM_ELD_CEA_SAD(drm_eld_mnl(eld), sad_index); + + drm_edid_cta_sad_set(cta_sad, sad); + + return 0; +} +EXPORT_SYMBOL(drm_eld_sad_get); + +/** + * drm_eld_sad_set - set SAD to ELD from struct cea_sad + * @eld: ELD buffer + * @sad_index: SAD index + * @cta_sad: source struct cea_sad + * + * @return: 0 on success, or negative on errors + */ +int drm_eld_sad_set(u8 *eld, int sad_index, const struct cea_sad *cta_sad) +{ + u8 *sad; + + if (sad_index >= drm_eld_sad_count(eld)) + return -EINVAL; + + sad = eld + DRM_ELD_CEA_SAD(drm_eld_mnl(eld), sad_index); + + drm_edid_cta_sad_get(cta_sad, sad); + + return 0; +} +EXPORT_SYMBOL(drm_eld_sad_set); diff --git a/include/drm/drm_eld.h b/include/drm/drm_eld.h index 7b674256b9aa..0a88d10b28b0 100644 --- a/include/drm/drm_eld.h +++ b/include/drm/drm_eld.h @@ -8,6 +8,8 @@ #include <linux/types.h> +struct cea_sad; + /* ELD Header Block */ #define DRM_ELD_HEADER_BLOCK_SIZE 4 @@ -75,6 +77,9 @@ static inline int drm_eld_mnl(const u8 *eld) return (eld[DRM_ELD_CEA_EDID_VER_MNL] & DRM_ELD_MNL_MASK) >> DRM_ELD_MNL_SHIFT; } +int drm_eld_sad_get(const u8 *eld, int sad_index, struct cea_sad *cta_sad); +int drm_eld_sad_set(u8 *eld, int sad_index, const struct cea_sad *cta_sad); + /** * drm_eld_sad - Get ELD SAD structures. * @eld: pointer to an eld memory structure with sad_count set
Occasionally it's necessary for drivers to modify the SADs of an ELD, but it's not so cool to have drivers poke at the ELD buffer directly. Using the helpers to translate between 3-byte SAD and struct cea_sad, add ELD helpers to get/set the SADs from/to an ELD. v2: s/i/sad_index/ (Mitul) Cc: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- Documentation/gpu/drm-kms-helpers.rst | 3 ++ drivers/gpu/drm/Makefile | 1 + drivers/gpu/drm/drm_eld.c | 55 +++++++++++++++++++++++++++ include/drm/drm_eld.h | 5 +++ 4 files changed, 64 insertions(+) create mode 100644 drivers/gpu/drm/drm_eld.c