linux/drivers/media/platform/omap3isp/ispresizer.h
<<
>>
Prefs
   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 */
  36struct 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 */
  45enum 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 */
  51enum 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 */
  59struct resizer_ratio {
  60        u32 horz;
  61        u32 vert;
  62};
  63
  64/*
  65 * Structure for luminance enhancer parameters.
  66 */
  67struct resizer_luma_yenh {
  68        u8 algo;                /* algorithm select. */
  69        u8 gain;                /* maximum gain. */
  70        u8 slope;               /* slope. */
  71        u8 core;                /* core offset. */
  72};
  73
  74enum 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 */
  91struct 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
 116struct isp_device;
 117
 118int omap3isp_resizer_init(struct isp_device *isp);
 119void omap3isp_resizer_cleanup(struct isp_device *isp);
 120
 121int omap3isp_resizer_register_entities(struct isp_res_device *res,
 122                                       struct v4l2_device *vdev);
 123void omap3isp_resizer_unregister_entities(struct isp_res_device *res);
 124void omap3isp_resizer_isr_frame_sync(struct isp_res_device *res);
 125void omap3isp_resizer_isr(struct isp_res_device *isp_res);
 126
 127void omap3isp_resizer_max_rate(struct isp_res_device *res,
 128                               unsigned int *max_rate);
 129
 130void omap3isp_resizer_suspend(struct isp_res_device *isp_res);
 131
 132void omap3isp_resizer_resume(struct isp_res_device *isp_res);
 133
 134int omap3isp_resizer_busy(struct isp_res_device *isp_res);
 135
 136#endif  /* OMAP3_ISP_RESIZER_H */
 137