Lines Matching refs:priv

111 	struct ipu_dmfc_priv		*priv;  member
127 struct ipu_dmfc_priv *priv = dmfc->priv; in ipu_dmfc_enable_channel() local
128 mutex_lock(&priv->mutex); in ipu_dmfc_enable_channel()
130 if (!priv->use_count) in ipu_dmfc_enable_channel()
131 ipu_module_enable(priv->ipu, IPU_CONF_DMFC_EN); in ipu_dmfc_enable_channel()
133 priv->use_count++; in ipu_dmfc_enable_channel()
135 mutex_unlock(&priv->mutex); in ipu_dmfc_enable_channel()
141 static void ipu_dmfc_wait_fifos(struct ipu_dmfc_priv *priv) in ipu_dmfc_wait_fifos() argument
145 while ((readl(priv->base + DMFC_STAT) & 0x02fff000) != 0x02fff000) { in ipu_dmfc_wait_fifos()
147 dev_warn(priv->dev, in ipu_dmfc_wait_fifos()
157 struct ipu_dmfc_priv *priv = dmfc->priv; in ipu_dmfc_disable_channel() local
159 mutex_lock(&priv->mutex); in ipu_dmfc_disable_channel()
161 priv->use_count--; in ipu_dmfc_disable_channel()
163 if (!priv->use_count) { in ipu_dmfc_disable_channel()
164 ipu_dmfc_wait_fifos(priv); in ipu_dmfc_disable_channel()
165 ipu_module_disable(priv->ipu, IPU_CONF_DMFC_EN); in ipu_dmfc_disable_channel()
168 if (priv->use_count < 0) in ipu_dmfc_disable_channel()
169 priv->use_count = 0; in ipu_dmfc_disable_channel()
171 mutex_unlock(&priv->mutex); in ipu_dmfc_disable_channel()
178 struct ipu_dmfc_priv *priv = dmfc->priv; in ipu_dmfc_setup_channel() local
181 dev_dbg(priv->dev, in ipu_dmfc_setup_channel()
219 val = readl(priv->base + dmfc->data->channel_reg); in ipu_dmfc_setup_channel()
224 writel(val, priv->base + dmfc->data->channel_reg); in ipu_dmfc_setup_channel()
234 static int dmfc_bandwidth_to_slots(struct ipu_dmfc_priv *priv, in dmfc_bandwidth_to_slots() argument
239 while (slots * priv->bandwidth_per_slot < bandwidth) in dmfc_bandwidth_to_slots()
245 static int dmfc_find_slots(struct ipu_dmfc_priv *priv, int slots) in dmfc_find_slots() argument
253 slotmask_used |= priv->channels[i].slotmask; in dmfc_find_slots()
268 struct ipu_dmfc_priv *priv = dmfc->priv; in ipu_dmfc_free_bandwidth() local
271 dev_dbg(priv->dev, "dmfc: freeing %d slots starting from segment %d\n", in ipu_dmfc_free_bandwidth()
274 mutex_lock(&priv->mutex); in ipu_dmfc_free_bandwidth()
284 priv->channels[i].slotmask = 0; in ipu_dmfc_free_bandwidth()
287 if (priv->channels[i].slots > 0) { in ipu_dmfc_free_bandwidth()
288 priv->channels[i].segment = in ipu_dmfc_free_bandwidth()
289 dmfc_find_slots(priv, priv->channels[i].slots); in ipu_dmfc_free_bandwidth()
290 priv->channels[i].slotmask = in ipu_dmfc_free_bandwidth()
291 ((1 << priv->channels[i].slots) - 1) << in ipu_dmfc_free_bandwidth()
292 priv->channels[i].segment; in ipu_dmfc_free_bandwidth()
297 if (priv->channels[i].slots > 0) in ipu_dmfc_free_bandwidth()
298 ipu_dmfc_setup_channel(&priv->channels[i], in ipu_dmfc_free_bandwidth()
299 priv->channels[i].slots, in ipu_dmfc_free_bandwidth()
300 priv->channels[i].segment, in ipu_dmfc_free_bandwidth()
301 priv->channels[i].burstsize); in ipu_dmfc_free_bandwidth()
304 mutex_unlock(&priv->mutex); in ipu_dmfc_free_bandwidth()
311 struct ipu_dmfc_priv *priv = dmfc->priv; in ipu_dmfc_alloc_bandwidth() local
312 int slots = dmfc_bandwidth_to_slots(priv, bandwidth_pixel_per_second); in ipu_dmfc_alloc_bandwidth()
315 dev_dbg(priv->dev, "dmfc: trying to allocate %ldMpixel/s for IPU channel %d\n", in ipu_dmfc_alloc_bandwidth()
321 mutex_lock(&priv->mutex); in ipu_dmfc_alloc_bandwidth()
330 segment = dmfc_find_slots(priv, slots * 2); in ipu_dmfc_alloc_bandwidth()
338 segment = dmfc_find_slots(priv, slots); in ipu_dmfc_alloc_bandwidth()
347 mutex_unlock(&priv->mutex); in ipu_dmfc_alloc_bandwidth()
355 struct ipu_dmfc_priv *priv = dmfc->priv; in ipu_dmfc_init_channel() local
358 dmfc_gen1 = readl(priv->base + DMFC_GENERAL1); in ipu_dmfc_init_channel()
365 writel(dmfc_gen1, priv->base + DMFC_GENERAL1); in ipu_dmfc_init_channel()
373 struct ipu_dmfc_priv *priv = ipu->dmfc_priv; in ipu_dmfc_get() local
378 return &priv->channels[i]; in ipu_dmfc_get()
392 struct ipu_dmfc_priv *priv; in ipu_dmfc_init() local
395 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); in ipu_dmfc_init()
396 if (!priv) in ipu_dmfc_init()
399 priv->base = devm_ioremap(dev, base, PAGE_SIZE); in ipu_dmfc_init()
400 if (!priv->base) in ipu_dmfc_init()
403 priv->dev = dev; in ipu_dmfc_init()
404 priv->ipu = ipu; in ipu_dmfc_init()
405 mutex_init(&priv->mutex); in ipu_dmfc_init()
407 ipu->dmfc_priv = priv; in ipu_dmfc_init()
410 priv->channels[i].priv = priv; in ipu_dmfc_init()
411 priv->channels[i].ipu = ipu; in ipu_dmfc_init()
412 priv->channels[i].data = &dmfcdata[i]; in ipu_dmfc_init()
415 writel(0x0, priv->base + DMFC_WR_CHAN); in ipu_dmfc_init()
416 writel(0x0, priv->base + DMFC_DP_CHAN); in ipu_dmfc_init()
422 priv->bandwidth_per_slot = clk_get_rate(ipu_clk) * 4 / 8; in ipu_dmfc_init()
425 priv->bandwidth_per_slot / 1000000); in ipu_dmfc_init()
427 writel(0x202020f6, priv->base + DMFC_WR_CHAN_DEF); in ipu_dmfc_init()
428 writel(0x2020f6f6, priv->base + DMFC_DP_CHAN_DEF); in ipu_dmfc_init()
429 writel(0x00000003, priv->base + DMFC_GENERAL1); in ipu_dmfc_init()