GPIO conflict with kernel root?

I followed the PinMux wiki to enable the GPIOs, i.e. GPIO-168.
http://elinux.org/BeagleBoardPinMux#U-Boot

it seems the gpio-168 is set to M4 in the default u-boot config.
According to the previous link, in the kernel setup, the
CONFIG_OMAP_MUX has to be enable. But when the CONFIG_OMAP_MUX is
enabled, my kernel won't find the root file system anymore. Error
message is shown at the bottom.

Another question is related to the mux.c file. The gpio-168 is AF15.
The default mux.c file is set to MODE0. Without enable the OMAP_MUX,
if I change mux.c to MODE4, will that enable the gpio-168?

Thanks a lot.

MUX_CFG_34XX("AF15_34XX_I2C2_SCL", 0x1be,
    OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLUP)

Error message:

[ 317.434753] fbcvt: 1024x768@60: CVT Name - .786M3-R
[ 317.470184] Console: switching to colour frame buffer device 128x48
[ 317.490936] clock: clksel_round_rate_div: dpll4_m4_ck target_rate 48000000
[ 317.497863] clock: new_div = 9, new_rate = 48000000
[ 317.511779] Waiting for root device /dev/mmcblk0p2...
[ 318.064971] mmc0: new high speed SDHC card at address 1234
[ 318.071166] mmcblk0: mmc0:1234 SA08G 7.40 GiB (ro)
[ 318.076293] mmcblk0: p1 p2
[ 318.166931] VFS: Cannot open root device "mmcblk0p2" or unknown-block(179,2)
[ 318.174041] Please append a correct "root=" boot option; here are
the available partitions:
[ 318.182525] 1f00 512 mtdblock0 (driver?)
[ 318.187530] 1f01 1920 mtdblock1 (driver?)
[ 318.192565] 1f02 128 mtdblock2 (driver?)
[ 318.197570] 1f03 4096 mtdblock3 (driver?)
[ 318.202606] 1f04 255488 mtdblock4 (driver?)
[ 318.207641] b300 7763968 mmcblk0 driver: mmcblk
[ 318.212890] b301 329301 mmcblk0p1
[ 318.217224] b302 7430062 mmcblk0p2
[ 318.221588] Kernel panic - not syncing: VFS: Unable to mount root fs
on unknown-block(179,2)

Hi Chao,

CONFIG_OMAP_MUX has to be enable. But when the CONFIG_OMAP_MUX is
enabled, my kernel won't find the root file system anymore. Error
message is shown at the bottom.

It seems that the code around MMC detection/write protect is not
implemented well. If you comment out the line
        //omap_cfg_reg(AH8_34XX_GPIO29);
in arch/arm/mach-omap2/board-omap3beagle.c it will work again. My u-
boot configures this pin to mode3, whereas kernel reconfigures it to
mode4(gpio29) when CONFIG_OMAP_MUX is enabled. I am kind of unsure
what the exact meaning of this pin is on beagle board. Schematic and
description of beagleboard contradict each other.

Another question is related to the mux.c file. The gpio-168 is AF15.
The default mux.c file is set to MODE0. Without enable the OMAP_MUX,
if I change mux.c to MODE4, will that enable the gpio-168?

Without enable CONFIG_OMAP_MUX nothing will happen, even if you have
it enabled that won't change anything unless you do the proper
omap_cfg_reg() call.
Please be aware that the mux.c and the enum in arch/arm/plat-omap/
include/mach/mux.h must correspond when adding/removing settings. This
is kind of error prone.

Regards, Ulrich

I think exact causes are described here:

http://groups.google.com/group/beagleboard/browse_thread/thread/3a7f625695275812/fe01e7f5fbe27f98?lnk=gst&q=config_omap_mux#fe01e7f5fbe27f98