static int oled_panel_blank(struct msm_lcdc_panel_ops *op)
{
	printk(KERN_DEBUG "%s\n", __func__);
	atomic_set(&gate, 0);
	if (!panel_type) {
	/* start display off sequence */
	lcm_spi_write(0x4, 0x3);
	hr_msleep(100);
	lcm_spi_write(0x4, 0x1);
	hr_msleep(60);
	lcm_spi_write(0x4, 0x0);
	hr_msleep(100);
	lcm_spi_write(0x20, 0x0);
	} else {
		/* config LCDC pin mux to gpio function */
		config_legend_display_off_gpios();
		gpio_set_value(LEGEND_LCD_VSYNC, 0);
                gpio_set_value(LEGEND_LCD_HSYNC, 0);
                gpio_set_value(LEGEND_LCD_DE, 0);
                gpio_set_value(LEGEND_GPIO_EL_EN, 0);
                gpio_set_value(LEGEND_GPIO_EL_ADJ, 0);
                gpio_set_value(LEGEND_GPIO_LCD_RST_N, 0);
		hr_msleep(10);
		lcm_spi_write(0x28, 0x00);
		lcm_spi_write(0x10, 0x00);
		hr_msleep(120);
	}
	microp_spi_vote_enable(SPI_LCM, 0);
	return 0;
}
static int hs_1wire_init(void)
{
    char all_zero = 0;
    char send_data = 0xF5;

    HS_LOG("[1-wire]hs_1wire_init");
    fp = openFile(hi->pdata.onewire_tty_dev,O_RDWR|O_SYNC|O_NONBLOCK,0660);
    HS_LOG("Open %s", hi->pdata.onewire_tty_dev);
    if (fp != NULL) {
        if (!fp->private_data) {
            HS_LOG("No private data");
            if (hi->pdata.tx_level_shift_en)
                gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
            if (hi->pdata.uart_sw)
                gpio_set_value_cansleep(hi->pdata.uart_sw, 0);
            hi->aid = 0;
            closeFile(fp);
            return -1;
        }
    } else {
        HS_LOG("%s, openFile is NULL pointer\n", __func__);
        return -1;
    }
    setup_hs_tty(fp);
    HS_LOG("Setup HS tty");
    if (hi->pdata.tx_level_shift_en) {
        gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 0);
        HS_LOG("[HS]set tx_level_shift_en to 0");
    }
    if (hi->pdata.uart_sw) {
        gpio_set_value_cansleep(hi->pdata.uart_sw, 1);
        HS_LOG("[HS]Set uart sw = 1");
    }
    hi->aid = 0;
    hr_msleep(20);
    writeFile(fp,&all_zero,1);
    hr_msleep(5);
    writeFile(fp,&send_data,1);
    HS_LOG("Send 0x00 0xF5");
    usleep(300);
    if (hi->pdata.tx_level_shift_en)
        gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
    HS_LOG("[HS]Disable level shift");
    hr_msleep(22);
    if (hs_read_aid() == 0) {
        HS_LOG("[1-wire]Valid AID received, enter 1-wire mode");
        if (hi->pdata.tx_level_shift_en)
            gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
        closeFile(fp);
        return 0;
    } else {
        if (hi->pdata.tx_level_shift_en)
            gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
        if (hi->pdata.uart_sw)
            gpio_set_value_cansleep(hi->pdata.uart_sw, 0);
        hi->aid = 0;
        closeFile(fp);
        return -1;
    }
}
static void golfu_panel_power(int on)
{

	PR_DISP_INFO("%s: power %s.\n", __func__, on ? "on" : "off");

	if (on) {
		gpio_set_value(GOLFU_GPIO_LCD_RST_N, 1);
		hr_msleep(1);
		gpio_set_value(GOLFU_GPIO_LCM_1v8_EN, 1);
		hr_msleep(5);
		gpio_set_value(GOLFU_GPIO_LCM_2v85_EN, 1);
		hr_msleep(1);
		gpio_set_value(GOLFU_GPIO_LCD_RST_N, 1);
		hr_msleep(1);
		gpio_set_value(GOLFU_GPIO_LCD_RST_N, 0);
		udelay(50);
		gpio_set_value(GOLFU_GPIO_LCD_RST_N, 1);
		udelay(50);
	} else {
		gpio_set_value(GOLFU_GPIO_LCM_2v85_EN, 0);

		gpio_set_value(GOLFU_GPIO_LCM_1v8_EN, 0);
		hr_msleep(300);
		gpio_set_value(GOLFU_GPIO_LCD_RST_N, 0);
	}
}
static int hs_1wire_init(void)
{
	char all_zero = 0;
	char send_data = 0xF5;

	HS_LOG("[1-wire]hs_1wire_init");
	fp = openFile(hi->pdata.onewire_tty_dev,O_CREAT|O_RDWR|O_NONBLOCK,0666);
	HS_LOG("Open %s", hi->pdata.onewire_tty_dev);
	if (!fp->private_data) {
		HS_LOG("No private data");
		if (hi->pdata.tx_level_shift_en)
			gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
		if (hi->pdata.uart_sw)
			gpio_set_value_cansleep(hi->pdata.uart_sw, 0);
		hi->aid = 0;
		closeFile(fp);
		return -1;
	}
	setup_hs_tty(fp);
	HS_LOG("Setup HS tty");
	if (hi->pdata.tx_level_shift_en) {
		gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 0); /*Level shift low enable*/
		HS_LOG("[HS]set tx_level_shift_en to 0");
	}
	if (hi->pdata.uart_sw) {
		gpio_set_value_cansleep(hi->pdata.uart_sw, 1); /* 1: UART I/O to Audio Jack, 0: UART I/O to others */
		HS_LOG("[HS]Set uart sw = 1");
	}
	hi->aid = 0;
	hr_msleep(20);
	writeFile(fp,&all_zero,1);
	hr_msleep(5);
	writeFile(fp,&send_data,1);
//	if (hi->pdata.remote_press) {
//		while(gpio_get_value(hi->pdata.remote_press) == 1) {
//			HS_LOG("[HS]Polling remote_press low");
//		}
//	}
	HS_LOG("Send 0x00 0x35");
	usleep(300);
	if (hi->pdata.tx_level_shift_en)
		gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
	HS_LOG("[HS]Disable level shift");
	hr_msleep(22);
	if (hs_read_aid() == 0) {
		HS_LOG("[1-wire]Valid AID received, enter 1-wire mode");
		if (hi->pdata.tx_level_shift_en)
			gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
		closeFile(fp);
		return 0;
	} else {
		if (hi->pdata.tx_level_shift_en)
			gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
		if (hi->pdata.uart_sw)
			gpio_set_value_cansleep(hi->pdata.uart_sw, 0);
		hi->aid = 0;
		closeFile(fp);
		return -1;
	}
}
static void flyer_panel_power(bool on_off)
{
	int gpio_lcm_en, gpio_lvds_on;

	if (panel_type != PANEL_ID_FLR_SMD_XB) {
		gpio_lcm_en = FLYER_LCM_3V3_EN_XC;
		gpio_lvds_on = FLYER_LVDS_ON_XC;
	} else {
		gpio_lcm_en = FLYER_LCM_3V3_EN;
		gpio_lvds_on = FLYER_LVDS_ON;
	}

	if (!!on_off) {
		LCMDBG("%s(%d):\n", __func__, on_off);
		vreg_enable(vreg_lcm_1v8);
		gpio_set_value(gpio_lcm_en, 1);
		if(panel_type == PANEL_ID_FLR_LG_XC || panel_type == PANEL_ID_FLR_LG_WS2)
			hr_msleep(50);
		else
			hr_msleep(90);
		gpio_set_value(gpio_lvds_on, 1);
	} else {
		gpio_set_value(gpio_lcm_en, 0);
		if(panel_type == PANEL_ID_FLR_LG_XC || panel_type == PANEL_ID_FLR_LG_WS2)
			hr_msleep(50);
		else
			hr_msleep(60);
		gpio_set_value(gpio_lvds_on, 0);
		vreg_disable(vreg_lcm_1v8);
	}

}
示例#6
0
int mdp_dsi_video_off(struct platform_device *pdev)
{
	int ret = 0;
	int retry_cnt = 0;
	struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev);
	PR_DISP_INFO("%s\n", __func__);

	if (panel_type == PANEL_ID_PROTOU_LG || panel_type == PANEL_ID_PROTODCG_LG) {
		if(!mfd) {
			PR_DISP_ERR("mdp_dsi_video_off: mfd is NULL\n");
			return -ENODEV;
		}

		do {
			memset(mfd->fbi->screen_base, 0x00, mfd->fbi->fix.smem_len);
			hr_msleep(80);

#ifdef CONFIG_MACH_DUMMY
			ret = protodcg_lcd_off2(pdev);
#elif defined CONFIG_MACH_PROTOU
			ret = protou_lcd_off2(pdev);
#else
#endif

			if (ret < 0) {
				panel_next_off(pdev);
				hr_msleep(2);
				panel_next_on(pdev);
				hr_msleep(5);
				retry_cnt++;
			} else {
				ret = 0;
				break;
			}
		} while (retry_cnt < 10);
		PR_DISP_INFO("%s : mipi_lg_lcd_off retry_cnt = %d\n", __func__, retry_cnt);
		hr_msleep(20);
	}

	mdp_histogram_ctrl_all(FALSE);
	
	mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
	MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE, 0);
	
	mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
	
	mdp_pipe_ctrl(MDP_DMA2_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);

	ret = panel_next_off(pdev);

	atomic_set(&vsync_cntrl.suspend, 1);
	atomic_set(&vsync_cntrl.vsync_resume, 0);
	complete_all(&vsync_cntrl.vsync_wait);
	
	msleep(20);

	return ret;
}
示例#7
0
int panel_power_on(void)
{
  int rc;

  /* turn on L19 for OJ. Note: must before L12 */
  rc = vreg_enable(vreg_ldo19);
  if (rc) {
    pr_err("%s: LDO19 vreg enable failed (%d)\n",
           __func__, rc);
    return -1;
  }
  hr_msleep(5);
  rc = vreg_enable(vreg_ldo12);
  if (rc) {
    pr_err("%s: LDO12 vreg enable failed (%d)\n",
           __func__, rc);
    return -1;
  }
  hr_msleep(5);
  rc = vreg_enable(vreg_ldo20);
  if (rc) {
    pr_err("%s: LDO20 vreg enable failed (%d)\n",
           __func__, rc);
    return -1;
  }
  hr_msleep(5);

  if (is_samsung_panel())
    {
      hr_msleep(5);
      gpio_set_value(VISION_LCD_RSTz, 1);
      hr_msleep(25);
      gpio_set_value(VISION_LCD_RSTz, 0);
      hr_msleep(10);
      gpio_set_value(VISION_LCD_RSTz, 1);
      hr_msleep(20);
      /* XA, XB board has HW panel issue, need to set EL_EN pin */
      if(system_rev <= 1)
        gpio_set_value(VISION_EL_EN, 1);
    }
  else
    {
      hr_msleep(10);
      gpio_set_value(VISION_LCD_RSTz, 1);
      hr_msleep(10);
      gpio_set_value(VISION_LCD_RSTz, 0);
      udelay(500);
      gpio_set_value(VISION_LCD_RSTz, 1);
      hr_msleep(10);
    }

  return 0;
}
/* MM-VH-DISPLAY-NICKI17*[ */
static int msm_fb_dsi_client_reset(int hold)
{
	int retVal = 0;
	static int isGPIOInit = 0;
/* MM-VH-DISPLAY-NICKI18* */
	pr_info("[DISPLAY] +%s(%d)\n", __func__, hold);

	/* GPIO INIT */
	if(isGPIOInit == 0){
		retVal = gpio_request(DISP_RST_GPIO, "disp_rst_n");
		if (retVal) {
			pr_err("[DISPLAY] %s: Failed to request lcm_reset, error=%d\n", __func__, retVal);
			retVal = -ENODEV;
			goto error;
		}
		
		retVal = gpio_tlmm_config(GPIO_CFG(DISP_RST_GPIO , 0, GPIO_CFG_OUTPUT,
									GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
		isGPIOInit = 1;
	}
	
	if (hold) {
		retVal = gpio_direction_output(DISP_RST_GPIO , 0);
	} else {
#ifdef CONFIG_FIH_HR_MSLEEP
		hr_msleep(2);
		retVal = gpio_direction_output(DISP_RST_GPIO , 1);
		hr_msleep(2);
		retVal |= gpio_direction_output(DISP_RST_GPIO , 0);
		hr_msleep(2);
		retVal |= gpio_direction_output(DISP_RST_GPIO , 1);
#else
		msleep(2);
		retVal = gpio_direction_output(DISP_RST_GPIO , 1);
		msleep(2);
		retVal |= gpio_direction_output(DISP_RST_GPIO , 0);
		msleep(2);
		retVal |= gpio_direction_output(DISP_RST_GPIO , 1);
#endif
	}
	
error:

	if (retVal != 0) {
		pr_err("[DISPLAY] %s: Failed LCD reset enable\n", __func__);
	}

	return retVal;
}
static int hs_1wire_init(void)
{
	char all_zero = 0;
	char send_data = 0x35;

	HS_LOG("[1-wire]hs_1wire_init");
	fp = openFile(hi->pdata.onewire_tty_dev,O_CREAT|O_RDWR|O_SYNC,0666);
	HS_LOG("Open %s", hi->pdata.onewire_tty_dev);
	if (!(fp->private_data)) {
		HS_LOG("No private data");
		return -1;
	}
	setup_hs_tty(fp);
	HS_LOG("Setup HS tty");
	if (hi->pdata.tx_level_shift_en) {
		gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 0); 
		HS_LOG("[HS]set tx_level_shift_en to 0");
	}
	if (hi->pdata.uart_sw)
		gpio_set_value_cansleep(hi->pdata.uart_sw, 1); 
	hi->aid = 0;
	hr_msleep(20);
	writeFile(fp,&all_zero,1);
	hr_msleep(5);
	writeFile(fp,&send_data,1);
	if (hi->pdata.remote_press) {
		while(gpio_get_value(hi->pdata.remote_press) == 1) {
			HS_LOG("[HS]Polling remote_press low");
		}
	}
	hr_msleep(1);
	if (hi->pdata.tx_level_shift_en)
		gpio_set_value(hi->pdata.tx_level_shift_en, 1);
	HS_LOG("[HS]Disable level shift");
	hr_msleep(22);
	if (hs_read_aid() == 0) {
		HS_LOG("[1-wire]Valid AID received, enter 1-wire mode");
		return 0;
	} else {
		if (hi->pdata.tx_level_shift_en)
			gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
		if (hi->pdata.uart_sw)
			gpio_set_value_cansleep(hi->pdata.uart_sw, 0);
		hi->aid = 0;
		closeFile(fp);
		return -1;
	}
}
static int
chacha_mddi_init(struct msm_mddi_bridge_platform_data *bridge_data,
		     struct msm_mddi_client_data *client_data)
{
	int i = 0, array_size;
	struct mddi_cmd *renesas_init_cmd;
	B(KERN_DEBUG "%s\n", __func__);

	if (panel_type == 1) {
		renesas_init_cmd = renesas_toppan_init_cmd_table;
		array_size = ARRAY_SIZE(renesas_toppan_init_cmd_table);
	} else {
		renesas_init_cmd = renesas_init_cmd_table;
		array_size = ARRAY_SIZE(renesas_init_cmd_table);
	}

	for (i = 0; i < array_size; i++) {
		client_data->remote_write_vals(client_data,
				renesas_init_cmd[i].vals,
				renesas_init_cmd[i].cmd,
				renesas_init_cmd[i].len);
		if (renesas_init_cmd[i].delay)
			hr_msleep(renesas_init_cmd[i].delay);
	}
	B(KERN_DEBUG "%s end\n", __func__);
	return 0;
}
static int hs_1wire_read_key(void)
{
    char key_code[10];
    int read_count, retry, i;

    if (hs_1wire_open()!=0)
        return -1;
    for (retry = 0; retry < 3; retry++) {
        read_count = readFile(fp, key_code, 10);
        HS_LOG("[1wire]key read_count = %d", read_count);
        if (read_count > 0) {
            for (i = 0; i < read_count; i++) {
                HS_LOG("[1wire]key_code[%d] = 0x%x", i, key_code[i]);
                if (key_code[i] == hi->pdata.one_wire_remote[0])
                    return 1;
                else if (key_code[i] == hi->pdata.one_wire_remote[2])
                    return 2;
                else if (key_code[i] == hi->pdata.one_wire_remote[4])
                    return 3;
                else if (key_code[i] == hi->pdata.one_wire_remote[1])
                    return 0;
                else
                    HS_LOG("Non key data, dropped");
            }
        }
        hr_msleep(50);
    }
    return -1;
}
static int express_smd_panel_blank(struct msm_lcdc_panel_ops *ops)
{
    express_adjust_backlight(0);
    atomic_set(&lcm_init_done, 0);
    hr_msleep(250);
    return 0;
}
static int express_smd_panel_unblank(struct msm_lcdc_panel_ops *ops)
{
    hr_msleep(250);
    atomic_set(&lcm_init_done, 1);
    express_adjust_backlight(last_val);
    return 0;
}
static int mecha_sharp_panel_unblank(struct msm_lcdc_panel_ops *ops)
{
	struct spi_msg set_brightness = {
                .cmd = 0x51,
                .len = 1,
                .data = (unsigned char *)&last_val,
	};

        LCMDBG("\n");
	if (color_enhancement == 0) {
		mecha_mdp_color_enhancement(mdp_pdata.mdp_dev);
		color_enhancement = 1;
	}
        mutex_lock(&panel_lock);
	qspi_send_9bit(&set_brightness);
	lcm_sharp_write_seq(sharp_turn_on_backlight,
	ARRAY_SIZE(sharp_turn_on_backlight));
        mutex_unlock(&panel_lock);
        return 0;
}

static int mecha_sharp_panel_blank(struct msm_lcdc_panel_ops *ops)
{
	LCMDBG("\n");
	mutex_lock(&panel_lock);
	lcm_sharp_write_seq(sharp_blank_seq, ARRAY_SIZE(sharp_blank_seq));
	hr_msleep(100);
	mutex_unlock(&panel_lock);
	return 0;
}
static int sonywvga_panel_blank(struct msm_lcdc_panel_ops *panel_data)
{
	uint8_t data[4] = {0, 0, 0, 0};
	LCMDBG("%s\n", __func__);

	mutex_lock(&panel_lock);

	blank_msg.cmd = 0x28;
	qspi_send_9bit(&blank_msg);
	blank_msg.cmd = 0x10;
	qspi_send_9bit(&blank_msg);
	hr_msleep(40);
	g_unblank_stage = 0;
	mutex_unlock(&panel_lock);
	sonywvga_panel_power(0);

	if (!is_sony_spi()) {
		data[0] = 5;
		data[1] = 0;
		data[3] = 1;
		microp_i2c_write(0x25, data, 4);
	}

	return 0;
}
static void
mddi_novatec_power(struct msm_mddi_client_data *client_data, int on)
{
	int rc;
	unsigned config;	
	if (on) {
		if(axi_clk)
			clk_set_rate(axi_clk, 192000000);

		config = PCOM_GPIO_CFG(GLACIER_MDDI_TE, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(GLACIER_LCD_ID2, 0, GPIO_INPUT, GPIO_NO_PULL, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(GLACIER_LCD_ID1, 0, GPIO_INPUT, GPIO_NO_PULL, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(GLACIER_LCD_ID0, 0, GPIO_INPUT, GPIO_NO_PULL, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);

		/* OJ_2V85*/
		vreg_enable(OJ_2V85);
		vreg_enable(V_LCMIO_2V8);
		vreg_enable(V_LCMIO_1V8);

		gpio_set_value(GLACIER_LCD_RSTz, 1);
		hr_msleep(13);
		gpio_set_value(GLACIER_LCD_RSTz, 0);
		hr_msleep(13);
		gpio_set_value(GLACIER_LCD_RSTz, 1);
		hr_msleep(13);

	} else {
		gpio_set_value(GLACIER_LCD_RSTz, 0);
		vreg_disable(V_LCMIO_2V8);
		vreg_disable(V_LCMIO_1V8);
		/* OJ_2V85*/
		vreg_disable(OJ_2V85);

		config = PCOM_GPIO_CFG(GLACIER_MDDI_TE, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(GLACIER_LCD_ID2, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(GLACIER_LCD_ID1, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(GLACIER_LCD_ID0, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
	}
}
示例#17
0
static void hs_1wire_deinit(void)
{
	char all_zero = 0xaa;
	if (fp) {
		if (hi->pdata.tx_level_shift_en)
			gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 0);
		hr_msleep(20);
		writeFile(fp, &all_zero, 1); 
		HS_LOG("Write 0xaa to unblock");
		hr_msleep(10);
		HS_LOG("close file");
		closeFile(fp);
		fp = NULL;
		if (hi->pdata.tx_level_shift_en)
			gpio_set_value_cansleep(hi->pdata.tx_level_shift_en, 1);
	}
}
示例#18
0
bool Tri_state_dongle_GPIO0(void)
{
    bool result = true;

#if 1

#define	INTR_CBUS1_DESIRED_MASK			(BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6)
#define	UNMASK_CBUS1_INTERRUPTS			I2C_WriteByte(CBUS_SLAVE_ADDR, 0x09, INTR_CBUS1_DESIRED_MASK)
#define	MASK_CBUS1_INTERRUPTS			I2C_WriteByte(CBUS_SLAVE_ADDR, 0x09, 0x00)
#define	INTR_CBUS2_DESIRED_MASK			(BIT_2 | BIT_3 | BIT_4)
#define	UNMASK_CBUS2_INTERRUPTS			I2C_WriteByte(CBUS_SLAVE_ADDR, 0x1F, INTR_CBUS2_DESIRED_MASK)
#define	MASK_CBUS2_INTERRUPTS			I2C_WriteByte(CBUS_SLAVE_ADDR, 0x1F, 0x00)

    int timeout = 100;

    MASK_CBUS1_INTERRUPTS;
    MASK_CBUS2_INTERRUPTS;


    //don't activate this function before problem solved
    return result;


    while(mscCmdInProgress && --timeout) {
        hr_msleep(1);
    }

    printk("%s: timeout = %d\n", __func__, timeout);

    if(!timeout) {
        result = false;
        goto l_end;
    }
#endif
    I2C_WriteByte(CBUS_SLAVE_ADDR,0x13, 0x33);       // enable backdoor access
    I2C_WriteByte(CBUS_SLAVE_ADDR,0x14, 0x80);
    I2C_WriteByte(CBUS_SLAVE_ADDR,0x12, 0x08);

    // Set GPIO0=Input
    I2C_WriteByte(CBUS_SLAVE_ADDR, 0xc0,  0xff);          // main page  ; FE for Cbus page
    I2C_WriteByte(CBUS_SLAVE_ADDR, 0xc1,  0x7F);        // offset
    I2C_WriteByte(CBUS_SLAVE_ADDR, 0xc2,  0xFF);       // data set GPIO=input
    I2C_WriteByte(CBUS_SLAVE_ADDR, 0x20,  0x02);         // burst length-1
    I2C_WriteByte(CBUS_SLAVE_ADDR, 0x13,  0x48);         // offset in scratch pad
    I2C_WriteByte(CBUS_SLAVE_ADDR, 0x12,  0x10);        // trig this command

    I2C_WriteByte(CBUS_SLAVE_ADDR,0x13, 0x33);           // disable backdoor access
    I2C_WriteByte(CBUS_SLAVE_ADDR,0x14, 0x00);
    I2C_WriteByte(CBUS_SLAVE_ADDR,0x12, 0x08);

#if 1
l_end:
    UNMASK_CBUS2_INTERRUPTS;
    UNMASK_CBUS1_INTERRUPTS;
#endif

    return result;
}
示例#19
0
static void
mddi_novatec_power(struct msm_mddi_client_data *client_data, int on)
{
    if (on) {
        if(axi_clk)
            clk_set_rate(axi_clk, 192000000);

        vreg_enable(V_LCM_2V85);
        hr_msleep(3);
        vreg_disable(V_LCM_2V85);
        hr_msleep(50);
        vreg_enable(V_LCM_2V85);
        vreg_enable(V_LCMIO_1V8);
        hr_msleep(2);
        gpio_set_value(SPEEDY_LCD_RSTz, 1);
        hr_msleep(1);
        gpio_set_value(SPEEDY_LCD_RSTz, 0);
        hr_msleep(1);
        gpio_set_value(SPEEDY_LCD_RSTz, 1);
        hr_msleep(60);
    } else {
        gpio_set_value(SPEEDY_LCD_RSTz, 0);
        hr_msleep(10);
        vreg_disable(V_LCMIO_1V8);
        vreg_disable(V_LCM_2V85);
    }
}
static void mecha_auo_panel_power(bool on_off)
{
	if (!!on_off) {
		LCMDBG("%s(%d):\n", __func__, on_off);
		gpio_set_value(MECHA_LCD_RSTz, 1);
		udelay(500);
		gpio_set_value(MECHA_LCD_RSTz, 0);
		udelay(500);
		gpio_set_value(MECHA_LCD_RSTz, 1);
		hr_msleep(20);
		panel_gpio_switch(on_off);
	} else {
		LCMDBG("%s(%d):\n", __func__, on_off);
		gpio_set_value(MECHA_LCD_RSTz, 1);
		hr_msleep(70);
		panel_gpio_switch(on_off);
	}
}
/* Access function pointed by ctl_ops to call control operations */
static int aic3008_config(CODEC_SPI_CMD *cmds, int size)
{
	int i, retry, ret;
	unsigned char data;
	if(!aic3008_power_ctl->isPowerOn)
	{
		AUD_INFO("aic3008_config: AIC3008 is power off now");
		return -EINVAL;
	}

	if (!codec_spi_dev) {
		AUD_ERR("no spi device\n");
		return -EFAULT;
	}

	if (cmds == NULL) {
		AUD_ERR("invalid spi parameters\n");
		return -EINVAL;
	}

	/* large dsp image use bulk mode to transfer */
	if (size < 1000) {
		for (i = 0; i < size; i++) {
			switch (cmds[i].act) {
			case 'w':
				codec_spi_write(cmds[i].reg, cmds[i].data, true);
				break;
			case 'r':
				for (retry = AIC3008_MAX_RETRY; retry > 0; retry--) {
					ret = codec_spi_read(cmds[i].reg, &data, true);
					if (ret < 0) {
						AUD_ERR("read fail %d, retry\n", ret);
						hr_msleep(1);
					} else if (data == cmds[i].data) {
						AUD_DBG("data == cmds\n");
						break;
					}
				}
				if (retry <= 0)
					AUD_DBG("3008 power down procedure,"
							" flag 0x%02X=0x%02X(0x%02X)\n",
							cmds[i].reg, ret, cmds[i].data);
				break;
			case 'd':
				msleep(cmds[i].data);
				break;
			default:
				break;
			}
		}
	} else {
		/* use bulk to transfer large data */
		spi_write_table_parsepage(cmds, size);
		AUD_DBG("Here is bulk mode\n");
	}
	return 0;
}
static void
mddi_novatec_power(struct msm_mddi_client_data *client_data, int on)
{
	int rc;
	unsigned config;
	B(KERN_DEBUG "%s(%d)\n", __func__, __LINE__);

	if (on) {
		if(axi_clk)
			clk_set_rate(axi_clk, 192000000);

		config = PCOM_GPIO_CFG(KINGDOM_MDDI_TE, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(KINGDOM_LCD_ID1, 0, GPIO_INPUT, GPIO_NO_PULL, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(KINGDOM_LCD_ID0, 0, GPIO_INPUT, GPIO_NO_PULL, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);

		if(skuid == 0x2) // incell
			gpio_set_value(105, 0);
		else // not incell
			gpio_set_value(V_LCM_3V_EN, 0);
		hr_msleep(1);
		if(skuid == 0x2)
			gpio_set_value(105, 1);
		else
			gpio_set_value(V_LCM_3V_EN, 1);
		hr_msleep(1);
		vreg_enable(V_LCMIO_1V8);
		hr_msleep(6);
		gpio_set_value(KINGDOM_LCD_RSTz, 1);
		hr_msleep(1);
		gpio_set_value(KINGDOM_LCD_RSTz, 0);
		hr_msleep(1);
		gpio_set_value(KINGDOM_LCD_RSTz, 1);
		hr_msleep(6);
	} else {
		gpio_set_value(KINGDOM_LCD_RSTz, 0);
		hr_msleep(120);
		vreg_disable(V_LCMIO_1V8);
		hr_msleep(1);
		if(skuid == 0x2) // incell
			gpio_set_value(105, 0);
		else // not incell
			gpio_set_value(V_LCM_3V_EN, 0);

		config = PCOM_GPIO_CFG(KINGDOM_MDDI_TE, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(KINGDOM_LCD_ID1, 0, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
		config = PCOM_GPIO_CFG(KINGDOM_LCD_ID0, 0, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA);
		rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
	}
}
static int express_smd_panel_shutdown(struct msm_lcdc_panel_ops *ops)
{
    express_adjust_backlight(0);
    hr_msleep(250);
    mutex_lock(&panel_lock);
    express_panel_power(0);
    atomic_set(&lcm_init_done, 0);
    mutex_unlock(&panel_lock);
    return 0;
}
static void spade_auo_panel_power(bool on_off)
{
	if (!!on_off) {
		LCMDBG("(%d):\n", on_off);
		gpio_set_value(SPADE_LCD_RSTz, 1);
		udelay(500);
		gpio_set_value(SPADE_LCD_RSTz, 0);
		udelay(500);
		gpio_set_value(SPADE_LCD_RSTz, 1);
		hr_msleep(20);
		config_gpio_table( display_on_gpio_table,
				ARRAY_SIZE(display_on_gpio_table));
	} else {
		LCMDBG("%s(%d):\n", __func__, on_off);
		gpio_set_value(SPADE_LCD_RSTz, 1);
		hr_msleep(70);
		config_gpio_table( display_off_gpio_table,
				ARRAY_SIZE(display_off_gpio_table));
	}
}
static int lcm_write_tb(struct lcm_cmd cmd_table[], unsigned size)
{
	int i;

	for (i = 0; i < size; i++) {
		lcm_write_cmd(cmd_table[i].reg, cmd_table[i].val);
		if (cmd_table[i].delay)
			hr_msleep(cmd_table[i].delay);
	}
	return 0;
}
static int amoled_panel_blank(struct msm_lcdc_panel_ops *panel_data)
{
	LCMDBG("%s\n", __func__);
	mutex_lock(&panel_lock);
	qspi_send_9bit(&blank_cmd);
	hr_msleep(120);
	mutex_unlock(&panel_lock);
	amoled_panel_power(0);
	led_trigger_event(amoled_lcd_backlight, LED_OFF);
	return 0;
}
static int oled_panel_uninit(struct msm_lcdc_panel_ops *ops)
{
	unsigned id, off = 1;

	printk(KERN_DEBUG "%s: enter.\n", __func__);
	atomic_set(&gate, 0);
	if (!panel_type) {
	/* start power off sequence */
	/*Reset pull low*/
	gpio_set_value(LEGEND_GPIO_LCD_RST_N, 0);
	hr_msleep(100);

	/* config LCDC pin mux to gpio function */
	config_legend_display_off_gpios();
	gpio_set_value(LEGEND_LCD_B2,0);

	mdelay(15);
	/* turn off VCI */
	id = PM_VREG_PDOWN_RFRX2_ID;
	msm_proc_comm(PCOM_VREG_PULLDOWN, &off, &id);
	vreg_disable(vreg_lcm_2v8);

	/* turn off VDD3 */
	id = PM_VREG_PDOWN_AUX_ID;
	msm_proc_comm(PCOM_VREG_PULLDOWN, &off, &id);
	vreg_disable(vreg_lcm_1v8);
	mdelay(10);
	} else {
	        id = PM_VREG_PDOWN_RFRX2_ID;
                msm_proc_comm(PCOM_VREG_PULLDOWN, &off, &id);
	        vreg_disable(vreg_lcm_2v8);
                hr_msleep(20);
	        id = PM_VREG_PDOWN_AUX_ID;
	        msm_proc_comm(PCOM_VREG_PULLDOWN, &off, &id);
                vreg_disable(vreg_lcm_1v8);
		hr_msleep(20);

	}
	microp_spi_vote_enable(SPI_LCM, 0);
	return 0;
}
static int
chacha_AUO_panel_unblank(struct msm_mddi_bridge_platform_data *bridge_data,
		struct msm_mddi_client_data *client_data)
{
	B(KERN_DEBUG "%s: enter.\n", __func__);

	hr_msleep(50);
	atomic_set(&lcm_init_done, 1);
	chacha_backlight_switch(client_data, LED_FULL);

	return 0;
}
static int cp5_wl_lcd_on(struct platform_device *pdev)
{
	struct msm_fb_data_type *mfd;
	struct mipi_panel_info *mipi;
	struct msm_panel_info *pinfo;

	mfd = platform_get_drvdata(pdev);
	if (!mfd)
		return -ENODEV;
	if (mfd->key != MFD_KEY)
		return -EINVAL;

	pinfo = &mfd->panel_info;
	mipi  = &mfd->panel_info.mipi;

	if (mfd->init_mipi_lcd == 0) {
		PR_DISP_INFO("Display On - 1st time\n");
		mfd->init_mipi_lcd = 1;
	} else
		PR_DISP_INFO("Display On \n");

	/* Pull reset pin for JDI panel */
	if (panel_type == PANEL_ID_CP5_JDI_NOVATEK) {
		hr_msleep(2);
		gpio_set_value(MSM_LCD_RSTz, 1);
		hr_msleep(1);
		gpio_set_value(MSM_LCD_RSTz, 0);
		hr_msleep(1);
		gpio_set_value(MSM_LCD_RSTz, 1);
		hr_msleep(20);
	}

	mipi_dsi_cmds_tx(&cp5_wl_panel_tx_buf, init_on_cmds, init_on_cmds_count);

	atomic_set(&lcd_power_state, 1);

	PR_DISP_DEBUG("Init done\n");

	return 0;
}
示例#30
0
static int
speedy_panel_unblank(struct msm_mddi_bridge_platform_data *bridge_data,
                     struct msm_mddi_client_data *client_data)
{
    B(KERN_DEBUG "%s\n", __func__);
    client_data->auto_hibernate(client_data, 0);
    hr_msleep(50);
    client_data->remote_write(client_data, 0x24, 0x5300);
    client_data->remote_write(client_data, 0x0A, 0x22C0);
    speedy_backlight_switch(LED_FULL);
    client_data->auto_hibernate(client_data, 1);
    return 0;
}