1818#include <linux/phy.h>
1919
2020#define PHY_ID_BCM50610 0x0143bd60
21+ #define PHY_ID_BCM50610M 0x0143bd70
2122
2223#define MII_BCM54XX_ECR 0x10 /* BCM54xx extended control register */
2324#define MII_BCM54XX_ECR_IM 0x1000 /* Interrupt mask */
@@ -447,7 +448,7 @@ static struct phy_driver bcm5411_driver = {
447448 .read_status = genphy_read_status ,
448449 .ack_interrupt = bcm54xx_ack_interrupt ,
449450 .config_intr = bcm54xx_config_intr ,
450- .driver = { .owner = THIS_MODULE },
451+ .driver = { .owner = THIS_MODULE },
451452};
452453
453454static struct phy_driver bcm5421_driver = {
@@ -462,7 +463,7 @@ static struct phy_driver bcm5421_driver = {
462463 .read_status = genphy_read_status ,
463464 .ack_interrupt = bcm54xx_ack_interrupt ,
464465 .config_intr = bcm54xx_config_intr ,
465- .driver = { .owner = THIS_MODULE },
466+ .driver = { .owner = THIS_MODULE },
466467};
467468
468469static struct phy_driver bcm5461_driver = {
@@ -477,7 +478,7 @@ static struct phy_driver bcm5461_driver = {
477478 .read_status = genphy_read_status ,
478479 .ack_interrupt = bcm54xx_ack_interrupt ,
479480 .config_intr = bcm54xx_config_intr ,
480- .driver = { .owner = THIS_MODULE },
481+ .driver = { .owner = THIS_MODULE },
481482};
482483
483484static struct phy_driver bcm5464_driver = {
@@ -492,7 +493,7 @@ static struct phy_driver bcm5464_driver = {
492493 .read_status = genphy_read_status ,
493494 .ack_interrupt = bcm54xx_ack_interrupt ,
494495 .config_intr = bcm54xx_config_intr ,
495- .driver = { .owner = THIS_MODULE },
496+ .driver = { .owner = THIS_MODULE },
496497};
497498
498499static struct phy_driver bcm5481_driver = {
@@ -507,7 +508,7 @@ static struct phy_driver bcm5481_driver = {
507508 .read_status = genphy_read_status ,
508509 .ack_interrupt = bcm54xx_ack_interrupt ,
509510 .config_intr = bcm54xx_config_intr ,
510- .driver = { .owner = THIS_MODULE },
511+ .driver = { .owner = THIS_MODULE },
511512};
512513
513514static struct phy_driver bcm5482_driver = {
@@ -522,7 +523,7 @@ static struct phy_driver bcm5482_driver = {
522523 .read_status = bcm5482_read_status ,
523524 .ack_interrupt = bcm54xx_ack_interrupt ,
524525 .config_intr = bcm54xx_config_intr ,
525- .driver = { .owner = THIS_MODULE },
526+ .driver = { .owner = THIS_MODULE },
526527};
527528
528529static struct phy_driver bcm50610_driver = {
@@ -537,7 +538,22 @@ static struct phy_driver bcm50610_driver = {
537538 .read_status = genphy_read_status ,
538539 .ack_interrupt = bcm54xx_ack_interrupt ,
539540 .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 },
541557};
542558
543559static struct phy_driver bcm57780_driver = {
@@ -552,7 +568,7 @@ static struct phy_driver bcm57780_driver = {
552568 .read_status = genphy_read_status ,
553569 .ack_interrupt = bcm54xx_ack_interrupt ,
554570 .config_intr = bcm54xx_config_intr ,
555- .driver = { .owner = THIS_MODULE },
571+ .driver = { .owner = THIS_MODULE },
556572};
557573
558574static int __init broadcom_init (void )
@@ -580,12 +596,17 @@ static int __init broadcom_init(void)
580596 ret = phy_driver_register (& bcm50610_driver );
581597 if (ret )
582598 goto out_50610 ;
599+ ret = phy_driver_register (& bcm50610m_driver );
600+ if (ret )
601+ goto out_50610m ;
583602 ret = phy_driver_register (& bcm57780_driver );
584603 if (ret )
585604 goto out_57780 ;
586605 return ret ;
587606
588607out_57780 :
608+ phy_driver_unregister (& bcm50610m_driver );
609+ out_50610m :
589610 phy_driver_unregister (& bcm50610_driver );
590611out_50610 :
591612 phy_driver_unregister (& bcm5482_driver );
@@ -606,6 +627,7 @@ static int __init broadcom_init(void)
606627static void __exit broadcom_exit (void )
607628{
608629 phy_driver_unregister (& bcm57780_driver );
630+ phy_driver_unregister (& bcm50610m_driver );
609631 phy_driver_unregister (& bcm50610_driver );
610632 phy_driver_unregister (& bcm5482_driver );
611633 phy_driver_unregister (& bcm5481_driver );
0 commit comments