<div>š</div><div>š</div><div>29.06.2014, 20:34, "๓ลาวลส ๗มำษฬภวษฮ" <vasilugin@yandex.ru>:</div><blockquote type="cite"><div>š</div><div>š</div><div>29.06.2014, 18:33, "Roman Yeryomin" <<a href="mailto:leroi.lists@gmail.com">leroi.lists@gmail.com</a>>:</div><blockquote type="cite"><p>On 28 June 2014 19:17, ๓ลาวลส ๗มำษฬภวษฮ <<a href="mailto:vasilugin@yandex.ru">vasilugin@yandex.ru</a>> wrote:</p><blockquote>š26.06.2014, 06:03, "Daniel" <<a href="mailto:daniel@makrotopia.org">daniel@makrotopia.org</a>>:<br /><br />šHi Roman,<br /><br />šOn 04/04/2014 04:39 PM, Roman Yeryomin wrote:<br /><br />ššI worked on other things lately but plan to return to rt2x00 soon and<br />ššmaybe try ralink driver on trunk again.<br /><br />šI started looking into your patches and started to see things moving as far<br />šas<br />šyou got.<br />šI suggest to define RT6352 and set chip.rt to that instead of checking for<br />šchip.rf == RF7620 in cases which were meant for RT5390.<br />šIs there any more recent version of your work on rt2x00 than the<br />š630-rt2x00-add-mt<span><span>7620-20140131</span></span>.patch included in your first post? If so,<br />šplease<br />šshare it, I'd like to re-use what ever there is and try to botch things up a<br />šbit ;)<br /><br />šCheers<br /><br /><br />šDaniel<br /><br />šAfter some attempts tonight I make working version of the patch. But my<br />štrunk revision really very old and I need time to rebase it.<br />šThe key error was in rt2800_rfcsr_read for RF7620 (wrong bitmask). So<br />š*value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA);<br />šinstead of<br />š*value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA_MT7620);<br />šbroke all rf reading.</blockquote><p>Honestly that sounds weird because unless you change all the other<br />masks for mt7620 you will have them overlapped.<br />Also this is how that register is described in datasheet (the fields<br />are in reverse order comparing to all other socs).<br />If you say you got it working can you send at least binary image to<br />test (while you are trying to rebase it)?<br /><br />Regards,<br />Roman</p></blockquote><div>1. As my friends say - let me show :)</div><div>Your recently sent patch:</div><div>š</div><div>static void rt2800_rfcsr_read(struct rt2x00_dev *rt2x00dev,<br />ššššššššššššššššššššššššššššš const unsigned int word, u8 *value)<br />š{<br />@@ -182,15 +221,31 @@<br />šššššššš * doesn't become available in time, reg will be 0xffffffff<br />šššššššš * which means we return 0xff to the caller.<br />šššššššš */<br />-šššššš if (WAIT_FOR_RFCSR(rt2x00dev, &reg)) {<br />-šššššššššššššš reg = 0;<br />-šššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_REGNUM, word);<br />-šššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_WRITE, 0);<br />-šššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_BUSY, 1);<br />+šššššš switch (rt2x00dev->chip.rf) {<br />+šššššš case RF7620:<br />+šššššššššššššš if (WAIT_FOR_RFCSR_MT7620(rt2x00dev, &reg)) {<br />+šššššššššššššššššššššš reg = 0;<br />+šššššššššššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_REGNUM_MT7620, word);<br />+šššššššššššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_WRITE_MT7620, 0);<br />+šššššššššššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_BUSY_MT7620, 1);<br />+<br />+šššššššššššššššššššššš rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);<br />+<br />+šššššššššššššššššššššš WAIT_FOR_RFCSR_MT7620(rt2x00dev, &reg);<br />+šššššššššššššš }<br />+šššššššššššššš break;<br />+šššššš default:<br />+šššššššššššššš if (WAIT_FOR_RFCSR(rt2x00dev, &reg)) {<br />+šššššššššššššššššššššš reg = 0;<br />+šššššššššššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_REGNUM, word);<br />+šššššššššššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_WRITE, 0);<br />+šššššššššššššššššššššš rt2x00_set_field32(&reg, RF_CSR_CFG_BUSY, 1);<br />š<br />-šššššššššššššš rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);<br />+šššššššššššššššššššššš rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);<br />š<br />-šššššššššššššš WAIT_FOR_RFCSR(rt2x00dev, &reg);<br />+šššššššššššššššššššššš WAIT_FOR_RFCSR(rt2x00dev, &reg);<br />+šššššššššššššš }<br />+šššššššššššššš break;<br />ššššššš }<br />š<br />ššššššš *value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA);<br />@@ -198,6 +253,12 @@<br />ššššššš mutex_unlock(&rt2x00dev->csr_mutex);<br />š}</div><div>š</div><div>use call</div><div>*value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA);</div><div>for both case - default and mt7620. I call</div><div>*value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA_MT7620);</div><div>for mt7620 :)</div><div>š</div><div>2. Binary images: <a href="https://yadi.sk/d/OeTxrigZVMg8g">https://yadi.sk/d/OeTxrigZVMg8g</a></div><div>Dlink dir620f1 is my test board (pkg_id=0, chip_ver=2, eco_num=3 - auto detect not working yet). AFAIK asus rt-n14u use the same.</div><div>š</div></blockquote><div>Updated.</div><div>š</div><div>---<br />serge</div><div>š</div>