mediatek: add support for rtl8367c
[openwrt/staging/rmilecki.git] / target / linux / mediatek / files-5.4 / drivers / net / phy / rtk / rtl8367c / rtl8367c_asicdrv_eee.c
1 /*
2 * Copyright (C) 2013 Realtek Semiconductor Corp.
3 * All Rights Reserved.
4 *
5 * Unless you and Realtek execute a separate written software license
6 * agreement governing use of this software, this software is licensed
7 * to you under the terms of the GNU General Public License version 2,
8 * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
9 *
10 * $Revision: 48989 $
11 * $Date: 2014-07-01 15:45:24 +0800 (週二, 01 七月 2014) $
12 *
13 * Purpose : RTL8370 switch high-level API for RTL8367C
14 * Feature :
15 *
16 */
17
18 #include <rtl8367c_asicdrv_eee.h>
19 #include <rtl8367c_asicdrv_phy.h>
20
21 /*
22 @func ret_t | rtl8367c_setAsicEee100M | Set eee force mode function enable/disable.
23 @parm rtk_uint32 | port | The port number.
24 @parm rtk_uint32 | enabled | 1: enabled, 0: disabled.
25 @rvalue RT_ERR_OK | Success.
26 @rvalue RT_ERR_SMI | SMI access error.
27 @rvalue RT_ERR_INPUT | Invalid input parameter.
28 @comm
29 This API set the 100M EEE enable function.
30
31 */
32 ret_t rtl8367c_setAsicEee100M(rtk_uint32 port, rtk_uint32 enable)
33 {
34 rtk_api_ret_t retVal;
35 rtk_uint32 regData;
36
37 if(port >= RTL8367C_PORTNO)
38 return RT_ERR_PORT_ID;
39
40 if (enable > 1)
41 return RT_ERR_INPUT;
42
43 if((retVal = rtl8367c_getAsicPHYOCPReg(port, EEE_OCP_PHY_ADDR, &regData)) != RT_ERR_OK)
44 return retVal;
45
46 if(enable)
47 regData |= (0x0001 << 1);
48 else
49 regData &= ~(0x0001 << 1);
50
51 if((retVal = rtl8367c_setAsicPHYOCPReg(port, EEE_OCP_PHY_ADDR, regData)) != RT_ERR_OK)
52 return retVal;
53
54 return RT_ERR_OK;
55 }
56
57 /*
58 @func ret_t | rtl8367c_getAsicEee100M | Get 100M eee enable/disable.
59 @parm rtk_uint32 | port | The port number.
60 @parm rtk_uint32* | enabled | 1: enabled, 0: disabled.
61 @rvalue RT_ERR_OK | Success.
62 @rvalue RT_ERR_SMI | SMI access error.
63 @rvalue RT_ERR_INPUT | Invalid input parameter.
64 @comm
65 This API get the 100M EEE function.
66 */
67 ret_t rtl8367c_getAsicEee100M(rtk_uint32 port, rtk_uint32 *enable)
68 {
69 rtk_api_ret_t retVal;
70 rtk_uint32 regData;
71
72 if(port >= RTL8367C_PORTNO)
73 return RT_ERR_PORT_ID;
74
75 if((retVal = rtl8367c_getAsicPHYOCPReg(port, EEE_OCP_PHY_ADDR, &regData)) != RT_ERR_OK)
76 return retVal;
77
78 *enable = (regData & (0x0001 << 1)) ? ENABLED : DISABLED;
79 return RT_ERR_OK;
80 }
81
82 /*
83 @func ret_t | rtl8367c_setAsicEeeGiga | Set eee force mode function enable/disable.
84 @parm rtk_uint32 | port | The port number.
85 @parm rtk_uint32 | enabled | 1: enabled, 0: disabled.
86 @rvalue RT_ERR_OK | Success.
87 @rvalue RT_ERR_SMI | SMI access error.
88 @rvalue RT_ERR_INPUT | Invalid input parameter.
89 @comm
90 This API set the 100M EEE enable function.
91
92 */
93 ret_t rtl8367c_setAsicEeeGiga(rtk_uint32 port, rtk_uint32 enable)
94 {
95 rtk_api_ret_t retVal;
96 rtk_uint32 regData;
97
98 if(port >= RTL8367C_PORTNO)
99 return RT_ERR_PORT_ID;
100
101 if (enable > 1)
102 return RT_ERR_INPUT;
103
104 if((retVal = rtl8367c_getAsicPHYOCPReg(port, EEE_OCP_PHY_ADDR, &regData)) != RT_ERR_OK)
105 return retVal;
106
107 if(enable)
108 regData |= (0x0001 << 2);
109 else
110 regData &= ~(0x0001 << 2);
111
112 if((retVal = rtl8367c_setAsicPHYOCPReg(port, EEE_OCP_PHY_ADDR, regData)) != RT_ERR_OK)
113 return retVal;
114
115 return RT_ERR_OK;
116 }
117
118 /*
119 @func ret_t | rtl8367c_getAsicEeeGiga | Get 100M eee enable/disable.
120 @parm rtk_uint32 | port | The port number.
121 @parm rtk_uint32* | enabled | 1: enabled, 0: disabled.
122 @rvalue RT_ERR_OK | Success.
123 @rvalue RT_ERR_SMI | SMI access error.
124 @rvalue RT_ERR_INPUT | Invalid input parameter.
125 @comm
126 This API get the 100M EEE function.
127 */
128 ret_t rtl8367c_getAsicEeeGiga(rtk_uint32 port, rtk_uint32 *enable)
129 {
130 rtk_api_ret_t retVal;
131 rtk_uint32 regData;
132
133 if(port >= RTL8367C_PORTNO)
134 return RT_ERR_PORT_ID;
135
136 if((retVal = rtl8367c_getAsicPHYOCPReg(port, EEE_OCP_PHY_ADDR, &regData)) != RT_ERR_OK)
137 return retVal;
138
139 *enable = (regData & (0x0001 << 2)) ? ENABLED : DISABLED;
140 return RT_ERR_OK;
141 }