Lines Matching refs:data
162 struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
165 iscr = readl(data->base + REG_ISCR);
168 writel(iscr, data->base + REG_ISCR);
191 static void sun4i_usb_phy_write(struct sun4i_usb_phy *phy, u32 addr, u32 data,
217 /* set the data bit and clear usbc bit*/
219 if (data & 0x1)
235 data >>= 1;
270 struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
291 if (data->cfg->type == sun8i_a83t_phy ||
292 data->cfg->type == sun50i_h6_phy) {
294 val = readl(data->base + data->cfg->phyctl_offset);
297 writel(val, data->base + data->cfg->phyctl_offset);
300 if (phy->pmu && data->cfg->enable_pmu_unk1) {
314 data->cfg->disc_thresh, 2);
320 data->phy0_init = true;
327 data->id_det = -1;
328 data->vbus_det = -1;
329 queue_delayed_work(system_wq, &data->detect, 0);
338 struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
341 if (data->cfg->type == sun8i_a83t_phy ||
342 data->cfg->type == sun50i_h6_phy) {
343 void __iomem *phyctl = data->base +
344 data->cfg->phyctl_offset;
352 data->phy0_init = false;
363 static int sun4i_usb_phy0_get_id_det(struct sun4i_usb_phy_data *data)
365 switch (data->dr_mode) {
367 if (data->id_det_gpio)
368 return gpiod_get_value_cansleep(data->id_det_gpio);
379 static int sun4i_usb_phy0_get_vbus_det(struct sun4i_usb_phy_data *data)
381 if (data->vbus_det_gpio)
382 return gpiod_get_value_cansleep(data->vbus_det_gpio);
384 if (data->vbus_power_supply) {
388 r = power_supply_get_property(data->vbus_power_supply,
398 static bool sun4i_usb_phy0_have_vbus_det(struct sun4i_usb_phy_data *data)
400 return data->vbus_det_gpio || data->vbus_power_supply;
403 static bool sun4i_usb_phy0_poll(struct sun4i_usb_phy_data *data)
405 if ((data->id_det_gpio && data->id_det_irq <= 0) ||
406 (data->vbus_det_gpio && data->vbus_det_irq <= 0))
415 if ((data->cfg->type == sun6i_a31_phy ||
416 data->cfg->type == sun8i_a33_phy) &&
417 data->vbus_power_supply && data->phys[0].regulator_on)
426 struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
433 if (phy->index == 0 && sun4i_usb_phy0_have_vbus_det(data) &&
434 data->vbus_det) {
446 if (phy->index == 0 && sun4i_usb_phy0_poll(data))
447 mod_delayed_work(system_wq, &data->detect, DEBOUNCE_TIME);
455 struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
467 if (phy->index == 0 && !sun4i_usb_phy0_poll(data))
468 mod_delayed_work(system_wq, &data->detect, POLL_TIME);
477 struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
500 if (new_mode != data->dr_mode) {
502 data->dr_mode = new_mode;
505 data->id_det = -1; /* Force reprocessing of id */
506 data->force_session_end = true;
507 queue_delayed_work(system_wq, &data->detect, 0);
529 static void sun4i_usb_phy0_reroute(struct sun4i_usb_phy_data *data, int id_det)
533 regval = readl(data->base + REG_PHY_OTGCTL);
541 writel(regval, data->base + REG_PHY_OTGCTL);
546 struct sun4i_usb_phy_data *data =
548 struct phy *phy0 = data->phys[0].phy;
557 id_det = sun4i_usb_phy0_get_id_det(data);
558 vbus_det = sun4i_usb_phy0_get_vbus_det(data);
562 if (!data->phy0_init) {
567 force_session_end = data->force_session_end;
568 data->force_session_end = false;
570 if (id_det != data->id_det) {
572 if (data->dr_mode == USB_DR_MODE_OTG &&
573 !sun4i_usb_phy0_have_vbus_det(data))
583 data->id_det = id_det;
587 if (vbus_det != data->vbus_det) {
589 data->vbus_det = vbus_det;
596 extcon_set_state_sync(data->extcon, EXTCON_USB_HOST,
611 if (data->cfg->phy0_dual_route)
612 sun4i_usb_phy0_reroute(data, id_det);
616 extcon_set_state_sync(data->extcon, EXTCON_USB, vbus_det);
618 if (sun4i_usb_phy0_poll(data))
619 queue_delayed_work(system_wq, &data->detect, POLL_TIME);
624 struct sun4i_usb_phy_data *data = dev_id;
627 mod_delayed_work(system_wq, &data->detect, DEBOUNCE_TIME);
635 struct sun4i_usb_phy_data *data =
640 if (val == PSY_EVENT_PROP_CHANGED && psy == data->vbus_power_supply)
641 mod_delayed_work(system_wq, &data->detect, DEBOUNCE_TIME);
649 struct sun4i_usb_phy_data *data = dev_get_drvdata(dev);
651 if (args->args[0] >= data->cfg->num_phys)
654 if (data->cfg->missing_phys & BIT(args->args[0]))
657 return data->phys[args->args[0]].phy;
663 struct sun4i_usb_phy_data *data = dev_get_drvdata(dev);
665 if (data->vbus_power_nb_registered)
666 power_supply_unreg_notifier(&data->vbus_power_nb);
667 if (data->id_det_irq > 0)
668 devm_free_irq(dev, data->id_det_irq, data);
669 if (data->vbus_det_irq > 0)
670 devm_free_irq(dev, data->vbus_det_irq, data);
672 cancel_delayed_work_sync(&data->detect);
685 struct sun4i_usb_phy_data *data;
692 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
693 if (!data)
696 spin_lock_init(&data->reg_lock);
697 INIT_DELAYED_WORK(&data->detect, sun4i_usb_phy0_id_vbus_det_scan);
698 dev_set_drvdata(dev, data);
699 data->cfg = of_device_get_match_data(dev);
700 if (!data->cfg)
704 data->base = devm_ioremap_resource(dev, res);
705 if (IS_ERR(data->base))
706 return PTR_ERR(data->base);
708 data->id_det_gpio = devm_gpiod_get_optional(dev, "usb0_id_det",
710 if (IS_ERR(data->id_det_gpio)) {
712 return PTR_ERR(data->id_det_gpio);
715 data->vbus_det_gpio = devm_gpiod_get_optional(dev, "usb0_vbus_det",
717 if (IS_ERR(data->vbus_det_gpio)) {
719 return PTR_ERR(data->vbus_det_gpio);
723 data->vbus_power_supply = devm_power_supply_get_by_phandle(dev,
725 if (IS_ERR(data->vbus_power_supply)) {
727 return PTR_ERR(data->vbus_power_supply);
730 if (!data->vbus_power_supply)
734 data->dr_mode = of_usb_get_dr_mode_by_phy(np, 0);
736 data->extcon = devm_extcon_dev_allocate(dev, sun4i_usb_phy0_cable);
737 if (IS_ERR(data->extcon)) {
739 return PTR_ERR(data->extcon);
742 ret = devm_extcon_dev_register(dev, data->extcon);
748 for (i = 0; i < data->cfg->num_phys; i++) {
749 struct sun4i_usb_phy *phy = data->phys + i;
752 if (data->cfg->missing_phys & BIT(i))
768 if (data->cfg->dedicated_clocks)
780 if (data->cfg->hsic_index && i == data->cfg->hsic_index) {
797 if (i || data->cfg->phy0_dual_route) { /* No pmu for musb */
813 phy_set_drvdata(phy->phy, &data->phys[i]);
816 data->id_det_irq = gpiod_to_irq(data->id_det_gpio);
817 if (data->id_det_irq > 0) {
818 ret = devm_request_irq(dev, data->id_det_irq,
821 "usb0-id-det", data);
828 data->vbus_det_irq = gpiod_to_irq(data->vbus_det_gpio);
829 if (data->vbus_det_irq > 0) {
830 ret = devm_request_irq(dev, data->vbus_det_irq,
833 "usb0-vbus-det", data);
836 data->vbus_det_irq = -1;
842 if (data->vbus_power_supply) {
843 data->vbus_power_nb.notifier_call = sun4i_usb_phy0_vbus_notify;
844 data->vbus_power_nb.priority = 0;
845 ret = power_supply_reg_notifier(&data->vbus_power_nb);
850 data->vbus_power_nb_registered = true;
978 { .compatible = "allwinner,sun4i-a10-usb-phy", .data = &sun4i_a10_cfg },
979 { .compatible = "allwinner,sun5i-a13-usb-phy", .data = &sun5i_a13_cfg },
980 { .compatible = "allwinner,sun6i-a31-usb-phy", .data = &sun6i_a31_cfg },
981 { .compatible = "allwinner,sun7i-a20-usb-phy", .data = &sun7i_a20_cfg },
982 { .compatible = "allwinner,sun8i-a23-usb-phy", .data = &sun8i_a23_cfg },
983 { .compatible = "allwinner,sun8i-a33-usb-phy", .data = &sun8i_a33_cfg },
984 { .compatible = "allwinner,sun8i-a83t-usb-phy", .data = &sun8i_a83t_cfg },
985 { .compatible = "allwinner,sun8i-h3-usb-phy", .data = &sun8i_h3_cfg },
986 { .compatible = "allwinner,sun8i-r40-usb-phy", .data = &sun8i_r40_cfg },
987 { .compatible = "allwinner,sun8i-v3s-usb-phy", .data = &sun8i_v3s_cfg },
989 .data = &sun50i_a64_cfg},
990 { .compatible = "allwinner,sun50i-h6-usb-phy", .data = &sun50i_h6_cfg },