飞思卡尔mx6_sabresd_board_init

来源:互联网 发布:北京百度快速排名优化 编辑:程序博客网 时间:2024/04/29 19:02

kernel_imx/arch/arm/mach-mx6/board-mx6q_sabresd.c


[cpp] view plain copy
  1. static void __init mx6_sabresd_board_init(void)  
  2. {  
  3.     int i;  
  4.     int ret;  
  5.     struct clk *clko, *clko2;  
  6.     struct clk *new_parent;  
  7.     int rate;  
  8.   
  9.     //判断cpu类型和pad初始化;  
  10.     if (cpu_is_mx6q())  
  11.         mxc_iomux_v3_setup_multiple_pads(mx6q_sabresd_pads,  
  12.             ARRAY_SIZE(mx6q_sabresd_pads));  
  13.     else if (cpu_is_mx6dl()) {  
  14.         //配置管脚:i2c/i2s/......  
  15.         mxc_iomux_v3_setup_multiple_pads(mx6dl_sabresd_pads,  
  16.             ARRAY_SIZE(mx6dl_sabresd_pads));  
  17.     }  
  18.   
  19. #ifdef CONFIG_FEC_1588  
  20.     /* Set GPIO_16 input for IEEE-1588 ts_clk and RMII reference clock 
  21.      * For MX6 GPR1 bit21 meaning: 
  22.      * Bit21:       0 - GPIO_16 pad output 
  23.      *              1 - GPIO_16 pad input 
  24.      */  
  25.      mxc_iomux_set_gpr_register(1, 21, 1, 1);  
  26. #endif  
  27.   
  28.     //(1)申请GPIO=>(2)设置GPIO=>(3)释放GPIO=>为了别人可以使用;类似互斥量;  
  29.     gpio_request(SABRESD_PHY_RST, "phy_reset"); //申请一个引脚;"phy_reset"是描述;  
  30.     gpio_direction_output(SABRESD_PHY_RST, 1);      //设置端口为输出;并设为高电平;  
  31.     gpio_free(SABRESD_PHY_RST);                     //释放GPIO;  
  32.       
  33.     gp_reg_id = sabresd_dvfscore_data.reg_id;  
  34.     soc_reg_id = sabresd_dvfscore_data.soc_id;  
  35.     pu_reg_id = sabresd_dvfscore_data.pu_id;  
  36.     mx6q_sabresd_init_uart();                       //串口初始化;  
  37.   
  38.     /* 
  39.      * MX6DL/Solo only supports single IPU 
  40.      * The following codes are used to change ipu id 
  41.      * and display id information for MX6DL/Solo. Then 
  42.      * register 1 IPU device and up to 2 displays for 
  43.      * MX6DL/Solo 
  44.      */  
  45.     if (cpu_is_mx6dl()) {  
  46.         ldb_data.ipu_id = 0;  
  47.         ldb_data.disp_id = 0;  
  48.     //  hdmi_core_data.ipu_id = 0;  
  49.     //  hdmi_core_data.disp_id = 0;  
  50.     //  mipi_dsi_pdata.ipu_id = 0;  
  51.     //  mipi_dsi_pdata.disp_id = 1;  
  52.     }  
  53.     imx6q_add_mxc_hdmi_core(&hdmi_core_data);  
  54.   
  55.     imx6q_add_ipuv3(0, &ipu_data[0]);  
  56.     if (cpu_is_mx6q()) {  
  57.         imx6q_add_ipuv3(1, &ipu_data[1]);  
  58.         for (i = 0; i < 4 && i < ARRAY_SIZE(sabresd_fb_data); i++)  
  59.             imx6q_add_ipuv3fb(i, &sabresd_fb_data[i]);  
  60.     } else  
  61.         for (i = 0; i < 2 && i < ARRAY_SIZE(sabresd_fb_data); i++)  
  62.             imx6q_add_ipuv3fb(i, &sabresd_fb_data[i]);  
  63.   
  64.     imx6q_add_vdoa();  
  65.     //imx6q_add_mipi_dsi(&mipi_dsi_pdata);  
  66.     //imx6q_add_lcdif(&lcdif_data);  
  67.     imx6q_add_ldb(&ldb_data);       //LVDS作为主显示;  
  68.     imx6q_add_v4l2_output(0);  
  69.     imx6q_add_v4l2_capture(0, &capture_data[0]);    //Camera接口  
  70.     imx6q_add_v4l2_capture(1, &capture_data[1]);    //Camera接口  
  71.     imx6q_add_mipi_csi2(&mipi_csi2_pdata);  
  72.     imx6q_add_imx_snvs_rtc();  
  73.       
  74.     //imx6q_add_flexcan(0, &mx6q_sabresd_flexcan0_pdata);  
  75.       
  76.     imx6q_add_imx_caam();  
  77.   
  78.     if (board_is_mx6_reva()) {  
  79.         strcpy(mxc_i2c0_board_info[0].type, "wm8958");  
  80.         mxc_i2c0_board_info[0].platform_data = &wm8958_config_data;  
  81.     } else {  
  82.         //strcpy(mxc_i2c0_board_info[0].type, "wm8962");  
  83.         //mxc_i2c0_board_info[0].platform_data = &wm8962_config_data;  
  84.     }  
  85.     //imx6q_add_device_gpio_leds();  
  86.   
  87.     imx6q_add_imx_i2c(0, &mx6q_sabresd_i2c_data);   //添加i2c platform devices;  
  88.     imx6q_add_imx_i2c(1, &mx6q_sabresd_i2c_data);   //添加i2c platform devices;  
  89.     imx6q_add_imx_i2c(2, &mx6q_sabresd_i2c_data);   //添加i2c platform devices;  
  90.     i2c_register_board_info(0, mxc_i2c0_board_info,  
  91.             ARRAY_SIZE(mxc_i2c0_board_info));  
  92.     i2c_register_board_info(1, mxc_i2c1_board_info,  
  93.             ARRAY_SIZE(mxc_i2c1_board_info));  
  94.     i2c_register_board_info(2, mxc_i2c2_board_info,  
  95.             ARRAY_SIZE(mxc_i2c2_board_info));  
  96.     /* SPI */  
  97.     //imx6q_add_ecspi(0, &mx6q_sabresd_spi_data);  
  98.     //spi_device_init();  
  99.   
  100.     imx6q_add_mxc_hdmi(&hdmi_data);  
  101.   
  102.     imx6q_add_anatop_thermal_imx(1, &mx6q_sabresd_anatop_thermal_data);  
  103.     imx6_init_fec(fec_data);  
  104.     imx6q_add_pm_imx(0, &mx6q_sabresd_pm_data);  
  105.   
  106.     /* Move sd4 to first because sd4 connect to emmc. 
  107.        Mfgtools want emmc is mmcblk0 and other sd card is mmcblk1. 
  108.     */  
  109.     imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabresd_sd4_data);  
  110.     imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);  
  111.     imx6q_add_sdhci_usdhc_imx(1, &mx6q_sabresd_sd2_data);  
  112.     imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);  
  113.     imx6q_sabresd_init_usb();  
  114.   
  115.     imx6q_add_vpu();  
  116.     imx6q_init_audio();  
  117.     platform_device_register(&sabresd_vmmc_reg_devices);  
  118.     imx_asrc_data.asrc_core_clk = clk_get(NULL, "asrc_clk");  
  119.     imx_asrc_data.asrc_audio_clk = clk_get(NULL, "asrc_serial_clk");  
  120.     imx6q_add_asrc(&imx_asrc_data);  
  121.   
  122.     imx6q_add_mxc_pwm(0);       //增加pwm0  
  123.     //imx6q_add_mxc_pwm(1);  
  124.     //imx6q_add_mxc_pwm(2);  
  125.     //imx6q_add_mxc_pwm(3);  
  126.     //pwm0控制lvds背光;  
  127.     imx6q_add_mxc_pwm_backlight(0, &mx6_sabresd_pwm_backlight_data);  
  128.   
  129.     imx6q_add_otp();  
  130.     imx6q_add_viim();  
  131.     imx6q_add_imx2_wdt(0, NULL);  
  132.     imx6q_add_dma();  
  133.   
  134.     imx6q_add_dvfs_core(&sabresd_dvfscore_data);  
  135. #ifndef CONFIG_MX6_INTER_LDO_BYPASS  
  136.     mx6_cpu_regulator_init();  
  137. #endif  
  138.   
  139.     imx6q_add_ion(0, &imx_ion_data,  
  140.         sizeof(imx_ion_data) + sizeof(struct ion_platform_heap));  
  141.     imx6q_add_device_buttons();  
  142.   
  143.     imx6q_add_hdmi_soc();  
  144.     imx6q_add_hdmi_soc_dai();  
  145.   
  146.     if (cpu_is_mx6dl()) {  
  147.         imx6dl_add_imx_pxp();  
  148.         imx6dl_add_imx_pxp_client();  
  149.         if (epdc_enabled) {  
  150.             mxc_register_device(&max17135_sensor_device, NULL);  
  151.             imx6dl_add_imx_epdc(&epdc_data);  
  152.         }  
  153.     }  
  154.     /* 
  155.     ret = gpio_request_array(mx6q_sabresd_flexcan_gpios, 
  156.             ARRAY_SIZE(mx6q_sabresd_flexcan_gpios)); 
  157.     if (ret) 
  158.         pr_err("failed to request flexcan1-gpios: %d\n", ret); 
  159.     else 
  160.         imx6q_add_flexcan0(&mx6q_sabresd_flexcan0_pdata); 
  161.     */  
  162.   
  163.     clko2 = clk_get(NULL, "clko2_clk");  
  164.     if (IS_ERR(clko2))  
  165.         pr_err("can't get CLKO2 clock.\n");  
  166.   
  167.     new_parent = clk_get(NULL, "osc_clk");  
  168.     if (!IS_ERR(new_parent)) {  
  169.         clk_set_parent(clko2, new_parent);  
  170.         clk_put(new_parent);  
  171.     }  
  172.     rate = clk_round_rate(clko2, 24000000);  
  173.     clk_set_rate(clko2, rate);  
  174.     clk_enable(clko2);  
  175.   
  176.     /* Camera and audio use osc clock */  
  177.     clko = clk_get(NULL, "clko_clk");  
  178.     if (!IS_ERR(clko))  
  179.         clk_set_parent(clko, clko2);  
  180.   
  181.     /* Enable Aux_5V */  
  182.     gpio_request(SABRESD_AUX_5V_EN, "aux_5v_en");  
  183.     gpio_direction_output(SABRESD_AUX_5V_EN, 1);  
  184.     gpio_set_value(SABRESD_AUX_5V_EN, 1);  
  185.   
  186. #ifndef CONFIG_IMX_PCIE  
  187.     /* enable pcie 3v3 power without pcie driver */  
  188.     pcie_3v3_power();  
  189.     mdelay(10);  
  190.     pcie_3v3_reset();  
  191. #endif  
  192.   
  193.     //gps_power_on(true);  
  194.     /* Register charger chips */  
  195.     platform_device_register(&sabresd_max8903_charger_1);  
  196.     pm_power_off = mx6_snvs_poweroff;  
  197.     imx6q_add_busfreq();  
  198.   
  199.     /* Add PCIe RC interface support */  
  200.     imx6q_add_pcie(&mx6_sabresd_pcie_data);  
  201.   
  202.     imx6_add_armpmu();  
  203.     imx6q_add_perfmon(0);  
  204.     imx6q_add_perfmon(1);  
  205.     imx6q_add_perfmon(2);  
  206. }  

0 0
原创粉丝点击