OSDN Git Service

i2c: core: call of_i2c_setup_smbus_alert in i2c_register_adapter
authorPhil Reid <preid@electromag.com.au>
Thu, 24 Aug 2017 09:31:04 +0000 (17:31 +0800)
committerWolfram Sang <wsa@the-dreams.de>
Sat, 28 Oct 2017 21:42:58 +0000 (23:42 +0200)
Add a call to of_i2c_setup_smbus_alert when a i2c adapter is registered
so the the smbalert driver can be registered.

Signed-off-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/i2c-core-base.c

index 56e4658..130d22b 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/errno.h>
 #include <linux/gpio.h>
 #include <linux/i2c.h>
+#include <linux/i2c-smbus.h>
 #include <linux/idr.h>
 #include <linux/init.h>
 #include <linux/irqflags.h>
@@ -1259,6 +1260,10 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
                goto out_list;
        }
 
+       res = of_i2c_setup_smbus_alert(adap);
+       if (res)
+               goto out_reg;
+
        dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
 
        pm_runtime_no_callbacks(&adap->dev);
@@ -1290,6 +1295,10 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
 
        return 0;
 
+out_reg:
+       init_completion(&adap->dev_released);
+       device_unregister(&adap->dev);
+       wait_for_completion(&adap->dev_released);
 out_list:
        mutex_lock(&core_lock);
        idr_remove(&i2c_adapter_idr, adap->nr);