i.mx51 擴充ESDHC3 (kernel 2.6.31)

來源:互聯網
上載者:User

擴充一個ESDHC3

一、硬體接線:

ESDHC3 所用到的引腳

 

 

port            Pad                Mode CLK              NANDF_CS7             ALT5CMD              NANDF_RDY_INT         ALT5DAT0             NANDF_D8              ALT5DAT1             NANDF_D9              ALT5DAT2             NANDF_D10             ALT5DAT3/cd          NANDF_D11             ALT5

 

二、mmc3 驅動移植

正常的mmc1卡驅動的插入時的調試資訊

 

mmc1: new high speed SD card at address 0001
mmcblk1: mmc1:0001 APPSD 481 MiB 
mmcblk1: p1

 

1、vi arch/arm/plat-mxc/include/mach/mx5x.h +238

238 + #define MXC_DMA_CHANNEL_MMC3        MXC_DMA_DYNAMIC_CHANNEL

 

2、cd kernel_imx-pad/arch/arm/mach-mx5/

vi mx51_babbage.c +903

 

903 +    mxcsdhc3_device.resource[2].start = IOMUX_TO_IRQ(MX51_PIN_GPIO1_6);
904 +    mxcsdhc3_device.resource[2].end = IOMUX_TO_IRQ(MX51_PIN_GPIO1_6);
905 +    mxcsdhc2_device.resource[2].start = 132;
906 +    mxcsdhc2_device.resource[2].end = 132;

 

 

-  static int sdhc_write_protect(struct device *dev)
- {
-  unsigned short rc = 0;

-  if (to_platform_device(dev)->id == 0)
-   rc = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_1));
-  else
-   rc = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5));

-  return rc;
- }

 623 static int sdhc_write_protect(struct device *dev)
 624 {
 625     unsigned short rc = 0;
 626 
 627     if (to_platform_device(dev)->id == 0){
 628         rc = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_1));
 629     }
 630     if (to_platform_device(dev)->id == 1){
 631         rc = 0 ;
 632     }
 633 //  else
 634     if (to_platform_device(dev)->id == 2){
 635         rc = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5));
 636     }
 637 //  printk("=============protect-rc=%d=====",rc);
 638     return rc;
 639 }

 

 

-  static unsigned int sdhc_get_card_det_status(struct device *dev)
- {
-  int ret;

-  if (to_platform_device(dev)->id == 0) {
-   ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_0));
-   return ret;
-  } else {  /* config the det pin for SDHC2 */
-   if (board_is_rev(BOARD_REV_2))
-   /* BB2.5 */
-   ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6));
-  else
-   /* BB2.0 */
-   ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4));
-  return ret;
-  }
- }

//add

 641 static unsigned int sdhc_get_card_det_status(struct device *dev)
 642 {
 643     int ret;
 644 
 645     if (to_platform_device(dev)->id == 0) {
 646         ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_0));
 647     }
 648     if (to_platform_device(dev)->id == 1) {
 649         ret=0 ;
 650     }
 651     if (to_platform_device(dev)->id == 2) {
 652         ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6));
 653     }
 654 //  printk("=============protect-ret=%d=====",ret);
 655     return ret ;
 656 
 657 //  } else {        /* config the det pin for SDHC2 */
 658 //      if (board_is_rev(BOARD_REV_2))
 659 //          /* BB2.5 */
 660 //          ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6));
 661 //      else
 662 //          /* BB2.0 */
 663 //          ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4));
 664 //      return ret;
 665 //  }
 666 }

 //add

 692 static struct mxc_mmc_platform_data mmc3_data = {
 693     .ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29 | MMC_VDD_29_30 |
 694         MMC_VDD_31_32,
 695     .caps = MMC_CAP_4_BIT_DATA,
 696     .min_clk = 150000,
 697     .max_clk = 50000000,
 698     .card_inserted_state = 0,
 699     .status = sdhc_get_card_det_status,
 700     .wp_status = sdhc_write_protect,
 701     .clock_mmc = "esdhc_clk",
 702 };

 

3、vi mx51_babbage_gpio.c

 

555 //add by renjie
556     mxc_iomux_set_input(MUX_IN_ESDHC3_IPP_DAT0_IN_SELECT_INPUT,0x01);
557     mxc_iomux_set_input(MUX_IN_ESDHC3_IPP_DAT1_IN_SELECT_INPUT,0x01);
558     mxc_iomux_set_input(MUX_IN_ESDHC3_IPP_DAT2_IN_SELECT_INPUT,0x01);
559     mxc_iomux_set_input(MUX_IN_ESDHC3_IPP_DAT3_IN_SELECT_INPUT,0x01);

- if (board_is_rev(BOARD_REV_2)) {
-  /* SD2 CD for BB2.5 */
-  gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6), "gpio1_6");
-  gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6));
- } else {
-  /* SD2 CD for BB2.0 */
-  gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4), "gpio1_4");
-  gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4));
- }

569 +  //  if (board_is_rev(BOARD_REV_2)) {
570 +        /* SD2 CD for BB2.5 */
571 +        gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6), "gpio1_6");
572 +        gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6));
573 + //  } else {
574 +        /* SD2 CD for BB2.0 */
575 +        gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4), "gpio1_4");
576 +        gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4));
577 + //  }

 

 

//add

343      {          /* wifi Ctl */
344      MX51_PIN_GPIO1_9, IOMUX_CONFIG_ALT0,
345      (PAD_CTL_SRE_SLOW | PAD_CTL_DRV_LOW | PAD_CTL_ODE_OPENDRAIN_NONE |
346               PAD_CTL_PUE_KEEPER | PAD_CTL_PKE_ENABLE |
347               PAD_CTL_HYS_ENABLE),
348      },
349      //end 
350     {    /* esdhc3 */
351      MX51_PIN_NANDF_RDY_INT, IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION,
352      (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
353      },
354     {
355      MX51_PIN_NANDF_CS7, IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION,
356      (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
357      },
358     {
359      MX51_PIN_NANDF_D8, IOMUX_CONFIG_ALT5,
360      (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
361      },
362     {
363      MX51_PIN_NANDF_D9, IOMUX_CONFIG_ALT5,
364      (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
365      },
366     {
367      MX51_PIN_NANDF_D10, IOMUX_CONFIG_ALT5,
368      (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
369      },
370     {
371      MX51_PIN_NANDF_D11, IOMUX_CONFIG_ALT5,
372      (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
373      },

 

4、vi kernel_imx-pad/arch/arm/mach-mx5/dma.c +250

 

 //add for mmc3
static mxc_sdma_channel_params_t mxc_sdma_mmc2_width1_params = {
 .chnl_params = {
   .watermark_level = MXC_SDHC_MMC_WML,
   .per_address =
   MMC_SDHC3_BASE_ADDR + MXC_MMC_BUFFER_ACCESS,
   .peripheral_type = MMC,
   .transfer_type = per_2_emi,
   .event_id = DMA_REQ_SDHC3,
   .bd_number = 32,
   .word_size = TRANSFER_32BIT,
   },
 .channel_num = MXC_DMA_CHANNEL_MMC3,
 .chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
};

static mxc_sdma_channel_params_t mxc_sdma_mmc2_width4_params = {
 .chnl_params = {
   .watermark_level = MXC_SDHC_SD_WML,
   .per_address =
   MMC_SDHC3_BASE_ADDR + MXC_MMC_BUFFER_ACCESS,
   .peripheral_type = MMC,
   .transfer_type = per_2_emi,
   .event_id = DMA_REQ_SDHC3,
   .bd_number = 32,
   .word_size = TRANSFER_32BIT,
   },
 .channel_num = MXC_DMA_CHANNEL_MMC3,
 .chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
};
//add end

//add

1137     {MXC_DMA_MMC3_WIDTH_1, &mxc_sdma_mmc3_width1_params},
1138     {MXC_DMA_MMC3_WIDTH_4, &mxc_sdma_mmc3_width4_params},

 

5、dma.h

 

// add

40     MXC_DMA_MMC3_WIDTH_1,
41     MXC_DMA_MMC3_WIDTH_4,

 

6、driver/mmc/host/mx_sdhci.c  +969

 

- 969             if (mmc->ios.bus_width == MMC_BUS_WIDTH_4) {
- 970                 if (host->id == 0)
- 971                     dev_id = MXC_DMA_MMC1_WIDTH_4;
- 972                 else
- 973                     dev_id = MXC_DMA_MMC2_WIDTH_4;
- 974             } else {
- 975                 if (host->id == 0)
- 976                     dev_id = MXC_DMA_MMC1_WIDTH_1;
- 977                 else
- 978                     dev_id = MXC_DMA_MMC2_WIDTH_1;
- 979             }

//add

   if (mmc->ios.bus_width == MMC_BUS_WIDTH_4) {
    if (host->id == 0){
     dev_id = MXC_DMA_MMC1_WIDTH_4;
    }
    if (host->id == 1){
     dev_id = MXC_DMA_MMC2_WIDTH_4;
    }
    if (host->id == 2){
     dev_id = MXC_DMA_MMC3_WIDTH_4;
    }
   } else {
    if (host->id == 0){
     dev_id = MXC_DMA_MMC1_WIDTH_1;
    } 
    if (host->id == 1){
     dev_id = MXC_DMA_MMC2_WIDTH_1;
    } 
    if (host->id == 2){
     dev_id = MXC_DMA_MMC3_WIDTH_1
    }
   }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.