162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * isppreview.h 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * TI OMAP3 ISP - Preview module 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (C) 2010 Nokia Corporation 862306a36Sopenharmony_ci * Copyright (C) 2009 Texas Instruments, Inc. 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 1162306a36Sopenharmony_ci * Sakari Ailus <sakari.ailus@iki.fi> 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifndef OMAP3_ISP_PREVIEW_H 1562306a36Sopenharmony_ci#define OMAP3_ISP_PREVIEW_H 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#include <linux/omap3isp.h> 1862306a36Sopenharmony_ci#include <linux/types.h> 1962306a36Sopenharmony_ci#include <media/v4l2-ctrls.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#include "ispvideo.h" 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define ISPPRV_BRIGHT_STEP 0x1 2462306a36Sopenharmony_ci#define ISPPRV_BRIGHT_DEF 0x0 2562306a36Sopenharmony_ci#define ISPPRV_BRIGHT_LOW 0x0 2662306a36Sopenharmony_ci#define ISPPRV_BRIGHT_HIGH 0xFF 2762306a36Sopenharmony_ci#define ISPPRV_BRIGHT_UNITS 0x1 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define ISPPRV_CONTRAST_STEP 0x1 3062306a36Sopenharmony_ci#define ISPPRV_CONTRAST_DEF 0x10 3162306a36Sopenharmony_ci#define ISPPRV_CONTRAST_LOW 0x0 3262306a36Sopenharmony_ci#define ISPPRV_CONTRAST_HIGH 0xFF 3362306a36Sopenharmony_ci#define ISPPRV_CONTRAST_UNITS 0x1 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* Additional features not listed in linux/omap3isp.h */ 3662306a36Sopenharmony_ci#define OMAP3ISP_PREV_CONTRAST (1 << 17) 3762306a36Sopenharmony_ci#define OMAP3ISP_PREV_BRIGHTNESS (1 << 18) 3862306a36Sopenharmony_ci#define OMAP3ISP_PREV_FEATURES_END (1 << 19) 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cienum preview_input_entity { 4162306a36Sopenharmony_ci PREVIEW_INPUT_NONE, 4262306a36Sopenharmony_ci PREVIEW_INPUT_CCDC, 4362306a36Sopenharmony_ci PREVIEW_INPUT_MEMORY, 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#define PREVIEW_OUTPUT_RESIZER (1 << 1) 4762306a36Sopenharmony_ci#define PREVIEW_OUTPUT_MEMORY (1 << 2) 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* Configure byte layout of YUV image */ 5062306a36Sopenharmony_cienum preview_ycpos_mode { 5162306a36Sopenharmony_ci YCPOS_YCrYCb = 0, 5262306a36Sopenharmony_ci YCPOS_YCbYCr = 1, 5362306a36Sopenharmony_ci YCPOS_CbYCrY = 2, 5462306a36Sopenharmony_ci YCPOS_CrYCbY = 3 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* 5862306a36Sopenharmony_ci * struct prev_params - Structure for all configuration 5962306a36Sopenharmony_ci * @busy: Bitmask of busy parameters (being updated or used) 6062306a36Sopenharmony_ci * @update: Bitmask of the parameters to be updated 6162306a36Sopenharmony_ci * @features: Set of features enabled. 6262306a36Sopenharmony_ci * @cfa: CFA coefficients. 6362306a36Sopenharmony_ci * @csup: Chroma suppression coefficients. 6462306a36Sopenharmony_ci * @luma: Luma enhancement coefficients. 6562306a36Sopenharmony_ci * @nf: Noise filter coefficients. 6662306a36Sopenharmony_ci * @dcor: Noise filter coefficients. 6762306a36Sopenharmony_ci * @gamma: Gamma coefficients. 6862306a36Sopenharmony_ci * @wbal: White Balance parameters. 6962306a36Sopenharmony_ci * @blkadj: Black adjustment parameters. 7062306a36Sopenharmony_ci * @rgb2rgb: RGB blending parameters. 7162306a36Sopenharmony_ci * @csc: Color space conversion (RGB to YCbCr) parameters. 7262306a36Sopenharmony_ci * @hmed: Horizontal median filter. 7362306a36Sopenharmony_ci * @yclimit: YC limits parameters. 7462306a36Sopenharmony_ci * @contrast: Contrast. 7562306a36Sopenharmony_ci * @brightness: Brightness. 7662306a36Sopenharmony_ci */ 7762306a36Sopenharmony_cistruct prev_params { 7862306a36Sopenharmony_ci u32 busy; 7962306a36Sopenharmony_ci u32 update; 8062306a36Sopenharmony_ci u32 features; 8162306a36Sopenharmony_ci struct omap3isp_prev_cfa cfa; 8262306a36Sopenharmony_ci struct omap3isp_prev_csup csup; 8362306a36Sopenharmony_ci struct omap3isp_prev_luma luma; 8462306a36Sopenharmony_ci struct omap3isp_prev_nf nf; 8562306a36Sopenharmony_ci struct omap3isp_prev_dcor dcor; 8662306a36Sopenharmony_ci struct omap3isp_prev_gtables gamma; 8762306a36Sopenharmony_ci struct omap3isp_prev_wbal wbal; 8862306a36Sopenharmony_ci struct omap3isp_prev_blkadj blkadj; 8962306a36Sopenharmony_ci struct omap3isp_prev_rgbtorgb rgb2rgb; 9062306a36Sopenharmony_ci struct omap3isp_prev_csc csc; 9162306a36Sopenharmony_ci struct omap3isp_prev_hmed hmed; 9262306a36Sopenharmony_ci struct omap3isp_prev_yclimit yclimit; 9362306a36Sopenharmony_ci u8 contrast; 9462306a36Sopenharmony_ci u8 brightness; 9562306a36Sopenharmony_ci}; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* Sink and source previewer pads */ 9862306a36Sopenharmony_ci#define PREV_PAD_SINK 0 9962306a36Sopenharmony_ci#define PREV_PAD_SOURCE 1 10062306a36Sopenharmony_ci#define PREV_PADS_NUM 2 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci/* 10362306a36Sopenharmony_ci * struct isp_prev_device - Structure for storing ISP Preview module information 10462306a36Sopenharmony_ci * @subdev: V4L2 subdevice 10562306a36Sopenharmony_ci * @pads: Media entity pads 10662306a36Sopenharmony_ci * @formats: Active formats at the subdev pad 10762306a36Sopenharmony_ci * @crop: Active crop rectangle 10862306a36Sopenharmony_ci * @input: Module currently connected to the input pad 10962306a36Sopenharmony_ci * @output: Bitmask of the active output 11062306a36Sopenharmony_ci * @video_in: Input video entity 11162306a36Sopenharmony_ci * @video_out: Output video entity 11262306a36Sopenharmony_ci * @params.params : Active and shadow parameters sets 11362306a36Sopenharmony_ci * @params.active: Bitmask of parameters active in set 0 11462306a36Sopenharmony_ci * @params.lock: Parameters lock, protects params.active and params.shadow 11562306a36Sopenharmony_ci * @underrun: Whether the preview entity has queued buffers on the output 11662306a36Sopenharmony_ci * @state: Current preview pipeline state 11762306a36Sopenharmony_ci * 11862306a36Sopenharmony_ci * This structure is used to store the OMAP ISP Preview module Information. 11962306a36Sopenharmony_ci */ 12062306a36Sopenharmony_cistruct isp_prev_device { 12162306a36Sopenharmony_ci struct v4l2_subdev subdev; 12262306a36Sopenharmony_ci struct media_pad pads[PREV_PADS_NUM]; 12362306a36Sopenharmony_ci struct v4l2_mbus_framefmt formats[PREV_PADS_NUM]; 12462306a36Sopenharmony_ci struct v4l2_rect crop; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci struct v4l2_ctrl_handler ctrls; 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci enum preview_input_entity input; 12962306a36Sopenharmony_ci unsigned int output; 13062306a36Sopenharmony_ci struct isp_video video_in; 13162306a36Sopenharmony_ci struct isp_video video_out; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci struct { 13462306a36Sopenharmony_ci unsigned int cfa_order; 13562306a36Sopenharmony_ci struct prev_params params[2]; 13662306a36Sopenharmony_ci u32 active; 13762306a36Sopenharmony_ci spinlock_t lock; 13862306a36Sopenharmony_ci } params; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci enum isp_pipeline_stream_state state; 14162306a36Sopenharmony_ci wait_queue_head_t wait; 14262306a36Sopenharmony_ci atomic_t stopping; 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_cistruct isp_device; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ciint omap3isp_preview_init(struct isp_device *isp); 14862306a36Sopenharmony_civoid omap3isp_preview_cleanup(struct isp_device *isp); 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ciint omap3isp_preview_register_entities(struct isp_prev_device *prv, 15162306a36Sopenharmony_ci struct v4l2_device *vdev); 15262306a36Sopenharmony_civoid omap3isp_preview_unregister_entities(struct isp_prev_device *prv); 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_civoid omap3isp_preview_isr_frame_sync(struct isp_prev_device *prev); 15562306a36Sopenharmony_civoid omap3isp_preview_isr(struct isp_prev_device *prev); 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ciint omap3isp_preview_busy(struct isp_prev_device *isp_prev); 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_civoid omap3isp_preview_restore_context(struct isp_device *isp); 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci#endif /* OMAP3_ISP_PREVIEW_H */ 162