Răsfoiți Sursa

floppy: Bus reset / auto-off fixes
1. Replace reset_bus() with do_auto_off() when changing floppy bus type.
2. Ensure motors are turned off in do_auto_off() even if !unit->initialised.

Keir Fraser 4 ani în urmă
părinte
comite
4768b831d4
3 a modificat fișierele cu 22 adăugiri și 38 ștergeri
  1. 0 6
      src/f1/floppy.c
  2. 0 8
      src/f7/floppy.c
  3. 22 24
      src/floppy.c

+ 0 - 6
src/f1/floppy.c

@@ -173,12 +173,6 @@ static uint8_t drive_motor(uint8_t nr, bool_t on)
     return ACK_OKAY;
 }
 
-static void reset_bus(void)
-{
-    write_pin(sel, FALSE);
-    write_pin(mot, FALSE);
-}
-
 static uint8_t set_user_pin(unsigned int pin, unsigned int level)
 {
     if (pin != 2)

+ 0 - 8
src/f7/floppy.c

@@ -265,14 +265,6 @@ static uint8_t drive_motor(uint8_t nr, bool_t on)
 
 }
 
-static void reset_bus(void)
-{
-    const struct pin_mapping *mpin;
-
-    for (mpin = board_config->msel_pins; mpin->pin_id != 0; mpin++)
-        gpio_write_pin(gpio_from_id(mpin->gpio_bank), mpin->gpio_pin, O_FALSE);
-}
-
 static uint8_t set_user_pin(unsigned int pin, unsigned int level)
 {
     const struct pin_mapping *upin;

+ 22 - 24
src/floppy.c

@@ -136,27 +136,6 @@ static void step_once(void)
     delay_us(delay_params.step_delay);
 }
 
-static void _set_bus_type(uint8_t type)
-{
-    bus_type = type;
-    unit_nr = -1;
-    memset(unit, 0, sizeof(unit));
-    reset_bus();
-}
-
-static bool_t set_bus_type(uint8_t type)
-{
-    if (type == bus_type)
-        return TRUE;
-
-    if (type > BUS_SHUGART)
-        return FALSE;
-
-    _set_bus_type(type);
-
-    return TRUE;
-}
-
 static uint8_t floppy_seek(int cyl)
 {
     struct unit *u;
@@ -234,10 +213,8 @@ static void do_auto_off(void)
     for (i = 0; i < ARRAY_SIZE(unit); i++) {
 
         struct unit *u = &unit[i];
-        if (!u->initialised)
-            continue;
 
-        if (u->cyl < 0) {
+        if (u->initialised && (u->cyl < 0)) {
             drive_select(i);
             floppy_seek(0);
         }
@@ -252,6 +229,27 @@ static void do_auto_off(void)
     auto_off.armed = FALSE;
 }
 
+static void _set_bus_type(uint8_t type)
+{
+    do_auto_off();
+    bus_type = type;
+    unit_nr = -1;
+    memset(unit, 0, sizeof(unit));
+}
+
+static bool_t set_bus_type(uint8_t type)
+{
+    if (type == bus_type)
+        return TRUE;
+
+    if (type > BUS_SHUGART)
+        return FALSE;
+
+    _set_bus_type(type);
+
+    return TRUE;
+}
+
 static void floppy_reset(void)
 {
     floppy_state = ST_inactive;