linux/drivers/media/platform/s5p-g2d/g2d.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * Samsung S5P G2D - 2D Graphics Accelerator Driver
   4 *
   5 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
   6 * Kamil Debski, <k.debski@samsung.com>
   7 */
   8
   9#include <linux/platform_device.h>
  10#include <media/v4l2-device.h>
  11#include <media/v4l2-ctrls.h>
  12
  13#define G2D_NAME "s5p-g2d"
  14#define TYPE_G2D_3X 3
  15#define TYPE_G2D_4X 4
  16
  17struct g2d_dev {
  18        struct v4l2_device      v4l2_dev;
  19        struct v4l2_m2m_dev     *m2m_dev;
  20        struct video_device     *vfd;
  21        struct mutex            mutex;
  22        spinlock_t              ctrl_lock;
  23        atomic_t                num_inst;
  24        void __iomem            *regs;
  25        struct clk              *clk;
  26        struct clk              *gate;
  27        struct g2d_ctx          *curr;
  28        struct g2d_variant      *variant;
  29        int irq;
  30};
  31
  32struct g2d_frame {
  33        /* Original dimensions */
  34        u32     width;
  35        u32     height;
  36        /* Crop size */
  37        u32     c_width;
  38        u32     c_height;
  39        /* Offset */
  40        u32     o_width;
  41        u32     o_height;
  42        /* Image format */
  43        struct g2d_fmt *fmt;
  44        /* Variables that can calculated once and reused */
  45        u32     stride;
  46        u32     bottom;
  47        u32     right;
  48        u32     size;
  49};
  50
  51struct g2d_ctx {
  52        struct v4l2_fh fh;
  53        struct g2d_dev          *dev;
  54        struct g2d_frame        in;
  55        struct g2d_frame        out;
  56        struct v4l2_ctrl        *ctrl_hflip;
  57        struct v4l2_ctrl        *ctrl_vflip;
  58        struct v4l2_ctrl_handler ctrl_handler;
  59        u32 rop;
  60        u32 flip;
  61};
  62
  63struct g2d_fmt {
  64        u32     fourcc;
  65        int     depth;
  66        u32     hw;
  67};
  68
  69struct g2d_variant {
  70        unsigned short hw_rev;
  71};
  72
  73void g2d_reset(struct g2d_dev *d);
  74void g2d_set_src_size(struct g2d_dev *d, struct g2d_frame *f);
  75void g2d_set_src_addr(struct g2d_dev *d, dma_addr_t a);
  76void g2d_set_dst_size(struct g2d_dev *d, struct g2d_frame *f);
  77void g2d_set_dst_addr(struct g2d_dev *d, dma_addr_t a);
  78void g2d_start(struct g2d_dev *d);
  79void g2d_clear_int(struct g2d_dev *d);
  80void g2d_set_rop4(struct g2d_dev *d, u32 r);
  81void g2d_set_flip(struct g2d_dev *d, u32 r);
  82void g2d_set_v41_stretch(struct g2d_dev *d,
  83                        struct g2d_frame *src, struct g2d_frame *dst);
  84void g2d_set_cmd(struct g2d_dev *d, u32 c);
  85