<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:10.5pt;">
<div align="left" style="text-align:justify;">Hi, All</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">Help review.</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">Background</div>
<ol style="text-align:justify;margin:0;padding-left:18pt;">
<li>Some platforms has no EDID mode information. Therefore when KMS initializes the driver, there will be no mode provided for user. At that time, have to use the fixed mode defined by the user.(builtin-800x480)</li><li>In the very beginning of weston restart, there exists a case, no active mode is set to connector. We provide the first mode gotten from KMS as default mode for connector.</li></ol>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">We got weston core dump when weston start because drm will add null mode when cases above happen.</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">commit 1a87302f288497ed8bbef3677286e27bb6931f72</div>
<div align="left" style="text-align:justify;">Author: Wang Quanxian <<a href="mailto:quanxian.wang@intel.com"><font color="blue"><u>quanxian.wang@intel.com</u></font></a>></div>
<div align="left" style="text-align:justify;">Date:   Wed Jul 25 11:21:00 2012 +0800</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">    Bug fix for mode issue when weston start</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">    Provide the default builtin(800x480) mode when platforms</div>
<div align="left" style="text-align:justify;">    have no EDID and KMS could not provide mode information.</div>
<div align="left" style="text-align:justify;">    In the very beginning of weston, the connector could not</div>
<div align="left" style="text-align:justify;">    be set active mode. At that time, take the first mode in</div>
<div align="left" style="text-align:justify;">    mode list from KMS as default mode.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">    Signed-Off-By Quanxian Wang <<a href="mailto:quanxian.wang@intel.com"><font color="blue"><u>quanxian.wang@intel.com</u></font></a>></div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">diff --git a/src/compositor-drm.c b/src/compositor-drm.c</div>
<div align="left" style="text-align:justify;">index 4dffa1d..47cd512 100644</div>
<div align="left" style="text-align:justify;">--- a/src/compositor-drm.c</div>
<div align="left" style="text-align:justify;">+++ b/src/compositor-drm.c</div>
<div align="left" style="text-align:justify;">@@ -143,6 +143,16 @@ struct drm_sprite {</div>
<div align="left" style="text-align:justify;">         uint32_t formats[];</div>
<div align="left" style="text-align:justify;"> };</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">+static drmModeModeInfo builtin_800x480 = {</div>
<div align="left" style="text-align:justify;">+       33750,                  /* clock */</div>
<div align="left" style="text-align:justify;">+       800, 864, 976, 1088, 0, </div>
<div align="left" style="text-align:justify;">+       480, 486, 494, 517, 0,</div>
<div align="left" style="text-align:justify;">+       59920,</div>
<div align="left" style="text-align:justify;">+       DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC,</div>
<div align="left" style="text-align:justify;">+       0,</div>
<div align="left" style="text-align:justify;">+       "800x480"</div>
<div align="left" style="text-align:justify;">+};</div>
<div align="left" style="text-align:justify;">+</div>
<div align="left" style="text-align:justify;"> static int</div>
<div align="left" style="text-align:justify;"> surface_is_primary(struct weston_compositor *ec, struct weston_surface *es)</div>
<div align="left" style="text-align:justify;"> {</div>
<div align="left" style="text-align:justify;">@@ -1344,13 +1354,30 @@ create_output_for_connector(struct drm_compositor *ec,</div>
<div align="left" style="text-align:justify;">         drmModeFreeEncoder(encoder);</div>
<div align="left" style="text-align:justify;">         if (crtc == NULL)</div>
<div align="left" style="text-align:justify;">                 goto err_free;</div>
<div align="left" style="text-align:justify;">-       crtc_mode = crtc->mode;</div>
<div align="left" style="text-align:justify;">+</div>
<div align="left" style="text-align:justify;">+       /* if don't get mode from drm driver, use default 800x480 */</div>
<div align="left" style="text-align:justify;">+       if (crtc->mode.clock != 0)</div>
<div align="left" style="text-align:justify;">+       {</div>
<div align="left" style="text-align:justify;">+               crtc_mode = crtc->mode;</div>
<div align="left" style="text-align:justify;">+       } else {</div>
<div align="left" style="text-align:justify;">+               if (connector->count_modes == 0)</div>
<div align="left" style="text-align:justify;">+                       crtc_mode = builtin_800x480;</div>
<div align="left" style="text-align:justify;">+               else</div>
<div align="left" style="text-align:justify;">+                       crtc_mode = connector->modes[0];</div>
<div align="left" style="text-align:justify;">+       }</div>
<div align="left" style="text-align:justify;">+</div>
<div align="left" style="text-align:justify;">         drmModeFreeCrtc(crtc);</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">-       for (i = 0; i < connector->count_modes; i++) {</div>
<div align="left" style="text-align:justify;">-               ret = drm_output_add_mode(output, &connector->modes[i]);</div>
<div align="left" style="text-align:justify;">+       if (connector->count_modes == 0) {</div>
<div align="left" style="text-align:justify;">+               ret = drm_output_add_mode(output, &crtc_mode);</div>
<div align="left" style="text-align:justify;">                 if (ret)</div>
<div align="left" style="text-align:justify;">                         goto err_free;</div>
<div align="left" style="text-align:justify;">+       }else{</div>
<div align="left" style="text-align:justify;">+               for (i = 0; i < connector->count_modes; i++) {</div>
<div align="left" style="text-align:justify;">+                       ret = drm_output_add_mode(output, &connector->modes[i]);</div>
<div align="left" style="text-align:justify;">+                       if (ret)</div>
<div align="left" style="text-align:justify;">+                               goto err_free;</div>
<div align="left" style="text-align:justify;">+               }</div>
<div align="left" style="text-align:justify;">         }</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">         preferred = NULL;</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">Thanks</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">Quanxian Wang</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
</span></font>
</body>
</html>