linux/drivers/media/platform/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 <linux/platform_device.h>
  14#include <media/v4l2-device.h>
  15#include <media/v4l2-ctrls.h>
  16
  17#define G2D_NAME "s5p-g2d"
  18#define TYPE_G2D_3X 3
  19#define TYPE_G2D_4X 4
  20
  21struct g2d_dev {
  22        struct v4l2_device      v4l2_dev;
  23        struct v4l2_m2m_dev     *m2m_dev;
  24        struct video_device     *vfd;
  25        struct mutex            mutex;
  26        spinlock_t              ctrl_lock;
  27        atomic_t                num_inst;
  28        struct vb2_alloc_ctx    *alloc_ctx;
  29        void __iomem            *regs;
  30        struct clk              *clk;
  31        struct clk              *gate;
  32        struct g2d_ctx          *curr;
  33        struct g2d_variant      *variant;
  34        int irq;
  35        wait_queue_head_t       irq_queue;
  36};
  37
  38struct g2d_frame {
  39        /* Original dimensions */
  40        u32     width;
  41        u32     height;
  42        /* Crop size */
  43        u32     c_width;
  44        u32     c_height;
  45        /* Offset */
  46        u32     o_width;
  47        u32     o_height;
  48        /* Image format */
  49        struct g2d_fmt *fmt;
  50        /* Variables that can calculated once and reused */
  51        u32     stride;
  52        u32     bottom;
  53        u32     right;
  54        u32     size;
  55};
  56
  57struct g2d_ctx {
  58        struct v4l2_fh fh;
  59        struct g2d_dev          *dev;
  60        struct g2d_frame        in;
  61        struct g2d_frame        out;
  62        struct v4l2_ctrl        *ctrl_hflip;
  63        struct v4l2_ctrl        *ctrl_vflip;
  64        struct v4l2_ctrl_handler ctrl_handler;
  65        u32 rop;
  66        u32 flip;
  67};
  68
  69struct g2d_fmt {
  70        char    *name;
  71        u32     fourcc;
  72        int     depth;
  73        u32     hw;
  74};
  75
  76struct g2d_variant {
  77        unsigned short hw_rev;
  78};
  79
  80void g2d_reset(struct g2d_dev *d);
  81void g2d_set_src_size(struct g2d_dev *d, struct g2d_frame *f);
  82void g2d_set_src_addr(struct g2d_dev *d, dma_addr_t a);
  83void g2d_set_dst_size(struct g2d_dev *d, struct g2d_frame *f);
  84void g2d_set_dst_addr(struct g2d_dev *d, dma_addr_t a);
  85void g2d_start(struct g2d_dev *d);
  86void g2d_clear_int(struct g2d_dev *d);
  87void g2d_set_rop4(struct g2d_dev *d, u32 r);
  88void g2d_set_flip(struct g2d_dev *d, u32 r);
  89void g2d_set_v41_stretch(struct g2d_dev *d,
  90                        struct g2d_frame *src, struct g2d_frame *dst);
  91void g2d_set_cmd(struct g2d_dev *d, u32 c);
  92
  93static inline struct g2d_variant *g2d_get_drv_data(struct platform_device *pdev)
  94{
  95        return (struct g2d_variant *)platform_get_device_id(pdev)->driver_data;
  96}
  97