void msm7x27a_set_display_params(char *prim_panel) { if (strnlen(prim_panel, PANEL_NAME_MAX_LEN)) { strlcpy(msm_fb_pdata.prim_panel_name, prim_panel, PANEL_NAME_MAX_LEN); pr_debug("msm_fb_pdata.prim_panel_name %s\n", msm_fb_pdata.prim_panel_name); } if (strnlen(msm_fb_pdata.prim_panel_name, PANEL_NAME_MAX_LEN)) { if (strncmp((char *)msm_fb_pdata.prim_panel_name, "mipi_cmd_nt35510_wvga", strnlen("mipi_cmd_nt35510_wvga", PANEL_NAME_MAX_LEN)) && strncmp((char *)msm_fb_pdata.prim_panel_name, "mipi_video_nt35510_wvga", strnlen("mipi_video_nt35510_wvga", PANEL_NAME_MAX_LEN))) disable_splash = 1; else if (!(machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt())) disable_splash = 1; } if (machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) mipi_dsi_pdata.dlane_swap = 0x0; }
void __init msm_msm7627a_allocate_memory_regions(void) { void *addr; unsigned long fb_size; if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) fb_size = MSM7x25A_MSM_FB_SIZE; else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm8625q_skue() ) fb_size = MSM8x25_MSM_FB_SIZE; else if (machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) fb_size = MSM8x25Q_MSM_FB_SIZE; else fb_size = MSM_FB_SIZE; addr = alloc_bootmem_align(fb_size, 0x1000); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + fb_size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", fb_size, addr, __pa(addr)); #ifdef CONFIG_MSM_V4L2_VIDEO_OVERLAY_DEVICE fb_size = MSM_V4L2_VIDEO_OVERLAY_BUF_SIZE; addr = alloc_bootmem_align(fb_size, 0x1000); msm_v4l2_video_overlay_resources[0].start = __pa(addr); msm_v4l2_video_overlay_resources[0].end = msm_v4l2_video_overlay_resources[0].start + fb_size - 1; pr_debug("allocating %lu bytes at %p (%lx physical) for v4l2\n", fb_size, addr, __pa(addr)); #endif }
static void __init add_platform_devices(void) { if (machine_is_msm8625_evb() || machine_is_msm8625_qrd7() || machine_is_msm8625_qrd5() || machine_is_msm8625q_skud() || machine_is_msm8625q_skue()) { platform_add_devices(msm8625_evb_devices, ARRAY_SIZE(msm8625_evb_devices)); platform_add_devices(qrd3_devices, ARRAY_SIZE(qrd3_devices)); } else { platform_add_devices(qrd7627a_devices, ARRAY_SIZE(qrd7627a_devices)); } if (machine_is_msm7627a_qrd3() || machine_is_msm7627a_evb()) platform_add_devices(qrd3_devices, ARRAY_SIZE(qrd3_devices)); /*start by lf 2012.12.26 for button-backlight*/ if (machine_is_msm8625_qrd5()){ #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) keyboard_leds_init(); #endif /*end by lf 2012.12.26 */ } platform_add_devices(common_devices, ARRAY_SIZE(common_devices)); }
static void __init add_platform_devices(void) { if (machine_is_msm8625_evb() || machine_is_msm8625_qrd7() || machine_is_msm8625_qrd5() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud() || machine_is_msm8625q_skue()) { platform_add_devices(msm8625_evb_devices, ARRAY_SIZE(msm8625_evb_devices)); platform_add_devices(qrd3_devices, ARRAY_SIZE(qrd3_devices)); } else { platform_add_devices(qrd7627a_devices, ARRAY_SIZE(qrd7627a_devices)); } if (machine_is_msm8625_evb() || machine_is_msm8625_qrd5()) platform_add_devices(msm8625_lcd_camera_devices, ARRAY_SIZE(msm8625_lcd_camera_devices)); else if (machine_is_msm8625q_evbd()) platform_add_devices(msm8625q_lcd_camera_devices, ARRAY_SIZE(msm8625q_lcd_camera_devices)); if (machine_is_msm7627a_qrd3() || machine_is_msm7627a_evb()) platform_add_devices(qrd3_devices, ARRAY_SIZE(qrd3_devices)); platform_add_devices(common_devices, ARRAY_SIZE(common_devices)); }
static int __devinit mipi_hx8389b_lcd_probe(struct platform_device *pdev) { struct platform_device *pthisdev = NULL; pr_debug("%s\n", __func__); if (pdev->id == 0) { mipi_hx8389b_pdata = pdev->dev.platform_data; if (mipi_hx8389b_pdata->bl_lock) spin_lock_init(&mipi_hx8389b_pdata->bl_spinlock); /* SKUD use PWM as backlight control method */ if(machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { mipi_hx8389b_bl_ctrl = 1; } return 0; } #if DRV_READ_LCDID_MISC_IOCTL msleep(2); lcd_id_flag = tyq_lcd_read_id(LCD_ID); printk(KERN_ERR "--TY--lcd:truly_probe id=%d(0:byd 1:truly)\n",lcd_id_flag); truly_misc_data = pdev; misc_register(&truly_device); #endif pthisdev = msm_fb_add_device(pdev); mipi_hx8389b_create_sysfs(pthisdev); return 0; }
static ssize_t ft5x06_virtual_keys_register(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { if (machine_is_msm8625q_skud()) { return snprintf(buf, 200, __stringify(EV_KEY) ":" __stringify(KEY_HOME) ":67:1000:135:60" ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":202:1000:135:60" ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":337:1000:135:60" ":" __stringify(EV_KEY) ":" __stringify(KEY_SEARCH) ":472:1000:135:60" "\n"); } if (machine_is_msm8625q_skue()) { return snprintf(buf, 200, __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":90:1020:170:40" ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME) ":270:1020:170:40" ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":450:1020:170:40" "\n"); } else { return snprintf(buf, 200, __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":40:510:80:60" ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME) ":120:510:80:60" ":" __stringify(EV_KEY) ":" __stringify(KEY_SEARCH) ":200:510:80:60" ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":280:510:80:60" "\n"); } }
static void __init add_platform_devices(void) { if (machine_is_msm8625_evb() || machine_is_msm8625_qrd7() || machine_is_msm8625_evt() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud() || machine_is_qrd_skud_prime()) { msm8625_device_uart1.dev.platform_data = &msm_8625_uart1_pdata; platform_add_devices(msm8625_evb_devices, ARRAY_SIZE(msm8625_evb_devices)); platform_add_devices(qrd3_devices, ARRAY_SIZE(qrd3_devices)); } else { platform_add_devices(qrd7627a_devices, ARRAY_SIZE(qrd7627a_devices)); } if (machine_is_msm8625_evb() || machine_is_msm8625_evt()) platform_add_devices(msm8625_lcd_camera_devices, ARRAY_SIZE(msm8625_lcd_camera_devices)); else if (machine_is_msm8625q_evbd()) platform_add_devices(msm8625q_lcd_camera_devices, ARRAY_SIZE(msm8625q_lcd_camera_devices)); if (machine_is_msm7627a_qrd3() || machine_is_msm7627a_evb()) platform_add_devices(qrd3_devices, ARRAY_SIZE(qrd3_devices)); platform_add_devices(common_devices, ARRAY_SIZE(common_devices)); }
static void __init ft5x06_touchpad_setup(void) { int rc; if (machine_is_msm8625q_skud()) { if (cpu_is_msm8625()) { ft5x06_platformdata.irq_gpio = FT5X06_IRQ_GPIO_QPR_SKUD_PRIM; ft5x06_platformdata.reset_gpio = FT5X06_RESET_GPIO_QPR_SKUD_PRIM; ft5x06_platformdata.x_max = 480; ft5x06_platformdata.y_max = 854; ft5x06_device_info[0].irq = MSM_GPIO_TO_INT(FT5X06_IRQ_GPIO_QPR_SKUD_PRIM); } else { ft5x06_platformdata.irq_gpio = FT5X06_IRQ_GPIO_QPR_SKUD; ft5x06_platformdata.reset_gpio = FT5X06_RESET_GPIO_QPR_SKUD; ft5x06_platformdata.x_max = 480; ft5x06_platformdata.y_max = 854; ft5x06_device_info[0].irq = MSM_GPIO_TO_INT(FT5X06_IRQ_GPIO_QPR_SKUD); } } else if(machine_is_msm8625q_evbd()) { ft5x06_platformdata.irq_gpio = FT5X16_IRQ_GPIO_EVBD; ft5x06_platformdata.reset_gpio = FT5X06_RESET_GPIO; ft5x06_platformdata.x_max = 540; ft5x06_platformdata.y_max = 960; ft5x06_device_info[0].irq = MSM_GPIO_TO_INT(FT5X16_IRQ_GPIO_EVBD); } else if (machine_is_msm8625q_skue()) { ft5x06_platformdata.irq_gpio = FT5X06_IRQ_GPIO_QPR_SKUE; ft5x06_platformdata.reset_gpio = FT5X06_RESET_GPIO_QPR_SKUE; ft5x06_platformdata.x_max = 540; ft5x06_platformdata.y_max = 960; ft5x06_device_info[0].irq = MSM_GPIO_TO_INT(FT5X06_IRQ_GPIO_QPR_SKUE); } rc = gpio_tlmm_config(GPIO_CFG(ft5x06_platformdata.irq_gpio, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, ft5x06_platformdata.irq_gpio); rc = gpio_tlmm_config(GPIO_CFG(ft5x06_platformdata.reset_gpio, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, ft5x06_platformdata.reset_gpio); ft5x06_virtual_key_properties_kobj = kobject_create_and_add("board_properties", NULL); if (ft5x06_virtual_key_properties_kobj) rc = sysfs_create_group(ft5x06_virtual_key_properties_kobj, &ft5x06_virtual_key_properties_attr_group); if (!ft5x06_virtual_key_properties_kobj || rc) pr_err("%s: failed to create board_properties\n", __func__); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, ft5x06_device_info, ARRAY_SIZE(ft5x06_device_info)); }
static void gpio_wlan_config(void) { if (machine_is_msm7627a_qrd1() || machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) gpio_wlan_sys_rest_en = 124; else if (machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) gpio_wlan_sys_rest_en = 38; }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; #if 1 // #suwg printk("xxx %s:%s\n ",__func__,name); return ret; #endif if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; } else if (machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { if (!strncmp(name, "mipi_video_hx8389b_qhd", 22)) ret = 0; } else if (machine_is_msm8625q_skue()) { if (!strncmp(name, "mipi_video_otm9605a_qhd", 23)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { #if 1 //#linxc 12-08-23 +++ if (!strncmp(name, "mipi_cmd_novatek_sharp_qhd", 26)) ret = 0; #else if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; #endif } else if (machine_is_msm8625q_skud()) { if (!strncmp(name, "mipi_video_hx8389b_qhd", 22)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
static void __init msm_qrd_init(void) { msm7x2x_misc_init(); msm7627a_init_regulators(); msmqrd_adsp_add_pdev(); if (cpu_is_msm8625() || cpu_is_msm8625q()) msm8625_device_i2c_init(); else msm7627a_device_i2c_init(); /* uart1dm*/ qrd7627a_uart1dm_config(); /*OTG gadget*/ qrd7627a_otg_gadget(); msm_add_footswitch_devices(); add_platform_devices(); /* Ensure ar6000pm device is registered before MMC/SDC */ #if defined(CONFIG_BT) && defined(CONFIG_MARIMBA_CORE) msm_qrd_init_ar6000pm(); #endif msm7627a_init_mmc(); #ifdef CONFIG_USB_EHCI_MSM_72K msm7627a_init_host(); #endif msm_pm_init(); msm_pm_register_irqs(); msm_fb_add_devices(); if (machine_is_msm8625q_evbd() || machine_is_msm8625q_skud() || machine_is_msm8625q_skue()) i2c_register_board_info(2, i2c2_info, ARRAY_SIZE(i2c2_info)); #if defined(CONFIG_BT) && defined(CONFIG_MARIMBA_CORE) msm7627a_bt_power_init(); #endif msm7627a_sensor_init(); msm7627a_camera_init(); qrd7627a_add_io_devices(); msm7x25a_kgsl_3d0_init(); msm8x25_kgsl_3d0_init(); }
static int mipi_dsi_panel_power(int on) { int rc = 0; if (machine_is_msm7627a_qrd1()) rc = mipi_dsi_panel_qrd1_power(on); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) rc = mipi_dsi_panel_qrd3_power(on); else if (machine_is_qrd_skud_prime() || machine_is_msm8625q_skud()) rc = mipi_dsi_panel_skud_power(on); else if (machine_is_msm8625q_evbd()) rc = mipi_dsi_panel_evbd_power(on); else rc = mipi_dsi_panel_msm_power(on); return rc; }
static int __init qrd_wlan_init(void) { int rc; pr_info("WLAN power init\n"); if (machine_is_msm7627a_qrd1() || machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7() || machine_is_msm8625q_skud() || machine_is_msm8625q_skue()) { rc = gpio_tlmm_config(GPIO_CFG(gpio_wlan_sys_rest_en, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s gpio_tlmm_config %d failed,error = %d\n", __func__, gpio_wlan_sys_rest_en, rc); goto exit; } gpio_set_value(gpio_wlan_sys_rest_en, 0); } else { gpio_request(gpio_wlan_sys_rest_en, "WLAN_DEEP_SLEEP_N"); rc = setup_wlan_gpio(false); gpio_free(gpio_wlan_sys_rest_en); if (rc) { pr_err("%s: wlan_set_gpio = %d\n", __func__, rc); goto exit; } } /* GPIO_WLAN_3V3_EN is only required for the QRD7627a */ if (machine_is_msm7627a_qrd1()) { rc = gpio_tlmm_config(GPIO_CFG(GPIO_WLAN_3V3_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s gpio_tlmm_config %d failed,error = %d\n", __func__, GPIO_WLAN_3V3_EN, rc); goto exit; } gpio_set_value(GPIO_WLAN_3V3_EN, 0); } exit: return rc; }
static int msm_fb_dsi_client_reset(void) { int rc = 0; if (machine_is_msm7627a_qrd1()) rc = msm_fb_dsi_client_qrd1_reset(); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) rc = msm_fb_dsi_client_qrd3_reset(); else if (machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) rc = msm_fb_dsi_client_skud_reset(); else rc = msm_fb_dsi_client_msm_reset(); return rc; }
static void gpio_wlan_config(void) { if (machine_is_msm7627a_qrd1() || machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) gpio_wlan_sys_rest_en = 124; else if(machine_is_msm8625q_evbd() || machine_is_msm8625q_skue() || machine_is_msm8625q_skud()) /*TYDRV:chenjp 2012.12.26 modify for QCT support*/ #if defined(TYQ_QCT_SUPPORT) gpio_wlan_sys_rest_en = 124; #else gpio_wlan_sys_rest_en = 38; #endif }
static void gpio_bt_config(void) { u32 socinfo = socinfo_get_platform_version(); if (machine_is_msm7627a_qrd1()) gpio_bt_sys_rest_en = 114; if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) gpio_bt_sys_rest_en = 16; if(machine_is_msm8625q_skud() || machine_is_msm8625q_skue() || machine_is_msm8625q_evbd()) gpio_bt_sys_rest_en = 35; if (machine_is_msm8625_qrd7()) gpio_bt_sys_rest_en = 88; if (machine_is_msm7627a_qrd3()) { if (socinfo == 0x70002) gpio_bt_sys_rest_en = 88; else gpio_bt_sys_rest_en = 85; } }
static int msm_fb_dsi_client_reset(void) { int rc = 0; #if 1 // #suwg. printk("xxx %s \n",__func__); return rc; #endif if (machine_is_msm7627a_qrd1()) rc = msm_fb_dsi_client_qrd1_reset(); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) rc = msm_fb_dsi_client_qrd3_reset(); else if (machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) rc = msm_fb_dsi_client_skud_reset(); else if (machine_is_msm8625q_skue()) rc = msm_fb_dsi_client_skue_reset(); else rc = msm_fb_dsi_client_msm_reset(); return rc; }
static void fix_sizes(void) { if (get_ddr_size() > SZ_512M) pmem_adsp_size = CAMERA_ZSL_SIZE; else { if (machine_is_msm8625q_skue() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) pmem_mdp_size = 0; } #ifdef CONFIG_ION_MSM msm_ion_audio_size = MSM_PMEM_AUDIO_SIZE; #ifdef CONFIG_CMA msm_ion_camera_size = CAMERA_ZSL_SIZE; msm_ion_camera_size_carving = 0; #else msm_ion_camera_size = pmem_adsp_size; msm_ion_camera_size_carving = msm_ion_camera_size; #endif msm_ion_sf_size = pmem_mdp_size; #endif }
static int __devinit mipi_hx8389b_lcd_probe(struct platform_device *pdev) { struct platform_device *pthisdev = NULL; pr_debug("%s\n", __func__); if (pdev->id == 0) { mipi_hx8389b_pdata = pdev->dev.platform_data; if (mipi_hx8389b_pdata->bl_lock) spin_lock_init(&mipi_hx8389b_pdata->bl_spinlock); /* SKUD use PWM as backlight control method */ if(machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { mipi_hx8389b_bl_ctrl = 1; } return 0; } pthisdev = msm_fb_add_device(pdev); mipi_hx8389b_create_sysfs(pthisdev); return 0; }
static void __init msm8625_device_i2c_init(void) { int i, rc; msm8625_gsbi0_qup_i2c_device.dev.platform_data = &msm_gsbi0_qup_i2c_pdata; msm8625_gsbi1_qup_i2c_device.dev.platform_data = &msm_gsbi1_qup_i2c_pdata; if ( machine_is_msm8625q_skud() || machine_is_msm8625q_skue() || cpu_is_msm8625q()) { for (i = 0 ; i < ARRAY_SIZE(msm8625q_i2c_gpio_config); i++) { rc = gpio_tlmm_config( msm8625q_i2c_gpio_config[i].gpio_cfg, GPIO_CFG_ENABLE); if (rc) pr_err("I2C-gpio tlmm config failed\n"); } rc = platform_device_register(&msm8625q_i2c_gpio); if (rc) pr_err("%s: could not register i2c-gpio device: %d\n", __func__, rc); } }
static void gpio_bt_config(void) { #if defined(CONFIG_QCT2243_V21) int pin, rc = 0; gpio_tlmm_config(fm_rds_int_init[0], GPIO_CFG_ENABLE); for (pin = 0; pin < ARRAY_SIZE(bt_config_power_off); pin++) { rc = gpio_tlmm_config(bt_config_power_off[pin], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("%s:" " gpio_tlmm_config(%#x)=%d\n", __func__, bt_config_power_off[pin], rc); } } #else u32 socinfo = socinfo_get_platform_version(); if (machine_is_msm7627a_qrd1()) gpio_bt_sys_rest_en = 114; if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) gpio_bt_sys_rest_en = 16; if (machine_is_msm8625_qrd7()) gpio_bt_sys_rest_en = 88; if (0 || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) gpio_bt_sys_rest_en = 35; if (machine_is_msm7627a_qrd3()) { if (socinfo == 0x70002) gpio_bt_sys_rest_en = 88; else gpio_bt_sys_rest_en = 85; } #endif }
void __init msm_msm7627a_allocate_memory_regions(void) { /*Add 4 framebuffer and delete the mem adapter strategy*/ void *addr; unsigned long fb_size; #ifndef CONFIG_HUAWEI_KERNEL if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) fb_size = MSM7x25A_MSM_FB_SIZE; else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt() || machine_is_qrd_skud_prime()) fb_size = MSM8x25_MSM_FB_SIZE; else if (machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) fb_size = MSM8x25Q_MSM_FB_SIZE; else fb_size = MSM_FB_SIZE; #else fb_size = get_framebuffer_size(); #endif addr = alloc_bootmem_align(fb_size, 0x1000); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + fb_size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", fb_size, addr, __pa(addr)); #ifdef CONFIG_MSM_V4L2_VIDEO_OVERLAY_DEVICE fb_size = MSM_V4L2_VIDEO_OVERLAY_BUF_SIZE; addr = alloc_bootmem_align(fb_size, 0x1000); msm_v4l2_video_overlay_resources[0].start = __pa(addr); msm_v4l2_video_overlay_resources[0].end = msm_v4l2_video_overlay_resources[0].start + fb_size - 1; pr_debug("allocating %lu bytes at %p (%lx physical) for v4l2\n", fb_size, addr, __pa(addr)); #endif }
void __init qrd7627a_add_io_devices(void) { int rc; int i; //hanjue /* touchscreen */ if (machine_is_msm7627a_qrd1()) { i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, synaptic_i2c_clearpad3k, ARRAY_SIZE(synaptic_i2c_clearpad3k)); } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { #if 1 //linxc 2012-12-21 +++ if (machine_is_msm8625_qrd5()) { i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, himax_ts_i2c_info, ARRAY_SIZE(himax_ts_i2c_info)); } #else /* Use configuration data for sku5 */ if (machine_is_msm8625_qrd5()) { mxt_config_array[0].config = mxt_config_data_qrd5; mxt_config_array[0].config_length = ARRAY_SIZE(mxt_config_data_qrd5); mxt_platform_data.panel_maxy = 875; mxt_platform_data.need_calibration = true; mxt_vkey_setup(); } if (machine_is_msm7x27a_qrd5a()) { mxt_config_array[0].config = mxt_config_data_qrd5a; mxt_config_array[0].config_length = ARRAY_SIZE(mxt_config_data_qrd5a); mxt_platform_data.panel_maxy = 875; mxt_vkey_setup(); } rc = gpio_tlmm_config(GPIO_CFG(MXT_TS_IRQ_GPIO, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, MXT_TS_IRQ_GPIO); } rc = gpio_tlmm_config(GPIO_CFG(MXT_TS_RESET_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, MXT_TS_RESET_GPIO); } i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, mxt_device_info, ARRAY_SIZE(mxt_device_info)); #endif //linxc 2012-12-21 --- } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7() || machine_is_msm8625q_skud() || machine_is_msm8625q_skue()) { ft5x06_touchpad_setup(); } /* headset */ platform_device_register(&hs_pdev); /* vibrator */ #ifdef CONFIG_MSM_RPC_VIBRATOR msm_init_pmic_vibrator(); #endif //add by hanjue /* change the keymap for qrd sku5 */ if(machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { kp_matrix_info_8625.keymap = keymap_8625_qrd5; kp_matrix_info_8625.output_gpios = kp_row_gpios_8625_qrd5; kp_matrix_info_8625.noutputs = ARRAY_SIZE(kp_row_gpios_8625_qrd5); for (i = 0; i < kp_matrix_info_8625.noutputs; i++) { rc = gpio_tlmm_config(GPIO_CFG(kp_matrix_info_8625.output_gpios[i], 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, kp_matrix_info_8625.output_gpios[i]); } } for (i = 0; i < kp_matrix_info_8625.ninputs; i++) { rc = gpio_tlmm_config(GPIO_CFG(kp_matrix_info_8625.input_gpios[i], 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, kp_matrix_info_8625.input_gpios[i]); } } } /* keypad */ if (machine_is_msm7627a_evb() || machine_is_msm8625_evb()|| machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm8625_qrd7()) platform_device_register(&kp_pdev_8625); else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) platform_device_register(&kp_pdev_qrd3); else if (machine_is_msm8625q_skud()) platform_device_register(&kp_pdev_skud); #if 0 /* keypad */ if (machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) kp_matrix_info_8625.keymap = keymap_8625_qrd5; if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) platform_device_register(&kp_pdev_8625); else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) platform_device_register(&kp_pdev_qrd3); else if (machine_is_msm8625q_skud()) platform_device_register(&kp_pdev_skud); #endif /*start by lf 2012.12.26 */ #if 0 /* leds */ if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { platform_device_register(&pmic_mpp_leds_pdev); platform_device_register(&tricolor_leds_pdev); } else if (machine_is_msm8625q_skud()) { platform_device_register(&pmic_mpp_leds_pdev_skud); /* enable the skud flash and torch by gpio leds driver */ platform_device_register(&gpio_flash_skud); } #endif /*end by lf 2012.12.26 */ #ifdef CONFIG_LEDS_TRICOLOR_FLAHSLIGHT /*tricolor leds init*/ if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { platform_device_register(&msm_device_tricolor_leds); tricolor_leds_gpio_setup(); } #endif }
void __init msm7627a_sensor_init(void) { #ifdef CONFIG_AVAGO_APDS990X if ( machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { pr_info("i2c_register_board_info APDS990X\n"); apds990x_setup(); } #endif #ifdef CONFIG_MPU_SENSORS_MPU3050 if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { pr_info("i2c_register_board_info MPU3050\n"); mpu3050_gpio_setup(); } #endif #ifdef CONFIG_BOSCH_BMA250 if (machine_is_msm8625_qrd7() || machine_is_msm7627a_qrd3() || machine_is_msm8625q_skud()) { pr_info("i2c_register_board_info BMA250 ACC\n"); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, bma250_i2c_info, ARRAY_SIZE(bma250_i2c_info)); } #endif #ifdef CONFIG_INPUT_ISL29028 if (machine_is_msm8625q_skud()) { pr_info("i2c_register_board_info ISL29028 ALP sensor!\n"); i2c_register_board_info(MSM_GSBI0_QUP_I2C_BUS_ID, isl29028_i2c_info, ARRAY_SIZE(isl29028_i2c_info)); } #endif #ifdef CONFIG_INPUT_LIS3DH if (machine_is_msm8625q_skue()) { lis3dh_acc_gpio_setup(); pr_info("i2c_register_board_info LIS3DH ACC\n"); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, lis3dh_acc_i2c_info, ARRAY_SIZE(lis3dh_acc_i2c_info)); } #endif #ifdef CONFIG_SENSORS_BMA250 i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, bma250_i2c_info, ARRAY_SIZE(bma250_i2c_info)); #endif #ifdef CONFIG_SENSORS_BMM050 i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, bmm050_i2c_info, ARRAY_SIZE(bmm050_i2c_info)); #endif #ifdef CONFIG_INPUT_LTR502 if (machine_is_msm8625_qrd7() || machine_is_msm7627a_qrd3()) { pr_info("i2c_register_board_info LTR502\n"); ltr502_light_gpio_setup(); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, ltr502_light_i2c_info, ARRAY_SIZE(ltr502_light_i2c_info)); } #endif #ifdef CONFIG_INPUT_LTR558_D9 printk("i2c_register_board_info LTR558 weiqingdan\n"); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, ltr558_light_i2c_info, ARRAY_SIZE(ltr558_light_i2c_info)); #endif #ifdef CONFIG_SENSORS_AK8975 if (machine_is_msm8625_qrd7() || machine_is_msm7627a_qrd3() || machine_is_msm8625q_skud()) { pr_info("i2c_register_board_info AKM8975\n"); akm_gpio_setup(); akm_platform_data_8975.gpio_DRDY = 18; akm8975_i2c_info[0].irq = gpio_to_irq(akm_platform_data_8975.gpio_DRDY); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, akm8975_i2c_info, ARRAY_SIZE(akm8975_i2c_info)); } #endif #ifdef CONFIG_INPUT_KXTJ9 if(machine_is_msm8625_skua()) { pr_info("i2c_register_board_info KXTJ9\n"); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, accel_kxtj9_i2c_info, ARRAY_SIZE(accel_kxtj9_i2c_info)); } #endif }
void __init msm_fb_add_devices(void) { int rc = 0; msm7x27a_set_display_params(prim_panel_name); if (machine_is_msm7627a_qrd1()) platform_add_devices(qrd_fb_devices, ARRAY_SIZE(qrd_fb_devices)); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) { mipi_NT35510_pdata.bl_lock = 1; mipi_NT35516_pdata.bl_lock = 1; if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(evb_fb_devices, ARRAY_SIZE(evb_fb_devices)); } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { sku3_lcdc_lcd_camera_power_init(); mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(qrd3_fb_devices, ARRAY_SIZE(qrd3_fb_devices)); } else if (machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) { if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(skud_fb_devices, ARRAY_SIZE(skud_fb_devices)); } else { /* mipi video mode need setting for support continuous splash */ if (get_hw_lcd_interface_type() == LCD_IS_MIPI_VIDEO) { mdp_pdata.cont_splash_enabled = 0x1; } else { mdp_pdata.cont_splash_enabled = 0x0; } platform_add_devices(msm_fb_devices, ARRAY_SIZE(msm_fb_devices)); } msm_fb_register_device("mdp", &mdp_pdata); if (machine_is_msm7625a_surf() || machine_is_msm7x27a_surf() || machine_is_msm8625_surf() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) msm_fb_register_device("lcdc", &lcdc_pdata); #ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); #endif if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt() || machine_is_msm8625q_evbd()) { gpio_reg_2p85v = regulator_get(&mipi_dsi_device.dev, "lcd_vdd"); if (IS_ERR(gpio_reg_2p85v)) pr_err("%s:ext_2p85v regulator get failed", __func__); gpio_reg_1p8v = regulator_get(&mipi_dsi_device.dev, "lcd_vddi"); if (IS_ERR(gpio_reg_1p8v)) pr_err("%s:ext_1p8v regulator get failed", __func__); if (mdp_pdata.cont_splash_enabled) { /*Enable EXT_2.85 and 1.8 regulators*/ rc = regulator_enable(gpio_reg_2p85v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); rc = regulator_enable(gpio_reg_1p8v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); } } }
static int mipi_dsi_panel_power(int on) { int rc = 0; #if 1 // #suwg. if(!odmm_dsi_gpio_initialized){ rc = gpio_request(ODMM_LCD_BACKLIGHT, "odmm_gpio_bkl_en"); if (rc < 0) return rc; rc = gpio_tlmm_config(GPIO_CFG(ODMM_LCD_BACKLIGHT, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc < 0) { pr_err("failed odmm GPIO_BACKLIGHT_EN tlmm config\n"); return rc; } rc = gpio_direction_output(ODMM_LCD_BACKLIGHT, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); gpio_free(ODMM_LCD_BACKLIGHT); return rc; } rc = regulator_bulk_get(NULL, ARRAY_SIZE(odmm_regs_dsi), odmm_regs_dsi); if (rc) { pr_err("%s: could not get regulators: %d\n", __func__, rc); goto fail_gpio2; } rc = regulator_bulk_set_voltage(ARRAY_SIZE(odmm_regs_dsi), odmm_regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } rc = regulator_bulk_enable(ARRAY_SIZE(odmm_regs_dsi), odmm_regs_dsi); // regulator_bulk_disable(ARRAY_SIZE(odmm_regs_dsi), odmm_regs_dsi); if (rc) pr_err("%s: could not %sable regulators: %d\n", __func__, on ? "en" : "dis", rc); odmm_dsi_gpio_initialized = 1; } return rc; fail_vreg: regulator_bulk_free(ARRAY_SIZE(odmm_regs_dsi), odmm_regs_dsi); fail_gpio2: gpio_free(ODMM_LCD_BACKLIGHT); return rc; #endif if (machine_is_msm7627a_qrd1()) rc = mipi_dsi_panel_qrd1_power(on); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) rc = mipi_dsi_panel_qrd3_power(on); else if (machine_is_msm8625q_skud()) rc = mipi_dsi_panel_skud_power(on); else if (machine_is_msm8625q_evbd()) rc = mipi_dsi_panel_evbd_power(on); else if (machine_is_msm8625q_skue()) rc = mipi_dsi_panel_skue_power(on); else rc = mipi_dsi_panel_msm_power(on); return rc; }
void __init msm_fb_add_devices(void) { int rc = 0; #if 1 // #suwg. printk("xxx %s \n",__func__); printk("machine_is_msm7627a_qrd1 %d\n",machine_is_msm7627a_qrd1()); printk("machine_is_msm8625q_skud %d\n",machine_is_msm8625q_skud()); printk("machine_is_msm7x27a_qrd5a %d\n",machine_is_msm7x27a_qrd5a()); printk("machine_is_msm8625_qrd5 %d\n",machine_is_msm8625_qrd5()); printk("disable_splash %d\n",disable_splash); msm7x27a_set_display_params(prim_panel_name); if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(odmm_fb_devices, ARRAY_SIZE(odmm_fb_devices)); msm_fb_register_device("mdp", &mdp_pdata); //#ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); //#endif return; #endif msm7x27a_set_display_params(prim_panel_name); if (machine_is_msm7627a_qrd1()) platform_add_devices(qrd_fb_devices, ARRAY_SIZE(qrd_fb_devices)); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { mipi_NT35510_pdata.bl_lock = 1; mipi_NT35516_pdata.bl_lock = 1; if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(evb_fb_devices, ARRAY_SIZE(evb_fb_devices)); } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { sku3_lcdc_lcd_camera_power_init(); mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(qrd3_fb_devices, ARRAY_SIZE(qrd3_fb_devices)); } else if (machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; /* SKUD and SKUD' use different lane connection */ if (cpu_is_msm8625q()){ if(!strncmp((char *)prim_panel_name, "mipi_video_hx8392a_720p", 23)) mipi_dsi_pdata.dlane_swap = 3; else mipi_dsi_pdata.dlane_swap = 0; pr_info("[DISP] The prim panel name is %s, Swap lane is %d\n", prim_panel_name,mipi_dsi_pdata.dlane_swap); } platform_add_devices(skud_fb_devices, ARRAY_SIZE(skud_fb_devices)); } else if (machine_is_msm8625q_skue()) { if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; /* SKUE and SKUE' use different lane connection */ if (cpu_is_msm8625q()) mipi_dsi_pdata.dlane_swap = 0; platform_add_devices(skue_fb_devices, ARRAY_SIZE(skue_fb_devices)); } else { mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(msm_fb_devices, ARRAY_SIZE(msm_fb_devices)); } msm_fb_register_device("mdp", &mdp_pdata); if (machine_is_msm7625a_surf() || machine_is_msm7x27a_surf() || machine_is_msm8625_surf() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) msm_fb_register_device("lcdc", &lcdc_pdata); #ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); #endif if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm8625q_evbd()) { gpio_reg_2p85v = regulator_get(&mipi_dsi_device.dev, "lcd_vdd"); if (IS_ERR(gpio_reg_2p85v)) pr_err("%s:ext_2p85v regulator get failed", __func__); gpio_reg_1p8v = regulator_get(&mipi_dsi_device.dev, "lcd_vddi"); if (IS_ERR(gpio_reg_1p8v)) pr_err("%s:ext_1p8v regulator get failed", __func__); if (mdp_pdata.cont_splash_enabled) { /*Enable EXT_2.85 and 1.8 regulators*/ rc = regulator_enable(gpio_reg_2p85v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); rc = regulator_enable(gpio_reg_1p8v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); } } }
static unsigned int msm_AR600X_shutdown_power(bool on) { int rc = 0; if (!wlan_powered_up) { pr_info("WLAN is not powered up, returning success\n"); return 0; } /* Disable the A0 clock */ rc = setup_wlan_clock(on); if (rc) { pr_err("%s: setup_wlan_clock = %d\n", __func__, rc); goto set_clock_fail; } /* * gpio_wlan_sys_rest_en is not from the GPIO expander for QRD7627a, * EVB1.0 and QRD8625,so the below step is required for those devices. */ if (machine_is_msm7627a_qrd1() || machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skue() || machine_is_msm8625q_skud()) { rc = gpio_tlmm_config(GPIO_CFG(gpio_wlan_sys_rest_en, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s gpio_tlmm_config 119 failed,error = %d\n", __func__, rc); goto gpio_fail; } gpio_set_value(gpio_wlan_sys_rest_en, 0); } else { rc = setup_wlan_gpio(on); if (rc) { pr_err("%s: setup_wlan_gpio = %d\n", __func__, rc); goto set_gpio_fail; } gpio_free(gpio_wlan_sys_rest_en); } /* GPIO_WLAN_3V3_EN is only required for the QRD7627a */ if (machine_is_msm7627a_qrd1()) { rc = gpio_tlmm_config(GPIO_CFG(GPIO_WLAN_3V3_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s gpio_tlmm_config 119 failed,error = %d\n", __func__, rc); goto qrd_gpio_fail; } gpio_set_value(GPIO_WLAN_3V3_EN, 0); } rc = wlan_switch_regulators(on); if (rc) { pr_err("%s: wlan_switch_regulators error = %d\n", __func__, rc); goto reg_disable; } wlan_powered_up = false; pr_info("WLAN power-down success\n"); return 0; set_clock_fail: setup_wlan_clock(0); set_gpio_fail: setup_wlan_gpio(0); gpio_fail: if (!(machine_is_msm7627a_qrd1() || machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()|| machine_is_msm8625q_skud() || machine_is_msm8625q_skue())) gpio_free(gpio_wlan_sys_rest_en); qrd_gpio_fail: /* GPIO_WLAN_3V3_EN is only required for the QRD7627a */ if (machine_is_msm7627a_qrd1()) gpio_free(GPIO_WLAN_3V3_EN); reg_disable: wlan_switch_regulators(0); pr_info("WLAN power-down failed\n"); return rc; }
void __init qrd7627a_add_io_devices(void) { int rc; /* touchscreen */ if (machine_is_msm7627a_qrd1()) { i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, synaptic_i2c_clearpad3k, ARRAY_SIZE(synaptic_i2c_clearpad3k)); } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) { /* Use configuration data for EVT */ if (machine_is_msm8625_evt()) { mxt_config_array[0].config = mxt_config_data_evt; mxt_config_array[0].config_length = ARRAY_SIZE(mxt_config_data_evt); mxt_platform_data.panel_maxy = 875; mxt_platform_data.need_calibration = true; mxt_vkey_setup(); } rc = gpio_tlmm_config(GPIO_CFG(MXT_TS_IRQ_GPIO, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, MXT_TS_IRQ_GPIO); } rc = gpio_tlmm_config(GPIO_CFG(MXT_TS_RESET_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, MXT_TS_RESET_GPIO); } i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, mxt_device_info, ARRAY_SIZE(mxt_device_info)); } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7() || machine_is_qrd_skud_prime() || machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { ft5x06_touchpad_setup(); /* evbd+ can support synaptic as well */ if (machine_is_msm8625q_evbd() && (socinfo_get_platform_type() == 0x13)) { /* for QPR EVBD+ with synaptic touch panel */ /* TODO: Add gpio request to the driver to support proper dynamic touch detection */ gpio_tlmm_config( GPIO_CFG(CLEARPAD3000_ATTEN_GPIO_EVBD_PLUS, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_8MA), GPIO_CFG_ENABLE); gpio_tlmm_config( GPIO_CFG(CLEARPAD3000_RESET_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); gpio_set_value(CLEARPAD3000_RESET_GPIO, 0); usleep(10000); gpio_set_value(CLEARPAD3000_RESET_GPIO, 1); usleep(50000); i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, rmi4_i2c_devices, ARRAY_SIZE(rmi4_i2c_devices)); } else { if (machine_is_msm8625q_evbd()) { mxt_config_array[0].config = mxt_config_data; mxt_config_array[0].config_length = ARRAY_SIZE(mxt_config_data); mxt_platform_data.panel_maxy = 875; mxt_platform_data.need_calibration = true; mxt_platform_data.irq_gpio = MXT_TS_EVBD_IRQ_GPIO; mxt_vkey_setup(); rc = gpio_tlmm_config(GPIO_CFG(MXT_TS_EVBD_IRQ_GPIO, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, MXT_TS_EVBD_IRQ_GPIO); } rc = gpio_tlmm_config(GPIO_CFG(MXT_TS_RESET_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); if (rc) { pr_err("%s: gpio_tlmm_config for %d failed\n", __func__, MXT_TS_RESET_GPIO); } i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, mxt_device_info, ARRAY_SIZE(mxt_device_info)); } } } /* handset and power key*/ /* ignore end key as this target doesn't need it */ hs_platform_data.ignore_end_key = true; platform_device_register(&hs_pdev); /* vibrator */ #ifdef CONFIG_MSM_RPC_VIBRATOR msm_init_pmic_vibrator(); #endif /* keypad */ if (machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) { kp_matrix_info_sku3.keymap = keymap_skud; kp_matrix_info_sku3.output_gpios = kp_row_gpios_skud; kp_matrix_info_sku3.input_gpios = kp_col_gpios_skud; kp_matrix_info_sku3.noutputs = ARRAY_SIZE(kp_row_gpios_skud); kp_matrix_info_sku3.ninputs = ARRAY_SIZE(kp_col_gpios_skud); /* keypad info for EVBD+ */ if (machine_is_msm8625q_evbd() && (socinfo_get_platform_type() == 0x13)) { gpio_tlmm_config(GPIO_CFG(37, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); gpio_tlmm_config(GPIO_CFG(42, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_8MA), GPIO_CFG_ENABLE); gpio_tlmm_config(GPIO_CFG(31, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_8MA), GPIO_CFG_ENABLE); kp_matrix_info_sku3.output_gpios = kp_row_gpios_evbdp; kp_matrix_info_sku3.input_gpios = kp_col_gpios_evbdp; kp_matrix_info_sku3.noutputs = ARRAY_SIZE(kp_row_gpios_evbdp); kp_matrix_info_sku3.ninputs = ARRAY_SIZE(kp_col_gpios_evbdp); } } if (machine_is_msm8625_evt()) kp_matrix_info_8625.keymap = keymap_8625_evt; if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) platform_device_register(&kp_pdev_8625); else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7() || machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) platform_device_register(&kp_pdev_sku3); /* leds */ if (machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) { ctp_backlight_info.flags = PM_MPP__I_SINK__LEVEL_40mA << 16 | PM_MPP_8; } if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt() || machine_is_qrd_skud_prime() || machine_is_msm8625q_evbd() || machine_is_msm8625q_skud()) platform_device_register(&pmic_mpp_leds_pdev); if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt() || machine_is_msm8625q_evbd()) platform_device_register(&tricolor_leds_pdev); }