Message ID | d3de652f-ce89-4f57-b900-07b11f8bf8f9@free.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v1] drm/bridge: simple-bridge: Add support for TI TDP158 | expand |
Hi, On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: > From: Arnaud Vrac <avrac@freebox.fr> > > The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting > DVI 1.0 and HDMI 1.4b and 2.0b output signals. > > Since it's an I2C-programmable bridge, it could have a proper driver, > but the default settings work fine, thus simple bridge is sufficient. No it doesn't. That bridge supports HDMI 2.0 which means you'll need to change the TMDS clock ratio when programming a TMDS character rate higher than 340MHz. And you'll need hotplug support to deal with it properly too. So sorry, you need a real driver there. > Signed-off-by: Arnaud Vrac <avrac@freebox.fr> > Signed-off-by: Marc Gonzalez <mgonzalez@freebox.fr> > --- > drivers/gpu/drm/bridge/simple-bridge.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c > index 5813a2c4fc5ee..b138279864750 100644 > --- a/drivers/gpu/drm/bridge/simple-bridge.c > +++ b/drivers/gpu/drm/bridge/simple-bridge.c > @@ -292,6 +292,11 @@ static const struct of_device_id simple_bridge_match[] = { > .timings = &ti_ths8134_bridge_timings, > .connector_type = DRM_MODE_CONNECTOR_VGA, > }, > + }, { > + .compatible = "ti,tdp158", > + .data = &(const struct simple_bridge_info) { > + .connector_type = DRM_MODE_CONNECTOR_HDMIA, > + }, You'll need a DT binding for that too. Maxime
On 28/05/2024 09:43, Maxime Ripard wrote: > Hi, > > On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: >> From: Arnaud Vrac <avrac@freebox.fr> >> >> The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting >> DVI 1.0 and HDMI 1.4b and 2.0b output signals. >> >> Since it's an I2C-programmable bridge, it could have a proper driver, >> but the default settings work fine, thus simple bridge is sufficient. > > No it doesn't. That bridge supports HDMI 2.0 which means you'll need to > change the TMDS clock ratio when programming a TMDS character rate > higher than 340MHz. And you'll need hotplug support to deal with it > properly too. > > So sorry, you need a real driver there. Hello, this is an HDMI redriver, which simply cleans up the HDMI signal, so no programming is needed to support HDMI 2.0. Dmitry's comment on v2 also indicates a driver is needed to power on the chip properly, so a dedicated driver does seem to be needed anyway. > >> Signed-off-by: Arnaud Vrac <avrac@freebox.fr> >> Signed-off-by: Marc Gonzalez <mgonzalez@freebox.fr> >> --- >> drivers/gpu/drm/bridge/simple-bridge.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c >> index 5813a2c4fc5ee..b138279864750 100644 >> --- a/drivers/gpu/drm/bridge/simple-bridge.c >> +++ b/drivers/gpu/drm/bridge/simple-bridge.c >> @@ -292,6 +292,11 @@ static const struct of_device_id simple_bridge_match[] = { >> .timings = &ti_ths8134_bridge_timings, >> .connector_type = DRM_MODE_CONNECTOR_VGA, >> }, >> + }, { >> + .compatible = "ti,tdp158", >> + .data = &(const struct simple_bridge_info) { >> + .connector_type = DRM_MODE_CONNECTOR_HDMIA, >> + }, > > You'll need a DT binding for that too. > Ack. Thanks, -Arnaud
On Tue, May 28, 2024 at 10:05:50AM GMT, Arnaud Vrac wrote: > On 28/05/2024 09:43, Maxime Ripard wrote: > > Hi, > > > > On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: > > > From: Arnaud Vrac <avrac@freebox.fr> > > > > > > The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting > > > DVI 1.0 and HDMI 1.4b and 2.0b output signals. > > > > > > Since it's an I2C-programmable bridge, it could have a proper driver, > > > but the default settings work fine, thus simple bridge is sufficient. > > > > No it doesn't. That bridge supports HDMI 2.0 which means you'll need to > > change the TMDS clock ratio when programming a TMDS character rate > > higher than 340MHz. And you'll need hotplug support to deal with it > > properly too. > > > > So sorry, you need a real driver there. > > Hello, this is an HDMI redriver, which simply cleans up the HDMI > signal, so no programming is needed to support HDMI 2.0. I mean, if I'm to trust the datasheet, it is more complicated than that. It snoops the DDC bus so it can update the TMDS clock ratio bit if it's sent on its input side, but that wouldn't happen with DP for example. Maxime
On 28/05/2024 11:17, Maxime Ripard wrote: > On Tue, May 28, 2024 at 10:05:50AM GMT, Arnaud Vrac wrote: >> On 28/05/2024 09:43, Maxime Ripard wrote: >>> Hi, >>> >>> On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: >>>> From: Arnaud Vrac <avrac@freebox.fr> >>>> >>>> The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting >>>> DVI 1.0 and HDMI 1.4b and 2.0b output signals. >>>> >>>> Since it's an I2C-programmable bridge, it could have a proper driver, >>>> but the default settings work fine, thus simple bridge is sufficient. >>> >>> No it doesn't. That bridge supports HDMI 2.0 which means you'll need to >>> change the TMDS clock ratio when programming a TMDS character rate >>> higher than 340MHz. And you'll need hotplug support to deal with it >>> properly too. >>> >>> So sorry, you need a real driver there. >> >> Hello, this is an HDMI redriver, which simply cleans up the HDMI >> signal, so no programming is needed to support HDMI 2.0. > > I mean, if I'm to trust the datasheet, it is more complicated than that. > It snoops the DDC bus so it can update the TMDS clock ratio bit if it's > sent on its input side, but that wouldn't happen with DP for example. > That's a use case we can't test and will never use as a device integrator, unfortunately. To support our simple HDMI redriver use case, would it be ok to write a driver just handling power up with documented bindings with the chip default settings ? Someone with an actual need for more specific setups could then implement the additional code needed to support that. The bindings could be extended without breaking compatibility. Regards, -Arnaud
On Tue, May 28, 2024 at 11:17:56AM +0200, Maxime Ripard wrote: > On Tue, May 28, 2024 at 10:05:50AM GMT, Arnaud Vrac wrote: > > On 28/05/2024 09:43, Maxime Ripard wrote: > > > Hi, > > > > > > On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: > > > > From: Arnaud Vrac <avrac@freebox.fr> > > > > > > > > The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting > > > > DVI 1.0 and HDMI 1.4b and 2.0b output signals. > > > > > > > > Since it's an I2C-programmable bridge, it could have a proper driver, > > > > but the default settings work fine, thus simple bridge is sufficient. > > > > > > No it doesn't. That bridge supports HDMI 2.0 which means you'll need to > > > change the TMDS clock ratio when programming a TMDS character rate > > > higher than 340MHz. And you'll need hotplug support to deal with it > > > properly too. > > > > > > So sorry, you need a real driver there. > > > > Hello, this is an HDMI redriver, which simply cleans up the HDMI > > signal, so no programming is needed to support HDMI 2.0. > > I mean, if I'm to trust the datasheet, it is more complicated than that. > It snoops the DDC bus so it can update the TMDS clock ratio bit if it's > sent on its input side, but that wouldn't happen with DP for example. If I understand correctly, this chip can work in two modes: dummy and I2C-programmed. In the former case it is fully transparent, including HPD passthrough, it doesn't require any additional programming, just Vcc, Vdd and pin straps, etc. And the second mode is a 'brainy' one, when the chip is fully controlled over I2C. From the Linux standpoint these two modes will use single compat string, but two distinct drivers: for the former mode is is enough to use simple-bridge (fixed to support two supplies), while the latter one needs a proper I2C driver. Does that solve your concern?
On Tue, May 28, 2024 at 04:50:10PM GMT, Dmitry Baryshkov wrote: > On Tue, May 28, 2024 at 11:17:56AM +0200, Maxime Ripard wrote: > > On Tue, May 28, 2024 at 10:05:50AM GMT, Arnaud Vrac wrote: > > > On 28/05/2024 09:43, Maxime Ripard wrote: > > > > Hi, > > > > > > > > On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: > > > > > From: Arnaud Vrac <avrac@freebox.fr> > > > > > > > > > > The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting > > > > > DVI 1.0 and HDMI 1.4b and 2.0b output signals. > > > > > > > > > > Since it's an I2C-programmable bridge, it could have a proper driver, > > > > > but the default settings work fine, thus simple bridge is sufficient. > > > > > > > > No it doesn't. That bridge supports HDMI 2.0 which means you'll need to > > > > change the TMDS clock ratio when programming a TMDS character rate > > > > higher than 340MHz. And you'll need hotplug support to deal with it > > > > properly too. > > > > > > > > So sorry, you need a real driver there. > > > > > > Hello, this is an HDMI redriver, which simply cleans up the HDMI > > > signal, so no programming is needed to support HDMI 2.0. > > > > I mean, if I'm to trust the datasheet, it is more complicated than that. > > It snoops the DDC bus so it can update the TMDS clock ratio bit if it's > > sent on its input side, but that wouldn't happen with DP for example. > > If I understand correctly, this chip can work in two modes: dummy and > I2C-programmed. In the former case it is fully transparent, including > HPD passthrough, it doesn't require any additional programming, just > Vcc, Vdd and pin straps, etc. And the second mode is a 'brainy' one, > when the chip is fully controlled over I2C. Right, and like I said, the situation is more complicated than "it just does passthrough" like simple-bridge does. > From the Linux standpoint these two modes will use single compat string, > but two distinct drivers: for the former mode is is enough to use > simple-bridge (fixed to support two supplies), while the latter one > needs a proper I2C driver. > > Does that solve your concern? We need to be careful here: if there's two drivers with the same compatible and bus, both will be probed. So we need to take it into account when designing the binding. Maxime
On Tue, 28 May 2024 at 18:00, Maxime Ripard <mripard@kernel.org> wrote: > > On Tue, May 28, 2024 at 04:50:10PM GMT, Dmitry Baryshkov wrote: > > On Tue, May 28, 2024 at 11:17:56AM +0200, Maxime Ripard wrote: > > > On Tue, May 28, 2024 at 10:05:50AM GMT, Arnaud Vrac wrote: > > > > On 28/05/2024 09:43, Maxime Ripard wrote: > > > > > Hi, > > > > > > > > > > On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: > > > > > > From: Arnaud Vrac <avrac@freebox.fr> > > > > > > > > > > > > The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting > > > > > > DVI 1.0 and HDMI 1.4b and 2.0b output signals. > > > > > > > > > > > > Since it's an I2C-programmable bridge, it could have a proper driver, > > > > > > but the default settings work fine, thus simple bridge is sufficient. > > > > > > > > > > No it doesn't. That bridge supports HDMI 2.0 which means you'll need to > > > > > change the TMDS clock ratio when programming a TMDS character rate > > > > > higher than 340MHz. And you'll need hotplug support to deal with it > > > > > properly too. > > > > > > > > > > So sorry, you need a real driver there. > > > > > > > > Hello, this is an HDMI redriver, which simply cleans up the HDMI > > > > signal, so no programming is needed to support HDMI 2.0. > > > > > > I mean, if I'm to trust the datasheet, it is more complicated than that. > > > It snoops the DDC bus so it can update the TMDS clock ratio bit if it's > > > sent on its input side, but that wouldn't happen with DP for example. > > > > If I understand correctly, this chip can work in two modes: dummy and > > I2C-programmed. In the former case it is fully transparent, including > > HPD passthrough, it doesn't require any additional programming, just > > Vcc, Vdd and pin straps, etc. And the second mode is a 'brainy' one, > > when the chip is fully controlled over I2C. > > Right, and like I said, the situation is more complicated than "it just > does passthrough" like simple-bridge does. > > > From the Linux standpoint these two modes will use single compat string, > > but two distinct drivers: for the former mode is is enough to use > > simple-bridge (fixed to support two supplies), while the latter one > > needs a proper I2C driver. > > > > Does that solve your concern? > > We need to be careful here: if there's two drivers with the same > compatible and bus, both will be probed. I was thinking about i2c_driver and platform_driver, so there should have been no conflict. But Arnaud wrote on IRC that on this device the bridge is connected over I2C. This rules out simple-bridge anyway. > So we need to take it into > account when designing the binding. > > Maxime
On Tue, May 28, 2024 at 01:39:52PM GMT, Arnaud Vrac wrote: > On 28/05/2024 11:17, Maxime Ripard wrote: > > On Tue, May 28, 2024 at 10:05:50AM GMT, Arnaud Vrac wrote: > > > On 28/05/2024 09:43, Maxime Ripard wrote: > > > > Hi, > > > > > > > > On Mon, May 27, 2024 at 06:03:56PM GMT, Marc Gonzalez wrote: > > > > > From: Arnaud Vrac <avrac@freebox.fr> > > > > > > > > > > The TI TDP158 is an AC-Coupled HDMI signal to TMDS Redriver supporting > > > > > DVI 1.0 and HDMI 1.4b and 2.0b output signals. > > > > > > > > > > Since it's an I2C-programmable bridge, it could have a proper driver, > > > > > but the default settings work fine, thus simple bridge is sufficient. > > > > > > > > No it doesn't. That bridge supports HDMI 2.0 which means you'll need to > > > > change the TMDS clock ratio when programming a TMDS character rate > > > > higher than 340MHz. And you'll need hotplug support to deal with it > > > > properly too. > > > > > > > > So sorry, you need a real driver there. > > > > > > Hello, this is an HDMI redriver, which simply cleans up the HDMI > > > signal, so no programming is needed to support HDMI 2.0. > > > > I mean, if I'm to trust the datasheet, it is more complicated than that. > > It snoops the DDC bus so it can update the TMDS clock ratio bit if it's > > sent on its input side, but that wouldn't happen with DP for example. > > > > That's a use case we can't test and will never use as a device > integrator, unfortunately. > > To support our simple HDMI redriver use case, would it be ok to write > a driver just handling power up with documented bindings with the chip > default settings ? Someone with an actual need for more specific > setups could then implement the additional code needed to support > that. The bindings could be extended without breaking compatibility. Sure, that's what I meant. We need to make sure the binding is extensible enough / take all the possibilities into account, but the driver can definitely be minimal. Maxime
diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c index 5813a2c4fc5ee..b138279864750 100644 --- a/drivers/gpu/drm/bridge/simple-bridge.c +++ b/drivers/gpu/drm/bridge/simple-bridge.c @@ -292,6 +292,11 @@ static const struct of_device_id simple_bridge_match[] = { .timings = &ti_ths8134_bridge_timings, .connector_type = DRM_MODE_CONNECTOR_VGA, }, + }, { + .compatible = "ti,tdp158", + .data = &(const struct simple_bridge_info) { + .connector_type = DRM_MODE_CONNECTOR_HDMIA, + }, }, {}, };