Skip to content

Commit 843f920

Browse files
Ryceancurrykuba-moo
authored andcommitted
net: usb: ax88179_178a: clean up pm calls
Instead of passing in_pm flags all over the place, use the private struct to handle in_pm mode. Signed-off-by: Justin Chen <justinpopo6@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 9718f9c commit 843f920

File tree

1 file changed

+59
-88
lines changed

1 file changed

+59
-88
lines changed

drivers/net/usb/ax88179_178a.c

+59-88
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ struct ax88179_data {
171171
u8 eee_active;
172172
u16 rxctl;
173173
u16 reserved;
174+
u8 in_pm;
174175
};
175176

176177
struct ax88179_int_data {
@@ -187,15 +188,29 @@ static const struct {
187188
{7, 0xcc, 0x4c, 0x18, 8},
188189
};
189190

191+
static void ax88179_set_pm_mode(struct usbnet *dev, bool pm_mode)
192+
{
193+
struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
194+
195+
ax179_data->in_pm = pm_mode;
196+
}
197+
198+
static int ax88179_in_pm(struct usbnet *dev)
199+
{
200+
struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
201+
202+
return ax179_data->in_pm;
203+
}
204+
190205
static int __ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
191-
u16 size, void *data, int in_pm)
206+
u16 size, void *data)
192207
{
193208
int ret;
194209
int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
195210

196211
BUG_ON(!dev);
197212

198-
if (!in_pm)
213+
if (!ax88179_in_pm(dev))
199214
fn = usbnet_read_cmd;
200215
else
201216
fn = usbnet_read_cmd_nopm;
@@ -211,14 +226,14 @@ static int __ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
211226
}
212227

213228
static int __ax88179_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
214-
u16 size, const void *data, int in_pm)
229+
u16 size, const void *data)
215230
{
216231
int ret;
217232
int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
218233

219234
BUG_ON(!dev);
220235

221-
if (!in_pm)
236+
if (!ax88179_in_pm(dev))
222237
fn = usbnet_write_cmd;
223238
else
224239
fn = usbnet_write_cmd_nopm;
@@ -251,64 +266,23 @@ static void ax88179_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value,
251266
}
252267
}
253268

254-
static int ax88179_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value,
255-
u16 index, u16 size, void *data)
256-
{
257-
int ret;
258-
259-
if (2 == size) {
260-
u16 buf;
261-
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 1);
262-
le16_to_cpus(&buf);
263-
*((u16 *)data) = buf;
264-
} else if (4 == size) {
265-
u32 buf;
266-
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 1);
267-
le32_to_cpus(&buf);
268-
*((u32 *)data) = buf;
269-
} else {
270-
ret = __ax88179_read_cmd(dev, cmd, value, index, size, data, 1);
271-
}
272-
273-
return ret;
274-
}
275-
276-
static int ax88179_write_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value,
277-
u16 index, u16 size, const void *data)
278-
{
279-
int ret;
280-
281-
if (2 == size) {
282-
u16 buf;
283-
buf = *((u16 *)data);
284-
cpu_to_le16s(&buf);
285-
ret = __ax88179_write_cmd(dev, cmd, value, index,
286-
size, &buf, 1);
287-
} else {
288-
ret = __ax88179_write_cmd(dev, cmd, value, index,
289-
size, data, 1);
290-
}
291-
292-
return ret;
293-
}
294-
295269
static int ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
296270
u16 size, void *data)
297271
{
298272
int ret;
299273

300274
if (2 == size) {
301275
u16 buf = 0;
302-
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 0);
276+
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf);
303277
le16_to_cpus(&buf);
304278
*((u16 *)data) = buf;
305279
} else if (4 == size) {
306280
u32 buf = 0;
307-
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 0);
281+
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf);
308282
le32_to_cpus(&buf);
309283
*((u32 *)data) = buf;
310284
} else {
311-
ret = __ax88179_read_cmd(dev, cmd, value, index, size, data, 0);
285+
ret = __ax88179_read_cmd(dev, cmd, value, index, size, data);
312286
}
313287

314288
return ret;
@@ -324,10 +298,10 @@ static int ax88179_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
324298
buf = *((u16 *)data);
325299
cpu_to_le16s(&buf);
326300
ret = __ax88179_write_cmd(dev, cmd, value, index,
327-
size, &buf, 0);
301+
size, &buf);
328302
} else {
329303
ret = __ax88179_write_cmd(dev, cmd, value, index,
330-
size, data, 0);
304+
size, data);
331305
}
332306

333307
return ret;
@@ -430,66 +404,60 @@ static int ax88179_suspend(struct usb_interface *intf, pm_message_t message)
430404
u16 tmp16;
431405
u8 tmp8;
432406

407+
ax88179_set_pm_mode(dev, true);
408+
433409
usbnet_suspend(intf, message);
434410

435411
/* Disable RX path */
436-
ax88179_read_cmd_nopm(dev, AX_ACCESS_MAC, AX_MEDIUM_STATUS_MODE,
437-
2, 2, &tmp16);
412+
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_MEDIUM_STATUS_MODE,
413+
2, 2, &tmp16);
438414
tmp16 &= ~AX_MEDIUM_RECEIVE_EN;
439-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_MEDIUM_STATUS_MODE,
440-
2, 2, &tmp16);
415+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_MEDIUM_STATUS_MODE,
416+
2, 2, &tmp16);
441417

442418
/* Force bulk-in zero length */
443-
ax88179_read_cmd_nopm(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
444-
2, 2, &tmp16);
419+
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
420+
2, 2, &tmp16);
445421

446422
tmp16 |= AX_PHYPWR_RSTCTL_BZ | AX_PHYPWR_RSTCTL_IPRL;
447-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
448-
2, 2, &tmp16);
423+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
424+
2, 2, &tmp16);
449425

450426
/* change clock */
451427
tmp8 = 0;
452-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
428+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
453429

454430
/* Configure RX control register => stop operation */
455431
tmp16 = AX_RX_CTL_STOP;
456-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_RX_CTL, 2, 2, &tmp16);
432+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_RX_CTL, 2, 2, &tmp16);
433+
434+
ax88179_set_pm_mode(dev, false);
457435

458436
return 0;
459437
}
460438

461439
/* This function is used to enable the autodetach function. */
462440
/* This function is determined by offset 0x43 of EEPROM */
463-
static int ax88179_auto_detach(struct usbnet *dev, int in_pm)
441+
static int ax88179_auto_detach(struct usbnet *dev)
464442
{
465443
u16 tmp16;
466444
u8 tmp8;
467-
int (*fnr)(struct usbnet *, u8, u16, u16, u16, void *);
468-
int (*fnw)(struct usbnet *, u8, u16, u16, u16, const void *);
469-
470-
if (!in_pm) {
471-
fnr = ax88179_read_cmd;
472-
fnw = ax88179_write_cmd;
473-
} else {
474-
fnr = ax88179_read_cmd_nopm;
475-
fnw = ax88179_write_cmd_nopm;
476-
}
477445

478-
if (fnr(dev, AX_ACCESS_EEPROM, 0x43, 1, 2, &tmp16) < 0)
446+
if (ax88179_read_cmd(dev, AX_ACCESS_EEPROM, 0x43, 1, 2, &tmp16) < 0)
479447
return 0;
480448

481449
if ((tmp16 == 0xFFFF) || (!(tmp16 & 0x0100)))
482450
return 0;
483451

484452
/* Enable Auto Detach bit */
485453
tmp8 = 0;
486-
fnr(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
454+
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
487455
tmp8 |= AX_CLK_SELECT_ULR;
488-
fnw(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
456+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
489457

490-
fnr(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, &tmp16);
458+
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, &tmp16);
491459
tmp16 |= AX_PHYPWR_RSTCTL_AT;
492-
fnw(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, &tmp16);
460+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, &tmp16);
493461

494462
return 0;
495463
}
@@ -500,32 +468,36 @@ static int ax88179_resume(struct usb_interface *intf)
500468
u16 tmp16;
501469
u8 tmp8;
502470

471+
ax88179_set_pm_mode(dev, true);
472+
503473
usbnet_link_change(dev, 0, 0);
504474

505475
/* Power up ethernet PHY */
506476
tmp16 = 0;
507-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
508-
2, 2, &tmp16);
477+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
478+
2, 2, &tmp16);
509479
udelay(1000);
510480

511481
tmp16 = AX_PHYPWR_RSTCTL_IPRL;
512-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
513-
2, 2, &tmp16);
482+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL,
483+
2, 2, &tmp16);
514484
msleep(200);
515485

516486
/* Ethernet PHY Auto Detach*/
517-
ax88179_auto_detach(dev, 1);
487+
ax88179_auto_detach(dev);
518488

519489
/* Enable clock */
520-
ax88179_read_cmd_nopm(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
490+
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
521491
tmp8 |= AX_CLK_SELECT_ACS | AX_CLK_SELECT_BCS;
522-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
492+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, &tmp8);
523493
msleep(100);
524494

525495
/* Configure RX control register => start operation */
526496
tmp16 = AX_RX_CTL_DROPCRCERR | AX_RX_CTL_IPE | AX_RX_CTL_START |
527497
AX_RX_CTL_AP | AX_RX_CTL_AMALL | AX_RX_CTL_AB;
528-
ax88179_write_cmd_nopm(dev, AX_ACCESS_MAC, AX_RX_CTL, 2, 2, &tmp16);
498+
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_RX_CTL, 2, 2, &tmp16);
499+
500+
ax88179_set_pm_mode(dev, false);
529501

530502
return usbnet_resume(intf);
531503
}
@@ -601,8 +573,7 @@ ax88179_get_eeprom(struct net_device *net, struct ethtool_eeprom *eeprom,
601573
/* ax88179/178A returns 2 bytes from eeprom on read */
602574
for (i = first_word; i <= last_word; i++) {
603575
ret = __ax88179_read_cmd(dev, AX_ACCESS_EEPROM, i, 1, 2,
604-
&eeprom_buff[i - first_word],
605-
0);
576+
&eeprom_buff[i - first_word]);
606577
if (ret < 0) {
607578
kfree(eeprom_buff);
608579
return -EIO;
@@ -1071,7 +1042,7 @@ static int ax88179_check_eeprom(struct usbnet *dev)
10711042
} while (buf & EEP_BUSY);
10721043

10731044
__ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_SROM_DATA_LOW,
1074-
2, 2, &eeprom[i * 2], 0);
1045+
2, 2, &eeprom[i * 2]);
10751046

10761047
if ((i == 0) && (eeprom[0] == 0xFF))
10771048
return -EINVAL;
@@ -1640,7 +1611,7 @@ static int ax88179_reset(struct usbnet *dev)
16401611
msleep(100);
16411612

16421613
/* Ethernet PHY Auto Detach*/
1643-
ax88179_auto_detach(dev, 0);
1614+
ax88179_auto_detach(dev);
16441615

16451616
/* Read MAC address from DTB or asix chip */
16461617
ax88179_get_mac_addr(dev);

0 commit comments

Comments
 (0)