@@ -156,8 +156,6 @@ static int cdx_unregister_device(struct device *dev,
156156 } else {
157157 cdx_destroy_res_attr (cdx_dev , MAX_CDX_DEV_RESOURCES );
158158 debugfs_remove_recursive (cdx_dev -> debugfs_dir );
159- kfree (cdx_dev -> driver_override );
160- cdx_dev -> driver_override = NULL ;
161159 }
162160
163161 /*
@@ -268,14 +266,16 @@ static int cdx_bus_match(struct device *dev, const struct device_driver *drv)
268266 const struct cdx_driver * cdx_drv = to_cdx_driver (drv );
269267 const struct cdx_device_id * found_id = NULL ;
270268 const struct cdx_device_id * ids ;
269+ int ret ;
271270
272271 if (cdx_dev -> is_bus )
273272 return false;
274273
275274 ids = cdx_drv -> match_id_table ;
276275
277276 /* When driver_override is set, only bind to the matching driver */
278- if (cdx_dev -> driver_override && strcmp (cdx_dev -> driver_override , drv -> name ))
277+ ret = device_match_driver_override (dev , drv );
278+ if (ret == 0 )
279279 return false;
280280
281281 found_id = cdx_match_id (ids , cdx_dev );
@@ -289,7 +289,7 @@ static int cdx_bus_match(struct device *dev, const struct device_driver *drv)
289289 */
290290 if (!found_id -> override_only )
291291 return true;
292- if (cdx_dev -> driver_override )
292+ if (ret > 0 )
293293 return true;
294294
295295 ids = found_id + 1 ;
@@ -453,36 +453,6 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
453453}
454454static DEVICE_ATTR_RO (modalias );
455455
456- static ssize_t driver_override_store (struct device * dev ,
457- struct device_attribute * attr ,
458- const char * buf , size_t count )
459- {
460- struct cdx_device * cdx_dev = to_cdx_device (dev );
461- int ret ;
462-
463- if (WARN_ON (dev -> bus != & cdx_bus_type ))
464- return - EINVAL ;
465-
466- ret = driver_set_override (dev , & cdx_dev -> driver_override , buf , count );
467- if (ret )
468- return ret ;
469-
470- return count ;
471- }
472-
473- static ssize_t driver_override_show (struct device * dev ,
474- struct device_attribute * attr , char * buf )
475- {
476- struct cdx_device * cdx_dev = to_cdx_device (dev );
477- ssize_t len ;
478-
479- device_lock (dev );
480- len = sysfs_emit (buf , "%s\n" , cdx_dev -> driver_override );
481- device_unlock (dev );
482- return len ;
483- }
484- static DEVICE_ATTR_RW (driver_override );
485-
486456static ssize_t enable_store (struct device * dev , struct device_attribute * attr ,
487457 const char * buf , size_t count )
488458{
@@ -552,7 +522,6 @@ static struct attribute *cdx_dev_attrs[] = {
552522 & dev_attr_class .attr ,
553523 & dev_attr_revision .attr ,
554524 & dev_attr_modalias .attr ,
555- & dev_attr_driver_override .attr ,
556525 NULL ,
557526};
558527
@@ -646,6 +615,7 @@ ATTRIBUTE_GROUPS(cdx_bus);
646615
647616const struct bus_type cdx_bus_type = {
648617 .name = "cdx" ,
618+ .driver_override = true,
649619 .match = cdx_bus_match ,
650620 .probe = cdx_probe ,
651621 .remove = cdx_remove ,
0 commit comments