@@ -1704,6 +1704,23 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adap)
1704
1704
}
1705
1705
EXPORT_SYMBOL_GPL (i2c_add_numbered_adapter );
1706
1706
1707
+ static void i2c_do_del_adapter (struct i2c_driver * driver ,
1708
+ struct i2c_adapter * adapter )
1709
+ {
1710
+ struct i2c_client * client , * _n ;
1711
+
1712
+ /* Remove the devices we created ourselves as the result of hardware
1713
+ * probing (using a driver's detect method) */
1714
+ list_for_each_entry_safe (client , _n , & driver -> clients , detected ) {
1715
+ if (client -> adapter == adapter ) {
1716
+ dev_dbg (& adapter -> dev , "Removing %s at 0x%x\n" ,
1717
+ client -> name , client -> addr );
1718
+ list_del (& client -> detected );
1719
+ i2c_unregister_device (client );
1720
+ }
1721
+ }
1722
+ }
1723
+
1707
1724
static int __unregister_client (struct device * dev , void * dummy )
1708
1725
{
1709
1726
struct i2c_client * client = i2c_verify_client (dev );
@@ -1719,6 +1736,12 @@ static int __unregister_dummy(struct device *dev, void *dummy)
1719
1736
return 0 ;
1720
1737
}
1721
1738
1739
+ static int __process_removed_adapter (struct device_driver * d , void * data )
1740
+ {
1741
+ i2c_do_del_adapter (to_i2c_driver (d ), data );
1742
+ return 0 ;
1743
+ }
1744
+
1722
1745
/**
1723
1746
* i2c_del_adapter - unregister I2C adapter
1724
1747
* @adap: the adapter being unregistered
@@ -1742,6 +1765,11 @@ void i2c_del_adapter(struct i2c_adapter *adap)
1742
1765
}
1743
1766
1744
1767
i2c_acpi_remove_space_handler (adap );
1768
+ /* Tell drivers about this removal */
1769
+ mutex_lock (& core_lock );
1770
+ bus_for_each_drv (& i2c_bus_type , NULL , adap ,
1771
+ __process_removed_adapter );
1772
+ mutex_unlock (& core_lock );
1745
1773
1746
1774
/* Remove devices instantiated from sysfs */
1747
1775
mutex_lock_nested (& adap -> userspace_clients_lock ,
@@ -1760,10 +1788,8 @@ void i2c_del_adapter(struct i2c_adapter *adap)
1760
1788
* we can't remove the dummy devices during the first pass: they
1761
1789
* could have been instantiated by real devices wishing to clean
1762
1790
* them up properly, so we give them a chance to do that first. */
1763
- mutex_lock (& core_lock );
1764
1791
device_for_each_child (& adap -> dev , NULL , __unregister_client );
1765
1792
device_for_each_child (& adap -> dev , NULL , __unregister_dummy );
1766
- mutex_unlock (& core_lock );
1767
1793
1768
1794
/* device name is gone after device_unregister */
1769
1795
dev_dbg (& adap -> dev , "adapter [%s] unregistered\n" , adap -> name );
@@ -1983,6 +2009,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
1983
2009
/* add the driver to the list of i2c drivers in the driver core */
1984
2010
driver -> driver .owner = owner ;
1985
2011
driver -> driver .bus = & i2c_bus_type ;
2012
+ INIT_LIST_HEAD (& driver -> clients );
1986
2013
1987
2014
/* When registration returns, the driver core
1988
2015
* will have called probe() for all matching-but-unbound devices.
@@ -2000,13 +2027,10 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
2000
2027
}
2001
2028
EXPORT_SYMBOL (i2c_register_driver );
2002
2029
2003
- static int __i2c_unregister_detected_client (struct device * dev , void * argp )
2030
+ static int __process_removed_driver (struct device * dev , void * data )
2004
2031
{
2005
- struct i2c_client * client = i2c_verify_client (dev );
2006
-
2007
- if (client && client -> flags & I2C_CLIENT_AUTO )
2008
- i2c_unregister_device (client );
2009
-
2032
+ if (dev -> type == & i2c_adapter_type )
2033
+ i2c_do_del_adapter (data , to_i2c_adapter (dev ));
2010
2034
return 0 ;
2011
2035
}
2012
2036
@@ -2017,12 +2041,7 @@ static int __i2c_unregister_detected_client(struct device *dev, void *argp)
2017
2041
*/
2018
2042
void i2c_del_driver (struct i2c_driver * driver )
2019
2043
{
2020
- mutex_lock (& core_lock );
2021
- /* Satisfy __must_check, function can't fail */
2022
- if (driver_for_each_device (& driver -> driver , NULL , NULL ,
2023
- __i2c_unregister_detected_client )) {
2024
- }
2025
- mutex_unlock (& core_lock );
2044
+ i2c_for_each_dev (driver , __process_removed_driver );
2026
2045
2027
2046
driver_unregister (& driver -> driver );
2028
2047
pr_debug ("driver [%s] unregistered\n" , driver -> driver .name );
@@ -2449,7 +2468,6 @@ static int i2c_detect_address(struct i2c_client *temp_client,
2449
2468
/* Finally call the custom detection function */
2450
2469
memset (& info , 0 , sizeof (struct i2c_board_info ));
2451
2470
info .addr = addr ;
2452
- info .flags = I2C_CLIENT_AUTO ;
2453
2471
err = driver -> detect (temp_client , & info );
2454
2472
if (err ) {
2455
2473
/* -ENODEV is returned if the detection fails. We catch it
@@ -2476,7 +2494,9 @@ static int i2c_detect_address(struct i2c_client *temp_client,
2476
2494
dev_dbg (& adapter -> dev , "Creating %s at 0x%02x\n" ,
2477
2495
info .type , info .addr );
2478
2496
client = i2c_new_client_device (adapter , & info );
2479
- if (IS_ERR (client ))
2497
+ if (!IS_ERR (client ))
2498
+ list_add_tail (& client -> detected , & driver -> clients );
2499
+ else
2480
2500
dev_err (& adapter -> dev , "Failed creating %s at 0x%02x\n" ,
2481
2501
info .type , info .addr );
2482
2502
}
0 commit comments