linux/drivers/media/video/s5p-g2d/g2d.h
<<
>>
Prefs
   1/*
   2 * Samsung S5P G2D - 2D Graphics Accelerator Driver
   3 *
   4 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
   5 * Kamil Debski, <k.debski@samsung.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by the
   9 * Free Software Foundation; either version 2 of the
  10 * License, or (at your option) any later version
  11 */
  12
  13#include <media/v4l2-device.h>
  14#include <media/v4l2-ctrls.h>
  15
  16#define G2D_NAME "s5p-g2d"
  17
  18struct g2d_dev {
  19        struct v4l2_device      v4l2_dev;
  20        struct v4l2_m2m_dev     *m2m_dev;
  21        struct video_device     *vfd;
  22        struct mutex            mutex;
  23        spinlock_t              ctrl_lock;
  24        atomic_t                num_inst;
  25        struct vb2_alloc_ctx    *alloc_ctx;
  26        void __iomem            *regs;
  27        struct clk              *clk;
  28        struct clk              *gate;
  29        struct g2d_ctx          *curr;
  30        int irq;
  31        wait_queue_head_t       irq_queue;
  32};
  33
  34struct g2d_frame {
  35        /* Original dimensions */
  36        u32     width;
  37        u32     height;
  38        /* Crop size */
  39        u32     c_width;
  40        u32     c_height;
  41        /* Offset */
  42        u32     o_width;
  43        u32     o_height;
  44        /* Image format */
  45        struct g2d_fmt *fmt;
  46        /* Variables that can calculated once and reused */
  47        u32     stride;
  48        u32     bottom;
  49        u32     right;
  50        u32     size;
  51};
  52
  53struct g2d_ctx {
  54        struct v4l2_fh fh;
  55        struct g2d_dev          *dev;
  56        struct v4l2_m2m_ctx     *m2m_ctx;
  57        struct g2d_frame        in;
  58        struct g2d_frame        out;
  59        struct v4l2_ctrl        *ctrl_hflip;
  60        struct v4l2_ctrl        *ctrl_vflip;
  61        struct v4l2_ctrl_handler ctrl_handler;
  62        u32 rop;
  63        u32 flip;
  64};
  65
  66struct g2d_fmt {
  67        char    *name;
  68        u32     fourcc;
  69        int     depth;
  70        u32     hw;
  71};
  72
  73
  74void g2d_reset(struct g2d_dev *d);
  75void g2d_set_src_size(struct g2d_dev *d, struct g2d_frame *f);
  76void g2d_set_src_addr(struct g2d_dev *d, dma_addr_t a);
  77void g2d_set_dst_size(struct g2d_dev *d, struct g2d_frame *f);
  78void g2d_set_dst_addr(struct g2d_dev *d, dma_addr_t a);
  79void g2d_start(struct g2d_dev *d);
  80void g2d_clear_int(struct g2d_dev *d);
  81void g2d_set_rop4(struct g2d_dev *d, u32 r);
  82void g2d_set_flip(struct g2d_dev *d, u32 r);
  83u32 g2d_cmd_stretch(u32 e);
  84void g2d_set_cmd(struct g2d_dev *d, u32 c);
  85
  86
  87