static int msm_fb_detect_panel(const char *name) { if (machine_is_msm8930_evt()) { if (!strncmp(name, MIPI_VIDEO_NT_HD_PANEL_NAME, strnlen(MIPI_VIDEO_NT_HD_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } else { if (!strncmp(name, MIPI_CMD_NOVATEK_QHD_PANEL_NAME, strnlen(MIPI_CMD_NOVATEK_QHD_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #if !defined(CONFIG_FB_MSM_LVDS_MIPI_PANEL_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_DETECT) if (!strncmp(name, MIPI_VIDEO_NOVATEK_QHD_PANEL_NAME, strnlen(MIPI_VIDEO_NOVATEK_QHD_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; if (!strncmp(name, MIPI_VIDEO_TOSHIBA_WSVGA_PANEL_NAME, strnlen(MIPI_VIDEO_TOSHIBA_WSVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; if (!strncmp(name, MIPI_VIDEO_SIMULATOR_VGA_PANEL_NAME, strnlen(MIPI_VIDEO_SIMULATOR_VGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; if (!strncmp(name, MIPI_CMD_RENESAS_FWVGA_PANEL_NAME, strnlen(MIPI_CMD_RENESAS_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; #endif if (!strncmp(name, HDMI_PANEL_NAME, strnlen(HDMI_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; if (!strncmp(name, TVOUT_PANEL_NAME, strnlen(TVOUT_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; pr_warning("%s: not supported '%s'", __func__, name); return -ENODEV; }
void __init msm8930_init_mmc(void) { #ifdef CONFIG_MMC_MSM_SDC1_SUPPORT /* * When eMMC runs in DDR mode on CDP platform, we have * seen instability due to DATA CRC errors. These errors are * attributed to long physical path between MSM and eMMC on CDP. * So let's not enable the DDR mode on CDP platform but let other * platforms take advantage of eMMC DDR mode. */ if (!machine_is_msm8930_cdp()) msm8960_sdc1_data.uhs_caps |= (MMC_CAP_1_8V_DDR | MMC_CAP_UHS_DDR50); /* SDC1 : eMMC card connected */ msm_add_sdcc(1, &msm8960_sdc1_data); #endif #ifdef CONFIG_MMC_MSM_SDC3_SUPPORT /* * All 8930 platform boards using the 1.2 SoC have been reworked so that * the sd card detect line's esd circuit is no longer powered by the sd * card's voltage regulator. So this means we can turn the regulator off * to save power without affecting the sd card detect functionality. * This change to the boards will be true for newer versions of the SoC * as well. */ if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 1 && SOCINFO_VERSION_MINOR(socinfo_get_version()) < 2) { msm8960_sdc3_data.vreg_data->vdd_data->always_on = true; msm8960_sdc3_data.vreg_data->vdd_data->reset_at_init = true; } /* SDC3: External card slot */ if (!machine_is_msm8930_cdp()) { msm8960_sdc3_data.wpswitch_gpio = 0; msm8960_sdc3_data.is_wpswitch_active_low = false; } if (machine_is_msm8930_evt()) { msm8960_sdc3_data.status_gpio = 90; msm8960_sdc3_data.status_irq = MSM_GPIO_TO_INT(90); } msm_add_sdcc(3, &msm8960_sdc3_data); #endif #ifdef CONFIG_MMC_MSM_SDC4_SUPPORT /* SDC4: WIFI BCM4334 */ msm_add_sdcc(4, &msm8960_sdc4_data); #endif }
void __init msm8930_init_cam(void) { msm_gpiomux_install(msm8930_cam_common_configs, ARRAY_SIZE(msm8930_cam_common_configs)); #ifndef CONFIG_FIH_CAMERA if (machine_is_msm8930_evt() && (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE)) { msm_gpiomux_install(msm8930_evt_cam_configs, ARRAY_SIZE(msm8930_evt_cam_configs)); /* Load ov8825 & ov9724 only for SGLTE device */ msm8930_camera_board_info.board_info = msm8930_evt_camera_i2c_boardinfo; msm8930_camera_board_info.num_i2c_board_info = ARRAY_SIZE(msm8930_evt_camera_i2c_boardinfo); } #endif if (machine_is_msm8930_cdp()) { #ifndef CONFIG_FIH_CAMERA struct msm_camera_sensor_info *s_info; s_info = &msm_camera_sensor_s5k3l1yx_data; s_info->sensor_platform_info->mount_angle = 0; #endif #if defined(CONFIG_I2C) && (defined(CONFIG_GPIO_SX150X) || \ defined(CONFIG_GPIO_SX150X_MODULE)) msm_flash_src._fsrc.ext_driver_src.led_en = GPIO_CAM_GP_LED_EN1; msm_flash_src._fsrc.ext_driver_src.led_flash_en = GPIO_CAM_GP_LED_EN2; msm_flash_src._fsrc.ext_driver_src.expander_info = cam_expander_info; #endif } platform_device_register(&msm_camera_server); platform_device_register(&msm8960_device_csiphy0); platform_device_register(&msm8960_device_csiphy1); platform_device_register(&msm8960_device_csid0); platform_device_register(&msm8960_device_csid1); platform_device_register(&msm8960_device_ispif); platform_device_register(&msm8960_device_vfe); platform_device_register(&msm8960_device_vpe); }
static int mipi_dsi_cdp_panel_power(int on) { static struct regulator *reg_l8, *reg_l23, *reg_l2; /* Control backlight GPIO (24) directly when using PM8917 */ int gpio24 = PM8917_GPIO_PM_TO_SYS(24); int rc; pr_debug("%s: state : %d\n", __func__, on); if (!dsi_power_on) { reg_l8 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vdc"); if (IS_ERR(reg_l8)) { pr_err("could not get 8038_l8, rc = %ld\n", PTR_ERR(reg_l8)); return -ENODEV; } reg_l23 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vddio"); if (IS_ERR(reg_l23)) { pr_err("could not get 8038_l23, rc = %ld\n", PTR_ERR(reg_l23)); return -ENODEV; } reg_l2 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vdda"); if (IS_ERR(reg_l2)) { pr_err("could not get 8038_l2, rc = %ld\n", PTR_ERR(reg_l2)); return -ENODEV; } rc = regulator_set_voltage(reg_l8, 2800000, 3000000); if (rc) { pr_err("set_voltage l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_voltage(reg_l23, 1800000, 1800000); if (rc) { pr_err("set_voltage l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_voltage(reg_l2, 1200000, 1200000); if (rc) { pr_err("set_voltage l2 failed, rc=%d\n", rc); return -EINVAL; } rc = gpio_request(DISP_RST_GPIO, "disp_rst_n"); if (rc) { pr_err("request gpio DISP_RST_GPIO failed, rc=%d\n", rc); gpio_free(DISP_RST_GPIO); return -ENODEV; } if (machine_is_msm8930_evt()) { rc = gpio_direction_output(DISP_RST_GPIO, 1); if (rc) { pr_err("gpio_direction_output failed for %d gpio rc=%d\n", DISP_RST_GPIO, rc); return -ENODEV; } } if (!machine_is_msm8930_evt()) { rc = gpio_request(DISP_3D_2D_MODE, "disp_3d_2d"); if (rc) { pr_err("request gpio DISP_3D_2D_MODE failed, rc=%d\n", rc); gpio_free(DISP_3D_2D_MODE); return -ENODEV; } rc = gpio_direction_output(DISP_3D_2D_MODE, 0); if (rc) { pr_err("gpio_direction_output failed for %d gpio rc=%d\n", DISP_3D_2D_MODE, rc); return -ENODEV; } } if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { rc = gpio_request(gpio24, "disp_bl"); if (rc) { pr_err("request for gpio 24 failed, rc=%d\n", rc); return -ENODEV; } gpio_set_value_cansleep(gpio24, 0); novatek_pdata.gpio_set_backlight = pm8917_gpio_set_backlight; } dsi_power_on = true; } if (on) { rc = regulator_set_optimum_mode(reg_l8, 100000); if (rc < 0) { pr_err("set_optimum_mode l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l23, 100000); if (rc < 0) { pr_err("set_optimum_mode l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l2, 100000); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l8); if (rc) { pr_err("enable l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_l23); if (rc) { pr_err("enable l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_l2); if (rc) { pr_err("enable l2 failed, rc=%d\n", rc); return -ENODEV; } usleep(10000); gpio_set_value(DISP_RST_GPIO, 1); usleep(10); gpio_set_value(DISP_RST_GPIO, 0); usleep(20); gpio_set_value(DISP_RST_GPIO, 1); if (!machine_is_msm8930_evt()) gpio_set_value(DISP_3D_2D_MODE, 1); usleep(20); } else { gpio_set_value(DISP_RST_GPIO, 0); rc = regulator_disable(reg_l2); if (rc) { pr_err("disable reg_l2 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l8); if (rc) { pr_err("disable reg_l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l23); if (rc) { pr_err("disable reg_l23 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l8, 100); if (rc < 0) { pr_err("set_optimum_mode l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l23, 100); if (rc < 0) { pr_err("set_optimum_mode l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l2, 100); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } if (!machine_is_msm8930_evt()) gpio_set_value(DISP_3D_2D_MODE, 0); usleep(20); } return 0; }