Lines Matching refs:ab

121 /* Driver is using the ab-iddet driver*/
150 static void ab8500_usb_wd_workaround(struct ab8500_usb *ab)
152 abx500_set_register_interruptible(ab->dev,
159 abx500_set_register_interruptible(ab->dev,
167 abx500_set_register_interruptible(ab->dev,
173 static void ab8500_usb_regulator_enable(struct ab8500_usb *ab)
177 ret = regulator_enable(ab->v_ape);
179 dev_err(ab->dev, "Failed to enable v-ape\n");
181 if (ab->flags & AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE) {
182 ab->saved_v_ulpi = regulator_get_voltage(ab->v_ulpi);
183 if (ab->saved_v_ulpi < 0)
184 dev_err(ab->dev, "Failed to get v_ulpi voltage\n");
186 ret = regulator_set_voltage(ab->v_ulpi, 1300000, 1350000);
188 dev_err(ab->dev, "Failed to set the Vintcore to 1.3V, ret=%d\n",
191 ret = regulator_set_load(ab->v_ulpi, 28000);
193 dev_err(ab->dev, "Failed to set optimum mode (ret=%d)\n",
197 ret = regulator_enable(ab->v_ulpi);
199 dev_err(ab->dev, "Failed to enable vddulpivio18\n");
201 if (ab->flags & AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE) {
202 volt = regulator_get_voltage(ab->v_ulpi);
204 dev_err(ab->dev, "Vintcore is not set to 1.3V volt=%d\n",
208 ret = regulator_enable(ab->v_musb);
210 dev_err(ab->dev, "Failed to enable musb_1v8\n");
213 static void ab8500_usb_regulator_disable(struct ab8500_usb *ab)
217 regulator_disable(ab->v_musb);
219 regulator_disable(ab->v_ulpi);
222 if (ab->flags & AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE) {
223 if (ab->saved_v_ulpi > 0) {
224 ret = regulator_set_voltage(ab->v_ulpi,
225 ab->saved_v_ulpi, ab->saved_v_ulpi);
227 dev_err(ab->dev, "Failed to set the Vintcore to %duV, ret=%d\n",
228 ab->saved_v_ulpi, ret);
231 ret = regulator_set_load(ab->v_ulpi, 0);
233 dev_err(ab->dev, "Failed to set optimum mode (ret=%d)\n",
237 regulator_disable(ab->v_ape);
240 static void ab8500_usb_wd_linkstatus(struct ab8500_usb *ab, u8 bit)
243 if (is_ab8500_2p0(ab->ab8500)) {
244 abx500_mask_and_set_register_interruptible(ab->dev,
251 static void ab8500_usb_phy_enable(struct ab8500_usb *ab, bool sel_host)
258 ab->pinctrl = pinctrl_get_select(ab->dev, PINCTRL_STATE_DEFAULT);
259 if (IS_ERR(ab->pinctrl))
260 dev_err(ab->dev, "could not get/set default pinstate\n");
262 if (clk_prepare_enable(ab->sysclk))
263 dev_err(ab->dev, "can't prepare/enable clock\n");
265 ab8500_usb_regulator_enable(ab);
267 abx500_mask_and_set_register_interruptible(ab->dev,
272 static void ab8500_usb_phy_disable(struct ab8500_usb *ab, bool sel_host)
278 ab8500_usb_wd_linkstatus(ab, bit);
280 abx500_mask_and_set_register_interruptible(ab->dev,
285 ab8500_usb_wd_workaround(ab);
287 clk_disable_unprepare(ab->sysclk);
289 ab8500_usb_regulator_disable(ab);
291 if (!IS_ERR(ab->pinctrl)) {
293 ab->pins_sleep = pinctrl_lookup_state(ab->pinctrl,
296 if (IS_ERR(ab->pins_sleep))
297 dev_dbg(ab->dev, "could not get sleep pinstate\n");
298 else if (pinctrl_select_state(ab->pinctrl, ab->pins_sleep))
299 dev_err(ab->dev, "could not set pins to sleep state\n");
305 pinctrl_put(ab->pinctrl);
309 #define ab8500_usb_host_phy_en(ab) ab8500_usb_phy_enable(ab, true)
310 #define ab8500_usb_host_phy_dis(ab) ab8500_usb_phy_disable(ab, true)
311 #define ab8500_usb_peri_phy_en(ab) ab8500_usb_phy_enable(ab, false)
312 #define ab8500_usb_peri_phy_dis(ab) ab8500_usb_phy_disable(ab, false)
314 static int ab8505_usb_link_status_update(struct ab8500_usb *ab,
319 dev_dbg(ab->dev, "ab8505_usb_link_status_update %d\n", lsts);
325 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8505 &&
329 ab->previous_link_status_state = lsts;
340 ab->mode = USB_IDLE;
341 ab->phy.otg->default_a = false;
342 ab->vbus_draw = 0;
349 ab->phy.otg->state = OTG_STATE_B_IDLE;
350 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
360 if (ab->mode == USB_IDLE) {
361 ab->mode = USB_PERIPHERAL;
362 ab8500_usb_peri_phy_en(ab);
363 atomic_notifier_call_chain(&ab->phy.notifier,
364 UX500_MUSB_PREPARE, &ab->vbus_draw);
365 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
376 if (ab->mode == USB_IDLE) {
377 ab->mode = USB_HOST;
378 ab8500_usb_host_phy_en(ab);
379 atomic_notifier_call_chain(&ab->phy.notifier,
380 UX500_MUSB_PREPARE, &ab->vbus_draw);
382 ab->phy.otg->default_a = true;
385 atomic_notifier_call_chain(&ab->phy.notifier,
386 event, &ab->vbus_draw);
390 ab->mode = USB_DEDICATED_CHG;
392 atomic_notifier_call_chain(&ab->phy.notifier,
393 event, &ab->vbus_draw);
394 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER);
408 if (ab->mode == USB_IDLE) {
409 ab->mode = USB_UART;
410 ab8500_usb_peri_phy_en(ab);
422 static int ab8500_usb_link_status_update(struct ab8500_usb *ab,
427 dev_dbg(ab->dev, "ab8500_usb_link_status_update %d\n", lsts);
433 if (ab->previous_link_status_state == USB_LINK_HM_IDGND_8500 &&
438 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8500 &&
442 ab->previous_link_status_state = lsts;
450 ab->mode = USB_IDLE;
451 ab->phy.otg->default_a = false;
452 ab->vbus_draw = 0;
456 ab->phy.otg->state = OTG_STATE_B_IDLE;
457 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
471 if (ab->mode == USB_IDLE) {
472 ab->mode = USB_PERIPHERAL;
473 ab8500_usb_peri_phy_en(ab);
474 atomic_notifier_call_chain(&ab->phy.notifier,
475 UX500_MUSB_PREPARE, &ab->vbus_draw);
476 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
486 if (ab->mode == USB_IDLE) {
487 ab->mode = USB_HOST;
488 ab8500_usb_host_phy_en(ab);
489 atomic_notifier_call_chain(&ab->phy.notifier,
490 UX500_MUSB_PREPARE, &ab->vbus_draw);
492 ab->phy.otg->default_a = true;
495 atomic_notifier_call_chain(&ab->phy.notifier,
496 event, &ab->vbus_draw);
500 ab->mode = USB_DEDICATED_CHG;
502 atomic_notifier_call_chain(&ab->phy.notifier,
503 event, &ab->vbus_draw);
504 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER);
525 static int abx500_usb_link_status_update(struct ab8500_usb *ab)
530 if (is_ab8500(ab->ab8500)) {
533 ret = abx500_get_register_interruptible(ab->dev,
538 ret = ab8500_usb_link_status_update(ab, lsts);
539 } else if (is_ab8505(ab->ab8500)) {
542 ret = abx500_get_register_interruptible(ab->dev,
547 ret = ab8505_usb_link_status_update(ab, lsts);
564 struct ab8500_usb *ab = (struct ab8500_usb *) data;
568 if (ab->mode == USB_HOST) {
569 ab->phy.otg->default_a = false;
570 ab->vbus_draw = 0;
571 atomic_notifier_call_chain(&ab->phy.notifier,
572 event, &ab->vbus_draw);
573 ab8500_usb_host_phy_dis(ab);
574 ab->mode = USB_IDLE;
577 if (ab->mode == USB_PERIPHERAL) {
578 atomic_notifier_call_chain(&ab->phy.notifier,
579 event, &ab->vbus_draw);
580 ab8500_usb_peri_phy_dis(ab);
581 atomic_notifier_call_chain(&ab->phy.notifier,
582 UX500_MUSB_CLEAN, &ab->vbus_draw);
583 ab->mode = USB_IDLE;
584 ab->phy.otg->default_a = false;
585 ab->vbus_draw = 0;
588 if (ab->mode == USB_UART) {
589 ab8500_usb_peri_phy_dis(ab);
590 ab->mode = USB_IDLE;
593 if (is_ab8500_2p0(ab->ab8500)) {
594 if (ab->mode == USB_DEDICATED_CHG) {
595 ab8500_usb_wd_linkstatus(ab,
597 abx500_mask_and_set_register_interruptible(ab->dev,
608 struct ab8500_usb *ab = (struct ab8500_usb *)data;
610 abx500_usb_link_status_update(ab);
617 struct ab8500_usb *ab = container_of(work, struct ab8500_usb,
620 if (!ab->phy.otg->host)
621 ab8500_usb_host_phy_dis(ab);
623 if (!ab->phy.otg->gadget)
624 ab8500_usb_peri_phy_dis(ab);
636 struct ab8500_usb *ab;
641 ab = phy_to_ab(otg->usb_phy);
643 ab->phy.otg->gadget = gadget;
650 if ((ab->mode != USB_IDLE) && !gadget) {
651 ab->mode = USB_IDLE;
652 schedule_work(&ab->phy_dis_work);
660 struct ab8500_usb *ab;
665 ab = phy_to_ab(otg->usb_phy);
667 ab->phy.otg->host = host;
674 if ((ab->mode != USB_IDLE) && !host) {
675 ab->mode = USB_IDLE;
676 schedule_work(&ab->phy_dis_work);
682 static void ab8500_usb_restart_phy(struct ab8500_usb *ab)
684 abx500_mask_and_set_register_interruptible(ab->dev,
691 abx500_mask_and_set_register_interruptible(ab->dev,
696 abx500_mask_and_set_register_interruptible(ab->dev,
703 abx500_mask_and_set_register_interruptible(ab->dev,
709 static int ab8500_usb_regulator_get(struct ab8500_usb *ab)
713 ab->v_ape = devm_regulator_get(ab->dev, "v-ape");
714 if (IS_ERR(ab->v_ape)) {
715 dev_err(ab->dev, "Could not get v-ape supply\n");
716 err = PTR_ERR(ab->v_ape);
720 ab->v_ulpi = devm_regulator_get(ab->dev, "vddulpivio18");
721 if (IS_ERR(ab->v_ulpi)) {
722 dev_err(ab->dev, "Could not get vddulpivio18 supply\n");
723 err = PTR_ERR(ab->v_ulpi);
727 ab->v_musb = devm_regulator_get(ab->dev, "musb_1v8");
728 if (IS_ERR(ab->v_musb)) {
729 dev_err(ab->dev, "Could not get musb_1v8 supply\n");
730 err = PTR_ERR(ab->v_musb);
738 struct ab8500_usb *ab)
743 if (ab->flags & AB8500_USB_FLAG_USE_LINK_STATUS_IRQ) {
750 "usb-link-status", ab);
752 dev_err(ab->dev, "request_irq failed for link status irq\n");
757 if (ab->flags & AB8500_USB_FLAG_USE_ID_WAKEUP_IRQ) {
764 "usb-id-fall", ab);
766 dev_err(ab->dev, "request_irq failed for ID fall irq\n");
771 if (ab->flags & AB8500_USB_FLAG_USE_VBUS_DET_IRQ) {
778 "usb-vbus-fall", ab);
780 dev_err(ab->dev, "request_irq failed for Vbus fall irq\n");
788 static void ab8500_usb_set_ab8500_tuning_values(struct ab8500_usb *ab)
793 err = abx500_set_register_interruptible(ab->dev,
796 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n",
799 err = abx500_set_register_interruptible(ab->dev,
802 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n",
805 err = abx500_set_register_interruptible(ab->dev,
808 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n",
811 err = abx500_set_register_interruptible(ab->dev,
814 dev_err(ab->dev, "Failed to set PHY_TUNE3 register err=%d\n",
818 err = abx500_set_register_interruptible(ab->dev,
821 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n",
825 static void ab8500_usb_set_ab8505_tuning_values(struct ab8500_usb *ab)
830 err = abx500_mask_and_set_register_interruptible(ab->dev,
834 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n",
837 err = abx500_mask_and_set_register_interruptible(ab->dev,
841 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n",
844 err = abx500_mask_and_set_register_interruptible(ab->dev,
848 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n",
851 err = abx500_mask_and_set_register_interruptible(ab->dev,
856 dev_err(ab->dev, "Failed to set PHY_TUNE3 register err=%d\n",
860 err = abx500_mask_and_set_register_interruptible(ab->dev,
864 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n",
870 struct ab8500_usb *ab;
884 ab = devm_kzalloc(&pdev->dev, sizeof(*ab), GFP_KERNEL);
885 if (!ab)
892 ab->dev = &pdev->dev;
893 ab->ab8500 = ab8500;
894 ab->phy.dev = ab->dev;
895 ab->phy.otg = otg;
896 ab->phy.label = "ab8500";
897 ab->phy.set_suspend = ab8500_usb_set_suspend;
898 ab->phy.otg->state = OTG_STATE_UNDEFINED;
900 otg->usb_phy = &ab->phy;
904 if (is_ab8500(ab->ab8500)) {
905 ab->flags |= AB8500_USB_FLAG_USE_LINK_STATUS_IRQ |
909 } else if (is_ab8505(ab->ab8500)) {
910 ab->flags |= AB8500_USB_FLAG_USE_LINK_STATUS_IRQ |
917 if (is_ab8500_2p0_or_earlier(ab->ab8500))
918 ab->flags &= ~AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE;
920 platform_set_drvdata(pdev, ab);
923 INIT_WORK(&ab->phy_dis_work, ab8500_usb_phy_disable_work);
925 err = ab8500_usb_regulator_get(ab);
929 ab->sysclk = devm_clk_get(ab->dev, "sysclk");
930 if (IS_ERR(ab->sysclk)) {
931 dev_err(ab->dev, "Could not get sysclk.\n");
932 return PTR_ERR(ab->sysclk);
935 err = ab8500_usb_irq_setup(pdev, ab);
939 err = usb_add_phy(&ab->phy, USB_PHY_TYPE_USB2);
945 if (is_ab8500(ab->ab8500) && !is_ab8500_2p0_or_earlier(ab->ab8500))
947 ab8500_usb_set_ab8500_tuning_values(ab);
948 else if (is_ab8505(ab->ab8500))
950 ab8500_usb_set_ab8505_tuning_values(ab);
953 ab8500_usb_wd_workaround(ab);
959 ab8500_usb_restart_phy(ab);
961 abx500_usb_link_status_update(ab);
970 struct ab8500_usb *ab = platform_get_drvdata(pdev);
972 cancel_work_sync(&ab->phy_dis_work);
974 usb_remove_phy(&ab->phy);
976 if (ab->mode == USB_HOST)
977 ab8500_usb_host_phy_dis(ab);
978 else if (ab->mode == USB_PERIPHERAL)
979 ab8500_usb_peri_phy_dis(ab);