diff options
Diffstat (limited to 'drivers/usb/musb/musb_core.c')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 71 |
1 files changed, 33 insertions, 38 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index daec6e0f7e38..37a261a6bb6a 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -372,13 +372,13 @@ static void musb_otg_timer_func(unsigned long data) | |||
372 | case OTG_STATE_A_SUSPEND: | 372 | case OTG_STATE_A_SUSPEND: |
373 | case OTG_STATE_A_WAIT_BCON: | 373 | case OTG_STATE_A_WAIT_BCON: |
374 | dev_dbg(musb->controller, "HNP: %s timeout\n", | 374 | dev_dbg(musb->controller, "HNP: %s timeout\n", |
375 | otg_state_string(musb->xceiv->state)); | 375 | usb_otg_state_string(musb->xceiv->state)); |
376 | musb_platform_set_vbus(musb, 0); | 376 | musb_platform_set_vbus(musb, 0); |
377 | musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; | 377 | musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; |
378 | break; | 378 | break; |
379 | default: | 379 | default: |
380 | dev_dbg(musb->controller, "HNP: Unhandled mode %s\n", | 380 | dev_dbg(musb->controller, "HNP: Unhandled mode %s\n", |
381 | otg_state_string(musb->xceiv->state)); | 381 | usb_otg_state_string(musb->xceiv->state)); |
382 | } | 382 | } |
383 | musb->ignore_disconnect = 0; | 383 | musb->ignore_disconnect = 0; |
384 | spin_unlock_irqrestore(&musb->lock, flags); | 384 | spin_unlock_irqrestore(&musb->lock, flags); |
@@ -393,13 +393,14 @@ void musb_hnp_stop(struct musb *musb) | |||
393 | void __iomem *mbase = musb->mregs; | 393 | void __iomem *mbase = musb->mregs; |
394 | u8 reg; | 394 | u8 reg; |
395 | 395 | ||
396 | dev_dbg(musb->controller, "HNP: stop from %s\n", otg_state_string(musb->xceiv->state)); | 396 | dev_dbg(musb->controller, "HNP: stop from %s\n", |
397 | usb_otg_state_string(musb->xceiv->state)); | ||
397 | 398 | ||
398 | switch (musb->xceiv->state) { | 399 | switch (musb->xceiv->state) { |
399 | case OTG_STATE_A_PERIPHERAL: | 400 | case OTG_STATE_A_PERIPHERAL: |
400 | musb_g_disconnect(musb); | 401 | musb_g_disconnect(musb); |
401 | dev_dbg(musb->controller, "HNP: back to %s\n", | 402 | dev_dbg(musb->controller, "HNP: back to %s\n", |
402 | otg_state_string(musb->xceiv->state)); | 403 | usb_otg_state_string(musb->xceiv->state)); |
403 | break; | 404 | break; |
404 | case OTG_STATE_B_HOST: | 405 | case OTG_STATE_B_HOST: |
405 | dev_dbg(musb->controller, "HNP: Disabling HR\n"); | 406 | dev_dbg(musb->controller, "HNP: Disabling HR\n"); |
@@ -413,7 +414,7 @@ void musb_hnp_stop(struct musb *musb) | |||
413 | break; | 414 | break; |
414 | default: | 415 | default: |
415 | dev_dbg(musb->controller, "HNP: Stopping in unknown state %s\n", | 416 | dev_dbg(musb->controller, "HNP: Stopping in unknown state %s\n", |
416 | otg_state_string(musb->xceiv->state)); | 417 | usb_otg_state_string(musb->xceiv->state)); |
417 | } | 418 | } |
418 | 419 | ||
419 | /* | 420 | /* |
@@ -451,7 +452,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
451 | */ | 452 | */ |
452 | if (int_usb & MUSB_INTR_RESUME) { | 453 | if (int_usb & MUSB_INTR_RESUME) { |
453 | handled = IRQ_HANDLED; | 454 | handled = IRQ_HANDLED; |
454 | dev_dbg(musb->controller, "RESUME (%s)\n", otg_state_string(musb->xceiv->state)); | 455 | dev_dbg(musb->controller, "RESUME (%s)\n", usb_otg_state_string(musb->xceiv->state)); |
455 | 456 | ||
456 | if (devctl & MUSB_DEVCTL_HM) { | 457 | if (devctl & MUSB_DEVCTL_HM) { |
457 | void __iomem *mbase = musb->mregs; | 458 | void __iomem *mbase = musb->mregs; |
@@ -493,7 +494,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
493 | default: | 494 | default: |
494 | WARNING("bogus %s RESUME (%s)\n", | 495 | WARNING("bogus %s RESUME (%s)\n", |
495 | "host", | 496 | "host", |
496 | otg_state_string(musb->xceiv->state)); | 497 | usb_otg_state_string(musb->xceiv->state)); |
497 | } | 498 | } |
498 | } else { | 499 | } else { |
499 | switch (musb->xceiv->state) { | 500 | switch (musb->xceiv->state) { |
@@ -522,7 +523,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
522 | default: | 523 | default: |
523 | WARNING("bogus %s RESUME (%s)\n", | 524 | WARNING("bogus %s RESUME (%s)\n", |
524 | "peripheral", | 525 | "peripheral", |
525 | otg_state_string(musb->xceiv->state)); | 526 | usb_otg_state_string(musb->xceiv->state)); |
526 | } | 527 | } |
527 | } | 528 | } |
528 | } | 529 | } |
@@ -538,7 +539,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
538 | } | 539 | } |
539 | 540 | ||
540 | dev_dbg(musb->controller, "SESSION_REQUEST (%s)\n", | 541 | dev_dbg(musb->controller, "SESSION_REQUEST (%s)\n", |
541 | otg_state_string(musb->xceiv->state)); | 542 | usb_otg_state_string(musb->xceiv->state)); |
542 | 543 | ||
543 | /* IRQ arrives from ID pin sense or (later, if VBUS power | 544 | /* IRQ arrives from ID pin sense or (later, if VBUS power |
544 | * is removed) SRP. responses are time critical: | 545 | * is removed) SRP. responses are time critical: |
@@ -602,8 +603,9 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
602 | break; | 603 | break; |
603 | } | 604 | } |
604 | 605 | ||
605 | dev_dbg(musb->controller, "VBUS_ERROR in %s (%02x, %s), retry #%d, port1 %08x\n", | 606 | dev_printk(ignore ? KERN_DEBUG : KERN_ERR, musb->controller, |
606 | otg_state_string(musb->xceiv->state), | 607 | "VBUS_ERROR in %s (%02x, %s), retry #%d, port1 %08x\n", |
608 | usb_otg_state_string(musb->xceiv->state), | ||
607 | devctl, | 609 | devctl, |
608 | ({ char *s; | 610 | ({ char *s; |
609 | switch (devctl & MUSB_DEVCTL_VBUS) { | 611 | switch (devctl & MUSB_DEVCTL_VBUS) { |
@@ -628,7 +630,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
628 | 630 | ||
629 | if (int_usb & MUSB_INTR_SUSPEND) { | 631 | if (int_usb & MUSB_INTR_SUSPEND) { |
630 | dev_dbg(musb->controller, "SUSPEND (%s) devctl %02x\n", | 632 | dev_dbg(musb->controller, "SUSPEND (%s) devctl %02x\n", |
631 | otg_state_string(musb->xceiv->state), devctl); | 633 | usb_otg_state_string(musb->xceiv->state), devctl); |
632 | handled = IRQ_HANDLED; | 634 | handled = IRQ_HANDLED; |
633 | 635 | ||
634 | switch (musb->xceiv->state) { | 636 | switch (musb->xceiv->state) { |
@@ -745,12 +747,12 @@ b_host: | |||
745 | usb_hcd_resume_root_hub(hcd); | 747 | usb_hcd_resume_root_hub(hcd); |
746 | 748 | ||
747 | dev_dbg(musb->controller, "CONNECT (%s) devctl %02x\n", | 749 | dev_dbg(musb->controller, "CONNECT (%s) devctl %02x\n", |
748 | otg_state_string(musb->xceiv->state), devctl); | 750 | usb_otg_state_string(musb->xceiv->state), devctl); |
749 | } | 751 | } |
750 | 752 | ||
751 | if ((int_usb & MUSB_INTR_DISCONNECT) && !musb->ignore_disconnect) { | 753 | if ((int_usb & MUSB_INTR_DISCONNECT) && !musb->ignore_disconnect) { |
752 | dev_dbg(musb->controller, "DISCONNECT (%s) as %s, devctl %02x\n", | 754 | dev_dbg(musb->controller, "DISCONNECT (%s) as %s, devctl %02x\n", |
753 | otg_state_string(musb->xceiv->state), | 755 | usb_otg_state_string(musb->xceiv->state), |
754 | MUSB_MODE(musb), devctl); | 756 | MUSB_MODE(musb), devctl); |
755 | handled = IRQ_HANDLED; | 757 | handled = IRQ_HANDLED; |
756 | 758 | ||
@@ -787,7 +789,7 @@ b_host: | |||
787 | break; | 789 | break; |
788 | default: | 790 | default: |
789 | WARNING("unhandled DISCONNECT transition (%s)\n", | 791 | WARNING("unhandled DISCONNECT transition (%s)\n", |
790 | otg_state_string(musb->xceiv->state)); | 792 | usb_otg_state_string(musb->xceiv->state)); |
791 | break; | 793 | break; |
792 | } | 794 | } |
793 | } | 795 | } |
@@ -813,7 +815,7 @@ b_host: | |||
813 | } | 815 | } |
814 | } else { | 816 | } else { |
815 | dev_dbg(musb->controller, "BUS RESET as %s\n", | 817 | dev_dbg(musb->controller, "BUS RESET as %s\n", |
816 | otg_state_string(musb->xceiv->state)); | 818 | usb_otg_state_string(musb->xceiv->state)); |
817 | switch (musb->xceiv->state) { | 819 | switch (musb->xceiv->state) { |
818 | case OTG_STATE_A_SUSPEND: | 820 | case OTG_STATE_A_SUSPEND: |
819 | /* We need to ignore disconnect on suspend | 821 | /* We need to ignore disconnect on suspend |
@@ -826,7 +828,7 @@ b_host: | |||
826 | case OTG_STATE_A_WAIT_BCON: /* OPT TD.4.7-900ms */ | 828 | case OTG_STATE_A_WAIT_BCON: /* OPT TD.4.7-900ms */ |
827 | /* never use invalid T(a_wait_bcon) */ | 829 | /* never use invalid T(a_wait_bcon) */ |
828 | dev_dbg(musb->controller, "HNP: in %s, %d msec timeout\n", | 830 | dev_dbg(musb->controller, "HNP: in %s, %d msec timeout\n", |
829 | otg_state_string(musb->xceiv->state), | 831 | usb_otg_state_string(musb->xceiv->state), |
830 | TA_WAIT_BCON(musb)); | 832 | TA_WAIT_BCON(musb)); |
831 | mod_timer(&musb->otg_timer, jiffies | 833 | mod_timer(&musb->otg_timer, jiffies |
832 | + msecs_to_jiffies(TA_WAIT_BCON(musb))); | 834 | + msecs_to_jiffies(TA_WAIT_BCON(musb))); |
@@ -838,7 +840,7 @@ b_host: | |||
838 | break; | 840 | break; |
839 | case OTG_STATE_B_WAIT_ACON: | 841 | case OTG_STATE_B_WAIT_ACON: |
840 | dev_dbg(musb->controller, "HNP: RESET (%s), to b_peripheral\n", | 842 | dev_dbg(musb->controller, "HNP: RESET (%s), to b_peripheral\n", |
841 | otg_state_string(musb->xceiv->state)); | 843 | usb_otg_state_string(musb->xceiv->state)); |
842 | musb->xceiv->state = OTG_STATE_B_PERIPHERAL; | 844 | musb->xceiv->state = OTG_STATE_B_PERIPHERAL; |
843 | musb_g_reset(musb); | 845 | musb_g_reset(musb); |
844 | break; | 846 | break; |
@@ -850,7 +852,7 @@ b_host: | |||
850 | break; | 852 | break; |
851 | default: | 853 | default: |
852 | dev_dbg(musb->controller, "Unhandled BUS RESET as %s\n", | 854 | dev_dbg(musb->controller, "Unhandled BUS RESET as %s\n", |
853 | otg_state_string(musb->xceiv->state)); | 855 | usb_otg_state_string(musb->xceiv->state)); |
854 | } | 856 | } |
855 | } | 857 | } |
856 | } | 858 | } |
@@ -1632,7 +1634,7 @@ musb_mode_show(struct device *dev, struct device_attribute *attr, char *buf) | |||
1632 | int ret = -EINVAL; | 1634 | int ret = -EINVAL; |
1633 | 1635 | ||
1634 | spin_lock_irqsave(&musb->lock, flags); | 1636 | spin_lock_irqsave(&musb->lock, flags); |
1635 | ret = sprintf(buf, "%s\n", otg_state_string(musb->xceiv->state)); | 1637 | ret = sprintf(buf, "%s\n", usb_otg_state_string(musb->xceiv->state)); |
1636 | spin_unlock_irqrestore(&musb->lock, flags); | 1638 | spin_unlock_irqrestore(&musb->lock, flags); |
1637 | 1639 | ||
1638 | return ret; | 1640 | return ret; |
@@ -1951,9 +1953,13 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
1951 | musb_write_ulpi_buscontrol(musb->mregs, busctl); | 1953 | musb_write_ulpi_buscontrol(musb->mregs, busctl); |
1952 | } | 1954 | } |
1953 | 1955 | ||
1954 | MUSB_DEV_MODE(musb); | 1956 | if (musb->xceiv->otg->default_a) { |
1955 | musb->xceiv->otg->default_a = 0; | 1957 | MUSB_HST_MODE(musb); |
1956 | musb->xceiv->state = OTG_STATE_B_IDLE; | 1958 | musb->xceiv->state = OTG_STATE_A_IDLE; |
1959 | } else { | ||
1960 | MUSB_DEV_MODE(musb); | ||
1961 | musb->xceiv->state = OTG_STATE_B_IDLE; | ||
1962 | } | ||
1957 | 1963 | ||
1958 | status = musb_gadget_setup(musb); | 1964 | status = musb_gadget_setup(musb); |
1959 | 1965 | ||
@@ -2008,7 +2014,6 @@ static int musb_probe(struct platform_device *pdev) | |||
2008 | { | 2014 | { |
2009 | struct device *dev = &pdev->dev; | 2015 | struct device *dev = &pdev->dev; |
2010 | int irq = platform_get_irq_byname(pdev, "mc"); | 2016 | int irq = platform_get_irq_byname(pdev, "mc"); |
2011 | int status; | ||
2012 | struct resource *iomem; | 2017 | struct resource *iomem; |
2013 | void __iomem *base; | 2018 | void __iomem *base; |
2014 | 2019 | ||
@@ -2016,24 +2021,17 @@ static int musb_probe(struct platform_device *pdev) | |||
2016 | if (!iomem || irq <= 0) | 2021 | if (!iomem || irq <= 0) |
2017 | return -ENODEV; | 2022 | return -ENODEV; |
2018 | 2023 | ||
2019 | base = ioremap(iomem->start, resource_size(iomem)); | 2024 | base = devm_ioremap_resource(dev, iomem); |
2020 | if (!base) { | 2025 | if (IS_ERR(base)) |
2021 | dev_err(dev, "ioremap failed\n"); | 2026 | return PTR_ERR(base); |
2022 | return -ENOMEM; | ||
2023 | } | ||
2024 | 2027 | ||
2025 | status = musb_init_controller(dev, irq, base); | 2028 | return musb_init_controller(dev, irq, base); |
2026 | if (status < 0) | ||
2027 | iounmap(base); | ||
2028 | |||
2029 | return status; | ||
2030 | } | 2029 | } |
2031 | 2030 | ||
2032 | static int musb_remove(struct platform_device *pdev) | 2031 | static int musb_remove(struct platform_device *pdev) |
2033 | { | 2032 | { |
2034 | struct device *dev = &pdev->dev; | 2033 | struct device *dev = &pdev->dev; |
2035 | struct musb *musb = dev_to_musb(dev); | 2034 | struct musb *musb = dev_to_musb(dev); |
2036 | void __iomem *ctrl_base = musb->ctrl_base; | ||
2037 | 2035 | ||
2038 | /* this gets called on rmmod. | 2036 | /* this gets called on rmmod. |
2039 | * - Host mode: host may still be active | 2037 | * - Host mode: host may still be active |
@@ -2044,7 +2042,6 @@ static int musb_remove(struct platform_device *pdev) | |||
2044 | musb_shutdown(pdev); | 2042 | musb_shutdown(pdev); |
2045 | 2043 | ||
2046 | musb_free(musb); | 2044 | musb_free(musb); |
2047 | iounmap(ctrl_base); | ||
2048 | device_init_wakeup(dev, 0); | 2045 | device_init_wakeup(dev, 0); |
2049 | #ifndef CONFIG_MUSB_PIO_ONLY | 2046 | #ifndef CONFIG_MUSB_PIO_ONLY |
2050 | dma_set_mask(dev, *dev->parent->dma_mask); | 2047 | dma_set_mask(dev, *dev->parent->dma_mask); |
@@ -2293,8 +2290,6 @@ static int __init musb_init(void) | |||
2293 | if (usb_disabled()) | 2290 | if (usb_disabled()) |
2294 | return 0; | 2291 | return 0; |
2295 | 2292 | ||
2296 | pr_info("%s: version " MUSB_VERSION ", ?dma?, otg (peripheral+host)\n", | ||
2297 | musb_driver_name); | ||
2298 | return platform_driver_register(&musb_driver); | 2293 | return platform_driver_register(&musb_driver); |
2299 | } | 2294 | } |
2300 | module_init(musb_init); | 2295 | module_init(musb_init); |