struct drm_display_mode *mode;
int mode_count = 0;
int props_count = 0;
+ int encoders_count = 0;
int ret = 0;
int copied = 0;
int i;
struct drm_mode_modeinfo __user *mode_ptr;
uint32_t __user *prop_ptr;
uint64_t __user *prop_values;
+ uint32_t __user *encoder_ptr;
memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
}
}
+ for (i = 0; i < DRM_OUTPUT_MAX_ENCODER; i++) {
+ if (output->encoder_ids[i] != 0) {
+ encoders_count++;
+ }
+ }
+
if (out_resp->count_modes == 0) {
drm_crtc_probe_single_output_modes(output, dev->mode_config.max_width, dev->mode_config.max_height);
}
}
out_resp->count_props = props_count;
+ if ((out_resp->count_encoders >= encoders_count) && encoders_count) {
+ copied = 0;
+ encoder_ptr = (uint32_t *)(unsigned long)(out_resp->encoders_ptr);
+ for (i = 0; i < DRM_OUTPUT_MAX_ENCODER; i++) {
+ if (output->encoder_ids[i] != 0) {
+ if (put_user(output->encoder_ids[i], encoder_ptr + copied)) {
+ ret = -EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ }
+ out_resp->count_encoders = encoders_count;
+
out:
mutex_unlock(&dev->mode_config.mutex);
return ret;
#define DRM_OUTPUT_MAX_UMODES 16
#define DRM_OUTPUT_MAX_PROPERTY 16
#define DRM_OUTPUT_LEN 32
+#define DRM_OUTPUT_MAX_ENCODER 2
/**
* drm_encoder - central DRM encoder structure
uint64_t property_values[DRM_OUTPUT_MAX_PROPERTY];
void *helper_private;
+
+ u32 encoder_ids[DRM_OUTPUT_MAX_ENCODER];
};
/**