vpif_display.h 3.8 KB
Newer Older
1
/*
2
 * VPIF display header file
3 4 5 6 7 8 9 10 11 12 13 14 15
 *
 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation version 2.
 *
 * This program is distributed .as is. WITHOUT ANY WARRANTY of any
 * kind, whether express or implied; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

16 17
#ifndef VPIF_DISPLAY_H
#define VPIF_DISPLAY_H
18 19

/* Header files */
20
#include <media/videobuf2-dma-contig.h>
21
#include <media/v4l2-device.h>
22 23 24 25

#include "vpif.h"

/* Macros */
26
#define VPIF_DISPLAY_VERSION	"0.0.2"
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

#define VPIF_VALID_FIELD(field) \
	(((V4L2_FIELD_ANY == field) || (V4L2_FIELD_NONE == field)) || \
	(((V4L2_FIELD_INTERLACED == field) || (V4L2_FIELD_SEQ_TB == field)) || \
	(V4L2_FIELD_SEQ_BT == field)))

#define VPIF_DISPLAY_MAX_DEVICES	(2)
#define VPIF_SLICED_BUF_SIZE		(256)
#define VPIF_SLICED_MAX_SERVICES	(3)
#define VPIF_VIDEO_INDEX		(0)
#define VPIF_VBI_INDEX			(1)
#define VPIF_HBI_INDEX			(2)

/* Setting it to 1 as HBI/VBI support yet to be added , else 3*/
#define VPIF_NUMOBJECTS	(1)

/* Macros */
#define ISALIGNED(a)    (0 == ((a) & 7))

/* enumerated data types */
/* Enumerated data type to give id to each device per channel */
enum vpif_channel_id {
	VPIF_CHANNEL2_VIDEO = 0,	/* Channel2 Video */
	VPIF_CHANNEL3_VIDEO,		/* Channel3 Video */
};

/* structures */

struct video_obj {
	enum v4l2_field buf_field;
	u32 latest_only;		/* indicate whether to return
					 * most recent displayed frame only */
	v4l2_std_id stdid;		/* Currently selected or default
					 * standard */
61
	struct v4l2_dv_timings dv_timings;
62 63
};

64 65 66 67 68
struct vpif_disp_buffer {
	struct vb2_buffer vb;
	struct list_head list;
};

69
struct common_obj {
70 71 72 73
	struct vpif_disp_buffer *cur_frm;	/* Pointer pointing to current
						 * vb2_buffer */
	struct vpif_disp_buffer *next_frm;	/* Pointer pointing to next
						 * vb2_buffer */
74
	struct v4l2_format fmt;			/* Used to store the format */
75
	struct vb2_queue buffer_queue;		/* Buffer queue used in
76
						 * video-buf */
77 78 79
	/* allocator-specific contexts for each plane */
	struct vb2_alloc_ctx *alloc_ctx;

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
	struct list_head dma_queue;		/* Queue of filled frames */
	spinlock_t irqlock;			/* Used in video-buf */

	/* channel specific parameters */
	struct mutex lock;			/* lock used to access this
						 * structure */
	u32 ytop_off;				/* offset of Y top from the
						 * starting of the buffer */
	u32 ybtm_off;				/* offset of Y bottom from the
						 * starting of the buffer */
	u32 ctop_off;				/* offset of C top from the
						 * starting of the buffer */
	u32 cbtm_off;				/* offset of C bottom from the
						 * starting of the buffer */
	/* Function pointer to set the addresses */
95
	void (*set_addr)(unsigned long, unsigned long,
96 97 98 99 100 101 102
				unsigned long, unsigned long);
	u32 height;
	u32 width;
};

struct channel_obj {
	/* V4l2 specific parameters */
103
	struct video_device video_dev;	/* Identifies video device for
104 105 106 107 108
					 * this channel */
	u32 field_id;			/* Indicates id of the field
					 * which is being displayed */
	u8 initialized;			/* flag to indicate whether
					 * encoder is initialized */
109
	u32 output_idx;			/* Current output index */
110
	struct v4l2_subdev *sd;		/* Current output subdev(may be NULL) */
111 112 113 114 115 116 117 118 119 120 121 122

	enum vpif_channel_id channel_id;/* Identifies channel */
	struct vpif_params vpifparams;
	struct common_obj common[VPIF_NUMOBJECTS];
	struct video_obj video;
};

/* vpif device structure */
struct vpif_device {
	struct v4l2_device v4l2_dev;
	struct channel_obj *dev[VPIF_DISPLAY_NUM_CHANNELS];
	struct v4l2_subdev **sd;
123 124
	struct v4l2_async_notifier notifier;
	struct vpif_display_config *config;
125 126
};

127
#endif				/* VPIF_DISPLAY_H */