diff --git a/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.mdd b/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.mdd index 955484f0..c824c6b0 100644 --- a/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.mdd +++ b/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.mdd @@ -11,6 +11,7 @@ BEGIN driver v_deinterlacer OPTION supported_peripherals = (v_deinterlacer_v5_0 ); OPTION driver_state = ACTIVE; + OPTION DEPENDS = (video_common_v1_1); OPTION copyfiles = all; OPTION name = v_deinterlacer; OPTION version = 5.0; diff --git a/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.tcl b/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.tcl index e7dc1e42..63544d79 100644 --- a/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.tcl +++ b/XilinxProcessorIPLib/drivers/v_deinterlacer/data/v_deinterlacer.tcl @@ -10,14 +10,18 @@ proc generate {drv_handle} { "NUM_INSTANCES" \ "DEVICE_ID" \ "C_S_AXI_AXILITES_BASEADDR" \ - "C_S_AXI_AXILITES_HIGHADDR" + "C_S_AXI_AXILITES_HIGHADDR" \ + "MAX_DATA_WIDTH" xdefine_config_file $drv_handle "xv_deinterlacer_g.c" "XV_deinterlacer" \ "DEVICE_ID" \ - "C_S_AXI_AXILITES_BASEADDR" + "C_S_AXI_AXILITES_BASEADDR" \ + "MAX_DATA_WIDTH" xdefine_canonical_xpars $drv_handle "xparameters.h" "XV_deinterlacer" \ "DEVICE_ID" \ "C_S_AXI_AXILITES_BASEADDR" \ - "C_S_AXI_AXILITES_HIGHADDR" + "C_S_AXI_AXILITES_HIGHADDR" \ + "MAX_DATA_WIDTH" } + diff --git a/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.c b/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.c index 281bba27..cf5fa96a 100644 --- a/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.c +++ b/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.c @@ -7,6 +7,7 @@ /***************************** Include Files *********************************/ #include "xv_deinterlacer.h" +#include "string.h" /************************** Function Implementation *************************/ #ifndef __linux__ @@ -14,6 +15,11 @@ int XV_deinterlacer_CfgInitialize(XV_deinterlacer *InstancePtr, XV_deinterlacer_ Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(ConfigPtr != NULL); + /* Setup the instance */ + (void)memset((void *)InstancePtr, 0, sizeof(XV_deinterlacer)); + (void)memcpy((void *)&(InstancePtr->Config), (const void *)ConfigPtr, + sizeof(XV_deinterlacer_Config)); + InstancePtr->Axilites_BaseAddress = ConfigPtr->Axilites_BaseAddress; InstancePtr->IsReady = XIL_COMPONENT_IS_READY; diff --git a/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.h b/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.h index 2cc8e8e2..3dfd7ee8 100644 --- a/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.h +++ b/XilinxProcessorIPLib/drivers/v_deinterlacer/src/xv_deinterlacer.h @@ -38,15 +38,25 @@ typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; #else +/** +* This typedef contains configuration information for the DEINT core. +* Each core instance should have a configuration structure +* associated. +*/ typedef struct { - u16 DeviceId; - u32 Axilites_BaseAddress; + u16 DeviceId; /**< Unique ID of device */ + u32 Axilites_BaseAddress; /**< The base address of the core instance. */ + int MaxDataWidth; /**< Maximum Data width of each channel */ } XV_deinterlacer_Config; #endif +/** +* Driver instance data. An instance must be allocated for each core in use. +*/ typedef struct { - u32 Axilites_BaseAddress; - u32 IsReady; + XV_deinterlacer_Config Config; /**< Hardware Configuration */ + u32 Axilites_BaseAddress; /**< The base address of the core instance. */ + u32 IsReady; /**< Device is initialized and ready */ } XV_deinterlacer; /***************** Macros (Inline Functions) Definitions *********************/