Thread (12 messages) 12 messages, 3 authors, 2017-07-17

Re: [PATCH 0/3] USB Mux support for Chipidea

From: Stephen Boyd <hidden>
Date: 2017-07-13 22:35:11
Also in: linux-arm-kernel, linux-arm-msm, lkml

Quoting Peter Rosin (2017-07-11 22:04:46)
On 2017-07-12 03:02, Stephen Boyd wrote:
quoted
This patchset adds support for the TC7USB40MU usb mux found on 
db410c 96boards platforms via the new multiplexer framework and
hooks that into the chipidea driver. This allows us to properly
control host or device mode on this board via the sysfs knob.

So far I've only tested this on db410c, and there are some rough
edges to finish off before it can merge. Also I'm experiencing
odd behavior with switching the role while gadget is enabled and
the micro-usb cable is kept connected. Not sure what's wrong but
it seems like the gadget never gets disconnected? I'll investigate
more.

TODO:

 1. The mux framework has to be selected for consumers to use it. We'll
    need some stubs in the consumer header file to allow compilation to
    continue without mux always enabled by consumers.
Instead of "depends on MULTIPLEXER", just add "select MULTIPLEXER"
to the Kconfig. Otherwise, you'll have to convince Linus that we
really do need a Kconfig question for the subsystem :-)

https://lkml.org/lkml/2017/7/4/118
Ok. I'll add a select to the chipidea driver.
quoted
 2. We probably need some sort of mux_control_get_optional() API so that
    we know if there was an error getting the mux control, instead of just
    ignoring errors. For now I can pass up EPROBE_DEFER errors and ignore
    other errors and consider it "missing from DT".
Yes, mux_control_get_optional should be easy to add.
quoted
 3. Maybe we can get rid of the mux driver and just use mux-gpio.c with
    a compatible string update? I split it off because we may want to
    support the "S" pin on the TC7USB40MU one day that shuts off both
Oh this is a typo. I mean "OE" pin.
quoted
    mux outputs.
Maybe no need for a compatible update either, if it works to do something
like this in the DT?

        usb_switch: usb-switch {
                compatible = "gpio-mux";
                mux-gpios = <&pm8916_gpios 4 GPIO_ACTIVE_HIGH>,
                            <&pm8916_gpios XXX GPIO_ACTIVE_XXX>;
                idle-state = <2>;
                #mux-control-cells = <0>;
                pinctrl-names = "default";
                pinctrl-0 = <&usb_sw_sel_pm>;
        };

But I obviously know little about how things are wired and really works,
so that might be totally off...

Otherwise, maybe a generic mux-pinctrl driver would do the trick?
(compare with drivers/i2c/muxes/i2c-mux-pinctrl.c)
Agreed. On the board I have the "OE" pin is shorted so that it always
outputs a signal. For someone else they could do what you say and add
another pin to gpio-mux binding and things will still work.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help