1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * isppreview.h 4 * 5 * TI OMAP3 ISP - Preview module 6 * 7 * Copyright (C) 2010 Nokia Corporation 8 * Copyright (C) 2009 Texas Instruments, Inc. 9 * 10 * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 11 * Sakari Ailus <sakari.ailus@iki.fi> 12 */ 13 14 #ifndef OMAP3_ISP_PREVIEW_H 15 #define OMAP3_ISP_PREVIEW_H 16 17 #include <linux/omap3isp.h> 18 #include <linux/types.h> 19 #include <media/v4l2-ctrls.h> 20 21 #include "ispvideo.h" 22 23 #define ISPPRV_BRIGHT_STEP 0x1 24 #define ISPPRV_BRIGHT_DEF 0x0 25 #define ISPPRV_BRIGHT_LOW 0x0 26 #define ISPPRV_BRIGHT_HIGH 0xFF 27 #define ISPPRV_BRIGHT_UNITS 0x1 28 29 #define ISPPRV_CONTRAST_STEP 0x1 30 #define ISPPRV_CONTRAST_DEF 0x10 31 #define ISPPRV_CONTRAST_LOW 0x0 32 #define ISPPRV_CONTRAST_HIGH 0xFF 33 #define ISPPRV_CONTRAST_UNITS 0x1 34 35 /* Additional features not listed in linux/omap3isp.h */ 36 #define OMAP3ISP_PREV_CONTRAST (1 << 17) 37 #define OMAP3ISP_PREV_BRIGHTNESS (1 << 18) 38 #define OMAP3ISP_PREV_FEATURES_END (1 << 19) 39 40 enum preview_input_entity { 41 PREVIEW_INPUT_NONE, 42 PREVIEW_INPUT_CCDC, 43 PREVIEW_INPUT_MEMORY, 44 }; 45 46 #define PREVIEW_OUTPUT_RESIZER (1 << 1) 47 #define PREVIEW_OUTPUT_MEMORY (1 << 2) 48 49 /* Configure byte layout of YUV image */ 50 enum preview_ycpos_mode { 51 YCPOS_YCrYCb = 0, 52 YCPOS_YCbYCr = 1, 53 YCPOS_CbYCrY = 2, 54 YCPOS_CrYCbY = 3 55 }; 56 57 /* 58 * struct prev_params - Structure for all configuration 59 * @busy: Bitmask of busy parameters (being updated or used) 60 * @update: Bitmask of the parameters to be updated 61 * @features: Set of features enabled. 62 * @cfa: CFA coefficients. 63 * @csup: Chroma suppression coefficients. 64 * @luma: Luma enhancement coefficients. 65 * @nf: Noise filter coefficients. 66 * @dcor: Noise filter coefficients. 67 * @gamma: Gamma coefficients. 68 * @wbal: White Balance parameters. 69 * @blkadj: Black adjustment parameters. 70 * @rgb2rgb: RGB blending parameters. 71 * @csc: Color space conversion (RGB to YCbCr) parameters. 72 * @hmed: Horizontal median filter. 73 * @yclimit: YC limits parameters. 74 * @contrast: Contrast. 75 * @brightness: Brightness. 76 */ 77 struct prev_params { 78 u32 busy; 79 u32 update; 80 u32 features; 81 struct omap3isp_prev_cfa cfa; 82 struct omap3isp_prev_csup csup; 83 struct omap3isp_prev_luma luma; 84 struct omap3isp_prev_nf nf; 85 struct omap3isp_prev_dcor dcor; 86 struct omap3isp_prev_gtables gamma; 87 struct omap3isp_prev_wbal wbal; 88 struct omap3isp_prev_blkadj blkadj; 89 struct omap3isp_prev_rgbtorgb rgb2rgb; 90 struct omap3isp_prev_csc csc; 91 struct omap3isp_prev_hmed hmed; 92 struct omap3isp_prev_yclimit yclimit; 93 u8 contrast; 94 u8 brightness; 95 }; 96 97 /* Sink and source previewer pads */ 98 #define PREV_PAD_SINK 0 99 #define PREV_PAD_SOURCE 1 100 #define PREV_PADS_NUM 2 101 102 /* 103 * struct isp_prev_device - Structure for storing ISP Preview module information 104 * @subdev: V4L2 subdevice 105 * @pads: Media entity pads 106 * @formats: Active formats at the subdev pad 107 * @crop: Active crop rectangle 108 * @input: Module currently connected to the input pad 109 * @output: Bitmask of the active output 110 * @video_in: Input video entity 111 * @video_out: Output video entity 112 * @params.params : Active and shadow parameters sets 113 * @params.active: Bitmask of parameters active in set 0 114 * @params.lock: Parameters lock, protects params.active and params.shadow 115 * @underrun: Whether the preview entity has queued buffers on the output 116 * @state: Current preview pipeline state 117 * 118 * This structure is used to store the OMAP ISP Preview module Information. 119 */ 120 struct isp_prev_device { 121 struct v4l2_subdev subdev; 122 struct media_pad pads[PREV_PADS_NUM]; 123 struct v4l2_mbus_framefmt formats[PREV_PADS_NUM]; 124 struct v4l2_rect crop; 125 126 struct v4l2_ctrl_handler ctrls; 127 128 enum preview_input_entity input; 129 unsigned int output; 130 struct isp_video video_in; 131 struct isp_video video_out; 132 133 struct { 134 unsigned int cfa_order; 135 struct prev_params params[2]; 136 u32 active; 137 spinlock_t lock; 138 } params; 139 140 enum isp_pipeline_stream_state state; 141 wait_queue_head_t wait; 142 atomic_t stopping; 143 }; 144 145 struct isp_device; 146 147 int omap3isp_preview_init(struct isp_device *isp); 148 void omap3isp_preview_cleanup(struct isp_device *isp); 149 150 int omap3isp_preview_register_entities(struct isp_prev_device *prv, 151 struct v4l2_device *vdev); 152 void omap3isp_preview_unregister_entities(struct isp_prev_device *prv); 153 154 void omap3isp_preview_isr_frame_sync(struct isp_prev_device *prev); 155 void omap3isp_preview_isr(struct isp_prev_device *prev); 156 157 int omap3isp_preview_busy(struct isp_prev_device *isp_prev); 158 159 void omap3isp_preview_restore_context(struct isp_device *isp); 160 161 #endif /* OMAP3_ISP_PREVIEW_H */ 162