Skip to content

Commit

Permalink
drm/eld: add helpers to modify the SADs of an ELD
Browse files Browse the repository at this point in the history
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>
Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/8e9a05f2b1e0dd184132d636e1e778e8917ec25d.1698747331.git.jani.nikula@intel.com
  • Loading branch information
Jani Nikula committed Nov 9, 2023
1 parent 8af4681 commit f415a60
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Documentation/gpu/drm-kms-helpers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
===============================

Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
55 changes: 55 additions & 0 deletions drivers/gpu/drm/drm_eld.c
Original file line number Diff line number Diff line change
@@ -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);
5 changes: 5 additions & 0 deletions include/drm/drm_eld.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#include <linux/types.h>

struct cea_sad;

/* ELD Header Block */
#define DRM_ELD_HEADER_BLOCK_SIZE 4

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit f415a60

Please sign in to comment.