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 1691ef0f1ee..079a312d36f 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c @@ -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");  |