3
3
* Driver for Microchip 10BASE-T1S PHYs
4
4
*
5
5
* Support: Microchip Phys:
6
- * lan8670/1/2 Rev.B1, Rev.C0, Rev.C1
6
+ * lan8670/1/2 Rev.B1, Rev.C0, Rev.C1, Rev.C2
7
7
* lan8650/1 Rev.B0 Internal PHYs
8
8
*/
9
9
14
14
#define PHY_ID_LAN867X_REVB1 0x0007C162
15
15
#define PHY_ID_LAN867X_REVC0 0x0007C163
16
16
#define PHY_ID_LAN867X_REVC1 0x0007C164
17
+ #define PHY_ID_LAN867X_REVC2 0x0007C165
17
18
#define PHY_ID_LAN865X_REVB0 0x0007C1B3
18
19
19
20
#define LAN867X_REG_STS2 0x0019
34
35
#define LAN865X_CFGPARAM_READ_ENABLE BIT(1)
35
36
36
37
#define LAN86XX_DISABLE_COL_DET 0x0000
37
- #define LAN86XX_ENABLE_COL_DET 0x0083
38
+ #define LAN86XX_ENABLE_COL_DET 0x8000
39
+ #define LAN86XX_COL_DET_MASK 0x8000
38
40
#define LAN86XX_REG_COL_DET_CTRL0 0x0087
39
41
40
42
/* PLCA enable - Could be configured by parameter */
@@ -162,14 +164,16 @@ static int lan86xx_configure_plca(struct phy_device *phydev)
162
164
return ret ;
163
165
}
164
166
if (plca_enable ) {
165
- ret = phy_write_mmd (phydev , MDIO_MMD_VEND2 , LAN86XX_REG_COL_DET_CTRL0 , LAN86XX_DISABLE_COL_DET );
166
- if (ret < 0 )
167
+ ret = phy_modify_mmd (phydev , MDIO_MMD_VEND2 , LAN86XX_REG_COL_DET_CTRL0 ,
168
+ LAN86XX_COL_DET_MASK , LAN86XX_DISABLE_COL_DET );
169
+ if (ret )
167
170
return ret ;
168
171
phydev_info (phydev , "PLCA mode enabled. Node Id: %d, Node Count: %d, Max BC: %d, Burst Timer: %d, TO Timer: %d\n" ,
169
172
plca_node_id , plca_node_count , max_bc , burst_timer , to_timer );
170
173
} else {
171
- ret = phy_write_mmd (phydev , MDIO_MMD_VEND2 , LAN86XX_REG_COL_DET_CTRL0 , LAN86XX_ENABLE_COL_DET );
172
- if (ret < 0 )
174
+ ret = phy_modify_mmd (phydev , MDIO_MMD_VEND2 , LAN86XX_REG_COL_DET_CTRL0 ,
175
+ LAN86XX_COL_DET_MASK , LAN86XX_ENABLE_COL_DET );
176
+ if (ret )
173
177
return ret ;
174
178
phydev_info (phydev , "CSMA/CD mode enabled\n" );
175
179
}
@@ -521,6 +525,12 @@ static struct phy_driver microchip_t1s_driver[] = {
521
525
.config_init = lan867x_revc_config_init ,
522
526
.read_status = lan86xx_read_status ,
523
527
},
528
+ {
529
+ PHY_ID_MATCH_EXACT (PHY_ID_LAN867X_REVC2 ),
530
+ .name = "LAN867X Rev.C2" ,
531
+ .config_init = lan867x_revc_config_init ,
532
+ .read_status = lan86xx_read_status ,
533
+ },
524
534
{
525
535
PHY_ID_MATCH_EXACT (PHY_ID_LAN865X_REVB0 ),
526
536
.name = "LAN865X Rev.B0 Internal Phy" ,
@@ -535,6 +545,7 @@ static struct mdio_device_id __maybe_unused tbl[] = {
535
545
{ PHY_ID_MATCH_EXACT (PHY_ID_LAN867X_REVB1 ) },
536
546
{ PHY_ID_MATCH_EXACT (PHY_ID_LAN867X_REVC0 ) },
537
547
{ PHY_ID_MATCH_EXACT (PHY_ID_LAN867X_REVC1 ) },
548
+ { PHY_ID_MATCH_EXACT (PHY_ID_LAN867X_REVC2 ) },
538
549
{ PHY_ID_MATCH_EXACT (PHY_ID_LAN865X_REVB0 ) },
539
550
{ }
540
551
};
0 commit comments