diff options
author | Matt Carlson <mcarlson@broadcom.com> | 2009-08-25 06:10:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-26 18:48:03 -0400 |
commit | 4f4598fd0a87f39955e71bcb7447f403dafc20ba (patch) | |
tree | fdf3974753e761169f84e5b92dfb12e651b5cd8f /drivers/net/phy | |
parent | 7f97a4bd47291e4ec9b9eaf63d7275ddfb498cb3 (diff) |
broadcom: Add BCM50610M support
This patch adds support for the BCM50610M phy ID.
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Michael Chan <mchan@broadcom.com>
Reviewed-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy')
-rw-r--r-- | drivers/net/phy/broadcom.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c index 190efc3301c6..dec4dec23b66 100644 --- a/drivers/net/phy/broadcom.c +++ b/drivers/net/phy/broadcom.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/phy.h> | 18 | #include <linux/phy.h> |
19 | 19 | ||
20 | #define PHY_ID_BCM50610 0x0143bd60 | 20 | #define PHY_ID_BCM50610 0x0143bd60 |
21 | #define PHY_ID_BCM50610M 0x0143bd70 | ||
21 | 22 | ||
22 | #define MII_BCM54XX_ECR 0x10 /* BCM54xx extended control register */ | 23 | #define MII_BCM54XX_ECR 0x10 /* BCM54xx extended control register */ |
23 | #define MII_BCM54XX_ECR_IM 0x1000 /* Interrupt mask */ | 24 | #define MII_BCM54XX_ECR_IM 0x1000 /* Interrupt mask */ |
@@ -447,7 +448,7 @@ static struct phy_driver bcm5411_driver = { | |||
447 | .read_status = genphy_read_status, | 448 | .read_status = genphy_read_status, |
448 | .ack_interrupt = bcm54xx_ack_interrupt, | 449 | .ack_interrupt = bcm54xx_ack_interrupt, |
449 | .config_intr = bcm54xx_config_intr, | 450 | .config_intr = bcm54xx_config_intr, |
450 | .driver = { .owner = THIS_MODULE }, | 451 | .driver = { .owner = THIS_MODULE }, |
451 | }; | 452 | }; |
452 | 453 | ||
453 | static struct phy_driver bcm5421_driver = { | 454 | static struct phy_driver bcm5421_driver = { |
@@ -462,7 +463,7 @@ static struct phy_driver bcm5421_driver = { | |||
462 | .read_status = genphy_read_status, | 463 | .read_status = genphy_read_status, |
463 | .ack_interrupt = bcm54xx_ack_interrupt, | 464 | .ack_interrupt = bcm54xx_ack_interrupt, |
464 | .config_intr = bcm54xx_config_intr, | 465 | .config_intr = bcm54xx_config_intr, |
465 | .driver = { .owner = THIS_MODULE }, | 466 | .driver = { .owner = THIS_MODULE }, |
466 | }; | 467 | }; |
467 | 468 | ||
468 | static struct phy_driver bcm5461_driver = { | 469 | static struct phy_driver bcm5461_driver = { |
@@ -477,7 +478,7 @@ static struct phy_driver bcm5461_driver = { | |||
477 | .read_status = genphy_read_status, | 478 | .read_status = genphy_read_status, |
478 | .ack_interrupt = bcm54xx_ack_interrupt, | 479 | .ack_interrupt = bcm54xx_ack_interrupt, |
479 | .config_intr = bcm54xx_config_intr, | 480 | .config_intr = bcm54xx_config_intr, |
480 | .driver = { .owner = THIS_MODULE }, | 481 | .driver = { .owner = THIS_MODULE }, |
481 | }; | 482 | }; |
482 | 483 | ||
483 | static struct phy_driver bcm5464_driver = { | 484 | static struct phy_driver bcm5464_driver = { |
@@ -492,7 +493,7 @@ static struct phy_driver bcm5464_driver = { | |||
492 | .read_status = genphy_read_status, | 493 | .read_status = genphy_read_status, |
493 | .ack_interrupt = bcm54xx_ack_interrupt, | 494 | .ack_interrupt = bcm54xx_ack_interrupt, |
494 | .config_intr = bcm54xx_config_intr, | 495 | .config_intr = bcm54xx_config_intr, |
495 | .driver = { .owner = THIS_MODULE }, | 496 | .driver = { .owner = THIS_MODULE }, |
496 | }; | 497 | }; |
497 | 498 | ||
498 | static struct phy_driver bcm5481_driver = { | 499 | static struct phy_driver bcm5481_driver = { |
@@ -507,7 +508,7 @@ static struct phy_driver bcm5481_driver = { | |||
507 | .read_status = genphy_read_status, | 508 | .read_status = genphy_read_status, |
508 | .ack_interrupt = bcm54xx_ack_interrupt, | 509 | .ack_interrupt = bcm54xx_ack_interrupt, |
509 | .config_intr = bcm54xx_config_intr, | 510 | .config_intr = bcm54xx_config_intr, |
510 | .driver = { .owner = THIS_MODULE }, | 511 | .driver = { .owner = THIS_MODULE }, |
511 | }; | 512 | }; |
512 | 513 | ||
513 | static struct phy_driver bcm5482_driver = { | 514 | static struct phy_driver bcm5482_driver = { |
@@ -522,7 +523,7 @@ static struct phy_driver bcm5482_driver = { | |||
522 | .read_status = bcm5482_read_status, | 523 | .read_status = bcm5482_read_status, |
523 | .ack_interrupt = bcm54xx_ack_interrupt, | 524 | .ack_interrupt = bcm54xx_ack_interrupt, |
524 | .config_intr = bcm54xx_config_intr, | 525 | .config_intr = bcm54xx_config_intr, |
525 | .driver = { .owner = THIS_MODULE }, | 526 | .driver = { .owner = THIS_MODULE }, |
526 | }; | 527 | }; |
527 | 528 | ||
528 | static struct phy_driver bcm50610_driver = { | 529 | static struct phy_driver bcm50610_driver = { |
@@ -537,7 +538,22 @@ static struct phy_driver bcm50610_driver = { | |||
537 | .read_status = genphy_read_status, | 538 | .read_status = genphy_read_status, |
538 | .ack_interrupt = bcm54xx_ack_interrupt, | 539 | .ack_interrupt = bcm54xx_ack_interrupt, |
539 | .config_intr = bcm54xx_config_intr, | 540 | .config_intr = bcm54xx_config_intr, |
540 | .driver = { .owner = THIS_MODULE }, | 541 | .driver = { .owner = THIS_MODULE }, |
542 | }; | ||
543 | |||
544 | static struct phy_driver bcm50610m_driver = { | ||
545 | .phy_id = PHY_ID_BCM50610M, | ||
546 | .phy_id_mask = 0xfffffff0, | ||
547 | .name = "Broadcom BCM50610M", | ||
548 | .features = PHY_GBIT_FEATURES | | ||
549 | SUPPORTED_Pause | SUPPORTED_Asym_Pause, | ||
550 | .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT, | ||
551 | .config_init = bcm54xx_config_init, | ||
552 | .config_aneg = genphy_config_aneg, | ||
553 | .read_status = genphy_read_status, | ||
554 | .ack_interrupt = bcm54xx_ack_interrupt, | ||
555 | .config_intr = bcm54xx_config_intr, | ||
556 | .driver = { .owner = THIS_MODULE }, | ||
541 | }; | 557 | }; |
542 | 558 | ||
543 | static struct phy_driver bcm57780_driver = { | 559 | static struct phy_driver bcm57780_driver = { |
@@ -552,7 +568,7 @@ static struct phy_driver bcm57780_driver = { | |||
552 | .read_status = genphy_read_status, | 568 | .read_status = genphy_read_status, |
553 | .ack_interrupt = bcm54xx_ack_interrupt, | 569 | .ack_interrupt = bcm54xx_ack_interrupt, |
554 | .config_intr = bcm54xx_config_intr, | 570 | .config_intr = bcm54xx_config_intr, |
555 | .driver = { .owner = THIS_MODULE }, | 571 | .driver = { .owner = THIS_MODULE }, |
556 | }; | 572 | }; |
557 | 573 | ||
558 | static int __init broadcom_init(void) | 574 | static int __init broadcom_init(void) |
@@ -580,12 +596,17 @@ static int __init broadcom_init(void) | |||
580 | ret = phy_driver_register(&bcm50610_driver); | 596 | ret = phy_driver_register(&bcm50610_driver); |
581 | if (ret) | 597 | if (ret) |
582 | goto out_50610; | 598 | goto out_50610; |
599 | ret = phy_driver_register(&bcm50610m_driver); | ||
600 | if (ret) | ||
601 | goto out_50610m; | ||
583 | ret = phy_driver_register(&bcm57780_driver); | 602 | ret = phy_driver_register(&bcm57780_driver); |
584 | if (ret) | 603 | if (ret) |
585 | goto out_57780; | 604 | goto out_57780; |
586 | return ret; | 605 | return ret; |
587 | 606 | ||
588 | out_57780: | 607 | out_57780: |
608 | phy_driver_unregister(&bcm50610m_driver); | ||
609 | out_50610m: | ||
589 | phy_driver_unregister(&bcm50610_driver); | 610 | phy_driver_unregister(&bcm50610_driver); |
590 | out_50610: | 611 | out_50610: |
591 | phy_driver_unregister(&bcm5482_driver); | 612 | phy_driver_unregister(&bcm5482_driver); |
@@ -606,6 +627,7 @@ out_5411: | |||
606 | static void __exit broadcom_exit(void) | 627 | static void __exit broadcom_exit(void) |
607 | { | 628 | { |
608 | phy_driver_unregister(&bcm57780_driver); | 629 | phy_driver_unregister(&bcm57780_driver); |
630 | phy_driver_unregister(&bcm50610m_driver); | ||
609 | phy_driver_unregister(&bcm50610_driver); | 631 | phy_driver_unregister(&bcm50610_driver); |
610 | phy_driver_unregister(&bcm5482_driver); | 632 | phy_driver_unregister(&bcm5482_driver); |
611 | phy_driver_unregister(&bcm5481_driver); | 633 | phy_driver_unregister(&bcm5481_driver); |