Hi Linus & Bart !
This patch allows an IDE hwif to be set a "parent" field so it
can really descend from any struct device, typically the macio_device
I use on pmac, and not only a PCI device or the legacy stuff.
This should work fine as long as hwif->gendev.parent doesn't
contain junk, but so far, it seems it really only contains
NULL unless specifically set by the host driver.
Without that, the pmac driver will not appear in it's proper
location in the device tree, which is a real problem for power
management as it won't be ordered properly with it's hosting
asic (and mediabay if any), thus breaking suspend/resume.
Please apply,
Ben.
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or
higher.
# This patch includes the following deltas:
# ChangeSet 1.1138 -> 1.1139
# drivers/ide/ide-probe.c 1.56 -> 1.57
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/08/10 [email protected] 1.1139
# Allow an ide controller to have a parent that isn't the pci_dev nor
the legacy stuff
# --------------------------------------------
#
diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
--- a/drivers/ide/ide-probe.c Sun Aug 10 16:07:40 2003
+++ b/drivers/ide/ide-probe.c Sun Aug 10 16:07:40 2003
@@ -650,10 +650,12 @@
strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
snprintf(hwif->gendev.name,DEVICE_NAME_SIZE,"IDE Controller");
hwif->gendev.driver_data = hwif;
+ if (hwif->gendev.parent == NULL) {
if (hwif->pci_dev)
hwif->gendev.parent = &hwif->pci_dev->dev;
else
hwif->gendev.parent = NULL; /* Would like to do = &device_legacy */
+ }
device_register(&hwif->gendev);
}
--
Benjamin Herrenschmidt <[email protected]>
On 10 Aug 2003, Benjamin Herrenschmidt wrote:
> Hi Linus & Bart !
>
> This patch allows an IDE hwif to be set a "parent" field so it
> can really descend from any struct device, typically the macio_device
> I use on pmac, and not only a PCI device or the legacy stuff.
>
> This should work fine as long as hwif->gendev.parent doesn't
> contain junk, but so far, it seems it really only contains
> NULL unless specifically set by the host driver.
>
> Without that, the pmac driver will not appear in it's proper
> location in the device tree, which is a real problem for power
> management as it won't be ordered properly with it's hosting
> asic (and mediabay if any), thus breaking suspend/resume.
Looks good.
> Please apply,
> Ben.
Can you fix intendation, or I should do it?
> --- a/drivers/ide/ide-probe.c Sun Aug 10 16:07:40 2003
> +++ b/drivers/ide/ide-probe.c Sun Aug 10 16:07:40 2003
> @@ -650,10 +650,12 @@
> strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
> snprintf(hwif->gendev.name,DEVICE_NAME_SIZE,"IDE Controller");
> hwif->gendev.driver_data = hwif;
> + if (hwif->gendev.parent == NULL) {
> if (hwif->pci_dev)
> hwif->gendev.parent = &hwif->pci_dev->dev;
> else
> hwif->gendev.parent = NULL; /* Would like to do = &device_legacy */
> + }
> device_register(&hwif->gendev);
> }
--bartlomiej
> Looks good.
>
> > Please apply,
> > Ben.
>
> Can you fix intendation, or I should do it?
Hrm... I don't know how I fucked it up, probably when merging
between my trees. Here's the fixed version:
diff -urN linux-2.5/drivers/ide/ide-probe.c linux-2.5-benh-merge/drivers/ide/ide-probe.c
--- linux-2.5/drivers/ide/ide-probe.c 2003-08-09 11:05:27.000000000 +0200
+++ linux-2.5-benh-merge/drivers/ide/ide-probe.c 2003-08-10 22:30:14.000000000 +0200
@@ -650,10 +650,13 @@
strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
snprintf(hwif->gendev.name,DEVICE_NAME_SIZE,"IDE Controller");
hwif->gendev.driver_data = hwif;
- if (hwif->pci_dev)
- hwif->gendev.parent = &hwif->pci_dev->dev;
- else
- hwif->gendev.parent = NULL; /* Would like to do = &device_legacy */
+ if (hwif->gendev.parent == NULL) {
+ if (hwif->pci_dev)
+ hwif->gendev.parent = &hwif->pci_dev->dev;
+ else
+ /* Would like to do = &device_legacy */
+ hwif->gendev.parent = NULL;
+ }
device_register(&hwif->gendev);
}