lkml.org 
[lkml]   [2022]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v5 5/9] drm/bridge: anx7625: Add typec_mux_set callback function
    Quoting Prashant Malani (2022-06-22 10:34:34)
    > From: Pin-Yen Lin <treapking@chromium.org>
    >
    > Add the callback function when the driver receives state
    > changes of the Type-C port. The callback function configures the
    > crosspoint switch of the anx7625 bridge chip, which can change the
    > output pins of the signals according to the port state.

    Can this be combined with the previous two patches? They really don't
    stand alone because the previous two patches are adding stubs that are
    filled out later.

    > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
    > index bd21f159b973..5992fc8beeeb 100644
    > --- a/drivers/gpu/drm/bridge/analogix/anx7625.c
    > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
    > @@ -15,6 +15,7 @@
    > #include <linux/regulator/consumer.h>
    > #include <linux/slab.h>
    > #include <linux/types.h>
    > +#include <linux/usb/typec_dp.h>
    > #include <linux/usb/typec_mux.h>
    > #include <linux/workqueue.h>
    >
    > @@ -2582,9 +2583,64 @@ static void anx7625_runtime_disable(void *data)
    > pm_runtime_disable(data);
    > }
    >
    > +static void anx7625_set_crosspoint_switch(struct anx7625_data *ctx,
    > + enum typec_orientation orientation)
    > +{
    > + if (orientation == TYPEC_ORIENTATION_NORMAL) {
    > + anx7625_reg_write(ctx, ctx->i2c.tcpc_client, TCPC_SWITCH_0,
    > + SW_SEL1_SSRX_RX1 | SW_SEL1_DPTX0_RX2);
    > + anx7625_reg_write(ctx, ctx->i2c.tcpc_client, TCPC_SWITCH_1,
    > + SW_SEL2_SSTX_TX1 | SW_SEL2_DPTX1_TX2);
    > + } else if (orientation == TYPEC_ORIENTATION_REVERSE) {
    > + anx7625_reg_write(ctx, ctx->i2c.tcpc_client, TCPC_SWITCH_0,
    > + SW_SEL1_SSRX_RX2 | SW_SEL1_DPTX0_RX1);
    > + anx7625_reg_write(ctx, ctx->i2c.tcpc_client, TCPC_SWITCH_1,
    > + SW_SEL2_SSTX_TX2 | SW_SEL2_DPTX1_TX1);
    > + }
    > +}
    > +
    > +static void anx7625_typec_two_ports_update(struct anx7625_data *ctx)
    > +{
    > + if (ctx->typec_ports[0].dp_connected && ctx->typec_ports[1].dp_connected)
    > + /* Both ports available, do nothing to retain the current one. */
    > + return;
    > + else if (ctx->typec_ports[0].dp_connected)
    > + anx7625_set_crosspoint_switch(ctx, TYPEC_ORIENTATION_NORMAL);
    > + else if (ctx->typec_ports[1].dp_connected)
    > + anx7625_set_crosspoint_switch(ctx, TYPEC_ORIENTATION_REVERSE);
    > +}
    > +
    > static int anx7625_typec_mux_set(struct typec_mux_dev *mux,
    > struct typec_mux_state *state)
    > {
    > + struct anx7625_port_data *data = typec_mux_get_drvdata(mux);
    > + struct anx7625_data *ctx = data->ctx;
    > + struct device *dev = &ctx->client->dev;
    > + bool new_dp_connected, old_dp_connected;
    > +
    > + if (ctx->num_typec_switches == 1)

    How do we handle the case where the usb-c-connector is directly
    connected to the RX1/TX1 and RX2/TX2 pins? This device would be an
    orientation (normal/reverse) and mode switch (usb/dp) in that scenario,
    but this code is written in a way that the orientation switch isn't
    going to flip the crosspoint switch for the different pin assignments.

    \
     
     \ /
      Last update: 2022-06-28 21:29    [W:4.155 / U:1.612 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site