root/drivers/media/platform/omap3isp/ispresizer.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * ispresizer.h
   4  *
   5  * TI OMAP3 ISP - Resizer 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_RESIZER_H
  15 #define OMAP3_ISP_RESIZER_H
  16 
  17 #include <linux/spinlock.h>
  18 #include <linux/types.h>
  19 
  20 /*
  21  * Constants for filter coefficients count
  22  */
  23 #define COEFF_CNT               32
  24 
  25 /*
  26  * struct isprsz_coef - Structure for resizer filter coefficients.
  27  * @h_filter_coef_4tap: Horizontal filter coefficients for 8-phase/4-tap
  28  *                      mode (.5x-4x)
  29  * @v_filter_coef_4tap: Vertical filter coefficients for 8-phase/4-tap
  30  *                      mode (.5x-4x)
  31  * @h_filter_coef_7tap: Horizontal filter coefficients for 4-phase/7-tap
  32  *                      mode (.25x-.5x)
  33  * @v_filter_coef_7tap: Vertical filter coefficients for 4-phase/7-tap
  34  *                      mode (.25x-.5x)
  35  */
  36 struct isprsz_coef {
  37         u16 h_filter_coef_4tap[32];
  38         u16 v_filter_coef_4tap[32];
  39         /* Every 8th value is a dummy value in the following arrays: */
  40         u16 h_filter_coef_7tap[32];
  41         u16 v_filter_coef_7tap[32];
  42 };
  43 
  44 /* Chrominance horizontal algorithm */
  45 enum resizer_chroma_algo {
  46         RSZ_THE_SAME = 0,       /* Chrominance the same as Luminance */
  47         RSZ_BILINEAR = 1,       /* Chrominance uses bilinear interpolation */
  48 };
  49 
  50 /* Resizer input type select */
  51 enum resizer_colors_type {
  52         RSZ_YUV422 = 0,         /* YUV422 color is interleaved */
  53         RSZ_COLOR8 = 1,         /* Color separate data on 8 bits */
  54 };
  55 
  56 /*
  57  * Structure for horizontal and vertical resizing value
  58  */
  59 struct resizer_ratio {
  60         u32 horz;
  61         u32 vert;
  62 };
  63 
  64 /*
  65  * Structure for luminance enhancer parameters.
  66  */
  67 struct resizer_luma_yenh {
  68         u8 algo;                /* algorithm select. */
  69         u8 gain;                /* maximum gain. */
  70         u8 slope;               /* slope. */
  71         u8 core;                /* core offset. */
  72 };
  73 
  74 enum resizer_input_entity {
  75         RESIZER_INPUT_NONE,
  76         RESIZER_INPUT_VP,       /* input video port - prev or ccdc */
  77         RESIZER_INPUT_MEMORY,
  78 };
  79 
  80 /* Sink and source resizer pads */
  81 #define RESZ_PAD_SINK                   0
  82 #define RESZ_PAD_SOURCE                 1
  83 #define RESZ_PADS_NUM                   2
  84 
  85 /*
  86  * struct isp_res_device - OMAP3 ISP resizer module
  87  * @lock: Protects formats and crop rectangles between set_selection and IRQ
  88  * @crop.request: Crop rectangle requested by the user
  89  * @crop.active: Active crop rectangle (based on hardware requirements)
  90  */
  91 struct isp_res_device {
  92         struct v4l2_subdev subdev;
  93         struct media_pad pads[RESZ_PADS_NUM];
  94         struct v4l2_mbus_framefmt formats[RESZ_PADS_NUM];
  95 
  96         enum resizer_input_entity input;
  97         struct isp_video video_in;
  98         struct isp_video video_out;
  99 
 100         u32 addr_base;   /* stored source buffer address in memory mode */
 101         u32 crop_offset; /* additional offset for crop in memory mode */
 102         struct resizer_ratio ratio;
 103         int pm_state;
 104         unsigned int applycrop:1;
 105         enum isp_pipeline_stream_state state;
 106         wait_queue_head_t wait;
 107         atomic_t stopping;
 108         spinlock_t lock;
 109 
 110         struct {
 111                 struct v4l2_rect request;
 112                 struct v4l2_rect active;
 113         } crop;
 114 };
 115 
 116 struct isp_device;
 117 
 118 int omap3isp_resizer_init(struct isp_device *isp);
 119 void omap3isp_resizer_cleanup(struct isp_device *isp);
 120 
 121 int omap3isp_resizer_register_entities(struct isp_res_device *res,
 122                                        struct v4l2_device *vdev);
 123 void omap3isp_resizer_unregister_entities(struct isp_res_device *res);
 124 void omap3isp_resizer_isr_frame_sync(struct isp_res_device *res);
 125 void omap3isp_resizer_isr(struct isp_res_device *isp_res);
 126 
 127 void omap3isp_resizer_max_rate(struct isp_res_device *res,
 128                                unsigned int *max_rate);
 129 
 130 void omap3isp_resizer_suspend(struct isp_res_device *isp_res);
 131 
 132 void omap3isp_resizer_resume(struct isp_res_device *isp_res);
 133 
 134 int omap3isp_resizer_busy(struct isp_res_device *isp_res);
 135 
 136 #endif  /* OMAP3_ISP_RESIZER_H */

/* [<][>][^][v][top][bottom][index][help] */