18
18
#include <linux/phy.h>
19
19
20
20
#define PHY_ID_BCM50610 0x0143bd60
21
+ #define PHY_ID_BCM50610M 0x0143bd70
21
22
22
23
#define MII_BCM54XX_ECR 0x10 /* BCM54xx extended control register */
23
24
#define MII_BCM54XX_ECR_IM 0x1000 /* Interrupt mask */
@@ -447,7 +448,7 @@ static struct phy_driver bcm5411_driver = {
447
448
.read_status = genphy_read_status ,
448
449
.ack_interrupt = bcm54xx_ack_interrupt ,
449
450
.config_intr = bcm54xx_config_intr ,
450
- .driver = { .owner = THIS_MODULE },
451
+ .driver = { .owner = THIS_MODULE },
451
452
};
452
453
453
454
static struct phy_driver bcm5421_driver = {
@@ -462,7 +463,7 @@ static struct phy_driver bcm5421_driver = {
462
463
.read_status = genphy_read_status ,
463
464
.ack_interrupt = bcm54xx_ack_interrupt ,
464
465
.config_intr = bcm54xx_config_intr ,
465
- .driver = { .owner = THIS_MODULE },
466
+ .driver = { .owner = THIS_MODULE },
466
467
};
467
468
468
469
static struct phy_driver bcm5461_driver = {
@@ -477,7 +478,7 @@ static struct phy_driver bcm5461_driver = {
477
478
.read_status = genphy_read_status ,
478
479
.ack_interrupt = bcm54xx_ack_interrupt ,
479
480
.config_intr = bcm54xx_config_intr ,
480
- .driver = { .owner = THIS_MODULE },
481
+ .driver = { .owner = THIS_MODULE },
481
482
};
482
483
483
484
static struct phy_driver bcm5464_driver = {
@@ -492,7 +493,7 @@ static struct phy_driver bcm5464_driver = {
492
493
.read_status = genphy_read_status ,
493
494
.ack_interrupt = bcm54xx_ack_interrupt ,
494
495
.config_intr = bcm54xx_config_intr ,
495
- .driver = { .owner = THIS_MODULE },
496
+ .driver = { .owner = THIS_MODULE },
496
497
};
497
498
498
499
static struct phy_driver bcm5481_driver = {
@@ -507,7 +508,7 @@ static struct phy_driver bcm5481_driver = {
507
508
.read_status = genphy_read_status ,
508
509
.ack_interrupt = bcm54xx_ack_interrupt ,
509
510
.config_intr = bcm54xx_config_intr ,
510
- .driver = { .owner = THIS_MODULE },
511
+ .driver = { .owner = THIS_MODULE },
511
512
};
512
513
513
514
static struct phy_driver bcm5482_driver = {
@@ -522,7 +523,7 @@ static struct phy_driver bcm5482_driver = {
522
523
.read_status = bcm5482_read_status ,
523
524
.ack_interrupt = bcm54xx_ack_interrupt ,
524
525
.config_intr = bcm54xx_config_intr ,
525
- .driver = { .owner = THIS_MODULE },
526
+ .driver = { .owner = THIS_MODULE },
526
527
};
527
528
528
529
static struct phy_driver bcm50610_driver = {
@@ -537,7 +538,22 @@ static struct phy_driver bcm50610_driver = {
537
538
.read_status = genphy_read_status ,
538
539
.ack_interrupt = bcm54xx_ack_interrupt ,
539
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
559
static struct phy_driver bcm57780_driver = {
@@ -552,7 +568,7 @@ static struct phy_driver bcm57780_driver = {
552
568
.read_status = genphy_read_status ,
553
569
.ack_interrupt = bcm54xx_ack_interrupt ,
554
570
.config_intr = bcm54xx_config_intr ,
555
- .driver = { .owner = THIS_MODULE },
571
+ .driver = { .owner = THIS_MODULE },
556
572
};
557
573
558
574
static int __init broadcom_init (void )
@@ -580,12 +596,17 @@ static int __init broadcom_init(void)
580
596
ret = phy_driver_register (& bcm50610_driver );
581
597
if (ret )
582
598
goto out_50610 ;
599
+ ret = phy_driver_register (& bcm50610m_driver );
600
+ if (ret )
601
+ goto out_50610m ;
583
602
ret = phy_driver_register (& bcm57780_driver );
584
603
if (ret )
585
604
goto out_57780 ;
586
605
return ret ;
587
606
588
607
out_57780 :
608
+ phy_driver_unregister (& bcm50610m_driver );
609
+ out_50610m :
589
610
phy_driver_unregister (& bcm50610_driver );
590
611
out_50610 :
591
612
phy_driver_unregister (& bcm5482_driver );
@@ -606,6 +627,7 @@ static int __init broadcom_init(void)
606
627
static void __exit broadcom_exit (void )
607
628
{
608
629
phy_driver_unregister (& bcm57780_driver );
630
+ phy_driver_unregister (& bcm50610m_driver );
609
631
phy_driver_unregister (& bcm50610_driver );
610
632
phy_driver_unregister (& bcm5482_driver );
611
633
phy_driver_unregister (& bcm5481_driver );
0 commit comments