diff options
Diffstat (limited to 'drivers/ide/legacy/ide-4drives.c')
-rw-r--r-- | drivers/ide/legacy/ide-4drives.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/ide/legacy/ide-4drives.c b/drivers/ide/legacy/ide-4drives.c index ecae916a3385..89c8ff0a4d08 100644 --- a/drivers/ide/legacy/ide-4drives.c +++ b/drivers/ide/legacy/ide-4drives.c | |||
@@ -11,6 +11,21 @@ static int probe_4drives; | |||
11 | module_param_named(probe, probe_4drives, bool, 0); | 11 | module_param_named(probe, probe_4drives, bool, 0); |
12 | MODULE_PARM_DESC(probe, "probe for generic IDE chipset with 4 drives/port"); | 12 | MODULE_PARM_DESC(probe, "probe for generic IDE chipset with 4 drives/port"); |
13 | 13 | ||
14 | static void ide_4drives_init_dev(ide_drive_t *drive) | ||
15 | { | ||
16 | if (drive->hwif->channel) | ||
17 | drive->select.all ^= 0x20; | ||
18 | } | ||
19 | |||
20 | static const struct ide_port_ops ide_4drives_port_ops = { | ||
21 | .init_dev = ide_4drives_init_dev, | ||
22 | }; | ||
23 | |||
24 | static const struct ide_port_info ide_4drives_port_info = { | ||
25 | .port_ops = &ide_4drives_port_ops, | ||
26 | .host_flags = IDE_HFLAG_SERIALIZE | IDE_HFLAG_NO_DMA, | ||
27 | }; | ||
28 | |||
14 | static int __init ide_4drives_init(void) | 29 | static int __init ide_4drives_init(void) |
15 | { | 30 | { |
16 | ide_hwif_t *hwif, *mate; | 31 | ide_hwif_t *hwif, *mate; |
@@ -49,18 +64,10 @@ static int __init ide_4drives_init(void) | |||
49 | mate = ide_find_port(); | 64 | mate = ide_find_port(); |
50 | if (mate) { | 65 | if (mate) { |
51 | ide_init_port_hw(mate, &hw); | 66 | ide_init_port_hw(mate, &hw); |
52 | mate->drives[0].select.all ^= 0x20; | ||
53 | mate->drives[1].select.all ^= 0x20; | ||
54 | idx[1] = mate->index; | 67 | idx[1] = mate->index; |
55 | |||
56 | if (hwif) { | ||
57 | hwif->mate = mate; | ||
58 | mate->mate = hwif; | ||
59 | hwif->serialized = mate->serialized = 1; | ||
60 | } | ||
61 | } | 68 | } |
62 | 69 | ||
63 | ide_device_add(idx, NULL); | 70 | ide_device_add(idx, &ide_4drives_port_info); |
64 | 71 | ||
65 | return 0; | 72 | return 0; |
66 | } | 73 | } |