Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

phy-sun4i-usb: Simplify missing dr_mode handling

If we cannot get dr_mode or no id gpio is specified simply assume
peripheral mode, as this is always safe.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

authored by

Hans de Goede and committed by
Kishon Vijay Abraham I
5f90d31c 36f9159b

+14 -28
+14 -28
drivers/phy/phy-sun4i-usb.c
··· 124 124 bool regulator_on; 125 125 int index; 126 126 } phys[MAX_PHYS]; 127 - int first_phy; 128 127 /* phy0 / otg related variables */ 129 128 struct extcon_dev *extcon; 130 129 bool phy0_init; ··· 325 326 { 326 327 switch (data->dr_mode) { 327 328 case USB_DR_MODE_OTG: 328 - return gpiod_get_value_cansleep(data->id_det_gpio); 329 + if (data->id_det_gpio) 330 + return gpiod_get_value_cansleep(data->id_det_gpio); 331 + else 332 + return 1; /* Fallback to peripheral mode */ 329 333 case USB_DR_MODE_HOST: 330 334 return 0; 331 335 case USB_DR_MODE_PERIPHERAL: ··· 541 539 { 542 540 struct sun4i_usb_phy_data *data = dev_get_drvdata(dev); 543 541 544 - if (args->args[0] < data->first_phy || 545 - args->args[0] >= data->cfg->num_phys) 542 + if (args->args[0] >= data->cfg->num_phys) 546 543 return ERR_PTR(-ENODEV); 547 544 548 545 return data->phys[args->args[0]].phy; ··· 616 615 } 617 616 618 617 data->dr_mode = of_usb_get_dr_mode_by_phy(np, 0); 619 - switch (data->dr_mode) { 620 - case USB_DR_MODE_OTG: 621 - /* otg without id_det makes no sense, and is not supported */ 622 - if (!data->id_det_gpio) { 623 - dev_err(dev, "usb0_id_det missing or invalid\n"); 624 - return -ENODEV; 625 - } 626 - /* fall through */ 627 - case USB_DR_MODE_HOST: 628 - case USB_DR_MODE_PERIPHERAL: 629 - data->extcon = devm_extcon_dev_allocate(dev, 630 - sun4i_usb_phy0_cable); 631 - if (IS_ERR(data->extcon)) 632 - return PTR_ERR(data->extcon); 633 618 634 - ret = devm_extcon_dev_register(dev, data->extcon); 635 - if (ret) { 636 - dev_err(dev, "failed to register extcon: %d\n", ret); 637 - return ret; 638 - } 639 - break; 640 - default: 641 - dev_info(dev, "dr_mode unknown, not registering usb phy0\n"); 642 - data->first_phy = 1; 619 + data->extcon = devm_extcon_dev_allocate(dev, sun4i_usb_phy0_cable); 620 + if (IS_ERR(data->extcon)) 621 + return PTR_ERR(data->extcon); 622 + 623 + ret = devm_extcon_dev_register(dev, data->extcon); 624 + if (ret) { 625 + dev_err(dev, "failed to register extcon: %d\n", ret); 626 + return ret; 643 627 } 644 628 645 - for (i = data->first_phy; i < data->cfg->num_phys; i++) { 629 + for (i = 0; i < data->cfg->num_phys; i++) { 646 630 struct sun4i_usb_phy *phy = data->phys + i; 647 631 char name[16]; 648 632