On Mon, Oct 07, 2024 at 10:52:13AM +0200, Wadim Egorov wrote: > Introduce a bus-width property to define the number of parallel RGB > input pins connected to the transmitter. The input bus formats are updated > accordingly. If the property is not specified, default to 24-bit bus-width. > > Signed-off-by: Wadim Egorov <w.egorov@xxxxxxxxx> > --- > v2: > - Use bus-width instead of data-lines as suggested by Krzysztof > - Handle default case separately as an error case > --- > drivers/gpu/drm/bridge/sii902x.c | 28 +++++++++++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c > index 7f91b0db161e..3b9e4e1dec45 100644 > --- a/drivers/gpu/drm/bridge/sii902x.c > +++ b/drivers/gpu/drm/bridge/sii902x.c > @@ -180,6 +180,8 @@ struct sii902x { > struct gpio_desc *reset_gpio; > struct i2c_mux_core *i2cmux; > bool sink_is_hdmi; > + u32 bus_width; > + > /* > * Mutex protects audio and video functions from interfering > * each other, by keeping their i2c command sequences atomic. > @@ -477,6 +479,8 @@ static u32 *sii902x_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge, > u32 output_fmt, > unsigned int *num_input_fmts) > { > + > + struct sii902x *sii902x = bridge_to_sii902x(bridge); > u32 *input_fmts; > > *num_input_fmts = 0; > @@ -485,7 +489,20 @@ static u32 *sii902x_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge, > if (!input_fmts) > return NULL; > > - input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24; > + switch (sii902x->bus_width) { > + case 16: > + input_fmts[0] = MEDIA_BUS_FMT_RGB565_1X16; > + break; > + case 18: > + input_fmts[0] = MEDIA_BUS_FMT_RGB666_1X18; > + break; > + case 24: > + input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24; > + break; > + default: > + return NULL; > + } > + > *num_input_fmts = 1; > > return input_fmts; > @@ -1167,6 +1184,15 @@ static int sii902x_probe(struct i2c_client *client) > return PTR_ERR(sii902x->reset_gpio); > } > > + endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1); More common pattern would be: sii902x->bus_width = 24; /* ignore the error */ if (endpoint) of_property_read_u32(endpoint, "bus-width", &sii902x->bus_width); > + if (endpoint) { > + ret = of_property_read_u32(endpoint, "bus-width", &sii902x->bus_width); > + if (ret) { > + dev_dbg(dev, "Could not get bus-width, defaulting to 24-bit bus-width\n"); > + sii902x->bus_width = 24; If endpoint isn't defined in DT (for whatever reasons), bus_width is also not set in the code. > + } > + } > + > endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 1, -1); > if (endpoint) { > struct device_node *remote = of_graph_get_remote_port_parent(endpoint); > -- > 2.34.1 > -- With best wishes Dmitry