• Home
  • Raw
  • Download

Lines Matching full:ab

5  * Copyright (C) 2010-2013 ST-Ericsson AB
120 /* Driver is using the ab-iddet driver*/
149 static void ab8500_usb_wd_workaround(struct ab8500_usb *ab) in ab8500_usb_wd_workaround() argument
151 abx500_set_register_interruptible(ab->dev, in ab8500_usb_wd_workaround()
158 abx500_set_register_interruptible(ab->dev, in ab8500_usb_wd_workaround()
166 abx500_set_register_interruptible(ab->dev, in ab8500_usb_wd_workaround()
172 static void ab8500_usb_regulator_enable(struct ab8500_usb *ab) in ab8500_usb_regulator_enable() argument
176 ret = regulator_enable(ab->v_ape); in ab8500_usb_regulator_enable()
178 dev_err(ab->dev, "Failed to enable v-ape\n"); in ab8500_usb_regulator_enable()
180 if (ab->flags & AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE) { in ab8500_usb_regulator_enable()
181 ab->saved_v_ulpi = regulator_get_voltage(ab->v_ulpi); in ab8500_usb_regulator_enable()
182 if (ab->saved_v_ulpi < 0) in ab8500_usb_regulator_enable()
183 dev_err(ab->dev, "Failed to get v_ulpi voltage\n"); in ab8500_usb_regulator_enable()
185 ret = regulator_set_voltage(ab->v_ulpi, 1300000, 1350000); in ab8500_usb_regulator_enable()
187 dev_err(ab->dev, "Failed to set the Vintcore to 1.3V, ret=%d\n", in ab8500_usb_regulator_enable()
190 ret = regulator_set_load(ab->v_ulpi, 28000); in ab8500_usb_regulator_enable()
192 dev_err(ab->dev, "Failed to set optimum mode (ret=%d)\n", in ab8500_usb_regulator_enable()
196 ret = regulator_enable(ab->v_ulpi); in ab8500_usb_regulator_enable()
198 dev_err(ab->dev, "Failed to enable vddulpivio18\n"); in ab8500_usb_regulator_enable()
200 if (ab->flags & AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE) { in ab8500_usb_regulator_enable()
201 volt = regulator_get_voltage(ab->v_ulpi); in ab8500_usb_regulator_enable()
203 dev_err(ab->dev, "Vintcore is not set to 1.3V volt=%d\n", in ab8500_usb_regulator_enable()
207 ret = regulator_enable(ab->v_musb); in ab8500_usb_regulator_enable()
209 dev_err(ab->dev, "Failed to enable musb_1v8\n"); in ab8500_usb_regulator_enable()
212 static void ab8500_usb_regulator_disable(struct ab8500_usb *ab) in ab8500_usb_regulator_disable() argument
216 regulator_disable(ab->v_musb); in ab8500_usb_regulator_disable()
218 regulator_disable(ab->v_ulpi); in ab8500_usb_regulator_disable()
221 if (ab->flags & AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE) { in ab8500_usb_regulator_disable()
222 if (ab->saved_v_ulpi > 0) { in ab8500_usb_regulator_disable()
223 ret = regulator_set_voltage(ab->v_ulpi, in ab8500_usb_regulator_disable()
224 ab->saved_v_ulpi, ab->saved_v_ulpi); in ab8500_usb_regulator_disable()
226 dev_err(ab->dev, "Failed to set the Vintcore to %duV, ret=%d\n", in ab8500_usb_regulator_disable()
227 ab->saved_v_ulpi, ret); in ab8500_usb_regulator_disable()
230 ret = regulator_set_load(ab->v_ulpi, 0); in ab8500_usb_regulator_disable()
232 dev_err(ab->dev, "Failed to set optimum mode (ret=%d)\n", in ab8500_usb_regulator_disable()
236 regulator_disable(ab->v_ape); in ab8500_usb_regulator_disable()
239 static void ab8500_usb_wd_linkstatus(struct ab8500_usb *ab, u8 bit) in ab8500_usb_wd_linkstatus() argument
242 if (is_ab8500_2p0(ab->ab8500)) { in ab8500_usb_wd_linkstatus()
243 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_wd_linkstatus()
250 static void ab8500_usb_phy_enable(struct ab8500_usb *ab, bool sel_host) in ab8500_usb_phy_enable() argument
257 ab->pinctrl = pinctrl_get_select(ab->dev, PINCTRL_STATE_DEFAULT); in ab8500_usb_phy_enable()
258 if (IS_ERR(ab->pinctrl)) in ab8500_usb_phy_enable()
259 dev_err(ab->dev, "could not get/set default pinstate\n"); in ab8500_usb_phy_enable()
261 if (clk_prepare_enable(ab->sysclk)) in ab8500_usb_phy_enable()
262 dev_err(ab->dev, "can't prepare/enable clock\n"); in ab8500_usb_phy_enable()
264 ab8500_usb_regulator_enable(ab); in ab8500_usb_phy_enable()
266 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_phy_enable()
271 static void ab8500_usb_phy_disable(struct ab8500_usb *ab, bool sel_host) in ab8500_usb_phy_disable() argument
277 ab8500_usb_wd_linkstatus(ab, bit); in ab8500_usb_phy_disable()
279 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_phy_disable()
284 ab8500_usb_wd_workaround(ab); in ab8500_usb_phy_disable()
286 clk_disable_unprepare(ab->sysclk); in ab8500_usb_phy_disable()
288 ab8500_usb_regulator_disable(ab); in ab8500_usb_phy_disable()
290 if (!IS_ERR(ab->pinctrl)) { in ab8500_usb_phy_disable()
292 ab->pins_sleep = pinctrl_lookup_state(ab->pinctrl, in ab8500_usb_phy_disable()
295 if (IS_ERR(ab->pins_sleep)) in ab8500_usb_phy_disable()
296 dev_dbg(ab->dev, "could not get sleep pinstate\n"); in ab8500_usb_phy_disable()
297 else if (pinctrl_select_state(ab->pinctrl, ab->pins_sleep)) in ab8500_usb_phy_disable()
298 dev_err(ab->dev, "could not set pins to sleep state\n"); in ab8500_usb_phy_disable()
304 pinctrl_put(ab->pinctrl); in ab8500_usb_phy_disable()
308 #define ab8500_usb_host_phy_en(ab) ab8500_usb_phy_enable(ab, true) argument
309 #define ab8500_usb_host_phy_dis(ab) ab8500_usb_phy_disable(ab, true) argument
310 #define ab8500_usb_peri_phy_en(ab) ab8500_usb_phy_enable(ab, false) argument
311 #define ab8500_usb_peri_phy_dis(ab) ab8500_usb_phy_disable(ab, false) argument
313 static int ab8505_usb_link_status_update(struct ab8500_usb *ab, in ab8505_usb_link_status_update() argument
318 dev_dbg(ab->dev, "ab8505_usb_link_status_update %d\n", lsts); in ab8505_usb_link_status_update()
324 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8505 && in ab8505_usb_link_status_update()
328 ab->previous_link_status_state = lsts; in ab8505_usb_link_status_update()
338 ab->mode = USB_IDLE; in ab8505_usb_link_status_update()
339 ab->phy.otg->default_a = false; in ab8505_usb_link_status_update()
340 ab->vbus_draw = 0; in ab8505_usb_link_status_update()
347 ab->phy.otg->state = OTG_STATE_B_IDLE; in ab8505_usb_link_status_update()
348 usb_phy_set_event(&ab->phy, USB_EVENT_NONE); in ab8505_usb_link_status_update()
357 if (ab->mode == USB_IDLE) { in ab8505_usb_link_status_update()
358 ab->mode = USB_PERIPHERAL; in ab8505_usb_link_status_update()
359 ab8500_usb_peri_phy_en(ab); in ab8505_usb_link_status_update()
360 atomic_notifier_call_chain(&ab->phy.notifier, in ab8505_usb_link_status_update()
361 UX500_MUSB_PREPARE, &ab->vbus_draw); in ab8505_usb_link_status_update()
362 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED); in ab8505_usb_link_status_update()
372 if (ab->mode == USB_IDLE) { in ab8505_usb_link_status_update()
373 ab->mode = USB_HOST; in ab8505_usb_link_status_update()
374 ab8500_usb_host_phy_en(ab); in ab8505_usb_link_status_update()
375 atomic_notifier_call_chain(&ab->phy.notifier, in ab8505_usb_link_status_update()
376 UX500_MUSB_PREPARE, &ab->vbus_draw); in ab8505_usb_link_status_update()
378 ab->phy.otg->default_a = true; in ab8505_usb_link_status_update()
381 atomic_notifier_call_chain(&ab->phy.notifier, in ab8505_usb_link_status_update()
382 event, &ab->vbus_draw); in ab8505_usb_link_status_update()
386 ab->mode = USB_DEDICATED_CHG; in ab8505_usb_link_status_update()
388 atomic_notifier_call_chain(&ab->phy.notifier, in ab8505_usb_link_status_update()
389 event, &ab->vbus_draw); in ab8505_usb_link_status_update()
390 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER); in ab8505_usb_link_status_update()
400 static int ab8500_usb_link_status_update(struct ab8500_usb *ab, in ab8500_usb_link_status_update() argument
405 dev_dbg(ab->dev, "ab8500_usb_link_status_update %d\n", lsts); in ab8500_usb_link_status_update()
411 if (ab->previous_link_status_state == USB_LINK_HM_IDGND_8500 && in ab8500_usb_link_status_update()
416 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8500 && in ab8500_usb_link_status_update()
420 ab->previous_link_status_state = lsts; in ab8500_usb_link_status_update()
427 ab->mode = USB_IDLE; in ab8500_usb_link_status_update()
428 ab->phy.otg->default_a = false; in ab8500_usb_link_status_update()
429 ab->vbus_draw = 0; in ab8500_usb_link_status_update()
433 ab->phy.otg->state = OTG_STATE_B_IDLE; in ab8500_usb_link_status_update()
434 usb_phy_set_event(&ab->phy, USB_EVENT_NONE); in ab8500_usb_link_status_update()
447 if (ab->mode == USB_IDLE) { in ab8500_usb_link_status_update()
448 ab->mode = USB_PERIPHERAL; in ab8500_usb_link_status_update()
449 ab8500_usb_peri_phy_en(ab); in ab8500_usb_link_status_update()
450 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_link_status_update()
451 UX500_MUSB_PREPARE, &ab->vbus_draw); in ab8500_usb_link_status_update()
452 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED); in ab8500_usb_link_status_update()
461 if (ab->mode == USB_IDLE) { in ab8500_usb_link_status_update()
462 ab->mode = USB_HOST; in ab8500_usb_link_status_update()
463 ab8500_usb_host_phy_en(ab); in ab8500_usb_link_status_update()
464 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_link_status_update()
465 UX500_MUSB_PREPARE, &ab->vbus_draw); in ab8500_usb_link_status_update()
467 ab->phy.otg->default_a = true; in ab8500_usb_link_status_update()
470 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_link_status_update()
471 event, &ab->vbus_draw); in ab8500_usb_link_status_update()
475 ab->mode = USB_DEDICATED_CHG; in ab8500_usb_link_status_update()
477 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_link_status_update()
478 event, &ab->vbus_draw); in ab8500_usb_link_status_update()
479 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER); in ab8500_usb_link_status_update()
492 * 2. Enable AB clock
493 * 3. Enable AB regulators
500 static int abx500_usb_link_status_update(struct ab8500_usb *ab) in abx500_usb_link_status_update() argument
505 if (is_ab8500(ab->ab8500)) { in abx500_usb_link_status_update()
508 abx500_get_register_interruptible(ab->dev, in abx500_usb_link_status_update()
511 ret = ab8500_usb_link_status_update(ab, lsts); in abx500_usb_link_status_update()
512 } else if (is_ab8505(ab->ab8500)) { in abx500_usb_link_status_update()
515 abx500_get_register_interruptible(ab->dev, in abx500_usb_link_status_update()
518 ret = ab8505_usb_link_status_update(ab, lsts); in abx500_usb_link_status_update()
528 * 3. Disable AB clock
535 struct ab8500_usb *ab = (struct ab8500_usb *) data; in ab8500_usb_disconnect_irq() local
539 if (ab->mode == USB_HOST) { in ab8500_usb_disconnect_irq()
540 ab->phy.otg->default_a = false; in ab8500_usb_disconnect_irq()
541 ab->vbus_draw = 0; in ab8500_usb_disconnect_irq()
542 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_disconnect_irq()
543 event, &ab->vbus_draw); in ab8500_usb_disconnect_irq()
544 ab8500_usb_host_phy_dis(ab); in ab8500_usb_disconnect_irq()
545 ab->mode = USB_IDLE; in ab8500_usb_disconnect_irq()
548 if (ab->mode == USB_PERIPHERAL) { in ab8500_usb_disconnect_irq()
549 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_disconnect_irq()
550 event, &ab->vbus_draw); in ab8500_usb_disconnect_irq()
551 ab8500_usb_peri_phy_dis(ab); in ab8500_usb_disconnect_irq()
552 atomic_notifier_call_chain(&ab->phy.notifier, in ab8500_usb_disconnect_irq()
553 UX500_MUSB_CLEAN, &ab->vbus_draw); in ab8500_usb_disconnect_irq()
554 ab->mode = USB_IDLE; in ab8500_usb_disconnect_irq()
555 ab->phy.otg->default_a = false; in ab8500_usb_disconnect_irq()
556 ab->vbus_draw = 0; in ab8500_usb_disconnect_irq()
559 if (is_ab8500_2p0(ab->ab8500)) { in ab8500_usb_disconnect_irq()
560 if (ab->mode == USB_DEDICATED_CHG) { in ab8500_usb_disconnect_irq()
561 ab8500_usb_wd_linkstatus(ab, in ab8500_usb_disconnect_irq()
563 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_disconnect_irq()
574 struct ab8500_usb *ab = (struct ab8500_usb *)data; in ab8500_usb_link_status_irq() local
576 abx500_usb_link_status_update(ab); in ab8500_usb_link_status_irq()
583 struct ab8500_usb *ab = container_of(work, struct ab8500_usb, in ab8500_usb_phy_disable_work() local
586 if (!ab->phy.otg->host) in ab8500_usb_phy_disable_work()
587 ab8500_usb_host_phy_dis(ab); in ab8500_usb_phy_disable_work()
589 if (!ab->phy.otg->gadget) in ab8500_usb_phy_disable_work()
590 ab8500_usb_peri_phy_dis(ab); in ab8500_usb_phy_disable_work()
602 struct ab8500_usb *ab; in ab8500_usb_set_peripheral() local
607 ab = phy_to_ab(otg->usb_phy); in ab8500_usb_set_peripheral()
609 ab->phy.otg->gadget = gadget; in ab8500_usb_set_peripheral()
616 if ((ab->mode != USB_IDLE) && !gadget) { in ab8500_usb_set_peripheral()
617 ab->mode = USB_IDLE; in ab8500_usb_set_peripheral()
618 schedule_work(&ab->phy_dis_work); in ab8500_usb_set_peripheral()
626 struct ab8500_usb *ab; in ab8500_usb_set_host() local
631 ab = phy_to_ab(otg->usb_phy); in ab8500_usb_set_host()
633 ab->phy.otg->host = host; in ab8500_usb_set_host()
640 if ((ab->mode != USB_IDLE) && !host) { in ab8500_usb_set_host()
641 ab->mode = USB_IDLE; in ab8500_usb_set_host()
642 schedule_work(&ab->phy_dis_work); in ab8500_usb_set_host()
648 static void ab8500_usb_restart_phy(struct ab8500_usb *ab) in ab8500_usb_restart_phy() argument
650 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_restart_phy()
657 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_restart_phy()
662 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_restart_phy()
669 abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_restart_phy()
675 static int ab8500_usb_regulator_get(struct ab8500_usb *ab) in ab8500_usb_regulator_get() argument
679 ab->v_ape = devm_regulator_get(ab->dev, "v-ape"); in ab8500_usb_regulator_get()
680 if (IS_ERR(ab->v_ape)) { in ab8500_usb_regulator_get()
681 dev_err(ab->dev, "Could not get v-ape supply\n"); in ab8500_usb_regulator_get()
682 err = PTR_ERR(ab->v_ape); in ab8500_usb_regulator_get()
686 ab->v_ulpi = devm_regulator_get(ab->dev, "vddulpivio18"); in ab8500_usb_regulator_get()
687 if (IS_ERR(ab->v_ulpi)) { in ab8500_usb_regulator_get()
688 dev_err(ab->dev, "Could not get vddulpivio18 supply\n"); in ab8500_usb_regulator_get()
689 err = PTR_ERR(ab->v_ulpi); in ab8500_usb_regulator_get()
693 ab->v_musb = devm_regulator_get(ab->dev, "musb_1v8"); in ab8500_usb_regulator_get()
694 if (IS_ERR(ab->v_musb)) { in ab8500_usb_regulator_get()
695 dev_err(ab->dev, "Could not get musb_1v8 supply\n"); in ab8500_usb_regulator_get()
696 err = PTR_ERR(ab->v_musb); in ab8500_usb_regulator_get()
704 struct ab8500_usb *ab) in ab8500_usb_irq_setup() argument
709 if (ab->flags & AB8500_USB_FLAG_USE_LINK_STATUS_IRQ) { in ab8500_usb_irq_setup()
718 "usb-link-status", ab); in ab8500_usb_irq_setup()
720 dev_err(ab->dev, "request_irq failed for link status irq\n"); in ab8500_usb_irq_setup()
725 if (ab->flags & AB8500_USB_FLAG_USE_ID_WAKEUP_IRQ) { in ab8500_usb_irq_setup()
734 "usb-id-fall", ab); in ab8500_usb_irq_setup()
736 dev_err(ab->dev, "request_irq failed for ID fall irq\n"); in ab8500_usb_irq_setup()
741 if (ab->flags & AB8500_USB_FLAG_USE_VBUS_DET_IRQ) { in ab8500_usb_irq_setup()
750 "usb-vbus-fall", ab); in ab8500_usb_irq_setup()
752 dev_err(ab->dev, "request_irq failed for Vbus fall irq\n"); in ab8500_usb_irq_setup()
760 static void ab8500_usb_set_ab8500_tuning_values(struct ab8500_usb *ab) in ab8500_usb_set_ab8500_tuning_values() argument
765 err = abx500_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8500_tuning_values()
768 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", in ab8500_usb_set_ab8500_tuning_values()
771 err = abx500_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8500_tuning_values()
774 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", in ab8500_usb_set_ab8500_tuning_values()
777 err = abx500_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8500_tuning_values()
780 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", in ab8500_usb_set_ab8500_tuning_values()
783 err = abx500_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8500_tuning_values()
786 dev_err(ab->dev, "Failed to set PHY_TUNE3 register err=%d\n", in ab8500_usb_set_ab8500_tuning_values()
790 err = abx500_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8500_tuning_values()
793 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", in ab8500_usb_set_ab8500_tuning_values()
797 static void ab8500_usb_set_ab8505_tuning_values(struct ab8500_usb *ab) in ab8500_usb_set_ab8505_tuning_values() argument
802 err = abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8505_tuning_values()
806 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", in ab8500_usb_set_ab8505_tuning_values()
809 err = abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8505_tuning_values()
813 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", in ab8500_usb_set_ab8505_tuning_values()
816 err = abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8505_tuning_values()
820 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", in ab8500_usb_set_ab8505_tuning_values()
823 err = abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8505_tuning_values()
828 dev_err(ab->dev, "Failed to set PHY_TUNE3 register err=%d\n", in ab8500_usb_set_ab8505_tuning_values()
832 err = abx500_mask_and_set_register_interruptible(ab->dev, in ab8500_usb_set_ab8505_tuning_values()
836 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", in ab8500_usb_set_ab8505_tuning_values()
842 struct ab8500_usb *ab; in ab8500_usb_probe() local
856 ab = devm_kzalloc(&pdev->dev, sizeof(*ab), GFP_KERNEL); in ab8500_usb_probe()
857 if (!ab) in ab8500_usb_probe()
864 ab->dev = &pdev->dev; in ab8500_usb_probe()
865 ab->ab8500 = ab8500; in ab8500_usb_probe()
866 ab->phy.dev = ab->dev; in ab8500_usb_probe()
867 ab->phy.otg = otg; in ab8500_usb_probe()
868 ab->phy.label = "ab8500"; in ab8500_usb_probe()
869 ab->phy.set_suspend = ab8500_usb_set_suspend; in ab8500_usb_probe()
870 ab->phy.otg->state = OTG_STATE_UNDEFINED; in ab8500_usb_probe()
872 otg->usb_phy = &ab->phy; in ab8500_usb_probe()
876 if (is_ab8500(ab->ab8500)) { in ab8500_usb_probe()
877 ab->flags |= AB8500_USB_FLAG_USE_LINK_STATUS_IRQ | in ab8500_usb_probe()
881 } else if (is_ab8505(ab->ab8500)) { in ab8500_usb_probe()
882 ab->flags |= AB8500_USB_FLAG_USE_LINK_STATUS_IRQ | in ab8500_usb_probe()
889 if (is_ab8500_2p0_or_earlier(ab->ab8500)) in ab8500_usb_probe()
890 ab->flags &= ~AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE; in ab8500_usb_probe()
892 platform_set_drvdata(pdev, ab); in ab8500_usb_probe()
895 INIT_WORK(&ab->phy_dis_work, ab8500_usb_phy_disable_work); in ab8500_usb_probe()
897 err = ab8500_usb_regulator_get(ab); in ab8500_usb_probe()
901 ab->sysclk = devm_clk_get(ab->dev, "sysclk"); in ab8500_usb_probe()
902 if (IS_ERR(ab->sysclk)) { in ab8500_usb_probe()
903 dev_err(ab->dev, "Could not get sysclk.\n"); in ab8500_usb_probe()
904 return PTR_ERR(ab->sysclk); in ab8500_usb_probe()
907 err = ab8500_usb_irq_setup(pdev, ab); in ab8500_usb_probe()
911 err = usb_add_phy(&ab->phy, USB_PHY_TYPE_USB2); in ab8500_usb_probe()
917 if (is_ab8500(ab->ab8500) && !is_ab8500_2p0_or_earlier(ab->ab8500)) in ab8500_usb_probe()
919 ab8500_usb_set_ab8500_tuning_values(ab); in ab8500_usb_probe()
920 else if (is_ab8505(ab->ab8500)) in ab8500_usb_probe()
922 ab8500_usb_set_ab8505_tuning_values(ab); in ab8500_usb_probe()
925 ab8500_usb_wd_workaround(ab); in ab8500_usb_probe()
931 ab8500_usb_restart_phy(ab); in ab8500_usb_probe()
933 abx500_usb_link_status_update(ab); in ab8500_usb_probe()
942 struct ab8500_usb *ab = platform_get_drvdata(pdev); in ab8500_usb_remove() local
944 cancel_work_sync(&ab->phy_dis_work); in ab8500_usb_remove()
946 usb_remove_phy(&ab->phy); in ab8500_usb_remove()
948 if (ab->mode == USB_HOST) in ab8500_usb_remove()
949 ab8500_usb_host_phy_dis(ab); in ab8500_usb_remove()
950 else if (ab->mode == USB_PERIPHERAL) in ab8500_usb_remove()
951 ab8500_usb_peri_phy_dis(ab); in ab8500_usb_remove()
983 MODULE_AUTHOR("ST-Ericsson AB");