Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/drivers/video/bt455.h | |
3 | * | |
4 | * Copyright 2003 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> | |
01ac59c3 | 5 | * Copyright 2016 Maciej W. Rozycki <macro@linux-mips.org> |
1da177e4 LT |
6 | * |
7 | * This file is subject to the terms and conditions of the GNU General | |
8 | * Public License. See the file COPYING in the main directory of this | |
9 | * archive for more details. | |
10 | */ | |
11 | #include <linux/types.h> | |
1da177e4 LT |
12 | |
13 | /* | |
14 | * Bt455 byte-wide registers, 32-bit aligned. | |
15 | */ | |
16 | struct bt455_regs { | |
17 | volatile u8 addr_cmap; | |
18 | u8 pad0[3]; | |
19 | volatile u8 addr_cmap_data; | |
20 | u8 pad1[3]; | |
21 | volatile u8 addr_clr; | |
22 | u8 pad2[3]; | |
23 | volatile u8 addr_ovly; | |
24 | u8 pad3[3]; | |
25 | }; | |
26 | ||
27 | static inline void bt455_select_reg(struct bt455_regs *regs, int ir) | |
28 | { | |
29 | mb(); | |
30 | regs->addr_cmap = ir & 0x0f; | |
31 | } | |
32 | ||
5832706e MR |
33 | static inline void bt455_reset_reg(struct bt455_regs *regs) |
34 | { | |
35 | mb(); | |
36 | regs->addr_clr = 0; | |
37 | } | |
38 | ||
1da177e4 LT |
39 | /* |
40 | * Read/write to a Bt455 color map register. | |
41 | */ | |
5832706e | 42 | static inline void bt455_read_cmap_next(struct bt455_regs *regs, u8 *grey) |
1da177e4 | 43 | { |
1da177e4 | 44 | mb(); |
01ac59c3 | 45 | regs->addr_cmap_data; |
1da177e4 | 46 | rmb(); |
01ac59c3 | 47 | *grey = regs->addr_cmap_data & 0xf; |
1da177e4 | 48 | rmb(); |
01ac59c3 | 49 | regs->addr_cmap_data; |
1da177e4 LT |
50 | } |
51 | ||
5832706e | 52 | static inline void bt455_write_cmap_next(struct bt455_regs *regs, u8 grey) |
1da177e4 | 53 | { |
1da177e4 | 54 | wmb(); |
01ac59c3 | 55 | regs->addr_cmap_data = 0x0; |
1da177e4 | 56 | wmb(); |
01ac59c3 | 57 | regs->addr_cmap_data = grey & 0xf; |
1da177e4 | 58 | wmb(); |
01ac59c3 | 59 | regs->addr_cmap_data = 0x0; |
1da177e4 LT |
60 | } |
61 | ||
5832706e | 62 | static inline void bt455_write_ovly_next(struct bt455_regs *regs, u8 grey) |
1da177e4 | 63 | { |
1da177e4 | 64 | wmb(); |
01ac59c3 | 65 | regs->addr_ovly = 0x0; |
1da177e4 | 66 | wmb(); |
01ac59c3 | 67 | regs->addr_ovly = grey & 0xf; |
1da177e4 | 68 | wmb(); |
01ac59c3 | 69 | regs->addr_ovly = 0x0; |
1da177e4 | 70 | } |
5832706e MR |
71 | |
72 | static inline void bt455_read_cmap_entry(struct bt455_regs *regs, | |
73 | int cr, u8 *grey) | |
74 | { | |
75 | bt455_select_reg(regs, cr); | |
76 | bt455_read_cmap_next(regs, grey); | |
77 | } | |
78 | ||
79 | static inline void bt455_write_cmap_entry(struct bt455_regs *regs, | |
80 | int cr, u8 grey) | |
81 | { | |
82 | bt455_select_reg(regs, cr); | |
83 | bt455_write_cmap_next(regs, grey); | |
84 | } | |
85 | ||
86 | static inline void bt455_write_ovly_entry(struct bt455_regs *regs, u8 grey) | |
87 | { | |
88 | bt455_reset_reg(regs); | |
89 | bt455_write_ovly_next(regs, grey); | |
90 | } |