Example #1
0
static void mddi_r61581_hw_reset(void)
{
	RESET(GPIO_LOW_VALUE);
	mddi_wait(10);
	RESET(GPIO_HIGH_VALUE);
	mddi_wait(10);
}
static void sony_lcd_enter_sleep(void)
{
	MDDI_DEBUG(LEVEL_TRACE, "%s [%d]\n", __func__, lcd_state);

	/* Display off */
	write_client_reg_nbr(0x28, 0, 0, 0, 0, 1);
	mddi_wait(50); /* >50 ms */
	/* Sleep in */
	write_client_reg_nbr(0x10, 0, 0, 0, 0, 1);
	mddi_wait(120); /* >120 ms */
}
static void sony_lcd_exit_sleep(void)
{
	MDDI_DEBUG(LEVEL_TRACE, "%s [%d]\n", __func__, lcd_state);

	/* Sleep out */
	write_client_reg_nbr(0x11, 0x00000000, 0, 0, 0, 1);
	mddi_wait(120); /* >120 ms */

	/* Display on */
	write_client_reg_nbr(0x29, 0x00000000, 0, 0, 0, 1);
}
Example #4
0
static int __init mddi_tpo_nv_init(void)
{
    int ret;
    struct msm_panel_info *pinfo;

#ifdef CONFIG_FB_MSM_MDDI_AUTO_DETECT
    mddi_wait(10); // wait to come completely out of reset
    plat_disp_type = mddi_get_client_id();

    printk("%s: client_id=0x%X, crc=0x%X, width=%d, height=%d\n",
           __FUNCTION__, plat_disp_type, mddi_client_capability_pkt.parameter_CRC,
           mddi_client_capability_pkt.Bitmap_Width,
           mddi_client_capability_pkt.Bitmap_Height);
    if (mddi_client_capability_pkt.Bitmap_Width == 0x00 ||
            mddi_client_capability_pkt.Bitmap_Height == 0x00)
    {
        printk("%s: panel appears to be missing. Exiting\n", __FUNCTION__);
        return 0;
    }
#endif

    ret = platform_driver_register(&mddi_tpo_nv_driver);
    if (!ret) {
        pinfo = &mddi_tpo_nv_panel_data.panel_info;
        pinfo->xres = LCD_WIDTH;
        pinfo->yres = LCD_HEIGHT;
        pinfo->type = MDDI_PANEL;
        pinfo->pdest = DISPLAY_1;
        pinfo->wait_cycle = 0;
        pinfo->bpp = 18;
        pinfo->fb_num = 2;
        pinfo->clk_min = TPO_NV_CLK_RATE;
        pinfo->clk_max = TPO_NV_CLK_RATE;
        pinfo->clk_rate = TPO_NV_CLK_RATE;
        pinfo->lcd.vsync_enable = TRUE;
        pinfo->lcd.refx100 =
            (mddi_tpo_nv_rows_per_second * 100) /
            mddi_tpo_nv_rows_per_refresh;
        pinfo->lcd.v_back_porch = V_BACK_PORCH;
        pinfo->lcd.v_front_porch = V_FRONT_PORCH;
        pinfo->lcd.v_pulse_width = V_SYNC_WIDTH;
        pinfo->lcd.hw_vsync_mode = TRUE;
        pinfo->lcd.vsync_notifier_period = (1 * HZ);
        pinfo->bl_max = 7;
        pinfo->bl_min = 1;

        ret = platform_device_register(&mddi_tpo_nv_device);
        if (ret)
        {
            platform_driver_unregister(&mddi_tpo_nv_driver);
        }
    }
    return ret;
}
Example #5
0
static void mddi_r61581_sleep(u32 sleepin)
{
	if (sleepin) {
		serigo(0x0028, 0, "\x00", TRUE);
		serigo(0x0010, 0, "\x00", TRUE);
	} else {
		serigo(0x0011, 0, "\x00", TRUE);
		mddi_wait(120);
		serigo(0x0029, 0, "\x00", TRUE);
	}
}
Example #6
0
static int mddi_r61581_lcd_on(struct platform_device *pdev)
{
	MDDI_MSG_DEBUG("[MDDI] turning r61581 on\n");
	if (r61581_initialized) {
		mddi_r61581_sleep(0);
	} else {
		mddi_r61581_hw_reset();

		mddi_wait(10);

		serigo(0x00B0, 1, "\x0", TRUE);
		serigo(0x00B3, 4, "\x02\x00\x00\x00", TRUE);
		serigo(0x00B4, 1, "\x00", TRUE);
		serigo(0x00C0, 8, "\x03\x3B\x00\x02\x00\x01\x00\x43", TRUE);
		serigo(0x00C1, 4, "\x08\x17\x08\x08", TRUE);

		serigo(0x00C4, 4, "\x22\x02\x00\x00", TRUE);
		serigo(0x00C8, 20, "\x09\x08\x10\x85\x07\x08\x16\x05\x00\x32"
			"\x05\x16\x08\x88\x09\x10\x09\x04\x32\x00", TRUE);

		serigo(0x002A, 4, "\x00\x00\x01\x3F", TRUE);
		serigo(0x002B, 4, "\x00\x00\x01\xDF", TRUE);
		serigo(0x0035, 1, "\x00", TRUE);
		serigo(0x003A, 1, "\x66", TRUE);
		serigo(0x0044, 2, "\x00\x01", TRUE);
		serigo(0x002C, 0, "\x00", TRUE);
		serigo(0x0011, 0, "\x00", TRUE);

		mddi_wait(150);

		serigo(0x00D0, 4, "\x07\x07\x16\x72", TRUE);
		serigo(0x00D1, 3, "\x03\x3A\x0A", TRUE);
		serigo(0x00D2, 3, "\x02\x44\x04", TRUE);
		serigo(0x0029, 0, "\x00", TRUE);
		serigo(0x002C, 0, "\x00", TRUE);

		mddi_wait(10);
		r61581_initialized = TRUE;
	}
	return 0;
}
Example #7
0
static void mddi_tpo_nv_esd_poll(void* arg)
{
#ifdef MDDI_TPO_NV_ESD_DEBUG
    uint32_t val;
#endif
    struct platform_device *pdev = (struct platform_device *)arg;

    msm_fb_down(pdev);
#ifdef MDDI_TPO_NV_ESD_DEBUG
    printk(KERN_ERR "TPO NV - ESD register check START\n");
    mddi_queue_register_write(ENTRYMODE2 ,0x00C4, 0, 0);
    mddi_wait(20);
    for (i = 0;; i++)
    {
        if (disp_init[i].reg == TABLE_END)
        {
            break;
        }
        else if (disp_init[i].reg != MDDI_SLEEP_CMD)
        {
            mddi_queue_register_read(disp_init[i].reg, &val, 1, 0);
            if (disp_init[i].val != val)
            {
                printk(KERN_ERR "TPO NV reg 0x%X should be 0x%X, found 0x%X\n",
                       disp_init[i].reg, disp_init[i].val, val);
            }
        }
    }
    mddi_queue_register_write(ENTRYMODE2 ,0x00C5, 0, 0);
    mddi_wait(30);
    printk(KERN_ERR "TPO NV - ESD register check END\n");
#endif /* MDDI_TPO_NV_ESD_DEBUG */
    if (disp_esd_recovery)
    {
        xmit_panel_seq(disp_esd_recovery);
    }
    msm_fb_up(pdev);
}
static void mddi_toshiba_fwvga_lcd_shutdown(struct platform_device *dev)
{
    printk(KERN_INFO "MDDI: mddi_toshiba_fwvga_lcd_shutdown\n");

    mddi_queue_register_write( 0x2800, 0x0000, FALSE, 0);  // SET_DISPLAY_OFF
    mddi_queue_register_write( 0x1000, 0x0000, FALSE, 0);  // ENTER_SLEEP_MODE
    mddi_wait(70);

    // LCM_RESET -> Low
    gpio_set_value(GPIO_LCM_RESET, 0);

    // PM8058_LVS1_V1P8
    vreg_disable(vreg_lvsw1);

    // PM8058_L15_V2P85
    vreg_disable(vreg_gp6);
}
Example #9
0
static boolean serigo(uint32 reg, uint32 len, const char *params, boolean wait)
{
	uint32 rv;
	uint32 data_list[20];
	uint i;

	for (i = 0; i < len; ++i)
		data_list[i] = (u32)params[i] & 0xFF;

	if (len > 0)
		rv = mddi_host_register_multiwrite(reg, len, data_list, wait, \
							NULL, MDDI_HOST_PRIM);
	else
		rv = mddi_queue_register_write(reg, 0, TRUE, 0);

	mddi_wait(10);
	return rv;
}
Example #10
0
/*=============================================================================
                              LOCAL FUNCTIONS
=============================================================================*/
static void xmit_panel_seq(struct init_table const *init_table)
{
    unsigned n;

    for (n = 0;; n++)
    {
        if (init_table[n].reg == TABLE_END)
        {
            break;
        }
        else if (init_table[n].reg == MDDI_SLEEP_CMD)
        {
            mddi_wait(init_table[n].val);
        }
        else
        {
            mddi_queue_register_write(init_table[n].reg, init_table[n].val, 0, 0);
        }
    }
}
void panel_init(struct init_table *init_table)
{
    unsigned int n;
    printk(KERN_INFO "MDDI: panel_init()\n");

    n = 0;
    while (init_table[n].reg != 0 || init_table[n].val != 0) {
        if (init_table[n].reg != 0) {
            // printk(KERN_INFO "write Address(0x%08x), Data(0x%08x)\n", init_table[n].reg, init_table[n].val);
            mddi_queue_register_write(init_table[n].reg, init_table[n].val, FALSE, 0);
        } else {
            printk(KERN_INFO "mdelay %d\n", init_table[n].val);
            mddi_wait(init_table[n].val);
            printk(KERN_INFO "mdelay %d done\n", init_table[n].val);
        }

        n++;
    }

    printk(KERN_INFO "MDDI: panel_init() done\n");
}