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 Tynkkynenstatic 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łeckivoid __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