diff options
-rw-r--r-- | drivers/i2c/busses/i2c-s3c2410.c | 48 |
1 files changed, 22 insertions, 26 deletions
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 1691ef0f1ee1..079a312d36fd 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
@@ -51,6 +51,11 @@ enum s3c24xx_i2c_state { | |||
51 | STATE_STOP | 51 | STATE_STOP |
52 | }; | 52 | }; |
53 | 53 | ||
54 | enum s3c24xx_i2c_type { | ||
55 | TYPE_S3C2410, | ||
56 | TYPE_S3C2440, | ||
57 | }; | ||
58 | |||
54 | struct s3c24xx_i2c { | 59 | struct s3c24xx_i2c { |
55 | spinlock_t lock; | 60 | spinlock_t lock; |
56 | wait_queue_head_t wait; | 61 | wait_queue_head_t wait; |
@@ -88,8 +93,10 @@ struct s3c24xx_i2c { | |||
88 | static inline int s3c24xx_i2c_is2440(struct s3c24xx_i2c *i2c) | 93 | static inline int s3c24xx_i2c_is2440(struct s3c24xx_i2c *i2c) |
89 | { | 94 | { |
90 | struct platform_device *pdev = to_platform_device(i2c->dev); | 95 | struct platform_device *pdev = to_platform_device(i2c->dev); |
96 | enum s3c24xx_i2c_type type; | ||
91 | 97 | ||
92 | return !strcmp(pdev->name, "s3c2440-i2c"); | 98 | type = platform_get_device_id(pdev)->driver_data; |
99 | return type == TYPE_S3C2440; | ||
93 | } | 100 | } |
94 | 101 | ||
95 | /* s3c24xx_i2c_master_complete | 102 | /* s3c24xx_i2c_master_complete |
@@ -969,52 +976,41 @@ static int s3c24xx_i2c_resume(struct platform_device *dev) | |||
969 | 976 | ||
970 | /* device driver for platform bus bits */ | 977 | /* device driver for platform bus bits */ |
971 | 978 | ||
972 | static struct platform_driver s3c2410_i2c_driver = { | 979 | static struct platform_device_id s3c24xx_driver_ids[] = { |
973 | .probe = s3c24xx_i2c_probe, | 980 | { |
974 | .remove = s3c24xx_i2c_remove, | 981 | .name = "s3c2410-i2c", |
975 | .suspend_late = s3c24xx_i2c_suspend_late, | 982 | .driver_data = TYPE_S3C2410, |
976 | .resume = s3c24xx_i2c_resume, | 983 | }, { |
977 | .driver = { | 984 | .name = "s3c2440-i2c", |
978 | .owner = THIS_MODULE, | 985 | .driver_data = TYPE_S3C2440, |
979 | .name = "s3c2410-i2c", | 986 | }, { }, |
980 | }, | ||
981 | }; | 987 | }; |
988 | MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids); | ||
982 | 989 | ||
983 | static struct platform_driver s3c2440_i2c_driver = { | 990 | static struct platform_driver s3c24xx_i2c_driver = { |
984 | .probe = s3c24xx_i2c_probe, | 991 | .probe = s3c24xx_i2c_probe, |
985 | .remove = s3c24xx_i2c_remove, | 992 | .remove = s3c24xx_i2c_remove, |
986 | .suspend_late = s3c24xx_i2c_suspend_late, | 993 | .suspend_late = s3c24xx_i2c_suspend_late, |
987 | .resume = s3c24xx_i2c_resume, | 994 | .resume = s3c24xx_i2c_resume, |
995 | .id_table = s3c24xx_driver_ids, | ||
988 | .driver = { | 996 | .driver = { |
989 | .owner = THIS_MODULE, | 997 | .owner = THIS_MODULE, |
990 | .name = "s3c2440-i2c", | 998 | .name = "s3c-i2c", |
991 | }, | 999 | }, |
992 | }; | 1000 | }; |
993 | 1001 | ||
994 | static int __init i2c_adap_s3c_init(void) | 1002 | static int __init i2c_adap_s3c_init(void) |
995 | { | 1003 | { |
996 | int ret; | 1004 | return platform_driver_register(&s3c24xx_i2c_driver); |
997 | |||
998 | ret = platform_driver_register(&s3c2410_i2c_driver); | ||
999 | if (ret == 0) { | ||
1000 | ret = platform_driver_register(&s3c2440_i2c_driver); | ||
1001 | if (ret) | ||
1002 | platform_driver_unregister(&s3c2410_i2c_driver); | ||
1003 | } | ||
1004 | |||
1005 | return ret; | ||
1006 | } | 1005 | } |
1007 | subsys_initcall(i2c_adap_s3c_init); | 1006 | subsys_initcall(i2c_adap_s3c_init); |
1008 | 1007 | ||
1009 | static void __exit i2c_adap_s3c_exit(void) | 1008 | static void __exit i2c_adap_s3c_exit(void) |
1010 | { | 1009 | { |
1011 | platform_driver_unregister(&s3c2410_i2c_driver); | 1010 | platform_driver_unregister(&s3c24xx_i2c_driver); |
1012 | platform_driver_unregister(&s3c2440_i2c_driver); | ||
1013 | } | 1011 | } |
1014 | module_exit(i2c_adap_s3c_exit); | 1012 | module_exit(i2c_adap_s3c_exit); |
1015 | 1013 | ||
1016 | MODULE_DESCRIPTION("S3C24XX I2C Bus driver"); | 1014 | MODULE_DESCRIPTION("S3C24XX I2C Bus driver"); |
1017 | MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); | 1015 | MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); |
1018 | MODULE_LICENSE("GPL"); | 1016 | MODULE_LICENSE("GPL"); |
1019 | MODULE_ALIAS("platform:s3c2410-i2c"); | ||
1020 | MODULE_ALIAS("platform:s3c2440-i2c"); | ||