diff options
Diffstat (limited to 'drivers/mca')
-rw-r--r-- | drivers/mca/mca-bus.c | 28 | ||||
-rw-r--r-- | drivers/mca/mca-driver.c | 13 |
2 files changed, 30 insertions, 11 deletions
diff --git a/drivers/mca/mca-bus.c b/drivers/mca/mca-bus.c index da862e4632dd..67b8e9453b19 100644 --- a/drivers/mca/mca-bus.c +++ b/drivers/mca/mca-bus.c | |||
@@ -47,19 +47,25 @@ static int mca_bus_match (struct device *dev, struct device_driver *drv) | |||
47 | { | 47 | { |
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 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) |