All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Alexandru M Stan <amstan@chromium.org>
Cc: linux-usb@vger.kernel.org, Alan Stern <stern@rowland.harvard.edu>,
	Felipe Balbi <balbi@kernel.org>,
	Doug Anderson <dianders@chromium.org>,
	Julius Werner <jwerner@chromium.org>,
	Evan Green <evgreen@chromium.org>
Subject: Re: Splitting 1 USB port between 2 devices
Date: Fri, 29 May 2020 10:12:43 +0200	[thread overview]
Message-ID: <20200529081243.GA827304@kroah.com> (raw)
In-Reply-To: <CAHNYxRzH3F7r4A3hOJYWw8fwoSLBESyyN7XQ4HYfw1Y3qoNbJg@mail.gmail.com>

On Thu, May 28, 2020 at 02:16:21PM -0700, Alexandru M Stan wrote:
> Hello,
> 
> I'm currently helping to design the hardware for yet another chromebook.
> 
> The particular SOC (and most other alternatives BTH) we're using has a
> limited amount of USB controllers available, usually just 1. Being a
> chromebook we have quite a few needs for USB though: 2 type C ports,
> pogo pins for a connected keyboard, 2 cameras, a type A port. We're
> probably going to have an internal hub no matter what, but it looks
> like even a 4 port hub might not be enough, going to yet a bigger hub
> (which might not be as power efficient) is not ideal, chaining hubs
> that are builtin is also meh.
> 
> I noticed that some of our cameras use the USB3.0 lines only. Other
> cameras, since they're lower resolution ones use only USB2.0. I
> wondered what would happen if the 2 types of cameras were to share a
> port, since none of the data lines are common between them.

And the hub has no problem with this?  That's odd, I would think that it
would not like this type of configuration.

> I've built a little contraption to test this. It seems to work as
> intended. Both usb cameras seem to enumerate, I can even stream from
> both at the same time with no problem. A macbook seems to also kind of
> work (I can't stream from both for some reason, but i can open either
> I want). I can upload detailed lsusb outputs if needed.

What host controller are you using for this?

> My question here is: is this legal as far as Linux is concerned? Can 2
> devices be enumerated under one physical port (even though we're
> talking about separate usb2.0 and 3.0 bus topologies).

Is it "legal" as far as the USB spec is concerned?  I would try to
answer that first before worrying about if Linux can handle it or not :)

> It seems to work so far with our linux 5.4 chrome os fork (which as
> far as I know is identical to 5.4 LTS for matters concerning usb). But
> the question is would this keep working?
> 
> Is there any weird port reset interaction that might be annoying here?
> I wouldn't want a reset on the usb 2.0 device to affect the 3.0
> device.

Which is why I don't think the hub would like this type of
configuration, as who controls the power connections?  What happens if
one device is suspended and the other isn't?

> Is there any other higher level port management going on in linux,
> where there might be plans to keep track of things, but it's not piped
> enough to see it affect (negatively) this use case.
> 
> If this is ok, was something like this ever done before?
> 
> Bonus, maybe unrelated, question: I've wondered in the past if it's
> legal to route 2.0 and 3.0 lines through different paths.
> 
> For example, imagine I had one of each:
>  * 2+3.0 controller
>  * 2+3.0 device (eg a 3.0 type A port)
>  * 2.0 device (older usb device)
> 
> Would it be legal to use only a 2.0 hub, with the 3.0 data lines for
> the 3.0 device bypassing the hub. This would be cheaper than having a
> fully fledged 2+3.0 hub with the second port's 3.0 data lines wasted.

I think you need to talk to some USB hardware engineers for this type of
question.

good luck!

greg k-h

  parent reply	other threads:[~2020-05-29  8:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-28 21:16 Splitting 1 USB port between 2 devices Alexandru M Stan
2020-05-29  8:03 ` Peter Chen
2020-05-29  8:12 ` Greg Kroah-Hartman [this message]
2020-05-29 20:44   ` Julius Werner
2020-05-29  8:46 ` Andrew Goodbody

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200529081243.GA827304@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=amstan@chromium.org \
    --cc=balbi@kernel.org \
    --cc=dianders@chromium.org \
    --cc=evgreen@chromium.org \
    --cc=jwerner@chromium.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.