Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef MDDIHOST_H
14#define MDDIHOST_H
15
16#include <linux/kernel.h>
17#include <linux/sched.h>
18#include <linux/time.h>
19#include <linux/init.h>
20#include <linux/interrupt.h>
21#include "linux/proc_fs.h"
22#include <linux/types.h>
23#include <linux/dma-mapping.h>
24#include <linux/clk.h>
25
26#include <mach/hardware.h>
27#include <linux/io.h>
28
29#include <asm/system.h>
30#include <asm/mach-types.h>
31
32#include "msm_fb_panel.h"
33
34#undef FEATURE_MDDI_MC4
35#undef FEATURE_MDDI_S6D0142
36#undef FEATURE_MDDI_HITACHI
37#define FEATURE_MDDI_SHARP
38#define FEATURE_MDDI_TOSHIBA
39#undef FEATURE_MDDI_E751
40#define FEATURE_MDDI_CORONA
41#define FEATURE_MDDI_PRISM
42
43#define T_MSM7500
44
45typedef enum {
46 format_16bpp,
47 format_18bpp,
48 format_24bpp
49} mddi_video_format;
50
51typedef enum {
52 MDDI_LCD_NONE = 0,
53 MDDI_LCD_MC4,
54 MDDI_LCD_S6D0142,
55 MDDI_LCD_SHARP,
56 MDDI_LCD_E751,
57 MDDI_LCD_CORONA,
58 MDDI_LCD_HITACHI,
59 MDDI_LCD_TOSHIBA,
60 MDDI_LCD_PRISM,
61 MDDI_LCD_TP2,
62 MDDI_NUM_LCD_TYPES,
63 MDDI_LCD_DEFAULT = MDDI_LCD_TOSHIBA
64} mddi_lcd_type;
65
66typedef enum {
67 MDDI_HOST_PRIM = 0,
68 MDDI_HOST_EXT,
69 MDDI_NUM_HOST_CORES
70} mddi_host_type;
71
72typedef enum {
73 MDDI_DRIVER_RESET, /* host core registers have not been written. */
74 MDDI_DRIVER_DISABLED, /* registers written, interrupts disabled. */
75 MDDI_DRIVER_ENABLED /* registers written, interrupts enabled. */
76} mddi_host_driver_state_type;
77
78typedef enum {
79 MDDI_GPIO_INT_0 = 0,
80 MDDI_GPIO_INT_1,
81 MDDI_GPIO_INT_2,
82 MDDI_GPIO_INT_3,
83 MDDI_GPIO_INT_4,
84 MDDI_GPIO_INT_5,
85 MDDI_GPIO_INT_6,
86 MDDI_GPIO_INT_7,
87 MDDI_GPIO_INT_8,
88 MDDI_GPIO_INT_9,
89 MDDI_GPIO_INT_10,
90 MDDI_GPIO_INT_11,
91 MDDI_GPIO_INT_12,
92 MDDI_GPIO_INT_13,
93 MDDI_GPIO_INT_14,
94 MDDI_GPIO_INT_15,
95 MDDI_GPIO_NUM_INTS
96} mddi_gpio_int_type;
97
98enum mddi_data_packet_size_type {
99 MDDI_DATA_PACKET_4_BYTES = 4,
100 MDDI_DATA_PACKET_8_BYTES = 8,
101 MDDI_DATA_PACKET_12_BYTES = 12,
102 MDDI_DATA_PACKET_16_BYTES = 16,
103 MDDI_DATA_PACKET_24_BYTES = 24
104};
105
106typedef struct {
107 uint32 addr;
108 uint32 value;
109} mddi_reg_write_type;
110
111boolean mddi_vsync_set_handler(msm_fb_vsync_handler_type handler, void *arg);
112
113typedef void (*mddi_llist_done_cb_type) (void);
114
115typedef void (*mddi_rev_handler_type) (void *);
116
117boolean mddi_set_rev_handler(mddi_rev_handler_type handler, uint16 pkt_type);
118
119#define MDDI_DEFAULT_PRIM_PIX_ATTR 0xC3
120#define MDDI_DEFAULT_SECD_PIX_ATTR 0xC0
121
122typedef int gpio_int_polarity_type;
123typedef int gpio_int_handler_type;
124
125typedef struct {
126 void (*vsync_detected) (boolean);
127} mddi_lcd_func_type;
128
129extern mddi_lcd_func_type mddi_lcd;
130void mddi_init(void);
131
132void mddi_powerdown(void);
133
134void mddi_host_start_ext_display(void);
135void mddi_host_stop_ext_display(void);
136
137extern spinlock_t mddi_host_spin_lock;
138#ifdef T_MSM7500
139void mddi_reset(void);
140#ifdef FEATURE_DUAL_PROC_MODEM_DISPLAY
141void mddi_host_switch_proc_control(boolean on);
142#endif
143#endif
144void mddi_host_exit_power_collapse(void);
145
146void mddi_queue_splash_screen
147 (void *buf_ptr,
148 boolean clear_area,
149 int16 src_width,
150 int16 src_starting_row,
151 int16 src_starting_column,
152 int16 num_of_rows,
153 int16 num_of_columns, int16 dst_starting_row, int16 dst_starting_column);
154
155void mddi_queue_image
156 (void *buf_ptr,
157 uint8 stereo_video,
158 boolean clear_area,
159 int16 src_width,
160 int16 src_starting_row,
161 int16 src_starting_column,
162 int16 num_of_rows,
163 int16 num_of_columns, int16 dst_starting_row, int16 dst_starting_column);
164
165int mddi_host_register_read
166 (uint32 reg_addr,
167 uint32 *reg_value_ptr, boolean wait, mddi_host_type host_idx);
168int mddi_host_register_write
169 (uint32 reg_addr, uint32 reg_val,
170 enum mddi_data_packet_size_type packet_size,
171 boolean wait, mddi_llist_done_cb_type done_cb, mddi_host_type host);
172boolean mddi_host_register_write_int
173 (uint32 reg_addr,
174 uint32 reg_val, mddi_llist_done_cb_type done_cb, mddi_host_type host);
175boolean mddi_host_register_read_int
176 (uint32 reg_addr, uint32 *reg_value_ptr, mddi_host_type host_idx);
177void mddi_queue_register_write_static
178 (uint32 reg_addr,
179 uint32 reg_val, boolean wait, mddi_llist_done_cb_type done_cb);
180void mddi_queue_static_window_adjust
181 (const mddi_reg_write_type *reg_write,
182 uint16 num_writes, mddi_llist_done_cb_type done_cb);
183
184#define mddi_queue_register_read(reg, val_ptr, wait, sig) \
185 mddi_host_register_read(reg, val_ptr, wait, MDDI_HOST_PRIM)
186#define mddi_queue_register_write(reg, val, wait, sig) \
187 mddi_host_register_write(reg, val, MDDI_DATA_PACKET_4_BYTES,\
188 wait, NULL, MDDI_HOST_PRIM)
189#define mddi_queue_register_write_extn(reg, val, pkt_size, wait, sig) \
190 mddi_host_register_write(reg, val, pkt_size, \
191 wait, NULL, MDDI_HOST_PRIM)
192#define mddi_queue_register_write_int(reg, val) \
193 mddi_host_register_write_int(reg, val, NULL, MDDI_HOST_PRIM)
194#define mddi_queue_register_read_int(reg, val_ptr) \
195 mddi_host_register_read_int(reg, val_ptr, MDDI_HOST_PRIM)
196#define mddi_queue_register_writes(reg_ptr, val, wait, sig) \
197 mddi_host_register_writes(reg_ptr, val, wait, sig, MDDI_HOST_PRIM)
198
199void mddi_wait(uint16 time_ms);
200void mddi_assign_max_pkt_dimensions(uint16 image_cols,
201 uint16 image_rows,
202 uint16 bpp,
203 uint16 *max_cols, uint16 * max_rows);
204uint16 mddi_assign_pkt_height(uint16 pkt_width, uint16 pkt_height, uint16 bpp);
205void mddi_queue_reverse_encapsulation(boolean wait);
206void mddi_disable(int lock);
207#endif /* MDDIHOST_H */