diff options
Diffstat (limited to 'drivers/mca/mca-bus.c')
| -rw-r--r-- | drivers/mca/mca-bus.c | 28 | 
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/mca/mca-bus.c b/drivers/mca/mca-bus.c index da862e4632d..67b8e9453b1 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)  {  	struct mca_device *mca_dev = to_mca_device (dev);  	struct mca_driver *mca_drv = to_mca_driver (drv); -	const short *mca_ids = mca_drv->id_table; -	int i; - -	if (!mca_ids) -		return 0; - -	for(i = 0; mca_ids[i]; i++) { -		if (mca_ids[i] == mca_dev->pos_id) { -			mca_dev->index = i; -			return 1; +	const unsigned short *mca_ids = mca_drv->id_table; +	int i = 0; + +	if (mca_ids) { +		for(i = 0; mca_ids[i]; i++) { +			if (mca_ids[i] == mca_dev->pos_id) { +				mca_dev->index = i; +				return 1; +			}  		}  	} - +	/* If the integrated id is present, treat it as though it were an +	 * additional id in the id_table (it can't be because by definition, +	 * integrated id's overflow a short */ +	if (mca_drv->integrated_id && mca_dev->pos_id == +	    mca_drv->integrated_id) { +		mca_dev->index = i; +		return 1; +	}  	return 0;  }  | 
