mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
1.8 KiB
90 lines
1.8 KiB
/* |
|
* linux/drivers/video/bt455.h |
|
* |
|
* Copyright 2003 Thiemo Seufer <[email protected]> |
|
* Copyright 2016 Maciej W. Rozycki <[email protected]> |
|
* |
|
* This file is subject to the terms and conditions of the GNU General |
|
* Public License. See the file COPYING in the main directory of this |
|
* archive for more details. |
|
*/ |
|
#include <linux/types.h> |
|
|
|
/* |
|
* Bt455 byte-wide registers, 32-bit aligned. |
|
*/ |
|
struct bt455_regs { |
|
volatile u8 addr_cmap; |
|
u8 pad0[3]; |
|
volatile u8 addr_cmap_data; |
|
u8 pad1[3]; |
|
volatile u8 addr_clr; |
|
u8 pad2[3]; |
|
volatile u8 addr_ovly; |
|
u8 pad3[3]; |
|
}; |
|
|
|
static inline void bt455_select_reg(struct bt455_regs *regs, int ir) |
|
{ |
|
mb(); |
|
regs->addr_cmap = ir & 0x0f; |
|
} |
|
|
|
static inline void bt455_reset_reg(struct bt455_regs *regs) |
|
{ |
|
mb(); |
|
regs->addr_clr = 0; |
|
} |
|
|
|
/* |
|
* Read/write to a Bt455 color map register. |
|
*/ |
|
static inline void bt455_read_cmap_next(struct bt455_regs *regs, u8 *grey) |
|
{ |
|
mb(); |
|
regs->addr_cmap_data; |
|
rmb(); |
|
*grey = regs->addr_cmap_data & 0xf; |
|
rmb(); |
|
regs->addr_cmap_data; |
|
} |
|
|
|
static inline void bt455_write_cmap_next(struct bt455_regs *regs, u8 grey) |
|
{ |
|
wmb(); |
|
regs->addr_cmap_data = 0x0; |
|
wmb(); |
|
regs->addr_cmap_data = grey & 0xf; |
|
wmb(); |
|
regs->addr_cmap_data = 0x0; |
|
} |
|
|
|
static inline void bt455_write_ovly_next(struct bt455_regs *regs, u8 grey) |
|
{ |
|
wmb(); |
|
regs->addr_ovly = 0x0; |
|
wmb(); |
|
regs->addr_ovly = grey & 0xf; |
|
wmb(); |
|
regs->addr_ovly = 0x0; |
|
} |
|
|
|
static inline void bt455_read_cmap_entry(struct bt455_regs *regs, |
|
int cr, u8 *grey) |
|
{ |
|
bt455_select_reg(regs, cr); |
|
bt455_read_cmap_next(regs, grey); |
|
} |
|
|
|
static inline void bt455_write_cmap_entry(struct bt455_regs *regs, |
|
int cr, u8 grey) |
|
{ |
|
bt455_select_reg(regs, cr); |
|
bt455_write_cmap_next(regs, grey); |
|
} |
|
|
|
static inline void bt455_write_ovly_entry(struct bt455_regs *regs, u8 grey) |
|
{ |
|
bt455_reset_reg(regs); |
|
bt455_write_ovly_next(regs, grey); |
|
}
|
|
|