[PATCH 5/6] drm/edid: add helpers to get/set struct cea_sad from/to 3-byte sad
Golani, Mitulkumar Ajitkumar
mitulkumar.ajitkumar.golani at intel.com
Tue Sep 26 18:13:30 UTC 2023
> -----Original Message-----
> From: Nikula, Jani <jani.nikula at intel.com>
> Sent: 07 September 2023 14:58
> To: dri-devel at lists.freedesktop.org
> Cc: intel-gfx at lists.freedesktop.org; Nikula, Jani <jani.nikula at intel.com>;
> Golani, Mitulkumar Ajitkumar <mitulkumar.ajitkumar.golani at intel.com>
> Subject: [PATCH 5/6] drm/edid: add helpers to get/set struct cea_sad
> from/to 3-byte sad
>
> Add helpers to pack/unpack SADs. Both ways and non-static, as follow-up
> work needs them.
>
> Cc: Mitul Golani <mitulkumar.ajitkumar.golani at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 33 ++++++++++++++++++++++++---------
> drivers/gpu/drm/drm_internal.h | 6 ++++++
> 2 files changed, 30 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index fcdc2c314cde..1260e2688bd7 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -5499,6 +5499,27 @@ static void clear_eld(struct drm_connector
> *connector)
> connector->audio_latency[1] = 0;
> }
>
> +/*
> + * Get 3-byte SAD buf from struct cea_sad.
> + */
Just a small nit-pick: 'SAD buffer'.
Otherwise the change looks good to me.
Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani at intel.com>
> +void drm_edid_cta_sad_get(const struct cea_sad *cta_sad, u8 *sad) {
> + sad[0] = cta_sad->format << 3 | cta_sad->channels;
> + sad[1] = cta_sad->freq;
> + sad[2] = cta_sad->byte2;
> +}
> +
> +/*
> + * Set struct cea_sad from 3-byte SAD buf.
> + */
> +void drm_edid_cta_sad_set(struct cea_sad *cta_sad, const u8 *sad) {
> + cta_sad->format = (sad[0] & 0x78) >> 3;
> + cta_sad->channels = sad[0] & 0x07;
> + cta_sad->freq = sad[1] & 0x7f;
> + cta_sad->byte2 = sad[2];
> +}
> +
> /*
> * drm_edid_to_eld - build ELD from EDID
> * @connector: connector corresponding to the HDMI/DP sink @@ -5593,21
> +5614,15 @@ static int _drm_edid_to_sad(const struct drm_edid
> *drm_edid,
> cea_db_iter_for_each(db, &iter) {
> if (cea_db_tag(db) == CTA_DB_AUDIO) {
> struct cea_sad *sads;
> - int j;
> + int i;
>
> count = cea_db_payload_len(db) / 3; /* SAD is 3B */
> sads = kcalloc(count, sizeof(*sads), GFP_KERNEL);
> *psads = sads;
> if (!sads)
> return -ENOMEM;
> - for (j = 0; j < count; j++) {
> - const u8 *sad = &db->data[j * 3];
> -
> - sads[j].format = (sad[0] & 0x78) >> 3;
> - sads[j].channels = sad[0] & 0x7;
> - sads[j].freq = sad[1] & 0x7F;
> - sads[j].byte2 = sad[2];
> - }
> + for (i = 0; i < count; i++)
> + drm_edid_cta_sad_set(&sads[i], &db->data[i
> * 3]);
> break;
> }
> }
> diff --git a/drivers/gpu/drm/drm_internal.h
> b/drivers/gpu/drm/drm_internal.h index ab9a472f4a47..5b7c661da459
> 100644
> --- a/drivers/gpu/drm/drm_internal.h
> +++ b/drivers/gpu/drm/drm_internal.h
> @@ -22,6 +22,7 @@
> */
>
> #include <linux/kthread.h>
> +#include <linux/types.h>
>
> #include <drm/drm_ioctl.h>
> #include <drm/drm_vblank.h>
> @@ -31,6 +32,7 @@
>
> #define DRM_IF_VERSION(maj, min) (maj << 16 | min)
>
> +struct cea_sad;
> struct dentry;
> struct dma_buf;
> struct iosys_map;
> @@ -265,3 +267,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev,
> void *data, void drm_framebuffer_print_info(struct drm_printer *p,
> unsigned int indent,
> const struct drm_framebuffer *fb);
> void drm_framebuffer_debugfs_init(struct drm_device *dev);
> +
> +/* drm_edid.c */
> +void drm_edid_cta_sad_get(const struct cea_sad *cta_sad, u8 *sad); void
> +drm_edid_cta_sad_set(struct cea_sad *cta_sad, const u8 *sad);
> --
> 2.39.2
More information about the dri-devel
mailing list