On Wed, Jun 15, 2022 at 1:45 AM AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx> wrote: > > Il 14/06/22 18:57, Prashant Malani ha scritto: > > On Tue, Jun 14, 2022 at 1:18 AM AngeloGioacchino Del Regno > > <angelogioacchino.delregno@xxxxxxxxxxxxx> wrote: > >> > >> Il 09/06/22 20:09, Prashant Malani ha scritto: > >>> When the DT node has "switches" available, register a Type-C mode-switch > >>> for each listed "switch". This allows the driver to receive state > >>> information about what operating mode a Type-C port and its connected > >>> peripherals are in, as well as status information (like VDOs) related to > >>> that state. > >>> > >>> The callback function is currently a stub, but subsequent patches will > >>> implement the required functionality. > >>> > >>> Signed-off-by: Prashant Malani <pmalani@xxxxxxxxxxxx> > >>> --- > >>> > >>> Changes since v2: > >>> - No changes. > >>> > >>> drivers/gpu/drm/bridge/analogix/anx7625.c | 73 +++++++++++++++++++++++ > >>> drivers/gpu/drm/bridge/analogix/anx7625.h | 6 ++ > >>> 2 files changed, 79 insertions(+) > >>> > >>> diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c > >>> index 07ed44c6b839..d41a21103bd3 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_mux.h> > >>> #include <linux/workqueue.h> > >>> > >>> #include <linux/of_gpio.h> > >>> @@ -2581,9 +2582,59 @@ static void anx7625_runtime_disable(void *data) > >>> pm_runtime_disable(data); > >>> } > >>> > >>> +static int anx7625_typec_mux_set(struct typec_mux_dev *mux, > >>> + struct typec_mux_state *state) > >>> +{ > >>> + return 0; > >>> +} > >>> + > >>> +static int anx7625_register_mode_switch(struct device *dev, struct device_node *node, > >>> + struct anx7625_data *ctx) > >>> +{ > >>> + struct anx7625_port_data *port_data; > >>> + struct typec_mux_desc mux_desc = {}; > >>> + char name[32]; > >>> + u32 port_num; > >>> + int ret; > >>> + > >>> + ret = of_property_read_u32(node, "reg", &port_num); > >>> + if (ret) > >>> + return ret; > >>> + > >>> + if (port_num >= ctx->num_typec_switches) { > >>> + dev_err(dev, "Invalid port number specified: %d\n", port_num); > >>> + return -EINVAL; > >>> + } > >>> + > >>> + port_data = &ctx->typec_ports[port_num]; > >>> + port_data->ctx = ctx; > >>> + 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 = anx7625_typec_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", port_num, ret); > >>> + } > >> > >> Please return 0 at the end of this function. > >> > >> if (IS_ERR(....)) { > >> ......code...... > >> return ret; > >> } > >> > >> return 0; > >> } > > > > May I ask why? We're not missing any return paths. I would rather we > > keep it as is (which has the valid return value). > > > > I know that you're not missing any return paths. > > That's only because the proposed one is a common pattern in the kernel > and it's only for consistency. Thanks for the additional details. Since this isn't addressing any specific bug, and I notice varied usages of "return ret" in this file itself [1][2], I'd prefer keeping it as is. [1]: https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/bridge/analogix/anx7625.c#L296 [2]: https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/bridge/analogix/anx7625.c#L436 > > Regards, > Angelo >