xref: /linux/arch/mips/bcm47xx/workarounds.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2a2bec078SRafał Miłecki #include "bcm47xx_private.h"
3a2bec078SRafał Miłecki 
4a2bec078SRafał Miłecki #include <linux/gpio.h>
5a2bec078SRafał Miłecki #include <bcm47xx_board.h>
6a2bec078SRafał Miłecki #include <bcm47xx.h>
7a2bec078SRafał Miłecki 
bcm47xx_workarounds_enable_usb_power(int usb_power)8feef7918STuomas Tynkkynen static void __init bcm47xx_workarounds_enable_usb_power(int usb_power)
9a2bec078SRafał Miłecki {
10a2bec078SRafał Miłecki 	int err;
11a2bec078SRafał Miłecki 
12a2bec078SRafał Miłecki 	err = gpio_request_one(usb_power, GPIOF_OUT_INIT_HIGH, "usb_power");
13a2bec078SRafał Miłecki 	if (err)
14a2bec078SRafał Miłecki 		pr_err("Failed to request USB power gpio: %d\n", err);
15a2bec078SRafał Miłecki 	else
16a2bec078SRafał Miłecki 		gpio_free(usb_power);
17a2bec078SRafał Miłecki }
18a2bec078SRafał Miłecki 
bcm47xx_workarounds(void)19a2bec078SRafał Miłecki void __init bcm47xx_workarounds(void)
20a2bec078SRafał Miłecki {
21a2bec078SRafał Miłecki 	enum bcm47xx_board board = bcm47xx_board_get();
22a2bec078SRafał Miłecki 
23a2bec078SRafał Miłecki 	switch (board) {
24a2bec078SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNR3500L:
25*c022e871SFlorian Fainelli 	case BCM47XX_BOARD_NETGEAR_WNR3500L_V2:
26feef7918STuomas Tynkkynen 		bcm47xx_workarounds_enable_usb_power(12);
27feef7918STuomas Tynkkynen 		break;
28cdb8faa0SPetr Štetiar 	case BCM47XX_BOARD_NETGEAR_WNDR3400V2:
29feef7918STuomas Tynkkynen 	case BCM47XX_BOARD_NETGEAR_WNDR3400_V3:
30feef7918STuomas Tynkkynen 		bcm47xx_workarounds_enable_usb_power(21);
31a2bec078SRafał Miłecki 		break;
32a2bec078SRafał Miłecki 	default:
33a2bec078SRafał Miłecki 		/* No workaround(s) needed */
34a2bec078SRafał Miłecki 		break;
35a2bec078SRafał Miłecki 	}
36a2bec078SRafał Miłecki }
37