diff options
Diffstat (limited to 'drivers/ide/ide-generic.c')
-rw-r--r-- | drivers/ide/ide-generic.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/ide/ide-generic.c b/drivers/ide/ide-generic.c index 2d92214096ab..bb9fc905d60c 100644 --- a/drivers/ide/ide-generic.c +++ b/drivers/ide/ide-generic.c | |||
@@ -31,7 +31,7 @@ static ssize_t store_add(struct class *cls, const char *buf, size_t n) | |||
31 | ide_hwif_t *hwif; | 31 | ide_hwif_t *hwif; |
32 | unsigned int base, ctl; | 32 | unsigned int base, ctl; |
33 | int irq; | 33 | int irq; |
34 | hw_regs_t hw; | 34 | hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; |
35 | u8 idx[] = { 0xff, 0xff, 0xff, 0xff }; | 35 | u8 idx[] = { 0xff, 0xff, 0xff, 0xff }; |
36 | 36 | ||
37 | if (sscanf(buf, "%x:%x:%d", &base, &ctl, &irq) != 3) | 37 | if (sscanf(buf, "%x:%x:%d", &base, &ctl, &irq) != 3) |
@@ -46,11 +46,9 @@ static ssize_t store_add(struct class *cls, const char *buf, size_t n) | |||
46 | hw.irq = irq; | 46 | hw.irq = irq; |
47 | hw.chipset = ide_generic; | 47 | hw.chipset = ide_generic; |
48 | 48 | ||
49 | ide_init_port_hw(hwif, &hw); | ||
50 | |||
51 | idx[0] = hwif->index; | 49 | idx[0] = hwif->index; |
52 | 50 | ||
53 | ide_device_add(idx, NULL); | 51 | ide_device_add(idx, NULL, hws); |
54 | 52 | ||
55 | return n; | 53 | return n; |
56 | }; | 54 | }; |
@@ -90,6 +88,7 @@ static int __init ide_generic_sysfs_init(void) | |||
90 | 88 | ||
91 | static int __init ide_generic_init(void) | 89 | static int __init ide_generic_init(void) |
92 | { | 90 | { |
91 | hw_regs_t hw[MAX_HWIFS], *hws[MAX_HWIFS]; | ||
93 | u8 idx[MAX_HWIFS]; | 92 | u8 idx[MAX_HWIFS]; |
94 | int i; | 93 | int i; |
95 | 94 | ||
@@ -99,8 +98,8 @@ static int __init ide_generic_init(void) | |||
99 | for (i = 0; i < MAX_HWIFS; i++) { | 98 | for (i = 0; i < MAX_HWIFS; i++) { |
100 | ide_hwif_t *hwif; | 99 | ide_hwif_t *hwif; |
101 | unsigned long io_addr = ide_default_io_base(i); | 100 | unsigned long io_addr = ide_default_io_base(i); |
102 | hw_regs_t hw; | ||
103 | 101 | ||
102 | hws[i] = NULL; | ||
104 | idx[i] = 0xff; | 103 | idx[i] = 0xff; |
105 | 104 | ||
106 | if ((probe_mask & (1 << i)) && io_addr) { | 105 | if ((probe_mask & (1 << i)) && io_addr) { |
@@ -129,17 +128,19 @@ static int __init ide_generic_init(void) | |||
129 | continue; | 128 | continue; |
130 | } | 129 | } |
131 | 130 | ||
132 | memset(&hw, 0, sizeof(hw)); | 131 | hwif->chipset = ide_generic; |
133 | ide_std_init_ports(&hw, io_addr, io_addr + 0x206); | 132 | |
134 | hw.irq = ide_default_irq(io_addr); | 133 | memset(&hw[i], 0, sizeof(hw[i])); |
135 | hw.chipset = ide_generic; | 134 | ide_std_init_ports(&hw[i], io_addr, io_addr + 0x206); |
136 | ide_init_port_hw(hwif, &hw); | 135 | hw[i].irq = ide_default_irq(io_addr); |
136 | hw[i].chipset = ide_generic; | ||
137 | 137 | ||
138 | hws[i] = &hw[i]; | ||
138 | idx[i] = i; | 139 | idx[i] = i; |
139 | } | 140 | } |
140 | } | 141 | } |
141 | 142 | ||
142 | ide_device_add_all(idx, NULL); | 143 | ide_device_add_all(idx, NULL, hws); |
143 | 144 | ||
144 | if (ide_generic_sysfs_init()) | 145 | if (ide_generic_sysfs_init()) |
145 | printk(KERN_ERR DRV_NAME ": failed to create ide_generic " | 146 | printk(KERN_ERR DRV_NAME ": failed to create ide_generic " |