diff options
-rw-r--r-- | drivers/mca/mca-bus.c | 26 | ||||
-rw-r--r-- | drivers/mca/mca-driver.c | 13 | ||||
-rw-r--r-- | include/linux/mca.h | 2 |
3 files changed, 31 insertions, 10 deletions
diff --git a/drivers/mca/mca-bus.c b/drivers/mca/mca-bus.c index a70fe00aea16..67b8e9453b19 100644 --- a/drivers/mca/mca-bus.c +++ b/drivers/mca/mca-bus.c | |||
@@ -48,18 +48,24 @@ static int mca_bus_match (struct device *dev, struct device_driver *drv) | |||
48 | struct mca_device *mca_dev = to_mca_device (dev); | 48 | struct mca_device *mca_dev = to_mca_device (dev); |
49 | struct mca_driver *mca_drv = to_mca_driver (drv); | 49 | struct mca_driver *mca_drv = to_mca_driver (drv); |
50 | const unsigned short *mca_ids = mca_drv->id_table; | 50 | const unsigned short *mca_ids = mca_drv->id_table; |
51 | int i; | 51 | int i = 0; |
52 | 52 | ||
53 | if (!mca_ids) | 53 | if (mca_ids) { |
54 | return 0; | 54 | for(i = 0; mca_ids[i]; i++) { |
55 | 55 | if (mca_ids[i] == mca_dev->pos_id) { | |
56 | for(i = 0; mca_ids[i]; i++) { | 56 | mca_dev->index = i; |
57 | if (mca_ids[i] == mca_dev->pos_id) { | 57 | return 1; |
58 | mca_dev->index = i; | 58 | } |
59 | return 1; | ||
60 | } | 59 | } |
61 | } | 60 | } |
62 | 61 | /* If the integrated id is present, treat it as though it were an | |
62 | * additional id in the id_table (it can't be because by definition, | ||
63 | * integrated id's overflow a short */ | ||
64 | if (mca_drv->integrated_id && mca_dev->pos_id == | ||
65 | mca_drv->integrated_id) { | ||
66 | mca_dev->index = i; | ||
67 | return 1; | ||
68 | } | ||
63 | return 0; | 69 | return 0; |
64 | } | 70 | } |
65 | 71 | ||
diff --git a/drivers/mca/mca-driver.c b/drivers/mca/mca-driver.c index 2223466b3d8a..32cd39bcc715 100644 --- a/drivers/mca/mca-driver.c +++ b/drivers/mca/mca-driver.c | |||
@@ -36,12 +36,25 @@ int mca_register_driver(struct mca_driver *mca_drv) | |||
36 | mca_drv->driver.bus = &mca_bus_type; | 36 | mca_drv->driver.bus = &mca_bus_type; |
37 | if ((r = driver_register(&mca_drv->driver)) < 0) | 37 | if ((r = driver_register(&mca_drv->driver)) < 0) |
38 | return r; | 38 | return r; |
39 | mca_drv->integrated_id = 0; | ||
39 | } | 40 | } |
40 | 41 | ||
41 | return 0; | 42 | return 0; |
42 | } | 43 | } |
43 | EXPORT_SYMBOL(mca_register_driver); | 44 | EXPORT_SYMBOL(mca_register_driver); |
44 | 45 | ||
46 | int mca_register_driver_integrated(struct mca_driver *mca_driver, | ||
47 | int integrated_id) | ||
48 | { | ||
49 | int r = mca_register_driver(mca_driver); | ||
50 | |||
51 | if (!r) | ||
52 | mca_driver->integrated_id = integrated_id; | ||
53 | |||
54 | return r; | ||
55 | } | ||
56 | EXPORT_SYMBOL(mca_register_driver_integrated); | ||
57 | |||
45 | void mca_unregister_driver(struct mca_driver *mca_drv) | 58 | void mca_unregister_driver(struct mca_driver *mca_drv) |
46 | { | 59 | { |
47 | if (MCA_bus) | 60 | if (MCA_bus) |
diff --git a/include/linux/mca.h b/include/linux/mca.h index 5cff2923092b..37972704617f 100644 --- a/include/linux/mca.h +++ b/include/linux/mca.h | |||
@@ -94,6 +94,7 @@ struct mca_bus { | |||
94 | struct mca_driver { | 94 | struct mca_driver { |
95 | const short *id_table; | 95 | const short *id_table; |
96 | void *driver_data; | 96 | void *driver_data; |
97 | int integrated_id; | ||
97 | struct device_driver driver; | 98 | struct device_driver driver; |
98 | }; | 99 | }; |
99 | #define to_mca_driver(mdriver) container_of(mdriver, struct mca_driver, driver) | 100 | #define to_mca_driver(mdriver) container_of(mdriver, struct mca_driver, driver) |
@@ -125,6 +126,7 @@ extern enum MCA_AdapterStatus mca_device_status(struct mca_device *mca_dev); | |||
125 | extern struct bus_type mca_bus_type; | 126 | extern struct bus_type mca_bus_type; |
126 | 127 | ||
127 | extern int mca_register_driver(struct mca_driver *drv); | 128 | extern int mca_register_driver(struct mca_driver *drv); |
129 | extern int mca_register_driver_integrated(struct mca_driver *, int); | ||
128 | extern void mca_unregister_driver(struct mca_driver *drv); | 130 | extern void mca_unregister_driver(struct mca_driver *drv); |
129 | 131 | ||
130 | /* WARNING: only called by the boot time device setup */ | 132 | /* WARNING: only called by the boot time device setup */ |