i2c-s3c2410: move to using platform idtable to match devices
authorBen Dooks <ben-linux@fluff.org>
Fri, 12 Jun 2009 09:45:29 +0000 (10:45 +0100)
committerBen Dooks <ben-linux@fluff.org>
Sat, 13 Jun 2009 09:39:26 +0000 (10:39 +0100)
Change to using platform id table to match either of the two supported
platform device names in the driver. This simplifies the driver init and
exit code

Note, log messages will now be prefixed with 's3c-i2c' instead of the
driver name, so output will be of the form of:

s3c-i2c s3c2440-i2c.0: slave address 0x10

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
drivers/i2c/busses/i2c-s3c2410.c

index 1691ef0..079a312 100644 (file)
@@ -51,6 +51,11 @@ enum s3c24xx_i2c_state {
        STATE_STOP
 };
 
+enum s3c24xx_i2c_type {
+       TYPE_S3C2410,
+       TYPE_S3C2440,
+};
+
 struct s3c24xx_i2c {
        spinlock_t              lock;
        wait_queue_head_t       wait;
@@ -88,8 +93,10 @@ struct s3c24xx_i2c {
 static inline int s3c24xx_i2c_is2440(struct s3c24xx_i2c *i2c)
 {
        struct platform_device *pdev = to_platform_device(i2c->dev);
+       enum s3c24xx_i2c_type type;
 
-       return !strcmp(pdev->name, "s3c2440-i2c");
+       type = platform_get_device_id(pdev)->driver_data;
+       return type == TYPE_S3C2440;
 }
 
 /* s3c24xx_i2c_master_complete
@@ -969,52 +976,41 @@ static int s3c24xx_i2c_resume(struct platform_device *dev)
 
 /* device driver for platform bus bits */
 
-static struct platform_driver s3c2410_i2c_driver = {
-       .probe          = s3c24xx_i2c_probe,
-       .remove         = s3c24xx_i2c_remove,
-       .suspend_late   = s3c24xx_i2c_suspend_late,
-       .resume         = s3c24xx_i2c_resume,
-       .driver         = {
-               .owner  = THIS_MODULE,
-               .name   = "s3c2410-i2c",
-       },
+static struct platform_device_id s3c24xx_driver_ids[] = {
+       {
+               .name           = "s3c2410-i2c",
+               .driver_data    = TYPE_S3C2410,
+       }, {
+               .name           = "s3c2440-i2c",
+               .driver_data    = TYPE_S3C2440,
+       }, { },
 };
+MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids);
 
-static struct platform_driver s3c2440_i2c_driver = {
+static struct platform_driver s3c24xx_i2c_driver = {
        .probe          = s3c24xx_i2c_probe,
        .remove         = s3c24xx_i2c_remove,
        .suspend_late   = s3c24xx_i2c_suspend_late,
        .resume         = s3c24xx_i2c_resume,
+       .id_table       = s3c24xx_driver_ids,
        .driver         = {
                .owner  = THIS_MODULE,
-               .name   = "s3c2440-i2c",
+               .name   = "s3c-i2c",
        },
 };
 
 static int __init i2c_adap_s3c_init(void)
 {
-       int ret;
-
-       ret = platform_driver_register(&s3c2410_i2c_driver);
-       if (ret == 0) {
-               ret = platform_driver_register(&s3c2440_i2c_driver);
-               if (ret)
-                       platform_driver_unregister(&s3c2410_i2c_driver);
-       }
-
-       return ret;
+       return platform_driver_register(&s3c24xx_i2c_driver);
 }
 subsys_initcall(i2c_adap_s3c_init);
 
 static void __exit i2c_adap_s3c_exit(void)
 {
-       platform_driver_unregister(&s3c2410_i2c_driver);
-       platform_driver_unregister(&s3c2440_i2c_driver);
+       platform_driver_unregister(&s3c24xx_i2c_driver);
 }
 module_exit(i2c_adap_s3c_exit);
 
 MODULE_DESCRIPTION("S3C24XX I2C Bus driver");
 MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:s3c2410-i2c");
-MODULE_ALIAS("platform:s3c2440-i2c");