讯为开发板的源码接口说明

来源:互联网 发布:信捷fc编程电缆制作 编辑:程序博客网 时间:2024/05/22 07:48

该源码位置在:arch/arm/mach-exynos/mach-itop4412.c

1. BSP的总的初始化(入口程序)

static void __init smdk4x12_machine_init(void){#ifdef CONFIG_S3C64XX_DEV_SPI    unsigned int gpio;    struct clk *sclk = NULL;    struct clk *prnt = NULL;#if 0   //remove by cym 20130529    struct device *spi0_dev = &exynos_device_spi0.dev;#ifndef CONFIG_FB_S5P_LMS501KF03    struct device *spi1_dev = &exynos_device_spi1.dev;#endif#endif    struct device *spi2_dev = &exynos_device_spi2.dev;#endif    /* remove by cym 20130426 */#if 0    int err;#endif    /* end remove */    pm_power_off = smdk4x12_power_off;    s3c_config_sleep_gpio_table = tc4_config_sleep_gpio_table;    samsung_board_rev = get_samsung_board_rev();#if defined(CONFIG_EXYNOS_DEV_PD) && defined(CONFIG_PM_RUNTIME)    exynos_pd_disable(&exynos4_device_pd[PD_MFC].dev);    exynos_pd_disable(&exynos4_device_pd[PD_G3D].dev);    exynos_pd_disable(&exynos4_device_pd[PD_LCD0].dev);    exynos_pd_disable(&exynos4_device_pd[PD_CAM].dev);    exynos_pd_disable(&exynos4_device_pd[PD_TV].dev);    exynos_pd_disable(&exynos4_device_pd[PD_GPS].dev);    exynos_pd_disable(&exynos4_device_pd[PD_GPS_ALIVE].dev);    exynos_pd_disable(&exynos4_device_pd[PD_ISP].dev);#elif defined(CONFIG_EXYNOS_DEV_PD)    /*         * These power domains should be always on         * without runtime pm support.         */    exynos_pd_enable(&exynos4_device_pd[PD_MFC].dev);    exynos_pd_enable(&exynos4_device_pd[PD_G3D].dev);    exynos_pd_enable(&exynos4_device_pd[PD_LCD0].dev);    exynos_pd_enable(&exynos4_device_pd[PD_CAM].dev);    exynos_pd_enable(&exynos4_device_pd[PD_TV].dev);    exynos_pd_enable(&exynos4_device_pd[PD_GPS].dev);    exynos_pd_enable(&exynos4_device_pd[PD_GPS_ALIVE].dev);    exynos_pd_enable(&exynos4_device_pd[PD_ISP].dev);#endif    s3c_i2c0_set_platdata(NULL);    i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));    s3c_i2c1_set_platdata(NULL);    i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));    s3c_i2c2_set_platdata(NULL);    i2c_register_board_info(2, i2c_devs2, ARRAY_SIZE(i2c_devs2));    init_lcd_type();    get_lcd_type();    setup_ft5x_width_height();    s3c_i2c3_set_platdata(NULL);    i2c_register_board_info(3, i2c_devs3, ARRAY_SIZE(i2c_devs3));    s3c_i2c4_set_platdata(NULL);    i2c_register_board_info(4, i2c_devs4, ARRAY_SIZE(i2c_devs4));#ifdef CONFIG_MPU_SENSORS_MPU6050B1    sensor_hw_init();#endif    s3c_i2c5_set_platdata(NULL);    i2c_register_board_info(5, i2c_devs5, ARRAY_SIZE(i2c_devs5));    //For S5K4EC (using i2c6)#ifndef CONFIG_CAN_MCP251X    s3c_i2c6_set_platdata(NULL);    i2c_register_board_info(6, i2c_devs6, ARRAY_SIZE(i2c_devs6));#endif    s3c_i2c7_set_platdata(NULL);    i2c_register_board_info(7, i2c_devs7, ARRAY_SIZE(i2c_devs7));#ifdef CONFIG_ANDROID_PMEM    android_pmem_set_platdata();#endif#if defined(CONFIG_FB_S5P_MIPI_DSIM)    mipi_fb_init();#endif#ifdef CONFIG_FB_S3C    dev_set_name(&s5p_device_fimd0.dev, "s3cfb.0");    clk_add_alias("lcd", "exynos4-fb.0", "lcd", &s5p_device_fimd0.dev);    clk_add_alias("sclk_fimd", "exynos4-fb.0", "sclk_fimd", &s5p_device_fimd0.dev);    s5p_fb_setname(0, "exynos4-fb");#if defined(CONFIG_LCD_AMS369FG06) || defined(CONFIG_LCD_LMS501KF03)    spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));#endif    s5p_fimd0_set_platdata(&smdk4x12_lcd0_pdata);#ifdef CONFIG_FB_MIPI_DSIM    s5p_device_mipi_dsim.dev.parent = &exynos4_device_pd[PD_LCD0].dev;#endif#ifdef CONFIG_EXYNOS_DEV_PD    s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;#endif#endif#ifdef CONFIG_FB_S5P#ifdef CONFIG_FB_S5P_LMS501KF03    spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));    s3cfb_set_platdata(&lms501kf03_data);#else    s3cfb_set_platdata(NULL);#endif#ifdef CONFIG_FB_S5P_MIPI_DSIM    s5p_device_dsim.dev.parent = &exynos4_device_pd[PD_LCD0].dev;#endif#ifdef CONFIG_EXYNOS_DEV_PD    s3c_device_fb.dev.parent = &exynos4_device_pd[PD_LCD0].dev;#endif#endif#ifdef CONFIG_USB_EHCI_S5P    smdk4x12_ehci_init();#endif#ifdef CONFIG_USB_OHCI_S5P    smdk4x12_ohci_init();#endif#ifdef CONFIG_USB_GADGET    smdk4x12_usbgadget_init();#endif    samsung_bl_set(&smdk4x12_bl_gpio_info, &smdk4x12_bl_data);#ifdef CONFIG_EXYNOS4_DEV_DWMCI    exynos_dwmci_set_platdata(&exynos_dwmci_pdata);#endif#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS    exynos4_fimc_is_set_platdata(NULL);#ifdef CONFIG_EXYNOS_DEV_PD    exynos4_device_fimc_is.dev.parent = &exynos4_device_pd[PD_ISP].dev;#endif#endif#ifdef CONFIG_S3C_DEV_HSMMC    s3c_sdhci0_set_platdata(&smdk4x12_hsmmc0_pdata);#endif#ifdef CONFIG_S3C_DEV_HSMMC1    s3c_sdhci1_set_platdata(&smdk4x12_hsmmc1_pdata);#endif#ifdef CONFIG_S3C_DEV_HSMMC2    s3c_sdhci2_set_platdata(&smdk4x12_hsmmc2_pdata);#endif#ifdef CONFIG_S3C_DEV_HSMMC3    s3c_sdhci3_set_platdata(&smdk4x12_hsmmc3_pdata);#endif#ifdef  CONFIG_MTK_COMBO_MT66XX    itop4412_wifi_combo_module_gpio_init();#endif#ifdef CONFIG_S5P_DEV_MSHC    s3c_mshci_set_platdata(&exynos4_mshc_pdata);#endif#if defined(CONFIG_VIDEO_EXYNOS_TV) && defined(CONFIG_VIDEO_EXYNOS_HDMI)    dev_set_name(&s5p_device_hdmi.dev, "exynos4-hdmi");    clk_add_alias("hdmi", "s5p-hdmi", "hdmi", &s5p_device_hdmi.dev);    clk_add_alias("hdmiphy", "s5p-hdmi", "hdmiphy", &s5p_device_hdmi.dev);    s5p_tv_setup();    /* setup dependencies between TV devices */    s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;    s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;    s5p_i2c_hdmiphy_set_platdata(NULL);#ifdef CONFIG_VIDEO_EXYNOS_HDMI_CEC    s5p_hdmi_cec_set_platdata(&hdmi_cec_data);#endif#endif#ifdef CONFIG_VIDEO_EXYNOS_FIMC_LITE    smdk4x12_set_camera_flite_platdata();    s3c_set_platdata(&exynos_flite0_default_data,                     sizeof(exynos_flite0_default_data), &exynos_device_flite0);    s3c_set_platdata(&exynos_flite1_default_data,                     sizeof(exynos_flite1_default_data), &exynos_device_flite1);#ifdef CONFIG_EXYNOS_DEV_PD    exynos_device_flite0.dev.parent = &exynos4_device_pd[PD_ISP].dev;    exynos_device_flite1.dev.parent = &exynos4_device_pd[PD_ISP].dev;#endif#endif#ifdef CONFIG_EXYNOS_SETUP_THERMAL    s5p_tmu_set_platdata(&exynos_tmu_data);#endif#ifdef CONFIG_VIDEO_FIMC    s3c_fimc0_set_platdata(&fimc_plat);#ifdef CONFIG_TC4_GB    s3c_fimc1_set_platdata(NULL);    s3c_fimc2_set_platdata(&fimc_plat);#else    s3c_fimc1_set_platdata(&fimc_plat);    s3c_fimc2_set_platdata(NULL);#endif    s3c_fimc3_set_platdata(NULL);#ifdef CONFIG_EXYNOS_DEV_PD    s3c_device_fimc0.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s3c_device_fimc1.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s3c_device_fimc2.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s3c_device_fimc3.dev.parent = &exynos4_device_pd[PD_CAM].dev;#ifdef CONFIG_EXYNOS4_CONTENT_PATH_PROTECTION    secmem.parent = &exynos4_device_pd[PD_CAM].dev;#endif#endif#ifdef CONFIG_VIDEO_FIMC_MIPI    s3c_csis0_set_platdata(NULL);    s3c_csis1_set_platdata(NULL);#ifdef CONFIG_EXYNOS_DEV_PD    s3c_device_csis0.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s3c_device_csis1.dev.parent = &exynos4_device_pd[PD_CAM].dev;#endif#endif#if defined(CONFIG_ITU_A) || defined(CONFIG_CSI_C) \    || defined(CONFIG_S5K3H1_CSI_C) || defined(CONFIG_S5K3H2_CSI_C) \    || defined(CONFIG_S5K6A3_CSI_C)    smdk4x12_cam0_reset(1);#endif#if defined(CONFIG_ITU_B) || defined(CONFIG_CSI_D) \    || defined(CONFIG_S5K3H1_CSI_D) || defined(CONFIG_S5K3H2_CSI_D) \    || defined(CONFIG_VIDEO_OV5640) \    || defined(CONFIG_S5K6A3_CSI_D)    smdk4x12_cam1_reset(1);#endif#endif /* CONFIG_VIDEO_FIMC */#ifdef CONFIG_VIDEO_SAMSUNG_S5P_FIMC    smdk4x12_camera_config();    smdk4x12_subdev_config();    dev_set_name(&s5p_device_fimc0.dev, "s3c-fimc.0");    dev_set_name(&s5p_device_fimc1.dev, "s3c-fimc.1");    dev_set_name(&s5p_device_fimc2.dev, "s3c-fimc.2");    dev_set_name(&s5p_device_fimc3.dev, "s3c-fimc.3");    clk_add_alias("fimc", "exynos4210-fimc.0", "fimc", &s5p_device_fimc0.dev);    clk_add_alias("sclk_fimc", "exynos4210-fimc.0", "sclk_fimc",                  &s5p_device_fimc0.dev);    clk_add_alias("fimc", "exynos4210-fimc.1", "fimc", &s5p_device_fimc1.dev);    clk_add_alias("sclk_fimc", "exynos4210-fimc.1", "sclk_fimc",                  &s5p_device_fimc1.dev);    clk_add_alias("fimc", "exynos4210-fimc.2", "fimc", &s5p_device_fimc2.dev);    clk_add_alias("sclk_fimc", "exynos4210-fimc.2", "sclk_fimc",                  &s5p_device_fimc2.dev);    clk_add_alias("fimc", "exynos4210-fimc.3", "fimc", &s5p_device_fimc3.dev);    clk_add_alias("sclk_fimc", "exynos4210-fimc.3", "sclk_fimc",                  &s5p_device_fimc3.dev);    s3c_fimc_setname(0, "exynos4210-fimc");    s3c_fimc_setname(1, "exynos4210-fimc");    s3c_fimc_setname(2, "exynos4210-fimc");    s3c_fimc_setname(3, "exynos4210-fimc");    /* FIMC */    s3c_set_platdata(&s3c_fimc0_default_data,                     sizeof(s3c_fimc0_default_data), &s5p_device_fimc0);    s3c_set_platdata(&s3c_fimc1_default_data,                     sizeof(s3c_fimc1_default_data), &s5p_device_fimc1);    s3c_set_platdata(&s3c_fimc2_default_data,                     sizeof(s3c_fimc2_default_data), &s5p_device_fimc2);    s3c_set_platdata(&s3c_fimc3_default_data,                     sizeof(s3c_fimc3_default_data), &s5p_device_fimc3);#ifdef CONFIG_EXYNOS_DEV_PD    s5p_device_fimc0.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s5p_device_fimc1.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s5p_device_fimc2.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s5p_device_fimc3.dev.parent = &exynos4_device_pd[PD_CAM].dev;#endif#ifdef CONFIG_VIDEO_S5P_MIPI_CSIS    dev_set_name(&s5p_device_mipi_csis0.dev, "s3c-csis.0");    dev_set_name(&s5p_device_mipi_csis1.dev, "s3c-csis.1");    clk_add_alias("csis", "s5p-mipi-csis.0", "csis",                  &s5p_device_mipi_csis0.dev);    clk_add_alias("sclk_csis", "s5p-mipi-csis.0", "sclk_csis",                  &s5p_device_mipi_csis0.dev);    clk_add_alias("csis", "s5p-mipi-csis.1", "csis",                  &s5p_device_mipi_csis1.dev);    clk_add_alias("sclk_csis", "s5p-mipi-csis.1", "sclk_csis",                  &s5p_device_mipi_csis1.dev);    dev_set_name(&s5p_device_mipi_csis0.dev, "s5p-mipi-csis.0");    dev_set_name(&s5p_device_mipi_csis1.dev, "s5p-mipi-csis.1");    s3c_set_platdata(&s5p_mipi_csis0_default_data,                     sizeof(s5p_mipi_csis0_default_data), &s5p_device_mipi_csis0);    s3c_set_platdata(&s5p_mipi_csis1_default_data,                     sizeof(s5p_mipi_csis1_default_data), &s5p_device_mipi_csis1);#ifdef CONFIG_EXYNOS_DEV_PD    s5p_device_mipi_csis0.dev.parent = &exynos4_device_pd[PD_CAM].dev;    s5p_device_mipi_csis1.dev.parent = &exynos4_device_pd[PD_CAM].dev;#endif#endif#if defined(CONFIG_ITU_A) || defined(CONFIG_CSI_C) \    || defined(CONFIG_S5K3H1_CSI_C) || defined(CONFIG_S5K3H2_CSI_C) \    || defined(CONFIG_S5K6A3_CSI_C)    smdk4x12_cam0_reset(1);#endif#if defined(CONFIG_ITU_B) || defined(CONFIG_CSI_D) \    || defined(CONFIG_S5K3H1_CSI_D) || defined(CONFIG_S5K3H2_CSI_D) \    || defined(CONFIG_S5K6A3_CSI_D)    smdk4x12_cam1_reset(1);#endif#endif#if defined(CONFIG_VIDEO_TVOUT)    s5p_hdmi_hpd_set_platdata(&hdmi_hpd_data);    s5p_hdmi_cec_set_platdata(&hdmi_cec_data);#ifdef CONFIG_EXYNOS_DEV_PD    s5p_device_tvout.dev.parent = &exynos4_device_pd[PD_TV].dev;    exynos4_device_pd[PD_TV].dev.parent= &exynos4_device_pd[PD_LCD0].dev;#endif#endif#if defined(CONFIG_VIDEO_JPEG_V2X) || defined(CONFIG_VIDEO_JPEG)#ifdef CONFIG_EXYNOS_DEV_PD    s5p_device_jpeg.dev.parent = &exynos4_device_pd[PD_CAM].dev;    exynos4_jpeg_setup_clock(&s5p_device_jpeg.dev, 160000000);#endif#endif#ifdef CONFIG_ION_EXYNOS    exynos_ion_set_platdata();#endif#if defined(CONFIG_VIDEO_MFC5X) || defined(CONFIG_VIDEO_SAMSUNG_S5P_MFC)#ifdef CONFIG_EXYNOS_DEV_PD    s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;#endif    if (soc_is_exynos4412() && samsung_rev() >= EXYNOS4412_REV_1_0)        exynos4_mfc_setup_clock(&s5p_device_mfc.dev, 200 * MHZ);    else        exynos4_mfc_setup_clock(&s5p_device_mfc.dev, 267 * MHZ);#endif#if defined(CONFIG_VIDEO_SAMSUNG_S5P_MFC)    dev_set_name(&s5p_device_mfc.dev, "s3c-mfc");    clk_add_alias("mfc", "s5p-mfc", "mfc", &s5p_device_mfc.dev);    s5p_mfc_setname(&s5p_device_mfc, "s5p-mfc");#endif#ifdef CONFIG_VIDEO_FIMG2D    s5p_fimg2d_set_platdata(&fimg2d_data);#endif#ifdef CONFIG_SAMSUNG_DEV_KEYPAD    samsung_keypad_set_platdata(&smdk4x12_keypad_data);#endif    /* add by cym 20131114 */#ifdef CONFIG_USB_NET_DM9620    dm9620_reset();#endif    /* end add */#ifdef CONFIG_EXYNOS_C2C    exynos_c2c_set_platdata(&smdk4x12_c2c_pdata);#endif#ifndef CONFIG_TC4_GB    exynos_sysmmu_init();#endif    smdk4x12_gpio_power_init();    platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices));    if (soc_is_exynos4412())        platform_add_devices(smdk4412_devices, ARRAY_SIZE(smdk4412_devices));#ifdef CONFIG_FB_S3C    exynos4_fimd0_setup_clock(&s5p_device_fimd0.dev, "mout_mpll_user",                              800 * MHZ);#endif#ifdef CONFIG_S3C64XX_DEV_SPI#if 0   //remove by cym 20130529    sclk = clk_get(spi0_dev, "dout_spi0");    if (IS_ERR(sclk))        dev_err(spi0_dev, "failed to get sclk for SPI-0\n");    prnt = clk_get(spi0_dev, "mout_mpll_user");    if (IS_ERR(prnt))        dev_err(spi0_dev, "failed to get prnt\n");    if (clk_set_parent(sclk, prnt))        printk(KERN_ERR "Unable to set parent %s of clock %s.\n",               prnt->name, sclk->name);    clk_set_rate(sclk, 800 * 1000 * 1000);    clk_put(sclk);    clk_put(prnt);    if (!gpio_request(EXYNOS4_GPB(1), "SPI_CS0")) {        gpio_direction_output(EXYNOS4_GPB(1), 1);        s3c_gpio_cfgpin(EXYNOS4_GPB(1), S3C_GPIO_SFN(1));        s3c_gpio_setpull(EXYNOS4_GPB(1), S3C_GPIO_PULL_UP);        exynos_spi_set_info(0, EXYNOS_SPI_SRCCLK_SCLK,                            ARRAY_SIZE(spi0_csi));    }    for (gpio = EXYNOS4_GPB(0); gpio < EXYNOS4_GPB(4); gpio++)        s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3);    spi_register_board_info(spi0_board_info, ARRAY_SIZE(spi0_board_info));#ifndef CONFIG_FB_S5P_LMS501KF03    sclk = clk_get(spi1_dev, "dout_spi1");    if (IS_ERR(sclk))        dev_err(spi1_dev, "failed to get sclk for SPI-1\n");    prnt = clk_get(spi1_dev, "mout_mpll_user");    if (IS_ERR(prnt))        dev_err(spi1_dev, "failed to get prnt\n");    if (clk_set_parent(sclk, prnt))        printk(KERN_ERR "Unable to set parent %s of clock %s.\n",               prnt->name, sclk->name);    clk_set_rate(sclk, 800 * 1000 * 1000);    clk_put(sclk);    clk_put(prnt);    if (!gpio_request(EXYNOS4_GPB(5), "SPI_CS1")) {        gpio_direction_output(EXYNOS4_GPB(5), 1);        s3c_gpio_cfgpin(EXYNOS4_GPB(5), S3C_GPIO_SFN(1));        s3c_gpio_setpull(EXYNOS4_GPB(5), S3C_GPIO_PULL_UP);        exynos_spi_set_info(1, EXYNOS_SPI_SRCCLK_SCLK,                            ARRAY_SIZE(spi1_csi));    }    for (gpio = EXYNOS4_GPB(4); gpio < EXYNOS4_GPB(8); gpio++)        s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3);    spi_register_board_info(spi1_board_info, ARRAY_SIZE(spi1_board_info));#endif#endif    sclk = clk_get(spi2_dev, "dout_spi2");    if (IS_ERR(sclk))        dev_err(spi2_dev, "failed to get sclk for SPI-2\n");    prnt = clk_get(spi2_dev, "mout_mpll_user");    if (IS_ERR(prnt))        dev_err(spi2_dev, "failed to get prnt\n");    if (clk_set_parent(sclk, prnt))        printk(KERN_ERR "Unable to set parent %s of clock %s.\n",               prnt->name, sclk->name);    clk_set_rate(sclk, 800 * 1000 * 1000);    clk_put(sclk);    clk_put(prnt);    if (!gpio_request(EXYNOS4_GPC1(2), "SPI_CS2")) {        gpio_direction_output(EXYNOS4_GPC1(2), 1);        s3c_gpio_cfgpin(EXYNOS4_GPC1(2), S3C_GPIO_SFN(1));        s3c_gpio_setpull(EXYNOS4_GPC1(2), S3C_GPIO_PULL_UP);        exynos_spi_set_info(2, EXYNOS_SPI_SRCCLK_SCLK,                            ARRAY_SIZE(spi2_csi));    }    for (gpio = EXYNOS4_GPC1(1); gpio < EXYNOS4_GPC1(5); gpio++)        s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3);    spi_register_board_info(spi2_board_info, ARRAY_SIZE(spi2_board_info));#endif#ifdef CONFIG_BUSFREQ_OPP    dev_add(&busfreq, &exynos4_busfreq.dev);    ppmu_init(&exynos_ppmu[PPMU_DMC0], &exynos4_busfreq.dev);    ppmu_init(&exynos_ppmu[PPMU_DMC1], &exynos4_busfreq.dev);    ppmu_init(&exynos_ppmu[PPMU_CPU], &exynos4_busfreq.dev);#endif    register_reboot_notifier(&exynos4_reboot_notifier);}

2. I2C接口

/* ly 20111102 : i2c devs mapping:   * i2c0 : HDMI (DDC全文为Display Data Channel)  * i2c1 : max8997: PMIC & RTC & motor(S5M8767的电源管理IC(PMIC))  * i2c2 : not used  * i2c3 : touch(触摸芯片ft5x06)  * i2c4 : max8997 fuel gauge & wm8960(音频编解码芯片)  * i2c5 : sensor: MPU3050(三轴陀螺仪芯片)  * i2c6 : camera & HSIC  (内核加载摄像头驱动,在这里并没有配置)  * i2c7 : light sensor  (TSC2007触摸芯片,暂时没用)  */static struct i2c_board_info i2c_devs0[] __initdata = {#ifdef CONFIG_VIDEO_TVOUT{    I2C_BOARD_INFO("s5p_ddc", (0x74 >> 1)),},#endif};static struct i2c_board_info i2c_devs1[] __initdata = {{#ifdef CONFIG_REGULATOR_S5M8767    I2C_BOARD_INFO("s5m87xx", 0xCC >> 1),    .platform_data = &exynos4_s5m8767_pdata,    .irq        = IRQ_EINT(15),#endif},};#if 1 //iic 2 : nfcstatic struct i2c_board_info i2c_devs2[] __initdata = {};#endif// For S5K4EC(using i2c6)#ifndef CONFIG_CAN_MCP251Xstatic struct i2c_board_info i2c_devs6[] __initdata = {};#endif/* add by cym 20130515 */#ifdef CONFIG_TOUCHSCREEN_FT5X0X#include <plat/ft5x0x_touch.h>static struct ft5x0x_i2c_platform_data ft5x0x_pdata = {    .gpio_irq               = EXYNOS4_GPX0(4),    .irq_cfg                = S3C_GPIO_SFN(0xf),    .screen_max_x   = 768,    .screen_max_y   = 1024,    .pressure_max   = 255,};#if 0static int __init setup_width_height(char *str){    if (!strncasecmp("9.7", str, 3)) {        //printk("000000000000000000000000\n");        ft5x0x_pdata.screen_max_x = 768;        ft5x0x_pdata.screen_max_y = 1024;    }    else if(!strncasecmp("7.0", str, 3))    {        //printk("1111111111111111111111111\n");        ft5x0x_pdata.screen_max_x = 1280;//1280;        ft5x0x_pdata.screen_max_y = 800;//800;    }    printk("%s\n", __FUNCTION__);}early_param("lcd", setup_width_height);#endif#endif/* end add */void init_lcd_type(){    int err;    if(gpio_request(EXYNOS4_GPC0(3), "GPC0_3"))        printk(KERN_WARNING "GPC0_3 Port request error!!!\n");    else    {        s3c_gpio_setpull(EXYNOS4_GPC0(3), S3C_GPIO_PULL_NONE);        s3c_gpio_cfgpin(EXYNOS4_GPC0(3), S3C_GPIO_SFN(0));        gpio_direction_input(EXYNOS4_GPC0(3));        //gpio_free(EXYNOS4_GPC0(3));    }    if(gpio_request(EXYNOS4_GPX0(6), "GPX0_6"))        printk(KERN_WARNING "GPX0_6 Port request error!!!\n");    else    {        s3c_gpio_setpull(EXYNOS4_GPX0(6), S3C_GPIO_PULL_NONE);        s3c_gpio_cfgpin(EXYNOS4_GPX0(6), S3C_GPIO_SFN(0));        gpio_direction_input(EXYNOS4_GPX0(6));        //gpio_free(EXYNOS4_GPX0(6));    }}int get_lcd_type(){    int value1, value2, type = 0;    int flags = 0;    //if(0 == flags)    //{    //  init_lcd_type();    //  flags = 1;    //}#if 0    if(gpio_request(EXYNOS4_GPC0(3), "GPC0_3"))        printk(KERN_WARNING "GPC0_3 Port request error!!!\n");    else    {        value1 = gpio_get_value(EXYNOS4_GPC0(3));        gpio_free(EXYNOS4_GPC0(3));    }    if(gpio_request(EXYNOS4_GPX0(6), "GPX0_6"))        printk(KERN_WARNING "GPX0_6 Port request error!!!\n");    else    {        value2 = gpio_get_value(EXYNOS4_GPX0(6));        gpio_free(EXYNOS4_GPC0(3));    }#else    value1 = gpio_get_value(EXYNOS4_GPC0(3));    value2 = gpio_get_value(EXYNOS4_GPX0(6));#endif      type = (value1<<1)|value2;    printk("value1 = %d, value2 = %d, type = 0x%x\n", value1, value2, type);    return type;}EXPORT_SYMBOL(get_lcd_type);void setup_ft5x_width_height(){    int type = get_lcd_type();    if(0x00 == type)    //9.7    {#if defined(CONFIG_TOUCHSCREEN_FT5X0X)        ft5x0x_pdata.screen_max_x = 768;        ft5x0x_pdata.screen_max_y = 1024;#endif        ;    }    else if(0x01 == type)   //7.0    {#if defined(CONFIG_TOUCHSCREEN_FT5X0X)        ft5x0x_pdata.screen_max_x = 800;//1280;//1280;        ft5x0x_pdata.screen_max_y = 1280;//800;//800;#endif        ;    }    else if(0x02 == type)   //4.3    {        ;    }}static struct i2c_board_info i2c_devs3[] __initdata = {    /* add by cym 20130318 support for FT5X0X TouchScreen */#if defined(CONFIG_TOUCHSCREEN_FT5X0X){    I2C_BOARD_INFO("ft5x0x_ts", 0x70>>1),    .irq = IRQ_EINT(4),    .platform_data = &ft5x0x_pdata,},#endif/* end add */};#ifdef CONFIG_SND_SOC_WM8960#include <sound/wm8960.h>static struct wm8960_data wm8960_pdata = {    .capless        = 0,    .dres           = WM8960_DRES_400R,};#endif/* I2C4 */static struct i2c_board_info i2c_devs4[] __initdata = {#ifdef CONFIG_SND_SOC_WM8960{    I2C_BOARD_INFO("wm8960", 0x1a),    .platform_data  = &wm8960_pdata,},#endif};/* I2C5 */static struct i2c_board_info i2c_devs5[] __initdata = {#ifdef CONFIG_TC4_GB// liang#if defined(CONFIG_MPU_SENSORS_MPU3050) || defined(CONFIG_MPU_SENSORS_MPU3050_MODULE)    // liang{    I2C_BOARD_INFO(SENSOR_MPU_NAME, 0x68),    //.irq = gpio_to_irq(MPUGPIO),    .irq = IRQ_EINT(27),    .platform_data = &mpu_data,},#endif  //yulu for test sleep#endif#ifdef CONFIG_TC4_ICS#ifdef CONFIG_MPU_SENSORS_MPU6050B1{    I2C_BOARD_INFO("mpu6050", 0x68),    .platform_data = &mpu6050_data,    .irq = EXYNOS4_GPX3(3),},/*        {                I2C_BOARD_INFO("ak8975", 0x0C),                .platform_data = &inv_mpu_compass_data,                .irq = EXYNOS4_GPX1(4),        }*/#else// gyro{    I2C_BOARD_INFO(MPU_NAME, 0x68),    .irq = IRQ_EINT(27),    .platform_data = &mpu3050_data,},// accel{    I2C_BOARD_INFO("bma250", (0x30>>1)),    //.irq = IRQ_EINT(24),// 25?    .platform_data = &inv_mpu_bma250_data,},#endif#endif};/* add by cym 20130417 for TSC2007 TouchScreen */#ifdef CONFIG_TOUCHSCREEN_TSC2007#define GPIO_TSC_PORT EXYNOS4_GPX0(0)static int ts_get_pendown_state(void){    int val;    val = gpio_get_value(GPIO_TSC_PORT);    return !val;}static int ts_init(void){    int err;    err = gpio_request_one(EXYNOS4_GPX0(0), GPIOF_IN, "TSC2007_IRQ");    if (err) {        printk(KERN_ERR "failed to request TSC2007_IRQ pin\n");        return -1;    }    s3c_gpio_cfgpin(EXYNOS4_GPX0(0), S3C_GPIO_SFN(0xF));    s3c_gpio_setpull(EXYNOS4_GPX0(0), S3C_GPIO_PULL_NONE);    gpio_free(EXYNOS4_GPX0(0));    return 0;}static struct tsc2007_platform_data tsc2007_info = {    .model          = 2007,    .x_plate_ohms       = 180,    .get_pendown_state  = ts_get_pendown_state,    .init_platform_hw   = ts_init,};#endif/* end add *//* I2C7 */static struct i2c_board_info i2c_devs7[] __initdata = {    /* add by cym 20130417 for TSC2007 TouchScreen */#ifdef CONFIG_TOUCHSCREEN_TSC2007{    I2C_BOARD_INFO("tsc2007", 0x48),    .type       = "tsc2007",    .platform_data  = &tsc2007_info,    .irq = IRQ_EINT(0),}#endif/* end add */};

3.背光接口

/* LCD Backlight data */static struct samsung_bl_gpio_info smdk4x12_bl_gpio_info = {    .no = EXYNOS4_GPD0(1),    .func = S3C_GPIO_SFN(2),};static struct platform_pwm_backlight_data smdk4x12_bl_data = {    .pwm_id = 1,#ifdef CONFIG_FB_S5P_LMS501KF03    .pwm_period_ns  = 1000,#endif};

4. 六轴运动处理组件

#ifdef CONFIG_MPU_SENSORS_MPU6050B1void sensor_hw_init(void){    printk("%s: line = %d\n", __FUNCTION__, __LINE__);    if (gpio_request(EXYNOS4_GPX3(3), "MPU6050 INT"))        printk(KERN_WARNING "MPU6050 INT(GPX3.3) Port request error!!!\n");    else    {        s3c_gpio_setpull(EXYNOS4_GPX3(3), S3C_GPIO_PULL_NONE);        s3c_gpio_cfgpin(EXYNOS4_GPX3(3), S3C_GPIO_SFN(0));        gpio_direction_input(EXYNOS4_GPX3(3));        gpio_free(EXYNOS4_GPX3(3));    }    /* Sensor AK8975 DRDY */    /*      if (gpio_request(EXYNOS4_GPX1(4), "AK8975 RDY"))                printk(KERN_WARNING "AK8975 RDY(GPX1.4) Port request error!!!\n");        else    {                s3c_gpio_setpull(EXYNOS4_GPX1(4), S3C_GPIO_PULL_NONE);                s3c_gpio_cfgpin(EXYNOS4_GPX1(4), S3C_GPIO_SFN(0));                gpio_direction_input(EXYNOS4_GPX1(4));                gpio_free(EXYNOS4_GPX1(4));        }        //enable_irq(IRQ_EINT(27));*/}static struct mpu_platform_data mpu6050_data = {    .int_config = 0x10,    .orientation = {        0, -1, 0,        -1, 0, 0,        0, 0, -1},    .level_shifter = 0,};static struct ext_slave_platform_data inv_mpu_compass_data = {    .bus = EXT_SLAVE_BUS_PRIMARY,    .orientation = {        -1, 0, 0,        0, 1, 0,        0, 0, -1},};
0 0
原创粉丝点击