/* SPDX-License-Identifier: GPL-2.0-only */ 
 | 
/* 
 | 
 * ispccp2.h 
 | 
 * 
 | 
 * TI OMAP3 ISP - CCP2 module 
 | 
 * 
 | 
 * Copyright (C) 2010 Nokia Corporation 
 | 
 * Copyright (C) 2010 Texas Instruments, Inc. 
 | 
 * 
 | 
 * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 
 | 
 *         Sakari Ailus <sakari.ailus@iki.fi> 
 | 
 */ 
 | 
  
 | 
#ifndef OMAP3_ISP_CCP2_H 
 | 
#define OMAP3_ISP_CCP2_H 
 | 
  
 | 
#include <linux/videodev2.h> 
 | 
  
 | 
struct isp_device; 
 | 
struct isp_csiphy; 
 | 
  
 | 
/* Sink and source ccp2 pads */ 
 | 
#define CCP2_PAD_SINK            0 
 | 
#define CCP2_PAD_SOURCE            1 
 | 
#define CCP2_PADS_NUM            2 
 | 
  
 | 
/* CCP2 input media entity */ 
 | 
enum ccp2_input_entity { 
 | 
    CCP2_INPUT_NONE, 
 | 
    CCP2_INPUT_SENSOR, 
 | 
    CCP2_INPUT_MEMORY, 
 | 
}; 
 | 
  
 | 
/* CCP2 output media entity */ 
 | 
enum ccp2_output_entity { 
 | 
    CCP2_OUTPUT_NONE, 
 | 
    CCP2_OUTPUT_CCDC, 
 | 
    CCP2_OUTPUT_MEMORY, 
 | 
}; 
 | 
  
 | 
  
 | 
/* Logical channel configuration */ 
 | 
struct isp_interface_lcx_config { 
 | 
    int crc; 
 | 
    u32 data_start; 
 | 
    u32 data_size; 
 | 
    u32 format; 
 | 
}; 
 | 
  
 | 
/* Memory channel configuration */ 
 | 
struct isp_interface_mem_config { 
 | 
    u32 dst_port; 
 | 
    u32 vsize_count; 
 | 
    u32 hsize_count; 
 | 
    u32 src_ofst; 
 | 
    u32 dst_ofst; 
 | 
}; 
 | 
  
 | 
/* CCP2 device */ 
 | 
struct isp_ccp2_device { 
 | 
    struct v4l2_subdev subdev; 
 | 
    struct v4l2_mbus_framefmt formats[CCP2_PADS_NUM]; 
 | 
    struct media_pad pads[CCP2_PADS_NUM]; 
 | 
  
 | 
    enum ccp2_input_entity input; 
 | 
    enum ccp2_output_entity output; 
 | 
    struct isp_interface_lcx_config if_cfg; 
 | 
    struct isp_interface_mem_config mem_cfg; 
 | 
    struct isp_video video_in; 
 | 
    struct isp_csiphy *phy; 
 | 
    struct regulator *vdds_csib; 
 | 
    enum isp_pipeline_stream_state state; 
 | 
    wait_queue_head_t wait; 
 | 
    atomic_t stopping; 
 | 
}; 
 | 
  
 | 
/* Function declarations */ 
 | 
int omap3isp_ccp2_init(struct isp_device *isp); 
 | 
void omap3isp_ccp2_cleanup(struct isp_device *isp); 
 | 
int omap3isp_ccp2_register_entities(struct isp_ccp2_device *ccp2, 
 | 
            struct v4l2_device *vdev); 
 | 
void omap3isp_ccp2_unregister_entities(struct isp_ccp2_device *ccp2); 
 | 
void omap3isp_ccp2_isr(struct isp_ccp2_device *ccp2); 
 | 
  
 | 
#endif    /* OMAP3_ISP_CCP2_H */ 
 |