isppreview.h revision 1f69fd970dfdd9872c83f62864b2557d686948cb
1/* 2 * isppreview.h 3 * 4 * TI OMAP3 ISP - Preview module 5 * 6 * Copyright (C) 2010 Nokia Corporation 7 * Copyright (C) 2009 Texas Instruments, Inc. 8 * 9 * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 10 * Sakari Ailus <sakari.ailus@iki.fi> 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License version 2 as 14 * published by the Free Software Foundation. 15 * 16 * This program is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 24 * 02110-1301 USA 25 */ 26 27#ifndef OMAP3_ISP_PREVIEW_H 28#define OMAP3_ISP_PREVIEW_H 29 30#include <linux/omap3isp.h> 31#include <linux/types.h> 32#include <media/v4l2-ctrls.h> 33 34#include "ispvideo.h" 35 36#define ISPPRV_BRIGHT_STEP 0x1 37#define ISPPRV_BRIGHT_DEF 0x0 38#define ISPPRV_BRIGHT_LOW 0x0 39#define ISPPRV_BRIGHT_HIGH 0xFF 40#define ISPPRV_BRIGHT_UNITS 0x1 41 42#define ISPPRV_CONTRAST_STEP 0x1 43#define ISPPRV_CONTRAST_DEF 0x10 44#define ISPPRV_CONTRAST_LOW 0x0 45#define ISPPRV_CONTRAST_HIGH 0xFF 46#define ISPPRV_CONTRAST_UNITS 0x1 47 48/* Features list */ 49#define PREV_LUMA_ENHANCE OMAP3ISP_PREV_LUMAENH 50#define PREV_INVERSE_ALAW OMAP3ISP_PREV_INVALAW 51#define PREV_HORZ_MEDIAN_FILTER OMAP3ISP_PREV_HRZ_MED 52#define PREV_CFA OMAP3ISP_PREV_CFA 53#define PREV_CHROMA_SUPPRESS OMAP3ISP_PREV_CHROMA_SUPP 54#define PREV_WB OMAP3ISP_PREV_WB 55#define PREV_BLKADJ OMAP3ISP_PREV_BLKADJ 56#define PREV_RGB2RGB OMAP3ISP_PREV_RGB2RGB 57#define PREV_COLOR_CONV OMAP3ISP_PREV_COLOR_CONV 58#define PREV_YCLIMITS OMAP3ISP_PREV_YC_LIMIT 59#define PREV_DEFECT_COR OMAP3ISP_PREV_DEFECT_COR 60#define PREV_GAMMA_BYPASS OMAP3ISP_PREV_GAMMABYPASS 61#define PREV_DARK_FRAME_CAPTURE OMAP3ISP_PREV_DRK_FRM_CAPTURE 62#define PREV_DARK_FRAME_SUBTRACT OMAP3ISP_PREV_DRK_FRM_SUBTRACT 63#define PREV_LENS_SHADING OMAP3ISP_PREV_LENS_SHADING 64#define PREV_NOISE_FILTER OMAP3ISP_PREV_NF 65#define PREV_GAMMA OMAP3ISP_PREV_GAMMA 66 67#define PREV_CONTRAST (1 << 17) 68#define PREV_BRIGHTNESS (1 << 18) 69#define PREV_AVERAGER (1 << 19) 70#define PREV_FEATURES_END (1 << 20) 71 72enum preview_input_entity { 73 PREVIEW_INPUT_NONE, 74 PREVIEW_INPUT_CCDC, 75 PREVIEW_INPUT_MEMORY, 76}; 77 78#define PREVIEW_OUTPUT_RESIZER (1 << 1) 79#define PREVIEW_OUTPUT_MEMORY (1 << 2) 80 81/* Configure byte layout of YUV image */ 82enum preview_ycpos_mode { 83 YCPOS_YCrYCb = 0, 84 YCPOS_YCbYCr = 1, 85 YCPOS_CbYCrY = 2, 86 YCPOS_CrYCbY = 3 87}; 88 89/* 90 * struct prev_params - Structure for all configuration 91 * @features: Set of features enabled. 92 * @cfa: CFA coefficients. 93 * @csup: Chroma suppression coefficients. 94 * @luma: Luma enhancement coefficients. 95 * @nf: Noise filter coefficients. 96 * @dcor: Noise filter coefficients. 97 * @gamma: Gamma coefficients. 98 * @wbal: White Balance parameters. 99 * @blk_adj: Black adjustment parameters. 100 * @rgb2rgb: RGB blending parameters. 101 * @rgb2ycbcr: RGB to ycbcr parameters. 102 * @hmed: Horizontal median filter. 103 * @yclimit: YC limits parameters. 104 * @contrast: Contrast. 105 * @brightness: Brightness. 106 */ 107struct prev_params { 108 u32 features; 109 struct omap3isp_prev_cfa cfa; 110 struct omap3isp_prev_csup csup; 111 struct omap3isp_prev_luma luma; 112 struct omap3isp_prev_nf nf; 113 struct omap3isp_prev_dcor dcor; 114 struct omap3isp_prev_gtables gamma; 115 struct omap3isp_prev_wbal wbal; 116 struct omap3isp_prev_blkadj blk_adj; 117 struct omap3isp_prev_rgbtorgb rgb2rgb; 118 struct omap3isp_prev_csc rgb2ycbcr; 119 struct omap3isp_prev_hmed hmed; 120 struct omap3isp_prev_yclimit yclimit; 121 u8 contrast; 122 u8 brightness; 123}; 124 125/* 126 * struct isptables_update - Structure for Table Configuration. 127 * @update: Specifies which tables should be updated. 128 * @flag: Specifies which tables should be enabled. 129 * @nf: Pointer to structure for Noise Filter 130 * @lsc: Pointer to LSC gain table. (currently not used) 131 * @gamma: Pointer to gamma correction tables. 132 * @cfa: Pointer to color filter array configuration. 133 * @wbal: Pointer to colour and digital gain configuration. 134 */ 135struct isptables_update { 136 u32 update; 137 u32 flag; 138 struct omap3isp_prev_nf *nf; 139 u32 *lsc; 140 struct omap3isp_prev_gtables *gamma; 141 struct omap3isp_prev_cfa *cfa; 142 struct omap3isp_prev_wbal *wbal; 143}; 144 145/* Sink and source previewer pads */ 146#define PREV_PAD_SINK 0 147#define PREV_PAD_SOURCE 1 148#define PREV_PADS_NUM 2 149 150/* 151 * struct isp_prev_device - Structure for storing ISP Preview module information 152 * @subdev: V4L2 subdevice 153 * @pads: Media entity pads 154 * @formats: Active formats at the subdev pad 155 * @crop: Active crop rectangle 156 * @input: Module currently connected to the input pad 157 * @output: Bitmask of the active output 158 * @video_in: Input video entity 159 * @video_out: Output video entity 160 * @error: A hardware error occurred during capture 161 * @params: Module configuration data 162 * @shadow_update: If set, update the hardware configured in the next interrupt 163 * @underrun: Whether the preview entity has queued buffers on the output 164 * @state: Current preview pipeline state 165 * @lock: Shadow update lock 166 * @update: Bitmask of the parameters to be updated 167 * 168 * This structure is used to store the OMAP ISP Preview module Information. 169 */ 170struct isp_prev_device { 171 struct v4l2_subdev subdev; 172 struct media_pad pads[PREV_PADS_NUM]; 173 struct v4l2_mbus_framefmt formats[PREV_PADS_NUM]; 174 struct v4l2_rect crop; 175 176 struct v4l2_ctrl_handler ctrls; 177 178 enum preview_input_entity input; 179 unsigned int output; 180 struct isp_video video_in; 181 struct isp_video video_out; 182 unsigned int error; 183 184 struct prev_params params; 185 unsigned int shadow_update:1; 186 enum isp_pipeline_stream_state state; 187 wait_queue_head_t wait; 188 atomic_t stopping; 189 spinlock_t lock; 190 u32 update; 191}; 192 193struct isp_device; 194 195int omap3isp_preview_init(struct isp_device *isp); 196void omap3isp_preview_cleanup(struct isp_device *isp); 197 198int omap3isp_preview_register_entities(struct isp_prev_device *prv, 199 struct v4l2_device *vdev); 200void omap3isp_preview_unregister_entities(struct isp_prev_device *prv); 201 202void omap3isp_preview_isr_frame_sync(struct isp_prev_device *prev); 203void omap3isp_preview_isr(struct isp_prev_device *prev); 204 205int omap3isp_preview_busy(struct isp_prev_device *isp_prev); 206 207void omap3isp_preview_restore_context(struct isp_device *isp); 208 209#endif /* OMAP3_ISP_PREVIEW_H */ 210