|
@@ -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");
|