📄 lh7a404_clcdc_driver.c.bak
字号:
* Notes: None
*
**********************************************************************/
STATUS lcd_close(INT_32 devid)
{
CLCDC_CFG_T *lcdcfgptr = (CLCDC_CFG_T *) devid;
STATUS status = _ERROR;
if (lcdcfgptr->init == TRUE)
{
/* 'Uninitialize' device */
lcdcfgptr->init = FALSE;
status = _NO_ERROR;
/* Disable LCD */
lcdcfg.regptr->lcdctrl &= ~CLCDC_LCDCTRL_ENABLE;
}
return status;
}
/***********************************************************************
*
* Function: lcd_ioctl
*
* Purpose: LCD configuration block
*
* Processing:
* This function is a large case block. Based on the passed function
* and option values, set or get the appropriate real time clock
* parameter.
*
* Parameters:
* devid: Pointer to LCD config structure
* cmd: ioctl command
* arg: ioctl argument
*
* Outputs: None
*
* Returns: The status of the ioctl operation
*
* Notes: None
*
**********************************************************************/
STATUS lcd_ioctl(INT_32 devid,
INT_32 cmd,
INT_32 arg)
{
CLCDC_REGS_T *lcdregs;
UNS_32 tmp, tmp1;
CLCDC_CFG_T *lcdcfgptr = (CLCDC_CFG_T *) devid;
STATUS status = _ERROR;
if (lcdcfgptr->init == TRUE)
{
status = _NO_ERROR;
lcdregs = lcdcfgptr->regptr;
switch (cmd)
{
case LCD_CONFIG:
/* Configure the LCD controller with a predefined LCD
configuration structure */
if (arg != 0)
{
lcdcfgptr->dptr = (LCD_PARAM_T *) arg;
lcd_initialize(lcdcfgptr);
}
else
{
/* Not a valid address of structure */
status = _ERROR;
}
break;
case LCD_ENABLE:
/* Enable or disable LCD controller */
if (arg == 1)
{
/* Enable */
lcdregs->lcdctrl |= CLCDC_LCDCTRL_ENABLE;
}
else
{
/* Disable */
lcdregs->lcdctrl *= ~CLCDC_LCDCTRL_ENABLE;
}
break;
case LCD_PWENABLE:
/* Enable or disable LCD power */
if (arg == 1)
{
/* Enable */
lcdregs->lcdctrl |= (CLCDC_LCDCTRL_ENABLE |
CLCDC_LCDCTRL_PWR);
}
else
{
/* Disable */
lcdregs->lcdctrl &= ~(CLCDC_LCDCTRL_ENABLE |
CLCDC_LCDCTRL_PWR);
}
break;
case LCD_SET_UP_FB:
/* Set upper frame buffer address */
lcdregs->lcdupbase = (UNS_32) arg;
break;
case LCD_SET_LW_FB:
/* Set lower frame buffer address */
lcdregs->lcdlpbase = (UNS_32) arg;
break;
case LCD_SET_OV_FB:
/* Set overflow frame buffer address */
lcdregs->lcdlpoverflow = (UNS_32) arg;
break;
case LCD_ENABLE_INTS:
/* Enable LCD interrupts */
tmp = lcdregs->lcdintrenable;
tmp = tmp | ((UNS_32) arg & (CLCDC_LCDSTATUS_FUFUP |
CLCDC_LCDSTATUS_FUFLP |CLCDC_LCDSTATUS_LNBU |
CLCDC_LCDSTATUS_VCOMP | CLCDC_LCDSTATUS_MBERROR));
lcdregs->lcdintrenable = tmp;
break;
case LCD_DISABLE_INTS:
/* Disable LCD interrupts */
tmp = lcdregs->lcdintrenable;
tmp = tmp & ~((UNS_32) arg & (CLCDC_LCDSTATUS_FUFUP |
CLCDC_LCDSTATUS_FUFLP |CLCDC_LCDSTATUS_LNBU |
CLCDC_LCDSTATUS_VCOMP | CLCDC_LCDSTATUS_MBERROR));
lcdregs->lcdintrenable = tmp;
break;
case LCD_PICK_INT:
/* Select the interrupt condition that generates the
CLCDC_LCDSTATUS_VCOMP interrupt */
if ((arg >= VSYNC_START) && (arg <= FRONT_PORCH_START))
{
/* Temporarily disable CLCDC_LCDSTATUS_VCOMP
interrupt */
tmp = lcdregs->lcdintrenable;
lcdregs->lcdintrenable &= ~CLCDC_LCDSTATUS_VCOMP;
/* Mask off VCOMP selection bits in control word */
tmp1 = lcdregs->lcdctrl & ~CLCDC_LCDCTRL_VCOMP_IC;
/* 'OR' in selected interrupt */
tmp1 |= lcd_vcmp_sel[arg];
lcdregs->lcdctrl = tmp1;
/* Restore the LCD CLCDC_LCDSTATUS_VCOMP
interrupt */
lcdregs->lcdintrenable = tmp;
}
else
{
/* Invalid argument */
status = _ERROR;
}
break;
case LCD_CLEAR_INT:
/* Clear the latched LCD interrupt condition */
lcdregs->lcdstatus = 0xFF;
break;
case LCD_DMA_ON_4MT:
/* Set DMA requests to start when 4 or 8 entries are
free in the CLCDC FIFOs */
if (arg == 0)
{
/* Use 8 entries */
lcdregs->lcdctrl &= ~CLCDC_LCDCTRL_WATERMARK;
}
else
{
/* Use 4 entries */
lcdregs->lcdctrl |= CLCDC_LCDCTRL_WATERMARK;
}
break;
case LCD_SWAP_RGB:
/* Swaps the red and green colors in a 16-bit color
value */
if (arg == 1)
{
/* Swap RGB colors (555 mode only) */
lcdregs->lcdctrl &= ~CLCDC_LCDCTRL_RGB;
}
else
{
/* Do not swap RGB colors (555 mode only) */
lcdregs->lcdctrl |= CLCDC_LCDCTRL_RGB;
}
break;
case LCD_SET_BPP:
/* Set bits per pixel */
tmp = lcdregs->lcdctrl & ~CLCDC_LCDCTRL_BPP_MASK;
switch (arg)
{
case 1:
tmp |= CLCDC_LCDCTRL_BPP1;
break;
case 2:
tmp |= CLCDC_LCDCTRL_BPP2;
break;
case 4:
tmp |= CLCDC_LCDCTRL_BPP4;
break;
case 8:
tmp |= CLCDC_LCDCTRL_BPP8;
break;
case 16:
default:
tmp |= CLCDC_LCDCTRL_BPP16;
break;
}
lcdregs->lcdctrl = tmp;
break;
case LCD_SET_CLOCK:
/* Sets or updates the LCD pixel clock */
if (arg > 0)
{
lcd_update_clock(lcdcfgptr, (UNS_32) arg);
}
break;
case LCD_GET_STATUS:
/* Return an LCD status */
switch (arg)
{
case LCD_ENABLE_ST:
/* Return LCD enabled status */
if ((lcdregs->lcdctrl &
CLCDC_LCDCTRL_ENABLE) != 0)
{
status = 1;
}
else
{
status = 0;
}
break;
case LCD_PWENABLE_ST:
/* Return LCD power enabled status */
if ((lcdregs->lcdctrl & CLCDC_LCDCTRL_PWR) != 0)
{
status = 1;
}
else
{
status = 0;
}
break;
case LCD_UP_FB:
/* Return upper frame buffer address */
status = (INT_32) lcdregs->lcdupbase;
break;
case LCD_LW_FB:
/* Return lower frame buffer address */
status = (INT_32) lcdregs->lcdlpbase;
break;
case LCD_OVR_FB:
/* Return overflow frame buffer address */
status = (INT_32) lcdregs->lcdlpoverflow;
break;
case LCD_PANEL_TYPE:
/* Return the LCD panel type */
status =
(INT_32) lcdcfgptr->dptr->lcd_panel_type;
break;
case LCD_CLOCK:
/* Returns the pixel clock in Hz */
/* This function is not yet implemented */
break;
case LCD_XSIZE:
/* Returns the display horizontal size in
pixels */
status =
(INT_32) lcdcfgptr->dptr->pixels_per_line;
break;
case LCD_YSIZE:
/* Returns the display vertical size in
pixels */
status =
(INT_32) lcdcfgptr->dptr->lines_per_panel;
break;
case LCD_COLOR_DEPTH:
/* Returns the display color depth */
switch (lcdregs->lcdctrl &
CLCDC_LCDCTRL_BPP_MASK)
{
case CLCDC_LCDCTRL_BPP1:
status = 1;
break;
case CLCDC_LCDCTRL_BPP2:
status = 2;
break;
case CLCDC_LCDCTRL_BPP4:
status = 4;
break;
case CLCDC_LCDCTRL_BPP8:
status = 8;
break;
case CLCDC_LCDCTRL_BPP16:
status = 16;
break;
default:
status = SMA_BAD_PARAMS;
}
break;
default:
/* Unsupported parameter */
status = SMA_BAD_PARAMS;
}
break;
default:
/* Unsupported parameter */
status = SMA_BAD_PARAMS;
}
}
return status;
}
/***********************************************************************
*
* Function: lcd_read
*
* Purpose: LCD read function (stub only)
*
* Processing:
* Return 0 to the caller.
*
* Parameters:
* devid: Pointer to LCD config structure
* buffer: Pointer to data buffer to copy to
* max_bytes: Number of bytes to read
*
* Outputs: None
*
* Returns: Number of bytes actually read (always 0)
*
* Notes: None
*
**********************************************************************/
INT_32 lcd_read(INT_32 devid,
void *buffer,
INT_32 max_bytes)
{
return 0;
}
/***********************************************************************
*
* Function: lcd_write
*
* Purpose: LCD write function (stub only)
*
* Processing:
* Return 0 to the caller.
*
* Parameters:
* devid: Pointer to LCD config structure
* buffer: Pointer to data buffer to copy from
* n_bytes: Number of bytes to write
*
* Outputs: None
*
* Returns: Number of bytes actually written (always 0)
*
* Notes: None
*
**********************************************************************/
INT_32 lcd_write(INT_32 devid,
void *buffer,
INT_32 n_bytes)
{
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -