diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 2f31fb5..80235db 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -75,6 +75,12 @@ static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver); static struct static_key i2c_trace_msg = STATIC_KEY_INIT_FALSE; static bool is_registered; +bool is_i2c_registered(void) +{ + return is_registered; +} +EXPORT_SYMBOL(is_i2c_registered); + void i2c_transfer_trace_reg(void) { static_key_slow_inc(&i2c_trace_msg); diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c index 0b1108d..1939827 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c @@ -620,6 +620,9 @@ static int __init i2c_dev_init(void) printk(KERN_INFO "i2c /dev entries driver\n"); + if (!is_i2c_registered()) + return -EAGAIN; + res = register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops); if (res) goto out; diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 200cf13b..24b42ff 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -36,6 +36,7 @@ extern struct bus_type i2c_bus_type; extern struct device_type i2c_adapter_type; +bool is_i2c_registered(void); /* --- General options ------------------------------------------------ */