aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/ssp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-pxa/ssp.c')
-rw-r--r--arch/arm/mach-pxa/ssp.c78
1 files changed, 20 insertions, 58 deletions
diff --git a/arch/arm/mach-pxa/ssp.c b/arch/arm/mach-pxa/ssp.c
index 965e38c6bafe..a81d6dbf662d 100644
--- a/arch/arm/mach-pxa/ssp.c
+++ b/arch/arm/mach-pxa/ssp.c
@@ -35,6 +35,8 @@
35#include <mach/ssp.h> 35#include <mach/ssp.h>
36#include <mach/regs-ssp.h> 36#include <mach/regs-ssp.h>
37 37
38#ifdef CONFIG_PXA_SSP_LEGACY
39
38#define TIMEOUT 100000 40#define TIMEOUT 100000
39 41
40static irqreturn_t ssp_interrupt(int irq, void *dev_id) 42static irqreturn_t ssp_interrupt(int irq, void *dev_id)
@@ -303,6 +305,7 @@ void ssp_exit(struct ssp_dev *dev)
303 clk_disable(ssp->clk); 305 clk_disable(ssp->clk);
304 ssp_free(ssp); 306 ssp_free(ssp);
305} 307}
308#endif /* CONFIG_PXA_SSP_LEGACY */
306 309
307static DEFINE_MUTEX(ssp_lock); 310static DEFINE_MUTEX(ssp_lock);
308static LIST_HEAD(ssp_list); 311static LIST_HEAD(ssp_list);
@@ -342,8 +345,9 @@ void ssp_free(struct ssp_device *ssp)
342} 345}
343EXPORT_SYMBOL(ssp_free); 346EXPORT_SYMBOL(ssp_free);
344 347
345static int __devinit ssp_probe(struct platform_device *pdev, int type) 348static int __devinit ssp_probe(struct platform_device *pdev)
346{ 349{
350 const struct platform_device_id *id = platform_get_device_id(pdev);
347 struct resource *res; 351 struct resource *res;
348 struct ssp_device *ssp; 352 struct ssp_device *ssp;
349 int ret = 0; 353 int ret = 0;
@@ -413,7 +417,7 @@ static int __devinit ssp_probe(struct platform_device *pdev, int type)
413 */ 417 */
414 ssp->port_id = pdev->id + 1; 418 ssp->port_id = pdev->id + 1;
415 ssp->use_count = 0; 419 ssp->use_count = 0;
416 ssp->type = type; 420 ssp->type = (int)id->driver_data;
417 421
418 mutex_lock(&ssp_lock); 422 mutex_lock(&ssp_lock);
419 list_add(&ssp->node, &ssp_list); 423 list_add(&ssp->node, &ssp_list);
@@ -457,80 +461,37 @@ static int __devexit ssp_remove(struct platform_device *pdev)
457 return 0; 461 return 0;
458} 462}
459 463
460static int __devinit pxa25x_ssp_probe(struct platform_device *pdev) 464static const struct platform_device_id ssp_id_table[] = {
461{ 465 { "pxa25x-ssp", PXA25x_SSP },
462 return ssp_probe(pdev, PXA25x_SSP); 466 { "pxa25x-nssp", PXA25x_NSSP },
463} 467 { "pxa27x-ssp", PXA27x_SSP },
464 468 { },
465static int __devinit pxa25x_nssp_probe(struct platform_device *pdev)
466{
467 return ssp_probe(pdev, PXA25x_NSSP);
468}
469
470static int __devinit pxa27x_ssp_probe(struct platform_device *pdev)
471{
472 return ssp_probe(pdev, PXA27x_SSP);
473}
474
475static struct platform_driver pxa25x_ssp_driver = {
476 .driver = {
477 .name = "pxa25x-ssp",
478 },
479 .probe = pxa25x_ssp_probe,
480 .remove = __devexit_p(ssp_remove),
481}; 469};
482 470
483static struct platform_driver pxa25x_nssp_driver = { 471static struct platform_driver ssp_driver = {
484 .driver = { 472 .probe = ssp_probe,
485 .name = "pxa25x-nssp",
486 },
487 .probe = pxa25x_nssp_probe,
488 .remove = __devexit_p(ssp_remove), 473 .remove = __devexit_p(ssp_remove),
489};
490
491static struct platform_driver pxa27x_ssp_driver = {
492 .driver = { 474 .driver = {
493 .name = "pxa27x-ssp", 475 .owner = THIS_MODULE,
476 .name = "pxa2xx-ssp",
494 }, 477 },
495 .probe = pxa27x_ssp_probe, 478 .id_table = ssp_id_table,
496 .remove = __devexit_p(ssp_remove),
497}; 479};
498 480
499static int __init pxa_ssp_init(void) 481static int __init pxa_ssp_init(void)
500{ 482{
501 int ret = 0; 483 return platform_driver_register(&ssp_driver);
502
503 ret = platform_driver_register(&pxa25x_ssp_driver);
504 if (ret) {
505 printk(KERN_ERR "failed to register pxa25x_ssp_driver");
506 return ret;
507 }
508
509 ret = platform_driver_register(&pxa25x_nssp_driver);
510 if (ret) {
511 printk(KERN_ERR "failed to register pxa25x_nssp_driver");
512 return ret;
513 }
514
515 ret = platform_driver_register(&pxa27x_ssp_driver);
516 if (ret) {
517 printk(KERN_ERR "failed to register pxa27x_ssp_driver");
518 return ret;
519 }
520
521 return ret;
522} 484}
523 485
524static void __exit pxa_ssp_exit(void) 486static void __exit pxa_ssp_exit(void)
525{ 487{
526 platform_driver_unregister(&pxa25x_ssp_driver); 488 platform_driver_unregister(&ssp_driver);
527 platform_driver_unregister(&pxa25x_nssp_driver);
528 platform_driver_unregister(&pxa27x_ssp_driver);
529} 489}
530 490
531arch_initcall(pxa_ssp_init); 491arch_initcall(pxa_ssp_init);
532module_exit(pxa_ssp_exit); 492module_exit(pxa_ssp_exit);
533 493
494#ifdef CONFIG_PXA_SSP_LEGACY
534EXPORT_SYMBOL(ssp_write_word); 495EXPORT_SYMBOL(ssp_write_word);
535EXPORT_SYMBOL(ssp_read_word); 496EXPORT_SYMBOL(ssp_read_word);
536EXPORT_SYMBOL(ssp_flush); 497EXPORT_SYMBOL(ssp_flush);
@@ -541,6 +502,7 @@ EXPORT_SYMBOL(ssp_restore_state);
541EXPORT_SYMBOL(ssp_init); 502EXPORT_SYMBOL(ssp_init);
542EXPORT_SYMBOL(ssp_exit); 503EXPORT_SYMBOL(ssp_exit);
543EXPORT_SYMBOL(ssp_config); 504EXPORT_SYMBOL(ssp_config);
505#endif
544 506
545MODULE_DESCRIPTION("PXA SSP driver"); 507MODULE_DESCRIPTION("PXA SSP driver");
546MODULE_AUTHOR("Liam Girdwood"); 508MODULE_AUTHOR("Liam Girdwood");