> >
> > > >
> > > >
> > > > > drivers/usb/chipidea/core.c | 2 ++
> > > > > include/linux/usb/chipidea.h
> > > > > |
> > > > > 4 ++++
> > > > > 2 files changed, 6 insertions(+)
> > > > >
> > > > > diff --git a/drivers/usb/chipidea/core.c
> > > > > b/drivers/usb/chipidea/core.c index
> > > > > 7bfcbb2..0bfa850 100644
> > > > > --- a/drivers/usb/chipidea/core.c
> > > > > +++ b/drivers/usb/chipidea/core.c
> > > > > @@ -706,6 +706,7 @@ static int ci_get_platdata(struct device *dev,
> > > > > cable->edev = ext_vbus;
> > > > >
> > > > > if (!IS_ERR(ext_vbus)) {
> > > > > + platdata->ext_vbus = true;
> > > > > ret = extcon_get_state(cable->edev, EXTCON_USB);
> > > > > if (ret)
> > > > > cable->connected = true;
> > > > > @@ -718,6 +719,7 @@ static int ci_get_platdata(struct device *dev,
> > > > > cable->edev = ext_id;
> > > > >
> > > > > if (!IS_ERR(ext_id)) {
> > > > > + platdata->ext_id = true;
> > > > > ret = extcon_get_state(cable->edev, EXTCON_USB_HOST);
> > > > > if (ret)
> > > > > cable->connected = true;
> > > > > diff --git a/include/linux/usb/chipidea.h
> > > > > b/include/linux/usb/chipidea.h index
> > > > > 911e05a..cd72d82 100644
> > > > > --- a/include/linux/usb/chipidea.h
> > > > > +++ b/include/linux/usb/chipidea.h
> > > > > @@ -70,6 +70,10 @@ struct ci_hdrc_platform_data {
> > > > > struct regulator *reg_vbus;
> > > > > struct usb_otg_caps ci_otg_caps;
> > > > > bool tpl_support;
> > > > > + /* ID state is from external event out side of USB */
> > > > > + bool ext_id;
> > > > > + /* VBUS state is from external event out side of USB */
> > > > > + bool ext_vbus;
> > > >
> > > > We already have struct ci_hdrc_cable at this structure, please use it
> > > > instead.
> > >
> > > I am going to extend ci_hdrc_cable also for type-C case, which has
> > > no edev, So it's OK to add a flag in ci_hdrc_cable for both edev and
> > > type-C to indicate external block is used?
> > >
> >
> > Why there is no external cable (edev) for Type-C case? If there is no
> > external cable phandle at controller dts, how driver knows the Type-C
> > connection
> occurs?
>
> The new usb_role class doesn't depends on edev, see how this can work on dwc3:
> https://patchwork.kernel.org/patch/10836519/
>
I see, you could add role switch class for chipidea first, then put Type-C on
it.
Peter