Lines Matching refs:ddata

131 static bool cpcap_usb_vbus_valid(struct cpcap_phy_ddata *ddata)
135 error = iio_read_channel_processed(ddata->vbus, &value);
139 dev_err(ddata->dev, "error reading VBUS: %i\n", error);
167 static int cpcap_phy_get_ints_state(struct cpcap_phy_ddata *ddata,
172 error = regmap_read(ddata->reg, CPCAP_REG_INTS1, &val);
180 error = regmap_read(ddata->reg, CPCAP_REG_INTS2, &val);
189 error = regmap_read(ddata->reg, CPCAP_REG_INTS4, &val);
199 static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata);
200 static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata);
202 static void cpcap_usb_try_musb_mailbox(struct cpcap_phy_ddata *ddata,
211 dev_dbg(ddata->dev, "%s: musb_mailbox failed: %i\n",
217 struct cpcap_phy_ddata *ddata;
222 ddata = container_of(work, struct cpcap_phy_ddata, detect_work.work);
224 error = cpcap_phy_get_ints_state(ddata, &s);
228 vbus = cpcap_usb_vbus_valid(ddata);
231 if (s.id_ground && ddata->vbus_provider) {
232 dev_dbg(ddata->dev, "still in USB A-host mode, kicking VBUS\n");
234 cpcap_usb_try_musb_mailbox(ddata, MUSB_ID_GROUND);
236 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3,
246 if (vbus && s.id_ground && ddata->docked) {
247 dev_dbg(ddata->dev, "still docked as A-host, signal ID down\n");
249 cpcap_usb_try_musb_mailbox(ddata, MUSB_ID_GROUND);
255 if (vbus && s.id_ground && !ddata->vbus_provider) {
256 dev_dbg(ddata->dev, "connected to a dock\n");
258 ddata->docked = true;
260 error = cpcap_usb_set_usb_mode(ddata);
264 cpcap_usb_try_musb_mailbox(ddata, MUSB_ID_GROUND);
271 schedule_delayed_work(&ddata->detect_work,
277 if (s.id_ground && !ddata->docked) {
278 dev_dbg(ddata->dev, "id ground, USB host mode\n");
280 ddata->vbus_provider = true;
282 error = cpcap_usb_set_usb_mode(ddata);
286 cpcap_usb_try_musb_mailbox(ddata, MUSB_ID_GROUND);
288 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3,
298 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3,
304 vbus = cpcap_usb_vbus_valid(ddata);
308 dev_dbg(ddata->dev, "connected to USB host\n");
309 error = cpcap_usb_set_usb_mode(ddata);
312 cpcap_usb_try_musb_mailbox(ddata, MUSB_VBUS_VALID);
317 ddata->vbus_provider = false;
318 ddata->docked = false;
319 cpcap_usb_try_musb_mailbox(ddata, MUSB_VBUS_OFF);
322 error = cpcap_usb_set_uart_mode(ddata);
326 dev_dbg(ddata->dev, "set UART mode\n");
331 dev_err(ddata->dev, "error setting cable state: %i\n", error);
336 struct cpcap_phy_ddata *ddata = data;
338 if (!atomic_read(&ddata->active))
341 schedule_delayed_work(&ddata->detect_work, msecs_to_jiffies(1));
347 struct cpcap_phy_ddata *ddata,
356 error = devm_request_threaded_irq(ddata->dev, irq, NULL,
360 name, ddata);
362 dev_err(ddata->dev, "could not get irq %s: %i\n",
383 struct cpcap_phy_ddata *ddata)
388 error = cpcap_usb_init_irq(pdev, ddata, cpcap_phy_irqs[i]);
402 static int cpcap_usb_gpio_set_mode(struct cpcap_phy_ddata *ddata,
405 if (!ddata->gpio[0] || !ddata->gpio[1])
408 gpiod_set_value(ddata->gpio[0], mode & 1);
409 gpiod_set_value(ddata->gpio[1], mode >> 1);
414 static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata)
419 error = cpcap_usb_gpio_set_mode(ddata, CPCAP_UNKNOWN_DISABLED);
423 if (ddata->pins_uart) {
424 error = pinctrl_select_state(ddata->pins, ddata->pins_uart);
429 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC1,
435 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC2,
441 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3, 0x7fff,
447 error = cpcap_usb_gpio_set_mode(ddata, CPCAP_DM_DP);
454 dev_err(ddata->dev, "%s failed with %i\n", __func__, error);
459 static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata)
464 error = cpcap_usb_gpio_set_mode(ddata, CPCAP_UNKNOWN_DISABLED);
468 if (ddata->pins_utmi) {
469 error = pinctrl_select_state(ddata->pins, ddata->pins_utmi);
471 dev_err(ddata->dev, "could not set usb mode: %i\n",
478 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC1,
483 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3,
492 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC2,
499 error = cpcap_usb_gpio_set_mode(ddata, CPCAP_OTG_DM_DP);
506 dev_err(ddata->dev, "%s failed with %i\n", __func__, error);
511 static int cpcap_usb_init_optional_pins(struct cpcap_phy_ddata *ddata)
513 ddata->pins = devm_pinctrl_get(ddata->dev);
514 if (IS_ERR(ddata->pins)) {
515 dev_info(ddata->dev, "default pins not configured: %ld\n",
516 PTR_ERR(ddata->pins));
517 ddata->pins = NULL;
522 ddata->pins_ulpi = pinctrl_lookup_state(ddata->pins, "ulpi");
523 if (IS_ERR(ddata->pins_ulpi)) {
524 dev_info(ddata->dev, "ulpi pins not configured\n");
525 ddata->pins_ulpi = NULL;
528 ddata->pins_utmi = pinctrl_lookup_state(ddata->pins, "utmi");
529 if (IS_ERR(ddata->pins_utmi)) {
530 dev_info(ddata->dev, "utmi pins not configured\n");
531 ddata->pins_utmi = NULL;
534 ddata->pins_uart = pinctrl_lookup_state(ddata->pins, "uart");
535 if (IS_ERR(ddata->pins_uart)) {
536 dev_info(ddata->dev, "uart pins not configured\n");
537 ddata->pins_uart = NULL;
540 if (ddata->pins_uart)
541 return pinctrl_select_state(ddata->pins, ddata->pins_uart);
546 static void cpcap_usb_init_optional_gpios(struct cpcap_phy_ddata *ddata)
551 ddata->gpio[i] = devm_gpiod_get_index(ddata->dev, "mode",
553 if (IS_ERR(ddata->gpio[i])) {
554 dev_info(ddata->dev, "no mode change GPIO%i: %li\n",
555 i, PTR_ERR(ddata->gpio[i]));
556 ddata->gpio[i] = NULL;
561 static int cpcap_usb_init_iio(struct cpcap_phy_ddata *ddata)
566 ddata->vbus = devm_iio_channel_get(ddata->dev, "vbus");
567 if (IS_ERR(ddata->vbus)) {
568 error = PTR_ERR(ddata->vbus);
572 if (!ddata->vbus->indio_dev) {
577 error = iio_get_channel_type(ddata->vbus, &type);
589 dev_err(ddata->dev, "could not initialize VBUS or ID IIO: %i\n",
610 struct cpcap_phy_ddata *ddata;
616 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL);
617 if (!ddata)
620 ddata->reg = dev_get_regmap(pdev->dev.parent, NULL);
621 if (!ddata->reg)
628 ddata->dev = &pdev->dev;
629 ddata->phy.dev = ddata->dev;
630 ddata->phy.label = "cpcap_usb_phy";
631 ddata->phy.otg = otg;
632 ddata->phy.type = USB_PHY_TYPE_USB2;
635 otg->usb_phy = &ddata->phy;
636 INIT_DELAYED_WORK(&ddata->detect_work, cpcap_usb_detect);
637 platform_set_drvdata(pdev, ddata);
639 ddata->vusb = devm_regulator_get(&pdev->dev, "vusb");
640 if (IS_ERR(ddata->vusb))
641 return PTR_ERR(ddata->vusb);
643 error = regulator_enable(ddata->vusb);
647 generic_phy = devm_phy_create(ddata->dev, NULL, &ops);
653 phy_set_drvdata(generic_phy, ddata);
655 phy_provider = devm_of_phy_provider_register(ddata->dev,
662 error = cpcap_usb_init_optional_pins(ddata);
666 cpcap_usb_init_optional_gpios(ddata);
668 error = cpcap_usb_init_iio(ddata);
672 error = cpcap_usb_init_interrupts(pdev, ddata);
676 usb_add_phy_dev(&ddata->phy);
677 atomic_set(&ddata->active, 1);
678 schedule_delayed_work(&ddata->detect_work, msecs_to_jiffies(1));
683 regulator_disable(ddata->vusb);
690 struct cpcap_phy_ddata *ddata = platform_get_drvdata(pdev);
693 atomic_set(&ddata->active, 0);
694 error = cpcap_usb_set_uart_mode(ddata);
696 dev_err(ddata->dev, "could not set UART mode\n");
698 cpcap_usb_try_musb_mailbox(ddata, MUSB_VBUS_OFF);
700 usb_remove_phy(&ddata->phy);
701 cancel_delayed_work_sync(&ddata->detect_work);
702 regulator_disable(ddata->vusb);