任务:修改SD卡CD管脚,CD管脚是用来给系统通知SD卡的插入与拔出消息的,tq3358默认用的是 spi0_cs1(GPIO0_6),现在要改为GPIO1_16
 
1. 查看原理图核心板原理图
   
 
MMC0的SDCD接的是GPIO0_6。
 
2. 查看 arch\arm\mach-omap2\mux33xx.c,这个文件是ti3358的管脚定义,不要修改。
    _AM33XX_MUXENTRY(SPI0_CS1, 0,
         "spi0_cs1", "uart3_rxd", NULL, "mmc0_pow",
         NULL, "mmc0_sdcd", NULL, "gpio0_6"),
这部分就是sd卡cd管脚的定义和功能服用描述。
然后找到GPIO1_16的管脚定义
   _AM33XX_MUXENTRY(GPMC_A0, 0,
         "gpmc_a0", "mii2_txen", "rgmii2_tctl", "rmii2_txen",
         NULL, NULL, NULL, "gpio1_16"),
 
3. 修改arch\arm\mach-omap2\board-am335xevm.c,这个文件是ti3358硬件管脚的配置。
找到mmc初始化的位置
    static void mmc0_init(int evm_id, int profile)
     {
                setup_pin_mux(mmc0_pin_mux);
                omap2_hsmmc_init(am335x_mmc);
                return;
     }
从初始化的函数可以看出,主要修改两个结构体。
1) mmc0_pin_mux 与sd卡相关的管脚配置
       /* Module pin mux for mmc0 */
      static struct pinmux_config mmc0_pin_mux[] = {
              {"mmc0_dat3.mmc0_dat3",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
              {"mmc0_dat2.mmc0_dat2",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
              {"mmc0_dat1.mmc0_dat1",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
              {"mmc0_dat0.mmc0_dat0",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
              {"mmc0_clk.mmc0_clk",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
              {"mmc0_cmd.mmc0_cmd",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
              {"ecap0_in_pwm0_out.mmc0_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
              {"spi0_cs1.mmc0_sdcd",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
通过刚才查看核心板的原理图,显然是修改这一行,照猫话虎的改为:注意,前面的字符串只是起到
一个标识的作用,后面的模式号才是正在起作用的。
{"gpmc_a0.gpio1_16",OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
             {NULL, 0},
      };
2) am335x_mmc sd卡的硬件配置信息
         static struct omap2_hsmmc_info am335x_mmc[] __initdata = {
                {
                     .mmc            = 1,
                     .caps           = MMC_CAP_4_BIT_DATA,
                     .gpio_cd        = GPIO_TO_PIN(0, 6),
修改这一行为
                    .gpio_cd        = GPIO_TO_PIN(1, 16),
 
                    .gpio_wp        = GPIO_TO_PIN(3, 18),
                     .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */
                },
               {
                     .mmc            = 0,    /* will be set at runtime */
                },
               {
                     .mmc            = 0,    /* will be set at runtime */
                },
                {}      /* Terminator */
         };
4. 将board-am335xevm.c用到的有关gpio1_16的代码屏蔽掉,以免干扰。
在此文件里搜索gpmc_a0,因为ti的管脚都是复用的,gpio1_16这个管脚的默认名称可以从刚才 mux33xx.c 这个文件里找到,就是gpmc_a0。删除掉以下两行即可。
{"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},