Message ID | 20250311122445.3597100-9-quic_amakhija@quicinc.com |
---|---|
State | Superseded |
Headers | show |
Series | Add DSI display support for SA8775P target | expand |
On Tue, Mar 11, 2025 at 05:54:43PM +0530, Ayushi Makhija wrote: > When device enters the suspend state, it prevents > HPD interrupts from occurring. To address this, > add an additional PM runtime vote in hpd_enable(). > This vote is removed in hpd_disable(). Is it really enough to toggle the HPD interrupts? Is there any kind of programming that should be moved to .hpd_enable() too (so that by default the bridge doesn't generate HPD interrupts)? > > Signed-off-by: Ayushi Makhija <quic_amakhija@quicinc.com> > --- > drivers/gpu/drm/bridge/analogix/anx7625.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c > index 4be34d5c7a3b..764da1c1dc11 100644 > --- a/drivers/gpu/drm/bridge/analogix/anx7625.c > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c > @@ -2474,6 +2474,22 @@ static const struct drm_edid *anx7625_bridge_edid_read(struct drm_bridge *bridge > return anx7625_edid_read(ctx); > } > > +static void anx7625_bridge_hpd_enable(struct drm_bridge *bridge) > +{ > + struct anx7625_data *ctx = bridge_to_anx7625(bridge); > + struct device *dev = ctx->dev; > + > + pm_runtime_get_sync(dev); > +} > + > +static void anx7625_bridge_hpd_disable(struct drm_bridge *bridge) > +{ > + struct anx7625_data *ctx = bridge_to_anx7625(bridge); > + struct device *dev = ctx->dev; > + > + pm_runtime_put_sync(dev); > +} > + > static const struct drm_bridge_funcs anx7625_bridge_funcs = { > .attach = anx7625_bridge_attach, > .detach = anx7625_bridge_detach, > @@ -2487,6 +2503,8 @@ static const struct drm_bridge_funcs anx7625_bridge_funcs = { > .atomic_reset = drm_atomic_helper_bridge_reset, > .detect = anx7625_bridge_detect, > .edid_read = anx7625_bridge_edid_read, > + .hpd_enable = anx7625_bridge_hpd_enable, > + .hpd_disable = anx7625_bridge_hpd_disable, > }; > > static int anx7625_register_i2c_dummy_clients(struct anx7625_data *ctx, > -- > 2.34.1 >
On 3/11/2025 9:09 PM, Dmitry Baryshkov wrote: > On Tue, Mar 11, 2025 at 05:54:43PM +0530, Ayushi Makhija wrote: >> When device enters the suspend state, it prevents >> HPD interrupts from occurring. To address this, >> add an additional PM runtime vote in hpd_enable(). >> This vote is removed in hpd_disable(). > > Is it really enough to toggle the HPD interrupts? Is there any kind of > programming that should be moved to .hpd_enable() too (so that by > default the bridge doesn't generate HPD interrupts)? > Hi Dmirty, I couldn't find the ANX7625 bridge driver datasheet, where all the registers information are present. As per my understanding, we have anx7625_hpd_timer_config(), where debounce timer registers are getting set, which help to manage the detection and stability of the HPD signal. anx7625_hpd_timer_config() is getting called from anx7625_runtime_pm_resume(). anx7625_runtime_pm_resume anx7625_power_on_init anx7625_ocm_loading_check anx7625_disable_pd_protocol anx7625_hpd_timer_config So, I think HPD programming is already taken care in anx7625_hpd_timer_config(). anx7625_runtime_pm_resume() is getting called for both eDP and DP configuration. If you suggest then, I can move the anx7625_hpd_timer_config() from anx7625_disable_pd_protocol() to anx7625_bridge_hpd_enable(). Thanks, Ayushi
On Fri, Mar 21, 2025 at 02:36:21AM +0530, Ayushi Makhija wrote: > On 3/11/2025 9:09 PM, Dmitry Baryshkov wrote: > > On Tue, Mar 11, 2025 at 05:54:43PM +0530, Ayushi Makhija wrote: > >> When device enters the suspend state, it prevents > >> HPD interrupts from occurring. To address this, > >> add an additional PM runtime vote in hpd_enable(). > >> This vote is removed in hpd_disable(). > > > > Is it really enough to toggle the HPD interrupts? Is there any kind of > > programming that should be moved to .hpd_enable() too (so that by > > default the bridge doesn't generate HPD interrupts)? > > > > Hi Dmirty, > > I couldn't find the ANX7625 bridge driver datasheet, where all the registers information are present. > > As per my understanding, we have anx7625_hpd_timer_config(), where debounce timer registers are getting set, which help to manage the detection and stability of the HPD signal. > > anx7625_hpd_timer_config() is getting called from anx7625_runtime_pm_resume(). > > anx7625_runtime_pm_resume > anx7625_power_on_init > anx7625_ocm_loading_check > anx7625_disable_pd_protocol > anx7625_hpd_timer_config > > So, I think HPD programming is already taken care in anx7625_hpd_timer_config(). anx7625_runtime_pm_resume() is getting called for both eDP and DP configuration. > > If you suggest then, I can move the anx7625_hpd_timer_config() from anx7625_disable_pd_protocol() to anx7625_bridge_hpd_enable(). This might result in HPD signal being generated after invalid or improper timings. If we can't get a feedback from Analogix on how to control HPD generation, then it's better to leave it as is.
diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c index 4be34d5c7a3b..764da1c1dc11 100644 --- a/drivers/gpu/drm/bridge/analogix/anx7625.c +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c @@ -2474,6 +2474,22 @@ static const struct drm_edid *anx7625_bridge_edid_read(struct drm_bridge *bridge return anx7625_edid_read(ctx); } +static void anx7625_bridge_hpd_enable(struct drm_bridge *bridge) +{ + struct anx7625_data *ctx = bridge_to_anx7625(bridge); + struct device *dev = ctx->dev; + + pm_runtime_get_sync(dev); +} + +static void anx7625_bridge_hpd_disable(struct drm_bridge *bridge) +{ + struct anx7625_data *ctx = bridge_to_anx7625(bridge); + struct device *dev = ctx->dev; + + pm_runtime_put_sync(dev); +} + static const struct drm_bridge_funcs anx7625_bridge_funcs = { .attach = anx7625_bridge_attach, .detach = anx7625_bridge_detach, @@ -2487,6 +2503,8 @@ static const struct drm_bridge_funcs anx7625_bridge_funcs = { .atomic_reset = drm_atomic_helper_bridge_reset, .detect = anx7625_bridge_detect, .edid_read = anx7625_bridge_edid_read, + .hpd_enable = anx7625_bridge_hpd_enable, + .hpd_disable = anx7625_bridge_hpd_disable, }; static int anx7625_register_i2c_dummy_clients(struct anx7625_data *ctx,
When device enters the suspend state, it prevents HPD interrupts from occurring. To address this, add an additional PM runtime vote in hpd_enable(). This vote is removed in hpd_disable(). Signed-off-by: Ayushi Makhija <quic_amakhija@quicinc.com> --- drivers/gpu/drm/bridge/analogix/anx7625.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)