<div>Hi All,</div>
<div>&nbsp;</div>
<div>I am working with ARM1176 core, and using standard serial driver NS16550. </div>
<div>I found one bug in to this function - </div>
<div>&nbsp;</div>
<div>The driver doesn&#39;t work with baudrate 57600, I debuged this issue and find that small modification is required in function &quot;calc_divisor&quot; -</div>
<div>Below is complete function -</div>
<div>&nbsp;</div>
<div>CFG_NS16550_CLK = 10000000</div>
<div>MODE_X_DIV=16</div>
<div>static int calc_divisor (NS16550_t port)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int baudrate_div;<br>#ifdef CONFIG_OMAP1510<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If can&#39;t cleanly clock 115200 set div to 1 */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((CFG_NS16550_CLK == 12000000) &amp;&amp; (gd-&gt;baudrate == 115200)) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port-&gt;osc_12m_sel = OSC_12M_SEL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* enable 6.5 * divisor */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* return 1 for base divisor */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port-&gt;osc_12m_sel = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* clear if previsouly set */
<br>#endif<br>#ifdef CONFIG_OMAP1610<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If can&#39;t cleanly clock 115200 set div to 1 */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((CFG_NS16550_CLK == 48000000) &amp;&amp; (gd-&gt;baudrate == 115200)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (26);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* return 26 for base divisor */
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>#endif</div>
<div>
<p>#ifdef CONFIG_APTIX<br>#define MODE_X_DIV 13<br>#else<br>#define MODE_X_DIV 16<br>#endif<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baudrate_div = (CFG_NS16550_CLK / gd-&gt;baudrate);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((baudrate_div%MODE_X_DIV)&gt;7)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baudrate_div+=8;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baudrate_div/=MODE_X_DIV;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return baudrate_div;</p>
<p>}<br></p>
<p>I have tested with baudrates 9600, 19200, 38400 and&nbsp;57600. it&#39;s working perfectly fine.</p>
<p>Am I on correct path? Please let me know if I am missing something.</p>
<p>Thanks,</p>
<p>Vaibhav</p>
<p>&nbsp;</p></div>