|
@@ -170,54 +170,58 @@ int sde_wb_connector_set_modes(struct sde_wb_device *wb_dev,
|
|
|
if (connected) {
|
|
|
SDE_DEBUG("connect\n");
|
|
|
|
|
|
- if (count_modes && modes) {
|
|
|
- modeinfo = kcalloc(count_modes,
|
|
|
- sizeof(struct drm_mode_modeinfo),
|
|
|
- GFP_KERNEL);
|
|
|
- if (!modeinfo) {
|
|
|
- SDE_ERROR("invalid params\n");
|
|
|
- ret = -ENOMEM;
|
|
|
- goto error;
|
|
|
- }
|
|
|
+ if (!count_modes || !modes) {
|
|
|
+ SDE_ERROR("invalid count_modes :%u and modes :%d\n",
|
|
|
+ count_modes, !modes);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
- if (copy_from_user(modeinfo, modes,
|
|
|
- count_modes *
|
|
|
- sizeof(struct drm_mode_modeinfo))) {
|
|
|
- SDE_ERROR("failed to copy modes\n");
|
|
|
+ modeinfo = kcalloc(count_modes,
|
|
|
+ sizeof(struct drm_mode_modeinfo),
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!modeinfo) {
|
|
|
+ SDE_ERROR("invalid params\n");
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (copy_from_user(modeinfo, modes,
|
|
|
+ count_modes *
|
|
|
+ sizeof(struct drm_mode_modeinfo))) {
|
|
|
+ SDE_ERROR("failed to copy modes\n");
|
|
|
+ kfree(modeinfo);
|
|
|
+ ret = -EFAULT;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i = 0; i < count_modes; i++) {
|
|
|
+ struct drm_display_mode dispmode;
|
|
|
+
|
|
|
+ memset(&dispmode, 0, sizeof(dispmode));
|
|
|
+ ret = drm_mode_convert_umode(wb_dev->drm_dev,
|
|
|
+ &dispmode, &modeinfo[i]);
|
|
|
+ if (ret) {
|
|
|
+ SDE_ERROR(
|
|
|
+ "failed to convert mode %d:\"%s\" %d %d %d %d %d %d %d %d %d %d 0x%x 0x%x status:%d rc:%d\n",
|
|
|
+ i,
|
|
|
+ modeinfo[i].name,
|
|
|
+ modeinfo[i].vrefresh,
|
|
|
+ modeinfo[i].clock,
|
|
|
+ modeinfo[i].hdisplay,
|
|
|
+ modeinfo[i].hsync_start,
|
|
|
+ modeinfo[i].hsync_end,
|
|
|
+ modeinfo[i].htotal,
|
|
|
+ modeinfo[i].vdisplay,
|
|
|
+ modeinfo[i].vsync_start,
|
|
|
+ modeinfo[i].vsync_end,
|
|
|
+ modeinfo[i].vtotal,
|
|
|
+ modeinfo[i].type,
|
|
|
+ modeinfo[i].flags,
|
|
|
+ dispmode.status,
|
|
|
+ ret);
|
|
|
kfree(modeinfo);
|
|
|
- ret = -EFAULT;
|
|
|
goto error;
|
|
|
}
|
|
|
-
|
|
|
- for (i = 0; i < count_modes; i++) {
|
|
|
- struct drm_display_mode dispmode;
|
|
|
-
|
|
|
- memset(&dispmode, 0, sizeof(dispmode));
|
|
|
- ret = drm_mode_convert_umode(wb_dev->drm_dev,
|
|
|
- &dispmode, &modeinfo[i]);
|
|
|
- if (ret) {
|
|
|
- SDE_ERROR(
|
|
|
- "failed to convert mode %d:\"%s\" %d %d %d %d %d %d %d %d %d %d 0x%x 0x%x status:%d rc:%d\n",
|
|
|
- i,
|
|
|
- modeinfo[i].name,
|
|
|
- modeinfo[i].vrefresh,
|
|
|
- modeinfo[i].clock,
|
|
|
- modeinfo[i].hdisplay,
|
|
|
- modeinfo[i].hsync_start,
|
|
|
- modeinfo[i].hsync_end,
|
|
|
- modeinfo[i].htotal,
|
|
|
- modeinfo[i].vdisplay,
|
|
|
- modeinfo[i].vsync_start,
|
|
|
- modeinfo[i].vsync_end,
|
|
|
- modeinfo[i].vtotal,
|
|
|
- modeinfo[i].type,
|
|
|
- modeinfo[i].flags,
|
|
|
- dispmode.status,
|
|
|
- ret);
|
|
|
- kfree(modeinfo);
|
|
|
- goto error;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
if (wb_dev->modes) {
|