On 07/25, Alex Hung wrote: > > > On 2024-07-05 21:35, Melissa Wen wrote: > > instead of parsing struct edid. > > A more informative commit message will be helpful. sure. I'll improve it in the next version. > > > > > Signed-off-by: Melissa Wen <mwen@xxxxxxxxxx> > > --- > > .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 17 +++++++++-------- > > 1 file changed, 9 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c > > index 7657b1051c54..45c04de08c65 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c > > @@ -97,7 +97,6 @@ enum dc_edid_status dm_helpers_parse_edid_caps( > > const struct drm_edid *drm_edid = aconnector->drm_edid; > > struct drm_edid_product_id product_id; > > struct edid *edid_buf = edid ? (struct edid *) edid->raw_edid : NULL; > > - struct cea_sad *sads; > > int sad_count, sadb_count; > > int i = 0; > > uint8_t *sadb = NULL; > > @@ -127,18 +126,21 @@ enum dc_edid_status dm_helpers_parse_edid_caps( > > apply_edid_quirks(&product_id, edid_caps); > > - sad_count = drm_edid_to_sad((struct edid *) edid->raw_edid, &sads); > > + sad_count = drm_eld_sad_count(connector->eld); > > if (sad_count <= 0) > > return result; > > edid_caps->audio_mode_count = min(sad_count, DC_MAX_AUDIO_DESC_COUNT); > > for (i = 0; i < edid_caps->audio_mode_count; ++i) { > > - struct cea_sad *sad = &sads[i]; > > + struct cea_sad sad; > > - edid_caps->audio_modes[i].format_code = sad->format; > > - edid_caps->audio_modes[i].channel_count = sad->channels + 1; > > - edid_caps->audio_modes[i].sample_rate = sad->freq; > > - edid_caps->audio_modes[i].sample_size = sad->byte2; > > + if (drm_eld_sad_get(connector->eld, i, &sad) < 0) > > + continue; > > + > > + edid_caps->audio_modes[i].format_code = sad.format; > > + edid_caps->audio_modes[i].channel_count = sad.channels + 1; > > + edid_caps->audio_modes[i].sample_rate = sad.freq; > > + edid_caps->audio_modes[i].sample_size = sad.byte2; > > } > > sadb_count = drm_edid_to_speaker_allocation((struct edid *) edid->raw_edid, &sadb); > > @@ -153,7 +155,6 @@ enum dc_edid_status dm_helpers_parse_edid_caps( > > else > > edid_caps->speaker_flags = DEFAULT_SPEAKER_LOCATION; > > - kfree(sads); > > kfree(sadb); > > return result;