vedio_gr_peach

Fork of GR-PEACH_video by Renesas

Revision:
0:853f5b7408a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/vdc5/src/r_vdc5.c	Fri Jun 26 02:17:53 2015 +0000
@@ -0,0 +1,1224 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2015 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/**************************************************************************//**
+* @file         r_vdc5.c
+* @version      1.00
+* $Rev: 199 $
+* $Date:: 2014-05-23 16:33:52 +0900#$
+* @brief        VDC5 driver API function
+******************************************************************************/
+
+/******************************************************************************
+Includes   <System Includes> , "Project Includes"
+******************************************************************************/
+#include    "r_vdc5.h"
+#include    "r_vdc5_user.h"
+#include    "r_vdc5_register.h"
+#include    "r_vdc5_shared_param.h"
+#include    "r_vdc5_check_parameter.h"
+
+
+/******************************************************************************
+Macro definitions
+******************************************************************************/
+
+/******************************************************************************
+Typedef definitions
+******************************************************************************/
+
+/******************************************************************************
+Private global variables and functions
+******************************************************************************/
+static vdc5_scaling_type_t ConvertRwProcId2SclId(const vdc5_layer_id_t layer_id);
+static vdc5_graphics_type_t ConvertRwProcId2GrId(const vdc5_layer_id_t layer_id);
+
+
+/**************************************************************************//**
+ * @brief       VDC5 driver initialization
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Initializes the VDC5 driver's internal variables.
+ *              - Calls the user-defined function specified in init_func.
+ *              - Sets up and enables the VDC5's panel clock.
+ *              - Sets up and enables the LVDS only if LVDS is used.
+ *              - Disables all the VDC5 interrupts.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Initialization parameter
+ * @param[in]   init_func               : Pointer to a user-defined function
+ * @param[in]   user_num                : User defined number
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_Initialize (
+    const vdc5_channel_t        ch,
+    const vdc5_init_t   * const param,
+    void               (* const init_func)(uint32_t),
+    const uint32_t              user_num)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_InitializeCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmInit(ch);
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LVDS_CLK);
+        if (rsrc_state != VDC5_RESOURCE_ST_INVALID) {
+            /* The LVDS PLL clock has been already set. */
+            if (param->lvds != NULL) {
+                ret = VDC5_ERR_RESOURCE_LVDS_CLK;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetInitParam(ch, param);
+
+        /* Callback function */
+        if (init_func != 0) {
+            init_func(user_num);
+        }
+
+        VDC5_Initialize(ch, param);
+
+        /* Disable all VDC5 interrupts */
+        VDC5_Int_Disable(ch);
+
+        VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_PANEL_CLK, VDC5_RESOURCE_ST_VALID);
+        if (param->lvds != NULL) {
+            VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_LVDS_CLK, VDC5_RESOURCE_ST_VALID);
+        }
+    }
+    return ret;
+}   /* End of function R_VDC5_Initialize() */
+
+/**************************************************************************//**
+ * @brief       VDC5 driver termination
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Disables all the VDC5 interrupts.
+ *              - Disables the VDC5 panel clock.
+ *              - Disables the LVDS if one is used and becomes unnecessary as the result of calling this function.
+ *              - Calls the user-defined function specified in quit_func.
+ * @param[in]   ch                      : Channel
+ * @param[in]   quit_func               : Pointer to a user-defined function
+ * @param[in]   user_num                : User defined number
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_Terminate (const vdc5_channel_t ch, void (* const quit_func)(uint32_t), const uint32_t user_num)
+{
+    vdc5_error_t    ret;
+    vdc5_onoff_t    lvds_ref;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_TerminateCheckPrm(ch);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetTerminate(ch);
+
+        /* Disable all VDC5 interrupts */
+        VDC5_Int_Disable(ch);
+
+        VDC5_Terminate(ch);
+
+        VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_PANEL_CLK, VDC5_RESOURCE_ST_INVALID);
+
+        lvds_ref = VDC5_ShrdPrmGetLvdsClkRef();
+        if (lvds_ref == VDC5_OFF) {     /* LVDS PLL clock is not referred. */
+            VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_LVDS_CLK, VDC5_RESOURCE_ST_INVALID);
+        }
+
+        /* Callback function */
+        if (quit_func != 0) {
+            quit_func(user_num);
+        }
+    }
+    return ret;
+}   /* End of function R_VDC5_Terminate() */
+
+/**************************************************************************//**
+ * @brief       Video input setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Selects the video input.
+ *              - Sets up the phase timing of the input signals.
+ *              - Performs delay control on the sync signal for the video inputs.
+ *              - Sets up the parameters for the external input video signals only when they are used.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Video input setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_VideoInput (const vdc5_channel_t ch, const vdc5_input_t * const param)
+{
+    vdc5_error_t ret;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_VideoInputCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetInputParam(ch, param);
+
+        /* Setting VDC5 registers */
+        VDC5_VideoInput(ch, param);
+
+        VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_VIDEO_IN, VDC5_RESOURCE_ST_VALID);
+    }
+    return ret;
+}   /* End of function R_VDC5_VideoInput() */
+
+/**************************************************************************//**
+ * @brief       Sync control setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Selects the vertical sync signal.
+ *              - Sets up the period of the sync signal.
+ *              - Sets up the delay of the vertical sync signal.
+ *              - Sets up the full-screen enable signal.
+ *              - Sets up the compensation for the vertical sync signal.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Sync control parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_SyncControl (const vdc5_channel_t ch, const vdc5_sync_ctrl_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_SyncControlCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_PANEL_CLK);
+        if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+            ret = VDC5_ERR_RESOURCE_CLK;
+        }
+    }
+    if (ret == VDC5_OK) {
+        if (param->res_vs_sel == VDC5_OFF) {
+            /* External input Vsync signal is selected. */
+            if (param->res_vs_in_sel == VDC5_RES_VS_IN_SEL_SC0) {
+                /* Scaler 0 */
+                rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VIDEO_IN);
+            } else {
+                /* Scaler 1 */
+                rsrc_state = VDC5_ShrdPrmGetResource(
+                                 ((ch == VDC5_CHANNEL_0) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0),
+                                 VDC5_RESOURCE_VIDEO_IN);
+            }
+            if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+                ret = VDC5_ERR_RESOURCE_INPUT;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetSyncParam(ch, param);
+
+        /* Setting VDC5 registers */
+        VDC5_SyncControl(ch, param);
+
+        VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_VSYNC, VDC5_RESOURCE_ST_VALID);
+    }
+    return ret;
+}   /* End of function R_VDC5_SyncControl() */
+
+/**************************************************************************//**
+ * @brief       Display output setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Sets up the timing signals for driving the LCD panel.
+ *              - Sets up the phase, data sequence, and format of the LCD panel output data.
+ *              - Sets up the background color.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Display output configuration parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_DisplayOutput (const vdc5_channel_t ch, const vdc5_output_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_DisplayOutputCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_PANEL_CLK);
+        if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+            ret = VDC5_ERR_RESOURCE_CLK;
+        } else {
+            rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VSYNC);
+            if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+                ret = VDC5_ERR_RESOURCE_VSYNC;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetOutputParam(ch, param);
+
+        /* Setting VDC5 registers */
+        VDC5_DisplayOutput(ch, param);
+
+        VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_LCD_PANEL, VDC5_RESOURCE_ST_VALID);
+    }
+    return ret;
+}   /* End of function R_VDC5_DisplayOutput() */
+
+/**************************************************************************//**
+ * @brief       Interrupt callback setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Enables the interrupt when the pointer to the corresponding interrupt callback function is specified.
+ *              - Registers the specified interrupt callback function.
+ *              - Disables the interrupt when the pointer to the corresponding interrupt callback function is not
+ *                specified.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Interrupt callback setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_CallbackISR (const vdc5_channel_t ch, const vdc5_int_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_CallbackISRCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_PANEL_CLK);
+        if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+            ret = VDC5_ERR_RESOURCE_CLK;
+        } else {
+            rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VSYNC);
+            if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+                ret = VDC5_ERR_RESOURCE_VSYNC;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_Int_SetInterrupt(ch, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_CallbackISR() */
+
+/**************************************************************************//**
+ * @brief       Data write control processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Sets up the input image area to be captured.
+ *              - Makes input image scale-down/rotation control settings (layers 0 and 1 only).
+ *              - Makes frame buffer write control settings.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_0_WR
+ *                                        - VDC5_LAYER_ID_1_WR
+ *                                        - VDC5_LAYER_ID_OIR_WR
+ * @param[in]   param                   : Data write control parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_WriteDataControl (
+    const vdc5_channel_t        ch,
+    const vdc5_layer_id_t       layer_id,
+    const vdc5_write_t  * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_scaling_type_t     scaling_id;
+    vdc5_resource_state_t   rsrc_state;
+
+    scaling_id = ConvertRwProcId2SclId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_WriteDataControlCheckPrm(ch, layer_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id);
+        if (rsrc_state != VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is already used. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        } else {
+            if (layer_id == VDC5_LAYER_ID_0_WR) {
+                /* Layer 0 */
+                rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VIDEO_IN);
+            } else if (layer_id == VDC5_LAYER_ID_1_WR) {
+                /* Layer 1 */
+                rsrc_state = VDC5_ShrdPrmGetResource(
+                                 ((ch == VDC5_CHANNEL_0) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0),
+                                 VDC5_RESOURCE_VIDEO_IN);
+            } else {
+                /* Layer OIR */
+                rsrc_state = VDC5_RESOURCE_ST_VALID;
+            }
+            if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+                ret = VDC5_ERR_RESOURCE_INPUT;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetWriteParam(ch, scaling_id, param);
+
+        /* Setting VDC5 registers */
+        VDC5_WriteDataControl(ch, scaling_id, param);
+
+        VDC5_ShrdPrmSetLayerResource(ch, layer_id, VDC5_RESOURCE_ST_VALID);
+    }
+    return ret;
+}   /* End of function R_VDC5_WriteDataControl() */
+
+/**************************************************************************//**
+ * @brief       Data write change processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Changes the input image area to be captured.
+ *              - Makes changes with respect to scaling-down/rotation control of the input image (layers 0 and 1 only).
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_0_WR
+ *                                        - VDC5_LAYER_ID_1_WR
+ *                                        - VDC5_LAYER_ID_OIR_WR
+ * @param[in]   param                   : Data write change parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ChangeWriteProcess (
+    const vdc5_channel_t            ch,
+    const vdc5_layer_id_t           layer_id,
+    const vdc5_write_chg_t   * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_scaling_type_t     scaling_id;
+    vdc5_resource_state_t   rsrc_state;
+
+    scaling_id = ConvertRwProcId2SclId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ChangeWriteProcessCheckPrm(ch, layer_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetRwProcEnabled(ch, layer_id);
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetChgWriteParam(ch, scaling_id, param);
+
+        /* Setting VDC5 registers */
+        VDC5_ChangeWriteProcess(ch, scaling_id, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_ChangeWriteProcess() */
+
+/**************************************************************************//**
+ * @brief       Data read control processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Sets up the display area for graphics images.
+ *              - Makes image scale-up control settings (layers 0 and 1 only).
+ *              - Makes frame buffer read control settings.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_0_RD
+ *                                        - VDC5_LAYER_ID_1_RD
+ *                                        - VDC5_LAYER_ID_2_RD
+ *                                        - VDC5_LAYER_ID_3_RD
+ *                                        - VDC5_LAYER_ID_OIR_RD
+ * @param[in]   param                   : Data read control parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ReadDataControl (
+    const vdc5_channel_t        ch,
+    const vdc5_layer_id_t       layer_id,
+    const vdc5_read_t   * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_graphics_type_t    graphics_id;
+    vdc5_resource_state_t   rsrc_state;
+
+    graphics_id = ConvertRwProcId2GrId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ReadDataControlCheckPrm(ch, layer_id, graphics_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id);
+        if (rsrc_state != VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is already used. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetReadParam(ch, graphics_id, param);
+
+        /* Setting VDC5 registers */
+        VDC5_ReadDataControl(ch, graphics_id, param);
+
+        VDC5_ShrdPrmSetLayerResource(ch, layer_id, VDC5_RESOURCE_ST_VALID);
+    }
+    return ret;
+}   /* End of function R_VDC5_ReadDataControl() */
+
+/**************************************************************************//**
+ * @brief       Data read change processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Changes the frame buffer base address.
+ *              - Changes the frame buffer read size (image scale-up control) (layers 0 and 1 only).
+ *              - Changes the display area for graphics images.
+ *              - Changes the graphics display mode.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_0_RD
+ *                                        - VDC5_LAYER_ID_1_RD
+ *                                        - VDC5_LAYER_ID_2_RD
+ *                                        - VDC5_LAYER_ID_3_RD
+ *                                        - VDC5_LAYER_ID_OIR_RD
+ * @param[in]   param                   : Data read change parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ChangeReadProcess (
+    const vdc5_channel_t            ch,
+    const vdc5_layer_id_t           layer_id,
+    const vdc5_read_chg_t   * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_graphics_type_t    graphics_id;
+    vdc5_resource_state_t   rsrc_state;
+
+    graphics_id = ConvertRwProcId2GrId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ChangeReadProcessCheckPrm(ch, layer_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetRwProcEnabled(ch, layer_id);
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        }
+    }
+    if (ret == VDC5_OK) {
+        VDC5_ShrdPrmSetChgReadParam(ch, graphics_id, param);
+
+        /* Setting VDC5 registers */
+        VDC5_ChangeReadProcess(ch, graphics_id, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_ChangeReadProcess() */
+
+/**************************************************************************//**
+ * @brief       Data write/read start processing
+ *
+ *              Description:<br>
+ *              This function performs layer start processing. If the layer ID specified in layer_id
+ *              is VDC5_LAYER_ID_ALL, the function starts all the layers that are in the stopped state
+ *              and also enabled. If the layer ID is not VDC5_LAYER_ID_ALL, the function starts only
+ *              the specified layer.<br>
+ *              When performing start processing for write, the function starts a write to the frame buffer.
+ *              When performing start processing for read, the function starts a read from the frame buffer
+ *              and sets the graphics display mode to the specified values for each layer.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ * @param[in]   param                   : Data write/read start parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_StartProcess (
+    const vdc5_channel_t        ch,
+    const vdc5_layer_id_t       layer_id,
+    const vdc5_start_t  * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_StartProcessCheckPrm(ch, layer_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        if (layer_id != VDC5_LAYER_ID_ALL) {
+            rsrc_state = VDC5_ShrdPrmGetRwProcReady(ch, layer_id);
+            if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+                /* The specified layer is invalid. */
+                ret = VDC5_ERR_RESOURCE_LAYER;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_StartProcess(ch, layer_id, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_StartProcess() */
+
+/**************************************************************************//**
+ * @brief       Data write/read stop processing
+ *
+ *              Description:<br>
+ *              This function performs layer stop processing. If the layer ID specified in layer_id is
+ *              VDC5_LAYER_ID_ALL, the function stops all the layers that are enabled and running.
+ *              If the layer ID is not VDC5_LAYER_ID_ALL, the function stops only the specified layer.<br>
+ *              When performing stop processing for write, the function stops the write to the frame buffer.
+ *              When performing stop processing for read, the function stops the read from the frame buffer
+ *              and resets the graphics display mode to the initial values for each of the layers.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_StopProcess (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_StopProcessCheckPrm(ch, layer_id);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        if (layer_id != VDC5_LAYER_ID_ALL) {
+            rsrc_state = VDC5_ShrdPrmGetRwProcEnabled(ch, layer_id);
+            if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+                /* The specified layer is invalid. */
+                ret = VDC5_ERR_RESOURCE_LAYER;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_StopProcess(ch, layer_id);
+    }
+    return ret;
+}   /* End of function R_VDC5_StopSurface() */
+
+/**************************************************************************//**
+ * @brief       Data write/read control release processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Disables the specified layer.
+ *              - Initializes the cascaded connection settings (layer 1 read processing only).
+ *              - Initializes the VIN synthesizer settings (layer 0 and 1 read processing only).
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ReleaseDataControl (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ReleaseDataControlCheckPrm(ch, layer_id);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        if (layer_id != VDC5_LAYER_ID_ALL) {
+            rsrc_state = VDC5_ShrdPrmGetRwProcReady(ch, layer_id);
+            if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+                /* The specified layer is invalid. */
+                ret = VDC5_ERR_RESOURCE_LAYER;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_ReleaseDataControl(ch, layer_id);
+
+        VDC5_ShrdPrmSetLayerResource(ch, layer_id, VDC5_RESOURCE_ST_INVALID);
+    }
+    return ret;
+}   /* End of function R_VDC5_ReleaseDataControl() */
+
+/**************************************************************************//**
+ * @brief       Noise reduction setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Turns on and off noise reduction processing.
+ *              - Sets up the noise reduction parameters for the Y/G, Cb/B, and Cr/R signals.
+ * @param[in]   ch                      : Channel
+ * @param[in]   nr1d_on                 : Noise reduction ON/OFF setting
+ * @param[in]   param                   : Noise reduction setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_VideoNoiseReduction (
+    const vdc5_channel_t                    ch,
+    const vdc5_onoff_t                      nr1d_on,
+    const vdc5_noise_reduction_t    * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_VideoNoiseReductCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VIDEO_IN);
+        if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+            ret = VDC5_ERR_RESOURCE_INPUT;
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_VideoNoiseReduction(ch, nr1d_on, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_VideoNoiseReduction() */
+
+/**************************************************************************//**
+ * @brief       Color matrix setup
+ *
+ *              Description:<br>
+ *              This function sets up the specified color matrix.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Color matrix setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ImageColorMatrix (const vdc5_channel_t ch, const vdc5_color_matrix_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ImageColorMatrixCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        if (param->module == VDC5_COLORMTX_IMGCNT) {
+            rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_WR);
+            if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+                rsrc_state = VDC5_ShrdPrmGetLayerResource(
+                                 ((ch == VDC5_CHANNEL_0) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0),
+                                 VDC5_LAYER_ID_1_WR);
+            }
+        } else if (param->module == VDC5_COLORMTX_ADJ_0) {
+            rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_RD);
+        } else {
+            rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_1_RD);
+        }
+
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_ImageColorMatrix(ch, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_ImageColorMatrix() */
+
+/**************************************************************************//**
+ * @brief       Image enhancement processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Turns on and off sharpness processing.
+ *              - Sets up the sharpness parameter.
+ *              - Turns on and off LTI processing.
+ *              - Sets up the LTI parameter.
+ *              - Sets up the enhancer-enabled area to be subjected to sharpness and LTI processing.
+ * @param[in]   ch                      : Channel
+ * @param[in]   imgimprv_id             : Image quality improver ID
+ * @param[in]   shp_h_on                : Sharpness ON/OFF setting
+ * @param[in]   sharp_param             : Sharpness setup parameter
+ * @param[in]   lti_h_on                : LTI ON/OFF setting
+ * @param[in]   lti_param               : LTI setup parameter
+ * @param[in]   enh_area                : Enhancer-enabled area setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ImageEnhancement (
+    const vdc5_channel_t                ch,
+    const vdc5_imgimprv_id_t            imgimprv_id,
+    const vdc5_onoff_t                  shp_h_on,
+    const vdc5_enhance_sharp_t  * const sharp_param,
+    const vdc5_onoff_t                  lti_h_on,
+    const vdc5_enhance_lti_t    * const lti_param,
+    const vdc5_period_rect_t    * const enh_area)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+    vdc5_color_space_t      color_space;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ImageEnhancementCheckPrm(ch, imgimprv_id, sharp_param, enh_area);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(
+                         ch,
+                         ((imgimprv_id == VDC5_IMG_IMPRV_0) ? VDC5_LAYER_ID_0_RD : VDC5_LAYER_ID_1_RD));
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        } else {
+            /* Condition checks */
+            color_space = VDC5_ShrdPrmGetColorSpaceFbRd(
+                              ch,
+                              ((imgimprv_id == VDC5_IMG_IMPRV_0) ? VDC5_GR_TYPE_GR0 : VDC5_GR_TYPE_GR1));
+            if (color_space == VDC5_COLOR_SPACE_GBR) {
+                /* The image quality improver does not act on RGB signals. */
+                ret = VDC5_ERR_IF_CONDITION;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_ImageEnhancement(ch, imgimprv_id, shp_h_on, sharp_param, lti_h_on, lti_param, enh_area);
+    }
+    return ret;
+}   /* End of function R_VDC5_ImageEnhancement() */
+
+/**************************************************************************//**
+ * @brief       Black stretch setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Turns on and off black stretch processing.
+ *              - Sets up the black stretch parameters.
+ * @param[in]   ch                      : Channel
+ * @param[in]   imgimprv_id             : Image quality improver ID
+ * @param[in]   bkstr_on                : Black stretch ON/OFF setting
+ * @param[in]   param                   : Black stretch setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_ImageBlackStretch (
+    const vdc5_channel_t        ch,
+    const vdc5_imgimprv_id_t    imgimprv_id,
+    const vdc5_onoff_t          bkstr_on,
+    const vdc5_black_t  * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+    vdc5_color_space_t      color_space;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ImageBlackStretchCheckPrm(ch, imgimprv_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(
+                         ch,
+                         ((imgimprv_id == VDC5_IMG_IMPRV_0) ? VDC5_LAYER_ID_0_RD : VDC5_LAYER_ID_1_RD));
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        } else {
+            /* Condition checks */
+            color_space = VDC5_ShrdPrmGetColorSpaceFbRd(
+                              ch,
+                              ((imgimprv_id == VDC5_IMG_IMPRV_0) ? VDC5_GR_TYPE_GR0 : VDC5_GR_TYPE_GR1));
+            if (color_space == VDC5_COLOR_SPACE_GBR) {
+                /* The image quality improver does not act on RGB signals. */
+                ret = VDC5_ERR_IF_CONDITION;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_ImageBlackStretch(ch, imgimprv_id, bkstr_on, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_ImageBlackStretch() */
+
+/**************************************************************************//**
+ * @brief       Alpha blending setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Sets up the alpha value of the ARGB1555/RGBA5551 formats.
+ *              - Make settings for premultiplication processing at alpha blending in one-pixel.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_1_RD
+ *                                        - VDC5_LAYER_ID_2_RD
+ *                                        - VDC5_LAYER_ID_3_RD
+ * @param[in]   param                   : Alpha blending setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_AlphaBlending (
+    const vdc5_channel_t                ch,
+    const vdc5_layer_id_t               layer_id,
+    const vdc5_alpha_blending_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_graphics_type_t    graphics_id;
+    vdc5_resource_state_t   rsrc_state;
+
+    graphics_id = ConvertRwProcId2GrId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_AlphaBlendingCheckPrm(ch, layer_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id);
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_AlphaBlending(ch, graphics_id, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_AlphaBlending() */
+
+/**************************************************************************//**
+ * @brief       Rectangle alpha blending setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Turns on and off alpha blending in a rectangular area.
+ *              - Sets up the rectangular area subjected to alpha blending.
+ *              - Sets up the alpha value for alpha blending in a rectangular area.
+ *              - Makes fade-in/-out settings to be applied to rectangle alpha blending.
+ *              - Allocates graphics 0 and 1 to the lower-layer/current graphics in the VIN synthesizer.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_1_RD
+ *                                        - VDC5_LAYER_ID_2_RD
+ *                                        - VDC5_LAYER_ID_3_RD
+ *                                        - VDC5_LAYER_ID_VIN_RD
+ * @param[in]   gr_arc_on               : ON/OFF setting for alpha blending in a rectangular area
+ * @param[in]   param                   : Setup parameter for alpha blending in a rectangular area
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_AlphaBlendingRect (
+    const vdc5_channel_t                        ch,
+    const vdc5_layer_id_t                       layer_id,
+    const vdc5_onoff_t                          gr_arc_on,
+    const vdc5_alpha_blending_rect_t    * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_graphics_type_t    graphics_id;
+    vdc5_color_space_t      color_space;
+    vdc5_resource_state_t   rsrc_state;
+
+    graphics_id = ConvertRwProcId2GrId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_AlphaBlendingRectCheckPrm(ch, layer_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        if (layer_id != VDC5_LAYER_ID_VIN_RD) {
+            /* Resource checks */
+            rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id);
+            if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+                /* The specified layer is invalid. */
+                ret = VDC5_ERR_RESOURCE_LAYER;
+            } else {
+                /* Condition checks */
+                color_space = VDC5_ShrdPrmGetColorSpaceFbRd(ch, graphics_id);
+                if (color_space == VDC5_COLOR_SPACE_YCBCR) {
+                    /* Alpha blending cannot be used
+                       when the format of the signal read from the frame buffer is YCbCr422 or YCbCr444. */
+                    ret = VDC5_ERR_IF_CONDITION;
+                }
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_AlphaBlendingRect(ch, graphics_id, gr_arc_on, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_AlphaBlendingRect() */
+
+/**************************************************************************//**
+ * @brief       Chroma-key setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Turns on and off the chroma-key processing.
+ *              - Sets up the color signals to be subject to chroma-key processing and
+ *                the color signals after replacement.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_0_RD
+ *                                        - VDC5_LAYER_ID_1_RD
+ *                                        - VDC5_LAYER_ID_2_RD
+ *                                        - VDC5_LAYER_ID_3_RD
+ *                                        - VDC5_LAYER_ID_OIR_RD
+ * @param[in]   gr_ck_on                : Chroma-key ON/OFF setting
+ * @param[in]   param                   : Chroma-key setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_Chromakey (
+    const vdc5_channel_t            ch,
+    const vdc5_layer_id_t           layer_id,
+    const vdc5_onoff_t              gr_ck_on,
+    const vdc5_chromakey_t  * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_graphics_type_t    graphics_id;
+    vdc5_color_space_t      color_space;
+    vdc5_resource_state_t   rsrc_state;
+
+    graphics_id = ConvertRwProcId2GrId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_ChromakeyCheckPrm(ch, layer_id, graphics_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id);
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        } else {
+            /* Condition checks */
+            color_space = VDC5_ShrdPrmGetColorSpaceFbRd(ch, graphics_id);
+            if (color_space == VDC5_COLOR_SPACE_YCBCR) {
+                /* Chroma-key processing cannot be used
+                   when the format of the signal read from the frame buffer is YCbCr422 or YCbCr444. */
+                ret = VDC5_ERR_IF_CONDITION;
+            }
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_Chromakey(ch, graphics_id, gr_ck_on, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_Chromakey() */
+
+/**************************************************************************//**
+ * @brief       CLUT setup
+ *
+ *              Description:<br>
+ *              This function sets up CLUT for the specified layer.
+ * @param[in]   ch                      : Channel
+ * @param[in]   layer_id                : Layer ID
+ *                                        - VDC5_LAYER_ID_0_RD
+ *                                        - VDC5_LAYER_ID_1_RD
+ *                                        - VDC5_LAYER_ID_2_RD
+ *                                        - VDC5_LAYER_ID_3_RD
+ *                                        - VDC5_LAYER_ID_OIR_RD
+ * @param[in]   param                   : CLUT setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_CLUT (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id, const vdc5_clut_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_graphics_type_t    graphics_id;
+    vdc5_resource_state_t   rsrc_state;
+
+    graphics_id = ConvertRwProcId2GrId(layer_id);
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_CLUTCheckPrm(ch, layer_id, graphics_id, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id);
+        if (rsrc_state == VDC5_RESOURCE_ST_INVALID) {
+            /* The specified layer is invalid. */
+            ret = VDC5_ERR_RESOURCE_LAYER;
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_CLUT(ch, graphics_id, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_SetCLUT() */
+
+/**************************************************************************//**
+ * @brief       Display calibration processing
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Sets up panel brightness adjustment.
+ *              - Sets up contrast adjustment.
+ *              - Sets up panel dithering.
+ *              - Makes control settings for the correction circuit sequence.
+ * @param[in]   ch                      : Channel
+ * @param[in]   param                   : Display calibration parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_DisplayCalibration (const vdc5_channel_t ch, const vdc5_disp_calibration_t * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_DisplayCalibrationCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LCD_PANEL);
+        if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+            ret = VDC5_ERR_RESOURCE_OUTPUT;
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_DisplayCalibration(ch, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_DisplayCalibration() */
+
+/**************************************************************************//**
+ * @brief       Gamma correction setup
+ *
+ *              Description:<br>
+ *              This function performs the following processing:
+ *              - Turns on and off gamma correction processing.
+ *              - Sets up the gamma correction gain adjustment values for the G/B/R signals.
+ *              - Sets up the gamma correction start threshold values for the G/B/R signals.
+ * @param[in]   ch                      : Channel
+ * @param[in]   gam_on                  : Gamma correction ON/OFF setting
+ * @param[in]   param                   : Gamma correction setup parameter
+ * @retval      Error code
+ *****************************************************************************/
+vdc5_error_t R_VDC5_GammaCorrection (
+    const vdc5_channel_t                    ch,
+    const vdc5_onoff_t                      gam_on,
+    const vdc5_gamma_correction_t   * const param)
+{
+    vdc5_error_t            ret;
+    vdc5_resource_state_t   rsrc_state;
+
+    ret = VDC5_OK;
+#ifdef  R_VDC5_CHECK_PARAMETERS
+    ret = VDC5_GammaCorrectionCheckPrm(ch, param);
+#endif  /* R_VDC5_CHECK_PARAMETERS */
+    if (ret == VDC5_OK) {
+        /* Resource checks */
+        rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LCD_PANEL);
+        if (rsrc_state != VDC5_RESOURCE_ST_VALID) {
+            ret = VDC5_ERR_RESOURCE_OUTPUT;
+        }
+    }
+    if (ret == VDC5_OK) {
+        /* Setting VDC5 registers */
+        VDC5_GammaCorrection(ch, gam_on, param);
+    }
+    return ret;
+}   /* End of function R_VDC5_GammaCorrection() */
+
+/******************************************************************************
+Local Functions
+******************************************************************************/
+/**************************************************************************//**
+ * @brief       Convert read/write process ID into scaling type ID
+ *
+ * @param[in]   layer_id              : Layer ID
+ * @retval      Scaling type ID
+ *****************************************************************************/
+static vdc5_scaling_type_t ConvertRwProcId2SclId (const vdc5_layer_id_t layer_id)
+{
+    vdc5_scaling_type_t scaling_id;
+
+    switch (layer_id) {
+        case VDC5_LAYER_ID_0_WR:                /* Layer 0, write process */
+            scaling_id = VDC5_SC_TYPE_SC0;      /* Scaler 0 */
+            break;
+        case VDC5_LAYER_ID_1_WR:                /* Layer 1, write process */
+            scaling_id = VDC5_SC_TYPE_SC1;      /* Scaler 1 */
+            break;
+        case VDC5_LAYER_ID_OIR_WR:              /* Layer OIR, write process */
+            scaling_id = VDC5_SC_TYPE_OIR;      /* OIR */
+            break;
+        default:                                /* Error */
+            scaling_id = VDC5_SC_TYPE_NUM;
+            break;
+    }
+    return scaling_id;
+}   /* End of function ConvertRwProcId2SclId() */
+
+/**************************************************************************//**
+ * @brief       Convert read/write process ID into graphics type ID
+ *
+ * @param[in]   layer_id              : Layer ID
+ * @retval      Graphics type ID
+ *****************************************************************************/
+static vdc5_graphics_type_t ConvertRwProcId2GrId (const vdc5_layer_id_t layer_id)
+{
+    vdc5_graphics_type_t graphics_id;
+
+    switch (layer_id) {
+        case VDC5_LAYER_ID_0_RD:                /* Layer 0, read process */
+            graphics_id = VDC5_GR_TYPE_GR0;     /* Graphics 0 */
+            break;
+        case VDC5_LAYER_ID_1_RD:                /* Layer 1, read process */
+            graphics_id = VDC5_GR_TYPE_GR1;     /* Graphics 1 */
+            break;
+        case VDC5_LAYER_ID_2_RD:                /* Layer 2, read process */
+            graphics_id = VDC5_GR_TYPE_GR2;     /* Graphics 2 */
+            break;
+        case VDC5_LAYER_ID_3_RD:                /* Layer 3, read process */
+            graphics_id = VDC5_GR_TYPE_GR3;     /* Graphics 3 */
+            break;
+        case VDC5_LAYER_ID_VIN_RD:              /* Layer VIN, read process */
+            graphics_id = VDC5_GR_TYPE_VIN;     /* VIN */
+            break;
+        case VDC5_LAYER_ID_OIR_RD:              /* Layer OIR, read process */
+            graphics_id = VDC5_GR_TYPE_OIR;     /* OIR */
+            break;
+        default:                                /* Error */
+            graphics_id = VDC5_GR_TYPE_NUM;
+            break;
+    }
+    return graphics_id;
+}   /* End of function ConvertRwProcId2GrId() */
+