diff options
Diffstat (limited to 'board/matrix_vision/mvblx')
| -rw-r--r-- | board/matrix_vision/mvblx/fpga.c | 14 | ||||
| -rw-r--r-- | board/matrix_vision/mvblx/mvblx.c | 4 | ||||
| -rw-r--r-- | board/matrix_vision/mvblx/sys_eeprom.c | 24 | 
3 files changed, 39 insertions, 3 deletions
| diff --git a/board/matrix_vision/mvblx/fpga.c b/board/matrix_vision/mvblx/fpga.c index dacc13845..3fcf9685e 100644 --- a/board/matrix_vision/mvblx/fpga.c +++ b/board/matrix_vision/mvblx/fpga.c @@ -31,6 +31,7 @@  #include <ACEX1K.h>  #include <command.h>  #include <asm/gpio.h> +#include <linux/byteorder/generic.h>  #include "fpga.h"  #ifdef FPGA_DEBUG @@ -209,9 +210,20 @@ int fpga_wr_fn(const void *buf, size_t len, int flush, int cookie)  {  	unsigned char *data = (unsigned char *) buf;  	int i; +	int headerlen = len - cyclone2.size; + +	if (headerlen < 0) +		return FPGA_FAIL; +	else if (headerlen == sizeof(uint32_t)) { +		const unsigned int fpgavers_len = 11; /* '0x' + 8 hex digits + \0 */ +		char fpgavers_str[fpgavers_len]; +		snprintf(fpgavers_str, fpgavers_len, "0x%08x", +				be32_to_cpup((uint32_t*)data)); +		setenv("fpgavers", fpgavers_str); +	}  	fpga_debug("fpga_wr: buf %p / size %d\n", buf, len); -	for (i = 0; i < len; i++) +	for (i = headerlen; i < len; i++)  		_write_fpga(data[i]);  	fpga_debug("-%s\n", __func__); diff --git a/board/matrix_vision/mvblx/mvblx.c b/board/matrix_vision/mvblx/mvblx.c index f68f31221..49af384aa 100644 --- a/board/matrix_vision/mvblx/mvblx.c +++ b/board/matrix_vision/mvblx/mvblx.c @@ -106,8 +106,8 @@ void set_muxconf_regs(void)  #ifdef CONFIG_GENERIC_MMC  int board_mmc_init(bd_t *bis)  { -	omap_mmc_init(0, 0, 0); -	omap_mmc_init(1, 0, 0); +	omap_mmc_init(0, 0, 0, -1, -1); +	omap_mmc_init(1, 0, 0, -1, -1);  	return 0;  }  #endif diff --git a/board/matrix_vision/mvblx/sys_eeprom.c b/board/matrix_vision/mvblx/sys_eeprom.c index 945a36dfe..15269c6d7 100644 --- a/board/matrix_vision/mvblx/sys_eeprom.c +++ b/board/matrix_vision/mvblx/sys_eeprom.c @@ -326,10 +326,28 @@ int do_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	return 0;  } +static inline int is_portrait(void) +{ +	int i; +	unsigned int orient_index = 0; /* idx of char which determines orientation */ + +	for (i = sizeof(e.id)/sizeof(*e.id) - 1; i>=0; i--) { +		if (e.id[i] == '-') { +			orient_index = i+1; +			break; +		} +	} + +	return (orient_index && +			(e.id[orient_index] >= '5') && (e.id[orient_index] <= '8')); +} +  int mac_read_from_eeprom(void)  {  	u32 crc, crc_offset = offsetof(struct eeprom, crc);  	u32 *crcp; /* Pointer to the CRC in the data read from the EEPROM */ +#define FILENAME_LANDSCAPE "mvBlueLynx_X.rbf" +#define FILENAME_PORTRAIT "mvBlueLynx_X_sensor_cd.rbf"  	if (read_eeprom()) {  		printf("EEPROM Read failed.\n"); @@ -374,6 +392,12 @@ int mac_read_from_eeprom(void)  			setenv("serial#", serial_num);  	} +	/* decide which fpga file to load depending on orientation */ +	if (is_portrait()) +		setenv("fpgafilename", FILENAME_PORTRAIT); +	else +		setenv("fpgafilename", FILENAME_LANDSCAPE); +  	/* TODO should I calculate CRC here? */  	return 0;  } |