@@ -557,6 +557,21 @@ static int mv3310_init_interface(struct phy_device *phydev, int mactype)
557
557
return 0 ;
558
558
}
559
559
560
+ static int mv3340_init_interface (struct phy_device * phydev , int mactype )
561
+ {
562
+ struct mv3310_priv * priv = dev_get_drvdata (& phydev -> mdio .dev );
563
+ int err = 0 ;
564
+
565
+ priv -> rate_match = false;
566
+
567
+ if (mactype == MV_V2_3340_PORT_CTRL_MACTYPE_RXAUI_NO_SGMII_AN )
568
+ priv -> const_interface = PHY_INTERFACE_MODE_RXAUI ;
569
+ else
570
+ err = mv3310_init_interface (phydev , mactype );
571
+
572
+ return err ;
573
+ }
574
+
560
575
static int mv3310_config_init (struct phy_device * phydev )
561
576
{
562
577
struct mv3310_priv * priv = dev_get_drvdata (& phydev -> mdio .dev );
@@ -884,6 +899,16 @@ static void mv3310_init_supported_interfaces(unsigned long *mask)
884
899
__set_bit (PHY_INTERFACE_MODE_USXGMII , mask );
885
900
}
886
901
902
+ static void mv3340_init_supported_interfaces (unsigned long * mask )
903
+ {
904
+ __set_bit (PHY_INTERFACE_MODE_SGMII , mask );
905
+ __set_bit (PHY_INTERFACE_MODE_2500BASEX , mask );
906
+ __set_bit (PHY_INTERFACE_MODE_5GBASER , mask );
907
+ __set_bit (PHY_INTERFACE_MODE_RXAUI , mask );
908
+ __set_bit (PHY_INTERFACE_MODE_10GBASER , mask );
909
+ __set_bit (PHY_INTERFACE_MODE_USXGMII , mask );
910
+ }
911
+
887
912
static void mv2110_init_supported_interfaces (unsigned long * mask )
888
913
{
889
914
__set_bit (PHY_INTERFACE_MODE_SGMII , mask );
@@ -903,6 +928,16 @@ static const struct mv3310_chip mv3310_type = {
903
928
#endif
904
929
};
905
930
931
+ static const struct mv3310_chip mv3340_type = {
932
+ .init_supported_interfaces = mv3340_init_supported_interfaces ,
933
+ .get_mactype = mv3310_get_mactype ,
934
+ .init_interface = mv3340_init_interface ,
935
+
936
+ #ifdef CONFIG_HWMON
937
+ .hwmon_read_temp_reg = mv3310_hwmon_read_temp_reg ,
938
+ #endif
939
+ };
940
+
906
941
static const struct mv3310_chip mv2110_type = {
907
942
.init_supported_interfaces = mv2110_init_supported_interfaces ,
908
943
.get_mactype = mv2110_get_mactype ,
@@ -916,7 +951,7 @@ static const struct mv3310_chip mv2110_type = {
916
951
static struct phy_driver mv3310_drivers [] = {
917
952
{
918
953
.phy_id = MARVELL_PHY_ID_88X3310 ,
919
- .phy_id_mask = MARVELL_PHY_ID_MASK ,
954
+ .phy_id_mask = MARVELL_PHY_ID_88X33X0_MASK ,
920
955
.name = "mv88x3310" ,
921
956
.driver_data = & mv3310_type ,
922
957
.get_features = mv3310_get_features ,
@@ -932,6 +967,24 @@ static struct phy_driver mv3310_drivers[] = {
932
967
.remove = mv3310_remove ,
933
968
.set_loopback = genphy_c45_loopback ,
934
969
},
970
+ {
971
+ .phy_id = MARVELL_PHY_ID_88X3340 ,
972
+ .phy_id_mask = MARVELL_PHY_ID_88X33X0_MASK ,
973
+ .name = "mv88x3340" ,
974
+ .driver_data = & mv3340_type ,
975
+ .get_features = mv3310_get_features ,
976
+ .config_init = mv3310_config_init ,
977
+ .probe = mv3310_probe ,
978
+ .suspend = mv3310_suspend ,
979
+ .resume = mv3310_resume ,
980
+ .config_aneg = mv3310_config_aneg ,
981
+ .aneg_done = mv3310_aneg_done ,
982
+ .read_status = mv3310_read_status ,
983
+ .get_tunable = mv3310_get_tunable ,
984
+ .set_tunable = mv3310_set_tunable ,
985
+ .remove = mv3310_remove ,
986
+ .set_loopback = genphy_c45_loopback ,
987
+ },
935
988
{
936
989
.phy_id = MARVELL_PHY_ID_88E2110 ,
937
990
.phy_id_mask = MARVELL_PHY_ID_MASK ,
@@ -954,7 +1007,8 @@ static struct phy_driver mv3310_drivers[] = {
954
1007
module_phy_driver (mv3310_drivers );
955
1008
956
1009
static struct mdio_device_id __maybe_unused mv3310_tbl [] = {
957
- { MARVELL_PHY_ID_88X3310 , MARVELL_PHY_ID_MASK },
1010
+ { MARVELL_PHY_ID_88X3310 , MARVELL_PHY_ID_88X33X0_MASK },
1011
+ { MARVELL_PHY_ID_88X3340 , MARVELL_PHY_ID_88X33X0_MASK },
958
1012
{ MARVELL_PHY_ID_88E2110 , MARVELL_PHY_ID_MASK },
959
1013
{ },
960
1014
};
0 commit comments