@@ -74,116 +74,94 @@ static const struct mt7530_mib_desc mt7530_mib[] = {
7474 MIB_DESC (1 , 0xb8 , "RxArlDrop" ),
7575};
7676
77- /* Since phy_device has not yet been created and
78- * phy_{read,write}_mmd_indirect is not available, we provide our own
79- * core_{read,write}_mmd_indirect with core_{clear,write,set} wrappers
80- * to complete this function.
81- */
82- static int
83- core_read_mmd_indirect (struct mt7530_priv * priv , int prtad , int devad )
77+ static void
78+ mt7530_mutex_lock (struct mt7530_priv * priv )
79+ {
80+ if (priv -> bus )
81+ mutex_lock_nested (& priv -> bus -> mdio_lock , MDIO_MUTEX_NESTED );
82+ }
83+
84+ static void
85+ mt7530_mutex_unlock (struct mt7530_priv * priv )
86+ {
87+ if (priv -> bus )
88+ mutex_unlock (& priv -> bus -> mdio_lock );
89+ }
90+
91+ static void
92+ core_write (struct mt7530_priv * priv , u32 reg , u32 val )
8493{
8594 struct mii_bus * bus = priv -> bus ;
86- int value , ret ;
95+ int ret ;
96+
97+ mt7530_mutex_lock (priv );
8798
8899 /* Write the desired MMD Devad */
89100 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
90- MII_MMD_CTRL , devad );
101+ MII_MMD_CTRL , MDIO_MMD_VEND2 );
91102 if (ret < 0 )
92103 goto err ;
93104
94105 /* Write the desired MMD register address */
95106 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
96- MII_MMD_DATA , prtad );
107+ MII_MMD_DATA , reg );
97108 if (ret < 0 )
98109 goto err ;
99110
100111 /* Select the Function : DATA with no post increment */
101112 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
102- MII_MMD_CTRL , devad | MII_MMD_CTRL_NOINCR );
113+ MII_MMD_CTRL , MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR );
103114 if (ret < 0 )
104115 goto err ;
105116
106- /* Read the content of the MMD's selected register */
107- value = bus -> read (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
108- MII_MMD_DATA );
109-
110- return value ;
117+ /* Write the data into MMD's selected register */
118+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
119+ MII_MMD_DATA , val );
111120err :
112- dev_err (& bus -> dev , "failed to read mmd register\n" );
121+ if (ret < 0 )
122+ dev_err (& bus -> dev , "failed to write mmd register\n" );
113123
114- return ret ;
124+ mt7530_mutex_unlock ( priv ) ;
115125}
116126
117- static int
118- core_write_mmd_indirect (struct mt7530_priv * priv , int prtad ,
119- int devad , u32 data )
127+ static void
128+ core_rmw (struct mt7530_priv * priv , u32 reg , u32 mask , u32 set )
120129{
121130 struct mii_bus * bus = priv -> bus ;
131+ u32 val ;
122132 int ret ;
123133
134+ mt7530_mutex_lock (priv );
135+
124136 /* Write the desired MMD Devad */
125137 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
126- MII_MMD_CTRL , devad );
138+ MII_MMD_CTRL , MDIO_MMD_VEND2 );
127139 if (ret < 0 )
128140 goto err ;
129141
130142 /* Write the desired MMD register address */
131143 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
132- MII_MMD_DATA , prtad );
144+ MII_MMD_DATA , reg );
133145 if (ret < 0 )
134146 goto err ;
135147
136148 /* Select the Function : DATA with no post increment */
137149 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
138- MII_MMD_CTRL , devad | MII_MMD_CTRL_NOINCR );
150+ MII_MMD_CTRL , MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR );
139151 if (ret < 0 )
140152 goto err ;
141153
154+ /* Read the content of the MMD's selected register */
155+ val = bus -> read (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
156+ MII_MMD_DATA );
157+ val &= ~mask ;
158+ val |= set ;
142159 /* Write the data into MMD's selected register */
143160 ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
144- MII_MMD_DATA , data );
161+ MII_MMD_DATA , val );
145162err :
146163 if (ret < 0 )
147- dev_err (& bus -> dev ,
148- "failed to write mmd register\n" );
149- return ret ;
150- }
151-
152- static void
153- mt7530_mutex_lock (struct mt7530_priv * priv )
154- {
155- if (priv -> bus )
156- mutex_lock_nested (& priv -> bus -> mdio_lock , MDIO_MUTEX_NESTED );
157- }
158-
159- static void
160- mt7530_mutex_unlock (struct mt7530_priv * priv )
161- {
162- if (priv -> bus )
163- mutex_unlock (& priv -> bus -> mdio_lock );
164- }
165-
166- static void
167- core_write (struct mt7530_priv * priv , u32 reg , u32 val )
168- {
169- mt7530_mutex_lock (priv );
170-
171- core_write_mmd_indirect (priv , reg , MDIO_MMD_VEND2 , val );
172-
173- mt7530_mutex_unlock (priv );
174- }
175-
176- static void
177- core_rmw (struct mt7530_priv * priv , u32 reg , u32 mask , u32 set )
178- {
179- u32 val ;
180-
181- mt7530_mutex_lock (priv );
182-
183- val = core_read_mmd_indirect (priv , reg , MDIO_MMD_VEND2 );
184- val &= ~mask ;
185- val |= set ;
186- core_write_mmd_indirect (priv , reg , MDIO_MMD_VEND2 , val );
164+ dev_err (& bus -> dev , "failed to write mmd register\n" );
187165
188166 mt7530_mutex_unlock (priv );
189167}
0 commit comments