@ -6,8 +6,8 @@
*/
*/
# include <common.h>
# include <common.h>
# include <i2c.h>
# include <asm/io.h>
# include <asm/io.h>
# include <i2c.h>
# include <gdsys_fpga.h>
# include <gdsys_fpga.h>
@ -54,34 +54,41 @@ enum {
# if defined(CONFIG_SYS_ICS8N3QV01) || defined(CONFIG_SYS_SIL1178)
# if defined(CONFIG_SYS_ICS8N3QV01) || defined(CONFIG_SYS_SIL1178)
static void fpga_iic_write ( unsigned screen , u8 slave , u8 reg , u8 data )
static void fpga_iic_write ( unsigned screen , u8 slave , u8 reg , u8 data )
{
{
struct ihs_fpga * fpga = ( struct ihs_fpga * ) CONFIG_SYS_FPGA_BASE ( screen ) ;
u16 val ;
struct ihs_i2c * i2c = & fpga - > i2c ;
while ( in_le16 ( & fpga - > extended_interrupt ) & ( 1 < < 12 ) )
do {
;
FPGA_GET_REG ( screen , extended_interrupt , & val ) ;
out_le16 ( & i2c - > write_mailbox_ext , reg | ( data < < 8 ) ) ;
} while ( val & ( 1 < < 12 ) ) ;
out_le16 ( & i2c - > write_mailbox , 0xc400 | ( slave < < 1 ) ) ;
FPGA_SET_REG ( screen , i2c . write_mailbox_ext , reg | ( data < < 8 ) ) ;
FPGA_SET_REG ( screen , i2c . write_mailbox , 0xc400 | ( slave < < 1 ) ) ;
}
}
static u8 fpga_iic_read ( unsigned screen , u8 slave , u8 reg )
static u8 fpga_iic_read ( unsigned screen , u8 slave , u8 reg )
{
{
struct ihs_fpga * fpga = ( struct ihs_fpga * ) CONFIG_SYS_FPGA_BASE ( screen ) ;
struct ihs_i2c * i2c = & fpga - > i2c ;
unsigned int ctr = 0 ;
unsigned int ctr = 0 ;
u16 val ;
do {
FPGA_GET_REG ( screen , extended_interrupt , & val ) ;
} while ( val & ( 1 < < 12 ) ) ;
while ( in_le16 ( & fpga - > extended_interrupt ) & ( 1 < < 12 ) )
FPGA_SET_REG ( screen , extended_interrupt , 1 < < 14 ) ;
;
FPGA_SET_REG ( screen , i2c . write_mailbox_ext , reg ) ;
out_le16 ( & fpga - > extended_interrupt , 1 < < 14 ) ;
FPGA_SET_REG ( screen , i2c . write_mailbox , 0xc000 | ( slave < < 1 ) ) ;
out_le16 ( & i2c - > write_mailbox_ext , reg ) ;
out_le16 ( & i2c - > write_mailbox , 0xc000 | ( slave < < 1 ) ) ;
FPGA_GET_REG ( screen , extended_interrupt , & val ) ;
while ( ! ( in_le16 ( & fpga - > extended_interrupt ) & ( 1 < < 14 ) ) ) {
while ( ! ( val & ( 1 < < 14 ) ) ) {
udelay ( 100000 ) ;
udelay ( 100000 ) ;
if ( ctr + + > 5 ) {
if ( ctr + + > 5 ) {
printf ( " iic receive timeout \n " ) ;
printf ( " iic receive timeout \n " ) ;
break ;
break ;
}
}
FPGA_GET_REG ( screen , extended_interrupt , & val ) ;
}
}
return in_le16 ( & i2c - > read_mailbox_ext ) > > 8 ;
FPGA_GET_REG ( screen , i2c . read_mailbox_ext , & val ) ;
return val > > 8 ;
}
}
# endif
# endif
@ -113,7 +120,6 @@ static void mpc92469ac_calc_parameters(unsigned int fout,
static void mpc92469ac_set ( unsigned screen , unsigned int fout )
static void mpc92469ac_set ( unsigned screen , unsigned int fout )
{
{
struct ihs_fpga * fpga = ( struct ihs_fpga * ) CONFIG_SYS_FPGA_BASE ( screen ) ;
unsigned int n ;
unsigned int n ;
unsigned int m ;
unsigned int m ;
unsigned int bitval = 0 ;
unsigned int bitval = 0 ;
@ -134,7 +140,7 @@ static void mpc92469ac_set(unsigned screen, unsigned int fout)
break ;
break ;
}
}
out_le16 ( & fpga - > mpc3w_control , ( bitval < < 9 ) | m ) ;
FPGA_SET_REG ( screen , mpc3w_control , ( bitval < < 9 ) | m ) ;
}
}
# endif
# endif
@ -249,14 +255,12 @@ static void ics8n3qv01_set(unsigned screen, unsigned int fout)
static int osd_write_videomem ( unsigned screen , unsigned offset ,
static int osd_write_videomem ( unsigned screen , unsigned offset ,
u16 * data , size_t charcount )
u16 * data , size_t charcount )
{
{
struct ihs_fpga * fpga =
( struct ihs_fpga * ) CONFIG_SYS_FPGA_BASE ( screen ) ;
unsigned int k ;
unsigned int k ;
for ( k = 0 ; k < charcount ; + + k ) {
for ( k = 0 ; k < charcount ; + + k ) {
if ( offset + k > = BUFSIZE )
if ( offset + k > = BUFSIZE )
return - 1 ;
return - 1 ;
out_le16 ( & fpga - > videomem + offset + k , data [ k ] ) ;
FPGA_SET_REG ( screen , videomem [ offset + k ] , data [ k ] ) ;
}
}
return charcount ;
return charcount ;
@ -302,14 +306,15 @@ static int osd_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int osd_probe ( unsigned screen )
int osd_probe ( unsigned screen )
{
{
struct ihs_fpga * fpga = ( struct ihs_fpga * ) CONFIG_SYS_FPGA_BASE ( screen ) ;
u16 version ;
struct ihs_osd * osd = & fpga - > osd ;
u16 features ;
u16 version = in_le16 ( & osd - > version ) ;
u16 features = in_le16 ( & osd - > features ) ;
unsigned width ;
unsigned width ;
unsigned height ;
unsigned height ;
u8 value ;
u8 value ;
FPGA_GET_REG ( 0 , osd . version , & version ) ;
FPGA_GET_REG ( 0 , osd . features , & features ) ;
width = ( ( features & 0x3f00 ) > > 8 ) + 1 ;
width = ( ( features & 0x3f00 ) > > 8 ) + 1 ;
height = ( features & 0x001f ) + 1 ;
height = ( features & 0x001f ) + 1 ;
@ -356,12 +361,13 @@ int osd_probe(unsigned screen)
fpga_iic_write ( screen , SIL1178_MASTER_I2C_ADDRESS , 0x08 , 0x37 ) ;
fpga_iic_write ( screen , SIL1178_MASTER_I2C_ADDRESS , 0x08 , 0x37 ) ;
# endif
# endif
out_le16 ( & fpga - > videocontrol , 0x0002 ) ;
FPGA_SET_REG ( screen , videocontrol , 0x0002 ) ;
out_le16 ( & osd - > control , 0x0049 ) ;
FPGA_SET_REG ( screen , osd . control , 0x0049 ) ;
FPGA_SET_REG ( screen , osd . xy_size , ( ( 32 - 1 ) < < 8 ) | ( 16 - 1 ) ) ;
FPGA_SET_REG ( screen , osd . x_pos , 0x007f ) ;
FPGA_SET_REG ( screen , osd . y_pos , 0x005f ) ;
out_le16 ( & osd - > xy_size , ( ( 32 - 1 ) < < 8 ) | ( 16 - 1 ) ) ;
out_le16 ( & osd - > x_pos , 0x007f ) ;
out_le16 ( & osd - > y_pos , 0x005f ) ;
return 0 ;
return 0 ;
}
}