Commit 24c7861b authored by Stephen Boyd's avatar Stephen Boyd Committed by Rob Clark

drm/msm/dp: Simplify aux irq handling code

We don't need to stash away 'isr' in the aux structure to pass to two
functions. Let's use a local variable instead. And we can complete the
completion variable in one place instead of two to simplify the code.

Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Abhinav Kumar <abhinavk@codeaurora.org>
Cc: Kuogee Hsieh <khsieh@codeaurora.org>
Cc: aravindh@codeaurora.org
Cc: Sean Paul <sean@poorly.run>
Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
Reviewed-by: default avatarKuogee Hsieh <khsieh@codeaurora.org>
Link: https://lore.kernel.org/r/20210507212505.1224111-2-swboyd@chromium.orgSigned-off-by: default avatarRob Clark <robdclark@chromium.org>
parent 53e23170
...@@ -27,7 +27,6 @@ struct dp_aux_private { ...@@ -27,7 +27,6 @@ struct dp_aux_private {
bool no_send_stop; bool no_send_stop;
u32 offset; u32 offset;
u32 segment; u32 segment;
u32 isr;
struct drm_dp_aux dp_aux; struct drm_dp_aux dp_aux;
}; };
...@@ -181,10 +180,8 @@ static void dp_aux_cmd_fifo_rx(struct dp_aux_private *aux, ...@@ -181,10 +180,8 @@ static void dp_aux_cmd_fifo_rx(struct dp_aux_private *aux,
} }
} }
static void dp_aux_native_handler(struct dp_aux_private *aux) static void dp_aux_native_handler(struct dp_aux_private *aux, u32 isr)
{ {
u32 isr = aux->isr;
if (isr & DP_INTR_AUX_I2C_DONE) if (isr & DP_INTR_AUX_I2C_DONE)
aux->aux_error_num = DP_AUX_ERR_NONE; aux->aux_error_num = DP_AUX_ERR_NONE;
else if (isr & DP_INTR_WRONG_ADDR) else if (isr & DP_INTR_WRONG_ADDR)
...@@ -197,14 +194,10 @@ static void dp_aux_native_handler(struct dp_aux_private *aux) ...@@ -197,14 +194,10 @@ static void dp_aux_native_handler(struct dp_aux_private *aux)
aux->aux_error_num = DP_AUX_ERR_PHY; aux->aux_error_num = DP_AUX_ERR_PHY;
dp_catalog_aux_clear_hw_interrupts(aux->catalog); dp_catalog_aux_clear_hw_interrupts(aux->catalog);
} }
complete(&aux->comp);
} }
static void dp_aux_i2c_handler(struct dp_aux_private *aux) static void dp_aux_i2c_handler(struct dp_aux_private *aux, u32 isr)
{ {
u32 isr = aux->isr;
if (isr & DP_INTR_AUX_I2C_DONE) { if (isr & DP_INTR_AUX_I2C_DONE) {
if (isr & (DP_INTR_I2C_NACK | DP_INTR_I2C_DEFER)) if (isr & (DP_INTR_I2C_NACK | DP_INTR_I2C_DEFER))
aux->aux_error_num = DP_AUX_ERR_NACK; aux->aux_error_num = DP_AUX_ERR_NACK;
...@@ -226,8 +219,6 @@ static void dp_aux_i2c_handler(struct dp_aux_private *aux) ...@@ -226,8 +219,6 @@ static void dp_aux_i2c_handler(struct dp_aux_private *aux)
dp_catalog_aux_clear_hw_interrupts(aux->catalog); dp_catalog_aux_clear_hw_interrupts(aux->catalog);
} }
} }
complete(&aux->comp);
} }
static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux, static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux,
...@@ -412,6 +403,7 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux, ...@@ -412,6 +403,7 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
void dp_aux_isr(struct drm_dp_aux *dp_aux) void dp_aux_isr(struct drm_dp_aux *dp_aux)
{ {
u32 isr;
struct dp_aux_private *aux; struct dp_aux_private *aux;
if (!dp_aux) { if (!dp_aux) {
...@@ -421,15 +413,17 @@ void dp_aux_isr(struct drm_dp_aux *dp_aux) ...@@ -421,15 +413,17 @@ void dp_aux_isr(struct drm_dp_aux *dp_aux)
aux = container_of(dp_aux, struct dp_aux_private, dp_aux); aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
aux->isr = dp_catalog_aux_get_irq(aux->catalog); isr = dp_catalog_aux_get_irq(aux->catalog);
if (!aux->cmd_busy) if (!aux->cmd_busy)
return; return;
if (aux->native) if (aux->native)
dp_aux_native_handler(aux); dp_aux_native_handler(aux, isr);
else else
dp_aux_i2c_handler(aux); dp_aux_i2c_handler(aux, isr);
complete(&aux->comp);
} }
void dp_aux_reconfig(struct drm_dp_aux *dp_aux) void dp_aux_reconfig(struct drm_dp_aux *dp_aux)
......
...@@ -301,7 +301,7 @@ void dp_catalog_dump_regs(struct dp_catalog *dp_catalog) ...@@ -301,7 +301,7 @@ void dp_catalog_dump_regs(struct dp_catalog *dp_catalog)
dump_regs(catalog->io->dp_controller.base + offset, len); dump_regs(catalog->io->dp_controller.base + offset, len);
} }
int dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog) u32 dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog)
{ {
struct dp_catalog_private *catalog = container_of(dp_catalog, struct dp_catalog_private *catalog = container_of(dp_catalog,
struct dp_catalog_private, dp_catalog); struct dp_catalog_private, dp_catalog);
......
...@@ -84,7 +84,7 @@ int dp_catalog_aux_clear_hw_interrupts(struct dp_catalog *dp_catalog); ...@@ -84,7 +84,7 @@ int dp_catalog_aux_clear_hw_interrupts(struct dp_catalog *dp_catalog);
void dp_catalog_aux_reset(struct dp_catalog *dp_catalog); void dp_catalog_aux_reset(struct dp_catalog *dp_catalog);
void dp_catalog_aux_enable(struct dp_catalog *dp_catalog, bool enable); void dp_catalog_aux_enable(struct dp_catalog *dp_catalog, bool enable);
void dp_catalog_aux_update_cfg(struct dp_catalog *dp_catalog); void dp_catalog_aux_update_cfg(struct dp_catalog *dp_catalog);
int dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog); u32 dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog);
/* DP Controller APIs */ /* DP Controller APIs */
void dp_catalog_ctrl_state_ctrl(struct dp_catalog *dp_catalog, u32 state); void dp_catalog_ctrl_state_ctrl(struct dp_catalog *dp_catalog, u32 state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment