<font size=2 face="sans-serif">Thanks..</font>
<br>
<br><font size=2 face="sans-serif">it worked! </font>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">Von:      
 </font><font size=1 face="sans-serif">Sascha Hauer <s.hauer@pengutronix.de></font>
<br><font size=1 color=#5f5f5f face="sans-serif">An:      
 </font><font size=1 face="sans-serif">christian.buettner@rafi.de,
</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Kopie:      
 </font><font size=1 face="sans-serif">barebox@lists.infradead.org</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Datum:      
 </font><font size=1 face="sans-serif">03.08.2012 15:21</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Betreff:    
   </font><font size=1 face="sans-serif">Re: boot init
code depending on i2c eeprom value</font>
<br>
<hr noshade>
<br>
<br>
<br><tt><font size=2>On Fri, Aug 03, 2012 at 10:06:28AM +0200, christian.buettner@rafi.de
wrote:<br>
> Hi all,<br>
> <br>
> i need to set the pin-mux of the board init code depending on an ID
coming <br>
> from <br>
> an i2C EEPROM of the board.<br>
> Is it possible to do something like this:<br>
> <br>
> <br>
> ...<br>
> <br>
> //Using the e.g. the postcore_initcall phase to init i2C<br>
> static int<br>
> ecuv6_postcore_init(void)<br>
> {<br>
>         //Set I2C EEPROM (24C32R) PIN MUX<br>
>         mxc_iomux_v3_setup_multiple_pads(i2c_eeprom_pads,
<br>
> ARRAY_SIZE(i2c_eeprom_pads));<br>
>         imx53_add_i2c2(NULL);<br>
>         return 0;<br>
> }<br>
> postcore_initcall(ecuv6_postcore_init);<br>
> <br>
> //In the console_initcall phase, i2C should be probed to read ID<br>
> static int<br>
> ecuv6_console_init(void)<br>
> {<br>
>         imx53_init_lowlevel(0);<br>
>         ecuv6_set_system_serial();<br>
>  <br>
>         //get_bb_pcb_number reads data from <br>
>         char bb_ID;<br>
>         bb_ID = get_i2c_ID();<br>
> <br>
>         //Set Pinmux depending on i2C result<br>
>         if(bb_ID = 0xAB) {<br>
>                 mxc_iomux_v3_setup_multiple_pads(AB_pads,
ARRAY_SIZE(<br>
> AB_pads));<br>
>         }<br>
>         else if(bb_ID = 0xCD) {<br>
>                 mxc_iomux_v3_setup_multiple_pads(CD_pads,
ARRAY_SIZE(<br>
> CD_pads));<br>
>         }<br>
>  <br>
>         imx53_add_uart0();<br>
> <br>
>         return 0;<br>
> }<br>
> console_initcall(ecuv6_console_init);<br>
> <br>
> ...<br>
> <br>
> <br>
> Actually this is not working. The i2c_imx:i2c_imx_probe(..) function
gets <br>
> called later.<br>
> Is there a way or concept to do something like this?<br>
<br>
You must call get_i2c_ID after registering the i2c device. you can call<br>
mxc_iomux_v3_setup_multiple_pads multiple times, i.e. once for the UART<br>
pins in console_init and once later when you know what hardware you<br>
have.<br>
This of cause does not work when your console pins depend on the<br>
hardware version, in this case you must register your console in a<br>
device_initcall later.<br>
<br>
Sascha<br>
<br>
-- <br>
Pengutronix e.K.                
          |          
                  |<br>
Industrial Linux Solutions              
  | </font></tt><a href=http://www.pengutronix.de/><tt><font size=2>http://www.pengutronix.de/</font></tt></a><tt><font size=2>
 |<br>
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0  
 |<br>
Amtsgericht Hildesheim, HRA 2686           | Fax:
  +49-5121-206917-5555 |<br>
</font></tt>
<br>