On 02/01/2014 09:32 PM, Rafał Miłecki wrote: > --- > V2: Drop pr_debug for devices we don't need workarounds for. It was too > load and not useful at all. > --- This looks good to me, feel free to add my Acked-By. You have to send it with a Signed-off-by line. Hauke > arch/mips/bcm47xx/Makefile | 2 +- > arch/mips/bcm47xx/bcm47xx_private.h | 3 +++ > arch/mips/bcm47xx/setup.c | 1 + > arch/mips/bcm47xx/workarounds.c | 25 +++++++++++++++++++++++++ > 4 files changed, 30 insertions(+), 1 deletion(-) > create mode 100644 arch/mips/bcm47xx/workarounds.c > > diff --git a/arch/mips/bcm47xx/Makefile b/arch/mips/bcm47xx/Makefile > index 4688b6a..d58c51b 100644 > --- a/arch/mips/bcm47xx/Makefile > +++ b/arch/mips/bcm47xx/Makefile > @@ -4,4 +4,4 @@ > # > > obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o > -obj-y += board.o buttons.o leds.o > +obj-y += board.o buttons.o leds.o workarounds.o > diff --git a/arch/mips/bcm47xx/bcm47xx_private.h b/arch/mips/bcm47xx/bcm47xx_private.h > index 5c94ace..0194c3b 100644 > --- a/arch/mips/bcm47xx/bcm47xx_private.h > +++ b/arch/mips/bcm47xx/bcm47xx_private.h > @@ -9,4 +9,7 @@ int __init bcm47xx_buttons_register(void); > /* leds.c */ > void __init bcm47xx_leds_register(void); > > +/* workarounds.c */ > +void __init bcm47xx_workarounds(void); > + > #endif > diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c > index 12d77e9..fdd9692 100644 > --- a/arch/mips/bcm47xx/setup.c > +++ b/arch/mips/bcm47xx/setup.c > @@ -273,6 +273,7 @@ static int __init bcm47xx_register_bus_complete(void) > } > bcm47xx_buttons_register(); > bcm47xx_leds_register(); > + bcm47xx_workarounds(); > > return 0; > } > diff --git a/arch/mips/bcm47xx/workarounds.c b/arch/mips/bcm47xx/workarounds.c > new file mode 100644 > index 0000000..24b850c > --- /dev/null > +++ b/arch/mips/bcm47xx/workarounds.c > @@ -0,0 +1,25 @@ > +#include "bcm47xx_private.h" > + > +#include <linux/gpio.h> > +#include <bcm47xx_board.h> > +#include <bcm47xx.h> > + > +static void __init bcm47xx_workarounds_netgear_wnr3500l(void) > +{ > + /* Set GPIO 12 to 1 to pass power to the USB port */ > + gpio_set_value(12, 1); > +} > + > +void __init bcm47xx_workarounds(void) > +{ > + enum bcm47xx_board board = bcm47xx_board_get(); > + > + switch (board) { > + case BCM47XX_BOARD_NETGEAR_WNR3500L: > + bcm47xx_workarounds_netgear_wnr3500l(); > + break; > + default: > + /* No workaround(s) needed */ > + break; > + } > +} >