Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ |
| 3 | * |
| 4 | * This program is free software; you can redistribute it and/or |
| 5 | * modify it under the terms of the GNU General Public License as |
| 6 | * published by the Free Software Foundation version 2. |
| 7 | * |
| 8 | * This program is distributed WITHOUT ANY WARRANTY of any |
| 9 | * kind, whether express or implied; without even the implied warranty |
| 10 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 | * GNU General Public License for more details. |
| 12 | */ |
| 13 | #ifndef VPBE_DISPLAY_H |
| 14 | #define VPBE_DISPLAY_H |
| 15 | |
| 16 | /* Header files */ |
| 17 | #include <linux/videodev2.h> |
| 18 | #include <media/v4l2-common.h> |
Lad, Prabhakar | 3d7543b9 | 2014-03-22 07:57:59 -0300 | [diff] [blame] | 19 | #include <media/v4l2-fh.h> |
Lad, Prabhakar | 13fc23d3 | 2012-10-22 09:27:13 -0300 | [diff] [blame] | 20 | #include <media/videobuf2-dma-contig.h> |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 21 | #include <media/davinci/vpbe_types.h> |
| 22 | #include <media/davinci/vpbe_osd.h> |
| 23 | #include <media/davinci/vpbe.h> |
| 24 | |
| 25 | #define VPBE_DISPLAY_MAX_DEVICES 2 |
| 26 | |
| 27 | enum vpbe_display_device_id { |
| 28 | VPBE_DISPLAY_DEVICE_0, |
| 29 | VPBE_DISPLAY_DEVICE_1 |
| 30 | }; |
| 31 | |
| 32 | #define VPBE_DISPLAY_DRV_NAME "vpbe-display" |
| 33 | |
| 34 | #define VPBE_DISPLAY_MAJOR_RELEASE 1 |
| 35 | #define VPBE_DISPLAY_MINOR_RELEASE 0 |
| 36 | #define VPBE_DISPLAY_BUILD 1 |
| 37 | #define VPBE_DISPLAY_VERSION_CODE ((VPBE_DISPLAY_MAJOR_RELEASE << 16) | \ |
| 38 | (VPBE_DISPLAY_MINOR_RELEASE << 8) | \ |
| 39 | VPBE_DISPLAY_BUILD) |
| 40 | |
| 41 | #define VPBE_DISPLAY_VALID_FIELD(field) ((V4L2_FIELD_NONE == field) || \ |
| 42 | (V4L2_FIELD_ANY == field) || (V4L2_FIELD_INTERLACED == field)) |
| 43 | |
| 44 | /* Exp ratio numerator and denominator constants */ |
| 45 | #define VPBE_DISPLAY_H_EXP_RATIO_N 9 |
| 46 | #define VPBE_DISPLAY_H_EXP_RATIO_D 8 |
| 47 | #define VPBE_DISPLAY_V_EXP_RATIO_N 6 |
| 48 | #define VPBE_DISPLAY_V_EXP_RATIO_D 5 |
| 49 | |
| 50 | /* Zoom multiplication factor */ |
| 51 | #define VPBE_DISPLAY_ZOOM_4X 4 |
| 52 | #define VPBE_DISPLAY_ZOOM_2X 2 |
| 53 | |
| 54 | /* Structures */ |
| 55 | struct display_layer_info { |
| 56 | int enable; |
| 57 | /* Layer ID used by Display Manager */ |
| 58 | enum osd_layer id; |
| 59 | struct osd_layer_config config; |
| 60 | enum osd_zoom_factor h_zoom; |
| 61 | enum osd_zoom_factor v_zoom; |
| 62 | enum osd_h_exp_ratio h_exp; |
| 63 | enum osd_v_exp_ratio v_exp; |
| 64 | }; |
| 65 | |
Lad, Prabhakar | 13fc23d3 | 2012-10-22 09:27:13 -0300 | [diff] [blame] | 66 | struct vpbe_disp_buffer { |
| 67 | struct vb2_buffer vb; |
| 68 | struct list_head list; |
| 69 | }; |
| 70 | |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 71 | /* vpbe display object structure */ |
| 72 | struct vpbe_layer { |
| 73 | /* number of buffers in fbuffers */ |
| 74 | unsigned int numbuffers; |
| 75 | /* Pointer to the vpbe_display */ |
| 76 | struct vpbe_display *disp_dev; |
| 77 | /* Pointer pointing to current v4l2_buffer */ |
Lad, Prabhakar | 13fc23d3 | 2012-10-22 09:27:13 -0300 | [diff] [blame] | 78 | struct vpbe_disp_buffer *cur_frm; |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 79 | /* Pointer pointing to next v4l2_buffer */ |
Lad, Prabhakar | 13fc23d3 | 2012-10-22 09:27:13 -0300 | [diff] [blame] | 80 | struct vpbe_disp_buffer *next_frm; |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 81 | /* videobuf specific parameters |
| 82 | * Buffer queue used in video-buf |
| 83 | */ |
Lad, Prabhakar | 13fc23d3 | 2012-10-22 09:27:13 -0300 | [diff] [blame] | 84 | struct vb2_queue buffer_queue; |
| 85 | /* allocator-specific contexts for each plane */ |
| 86 | struct vb2_alloc_ctx *alloc_ctx; |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 87 | /* Queue of filled frames */ |
| 88 | struct list_head dma_queue; |
| 89 | /* Used in video-buf */ |
| 90 | spinlock_t irqlock; |
| 91 | /* V4l2 specific parameters */ |
| 92 | /* Identifies video device for this layer */ |
| 93 | struct video_device video_dev; |
| 94 | /* This field keeps track of type of buffer exchange mechanism user |
| 95 | * has selected |
| 96 | */ |
| 97 | enum v4l2_memory memory; |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 98 | /* Used to store pixel format */ |
| 99 | struct v4l2_pix_format pix_fmt; |
| 100 | enum v4l2_field buf_field; |
| 101 | /* Video layer configuration params */ |
| 102 | struct display_layer_info layer_info; |
| 103 | /* vpbe specific parameters |
| 104 | * enable window for display |
| 105 | */ |
| 106 | unsigned char window_enable; |
| 107 | /* number of open instances of the layer */ |
| 108 | unsigned int usrs; |
| 109 | /* number of users performing IO */ |
| 110 | unsigned int io_usrs; |
| 111 | /* Indicates id of the field which is being displayed */ |
| 112 | unsigned int field_id; |
| 113 | /* Indicates whether streaming started */ |
| 114 | unsigned char started; |
| 115 | /* Identifies device object */ |
| 116 | enum vpbe_display_device_id device_id; |
| 117 | /* facilitation of ioctl ops lock by v4l2*/ |
| 118 | struct mutex opslock; |
| 119 | u8 layer_first_int; |
| 120 | }; |
| 121 | |
| 122 | /* vpbe device structure */ |
| 123 | struct vpbe_display { |
| 124 | /* layer specific parameters */ |
| 125 | /* lock for isr updates to buf layers*/ |
| 126 | spinlock_t dma_queue_lock; |
| 127 | /* C-Plane offset from start of y-plane */ |
| 128 | unsigned int cbcr_ofst; |
| 129 | struct vpbe_layer *dev[VPBE_DISPLAY_MAX_DEVICES]; |
| 130 | struct vpbe_device *vpbe_dev; |
| 131 | struct osd_state *osd_device; |
| 132 | }; |
| 133 | |
| 134 | /* File handle structure */ |
| 135 | struct vpbe_fh { |
Lad, Prabhakar | 3d7543b9 | 2014-03-22 07:57:59 -0300 | [diff] [blame] | 136 | struct v4l2_fh fh; |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 137 | /* vpbe device structure */ |
| 138 | struct vpbe_display *disp_dev; |
| 139 | /* pointer to layer object for opened device */ |
| 140 | struct vpbe_layer *layer; |
| 141 | /* Indicates whether this file handle is doing IO */ |
| 142 | unsigned char io_allowed; |
Manjunath Hadli | a2c25b4 | 2011-06-17 04:01:31 -0300 | [diff] [blame] | 143 | }; |
| 144 | |
| 145 | struct buf_config_params { |
| 146 | unsigned char min_numbuffers; |
| 147 | unsigned char numbuffers[VPBE_DISPLAY_MAX_DEVICES]; |
| 148 | unsigned int min_bufsize[VPBE_DISPLAY_MAX_DEVICES]; |
| 149 | unsigned int layer_bufsize[VPBE_DISPLAY_MAX_DEVICES]; |
| 150 | }; |
| 151 | |
| 152 | #endif /* VPBE_DISPLAY_H */ |