Commit 7d85ccd8 authored by Ben Dooks's avatar Ben Dooks

i2c-s3c2410: move to using platform idtable to match devices

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: default avatarBen Dooks <ben-linux@fluff.org>
parent 84bf2c86
...@@ -51,6 +51,11 @@ enum s3c24xx_i2c_state { ...@@ -51,6 +51,11 @@ enum s3c24xx_i2c_state {
STATE_STOP STATE_STOP
}; };
enum s3c24xx_i2c_type {
TYPE_S3C2410,
TYPE_S3C2440,
};
struct s3c24xx_i2c { struct s3c24xx_i2c {
spinlock_t lock; spinlock_t lock;
wait_queue_head_t wait; wait_queue_head_t wait;
...@@ -88,8 +93,10 @@ struct s3c24xx_i2c { ...@@ -88,8 +93,10 @@ struct s3c24xx_i2c {
static inline int s3c24xx_i2c_is2440(struct s3c24xx_i2c *i2c) static inline int s3c24xx_i2c_is2440(struct s3c24xx_i2c *i2c)
{ {
struct platform_device *pdev = to_platform_device(i2c->dev); 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 /* s3c24xx_i2c_master_complete
...@@ -969,52 +976,41 @@ static int s3c24xx_i2c_resume(struct platform_device *dev) ...@@ -969,52 +976,41 @@ static int s3c24xx_i2c_resume(struct platform_device *dev)
/* device driver for platform bus bits */ /* device driver for platform bus bits */
static struct platform_driver s3c2410_i2c_driver = { static struct platform_device_id s3c24xx_driver_ids[] = {
.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", .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, .probe = s3c24xx_i2c_probe,
.remove = s3c24xx_i2c_remove, .remove = s3c24xx_i2c_remove,
.suspend_late = s3c24xx_i2c_suspend_late, .suspend_late = s3c24xx_i2c_suspend_late,
.resume = s3c24xx_i2c_resume, .resume = s3c24xx_i2c_resume,
.id_table = s3c24xx_driver_ids,
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "s3c2440-i2c", .name = "s3c-i2c",
}, },
}; };
static int __init i2c_adap_s3c_init(void) static int __init i2c_adap_s3c_init(void)
{ {
int ret; return platform_driver_register(&s3c24xx_i2c_driver);
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;
} }
subsys_initcall(i2c_adap_s3c_init); subsys_initcall(i2c_adap_s3c_init);
static void __exit i2c_adap_s3c_exit(void) static void __exit i2c_adap_s3c_exit(void)
{ {
platform_driver_unregister(&s3c2410_i2c_driver); platform_driver_unregister(&s3c24xx_i2c_driver);
platform_driver_unregister(&s3c2440_i2c_driver);
} }
module_exit(i2c_adap_s3c_exit); module_exit(i2c_adap_s3c_exit);
MODULE_DESCRIPTION("S3C24XX I2C Bus driver"); MODULE_DESCRIPTION("S3C24XX I2C Bus driver");
MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:s3c2410-i2c");
MODULE_ALIAS("platform:s3c2440-i2c");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment