|
@@ -279,7 +279,7 @@ static void hga_blank(int blank_mode)
|
|
|
|
|
|
static int __init hga_card_detect(void)
|
|
|
{
|
|
|
- int count=0;
|
|
|
+ int count = 0;
|
|
|
void __iomem *p, *q;
|
|
|
unsigned short p_save, q_save;
|
|
|
|
|
@@ -303,20 +303,18 @@ static int __init hga_card_detect(void)
|
|
|
writew(0x55aa, p); if (readw(p) == 0x55aa) count++;
|
|
|
writew(p_save, p);
|
|
|
|
|
|
- if (count != 2) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ if (count != 2)
|
|
|
+ goto error;
|
|
|
|
|
|
/* Ok, there is definitely a card registering at the correct
|
|
|
* memory location, so now we do an I/O port test.
|
|
|
*/
|
|
|
|
|
|
- if (!test_hga_b(0x66, 0x0f)) { /* cursor low register */
|
|
|
- return 0;
|
|
|
- }
|
|
|
- if (!test_hga_b(0x99, 0x0f)) { /* cursor low register */
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ if (!test_hga_b(0x66, 0x0f)) /* cursor low register */
|
|
|
+ goto error;
|
|
|
+
|
|
|
+ if (!test_hga_b(0x99, 0x0f)) /* cursor low register */
|
|
|
+ goto error;
|
|
|
|
|
|
/* See if the card is a Hercules, by checking whether the vsync
|
|
|
* bit of the status register is changing. This test lasts for
|
|
@@ -331,7 +329,7 @@ static int __init hga_card_detect(void)
|
|
|
}
|
|
|
|
|
|
if (p_save == q_save)
|
|
|
- return 0;
|
|
|
+ goto error;
|
|
|
|
|
|
switch (inb_p(HGA_STATUS_PORT) & 0x70) {
|
|
|
case 0x10:
|
|
@@ -348,6 +346,12 @@ static int __init hga_card_detect(void)
|
|
|
break;
|
|
|
}
|
|
|
return 1;
|
|
|
+error:
|
|
|
+ if (release_io_ports)
|
|
|
+ release_region(0x3b0, 12);
|
|
|
+ if (release_io_port)
|
|
|
+ release_region(0x3bf, 1);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|