dispc.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. /*
  2. * linux/drivers/video/omap2/dss/dispc.h
  3. *
  4. * Copyright (C) 2011 Texas Instruments
  5. * Author: Archit Taneja <archit@ti.com>
  6. *
  7. *
  8. * This program is free software; you can redistribute it and/or modify it
  9. * under the terms of the GNU General Public License version 2 as published by
  10. * the Free Software Foundation.
  11. *
  12. * This program is distributed in the hope that it will be useful, but WITHOUT
  13. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  15. * more details.
  16. *
  17. * You should have received a copy of the GNU General Public License along with
  18. * this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. #ifndef __OMAP2_DISPC_REG_H
  21. #define __OMAP2_DISPC_REG_H
  22. struct dispc_reg { u16 idx; };
  23. #define DISPC_REG(idx) ((const struct dispc_reg) { idx })
  24. /*
  25. * DISPC common registers and
  26. * DISPC channel registers , ch = 0 for LCD, ch = 1 for
  27. * DIGIT, and ch = 2 for LCD2
  28. */
  29. #define DISPC_REVISION DISPC_REG(0x0000)
  30. #define DISPC_SYSCONFIG DISPC_REG(0x0010)
  31. #define DISPC_SYSSTATUS DISPC_REG(0x0014)
  32. #define DISPC_IRQSTATUS DISPC_REG(0x0018)
  33. #define DISPC_IRQENABLE DISPC_REG(0x001C)
  34. #define DISPC_CONTROL DISPC_REG(0x0040)
  35. #define DISPC_CONTROL2 DISPC_REG(0x0238)
  36. #define DISPC_CONFIG DISPC_REG(0x0044)
  37. #define DISPC_CONFIG2 DISPC_REG(0x0620)
  38. #define DISPC_CAPABLE DISPC_REG(0x0048)
  39. #define DISPC_DEFAULT_COLOR(ch) DISPC_REG(ch == 0 ? 0x004C : \
  40. (ch == 1 ? 0x0050 : 0x03AC))
  41. #define DISPC_TRANS_COLOR(ch) DISPC_REG(ch == 0 ? 0x0054 : \
  42. (ch == 1 ? 0x0058 : 0x03B0))
  43. #define DISPC_LINE_STATUS DISPC_REG(0x005C)
  44. #define DISPC_LINE_NUMBER DISPC_REG(0x0060)
  45. #define DISPC_TIMING_H(ch) DISPC_REG(ch != 2 ? 0x0064 : 0x0400)
  46. #define DISPC_TIMING_V(ch) DISPC_REG(ch != 2 ? 0x0068 : 0x0404)
  47. #define DISPC_POL_FREQ(ch) DISPC_REG(ch != 2 ? 0x006C : 0x0408)
  48. #define DISPC_DIVISORo(ch) DISPC_REG(ch != 2 ? 0x0070 : 0x040C)
  49. #define DISPC_GLOBAL_ALPHA DISPC_REG(0x0074)
  50. #define DISPC_SIZE_DIG DISPC_REG(0x0078)
  51. #define DISPC_SIZE_LCD(ch) DISPC_REG(ch != 2 ? 0x007C : 0x03CC)
  52. #define DISPC_DATA_CYCLE1(ch) DISPC_REG(ch != 2 ? 0x01D4 : 0x03C0)
  53. #define DISPC_DATA_CYCLE2(ch) DISPC_REG(ch != 2 ? 0x01D8 : 0x03C4)
  54. #define DISPC_DATA_CYCLE3(ch) DISPC_REG(ch != 2 ? 0x01DC : 0x03C8)
  55. #define DISPC_CPR_COEF_R(ch) DISPC_REG(ch != 2 ? 0x0220 : 0x03BC)
  56. #define DISPC_CPR_COEF_G(ch) DISPC_REG(ch != 2 ? 0x0224 : 0x03B8)
  57. #define DISPC_CPR_COEF_B(ch) DISPC_REG(ch != 2 ? 0x0228 : 0x03B4)
  58. #define DISPC_DIVISOR DISPC_REG(0x0804)
  59. /* DISPC overlay registers */
  60. #define DISPC_OVL_BA0(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  61. DISPC_BA0_OFFSET(n))
  62. #define DISPC_OVL_BA1(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  63. DISPC_BA1_OFFSET(n))
  64. #define DISPC_OVL_POSITION(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  65. DISPC_POS_OFFSET(n))
  66. #define DISPC_OVL_SIZE(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  67. DISPC_SIZE_OFFSET(n))
  68. #define DISPC_OVL_ATTRIBUTES(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  69. DISPC_ATTR_OFFSET(n))
  70. #define DISPC_OVL_FIFO_THRESHOLD(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  71. DISPC_FIFO_THRESH_OFFSET(n))
  72. #define DISPC_OVL_FIFO_SIZE_STATUS(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  73. DISPC_FIFO_SIZE_STATUS_OFFSET(n))
  74. #define DISPC_OVL_ROW_INC(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  75. DISPC_ROW_INC_OFFSET(n))
  76. #define DISPC_OVL_PIXEL_INC(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  77. DISPC_PIX_INC_OFFSET(n))
  78. #define DISPC_OVL_WINDOW_SKIP(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  79. DISPC_WINDOW_SKIP_OFFSET(n))
  80. #define DISPC_OVL_TABLE_BA(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  81. DISPC_TABLE_BA_OFFSET(n))
  82. #define DISPC_OVL_FIR(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  83. DISPC_FIR_OFFSET(n))
  84. #define DISPC_OVL_PICTURE_SIZE(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  85. DISPC_PIC_SIZE_OFFSET(n))
  86. #define DISPC_OVL_ACCU0(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  87. DISPC_ACCU0_OFFSET(n))
  88. #define DISPC_OVL_ACCU1(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  89. DISPC_ACCU1_OFFSET(n))
  90. #define DISPC_OVL_FIR_COEF_H(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  91. DISPC_FIR_COEF_H_OFFSET(n, i))
  92. #define DISPC_OVL_FIR_COEF_HV(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  93. DISPC_FIR_COEF_HV_OFFSET(n, i))
  94. #define DISPC_OVL_CONV_COEF(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  95. DISPC_CONV_COEF_OFFSET(n, i))
  96. #define DISPC_OVL_FIR_COEF_V(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  97. DISPC_FIR_COEF_V_OFFSET(n, i))
  98. #define DISPC_OVL_PRELOAD(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  99. DISPC_PRELOAD_OFFSET(n))
  100. /* DISPC overlay register base addresses */
  101. static inline u16 DISPC_OVL_BASE(enum omap_plane plane)
  102. {
  103. switch (plane) {
  104. case OMAP_DSS_GFX:
  105. return 0x0080;
  106. case OMAP_DSS_VIDEO1:
  107. return 0x00BC;
  108. case OMAP_DSS_VIDEO2:
  109. return 0x014C;
  110. default:
  111. BUG();
  112. }
  113. }
  114. /* DISPC overlay register offsets */
  115. static inline u16 DISPC_BA0_OFFSET(enum omap_plane plane)
  116. {
  117. switch (plane) {
  118. case OMAP_DSS_GFX:
  119. case OMAP_DSS_VIDEO1:
  120. case OMAP_DSS_VIDEO2:
  121. return 0x0000;
  122. default:
  123. BUG();
  124. }
  125. }
  126. static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
  127. {
  128. switch (plane) {
  129. case OMAP_DSS_GFX:
  130. case OMAP_DSS_VIDEO1:
  131. case OMAP_DSS_VIDEO2:
  132. return 0x0004;
  133. default:
  134. BUG();
  135. }
  136. }
  137. static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
  138. {
  139. switch (plane) {
  140. case OMAP_DSS_GFX:
  141. case OMAP_DSS_VIDEO1:
  142. case OMAP_DSS_VIDEO2:
  143. return 0x0008;
  144. default:
  145. BUG();
  146. }
  147. }
  148. static inline u16 DISPC_SIZE_OFFSET(enum omap_plane plane)
  149. {
  150. switch (plane) {
  151. case OMAP_DSS_GFX:
  152. case OMAP_DSS_VIDEO1:
  153. case OMAP_DSS_VIDEO2:
  154. return 0x000C;
  155. default:
  156. BUG();
  157. }
  158. }
  159. static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
  160. {
  161. switch (plane) {
  162. case OMAP_DSS_GFX:
  163. return 0x0020;
  164. case OMAP_DSS_VIDEO1:
  165. case OMAP_DSS_VIDEO2:
  166. return 0x0010;
  167. default:
  168. BUG();
  169. }
  170. }
  171. static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
  172. {
  173. switch (plane) {
  174. case OMAP_DSS_GFX:
  175. return 0x0024;
  176. case OMAP_DSS_VIDEO1:
  177. case OMAP_DSS_VIDEO2:
  178. return 0x0014;
  179. default:
  180. BUG();
  181. }
  182. }
  183. static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane)
  184. {
  185. switch (plane) {
  186. case OMAP_DSS_GFX:
  187. return 0x0028;
  188. case OMAP_DSS_VIDEO1:
  189. case OMAP_DSS_VIDEO2:
  190. return 0x0018;
  191. default:
  192. BUG();
  193. }
  194. }
  195. static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane plane)
  196. {
  197. switch (plane) {
  198. case OMAP_DSS_GFX:
  199. return 0x002C;
  200. case OMAP_DSS_VIDEO1:
  201. case OMAP_DSS_VIDEO2:
  202. return 0x001C;
  203. default:
  204. BUG();
  205. }
  206. }
  207. static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane plane)
  208. {
  209. switch (plane) {
  210. case OMAP_DSS_GFX:
  211. return 0x0030;
  212. case OMAP_DSS_VIDEO1:
  213. case OMAP_DSS_VIDEO2:
  214. return 0x0020;
  215. default:
  216. BUG();
  217. }
  218. }
  219. static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane)
  220. {
  221. switch (plane) {
  222. case OMAP_DSS_GFX:
  223. return 0x0034;
  224. case OMAP_DSS_VIDEO1:
  225. case OMAP_DSS_VIDEO2:
  226. BUG();
  227. default:
  228. BUG();
  229. }
  230. }
  231. static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane plane)
  232. {
  233. switch (plane) {
  234. case OMAP_DSS_GFX:
  235. return 0x0038;
  236. case OMAP_DSS_VIDEO1:
  237. case OMAP_DSS_VIDEO2:
  238. BUG();
  239. default:
  240. BUG();
  241. }
  242. }
  243. static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
  244. {
  245. switch (plane) {
  246. case OMAP_DSS_GFX:
  247. BUG();
  248. case OMAP_DSS_VIDEO1:
  249. case OMAP_DSS_VIDEO2:
  250. return 0x0024;
  251. default:
  252. BUG();
  253. }
  254. }
  255. static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
  256. {
  257. switch (plane) {
  258. case OMAP_DSS_GFX:
  259. BUG();
  260. case OMAP_DSS_VIDEO1:
  261. case OMAP_DSS_VIDEO2:
  262. return 0x0028;
  263. default:
  264. BUG();
  265. }
  266. }
  267. static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
  268. {
  269. switch (plane) {
  270. case OMAP_DSS_GFX:
  271. BUG();
  272. case OMAP_DSS_VIDEO1:
  273. case OMAP_DSS_VIDEO2:
  274. return 0x002C;
  275. default:
  276. BUG();
  277. }
  278. }
  279. static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
  280. {
  281. switch (plane) {
  282. case OMAP_DSS_GFX:
  283. BUG();
  284. case OMAP_DSS_VIDEO1:
  285. case OMAP_DSS_VIDEO2:
  286. return 0x0030;
  287. default:
  288. BUG();
  289. }
  290. }
  291. /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
  292. static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
  293. {
  294. switch (plane) {
  295. case OMAP_DSS_GFX:
  296. BUG();
  297. case OMAP_DSS_VIDEO1:
  298. case OMAP_DSS_VIDEO2:
  299. return 0x0034 + i * 0x8;
  300. default:
  301. BUG();
  302. }
  303. }
  304. /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
  305. static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
  306. {
  307. switch (plane) {
  308. case OMAP_DSS_GFX:
  309. BUG();
  310. case OMAP_DSS_VIDEO1:
  311. case OMAP_DSS_VIDEO2:
  312. return 0x0038 + i * 0x8;
  313. default:
  314. BUG();
  315. }
  316. }
  317. /* coef index i = {0, 1, 2, 3, 4,} */
  318. static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
  319. {
  320. switch (plane) {
  321. case OMAP_DSS_GFX:
  322. BUG();
  323. case OMAP_DSS_VIDEO1:
  324. case OMAP_DSS_VIDEO2:
  325. return 0x0074 + i * 0x4;
  326. default:
  327. BUG();
  328. }
  329. }
  330. /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
  331. static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
  332. {
  333. switch (plane) {
  334. case OMAP_DSS_GFX:
  335. BUG();
  336. case OMAP_DSS_VIDEO1:
  337. return 0x0124 + i * 0x4;
  338. case OMAP_DSS_VIDEO2:
  339. return 0x00B4 + i * 0x4;
  340. default:
  341. BUG();
  342. }
  343. }
  344. static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
  345. {
  346. switch (plane) {
  347. case OMAP_DSS_GFX:
  348. return 0x01AC;
  349. case OMAP_DSS_VIDEO1:
  350. return 0x0174;
  351. case OMAP_DSS_VIDEO2:
  352. return 0x00E8;
  353. default:
  354. BUG();
  355. }
  356. }
  357. #endif