+static int drm_get_audio_format(struct edid *edid,
+ char *audioformat, int len)
+{
+ int i, size = 0, num = 0;
+ struct cea_sad *sads;
+
+ memset(audioformat, 0, len);
+ num = drm_edid_to_sad(edid, &sads);
+ if (!num)
+ return 0;
+
+ for (i = 0; i < num; i++) {
+ if (sads[i].format < 1 || sads[i].format > 14) {
+ DRM_ERROR("audio type unsupported.\n");
+ continue;
+ }
+ size = strlen(audioformatstr[sads[i].format]);
+ memcpy(audioformat, audioformatstr[sads[i].format], size);
+ audioformat[size] = ',';
+ audioformat += (size + 1);
+ }
+ return num;
+}
+
+static ssize_t audioformat_show(struct device *device,
+ struct device_attribute *attr,
+ char *buf)
+{
+ char audioformat[200];
+ int ret = 0;
+ struct edid *edid;
+ struct drm_connector *connector = to_drm_connector(device);
+
+ if (!connector->edid_blob_ptr)
+ return 0;
+
+ edid = (struct edid *)connector->edid_blob_ptr->data;
+ ret = drm_get_audio_format(edid, audioformat, 200);
+ if (ret)
+ return snprintf(buf, PAGE_SIZE, "%s\n", audioformat);
+
+ return 0;
+}
+