1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/kernel.h>
3 #include <linux/export.h>
6 static void ide_legacy_init_one(struct ide_hw
**hws
, struct ide_hw
*hw
,
7 u8 port_no
, const struct ide_port_info
*d
,
10 unsigned long base
, ctl
;
23 if (!request_region(base
, 8, d
->name
)) {
24 printk(KERN_ERR
"%s: I/O resource 0x%lX-0x%lX not free.\n",
25 d
->name
, base
, base
+ 7);
29 if (!request_region(ctl
, 1, d
->name
)) {
30 printk(KERN_ERR
"%s: I/O resource 0x%lX not free.\n",
32 release_region(base
, 8);
36 ide_std_init_ports(hw
, base
, ctl
);
43 int ide_legacy_device_add(const struct ide_port_info
*d
, unsigned long config
)
45 struct ide_hw hw
[2], *hws
[] = { NULL
, NULL
};
47 memset(&hw
, 0, sizeof(hw
));
49 if ((d
->host_flags
& IDE_HFLAG_QD_2ND_PORT
) == 0)
50 ide_legacy_init_one(hws
, &hw
[0], 0, d
, config
);
51 ide_legacy_init_one(hws
, &hw
[1], 1, d
, config
);
53 if (hws
[0] == NULL
&& hws
[1] == NULL
&&
54 (d
->host_flags
& IDE_HFLAG_SINGLE
))
57 return ide_host_add(d
, hws
, 2, NULL
);
59 EXPORT_SYMBOL_GPL(ide_legacy_device_add
);