--- zzzz-none-000/linux-2.6.28.10/drivers/usb/musb/musb_virthub.c 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/drivers/usb/musb/musb_virthub.c 2010-09-20 13:51:47.000000000 +0000 @@ -43,6 +43,10 @@ #include +#ifdef CONFIG_AVM_POWERMETER +#include +#endif /*--- #ifdef CONFIG_AVM_POWERMETER ---*/ + #include "musb_core.h" @@ -335,6 +339,26 @@ musb->xceiv.state = OTG_STATE_A_HOST; } +# ifdef CONFIG_AVM_POWERMETER + { + /* first Port Only */ + static unsigned char ucOldPower = 255; + unsigned char ucNewPower = 0; + struct usb_device *childdev = hcd->self.root_hub->children[0]; + if (childdev != NULL) { + ucNewPower = (childdev->actconfig != NULL) + ? childdev->actconfig->desc.bMaxPower + : 50;/* default: 50 means 100 mA*/ + } + if (ucOldPower != ucNewPower) { + ucOldPower = ucNewPower; + DBG (1, "MUSB: AVM Powermeter changed to %u mA\n", ucNewPower*2); + PowerManagmentRessourceInfo(powerdevice_usb_host, ucNewPower*2); + } + } +# endif /*--- #ifdef CONFIG_AVM_POWERMETER ---*/ + + put_unaligned(cpu_to_le32(musb->port1_status & ~MUSB_PORT_STAT_RESUME), (__le32 *) buf); @@ -359,8 +383,10 @@ * initialization logic, e.g. for OTG, or change any * logic relating to VBUS power-up. */ - if (!(is_otg_enabled(musb) && hcd->self.is_b_host)) - musb_start(musb); + if (!(is_otg_enabled(musb) && hcd->self.is_b_host)) { + /* == 20100920 AVM/WK FIX dont't restart if already active */ + if (!musb->is_active) musb_start(musb); + } break; case USB_PORT_FEAT_RESET: musb_port_reset(musb, true);