dispc.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  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. /* DISPC common registers */
  25. #define DISPC_REVISION DISPC_REG(0x0000)
  26. #define DISPC_SYSCONFIG DISPC_REG(0x0010)
  27. #define DISPC_SYSSTATUS DISPC_REG(0x0014)
  28. #define DISPC_IRQSTATUS DISPC_REG(0x0018)
  29. #define DISPC_IRQENABLE DISPC_REG(0x001C)
  30. #define DISPC_CONTROL DISPC_REG(0x0040)
  31. #define DISPC_CONFIG DISPC_REG(0x0044)
  32. #define DISPC_CAPABLE DISPC_REG(0x0048)
  33. #define DISPC_LINE_STATUS DISPC_REG(0x005C)
  34. #define DISPC_LINE_NUMBER DISPC_REG(0x0060)
  35. #define DISPC_GLOBAL_ALPHA DISPC_REG(0x0074)
  36. #define DISPC_CONTROL2 DISPC_REG(0x0238)
  37. #define DISPC_CONFIG2 DISPC_REG(0x0620)
  38. #define DISPC_DIVISOR DISPC_REG(0x0804)
  39. /* DISPC overlay registers */
  40. #define DISPC_OVL_BA0(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  41. DISPC_BA0_OFFSET(n))
  42. #define DISPC_OVL_BA1(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  43. DISPC_BA1_OFFSET(n))
  44. #define DISPC_OVL_POSITION(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  45. DISPC_POS_OFFSET(n))
  46. #define DISPC_OVL_SIZE(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  47. DISPC_SIZE_OFFSET(n))
  48. #define DISPC_OVL_ATTRIBUTES(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  49. DISPC_ATTR_OFFSET(n))
  50. #define DISPC_OVL_FIFO_THRESHOLD(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  51. DISPC_FIFO_THRESH_OFFSET(n))
  52. #define DISPC_OVL_FIFO_SIZE_STATUS(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  53. DISPC_FIFO_SIZE_STATUS_OFFSET(n))
  54. #define DISPC_OVL_ROW_INC(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  55. DISPC_ROW_INC_OFFSET(n))
  56. #define DISPC_OVL_PIXEL_INC(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  57. DISPC_PIX_INC_OFFSET(n))
  58. #define DISPC_OVL_WINDOW_SKIP(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  59. DISPC_WINDOW_SKIP_OFFSET(n))
  60. #define DISPC_OVL_TABLE_BA(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  61. DISPC_TABLE_BA_OFFSET(n))
  62. #define DISPC_OVL_FIR(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  63. DISPC_FIR_OFFSET(n))
  64. #define DISPC_OVL_PICTURE_SIZE(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  65. DISPC_PIC_SIZE_OFFSET(n))
  66. #define DISPC_OVL_ACCU0(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  67. DISPC_ACCU0_OFFSET(n))
  68. #define DISPC_OVL_ACCU1(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  69. DISPC_ACCU1_OFFSET(n))
  70. #define DISPC_OVL_FIR_COEF_H(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  71. DISPC_FIR_COEF_H_OFFSET(n, i))
  72. #define DISPC_OVL_FIR_COEF_HV(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  73. DISPC_FIR_COEF_HV_OFFSET(n, i))
  74. #define DISPC_OVL_CONV_COEF(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  75. DISPC_CONV_COEF_OFFSET(n, i))
  76. #define DISPC_OVL_FIR_COEF_V(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
  77. DISPC_FIR_COEF_V_OFFSET(n, i))
  78. #define DISPC_OVL_PRELOAD(n) DISPC_REG(DISPC_OVL_BASE(n) + \
  79. DISPC_PRELOAD_OFFSET(n))
  80. /* DISPC manager/channel specific registers */
  81. static inline struct dispc_reg DISPC_DEFAULT_COLOR(enum omap_channel channel)
  82. {
  83. switch (channel) {
  84. case OMAP_DSS_CHANNEL_LCD:
  85. return DISPC_REG(0x004C);
  86. case OMAP_DSS_CHANNEL_DIGIT:
  87. return DISPC_REG(0x0050);
  88. case OMAP_DSS_CHANNEL_LCD2:
  89. return DISPC_REG(0x03AC);
  90. default:
  91. BUG();
  92. }
  93. }
  94. static inline struct dispc_reg DISPC_TRANS_COLOR(enum omap_channel channel)
  95. {
  96. switch (channel) {
  97. case OMAP_DSS_CHANNEL_LCD:
  98. return DISPC_REG(0x0054);
  99. case OMAP_DSS_CHANNEL_DIGIT:
  100. return DISPC_REG(0x0058);
  101. case OMAP_DSS_CHANNEL_LCD2:
  102. return DISPC_REG(0x03B0);
  103. default:
  104. BUG();
  105. }
  106. }
  107. static inline struct dispc_reg DISPC_TIMING_H(enum omap_channel channel)
  108. {
  109. switch (channel) {
  110. case OMAP_DSS_CHANNEL_LCD:
  111. return DISPC_REG(0x0064);
  112. case OMAP_DSS_CHANNEL_DIGIT:
  113. BUG();
  114. case OMAP_DSS_CHANNEL_LCD2:
  115. return DISPC_REG(0x0400);
  116. default:
  117. BUG();
  118. }
  119. }
  120. static inline struct dispc_reg DISPC_TIMING_V(enum omap_channel channel)
  121. {
  122. switch (channel) {
  123. case OMAP_DSS_CHANNEL_LCD:
  124. return DISPC_REG(0x0068);
  125. case OMAP_DSS_CHANNEL_DIGIT:
  126. BUG();
  127. case OMAP_DSS_CHANNEL_LCD2:
  128. return DISPC_REG(0x0404);
  129. default:
  130. BUG();
  131. }
  132. }
  133. static inline struct dispc_reg DISPC_POL_FREQ(enum omap_channel channel)
  134. {
  135. switch (channel) {
  136. case OMAP_DSS_CHANNEL_LCD:
  137. return DISPC_REG(0x006C);
  138. case OMAP_DSS_CHANNEL_DIGIT:
  139. BUG();
  140. case OMAP_DSS_CHANNEL_LCD2:
  141. return DISPC_REG(0x0408);
  142. default:
  143. BUG();
  144. }
  145. }
  146. static inline struct dispc_reg DISPC_DIVISORo(enum omap_channel channel)
  147. {
  148. switch (channel) {
  149. case OMAP_DSS_CHANNEL_LCD:
  150. return DISPC_REG(0x0070);
  151. case OMAP_DSS_CHANNEL_DIGIT:
  152. BUG();
  153. case OMAP_DSS_CHANNEL_LCD2:
  154. return DISPC_REG(0x040C);
  155. default:
  156. BUG();
  157. }
  158. }
  159. /* Named as DISPC_SIZE_LCD, DISPC_SIZE_DIGIT and DISPC_SIZE_LCD2 in TRM */
  160. static inline struct dispc_reg DISPC_SIZE_MGR(enum omap_channel channel)
  161. {
  162. switch (channel) {
  163. case OMAP_DSS_CHANNEL_LCD:
  164. return DISPC_REG(0x007C);
  165. case OMAP_DSS_CHANNEL_DIGIT:
  166. return DISPC_REG(0x0078);
  167. case OMAP_DSS_CHANNEL_LCD2:
  168. return DISPC_REG(0x03CC);
  169. default:
  170. BUG();
  171. }
  172. }
  173. static inline struct dispc_reg DISPC_DATA_CYCLE1(enum omap_channel channel)
  174. {
  175. switch (channel) {
  176. case OMAP_DSS_CHANNEL_LCD:
  177. return DISPC_REG(0x01D4);
  178. case OMAP_DSS_CHANNEL_DIGIT:
  179. BUG();
  180. case OMAP_DSS_CHANNEL_LCD2:
  181. return DISPC_REG(0x03C0);
  182. default:
  183. BUG();
  184. }
  185. }
  186. static inline struct dispc_reg DISPC_DATA_CYCLE2(enum omap_channel channel)
  187. {
  188. switch (channel) {
  189. case OMAP_DSS_CHANNEL_LCD:
  190. return DISPC_REG(0x01D8);
  191. case OMAP_DSS_CHANNEL_DIGIT:
  192. BUG();
  193. case OMAP_DSS_CHANNEL_LCD2:
  194. return DISPC_REG(0x03C4);
  195. default:
  196. BUG();
  197. }
  198. }
  199. static inline struct dispc_reg DISPC_DATA_CYCLE3(enum omap_channel channel)
  200. {
  201. switch (channel) {
  202. case OMAP_DSS_CHANNEL_LCD:
  203. return DISPC_REG(0x01DC);
  204. case OMAP_DSS_CHANNEL_DIGIT:
  205. BUG();
  206. case OMAP_DSS_CHANNEL_LCD2:
  207. return DISPC_REG(0x03C8);
  208. default:
  209. BUG();
  210. }
  211. }
  212. static inline struct dispc_reg DISPC_CPR_COEF_R(enum omap_channel channel)
  213. {
  214. switch (channel) {
  215. case OMAP_DSS_CHANNEL_LCD:
  216. return DISPC_REG(0x0220);
  217. case OMAP_DSS_CHANNEL_DIGIT:
  218. BUG();
  219. case OMAP_DSS_CHANNEL_LCD2:
  220. return DISPC_REG(0x03BC);
  221. default:
  222. BUG();
  223. }
  224. }
  225. static inline struct dispc_reg DISPC_CPR_COEF_G(enum omap_channel channel)
  226. {
  227. switch (channel) {
  228. case OMAP_DSS_CHANNEL_LCD:
  229. return DISPC_REG(0x0224);
  230. case OMAP_DSS_CHANNEL_DIGIT:
  231. BUG();
  232. case OMAP_DSS_CHANNEL_LCD2:
  233. return DISPC_REG(0x03B8);
  234. default:
  235. BUG();
  236. }
  237. }
  238. static inline struct dispc_reg DISPC_CPR_COEF_B(enum omap_channel channel)
  239. {
  240. switch (channel) {
  241. case OMAP_DSS_CHANNEL_LCD:
  242. return DISPC_REG(0x0228);
  243. case OMAP_DSS_CHANNEL_DIGIT:
  244. BUG();
  245. case OMAP_DSS_CHANNEL_LCD2:
  246. return DISPC_REG(0x03B4);
  247. default:
  248. BUG();
  249. }
  250. }
  251. /* DISPC overlay register base addresses */
  252. static inline u16 DISPC_OVL_BASE(enum omap_plane plane)
  253. {
  254. switch (plane) {
  255. case OMAP_DSS_GFX:
  256. return 0x0080;
  257. case OMAP_DSS_VIDEO1:
  258. return 0x00BC;
  259. case OMAP_DSS_VIDEO2:
  260. return 0x014C;
  261. default:
  262. BUG();
  263. }
  264. }
  265. /* DISPC overlay register offsets */
  266. static inline u16 DISPC_BA0_OFFSET(enum omap_plane plane)
  267. {
  268. switch (plane) {
  269. case OMAP_DSS_GFX:
  270. case OMAP_DSS_VIDEO1:
  271. case OMAP_DSS_VIDEO2:
  272. return 0x0000;
  273. default:
  274. BUG();
  275. }
  276. }
  277. static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
  278. {
  279. switch (plane) {
  280. case OMAP_DSS_GFX:
  281. case OMAP_DSS_VIDEO1:
  282. case OMAP_DSS_VIDEO2:
  283. return 0x0004;
  284. default:
  285. BUG();
  286. }
  287. }
  288. static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
  289. {
  290. switch (plane) {
  291. case OMAP_DSS_GFX:
  292. case OMAP_DSS_VIDEO1:
  293. case OMAP_DSS_VIDEO2:
  294. return 0x0008;
  295. default:
  296. BUG();
  297. }
  298. }
  299. static inline u16 DISPC_SIZE_OFFSET(enum omap_plane plane)
  300. {
  301. switch (plane) {
  302. case OMAP_DSS_GFX:
  303. case OMAP_DSS_VIDEO1:
  304. case OMAP_DSS_VIDEO2:
  305. return 0x000C;
  306. default:
  307. BUG();
  308. }
  309. }
  310. static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
  311. {
  312. switch (plane) {
  313. case OMAP_DSS_GFX:
  314. return 0x0020;
  315. case OMAP_DSS_VIDEO1:
  316. case OMAP_DSS_VIDEO2:
  317. return 0x0010;
  318. default:
  319. BUG();
  320. }
  321. }
  322. static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
  323. {
  324. switch (plane) {
  325. case OMAP_DSS_GFX:
  326. return 0x0024;
  327. case OMAP_DSS_VIDEO1:
  328. case OMAP_DSS_VIDEO2:
  329. return 0x0014;
  330. default:
  331. BUG();
  332. }
  333. }
  334. static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane)
  335. {
  336. switch (plane) {
  337. case OMAP_DSS_GFX:
  338. return 0x0028;
  339. case OMAP_DSS_VIDEO1:
  340. case OMAP_DSS_VIDEO2:
  341. return 0x0018;
  342. default:
  343. BUG();
  344. }
  345. }
  346. static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane plane)
  347. {
  348. switch (plane) {
  349. case OMAP_DSS_GFX:
  350. return 0x002C;
  351. case OMAP_DSS_VIDEO1:
  352. case OMAP_DSS_VIDEO2:
  353. return 0x001C;
  354. default:
  355. BUG();
  356. }
  357. }
  358. static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane plane)
  359. {
  360. switch (plane) {
  361. case OMAP_DSS_GFX:
  362. return 0x0030;
  363. case OMAP_DSS_VIDEO1:
  364. case OMAP_DSS_VIDEO2:
  365. return 0x0020;
  366. default:
  367. BUG();
  368. }
  369. }
  370. static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane)
  371. {
  372. switch (plane) {
  373. case OMAP_DSS_GFX:
  374. return 0x0034;
  375. case OMAP_DSS_VIDEO1:
  376. case OMAP_DSS_VIDEO2:
  377. BUG();
  378. default:
  379. BUG();
  380. }
  381. }
  382. static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane plane)
  383. {
  384. switch (plane) {
  385. case OMAP_DSS_GFX:
  386. return 0x0038;
  387. case OMAP_DSS_VIDEO1:
  388. case OMAP_DSS_VIDEO2:
  389. BUG();
  390. default:
  391. BUG();
  392. }
  393. }
  394. static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
  395. {
  396. switch (plane) {
  397. case OMAP_DSS_GFX:
  398. BUG();
  399. case OMAP_DSS_VIDEO1:
  400. case OMAP_DSS_VIDEO2:
  401. return 0x0024;
  402. default:
  403. BUG();
  404. }
  405. }
  406. static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
  407. {
  408. switch (plane) {
  409. case OMAP_DSS_GFX:
  410. BUG();
  411. case OMAP_DSS_VIDEO1:
  412. case OMAP_DSS_VIDEO2:
  413. return 0x0028;
  414. default:
  415. BUG();
  416. }
  417. }
  418. static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
  419. {
  420. switch (plane) {
  421. case OMAP_DSS_GFX:
  422. BUG();
  423. case OMAP_DSS_VIDEO1:
  424. case OMAP_DSS_VIDEO2:
  425. return 0x002C;
  426. default:
  427. BUG();
  428. }
  429. }
  430. static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
  431. {
  432. switch (plane) {
  433. case OMAP_DSS_GFX:
  434. BUG();
  435. case OMAP_DSS_VIDEO1:
  436. case OMAP_DSS_VIDEO2:
  437. return 0x0030;
  438. default:
  439. BUG();
  440. }
  441. }
  442. /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
  443. static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
  444. {
  445. switch (plane) {
  446. case OMAP_DSS_GFX:
  447. BUG();
  448. case OMAP_DSS_VIDEO1:
  449. case OMAP_DSS_VIDEO2:
  450. return 0x0034 + i * 0x8;
  451. default:
  452. BUG();
  453. }
  454. }
  455. /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
  456. static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
  457. {
  458. switch (plane) {
  459. case OMAP_DSS_GFX:
  460. BUG();
  461. case OMAP_DSS_VIDEO1:
  462. case OMAP_DSS_VIDEO2:
  463. return 0x0038 + i * 0x8;
  464. default:
  465. BUG();
  466. }
  467. }
  468. /* coef index i = {0, 1, 2, 3, 4,} */
  469. static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
  470. {
  471. switch (plane) {
  472. case OMAP_DSS_GFX:
  473. BUG();
  474. case OMAP_DSS_VIDEO1:
  475. case OMAP_DSS_VIDEO2:
  476. return 0x0074 + i * 0x4;
  477. default:
  478. BUG();
  479. }
  480. }
  481. /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
  482. static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
  483. {
  484. switch (plane) {
  485. case OMAP_DSS_GFX:
  486. BUG();
  487. case OMAP_DSS_VIDEO1:
  488. return 0x0124 + i * 0x4;
  489. case OMAP_DSS_VIDEO2:
  490. return 0x00B4 + i * 0x4;
  491. default:
  492. BUG();
  493. }
  494. }
  495. static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
  496. {
  497. switch (plane) {
  498. case OMAP_DSS_GFX:
  499. return 0x01AC;
  500. case OMAP_DSS_VIDEO1:
  501. return 0x0174;
  502. case OMAP_DSS_VIDEO2:
  503. return 0x00E8;
  504. default:
  505. BUG();
  506. }
  507. }
  508. #endif