aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/display/omap_display.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/display/omap_display.h')
-rw-r--r--drivers/gpu/pvr/display/omap_display.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/drivers/gpu/pvr/display/omap_display.h b/drivers/gpu/pvr/display/omap_display.h
new file mode 100644
index 0000000..8076f88
--- /dev/null
+++ b/drivers/gpu/pvr/display/omap_display.h
@@ -0,0 +1,108 @@
+/*
+ * drivers/gpu/pvr/display/omap_display.h
+ *
+ * Copyright (C) 2010 Texas Instruments
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <plat/vrfb.h>
+#include <plat/display.h>
+#include <linux/completion.h>
+
+#ifndef __OMAP_DISPLAY_H_
+#define __OMAP_DISPLAY_H_
+
+/* Max overlay managers for virtual display */
+#define OMAP_DISP_MAX_MANAGERS 2
+/* 3 for triple buffering, 4 for virtual display */
+#define OMAP_DISP_MAX_FLIPCHAIN_BUFFERS 4
+#define OMAP_DISP_NUM_DISPLAYS 4 /* lcd, 2lcd, tv, virtual */
+
+struct omap_display_device;
+
+/* On OMAP 4 we can only manage 3 displays at the same time + virtual */
+enum omap_display_id {
+ OMAP_DISPID_PRIMARY = 1 << 0,
+ OMAP_DISPID_SECONDARY = 1 << 1,
+ OMAP_DISPID_TERTIARY = 1 << 2,
+ OMAP_DISPID_VIRTUAL = 1 << 15, /* Multiple displays */
+ OMAP_DISPID_BADSTATE = 1 << 30, /* Used to say a display is unusable*/
+};
+
+enum omap_display_pixel_format {
+ RGB_565 = 0,
+ ARGB_8888 = 1,
+};
+
+/* Primary display location for virtual display */
+enum omap_display_feature {
+ ORIENTATION_VERTICAL = 1 << 0,
+ ORIENTATION_HORIZONTAL = 1 << 1,
+ ORIENTATION_INVERT = 1 << 2,
+};
+
+struct omap_display_buffer {
+ unsigned long physical_addr;
+ unsigned long virtual_addr;
+ unsigned long size;
+ struct omap_display_device *display;
+};
+
+struct omap_display_flip_chain {
+ int buffer_count;
+ struct omap_display_buffer *buffers[OMAP_DISP_MAX_FLIPCHAIN_BUFFERS];
+ struct omap_display_device *display;
+};
+
+struct omap_display_sync_item {
+ struct work_struct work;
+ struct omap_display_buffer *buffer;
+};
+
+struct omap_display_device {
+ char *name;
+ enum omap_display_id id;
+ enum omap_display_pixel_format pixel_format;
+ enum omap_display_feature features;
+ unsigned int width;
+ unsigned int height;
+ unsigned int bits_per_pixel;
+ unsigned int bytes_per_pixel;
+ unsigned int byte_stride;
+ enum omap_dss_rotation_angle rotation;
+ unsigned int reference_count;
+ unsigned int buffers_available;
+ struct omap_display_buffer *main_buffer;
+ struct omap_display_flip_chain *flip_chain;
+ struct omap_overlay_manager *overlay_managers[OMAP_DISP_MAX_MANAGERS];
+ unsigned int overlay_managers_count;
+ int (*open)(struct omap_display_device *display,
+ enum omap_display_feature features);
+ int (*close) (struct omap_display_device *display);
+ int (*create_flip_chain) (struct omap_display_device *display,
+ unsigned int buffer_count);
+ int (*destroy_flip_chain) (struct omap_display_device *display);
+ int (*rotate) (struct omap_display_device *display,
+ enum omap_dss_rotation_angle rotation);
+ int (*present_buffer) (struct omap_display_buffer *buffer);
+ int (*sync) (struct omap_display_device *display);
+ int (*present_buffer_sync) (struct omap_display_buffer *buffer);
+};
+
+int omap_display_initialize(void);
+int omap_display_deinitialize(void);
+int omap_display_count(void);
+struct omap_display_device *omap_display_get(enum omap_display_id id);
+
+#endif