Example #1
0
void epd_write_epson_reg(unsigned short command, unsigned short addr, unsigned short data)
{
	 
    unsigned short value = 0;	
    u32 rd_reg=0;				//Testing 0917
    udelay(EPD_CMD_DELAY);
    
dd_printk("[w]  %x,%x,%x\n", command, addr, data);

    while(!value)
	{
	 value = GET_HRDY_STATUS;	
	  udelay(1);
	  rd_reg++;
	  if (rd_reg > 3000000)
		break;	  
	}

	if (rd_reg > 3000000)		// reinit EPD controller	//Testing 0917
		{
		ep3_reinit();
		//return;
		}

    ipu_adc_write_cmd(CMD,command);
  //epd_write_command(command); 
  
  udelay(1); 
	__raw_writew(addr,bsaddr);
  udelay(1); 
	__raw_writew(data,bsaddr);
  udelay(1); 
}
Example #2
0
static int bs_wr_which(bool which, uint32_t data)
{
static int datacounter=0;

//    display_port_t disp = BROADSHEET_DISPLAY_NUMBER;
    cmddata_t type = (BS_CMD == which) ? CMD : DAT;
    int result = EINKFB_FAILURE;

    if (type == BS_CMD) {
	datacounter = 0;
	dd_printk("[C]  %04x\n", data);
    } else if (++datacounter <= 8) {
	dd_printk("[D]    %04x\n", data);
    } else if (datacounter == 9) {
	dd_printk("[D]    ...\n");
    }

    
    if ( BS_READY() )
//        result = ipu_adc_write_cmd(disp, type, data, 0, 0);
        result = ipu_adc_write_cmd(type, data);
    else
        result = EINKFB_FAILURE;
    
    return ( result );
}
Example #3
0
/*!
 * This function sets display region in the Epson panel
 *
 * @param        disp    display panel to config
 * @param	 x1	 x-coordinate of one vertex.
 * @param	 x2	 x-coordinate of second vertex.
 * @param	 y1	 y-coordinate of one vertex.
 * @param	 y2	 y-coordinate of second vertex.
 */
void set_panel_region(int disp, uint32_t x1, uint32_t x2,
		      uint32_t y1, uint32_t y2)
{
	uint32_t param[8];

	memset(param, 0, sizeof(uint32_t) * 8);
	param[0] = x1;
	param[2] = x2;
	param[4] = y1;
	param[6] = y2;

	/* SD_CSET */
	ipu_adc_write_cmd(disp, CMD, SD_CSET, param, 4);

	/* SD_PSET */
	ipu_adc_write_cmd(disp, CMD, SD_PSET, &(param[4]), 4);
}
Example #4
0
/*!
 * Function to initialize the panel. First it resets the panel and then
 * initilizes panel.
 */
static void _init_panel(int disp)
{
	uint32_t cmd_param;
	uint32_t i;

	gpio_lcd_active();
	slcd_gpio_config();

	/* DATCTL */
#ifdef CONFIG_FB_MXC_ASYNC_PANEL_IFC_16_BIT
	/* 16-bit 565 mode */
	cmd_param = 0x28;
#else
	/* 8-bit 666 mode */
	cmd_param = 0x08;
#endif
	ipu_adc_write_cmd(disp, CMD, DATCTL, &cmd_param, 1);

	/* Sleep OUT */
	ipu_adc_write_cmd(disp, CMD, SLPOUT, 0, 0);

	/* Set display to white
	Setup page and column addresses */
	set_panel_region(disp, MXCFB_SCREEN_LEFT_OFFSET,
			 MXCFB_SCREEN_WIDTH + MXCFB_SCREEN_LEFT_OFFSET - 1,
			 0, MXCFB_SCREEN_HEIGHT - 1);
	/* Do RAM write cmd */
	ipu_adc_write_cmd(disp, CMD, RAMWR, 0, 0);
#ifdef CONFIG_FB_MXC_ASYNC_PANEL_IFC_16_BIT
	for (i = 0; i < (MXCFB_SCREEN_WIDTH * MXCFB_SCREEN_HEIGHT); i++)
#else
	for (i = 0; i < (MXCFB_SCREEN_WIDTH * MXCFB_SCREEN_HEIGHT * 3); i++)
#endif
		ipu_adc_write_cmd(disp, DAT, 0xFFFF, 0, 0);

	/* Pause 80 ms */
	mdelay(80);

	/* Display ON */
	ipu_adc_write_cmd(disp, CMD, DISON, 0, 0);
	/* Pause 200 ms */
	mdelay(200);

	pr_debug("initialized panel\n");
}
Example #5
0
// Scheduled loop for doing IO on framebuffer-sized buffers.
//
static int bs_io_buf(u32 data_size, u16 *data, bool which)
{
//    display_port_t disp = BROADSHEET_DISPLAY_NUMBER;
    int result = EINKFB_FAILURE;

    dd_printk("[D]    len=%i\n", data_size);

    einkfb_debug_full("size    = %d\n", data_size);

    if ( BS_READY() )
    {
        int     i = 0, j, length = (EINKFB_MEMCPY_MIN >> 1), num_loops = data_size/length,
                remainder = data_size % length;
        bool    done = false;
        
        if ( 0 != num_loops )
            einkfb_debug("num_loops @ %d bytes = %d, remainder = %d\n",
                (length << 1), num_loops, (remainder << 1));
        
        result = EINKFB_SUCCESS;
        
        // Read/write EINKFB_MEMCPY_MIN bytes (hence, divide by 2) at a time.  While
        // there are still bytes to read/write, yield the CPU.
        //
        do
        {
            if ( 0 >= num_loops )
                length = remainder;

            for ( j = 0; j < length; j++)
            {
                if ( BS_WR == which )
//                    ipu_adc_write_cmd(disp, DAT, (uint32_t)data[i + j], 0, 0);
                    ipu_adc_write_cmd(DAT, (uint32_t)data[i + j]);
                else
//                    data[i + j] = (u16)(ipu_adc_read_data(disp) & 0x0000FFFF);
                    data[i + j] = (u16)(ipu_adc_read_data() & 0x0000FFFF);
            }
                
            i += length;
            
            if ( i < data_size )
            {
                EINKFB_SCHEDULE();
                num_loops--;
            }
            else
                done = true;
        }
        while ( !done );
    }

    return ( result );
}
Example #6
0
void epd_write_buffer(u32 data_size, u16 *data)
{	
	int i;

dd_printk("[b]    size=%i\n", data_size);

    for ( i = 0; i < data_size; i++)
    {
        ipu_adc_write_cmd(DAT, (uint32_t)data[i]);
    }
  
}
Example #7
0
static int bs_wr_which(bool which, uint32_t data)
{
    display_port_t disp = BROADSHEET_DISPLAY_NUMBER;
    cmddata_t type = (BS_CMD == which) ? CMD : DAT;
    int result = EINKFB_FAILURE;
    
    if ( BS_READY() )
        result = ipu_adc_write_cmd(disp, type, data, 0, 0);
    else
        result = EINKFB_FAILURE;
    
    return ( result );
}
Example #8
0
/*!
 * Suspends the framebuffer and blanks the screen. Power management support
 *
 * @param	pdev	pointer to device structure.
 * @param	state	state of the device.
 *
 * @return	success
 */
static int mxcfb_suspend(struct platform_device *pdev, pm_message_t state)
{
	struct mxcfb_data *drv_data = platform_get_drvdata(pdev);
	struct fb_info *fbi = drv_data->fbi;
	struct mxcfb_info *mxc_fbi = fbi->par;

	drv_data->suspended = true;

	if (mxc_fbi->blank == FB_BLANK_UNBLANK)
		mxcfb_set_refresh_mode(fbi, MXCFB_REFRESH_OFF, NULL);
	/* Display OFF */
	ipu_adc_write_cmd(mxc_fbi->disp_num, CMD, DISOFF, 0, 0);

	return 0;
}
Example #9
0
/*!
 * Resumes the framebuffer and unblanks the screen. Power management support
 *
 * @param       pdev     pointer to device structure.
 *
 * @return      success
 */
static int mxcfb_resume(struct platform_device *pdev)
{
	struct mxcfb_data *drv_data = platform_get_drvdata(pdev);
	struct fb_info *fbi = drv_data->fbi;
	struct mxcfb_info *mxc_fbi = fbi->par;

	/* Display ON */
	ipu_adc_write_cmd(mxc_fbi->disp_num, CMD, DISON, 0, 0);
	drv_data->suspended = false;

	if (mxc_fbi->blank == FB_BLANK_UNBLANK)
		mxcfb_set_refresh_mode(fbi, MXCFB_REFRESH_DEFAULT, NULL);
	wake_up_interruptible(&drv_data->suspend_wq);

	return 0;
}
Example #10
0
static int mxc_ipu_ioctl(struct inode *inode, struct file *file,
			 unsigned int cmd, unsigned long arg)
{
	int ret = 0;

	switch (cmd) {

	case IPU_INIT_CHANNEL:
		{
			ipu_channel_parm parm;
			if (copy_from_user
			    (&parm, (ipu_channel_parm *) arg,
			     sizeof(ipu_channel_parm))) {
				return -EFAULT;
			}
			if (!parm.flag) {
				ret =
				    ipu_init_channel(parm.channel,
						     &parm.params);
			} else {
				ret = ipu_init_channel(parm.channel, NULL);
			}
		}
		break;

	case IPU_UNINIT_CHANNEL:
		{
			ipu_channel_t ch;
			int __user *argp = (void __user *)arg;
			if (get_user(ch, argp))
				return -EFAULT;
			ipu_uninit_channel(ch);
		}
		break;

	case IPU_INIT_CHANNEL_BUFFER:
		{
			ipu_channel_buf_parm parm;
			if (copy_from_user
			    (&parm, (ipu_channel_buf_parm *) arg,
			     sizeof(ipu_channel_buf_parm))) {
				return -EFAULT;
			}
			ret =
			    ipu_init_channel_buffer(parm.channel, parm.type,
						    parm.pixel_fmt,
						    parm.width, parm.height,
						    parm.stride,
						    parm.rot_mode,
						    parm.phyaddr_0,
						    parm.phyaddr_1,
						    parm.u_offset,
						    parm.v_offset);

		}
		break;

	case IPU_UPDATE_CHANNEL_BUFFER:
		{
			ipu_channel_buf_parm parm;
			if (copy_from_user
			    (&parm, (ipu_channel_buf_parm *) arg,
			     sizeof(ipu_channel_buf_parm))) {
				return -EFAULT;
			}
			if ((parm.phyaddr_0 != (dma_addr_t) NULL)
			    && (parm.phyaddr_1 == (dma_addr_t) NULL)) {
				ret =
				    ipu_update_channel_buffer(parm.channel,
							      parm.type,
							      parm.bufNum,
							      parm.phyaddr_0);
			} else if ((parm.phyaddr_0 == (dma_addr_t) NULL)
				   && (parm.phyaddr_1 != (dma_addr_t) NULL)) {
				ret =
				    ipu_update_channel_buffer(parm.channel,
							      parm.type,
							      parm.bufNum,
							      parm.phyaddr_1);
			} else {
				ret = -1;
			}

		}
		break;
	case IPU_SELECT_CHANNEL_BUFFER:
		{
			ipu_channel_buf_parm parm;
			if (copy_from_user
			    (&parm, (ipu_channel_buf_parm *) arg,
			     sizeof(ipu_channel_buf_parm))) {
				return -EFAULT;
			}
			ret =
			    ipu_select_buffer(parm.channel, parm.type,
					      parm.bufNum);

		}
		break;
	case IPU_LINK_CHANNELS:
		{
			ipu_channel_link link;
			if (copy_from_user
			    (&link, (ipu_channel_link *) arg,
			     sizeof(ipu_channel_link))) {
				return -EFAULT;
			}
			ret = ipu_link_channels(link.src_ch, link.dest_ch);

		}
		break;
	case IPU_UNLINK_CHANNELS:
		{
			ipu_channel_link link;
			if (copy_from_user
			    (&link, (ipu_channel_link *) arg,
			     sizeof(ipu_channel_link))) {
				return -EFAULT;
			}
			ret = ipu_unlink_channels(link.src_ch, link.dest_ch);

		}
		break;
	case IPU_ENABLE_CHANNEL:
		{
			ipu_channel_t ch;
			int __user *argp = (void __user *)arg;
			if (get_user(ch, argp))
				return -EFAULT;
			ipu_enable_channel(ch);
		}
		break;
	case IPU_DISABLE_CHANNEL:
		{
			ipu_channel_info info;
			if (copy_from_user
			    (&info, (ipu_channel_info *) arg,
			     sizeof(ipu_channel_info))) {
				return -EFAULT;
			}
			ret = ipu_disable_channel(info.channel, info.stop);
		}
		break;
	case IPU_ENABLE_IRQ:
		{
			uint32_t irq;
			int __user *argp = (void __user *)arg;
			if (get_user(irq, argp))
				return -EFAULT;
			ipu_enable_irq(irq);
		}
		break;
	case IPU_DISABLE_IRQ:
		{
			uint32_t irq;
			int __user *argp = (void __user *)arg;
			if (get_user(irq, argp))
				return -EFAULT;
			ipu_disable_irq(irq);
		}
		break;
	case IPU_CLEAR_IRQ:
		{
			uint32_t irq;
			int __user *argp = (void __user *)arg;
			if (get_user(irq, argp))
				return -EFAULT;
			ipu_clear_irq(irq);
		}
		break;
	case IPU_FREE_IRQ:
		{
			ipu_irq_info info;
			if (copy_from_user
			    (&info, (ipu_irq_info *) arg,
			     sizeof(ipu_irq_info))) {
				return -EFAULT;
			}
			ipu_free_irq(info.irq, info.dev_id);
		}
		break;
	case IPU_REQUEST_IRQ_STATUS:
		{
			uint32_t irq;
			int __user *argp = (void __user *)arg;
			if (get_user(irq, argp))
				return -EFAULT;
			ret = ipu_get_irq_status(irq);
		}
		break;
	case IPU_SDC_INIT_PANEL:
		{
			ipu_sdc_panel_info sinfo;
			if (copy_from_user
			    (&sinfo, (ipu_sdc_panel_info *) arg,
			     sizeof(ipu_sdc_panel_info))) {
				return -EFAULT;
			}
			ret =
			    ipu_sdc_init_panel(sinfo.panel, sinfo.pixel_clk,
					       sinfo.width, sinfo.height,
					       sinfo.pixel_fmt,
					       sinfo.hStartWidth,
					       sinfo.hSyncWidth,
					       sinfo.hEndWidth,
					       sinfo.vStartWidth,
					       sinfo.vSyncWidth,
					       sinfo.vEndWidth, sinfo.signal);
		}
		break;
	case IPU_SDC_SET_WIN_POS:
		{
			ipu_sdc_window_pos pos;
			if (copy_from_user
			    (&pos, (ipu_sdc_window_pos *) arg,
			     sizeof(ipu_sdc_window_pos))) {
				return -EFAULT;
			}
			ret =
			    ipu_sdc_set_window_pos(pos.channel, pos.x_pos,
						   pos.y_pos);

		}
		break;
	case IPU_SDC_SET_GLOBAL_ALPHA:
		{
			ipu_sdc_global_alpha g;
			if (copy_from_user
			    (&g, (ipu_sdc_global_alpha *) arg,
			     sizeof(ipu_sdc_global_alpha))) {
				return -EFAULT;
			}
			ret = ipu_sdc_set_global_alpha(g.enable, g.alpha);
		}
		break;
	case IPU_SDC_SET_COLOR_KEY:
		{
			ipu_sdc_color_key c;
			if (copy_from_user
			    (&c, (ipu_sdc_color_key *) arg,
			     sizeof(ipu_sdc_color_key))) {
				return -EFAULT;
			}
			ret =
			    ipu_sdc_set_color_key(c.channel, c.enable,
						  c.colorKey);
		}
		break;
	case IPU_SDC_SET_BRIGHTNESS:
		{
			uint8_t b;
			int __user *argp = (void __user *)arg;
			if (get_user(b, argp))
				return -EFAULT;
			ret = ipu_sdc_set_brightness(b);

		}
		break;
	case IPU_REGISTER_GENERIC_ISR:
		{
			ipu_event_info info;
			if (copy_from_user
			    (&info, (ipu_event_info *) arg,
			     sizeof(ipu_event_info))) {
				return -EFAULT;
			}
			ret =
			    ipu_request_irq(info.irq, mxc_ipu_generic_handler,
					    0, "video_sink", info.dev);
		}
		break;
	case IPU_GET_EVENT:
		/* User will have to allocate event_type structure and pass the pointer in arg */
		{
			event_type ev;
			int r = -1;
			r = get_events(&ev);
			if (r == -1) {
				wait_event_interruptible(waitq,
							 (pending_events != 0));
				r = get_events(&ev);
			}
			ret = -1;
			if (r == 0) {
				if (!copy_to_user((event_type *) arg, &ev,
						  sizeof(event_type))) {
					ret = 0;
				}
			}
		}
		break;
	case IPU_ADC_WRITE_TEMPLATE:
		{
			ipu_adc_template temp;
			if (copy_from_user
			    (&temp, (ipu_adc_template *) arg, sizeof(temp))) {
				return -EFAULT;
			}
			ret =
			    ipu_adc_write_template(temp.disp, temp.pCmd,
						   temp.write);
		}
		break;
	case IPU_ADC_UPDATE:
		{
			ipu_adc_update update;
			if (copy_from_user
			    (&update, (ipu_adc_update *) arg, sizeof(update))) {
				return -EFAULT;
			}
			ret =
			    ipu_adc_set_update_mode(update.channel, update.mode,
						    update.refresh_rate,
						    update.addr, update.size);
		}
		break;
	case IPU_ADC_SNOOP:
		{
			ipu_adc_snoop snoop;
			if (copy_from_user
			    (&snoop, (ipu_adc_snoop *) arg, sizeof(snoop))) {
				return -EFAULT;
			}
			ret =
			    ipu_adc_get_snooping_status(snoop.statl,
							snoop.stath);
		}
		break;
	case IPU_ADC_CMD:
		{
			ipu_adc_cmd cmd;
			if (copy_from_user
			    (&cmd, (ipu_adc_cmd *) arg, sizeof(cmd))) {
				return -EFAULT;
			}
			ret =
			    ipu_adc_write_cmd(cmd.disp, cmd.type, cmd.cmd,
					      cmd.params, cmd.numParams);
		}
		break;
	case IPU_ADC_INIT_PANEL:
		{
			ipu_adc_panel panel;
			if (copy_from_user
			    (&panel, (ipu_adc_panel *) arg, sizeof(panel))) {
				return -EFAULT;
			}
			ret =
			    ipu_adc_init_panel(panel.disp, panel.width,
					       panel.height, panel.pixel_fmt,
					       panel.stride, panel.signal,
					       panel.addr, panel.vsync_width,
					       panel.mode);
		}
		break;
	case IPU_ADC_IFC_TIMING:
		{
			ipu_adc_ifc_timing t;
			if (copy_from_user
			    (&t, (ipu_adc_ifc_timing *) arg, sizeof(t))) {
				return -EFAULT;
			}
			ret =
			    ipu_adc_init_ifc_timing(t.disp, t.read,
						    t.cycle_time, t.up_time,
						    t.down_time,
						    t.read_latch_time,
						    t.pixel_clk);
		}
		break;
	case IPU_CSI_INIT_INTERFACE:
		{
			ipu_csi_interface c;
			if (copy_from_user
			    (&c, (ipu_csi_interface *) arg, sizeof(c)))
				return -EFAULT;
			ret =
			    ipu_csi_init_interface(c.width, c.height,
						   c.pixel_fmt, c.signal);
		}
		break;
	case IPU_CSI_ENABLE_MCLK:
		{
			ipu_csi_mclk m;
			if (copy_from_user(&m, (ipu_csi_mclk *) arg, sizeof(m)))
				return -EFAULT;
			ret = ipu_csi_enable_mclk(m.src, m.flag, m.wait);
		}
		break;
	case IPU_CSI_READ_MCLK_FLAG:
		{
			ret = ipu_csi_read_mclk_flag();
		}
		break;
	case IPU_CSI_FLASH_STROBE:
		{
			bool strobe;
			int __user *argp = (void __user *)arg;
			if (get_user(strobe, argp))
				return -EFAULT;
			ipu_csi_flash_strobe(strobe);
		}
		break;
	case IPU_CSI_GET_WIN_SIZE:
		{
			ipu_csi_window_size w;
			ipu_csi_get_window_size(&w.width, &w.height);
			if (copy_to_user
			    ((ipu_csi_window_size *) arg, &w, sizeof(w)))
				return -EFAULT;
		}
		break;
	case IPU_CSI_SET_WIN_SIZE:
		{
			ipu_csi_window_size w;
			if (copy_from_user
			    (&w, (ipu_csi_window_size *) arg, sizeof(w)))
				return -EFAULT;
			ipu_csi_set_window_size(w.width, w.height);
		}
		break;
	case IPU_CSI_SET_WINDOW:
		{
			ipu_csi_window p;
			if (copy_from_user
			    (&p, (ipu_csi_window *) arg, sizeof(p)))
				return -EFAULT;
			ipu_csi_set_window_pos(p.left, p.top);
		}
		break;
	case IPU_PF_SET_PAUSE_ROW:
		{
			uint32_t p;
			int __user *argp = (void __user *)arg;
			if (get_user(p, argp))
				return -EFAULT;
			ret = ipu_pf_set_pause_row(p);
		}
		break;
	default:
		break;

	}
	return ret;
}
Example #11
0
void bs_wr_one(u16 data)
{
//    ipu_adc_write_cmd((display_port_t)BROADSHEET_DISPLAY_NUMBER, DAT, (uint32_t)data, 0, 0);
ipu_adc_write_cmd(DAT, (uint32_t)data);
}
/*!
 * Function to initialize the panel. First it resets the panel and then
 * initilizes panel.
 */
static void _init_panel(int disp)
{
	uint32_t cmd_param;
	uint32_t i;

	slcd_gpio_config();

	// Reset
	cmd_param = 0x01;
	ipu_adc_write_cmd(disp, CMD, 0x03, &cmd_param, 1);

	// Turn on oscillator
	cmd_param = 0x01;
	ipu_adc_write_cmd(disp, CMD, 0x3A, &cmd_param, 1);

	cmd_param = 0x02;
	ipu_adc_write_cmd(disp, CMD, 0x32, &cmd_param, 1);

	cmd_param = 0x01;
	ipu_adc_write_cmd(disp, CMD, 0x33, &cmd_param, 1);

	cmd_param = 0x00;
	ipu_adc_write_cmd(disp, CMD, 0x37, &cmd_param, 1);

	cmd_param = 0x0FFF;
	ipu_adc_write_cmd(disp, CMD, 0x77, &cmd_param, 1);

	cmd_param = 0x01;
	ipu_adc_write_cmd(disp, CMD, 0x72, &cmd_param, 1);

	cmd_param = 0x1C3B;
	ipu_adc_write_cmd(disp, CMD, 0x1C, &cmd_param, 1);

	cmd_param = 0x21;
	ipu_adc_write_cmd(disp, CMD, 0x52, &cmd_param, 1);

	cmd_param = 0x11;
	ipu_adc_write_cmd(disp, CMD, 0x53, &cmd_param, 1);

	cmd_param = 0x79;
	ipu_adc_write_cmd(disp, CMD, 0x24, &cmd_param, 1);

	cmd_param = 0x79;
	ipu_adc_write_cmd(disp, CMD, 0x25, &cmd_param, 1);

	cmd_param = 0x10;
	ipu_adc_write_cmd(disp, CMD, 0x26, &cmd_param, 1);

	cmd_param = 0x10;
	ipu_adc_write_cmd(disp, CMD, 0x27, &cmd_param, 1);

	cmd_param = 0x28;
	ipu_adc_write_cmd(disp, CMD, 0x61, &cmd_param, 1);

	cmd_param = 0x1A;
	ipu_adc_write_cmd(disp, CMD, 0x62, &cmd_param, 1);

	cmd_param = 0x1E;
	ipu_adc_write_cmd(disp, CMD, 0x63, &cmd_param, 1);

	cmd_param = 0x21;
	ipu_adc_write_cmd(disp, CMD, 0x64, &cmd_param, 1);

	cmd_param = 0x1B;
	ipu_adc_write_cmd(disp, CMD, 0x65, &cmd_param, 1);

	cmd_param = 0x29;
	ipu_adc_write_cmd(disp, CMD, 0x66, &cmd_param, 1);

	cmd_param = 0x205;
	ipu_adc_write_cmd(disp, CMD, 0x4D, &cmd_param, 1);

	cmd_param = 0x01;
	ipu_adc_write_cmd(disp, CMD, 0x4E, &cmd_param, 1);

	cmd_param = 0x104;
	ipu_adc_write_cmd(disp, CMD, 0x4F, &cmd_param, 1);

	cmd_param = 0x2F;
	ipu_adc_write_cmd(disp, CMD, 0x2E, &cmd_param, 1);

	cmd_param = 0x0;
	ipu_adc_write_cmd(disp, CMD, 0x29, &cmd_param, 1);

	cmd_param = 0x0;
	ipu_adc_write_cmd(disp, CMD, 0x2A, &cmd_param, 1);

	cmd_param = 0xEF;
	ipu_adc_write_cmd(disp, CMD, 0x2B, &cmd_param, 1);

	cmd_param = 0x13F;
	ipu_adc_write_cmd(disp, CMD, 0x2C, &cmd_param, 1);

	/* Window area setting */
	cmd_param = 0x0;
	ipu_adc_write_cmd(disp, CMD, 0x08, &cmd_param, 1);
	cmd_param = 0xEF;
	ipu_adc_write_cmd(disp, CMD, 0x09, &cmd_param, 1);
	cmd_param = 0x0;
	ipu_adc_write_cmd(disp, CMD, 0x0A, &cmd_param, 1);
	cmd_param = 0x13F;
	ipu_adc_write_cmd(disp, CMD, 0x0B, &cmd_param, 1);

	/* Window mode setting */
	cmd_param = 0x00;
	ipu_adc_write_cmd(disp, CMD, 0x05, &cmd_param, 1);

	/* Ram address setting */
	cmd_param = 0x0;
	ipu_adc_write_cmd(disp, CMD, 0x06, &cmd_param, 1);
	cmd_param = 0x0;
	ipu_adc_write_cmd(disp, CMD, 0x07, &cmd_param, 1);

	/* Initialize RAM */
	ipu_adc_write_cmd(disp, CMD, 0x0E, 0, 0);
	for (i = 0; i < (MXCFB_SCREEN_WIDTH * MXCFB_SCREEN_HEIGHT / 2); i++)
		ipu_adc_write_cmd(disp, DAT, 0x3FFFF, 0, 0);
	for (i = 0; i < (MXCFB_SCREEN_WIDTH * MXCFB_SCREEN_HEIGHT / 2); i++)
		ipu_adc_write_cmd(disp, DAT, 0, 0, 0);

	cmd_param = 0x1F6A;
	ipu_adc_write_cmd(disp, CMD, 0x18, &cmd_param, 1);

	cmd_param = 0x00A2;
	ipu_adc_write_cmd(disp, CMD, 0x1A, &cmd_param, 1);

	cmd_param = 0x0028;
	ipu_adc_write_cmd(disp, CMD, 0x1B, &cmd_param, 1);

	cmd_param = 0x1C3B;
	ipu_adc_write_cmd(disp, CMD, 0x1C, &cmd_param, 1);

	cmd_param = 0x0075;
	ipu_adc_write_cmd(disp, CMD, 0x1D, &cmd_param, 1);

	cmd_param = 0x003D;
	ipu_adc_write_cmd(disp, CMD, 0x1F, &cmd_param, 1);

	cmd_param = 0x0080;
	ipu_adc_write_cmd(disp, CMD, 0x20, &cmd_param, 1);

	/* DC/DC on */
	cmd_param = 0x1F6B;
	ipu_adc_write_cmd(disp, CMD, 0x18, &cmd_param, 1);
	msleep(100);

	/* VCOM on */
	cmd_param = 0x0021;
	ipu_adc_write_cmd(disp, CMD, 0x1E, &cmd_param, 1);

	/* GOE1,GOE2 setting (Gate output enable) */
	cmd_param = 0x0001;
	ipu_adc_write_cmd(disp, CMD, 0x3B, &cmd_param, 1);

	cmd_param = 0x00;
	ipu_adc_write_cmd(disp, CMD, 0x2, &cmd_param, 1);
	/* Display on */
	cmd_param = 0x00;
	ipu_adc_write_cmd(disp, CMD, 0x0, &cmd_param, 1);

	msleep(10);

	pr_debug("initialized panel\n");
}