Commit f853f3da authored by Steve Longerbeam's avatar Steve Longerbeam Committed by Philipp Zabel

gpu: ipu-v3: Implement use counter for ipu_dc_enable(), ipu_dc_disable()

The functions ipu_dc_enable() and ipu_dc_disable() enable/disable the DC
globally in the IPU_CONF register, but the DC is used by multiple clients
on different DC channels. So make sure to only disable/enable the DC
globally based on a use counter.
Signed-off-by: default avatarSteve Longerbeam <steve_longerbeam@mentor.com>
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
parent 6457b971
...@@ -114,6 +114,7 @@ struct ipu_dc_priv { ...@@ -114,6 +114,7 @@ struct ipu_dc_priv {
struct completion comp; struct completion comp;
int dc_irq; int dc_irq;
int dp_irq; int dp_irq;
int use_count;
}; };
static void dc_link_event(struct ipu_dc *dc, int event, int addr, int priority) static void dc_link_event(struct ipu_dc *dc, int event, int addr, int priority)
...@@ -232,7 +233,16 @@ EXPORT_SYMBOL_GPL(ipu_dc_init_sync); ...@@ -232,7 +233,16 @@ EXPORT_SYMBOL_GPL(ipu_dc_init_sync);
void ipu_dc_enable(struct ipu_soc *ipu) void ipu_dc_enable(struct ipu_soc *ipu)
{ {
ipu_module_enable(ipu, IPU_CONF_DC_EN); struct ipu_dc_priv *priv = ipu->dc_priv;
mutex_lock(&priv->mutex);
if (!priv->use_count)
ipu_module_enable(priv->ipu, IPU_CONF_DC_EN);
priv->use_count++;
mutex_unlock(&priv->mutex);
} }
EXPORT_SYMBOL_GPL(ipu_dc_enable); EXPORT_SYMBOL_GPL(ipu_dc_enable);
...@@ -294,7 +304,18 @@ EXPORT_SYMBOL_GPL(ipu_dc_disable_channel); ...@@ -294,7 +304,18 @@ EXPORT_SYMBOL_GPL(ipu_dc_disable_channel);
void ipu_dc_disable(struct ipu_soc *ipu) void ipu_dc_disable(struct ipu_soc *ipu)
{ {
ipu_module_disable(ipu, IPU_CONF_DC_EN); struct ipu_dc_priv *priv = ipu->dc_priv;
mutex_lock(&priv->mutex);
priv->use_count--;
if (!priv->use_count)
ipu_module_disable(priv->ipu, IPU_CONF_DC_EN);
if (priv->use_count < 0)
priv->use_count = 0;
mutex_unlock(&priv->mutex);
} }
EXPORT_SYMBOL_GPL(ipu_dc_disable); EXPORT_SYMBOL_GPL(ipu_dc_disable);
......
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