<div dir="auto">Better to extend the match data struct that is set in the OF match table. That is already used to specify the reference voltage as it is different between ast2400 and ast2500.  Either add a bool or a hook for running init code.</div><div class="gmail_extra"><br><div class="gmail_quote">On Jul 13, 2017 11:35 PM, "Mykola Kostenok" <<a href="mailto:c_mykolak@mellanox.com">c_mykolak@mellanox.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div class="m_-6752518815872725745WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Hi, Rick.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Thanks for reply.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">We definitely have an issue with adc, without this initialization.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">This without our changes:<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">root@msn:~# cat /sys/bus/iio/devices/iio\:<wbr>device0/i*<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">653<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">And with:<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">root@msn:~# cat /sys/bus/iio/devices/iio\:<wbr>device0/i*<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">755<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">776<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">715<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">681<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">657<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">771<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">770<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">759<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"Calibri",sans-serif;color:black">0<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">We using AST2520, but it should not make any difference.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">According to our output, this initialization is necessary. Possibly it could work without it, but in our case it doesn’t.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Will it be OK to do this initialization only for ast2500:<u></u><u></u></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">if (strcmp(model_data->model_name , ast2500_model_data.model_name) == 0)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Best regards. Mykola Kostenok.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Rick Altherr [mailto:<a href="mailto:raltherr@google.com" target="_blank">raltherr@google.com</a>]
<br>
<b>Sent:</b> Thursday, July 13, 2017 9:33 PM<br>
<b>To:</b> Mykola Kostenok <<a href="mailto:c_mykolak@mellanox.com" target="_blank">c_mykolak@mellanox.com</a>><br>
<b>Cc:</b> Joel Stanley <<a href="mailto:joel@jms.id.au" target="_blank">joel@jms.id.au</a>>; OpenBMC Maillist <<a href="mailto:openbmc@lists.ozlabs.org" target="_blank">openbmc@lists.ozlabs.org</a>>; Vadim Pasternak <<a href="mailto:vadimp@mellanox.com" target="_blank">vadimp@mellanox.com</a>>; Ohad Oz <<a href="mailto:ohado@mellanox.com" target="_blank">ohado@mellanox.com</a>><br>
<b>Subject:</b> Re: [PATCH linux dev-4.10] iio: aspeed-adc: wait for initial sequence.<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Huh.  We've been getting valid readings without this on our AST2500 systems.  Regardless, it is correct for AST2500.  On AST2400 though, there is no INIT_RDY bit.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Thu, Jul 13, 2017 at 7:28 AM, Mykola Kostenok <<a href="mailto:c_mykolak@mellanox.com" target="_blank">c_mykolak@mellanox.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal" style="margin-bottom:12.0pt">This patch enables adc engine at initialization time and waits<br>
for the initial sequence completion before enabling adc channels.<br>
<br>
Without this code adc channels are not functional and shows<br>
zeros for all connected channels.<br>
<br>
Tested on mellanox msn platform.<br>
<br>
Signed-off-by: Mykola Kostenok <<a href="mailto:c_mykolak@mellanox.com" target="_blank">c_mykolak@mellanox.com</a>><br>
---<br>
 drivers/iio/adc/aspeed_adc.c | 20 ++++++++++++++++++++<br>
 1 file changed, 20 insertions(+)<br>
<br>
diff --git a/drivers/iio/adc/aspeed_adc.c b/drivers/iio/adc/aspeed_adc.c<br>
index 2283ed2..e4ad6ef 100644<br>
--- a/drivers/iio/adc/aspeed_adc.c<br>
+++ b/drivers/iio/adc/aspeed_adc.c<br>
@@ -22,6 +22,7 @@<br>
<br>
 #include <linux/iio/iio.h><br>
 #include <linux/iio/driver.h><br>
+#include <linux/iopoll.h><br>
<br>
 #define ASPEED_RESOLUTION_BITS         10<br>
 #define ASPEED_CLOCKS_PER_SAMPLE       12<br>
@@ -38,6 +39,11 @@<br>
<br>
 #define ASPEED_ENGINE_ENABLE           BIT(0)<br>
<br>
+#define ASPEED_ADC_CTRL_INIT_RDY       BIT(8)<br>
+<br>
+#define ASPEED_ADC_INIT_POLLING_TIME   500<br>
+#define ASPEED_ADC_INIT_TIMEOUT                500000<br>
+<br>
 struct aspeed_adc_model_data {<br>
        const char *model_name;<br>
        unsigned int min_sampling_rate; // Hz<br>
@@ -210,6 +216,20 @@ static int aspeed_adc_probe(struct platform_device *pdev)<br>
                goto scaler_error;<br>
        }<br>
<br>
+       /* Enable engine in normal mode. */<br>
+       writel(ASPEED_OPERATION_MODE_<wbr>NORMAL | ASPEED_ENGINE_ENABLE,<br>
+              data->base + ASPEED_REG_ENGINE_CONTROL);<br>
+<br>
+       /* Wait for initial sequence complete. */<br>
+       ret = readl_poll_timeout(data->base + ASPEED_REG_ENGINE_CONTROL,<br>
+                                adc_engine_control_reg_val,<br>
+                                adc_engine_control_reg_val &<br>
+                                ASPEED_ADC_CTRL_INIT_RDY,<br>
+                                ASPEED_ADC_INIT_POLLING_TIME,<br>
+                                ASPEED_ADC_INIT_TIMEOUT);<br>
+       if (ret)<br>
+               goto scaler_error;<br>
+<br>
        /* Start all channels in normal mode. */<br>
        clk_prepare_enable(data->clk_<wbr>scaler->clk);<br>
        adc_engine_control_reg_val = GENMASK(31, 16) |<br>
<span class="m_-6752518815872725745hoenzb"><span style="color:#888888">--</span></span><span style="color:#888888"><br>
<span class="m_-6752518815872725745hoenzb">2.8.4</span></span><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div></div>