12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- --- a/drivers/usb/chipidea/core.c
- +++ b/drivers/usb/chipidea/core.c
- @@ -827,7 +827,7 @@ static inline void ci_role_destroy(struc
- {
- ci_hdrc_gadget_destroy(ci);
- ci_hdrc_host_destroy(ci);
- - if (ci->is_otg && ci->roles[CI_ROLE_GADGET])
- + if (!ci->dp_always_pullup && ci->roles[CI_ROLE_GADGET])
- ci_hdrc_otg_destroy(ci);
- }
-
- @@ -941,6 +941,9 @@ static int ci_hdrc_probe(struct platform
- CI_HDRC_SUPPORTS_RUNTIME_PM);
- platform_set_drvdata(pdev, ci);
-
- + ci->dp_always_pullup = !!(ci->platdata->flags &
- + CI_HDRC_DP_ALWAYS_PULLUP);
- +
- ret = hw_device_init(ci, base);
- if (ret < 0) {
- dev_err(dev, "can't initialize hardware\n");
- @@ -1029,7 +1032,7 @@ static int ci_hdrc_probe(struct platform
- goto deinit_gadget;
- }
-
- - if (ci->is_otg && ci->roles[CI_ROLE_GADGET]) {
- + if (!ci->dp_always_pullup && ci->roles[CI_ROLE_GADGET]) {
- ret = ci_hdrc_otg_init(ci);
- if (ret) {
- dev_err(dev, "init otg fails, ret = %d\n", ret);
- --- a/drivers/usb/chipidea/otg.c
- +++ b/drivers/usb/chipidea/otg.c
- @@ -131,8 +131,10 @@ enum ci_role ci_otg_role(struct ci_hdrc
-
- void ci_handle_vbus_change(struct ci_hdrc *ci)
- {
- - if (!ci->is_otg)
- + if (ci->dp_always_pullup) {
- + usb_gadget_vbus_connect(&ci->gadget);
- return;
- + }
-
- if (hw_read_otgsc(ci, OTGSC_BSV) && !ci->vbus_active)
- usb_gadget_vbus_connect(&ci->gadget);
- --- a/include/linux/usb/chipidea.h
- +++ b/include/linux/usb/chipidea.h
- @@ -60,6 +60,7 @@ struct ci_hdrc_platform_data {
- #define CI_HDRC_OVERRIDE_RX_BURST BIT(11)
- #define CI_HDRC_OVERRIDE_PHY_CONTROL BIT(12) /* Glue layer manages phy */
- #define CI_HDRC_REQUIRES_ALIGNED_DMA BIT(13)
- +#define CI_HDRC_DP_ALWAYS_PULLUP BIT(14)
- enum usb_dr_mode dr_mode;
- #define CI_HDRC_CONTROLLER_RESET_EVENT 0
- #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
- --- a/drivers/usb/chipidea/ci.h
- +++ b/drivers/usb/chipidea/ci.h
- @@ -260,6 +260,7 @@ struct ci_hdrc {
- bool in_lpm;
- bool wakeup_int;
- enum ci_revision rev;
- + bool dp_always_pullup;
- struct mutex mutex;
- };
-
|