diff options
Diffstat (limited to 'arch/blackfin/lib/post.c')
| -rw-r--r-- | arch/blackfin/lib/post.c | 85 | 
1 files changed, 85 insertions, 0 deletions
diff --git a/arch/blackfin/lib/post.c b/arch/blackfin/lib/post.c new file mode 100644 index 000000000..b3c5fab57 --- /dev/null +++ b/arch/blackfin/lib/post.c @@ -0,0 +1,85 @@ +/* + * Blackfin POST code + * + * Copyright (c) 2005-2011 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include <common.h> +#include <config.h> +#include <post.h> + +#include <asm/gpio.h> + +#if CONFIG_POST & CONFIG_SYS_POST_BSPEC1 +int led_post_test(int flags) +{ +	unsigned leds[] = { CONFIG_POST_BSPEC1_GPIO_LEDS }; +	int i; + +	/* First turn them all off */ +	for (i = 0; i < ARRAY_SIZE(leds); ++i) { +		if (gpio_request(leds[i], "post")) { +			printf("could not request gpio %u\n", leds[i]); +			continue; +		} +		gpio_direction_output(leds[i], 0); +	} + +	/* Now turn them on one by one */ +	for (i = 0; i < ARRAY_SIZE(leds); ++i) { +		printf("LED%i on", i + 1); +		gpio_set_value(leds[i], 1); +		udelay(1000000); +		printf("\b\b\b\b\b\b\b"); +		gpio_free(leds[i]); +	} + +	return 0; +} +#endif + +#if CONFIG_POST & CONFIG_SYS_POST_BSPEC2 +int button_post_test(int flags) +{ +	unsigned buttons[] = { CONFIG_POST_BSPEC2_GPIO_BUTTONS }; +	unsigned int sws[] = { CONFIG_POST_BSPEC2_GPIO_NAMES }; +	int i, delay = 5; +	unsigned short value = 0; +	int result = 0; + +	for (i = 0; i < ARRAY_SIZE(buttons); ++i) { +		if (gpio_request(buttons[i], "post")) { +			printf("could not request gpio %u\n", buttons[i]); +			continue; +		} +		gpio_direction_input(buttons[i]); + +		delay = 5; +		printf("\n--------Press SW%i: %2d ", sws[i], delay); +		while (delay--) { +			int j; +			for (j = 0; j < 100; j++) { +				value = gpio_get_value(buttons[i]); +				if (value != 0) +					break; +				udelay(10000); +			} +			printf("\b\b\b%2d ", delay); +		} +		if (value != 0) +			puts("\b\bOK"); +		else { +			result = -1; +			puts("\b\bfailed"); +		} + +		gpio_free(buttons[i]); +	} + +	puts("\n"); + +	return result; +} +#endif  |