i2c: Migration aids for i2c_adapter.dev removal

Flag i2c_adapter.dev for removal after userspace tools get upgraded, and
include a near-term code migration aid to facilitate this:

 - The class device gets the name attribute it should have had.  This
   was previously (wrongly) associated with the i2c_adapter.dev node.
   Sysfs based tools and libraries can start converting right away.

 - Issue a warning for legacy adapter drivers that don't provide any
   physical device node; so systems with those drivers will know to
   fix this problem earlier.

This is one of a series of patches to help the I2C stack become a better
citizen of the Linux Driver Model world.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
David Brownell
2007-01-04 13:07:04 +01:00
committed by Jean Delvare
parent 999445d437
commit b119dc3f99
2 changed files with 41 additions and 4 deletions

View File

@@ -95,16 +95,32 @@ struct device_driver i2c_adapter_driver = {
.bus = &i2c_bus_type,
};
/* ------------------------------------------------------------------------- */
/* I2C bus adapters -- one roots each I2C or SMBUS segment */
static void i2c_adapter_class_dev_release(struct class_device *dev)
{
struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev);
complete(&adap->class_dev_released);
}
static ssize_t i2c_adapter_show_name(struct class_device *cdev, char *buf)
{
struct i2c_adapter *adap = class_dev_to_i2c_adapter(cdev);
return sprintf(buf, "%s\n", adap->name);
}
static struct class_device_attribute i2c_adapter_attrs[] = {
__ATTR(name, S_IRUGO, i2c_adapter_show_name, NULL),
{ },
};
struct class i2c_adapter_class = {
.owner = THIS_MODULE,
.name = "i2c-adapter",
.release = &i2c_adapter_class_dev_release,
.owner = THIS_MODULE,
.name = "i2c-adapter",
.class_dev_attrs = i2c_adapter_attrs,
.release = &i2c_adapter_class_dev_release,
};
static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
@@ -175,8 +191,12 @@ int i2c_add_adapter(struct i2c_adapter *adap)
* If the parent pointer is not set up,
* we add this adapter to the host bus.
*/
if (adap->dev.parent == NULL)
if (adap->dev.parent == NULL) {
adap->dev.parent = &platform_bus;
printk(KERN_WARNING "**WARNING** I2C adapter driver [%s] "
"forgot to specify physical device; fix it!\n",
adap->name);
}
sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
adap->dev.driver = &i2c_adapter_driver;
adap->dev.release = &i2c_adapter_dev_release;