int mipi_set_bl(int level) { int ret; /* modify by zhaiqingbo 2013.1.21, for LCD backligh */ #if 0 static int dsi_lcd_bl_initialized=0; if (unlikely(!dsi_lcd_bl_initialized)) { pmapp_disp_backlight_init(); dsi_lcd_bl_initialized = 1; } ret = pmapp_disp_backlight_set_brightness(level); if (ret) pr_err("%s: can't set lcd backlight!\n", __func__); #endif ret = gpio_tlmm_config(GPIO_CFG(GPIO_LCD_BL_PWM, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); gpio_set_value(GPIO_LCD_BL_PWM, level?1:0); /* modify end by zhaiqingbo */ return ret; }
static int mipi_dsi_panel_skud_power(int on) { int rc = 0; if (!skud_dsi_gpio_initialized) { pmapp_disp_backlight_init(); skud_dsi_gpio_initialized = 1; if (mdp_pdata.cont_splash_enabled) { /*Configure LCD Bridge reset*/ rc = gpio_tlmm_config(skud_mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("Failed to enable LCD Bridge reset enable\n"); return rc; } rc = gpio_direction_output(GPIO_SKUD_LCD_BRDG_RESET_N, 1); if (rc < 0) { pr_err("Failed GPIO bridge Reset\n"); gpio_free(GPIO_SKUD_LCD_BRDG_RESET_N); return rc; } return 0; } } if (on) { /*Configure LCD Bridge reset*/ rc = gpio_tlmm_config(skud_mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("Failed to enable LCD Bridge reset enable\n"); return rc; } rc = gpio_direction_output(GPIO_SKUD_LCD_BRDG_RESET_N, 1); if (rc < 0) { pr_err("Failed GPIO bridge Reset\n"); gpio_free(GPIO_SKUD_LCD_BRDG_RESET_N); return rc; } /*Toggle Bridge Reset GPIO*/ msleep(20); gpio_set_value_cansleep(GPIO_SKUD_LCD_BRDG_RESET_N, 0); msleep(5); gpio_set_value_cansleep(GPIO_SKUD_LCD_BRDG_RESET_N, 1); msleep(10); } else { gpio_tlmm_config(GPIO_CFG(GPIO_SKUD_LCD_BRDG_RESET_N, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_DISABLE); } return rc; }
static int mipi_dsi_panel_power(int on) { if (!dsi_gpio_initialized) { if (get_hw_lcd_ctrl_bl_type() == CTRL_BL_BY_MSM) { pmapp_disp_backlight_init(); } dsi_gpio_initialized = 1; } return 0; }
static void hx8357_backlight_set(int level) { int ret = 0; if(unlikely(!hx8357_state.bk_init)){ pmapp_disp_backlight_init(); hx8357_state.bk_init = TRUE; } ret = pmapp_disp_backlight_set_brightness(level*230/255); if (ret) printk(KERN_INFO"can't set backlight level=%d\n",level); }
static void lcdc_toshiba_gpio_init(void) { int rc = 0; if (!lcdc_gpio_initialized) { if (gpio_request(GPIO_SPI_CLK, "spi_clk")) { pr_err("failed to request gpio spi_clk\n"); return; } if (gpio_request(GPIO_SPI_CS0_N, "spi_cs")) { pr_err("failed to request gpio spi_cs0_N\n"); goto fail_gpio6; } if (gpio_request(GPIO_SPI_MOSI, "spi_mosi")) { pr_err("failed to request gpio spi_mosi\n"); goto fail_gpio5; } if (gpio_request(GPIO_SPI_MISO, "spi_miso")) { pr_err("failed to request gpio spi_miso\n"); goto fail_gpio4; } if (gpio_request(GPIO_DISPLAY_PWR_EN, "gpio_disp_pwr")) { pr_err("failed to request gpio_disp_pwr\n"); goto fail_gpio3; } if (gpio_request(GPIO_BACKLIGHT_EN, "gpio_bkl_en")) { pr_err("failed to request gpio_bkl_en\n"); goto fail_gpio2; } pmapp_disp_backlight_init(); rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_lcdc), regs_lcdc); if (rc) { pr_err("%s: could not get regulators: %d\n", __func__, rc); goto fail_gpio1; } rc = regulator_bulk_set_voltage(ARRAY_SIZE(regs_lcdc), regs_lcdc); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } lcdc_gpio_initialized = 1; } return; fail_vreg: regulator_bulk_free(ARRAY_SIZE(regs_lcdc), regs_lcdc); fail_gpio1: gpio_free(GPIO_BACKLIGHT_EN); fail_gpio2: gpio_free(GPIO_DISPLAY_PWR_EN); fail_gpio3: gpio_free(GPIO_SPI_MISO); fail_gpio4: gpio_free(GPIO_SPI_MOSI); fail_gpio5: gpio_free(GPIO_SPI_CS0_N); fail_gpio6: gpio_free(GPIO_SPI_CLK); lcdc_gpio_initialized = 0; }
static int mipi_dsi_panel_power(int on) { int rc = 0; uint32_t lcdc_reset_cfg; /* I2C-controlled GPIO Expander -init of the GPIOs very late */ if (unlikely(!dsi_gpio_initialized)) { pmapp_disp_backlight_init(); rc = gpio_request(GPIO_DISPLAY_PWR_EN, "gpio_disp_pwr"); if (rc < 0) { pr_err("failed to request gpio_disp_pwr\n"); return rc; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, 1); if (rc < 0) { pr_err("failed to enable display pwr\n"); goto fail_gpio1; } rc = gpio_request(GPIO_BACKLIGHT_EN, "gpio_bkl_en"); if (rc < 0) { pr_err("failed to request gpio_bkl_en\n"); goto fail_gpio1; } rc = gpio_direction_output(GPIO_BACKLIGHT_EN, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); goto fail_gpio2; } } rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_dsi), 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(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } if (pmapp_disp_backlight_set_brightness(100)) pr_err("backlight set brightness failed\n"); dsi_gpio_initialized = 1; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, on); gpio_set_value_cansleep(GPIO_BACKLIGHT_EN, on); } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa()) { if (on) { /* This line drives an active low pin on FFA */ rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, !on); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } else { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, !on); rc = gpio_direction_input(GPIO_DISPLAY_PWR_EN); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } } if (on) { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 0); if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { lcdc_reset_cfg = readl_relaxed(lcdc_reset_ptr); rmb(); lcdc_reset_cfg &= ~1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); msleep(20); wmb(); lcdc_reset_cfg |= 1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 0); msleep(20); gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 1); } } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 1); } rc = on ? regulator_bulk_enable(ARRAY_SIZE(regs_dsi), regs_dsi) : regulator_bulk_disable(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) pr_err("%s: could not %sable regulators: %d\n", __func__, on ? "en" : "dis", rc); return rc; fail_vreg: regulator_bulk_free(ARRAY_SIZE(regs_dsi), regs_dsi); fail_gpio2: gpio_free(GPIO_BACKLIGHT_EN); fail_gpio1: gpio_free(GPIO_DISPLAY_PWR_EN); dsi_gpio_initialized = 0; return rc; }
static int mipi_dsi_panel_qrd3_power(int on) { int rc = 0; if (!qrd3_dsi_gpio_initialized) { pmapp_disp_backlight_init(); rc = gpio_request(GPIO_QRD3_LCD_BACKLIGHT_EN, "qrd3_gpio_bkl_en"); if (rc < 0) return rc; qrd3_dsi_gpio_initialized = 1; if (mdp_pdata.cont_splash_enabled) { rc = gpio_tlmm_config(GPIO_CFG( GPIO_QRD3_LCD_BACKLIGHT_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc < 0) { pr_err("failed QRD3 GPIO_BACKLIGHT_EN tlmm config\n"); return rc; } rc = gpio_direction_output(GPIO_QRD3_LCD_BACKLIGHT_EN, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); gpio_free(GPIO_QRD3_LCD_BACKLIGHT_EN); return rc; } /*Configure LCD Bridge reset*/ rc = gpio_tlmm_config(qrd3_mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("Failed to enable LCD Bridge reset enable\n"); return rc; } rc = gpio_direction_output(GPIO_QRD3_LCD_BRDG_RESET_N, 1); if (rc < 0) { pr_err("Failed GPIO bridge Reset\n"); gpio_free(GPIO_QRD3_LCD_BRDG_RESET_N); return rc; } return 0; } } if (on) { rc = gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BACKLIGHT_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc < 0) { pr_err("failed QRD3 GPIO_BACKLIGHT_EN tlmm config\n"); return rc; } rc = gpio_direction_output(GPIO_QRD3_LCD_BACKLIGHT_EN, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); gpio_free(GPIO_QRD3_LCD_BACKLIGHT_EN); return rc; } /*Toggle Backlight GPIO*/ gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 1); udelay(100); gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 0); udelay(430); gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 1); /* 1 wire mode starts from this low to high transition */ udelay(50); /*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__); /*Configure LCD Bridge reset*/ rc = gpio_tlmm_config(qrd3_mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("Failed to enable LCD Bridge reset enable\n"); return rc; } rc = gpio_direction_output(GPIO_QRD3_LCD_BRDG_RESET_N, 1); if (rc < 0) { pr_err("Failed GPIO bridge Reset\n"); gpio_free(GPIO_QRD3_LCD_BRDG_RESET_N); return rc; } /*Toggle Bridge Reset GPIO*/ msleep(20); gpio_set_value_cansleep(GPIO_QRD3_LCD_BRDG_RESET_N, 0); msleep(20); gpio_set_value_cansleep(GPIO_QRD3_LCD_BRDG_RESET_N, 1); msleep(20); } else { gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BACKLIGHT_EN, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_DISABLE); gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BRDG_RESET_N, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_DISABLE); rc = regulator_disable(gpio_reg_2p85v); if (rc < 0) pr_err("%s: reg disable failed\n", __func__); rc = regulator_disable(gpio_reg_1p8v); if (rc < 0) pr_err("%s: reg disable failed\n", __func__); } return rc; }
static int __init mipi_hx8357_lcd_init(void) { int ret; //if(odmm_nt35516_lcd_id != ODMM_35516_NT35516_ID) // return 0; mipi_dsi_buf_alloc(&hx8357_tx_buf, DSI_BUF_SIZE);//mipi cmd buffer mipi_dsi_buf_alloc(&hx8357_rx_buf, DSI_BUF_SIZE); gpio_free(LCM_RESET_GPIO_PIN85); msm_lcm_reset(); ret = platform_driver_register(&this_driver); // msm_lcm_reset(); if (ret) { printk(KERN_ERR"mipi_hx8357_lcd_init platform_driver_register FAILED gaol \n"); return ret; } pinfo.xres = 480; pinfo.yres = 800; pinfo.type = MIPI_CMD_PANEL; pinfo.pdest = DISPLAY_1; pinfo.wait_cycle = 0; pinfo.bpp = 24; #if 1 pinfo.lcdc.h_back_porch = 29; pinfo.lcdc.h_front_porch = 7; pinfo.lcdc.h_pulse_width = 3;//8; pinfo.lcdc.v_back_porch = 12; pinfo.lcdc.v_front_porch = 16; pinfo.lcdc.v_pulse_width = 5;////1; #else pinfo.lcdc.h_back_porch = 100; pinfo.lcdc.h_front_porch = 100; pinfo.lcdc.h_pulse_width = 8; pinfo.lcdc.v_back_porch = 20; pinfo.lcdc.v_front_porch = 20; pinfo.lcdc.v_pulse_width = 1; #endif pinfo.lcdc.border_clr = 0; /* blk */ pinfo.lcdc.underflow_clr = 0xff; /* blue */ pinfo.lcdc.hsync_skew = 0; pinfo.bl_max = 255;//16; pinfo.bl_min = 1; pinfo.fb_num = 2; pinfo.clk_rate = 454000000; pinfo.lcd.vsync_enable = TRUE; pinfo.lcd.hw_vsync_mode = TRUE; pinfo.lcd.refx100 = 7200; //6200/* adjust refx100 to prevent tearing */ pinfo.mipi.mode = DSI_CMD_MODE; pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888; pinfo.mipi.vc = 0; pinfo.mipi.rgb_swap = DSI_RGB_SWAP_BGR;//DSI_RGB_SWAP_RGB; pinfo.mipi.data_lane0 = TRUE; pinfo.mipi.data_lane1 = TRUE; pinfo.mipi.t_clk_post = 0x20; pinfo.mipi.t_clk_pre = 0x2F; pinfo.mipi.stream = 0; /* dma_p */ pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW_TE;//DSI_CMD_TRIGGER_SW_TE; pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW; pinfo.mipi.te_sel = 1; /* TE from vsync gpio */ pinfo.mipi.interleave_max = 1; pinfo.mipi.insert_dcs_cmd = TRUE; pinfo.mipi.wr_mem_continue = 0x3c; pinfo.mipi.wr_mem_start = 0x2c; pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;//&dsi_cmd_mode_phy_db; pinfo.mipi.tx_eot_append = 0x01; pinfo.mipi.rx_eot_ignore = 0x0; pinfo.mipi.dlane_swap = 0x01; hx8357_panel_data.panel_info = pinfo; ret = platform_device_register(&this_device); if (ret) platform_driver_unregister(&this_driver); // msm_lcm_reset(); pmapp_disp_backlight_init(); return ret; }
static int mipi_dsi_panel_evbd_power(int on) { int rc = 0; if (!evbd_dsi_gpio_initialized) { pmapp_disp_backlight_init(); evbd_dsi_gpio_initialized = 1; if (mdp_pdata.cont_splash_enabled) { /*Configure LCD Bridge reset*/ rc = gpio_tlmm_config(skud_mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("Failed to enable LCD Bridge reset enable\n"); return rc; } rc = gpio_direction_output(GPIO_SKUD_LCD_BRDG_RESET_N, 1); if (rc < 0) { pr_err("Failed GPIO bridge Reset\n"); gpio_free(GPIO_SKUD_LCD_BRDG_RESET_N); return rc; } return 0; } } if (on) { /*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__); /*Configure LCD Bridge reset*/ rc = gpio_tlmm_config(skud_mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc < 0) { pr_err("Failed to enable LCD Bridge reset enable\n"); return rc; } rc = gpio_direction_output(GPIO_SKUD_LCD_BRDG_RESET_N, 1); if (rc < 0) { pr_err("Failed GPIO bridge Reset\n"); gpio_free(GPIO_SKUD_LCD_BRDG_RESET_N); return rc; } /*Toggle Bridge Reset GPIO*/ msleep(20); gpio_set_value_cansleep(GPIO_SKUD_LCD_BRDG_RESET_N, 0); msleep(20); gpio_set_value_cansleep(GPIO_SKUD_LCD_BRDG_RESET_N, 1); msleep(20); } else { gpio_tlmm_config(GPIO_CFG(GPIO_SKUD_LCD_BRDG_RESET_N, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_DISABLE); rc = regulator_disable(gpio_reg_2p85v); if (rc < 0) pr_err("%s: reg disable failed\n", __func__); rc = regulator_disable(gpio_reg_1p8v); if (rc < 0) pr_err("%s: reg disable failed\n", __func__); } return rc; }
static int mipi_dsi_panel_msm_power(int on) { /*++ Huize - 20120927 Modify for identifying what the code is used by customization ++*/ #ifdef DISPLAY_CUSTOMIZATION int rc = 0; if (unlikely(!dsi_gpio_initialized)) { pr_emerg("%s\n", __func__); #ifndef CONFIG_LEDS_CHIP_LM3533 rc = gpio_request(GPIO_BACKLIGHT_EN, "gpio_bl_en"); if (rc < 0) { pr_err("failed to request gpio_bl_en\n"); return rc; } rc = gpio_tlmm_config( GPIO_CFG(GPIO_BACKLIGHT_EN,0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); #endif if (rc) { pr_err("Failed to enable gpio_bl_en\n"); goto fail_gpio1; } rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_dsi), 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(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } dsi_gpio_initialized = 1; } #else int rc = 0; uint32_t lcdc_reset_cfg; /* I2C-controlled GPIO Expander -init of the GPIOs very late */ if (unlikely(!dsi_gpio_initialized)) { pmapp_disp_backlight_init(); rc = gpio_request(GPIO_DISPLAY_PWR_EN, "gpio_disp_pwr"); if (rc < 0) { pr_err("failed to request gpio_disp_pwr\n"); return rc; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, 1); if (rc < 0) { pr_err("failed to enable display pwr\n"); goto fail_gpio1; } rc = gpio_request(GPIO_BACKLIGHT_EN, "gpio_bkl_en"); if (rc < 0) { pr_err("failed to request gpio_bkl_en\n"); goto fail_gpio1; } rc = gpio_direction_output(GPIO_BACKLIGHT_EN, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); goto fail_gpio2; } } rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_dsi), 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(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } if (pmapp_disp_backlight_set_brightness(100)) pr_err("backlight set brightness failed\n"); dsi_gpio_initialized = 1; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, on); gpio_set_value_cansleep(GPIO_BACKLIGHT_EN, on); } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (on) { /* This line drives an active low pin on FFA */ rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, !on); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } else { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, !on); rc = gpio_direction_input(GPIO_DISPLAY_PWR_EN); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } } if (on) { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 0); if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { lcdc_reset_cfg = readl_relaxed(lcdc_reset_ptr); rmb(); lcdc_reset_cfg &= ~1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); msleep(20); wmb(); lcdc_reset_cfg |= 1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 0); msleep(20); gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 1); } } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 1); } #endif /*-- Huize - 20120927 Modify for identifying what the code is used by customization --*/ rc = on ? regulator_bulk_enable(ARRAY_SIZE(regs_dsi), regs_dsi) : regulator_bulk_disable(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) pr_err("%s: could not %sable regulators: %d\n", __func__, on ? "en" : "dis", rc); return rc; fail_vreg: regulator_bulk_free(ARRAY_SIZE(regs_dsi), regs_dsi); fail_gpio2: gpio_free(GPIO_BACKLIGHT_EN); fail_gpio1: //Jordan-20111230 , remove // gpio_free(GPIO_DISPLAY_PWR_EN); dsi_gpio_initialized = 0; return rc; }