aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/legacy/buddha.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/legacy/buddha.c')
-rw-r--r--drivers/ide/legacy/buddha.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/drivers/ide/legacy/buddha.c b/drivers/ide/legacy/buddha.c
index 4a0be251a05f..74d28e058f55 100644
--- a/drivers/ide/legacy/buddha.c
+++ b/drivers/ide/legacy/buddha.c
@@ -112,6 +112,7 @@ typedef enum BuddhaType_Enum {
BOARD_BUDDHA, BOARD_CATWEASEL, BOARD_XSURF
} BuddhaType;
+static const char *buddha_board_name[] = { "Buddha", "Catweasel", "X-Surf" };
/*
* Check and acknowledge the interrupt status
@@ -143,11 +144,11 @@ static int xsurf_ack_intr(ide_hwif_t *hwif)
* Probe for a Buddha or Catweasel IDE interface
*/
-void __init buddha_init(void)
+static int __init buddha_init(void)
{
hw_regs_t hw;
ide_hwif_t *hwif;
- int i, index;
+ int i;
struct zorro_dev *z = NULL;
u_long buddha_board = 0;
@@ -156,6 +157,8 @@ void __init buddha_init(void)
while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
unsigned long board;
+ u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
+
if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) {
buddha_num_hwifs = BUDDHA_NUM_HWIFS;
type=BOARD_BUDDHA;
@@ -195,7 +198,10 @@ fail_base2:
/* X-Surf doesn't have this. IRQs are always on */
if (type != BOARD_XSURF)
z_writeb(0, buddha_board+BUDDHA_IRQ_MR);
-
+
+ printk(KERN_INFO "ide: %s IDE controller\n",
+ buddha_board_name[type]);
+
for(i=0;i<buddha_num_hwifs;i++) {
if(type != BOARD_XSURF) {
ide_setup_ports(&hw, (buddha_board+buddha_bases[i]),
@@ -213,23 +219,23 @@ fail_base2:
IRQ_AMIGA_PORTS);
}
- index = ide_register_hw(&hw, NULL, 1, &hwif);
- if (index != -1) {
+ hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+ if (hwif) {
+ u8 index = hwif->index;
+
+ ide_init_port_data(hwif, index);
+ ide_init_port_hw(hwif, &hw);
+
hwif->mmio = 1;
- printk("ide%d: ", index);
- switch(type) {
- case BOARD_BUDDHA:
- printk("Buddha");
- break;
- case BOARD_CATWEASEL:
- printk("Catweasel");
- break;
- case BOARD_XSURF:
- printk("X-Surf");
- break;
- }
- printk(" IDE interface\n");
- }
+
+ idx[i] = index;
+ }
}
+
+ ide_device_add(idx);
}
+
+ return 0;
}
+
+module_init(buddha_init);