Adding babble_recovery operation as part of musb->ops, used to recover from babble condition during babble interrupt. Signed-off-by: Ravi Babu <ravibabu@xxxxxx> --- drivers/usb/musb/musb_core.c | 6 ++++++ drivers/usb/musb/musb_core.h | 7 +++++++ 2 files changed, 13 insertions(+), 0 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index ab6fa39..411c29d 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -857,6 +857,12 @@ b_host: } } + /* handle babble condition */ + if (int_usb & MUSB_INTR_BABBLE) { + pr_info("babble: restarting the musb controller.."); + musb_babble_recovery(musb); + } + #if 0 /* REVISIT ... this would be for multiplexing periodic endpoints, or * supporting transfer phasing to prevent exceeding ISO bandwidth diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index f96e899..bf37dc9 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -213,6 +213,8 @@ struct musb_platform_ops { int (*adjust_channel_params)(struct dma_channel *channel, u16 packet_sz, u8 *mode, dma_addr_t *dma_addr, u32 *len); + + void (*babble_recovery)(struct musb *musb); }; /* @@ -590,4 +592,9 @@ static inline int musb_platform_exit(struct musb *musb) return musb->ops->exit(musb); } +static inline void musb_babble_recovery(struct musb *musb) +{ + if (musb->ops->babble_recovery) + musb->ops->babble_recovery(musb); +} #endif /* __MUSB_CORE_H__ */ -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html