diff options
author | Ben Dooks <ben-linux@fluff.org> | 2009-05-30 11:55:29 -0400 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2009-05-30 11:55:29 -0400 |
commit | ec0482e6cfbd460bc69a9073ffbef4c2f3422fdf (patch) | |
tree | 37b9d743b20468e5918caa1f89180d04c83e374a | |
parent | 3218911f839b6c85acbf872ad264ea69aa4d89ad (diff) |
[MTD] [NAND] S3C2410: Move to using platform device table
Commit 57fee4a58fe802272742caae248872c392a60670 added an
method to specify the platform device compatibility by using
an id-table instead of registering multiple drivers.
Move the S3C24XX NAND driver to using this ID table.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
CC: Eric Miao <eric.miao@marvell.com>
-rw-r--r-- | drivers/mtd/nand/s3c2410.c | 78 |
1 files changed, 26 insertions, 52 deletions
diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index 8e375d5fe231..b7f0740d842f 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c | |||
@@ -593,7 +593,7 @@ static inline void s3c2410_nand_cpufreq_deregister(struct s3c2410_nand_info *inf | |||
593 | 593 | ||
594 | /* device management functions */ | 594 | /* device management functions */ |
595 | 595 | ||
596 | static int s3c2410_nand_remove(struct platform_device *pdev) | 596 | static int s3c24xx_nand_remove(struct platform_device *pdev) |
597 | { | 597 | { |
598 | struct s3c2410_nand_info *info = to_nand_info(pdev); | 598 | struct s3c2410_nand_info *info = to_nand_info(pdev); |
599 | 599 | ||
@@ -788,18 +788,17 @@ static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info, | |||
788 | } | 788 | } |
789 | } | 789 | } |
790 | 790 | ||
791 | /* s3c2410_nand_probe | 791 | /* s3c24xx_nand_probe |
792 | * | 792 | * |
793 | * called by device layer when it finds a device matching | 793 | * called by device layer when it finds a device matching |
794 | * one our driver can handled. This code checks to see if | 794 | * one our driver can handled. This code checks to see if |
795 | * it can allocate all necessary resources then calls the | 795 | * it can allocate all necessary resources then calls the |
796 | * nand layer to look for devices | 796 | * nand layer to look for devices |
797 | */ | 797 | */ |
798 | 798 | static int s3c24xx_nand_probe(struct platform_device *pdev) | |
799 | static int s3c24xx_nand_probe(struct platform_device *pdev, | ||
800 | enum s3c_cpu_type cpu_type) | ||
801 | { | 799 | { |
802 | struct s3c2410_platform_nand *plat = to_nand_plat(pdev); | 800 | struct s3c2410_platform_nand *plat = to_nand_plat(pdev); |
801 | enum s3c_cpu_type cpu_type; | ||
803 | struct s3c2410_nand_info *info; | 802 | struct s3c2410_nand_info *info; |
804 | struct s3c2410_nand_mtd *nmtd; | 803 | struct s3c2410_nand_mtd *nmtd; |
805 | struct s3c2410_nand_set *sets; | 804 | struct s3c2410_nand_set *sets; |
@@ -809,6 +808,8 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, | |||
809 | int nr_sets; | 808 | int nr_sets; |
810 | int setno; | 809 | int setno; |
811 | 810 | ||
811 | cpu_type = platform_get_device_id(pdev)->driver_data; | ||
812 | |||
812 | pr_debug("s3c2410_nand_probe(%p)\n", pdev); | 813 | pr_debug("s3c2410_nand_probe(%p)\n", pdev); |
813 | 814 | ||
814 | info = kmalloc(sizeof(*info), GFP_KERNEL); | 815 | info = kmalloc(sizeof(*info), GFP_KERNEL); |
@@ -922,7 +923,7 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, | |||
922 | return 0; | 923 | return 0; |
923 | 924 | ||
924 | exit_error: | 925 | exit_error: |
925 | s3c2410_nand_remove(pdev); | 926 | s3c24xx_nand_remove(pdev); |
926 | 927 | ||
927 | if (err == 0) | 928 | if (err == 0) |
928 | err = -EINVAL; | 929 | err = -EINVAL; |
@@ -983,50 +984,30 @@ static int s3c24xx_nand_resume(struct platform_device *dev) | |||
983 | 984 | ||
984 | /* driver device registration */ | 985 | /* driver device registration */ |
985 | 986 | ||
986 | static int s3c2410_nand_probe(struct platform_device *dev) | 987 | static struct platform_device_id s3c24xx_driver_ids[] = { |
987 | { | 988 | { |
988 | return s3c24xx_nand_probe(dev, TYPE_S3C2410); | 989 | .name = "s3c2410-nand", |
989 | } | 990 | .driver_data = TYPE_S3C2410, |
990 | 991 | }, { | |
991 | static int s3c2440_nand_probe(struct platform_device *dev) | 992 | .name = "s3c2440-nand", |
992 | { | 993 | .driver_data = TYPE_S3C2440, |
993 | return s3c24xx_nand_probe(dev, TYPE_S3C2440); | 994 | }, { |
994 | } | 995 | .name = "s3c2412-nand", |
995 | 996 | .driver_data = TYPE_S3C2412, | |
996 | static int s3c2412_nand_probe(struct platform_device *dev) | ||
997 | { | ||
998 | return s3c24xx_nand_probe(dev, TYPE_S3C2412); | ||
999 | } | ||
1000 | |||
1001 | static struct platform_driver s3c2410_nand_driver = { | ||
1002 | .probe = s3c2410_nand_probe, | ||
1003 | .remove = s3c2410_nand_remove, | ||
1004 | .suspend = s3c24xx_nand_suspend, | ||
1005 | .resume = s3c24xx_nand_resume, | ||
1006 | .driver = { | ||
1007 | .name = "s3c2410-nand", | ||
1008 | .owner = THIS_MODULE, | ||
1009 | }, | 997 | }, |
998 | { } | ||
1010 | }; | 999 | }; |
1011 | 1000 | ||
1012 | static struct platform_driver s3c2440_nand_driver = { | 1001 | MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids); |
1013 | .probe = s3c2440_nand_probe, | ||
1014 | .remove = s3c2410_nand_remove, | ||
1015 | .suspend = s3c24xx_nand_suspend, | ||
1016 | .resume = s3c24xx_nand_resume, | ||
1017 | .driver = { | ||
1018 | .name = "s3c2440-nand", | ||
1019 | .owner = THIS_MODULE, | ||
1020 | }, | ||
1021 | }; | ||
1022 | 1002 | ||
1023 | static struct platform_driver s3c2412_nand_driver = { | 1003 | static struct platform_driver s3c24xx_nand_driver = { |
1024 | .probe = s3c2412_nand_probe, | 1004 | .probe = s3c24xx_nand_probe, |
1025 | .remove = s3c2410_nand_remove, | 1005 | .remove = s3c24xx_nand_remove, |
1026 | .suspend = s3c24xx_nand_suspend, | 1006 | .suspend = s3c24xx_nand_suspend, |
1027 | .resume = s3c24xx_nand_resume, | 1007 | .resume = s3c24xx_nand_resume, |
1008 | .id_table = s3c24xx_driver_ids, | ||
1028 | .driver = { | 1009 | .driver = { |
1029 | .name = "s3c2412-nand", | 1010 | .name = "s3c24xx-nand", |
1030 | .owner = THIS_MODULE, | 1011 | .owner = THIS_MODULE, |
1031 | }, | 1012 | }, |
1032 | }; | 1013 | }; |
@@ -1035,16 +1016,12 @@ static int __init s3c2410_nand_init(void) | |||
1035 | { | 1016 | { |
1036 | printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronics\n"); | 1017 | printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronics\n"); |
1037 | 1018 | ||
1038 | platform_driver_register(&s3c2412_nand_driver); | 1019 | return platform_driver_register(&s3c24xx_nand_driver); |
1039 | platform_driver_register(&s3c2440_nand_driver); | ||
1040 | return platform_driver_register(&s3c2410_nand_driver); | ||
1041 | } | 1020 | } |
1042 | 1021 | ||
1043 | static void __exit s3c2410_nand_exit(void) | 1022 | static void __exit s3c2410_nand_exit(void) |
1044 | { | 1023 | { |
1045 | platform_driver_unregister(&s3c2412_nand_driver); | 1024 | platform_driver_unregister(&s3c24xx_nand_driver); |
1046 | platform_driver_unregister(&s3c2440_nand_driver); | ||
1047 | platform_driver_unregister(&s3c2410_nand_driver); | ||
1048 | } | 1025 | } |
1049 | 1026 | ||
1050 | module_init(s3c2410_nand_init); | 1027 | module_init(s3c2410_nand_init); |
@@ -1053,6 +1030,3 @@ module_exit(s3c2410_nand_exit); | |||
1053 | MODULE_LICENSE("GPL"); | 1030 | MODULE_LICENSE("GPL"); |
1054 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | 1031 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); |
1055 | MODULE_DESCRIPTION("S3C24XX MTD NAND driver"); | 1032 | MODULE_DESCRIPTION("S3C24XX MTD NAND driver"); |
1056 | MODULE_ALIAS("platform:s3c2410-nand"); | ||
1057 | MODULE_ALIAS("platform:s3c2412-nand"); | ||
1058 | MODULE_ALIAS("platform:s3c2440-nand"); | ||