@@ -1696,23 +1696,6 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adap)
1696
1696
}
1697
1697
EXPORT_SYMBOL_GPL (i2c_add_numbered_adapter );
1698
1698
1699
- static void i2c_do_del_adapter (struct i2c_driver * driver ,
1700
- struct i2c_adapter * adapter )
1701
- {
1702
- struct i2c_client * client , * _n ;
1703
-
1704
- /* Remove the devices we created ourselves as the result of hardware
1705
- * probing (using a driver's detect method) */
1706
- list_for_each_entry_safe (client , _n , & driver -> clients , detected ) {
1707
- if (client -> adapter == adapter ) {
1708
- dev_dbg (& adapter -> dev , "Removing %s at 0x%x\n" ,
1709
- client -> name , client -> addr );
1710
- list_del (& client -> detected );
1711
- i2c_unregister_device (client );
1712
- }
1713
- }
1714
- }
1715
-
1716
1699
static int __unregister_client (struct device * dev , void * dummy )
1717
1700
{
1718
1701
struct i2c_client * client = i2c_verify_client (dev );
@@ -1728,12 +1711,6 @@ static int __unregister_dummy(struct device *dev, void *dummy)
1728
1711
return 0 ;
1729
1712
}
1730
1713
1731
- static int __process_removed_adapter (struct device_driver * d , void * data )
1732
- {
1733
- i2c_do_del_adapter (to_i2c_driver (d ), data );
1734
- return 0 ;
1735
- }
1736
-
1737
1714
/**
1738
1715
* i2c_del_adapter - unregister I2C adapter
1739
1716
* @adap: the adapter being unregistered
@@ -1757,11 +1734,6 @@ void i2c_del_adapter(struct i2c_adapter *adap)
1757
1734
}
1758
1735
1759
1736
i2c_acpi_remove_space_handler (adap );
1760
- /* Tell drivers about this removal */
1761
- mutex_lock (& core_lock );
1762
- bus_for_each_drv (& i2c_bus_type , NULL , adap ,
1763
- __process_removed_adapter );
1764
- mutex_unlock (& core_lock );
1765
1737
1766
1738
/* Remove devices instantiated from sysfs */
1767
1739
mutex_lock_nested (& adap -> userspace_clients_lock ,
@@ -1780,8 +1752,10 @@ void i2c_del_adapter(struct i2c_adapter *adap)
1780
1752
* we can't remove the dummy devices during the first pass: they
1781
1753
* could have been instantiated by real devices wishing to clean
1782
1754
* them up properly, so we give them a chance to do that first. */
1755
+ mutex_lock (& core_lock );
1783
1756
device_for_each_child (& adap -> dev , NULL , __unregister_client );
1784
1757
device_for_each_child (& adap -> dev , NULL , __unregister_dummy );
1758
+ mutex_unlock (& core_lock );
1785
1759
1786
1760
/* device name is gone after device_unregister */
1787
1761
dev_dbg (& adap -> dev , "adapter [%s] unregistered\n" , adap -> name );
@@ -2001,7 +1975,6 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
2001
1975
/* add the driver to the list of i2c drivers in the driver core */
2002
1976
driver -> driver .owner = owner ;
2003
1977
driver -> driver .bus = & i2c_bus_type ;
2004
- INIT_LIST_HEAD (& driver -> clients );
2005
1978
2006
1979
/* When registration returns, the driver core
2007
1980
* will have called probe() for all matching-but-unbound devices.
@@ -2019,10 +1992,13 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
2019
1992
}
2020
1993
EXPORT_SYMBOL (i2c_register_driver );
2021
1994
2022
- static int __process_removed_driver (struct device * dev , void * data )
1995
+ static int __i2c_unregister_detected_client (struct device * dev , void * argp )
2023
1996
{
2024
- if (dev -> type == & i2c_adapter_type )
2025
- i2c_do_del_adapter (data , to_i2c_adapter (dev ));
1997
+ struct i2c_client * client = i2c_verify_client (dev );
1998
+
1999
+ if (client && client -> flags & I2C_CLIENT_AUTO )
2000
+ i2c_unregister_device (client );
2001
+
2026
2002
return 0 ;
2027
2003
}
2028
2004
@@ -2033,7 +2009,12 @@ static int __process_removed_driver(struct device *dev, void *data)
2033
2009
*/
2034
2010
void i2c_del_driver (struct i2c_driver * driver )
2035
2011
{
2036
- i2c_for_each_dev (driver , __process_removed_driver );
2012
+ mutex_lock (& core_lock );
2013
+ /* Satisfy __must_check, function can't fail */
2014
+ if (driver_for_each_device (& driver -> driver , NULL , NULL ,
2015
+ __i2c_unregister_detected_client )) {
2016
+ }
2017
+ mutex_unlock (& core_lock );
2037
2018
2038
2019
driver_unregister (& driver -> driver );
2039
2020
pr_debug ("driver [%s] unregistered\n" , driver -> driver .name );
@@ -2460,6 +2441,7 @@ static int i2c_detect_address(struct i2c_client *temp_client,
2460
2441
/* Finally call the custom detection function */
2461
2442
memset (& info , 0 , sizeof (struct i2c_board_info ));
2462
2443
info .addr = addr ;
2444
+ info .flags = I2C_CLIENT_AUTO ;
2463
2445
err = driver -> detect (temp_client , & info );
2464
2446
if (err ) {
2465
2447
/* -ENODEV is returned if the detection fails. We catch it
@@ -2486,9 +2468,7 @@ static int i2c_detect_address(struct i2c_client *temp_client,
2486
2468
dev_dbg (& adapter -> dev , "Creating %s at 0x%02x\n" ,
2487
2469
info .type , info .addr );
2488
2470
client = i2c_new_client_device (adapter , & info );
2489
- if (!IS_ERR (client ))
2490
- list_add_tail (& client -> detected , & driver -> clients );
2491
- else
2471
+ if (IS_ERR (client ))
2492
2472
dev_err (& adapter -> dev , "Failed creating %s at 0x%02x\n" ,
2493
2473
info .type , info .addr );
2494
2474
}
0 commit comments