diff options
Diffstat (limited to 'drivers/ide/macide.c')
-rw-r--r-- | drivers/ide/macide.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/ide/macide.c b/drivers/ide/macide.c index 1447c8c90565..505ec43e5606 100644 --- a/drivers/ide/macide.c +++ b/drivers/ide/macide.c | |||
@@ -53,17 +53,20 @@ | |||
53 | 53 | ||
54 | volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR); | 54 | volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR); |
55 | 55 | ||
56 | int macide_ack_intr(ide_hwif_t* hwif) | 56 | int macide_test_irq(ide_hwif_t *hwif) |
57 | { | 57 | { |
58 | if (*ide_ifr & 0x20) { | 58 | if (*ide_ifr & 0x20) |
59 | *ide_ifr &= ~0x20; | ||
60 | return 1; | 59 | return 1; |
61 | } | ||
62 | return 0; | 60 | return 0; |
63 | } | 61 | } |
64 | 62 | ||
63 | static void macide_clear_irq(ide_drive_t *drive) | ||
64 | { | ||
65 | *ide_ifr &= ~0x20; | ||
66 | } | ||
67 | |||
65 | static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base, | 68 | static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base, |
66 | int irq, ide_ack_intr_t *ack_intr) | 69 | int irq) |
67 | { | 70 | { |
68 | int i; | 71 | int i; |
69 | 72 | ||
@@ -75,10 +78,15 @@ static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base, | |||
75 | hw->io_ports.ctl_addr = base + IDE_CONTROL; | 78 | hw->io_ports.ctl_addr = base + IDE_CONTROL; |
76 | 79 | ||
77 | hw->irq = irq; | 80 | hw->irq = irq; |
78 | hw->ack_intr = ack_intr; | ||
79 | } | 81 | } |
80 | 82 | ||
83 | static const struct ide_port_ops macide_port_ops = { | ||
84 | .clear_irq = macide_clear_irq, | ||
85 | .test_irq = macide_test_irq, | ||
86 | }; | ||
87 | |||
81 | static const struct ide_port_info macide_port_info = { | 88 | static const struct ide_port_info macide_port_info = { |
89 | .port_ops = &macide_port_ops, | ||
82 | .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA, | 90 | .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA, |
83 | .irq_flags = IRQF_SHARED, | 91 | .irq_flags = IRQF_SHARED, |
84 | .chipset = ide_generic, | 92 | .chipset = ide_generic, |
@@ -93,10 +101,10 @@ static const char *mac_ide_name[] = | |||
93 | 101 | ||
94 | static int __init macide_init(void) | 102 | static int __init macide_init(void) |
95 | { | 103 | { |
96 | ide_ack_intr_t *ack_intr; | ||
97 | unsigned long base; | 104 | unsigned long base; |
98 | int irq; | 105 | int irq; |
99 | struct ide_hw hw, *hws[] = { &hw }; | 106 | struct ide_hw hw, *hws[] = { &hw }; |
107 | struct ide_port_info d = macide_port_info; | ||
100 | 108 | ||
101 | if (!MACH_IS_MAC) | 109 | if (!MACH_IS_MAC) |
102 | return -ENODEV; | 110 | return -ENODEV; |
@@ -104,17 +112,15 @@ static int __init macide_init(void) | |||
104 | switch (macintosh_config->ide_type) { | 112 | switch (macintosh_config->ide_type) { |
105 | case MAC_IDE_QUADRA: | 113 | case MAC_IDE_QUADRA: |
106 | base = IDE_BASE; | 114 | base = IDE_BASE; |
107 | ack_intr = macide_ack_intr; | ||
108 | irq = IRQ_NUBUS_F; | 115 | irq = IRQ_NUBUS_F; |
109 | break; | 116 | break; |
110 | case MAC_IDE_PB: | 117 | case MAC_IDE_PB: |
111 | base = IDE_BASE; | 118 | base = IDE_BASE; |
112 | ack_intr = macide_ack_intr; | ||
113 | irq = IRQ_NUBUS_C; | 119 | irq = IRQ_NUBUS_C; |
114 | break; | 120 | break; |
115 | case MAC_IDE_BABOON: | 121 | case MAC_IDE_BABOON: |
116 | base = BABOON_BASE; | 122 | base = BABOON_BASE; |
117 | ack_intr = NULL; | 123 | d.port_ops = NULL; |
118 | irq = IRQ_BABOON_1; | 124 | irq = IRQ_BABOON_1; |
119 | break; | 125 | break; |
120 | default: | 126 | default: |
@@ -124,9 +130,9 @@ static int __init macide_init(void) | |||
124 | printk(KERN_INFO "ide: Macintosh %s IDE controller\n", | 130 | printk(KERN_INFO "ide: Macintosh %s IDE controller\n", |
125 | mac_ide_name[macintosh_config->ide_type - 1]); | 131 | mac_ide_name[macintosh_config->ide_type - 1]); |
126 | 132 | ||
127 | macide_setup_ports(&hw, base, irq, ack_intr); | 133 | macide_setup_ports(&hw, base, irq); |
128 | 134 | ||
129 | return ide_host_add(&macide_port_info, hws, 1, NULL); | 135 | return ide_host_add(&d, hws, 1, NULL); |
130 | } | 136 | } |
131 | 137 | ||
132 | module_init(macide_init); | 138 | module_init(macide_init); |