On Mon, 21 Aug 2023, Mitul Golani <mitulkumar.ajitkumar.golani@xxxxxxxxx> wrote: > Add wrapper functions to facilitate extracting Short Audio > Descriptor (SAD) information from EDID-Like Data (ELD) pointers > with different constness requirements. > > 1. `drm_eld_sad`: This function returns a constant `uint8_t` > pointer and wraps the main extraction function, allowing access > to SAD information while maintaining const correctness. > > 2. `drm_extract_sad_from_eld`: This function returns a mutable > `uint8_t` pointer and implements the core logic for extracting > SAD from the provided ELD pointer. It performs version and > maximum channel checks to ensure proper extraction. > > These wrapper functions provide flexibility to the codebase, > allowing users to access SAD information while adhering to > const correctness when needed and modifying the pointer when > required. I've considered this, and in the end I think it's better to *not* make it easier for drivers to modify the ELD buffer directly. To that end, I wrote some helpers to modify the SADs using the existing struct cea_sad abstraction [1]. Please have a look. It should make your changes better focus on what you need to do here, instead of getting distracted with ELD parsing details. BR, Jani. [1] https://patchwork.freedesktop.org/series/123384/ > > Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@xxxxxxxxx> > --- > include/drm/drm_edid.h | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h > index 48e93f909ef6..626bc0d542eb 100644 > --- a/include/drm/drm_edid.h > +++ b/include/drm/drm_edid.h > @@ -418,11 +418,7 @@ static inline int drm_eld_mnl(const uint8_t *eld) > return (eld[DRM_ELD_CEA_EDID_VER_MNL] & DRM_ELD_MNL_MASK) >> DRM_ELD_MNL_SHIFT; > } > > -/** > - * drm_eld_sad - Get ELD SAD structures. > - * @eld: pointer to an eld memory structure with sad_count set > - */ > -static inline const uint8_t *drm_eld_sad(const uint8_t *eld) > +static uint8_t *drm_extract_sad_from_eld(uint8_t *eld) > { > unsigned int ver, mnl; > > @@ -437,6 +433,15 @@ static inline const uint8_t *drm_eld_sad(const uint8_t *eld) > return eld + DRM_ELD_CEA_SAD(mnl, 0); > } > > +/** > + * drm_eld_sad - Get ELD SAD structures. > + * @eld: pointer to an eld memory structure with sad_count set > + */ > +static inline const uint8_t *drm_eld_sad(const uint8_t *eld) > +{ > + return drm_extract_sad_from_eld((uint8_t *)eld); > +} > + > /** > * drm_eld_sad_count - Get ELD SAD count. > * @eld: pointer to an eld memory structure with sad_count set -- Jani Nikula, Intel Open Source Graphics Center