mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-10 12:39:22 -04:00
split IVM power hooks from cmd_ide.c
Move power control code from ide_reset() into IVM-specific IDE reset code. Signed-off-by: Pavel Herrmann <morpheus.ibis@gmail.com>
This commit is contained in:
parent
8d1165e11a
commit
e4148c1165
@ -333,13 +333,59 @@ void show_boot_progress (int status)
|
|||||||
void ide_set_reset (int on)
|
void ide_set_reset (int on)
|
||||||
{
|
{
|
||||||
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
|
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
|
||||||
|
int i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configure PC for IDE Reset Pin
|
* Configure PC for IDE Reset Pin
|
||||||
*/
|
*/
|
||||||
if (on) { /* assert RESET */
|
if (on) { /* assert RESET */
|
||||||
immr->im_ioport.iop_pcdat &= ~(CONFIG_SYS_PC_IDE_RESET);
|
immr->im_ioport.iop_pcdat &= ~(CONFIG_SYS_PC_IDE_RESET);
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_PB_12V_ENABLE
|
||||||
|
/* 12V Enable output OFF */
|
||||||
|
immr->im_cpm.cp_pbdat &= ~(CONFIG_SYS_PB_12V_ENABLE);
|
||||||
|
|
||||||
|
immr->im_cpm.cp_pbpar &= ~(CONFIG_SYS_PB_12V_ENABLE);
|
||||||
|
immr->im_cpm.cp_pbodr &= ~(CONFIG_SYS_PB_12V_ENABLE);
|
||||||
|
immr->im_cpm.cp_pbdir |= CONFIG_SYS_PB_12V_ENABLE;
|
||||||
|
|
||||||
|
/* wait 500 ms for the voltage to stabilize */
|
||||||
|
for (i = 0; i < 500; ++i)
|
||||||
|
udelay(1000);
|
||||||
|
#endif /* CONFIG_SYS_PB_12V_ENABLE */
|
||||||
} else { /* release RESET */
|
} else { /* release RESET */
|
||||||
|
#ifdef CONFIG_SYS_PB_12V_ENABLE
|
||||||
|
/* 12V Enable output ON */
|
||||||
|
immr->im_cpm.cp_pbdat |= CONFIG_SYS_PB_12V_ENABLE;
|
||||||
|
#endif /* CONFIG_SYS_PB_12V_ENABLE */
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_PB_IDE_MOTOR
|
||||||
|
/* configure IDE Motor voltage monitor pin as input */
|
||||||
|
immr->im_cpm.cp_pbpar &= ~(CONFIG_SYS_PB_IDE_MOTOR);
|
||||||
|
immr->im_cpm.cp_pbodr &= ~(CONFIG_SYS_PB_IDE_MOTOR);
|
||||||
|
immr->im_cpm.cp_pbdir &= ~(CONFIG_SYS_PB_IDE_MOTOR);
|
||||||
|
|
||||||
|
/* wait up to 1 s for the motor voltage to stabilize */
|
||||||
|
for (i = 0; i < 1000; ++i) {
|
||||||
|
if ((immr->im_cpm.cp_pbdat
|
||||||
|
& CONFIG_SYS_PB_IDE_MOTOR) != 0)
|
||||||
|
break;
|
||||||
|
udelay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 1000) { /* Timeout */
|
||||||
|
printf("\nWarning: 5V for IDE Motor missing\n");
|
||||||
|
#ifdef CONFIG_STATUS_LED
|
||||||
|
#ifdef STATUS_LED_YELLOW
|
||||||
|
status_led_set(STATUS_LED_YELLOW, STATUS_LED_ON);
|
||||||
|
#endif
|
||||||
|
#ifdef STATUS_LED_GREEN
|
||||||
|
status_led_set(STATUS_LED_GREEN, STATUS_LED_OFF);
|
||||||
|
#endif
|
||||||
|
#endif /* CONFIG_STATUS_LED */
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_SYS_PB_IDE_MOTOR */
|
||||||
|
|
||||||
immr->im_ioport.iop_pcdat |= CONFIG_SYS_PC_IDE_RESET;
|
immr->im_ioport.iop_pcdat |= CONFIG_SYS_PC_IDE_RESET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1169,9 +1169,6 @@ extern void ide_set_reset(int idereset);
|
|||||||
|
|
||||||
static void ide_reset(void)
|
static void ide_reset(void)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_SYS_PB_12V_ENABLE) || defined(CONFIG_SYS_PB_IDE_MOTOR)
|
|
||||||
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
|
|
||||||
#endif
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
curr_device = -1;
|
curr_device = -1;
|
||||||
@ -1187,51 +1184,6 @@ static void ide_reset(void)
|
|||||||
|
|
||||||
WATCHDOG_RESET();
|
WATCHDOG_RESET();
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_PB_12V_ENABLE
|
|
||||||
/* 12V Enable output OFF */
|
|
||||||
immr->im_cpm.cp_pbdat &= ~(CONFIG_SYS_PB_12V_ENABLE);
|
|
||||||
|
|
||||||
immr->im_cpm.cp_pbpar &= ~(CONFIG_SYS_PB_12V_ENABLE);
|
|
||||||
immr->im_cpm.cp_pbodr &= ~(CONFIG_SYS_PB_12V_ENABLE);
|
|
||||||
immr->im_cpm.cp_pbdir |= CONFIG_SYS_PB_12V_ENABLE;
|
|
||||||
|
|
||||||
/* wait 500 ms for the voltage to stabilize */
|
|
||||||
for (i = 0; i < 500; ++i)
|
|
||||||
udelay(1000);
|
|
||||||
|
|
||||||
/* 12V Enable output ON */
|
|
||||||
immr->im_cpm.cp_pbdat |= CONFIG_SYS_PB_12V_ENABLE;
|
|
||||||
#endif /* CONFIG_SYS_PB_12V_ENABLE */
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_PB_IDE_MOTOR
|
|
||||||
/* configure IDE Motor voltage monitor pin as input */
|
|
||||||
immr->im_cpm.cp_pbpar &= ~(CONFIG_SYS_PB_IDE_MOTOR);
|
|
||||||
immr->im_cpm.cp_pbodr &= ~(CONFIG_SYS_PB_IDE_MOTOR);
|
|
||||||
immr->im_cpm.cp_pbdir &= ~(CONFIG_SYS_PB_IDE_MOTOR);
|
|
||||||
|
|
||||||
/* wait up to 1 s for the motor voltage to stabilize */
|
|
||||||
for (i = 0; i < 1000; ++i) {
|
|
||||||
if ((immr->im_cpm.cp_pbdat & CONFIG_SYS_PB_IDE_MOTOR) != 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
udelay(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == 1000) { /* Timeout */
|
|
||||||
printf("\nWarning: 5V for IDE Motor missing\n");
|
|
||||||
#ifdef CONFIG_STATUS_LED
|
|
||||||
#ifdef STATUS_LED_YELLOW
|
|
||||||
status_led_set(STATUS_LED_YELLOW, STATUS_LED_ON);
|
|
||||||
#endif
|
|
||||||
#ifdef STATUS_LED_GREEN
|
|
||||||
status_led_set(STATUS_LED_GREEN, STATUS_LED_OFF);
|
|
||||||
#endif
|
|
||||||
#endif /* CONFIG_STATUS_LED */
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_SYS_PB_IDE_MOTOR */
|
|
||||||
|
|
||||||
WATCHDOG_RESET();
|
|
||||||
|
|
||||||
/* de-assert RESET signal */
|
/* de-assert RESET signal */
|
||||||
ide_set_reset(0);
|
ide_set_reset(0);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user