2019-11-27 18:49:08 +05:30
/* SPDX-License-Identifier: GPL-2.0 */
2015-10-06 12:25:48 -07:00
/*
* Copyright ( C ) 2015 Broadcom Corporation
*/
# ifndef _LINUX_BCM_PHY_LIB_H
# define _LINUX_BCM_PHY_LIB_H
2018-05-22 17:04:49 -07:00
# include <linux/brcmphy.h>
2015-10-06 12:25:48 -07:00
# include <linux/phy.h>
2019-03-20 12:53:12 -07:00
/* 28nm only register definitions */
# define MISC_ADDR(base, channel) base, channel
# define DSP_TAP10 MISC_ADDR(0x0a, 0)
# define PLL_PLLCTRL_1 MISC_ADDR(0x32, 1)
# define PLL_PLLCTRL_2 MISC_ADDR(0x32, 2)
# define PLL_PLLCTRL_4 MISC_ADDR(0x33, 0)
# define AFE_RXCONFIG_0 MISC_ADDR(0x38, 0)
# define AFE_RXCONFIG_1 MISC_ADDR(0x38, 1)
# define AFE_RXCONFIG_2 MISC_ADDR(0x38, 2)
# define AFE_RX_LP_COUNTER MISC_ADDR(0x38, 3)
# define AFE_TX_CONFIG MISC_ADDR(0x39, 0)
# define AFE_VDCA_ICTRL_0 MISC_ADDR(0x39, 1)
# define AFE_VDAC_OTHERS_0 MISC_ADDR(0x39, 3)
# define AFE_HPF_TRIM_OTHERS MISC_ADDR(0x3a, 0)
2020-05-13 18:35:21 +02:00
int __bcm_phy_write_exp ( struct phy_device * phydev , u16 reg , u16 val ) ;
int __bcm_phy_read_exp ( struct phy_device * phydev , u16 reg ) ;
2020-05-13 18:35:22 +02:00
int __bcm_phy_modify_exp ( struct phy_device * phydev , u16 reg , u16 mask , u16 set ) ;
2015-10-06 12:25:48 -07:00
int bcm_phy_write_exp ( struct phy_device * phydev , u16 reg , u16 val ) ;
int bcm_phy_read_exp ( struct phy_device * phydev , u16 reg ) ;
2020-05-13 18:35:22 +02:00
int bcm_phy_modify_exp ( struct phy_device * phydev , u16 reg , u16 mask , u16 set ) ;
2015-10-06 12:25:48 -07:00
2018-05-22 17:04:49 -07:00
static inline int bcm_phy_write_exp_sel ( struct phy_device * phydev ,
u16 reg , u16 val )
{
return bcm_phy_write_exp ( phydev , reg | MII_BCM54XX_EXP_SEL_ER , val ) ;
}
2016-11-22 11:40:54 -08:00
int bcm54xx_auxctl_write ( struct phy_device * phydev , u16 regnum , u16 val ) ;
int bcm54xx_auxctl_read ( struct phy_device * phydev , u16 regnum ) ;
2015-10-06 12:25:48 -07:00
int bcm_phy_write_misc ( struct phy_device * phydev ,
u16 reg , u16 chl , u16 value ) ;
int bcm_phy_read_misc ( struct phy_device * phydev ,
u16 reg , u16 chl ) ;
int bcm_phy_write_shadow ( struct phy_device * phydev , u16 shadow ,
u16 val ) ;
int bcm_phy_read_shadow ( struct phy_device * phydev , u16 shadow ) ;
2020-04-20 20:21:11 +02:00
int __bcm_phy_write_rdb ( struct phy_device * phydev , u16 rdb , u16 val ) ;
int bcm_phy_write_rdb ( struct phy_device * phydev , u16 rdb , u16 val ) ;
int __bcm_phy_read_rdb ( struct phy_device * phydev , u16 rdb ) ;
int bcm_phy_read_rdb ( struct phy_device * phydev , u16 rdb ) ;
int __bcm_phy_modify_rdb ( struct phy_device * phydev , u16 rdb , u16 mask ,
u16 set ) ;
int bcm_phy_modify_rdb ( struct phy_device * phydev , u16 rdb , u16 mask ,
u16 set ) ;
2015-10-06 12:25:48 -07:00
int bcm_phy_ack_intr ( struct phy_device * phydev ) ;
int bcm_phy_config_intr ( struct phy_device * phydev ) ;
2020-11-01 14:51:06 +02:00
irqreturn_t bcm_phy_handle_interrupt ( struct phy_device * phydev ) ;
2015-10-06 12:25:48 -07:00
int bcm_phy_enable_apd ( struct phy_device * phydev , bool dll_pwr_down ) ;
2016-11-22 11:40:56 -08:00
int bcm_phy_set_eee ( struct phy_device * phydev , bool enable ) ;
2016-11-22 11:40:55 -08:00
int bcm_phy_downshift_get ( struct phy_device * phydev , u8 * count ) ;
int bcm_phy_downshift_set ( struct phy_device * phydev , u8 count ) ;
2016-11-29 09:57:17 -08:00
int bcm_phy_get_sset_count ( struct phy_device * phydev ) ;
void bcm_phy_get_strings ( struct phy_device * phydev , u8 * data ) ;
void bcm_phy_get_stats ( struct phy_device * phydev , u64 * shadow ,
struct ethtool_stats * stats , u64 * data ) ;
2019-03-20 12:53:12 -07:00
void bcm_phy_r_rc_cal_reset ( struct phy_device * phydev ) ;
int bcm_phy_28nm_a0b0_afe_config_init ( struct phy_device * phydev ) ;
2020-03-27 21:55:40 +02:00
int bcm_phy_enable_jumbo ( struct phy_device * phydev ) ;
2016-11-29 09:57:17 -08:00
2020-05-13 18:35:23 +02:00
int bcm_phy_cable_test_get_status_rdb ( struct phy_device * phydev ,
bool * finished ) ;
int bcm_phy_cable_test_start_rdb ( struct phy_device * phydev ) ;
int bcm_phy_cable_test_start ( struct phy_device * phydev ) ;
int bcm_phy_cable_test_get_status ( struct phy_device * phydev , bool * finished ) ;
2022-06-21 22:04:52 -07:00
# if IS_ENABLED(CONFIG_BCM_NET_PHYPTP)
struct bcm_ptp_private * bcm_ptp_probe ( struct phy_device * phydev ) ;
void bcm_ptp_config_init ( struct phy_device * phydev ) ;
void bcm_ptp_stop ( struct bcm_ptp_private * priv ) ;
# else
static inline struct bcm_ptp_private * bcm_ptp_probe ( struct phy_device * phydev )
{
return NULL ;
}
static inline void bcm_ptp_config_init ( struct phy_device * phydev )
{
}
static inline void bcm_ptp_stop ( struct bcm_ptp_private * priv )
{
}
# endif
2015-10-06 12:25:48 -07:00
# endif /* _LINUX_BCM_PHY_LIB_H */