Message ID | 20230109084101.265664-1-treapking@chromium.org |
---|---|
Headers | show |
Series | Register Type-C mode-switch in DP bridge endpoints | expand |
On Mon, Jan 9, 2023 at 4:41 PM Pin-yen Lin <treapking@chromium.org> wrote: > > From: Prashant Malani <pmalani@chromium.org> > > When using OF graph, the fw_devlink code will create links between the > individual port driver (cros-ec-typec here) and the parent device for > a Type-C switch (like mode-switch). Since the mode-switch will in turn > have the usb-c-connector (i.e the child of the port driver) as a > supplier, fw_devlink will not be able to resolve the cyclic dependency > correctly. > > As a result, the mode-switch driver probe() never runs, so mode-switches > are never registered. Because of that, the port driver probe constantly > fails with -EPROBE_DEFER, because the Type-C connector class requires all > switch devices to be registered prior to port registration. > > To break this deadlock and allow the mode-switch registration to occur, > purge all the usb-c-connector nodes' absent suppliers. This eliminates > the connector as a supplier for a switch and allows it to be probed. > > Signed-off-by: Prashant Malani <pmalani@chromium.org> > Signed-off-by: Pin-yen Lin <treapking@chromium.org> Reviewed-by: Chen-Yu Tsai <wenst@chromium.org> Tested-by: Chen-Yu Tsai <wenst@chromium.org> on MT8192 based Hayato (ASUS Chromebook Flip CM3200).
On Mon, Jan 9, 2023 at 4:41 PM Pin-yen Lin <treapking@chromium.org> wrote: > > Add helpers to register and unregister Type-C "switches" for bridges > capable of switching their output between two downstream devices. > > The helper registers USB Type-C mode switches when the "mode-switch" > and the "data-lanes" properties are available in Device Tree. > > Signed-off-by: Pin-yen Lin <treapking@chromium.org> Tested-by: Chen-Yu Tsai <wenst@chromium.org> on MT8192 based Hayato (ASUS Chromebook Flip CM3200). > --- > > (no changes since v8) > > Changes in v8: > - Fixed the build issue when CONFIG_TYPEC=m > - Fixed some style issues > > Changes in v7: > - Extracted the common codes to a helper function > - New in v7 > > drivers/gpu/drm/display/drm_dp_helper.c | 132 ++++++++++++++++++++++++ > include/drm/display/drm_dp_helper.h | 16 +++ > 2 files changed, 148 insertions(+) > > diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/display/drm_dp_helper.c > index 16565a0a5da6..fb9e23744c08 100644 > --- a/drivers/gpu/drm/display/drm_dp_helper.c > +++ b/drivers/gpu/drm/display/drm_dp_helper.c > @@ -30,11 +30,13 @@ > #include <linux/sched.h> > #include <linux/seq_file.h> > #include <linux/string_helpers.h> > +#include <linux/usb/typec_mux.h> > #include <linux/dynamic_debug.h> > > #include <drm/display/drm_dp_helper.h> > #include <drm/display/drm_dp_mst_helper.h> > #include <drm/drm_edid.h> > +#include <drm/drm_of.h> > #include <drm/drm_print.h> > #include <drm/drm_vblank.h> > #include <drm/drm_panel.h> > @@ -3891,3 +3893,133 @@ int drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux) > EXPORT_SYMBOL(drm_panel_dp_aux_backlight); > > #endif > + > +#if IS_REACHABLE(CONFIG_TYPEC) > +static int drm_dp_register_mode_switch(struct device *dev, struct device_node *node, > + struct drm_dp_typec_switch_desc *switch_desc, > + void *data, void *mux_set) > +{ > + struct drm_dp_typec_port_data *port_data; > + struct typec_mux_desc mux_desc = {}; > + char name[32]; > + u32 dp_lanes[2]; > + int ret, num_lanes, port_num = -1; > + > + num_lanes = drm_of_get_data_lanes_count(node, 0, 2); > + if (num_lanes <= 0) { > + dev_err(dev, "Error on getting data lanes count: %d\n", > + num_lanes); Also printing out the full node name (endpoint@N) would be more helpful. > + return num_lanes; > + } > + > + ret = of_property_read_u32_array(node, "data-lanes", dp_lanes, num_lanes); > + if (ret) { > + dev_err(dev, "Failed to read the data-lanes variable: %d\n", > + ret); Same here. > + return ret; > + } > + > + port_num = dp_lanes[0] / 2; > + > + port_data = &switch_desc->typec_ports[port_num]; > + port_data->data = data; > + mux_desc.fwnode = &node->fwnode; > + mux_desc.drvdata = port_data; > + snprintf(name, sizeof(name), "%s-%u", node->name, port_num); > + mux_desc.name = name; > + mux_desc.set = mux_set; > + > + port_data->typec_mux = typec_mux_register(dev, &mux_desc); > + if (IS_ERR(port_data->typec_mux)) { > + ret = PTR_ERR(port_data->typec_mux); > + dev_err(dev, "Mode switch register for port %d failed: %d\n", > + port_num, ret); > + } > + > + return ret; > +} > + > +/** > + * drm_dp_register_typec_switches() - register Type-C switches > + * @dev: Device that registers Type-C switches > + * @port: Device node for the switch > + * @switch_desc: A Type-C switch descriptor > + * @data: Private data for the switches > + * @mux_set: Callback function for typec_mux_set > + * > + * This function registers USB Type-C switches for DP bridges that can switch > + * the output signal between their output pins. > + * > + * Currently only mode switches are implemented, and the function assumes the > + * given @port device node has endpoints with "mode-switch" property. > + * Register the endpoint as port 0 if the "data-lanes" property falls in 0/1, > + * and register it as port 1 if "data-lanes" falls in 2/3. > + */ > +int drm_dp_register_typec_switches(struct device *dev, struct device_node *port, > + struct drm_dp_typec_switch_desc *switch_desc, > + void *data, void *mux_set) > +{ > + struct device_node *sw; > + int ret; > + > + for_each_child_of_node(port, sw) { > + if (of_property_read_bool(sw, "mode-switch")) > + switch_desc->num_typec_switches++; > + } > + > + if (!switch_desc->num_typec_switches) { > + dev_warn(dev, "No Type-C switches node found\n"); Maybe change this to dev_info or even dev_debug? A warning would be too noisy if the bridge drivers are calling this helper unconditionally. Otherwise, Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
On Mon, Jan 9, 2023 at 4:41 PM Pin-yen Lin <treapking@chromium.org> wrote: > > Register USB Type-C mode switches when the "mode-switch" property and > relevant port are available in Device Tree. Configure the crosspoint ^ ports > switch based on the entered alternate mode for a specific Type-C > connector. You should also mention that the "one mode switch" scenario is not covered in this implementation, due to lack of actual hardware. > Signed-off-by: Pin-yen Lin <treapking@chromium.org> > > --- > > (no changes since v7) > > Changes in v7: > - Fixed style issues in anx7625 driver > - Removed DT property validation in anx7625 driver. > - Extracted common codes to another commit. > > Changes in v6: > - Squashed to a single patch > > drivers/gpu/drm/bridge/analogix/Kconfig | 1 + > drivers/gpu/drm/bridge/analogix/anx7625.c | 88 +++++++++++++++++++++++ > drivers/gpu/drm/bridge/analogix/anx7625.h | 13 ++++ > 3 files changed, 102 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig b/drivers/gpu/drm/bridge/analogix/Kconfig > index 173dada218ec..992b43ed1dd7 100644 > --- a/drivers/gpu/drm/bridge/analogix/Kconfig > +++ b/drivers/gpu/drm/bridge/analogix/Kconfig > @@ -34,6 +34,7 @@ config DRM_ANALOGIX_ANX7625 > tristate "Analogix Anx7625 MIPI to DP interface support" > depends on DRM > depends on OF > + depends on TYPEC || TYPEC=n > select DRM_DISPLAY_DP_HELPER > select DRM_DISPLAY_HDCP_HELPER > select DRM_DISPLAY_HELPER > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c > index 1cf242130b91..2bb504a8d789 100644 > --- a/drivers/gpu/drm/bridge/analogix/anx7625.c > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c > @@ -15,6 +15,8 @@ > #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> > > #include <linux/of_gpio.h> > @@ -2572,6 +2574,86 @@ 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) > +{ > + struct drm_dp_typec_switch_desc switch_desc = ctx->switch_desc; > + /* Check if both ports available and do nothing to retain the current one */ > + if (switch_desc.typec_ports[0].dp_connected && switch_desc.typec_ports[1].dp_connected) > + return; > + > + if (switch_desc.typec_ports[0].dp_connected) > + anx7625_set_crosspoint_switch(ctx, TYPEC_ORIENTATION_NORMAL); > + else if (switch_desc.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 drm_dp_typec_port_data *port_data = typec_mux_get_drvdata(mux); > + struct anx7625_data *ctx = (struct anx7625_data *) port_data->data; > + struct device *dev = &ctx->client->dev; > + struct drm_dp_typec_switch_desc switch_desc = ctx->switch_desc; > + bool new_dp_connected, old_dp_connected; > + And place a TODO note here. Otherwise this looks OK. Also, Tested-by: Chen-Yu Tsai <wenst@chromium.org> on MT8192 based Hayato (ASUS Chromebook Flip CM3200). And this also uncovered a deadlock in the unplug & disable path. I'll send a fix for that later once I figure out all the details.
Il 09/01/23 09:40, Pin-yen Lin ha scritto: > Add helpers to register and unregister Type-C "switches" for bridges > capable of switching their output between two downstream devices. > > The helper registers USB Type-C mode switches when the "mode-switch" > and the "data-lanes" properties are available in Device Tree. > > Signed-off-by: Pin-yen Lin <treapking@chromium.org> > > --- > > (no changes since v8) > > Changes in v8: > - Fixed the build issue when CONFIG_TYPEC=m > - Fixed some style issues > > Changes in v7: > - Extracted the common codes to a helper function > - New in v7 > > drivers/gpu/drm/display/drm_dp_helper.c | 132 ++++++++++++++++++++++++ > include/drm/display/drm_dp_helper.h | 16 +++ > 2 files changed, 148 insertions(+) > > diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/display/drm_dp_helper.c > index 16565a0a5da6..fb9e23744c08 100644 > --- a/drivers/gpu/drm/display/drm_dp_helper.c > +++ b/drivers/gpu/drm/display/drm_dp_helper.c > @@ -30,11 +30,13 @@ > #include <linux/sched.h> > #include <linux/seq_file.h> > #include <linux/string_helpers.h> > +#include <linux/usb/typec_mux.h> > #include <linux/dynamic_debug.h> > > #include <drm/display/drm_dp_helper.h> > #include <drm/display/drm_dp_mst_helper.h> > #include <drm/drm_edid.h> > +#include <drm/drm_of.h> > #include <drm/drm_print.h> > #include <drm/drm_vblank.h> > #include <drm/drm_panel.h> > @@ -3891,3 +3893,133 @@ int drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux) > EXPORT_SYMBOL(drm_panel_dp_aux_backlight); > > #endif > + > +#if IS_REACHABLE(CONFIG_TYPEC) > +static int drm_dp_register_mode_switch(struct device *dev, struct device_node *node, > + struct drm_dp_typec_switch_desc *switch_desc, > + void *data, void *mux_set) > +{ > + struct drm_dp_typec_port_data *port_data; > + struct typec_mux_desc mux_desc = {}; > + char name[32]; > + u32 dp_lanes[2]; > + int ret, num_lanes, port_num = -1; > + > + num_lanes = drm_of_get_data_lanes_count(node, 0, 2); > + if (num_lanes <= 0) { > + dev_err(dev, "Error on getting data lanes count: %d\n", > + num_lanes); > + return num_lanes; > + } > + > + ret = of_property_read_u32_array(node, "data-lanes", dp_lanes, num_lanes); > + if (ret) { > + dev_err(dev, "Failed to read the data-lanes variable: %d\n", > + ret); > + return ret; > + } > + > + port_num = dp_lanes[0] / 2; > + > + port_data = &switch_desc->typec_ports[port_num]; > + port_data->data = data; > + mux_desc.fwnode = &node->fwnode; > + mux_desc.drvdata = port_data; > + snprintf(name, sizeof(name), "%s-%u", node->name, port_num); > + mux_desc.name = name; > + mux_desc.set = mux_set; > + > + port_data->typec_mux = typec_mux_register(dev, &mux_desc); > + if (IS_ERR(port_data->typec_mux)) { I would propose, instead... > + ret = PTR_ERR(port_data->typec_mux); > + dev_err(dev, "Mode switch register for port %d failed: %d\n", > + port_num, ret); return ret; > + } > + > + return ret; return 0; > +} > + ...but I don't have strong opinions, so regardless of that: Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Hi Chen-Yu, Thanks for the review. On Mon, Jan 9, 2023 at 7:26 PM Chen-Yu Tsai <wenst@chromium.org> wrote: > > On Mon, Jan 9, 2023 at 4:41 PM Pin-yen Lin <treapking@chromium.org> wrote: > > > > Register USB Type-C mode switches when the "mode-switch" property and > > relevant port are available in Device Tree. Configure the crosspoint > ^ ports > Thanks for catching this. I'll fix in v10. > > switch based on the entered alternate mode for a specific Type-C > > connector. > > You should also mention that the "one mode switch" scenario is not > covered in this implementation, due to lack of actual hardware. If I understand correctly, we should use "orientation-switch"[1] instead when the crosspoint switch on anx7625 is used to support different orientations of the Type-C connector. I'll add some explanations around this in the commit message in v10. [1]: https://docs.kernel.org/driver-api/usb/typec.html#multiplexer-demultiplexer-switches > > > Signed-off-by: Pin-yen Lin <treapking@chromium.org> > > > > --- > > > > (no changes since v7) > > > > Changes in v7: > > - Fixed style issues in anx7625 driver > > - Removed DT property validation in anx7625 driver. > > - Extracted common codes to another commit. > > > > Changes in v6: > > - Squashed to a single patch > > > > drivers/gpu/drm/bridge/analogix/Kconfig | 1 + > > drivers/gpu/drm/bridge/analogix/anx7625.c | 88 +++++++++++++++++++++++ > > drivers/gpu/drm/bridge/analogix/anx7625.h | 13 ++++ > > 3 files changed, 102 insertions(+) > > > > diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig b/drivers/gpu/drm/bridge/analogix/Kconfig > > index 173dada218ec..992b43ed1dd7 100644 > > --- a/drivers/gpu/drm/bridge/analogix/Kconfig > > +++ b/drivers/gpu/drm/bridge/analogix/Kconfig > > @@ -34,6 +34,7 @@ config DRM_ANALOGIX_ANX7625 > > tristate "Analogix Anx7625 MIPI to DP interface support" > > depends on DRM > > depends on OF > > + depends on TYPEC || TYPEC=n > > select DRM_DISPLAY_DP_HELPER > > select DRM_DISPLAY_HDCP_HELPER > > select DRM_DISPLAY_HELPER > > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c > > index 1cf242130b91..2bb504a8d789 100644 > > --- a/drivers/gpu/drm/bridge/analogix/anx7625.c > > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c > > @@ -15,6 +15,8 @@ > > #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> > > > > #include <linux/of_gpio.h> > > @@ -2572,6 +2574,86 @@ 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) > > +{ > > + struct drm_dp_typec_switch_desc switch_desc = ctx->switch_desc; > > + /* Check if both ports available and do nothing to retain the current one */ > > + if (switch_desc.typec_ports[0].dp_connected && switch_desc.typec_ports[1].dp_connected) > > + return; > > + > > + if (switch_desc.typec_ports[0].dp_connected) > > + anx7625_set_crosspoint_switch(ctx, TYPEC_ORIENTATION_NORMAL); > > + else if (switch_desc.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 drm_dp_typec_port_data *port_data = typec_mux_get_drvdata(mux); > > + struct anx7625_data *ctx = (struct anx7625_data *) port_data->data; > > + struct device *dev = &ctx->client->dev; > > + struct drm_dp_typec_switch_desc switch_desc = ctx->switch_desc; > > + bool new_dp_connected, old_dp_connected; > > + > > And place a TODO note here. I'll add it in v10. > > Otherwise this looks OK. > > Also, > > Tested-by: Chen-Yu Tsai <wenst@chromium.org> > on MT8192 based Hayato (ASUS Chromebook Flip CM3200). > > And this also uncovered a deadlock in the unplug & disable path. > I'll send a fix for that later once I figure out all the details. Thank you so much for this!
Don't know if this still needs reviews from me (feel free to respond if it does!), but I wanted to say nice work! This is something I've wanted to see added to DRM for a while ♥ On Mon, 2023-01-09 at 16:40 +0800, Pin-yen Lin wrote: > This series introduces bindings for anx7625/it6505 to register Type-C > mode-switch in their output endpoints, and use data-lanes property to > describe the pin connections. > > The first two patch modifies fwnode_graph_devcon_matches and > cros_typec_init_ports to enable the registration of the switches. > > Patch 4~6 introduce the bindings for anx7625 and the corresponding driver > modifications. > > Patch 7~9 add similar bindings and driver changes for it6505. > > v7: https://lore.kernel.org/all/20230105132457.4125372-1-treapking@chromium.org/ > v6: https://lore.kernel.org/all/20221124102056.393220-1-treapking@chromium.org/ > v5: https://lore.kernel.org/linux-usb/20220622173605.1168416-1-pmalani@chromium.org/ > > Changes in v9: > - Collected Reviewed-by tag > - Fixed subject prefix again > - Changed the naming of the example node for it6505 > > Changes in v8: > - Fixed the build issue when CONFIG_TYPEC=m > - Fixed some style issues > - Fixed the subject prefixes for the bindings patch > - Fixed the bindings for data-lanes properties > > Changes in v7: > - Fix the long comment lines > - Extracted the common codes to a helper function > - Fixed style issues in anx7625 driver > - Removed DT property validation in anx7625 driver. > - Fixed style issues in it6505 driver > - Removed the redundant sleep in it6505 driver > - Removed DT property validation in it6505 driver > - Rebased to drm-misc-next > - Fixed indentations in bindings patches > - Added a new patch to fix indentations in Kconfig > > Changes in v6: > - Changed it6505_typec_mux_set callback function to accommodate with > the latest drm-misc patches > - Changed the driver implementation to accommodate with the new binding > - Dropped typec-switch binding and use endpoints and data-lanes properties > to describe the pin connections > - Added new patches (patch 1,2,4) to fix probing issues > - Changed the bindings of it6505/anx7625 and modified the drivers > accordingly > - Merged it6505/anx7625 driver changes into a single patch > > Pin-yen Lin (7): > drm/display: Add Type-C switch helpers > dt-bindings: display: bridge: anx7625: Add mode-switch support > drm/bridge: anx7625: Check for Type-C during panel registration > drm/bridge: anx7625: Register Type C mode switches > dt-bindings: display: bridge: it6505: Add mode-switch support > drm/bridge: it6505: Fix Kconfig indentation > drm/bridge: it6505: Register Type C mode switches > > Prashant Malani (2): > device property: Add remote endpoint to devcon matcher > platform/chrome: cros_ec_typec: Purge blocking switch devlinks > > .../display/bridge/analogix,anx7625.yaml | 99 ++++++++++++- > .../bindings/display/bridge/ite,it6505.yaml | 93 ++++++++++-- > drivers/base/property.c | 15 ++ > drivers/gpu/drm/bridge/Kconfig | 21 +-- > drivers/gpu/drm/bridge/analogix/Kconfig | 1 + > drivers/gpu/drm/bridge/analogix/anx7625.c | 101 +++++++++++++- > drivers/gpu/drm/bridge/analogix/anx7625.h | 13 ++ > drivers/gpu/drm/bridge/ite-it6505.c | 119 +++++++++++++++- > drivers/gpu/drm/display/drm_dp_helper.c | 132 ++++++++++++++++++ > drivers/platform/chrome/cros_ec_typec.c | 10 ++ > include/drm/display/drm_dp_helper.h | 16 +++ > 11 files changed, 591 insertions(+), 29 deletions(-) >
Hi Lyude, Thanks for letting me know! I just sent out a v11 and already received some review comments, but reviews are always welcomed if you have time to take a look. Regards, Pin-yen On Tue, Jan 31, 2023 at 7:10 AM Lyude Paul <lyude@redhat.com> wrote: > > Don't know if this still needs reviews from me (feel free to respond if it > does!), but I wanted to say nice work! This is something I've wanted to see > added to DRM for a while ♥ > > > On Mon, 2023-01-09 at 16:40 +0800, Pin-yen Lin wrote: > > This series introduces bindings for anx7625/it6505 to register Type-C > > mode-switch in their output endpoints, and use data-lanes property to > > describe the pin connections. > > > > The first two patch modifies fwnode_graph_devcon_matches and > > cros_typec_init_ports to enable the registration of the switches. > > > > Patch 4~6 introduce the bindings for anx7625 and the corresponding driver > > modifications. > > > > Patch 7~9 add similar bindings and driver changes for it6505. > > > > v7: https://lore.kernel.org/all/20230105132457.4125372-1-treapking@chromium.org/ > > v6: https://lore.kernel.org/all/20221124102056.393220-1-treapking@chromium.org/ > > v5: https://lore.kernel.org/linux-usb/20220622173605.1168416-1-pmalani@chromium.org/ > > > > Changes in v9: > > - Collected Reviewed-by tag > > - Fixed subject prefix again > > - Changed the naming of the example node for it6505 > > > > Changes in v8: > > - Fixed the build issue when CONFIG_TYPEC=m > > - Fixed some style issues > > - Fixed the subject prefixes for the bindings patch > > - Fixed the bindings for data-lanes properties > > > > Changes in v7: > > - Fix the long comment lines > > - Extracted the common codes to a helper function > > - Fixed style issues in anx7625 driver > > - Removed DT property validation in anx7625 driver. > > - Fixed style issues in it6505 driver > > - Removed the redundant sleep in it6505 driver > > - Removed DT property validation in it6505 driver > > - Rebased to drm-misc-next > > - Fixed indentations in bindings patches > > - Added a new patch to fix indentations in Kconfig > > > > Changes in v6: > > - Changed it6505_typec_mux_set callback function to accommodate with > > the latest drm-misc patches > > - Changed the driver implementation to accommodate with the new binding > > - Dropped typec-switch binding and use endpoints and data-lanes properties > > to describe the pin connections > > - Added new patches (patch 1,2,4) to fix probing issues > > - Changed the bindings of it6505/anx7625 and modified the drivers > > accordingly > > - Merged it6505/anx7625 driver changes into a single patch > > > > Pin-yen Lin (7): > > drm/display: Add Type-C switch helpers > > dt-bindings: display: bridge: anx7625: Add mode-switch support > > drm/bridge: anx7625: Check for Type-C during panel registration > > drm/bridge: anx7625: Register Type C mode switches > > dt-bindings: display: bridge: it6505: Add mode-switch support > > drm/bridge: it6505: Fix Kconfig indentation > > drm/bridge: it6505: Register Type C mode switches > > > > Prashant Malani (2): > > device property: Add remote endpoint to devcon matcher > > platform/chrome: cros_ec_typec: Purge blocking switch devlinks > > > > .../display/bridge/analogix,anx7625.yaml | 99 ++++++++++++- > > .../bindings/display/bridge/ite,it6505.yaml | 93 ++++++++++-- > > drivers/base/property.c | 15 ++ > > drivers/gpu/drm/bridge/Kconfig | 21 +-- > > drivers/gpu/drm/bridge/analogix/Kconfig | 1 + > > drivers/gpu/drm/bridge/analogix/anx7625.c | 101 +++++++++++++- > > drivers/gpu/drm/bridge/analogix/anx7625.h | 13 ++ > > drivers/gpu/drm/bridge/ite-it6505.c | 119 +++++++++++++++- > > drivers/gpu/drm/display/drm_dp_helper.c | 132 ++++++++++++++++++ > > drivers/platform/chrome/cros_ec_typec.c | 10 ++ > > include/drm/display/drm_dp_helper.h | 16 +++ > > 11 files changed, 591 insertions(+), 29 deletions(-) > > > > -- > Cheers, > Lyude Paul (she/her) > Software Engineer at Red Hat >