2005-04-16 15:20:36 -07:00
/*
* linux / drivers / video / bt455 . h
*
* Copyright 2003 Thiemo Seufer < seufer @ csv . ica . uni - stuttgart . de >
2016-02-22 01:55:21 +00:00
* Copyright 2016 Maciej W . Rozycki < macro @ linux - mips . org >
2005-04-16 15:20:36 -07:00
*
* 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 ;
}
2016-02-22 01:55:27 +00:00
static inline void bt455_reset_reg ( struct bt455_regs * regs )
{
mb ( ) ;
regs - > addr_clr = 0 ;
}
2005-04-16 15:20:36 -07:00
/*
* Read / write to a Bt455 color map register .
*/
2016-02-22 01:55:27 +00:00
static inline void bt455_read_cmap_next ( struct bt455_regs * regs , u8 * grey )
2005-04-16 15:20:36 -07:00
{
mb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_cmap_data ;
2005-04-16 15:20:36 -07:00
rmb ( ) ;
2016-02-22 01:55:21 +00:00
* grey = regs - > addr_cmap_data & 0xf ;
2005-04-16 15:20:36 -07:00
rmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_cmap_data ;
2005-04-16 15:20:36 -07:00
}
2016-02-22 01:55:27 +00:00
static inline void bt455_write_cmap_next ( struct bt455_regs * regs , u8 grey )
2005-04-16 15:20:36 -07:00
{
wmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_cmap_data = 0x0 ;
2005-04-16 15:20:36 -07:00
wmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_cmap_data = grey & 0xf ;
2005-04-16 15:20:36 -07:00
wmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_cmap_data = 0x0 ;
2005-04-16 15:20:36 -07:00
}
2016-02-22 01:55:27 +00:00
static inline void bt455_write_ovly_next ( struct bt455_regs * regs , u8 grey )
2005-04-16 15:20:36 -07:00
{
wmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_ovly = 0x0 ;
2005-04-16 15:20:36 -07:00
wmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_ovly = grey & 0xf ;
2005-04-16 15:20:36 -07:00
wmb ( ) ;
2016-02-22 01:55:21 +00:00
regs - > addr_ovly = 0x0 ;
2005-04-16 15:20:36 -07:00
}
2016-02-22 01:55:27 +00:00
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 ) ;
}