Lines Matching refs:prg
97 struct ipu_prg *prg; in ipu_prg_lookup_by_phandle() local
100 list_for_each_entry(prg, &ipu_prg_list, list) { in ipu_prg_lookup_by_phandle()
101 if (prg_node == prg->dev->of_node) { in ipu_prg_lookup_by_phandle()
103 device_link_add(dev, prg->dev, in ipu_prg_lookup_by_phandle()
105 prg->id = ipu_id; in ipu_prg_lookup_by_phandle()
107 return prg; in ipu_prg_lookup_by_phandle()
153 struct ipu_prg *prg = ipu->prg_priv; in ipu_prg_enable() local
155 if (!prg) in ipu_prg_enable()
158 return pm_runtime_get_sync(prg->dev); in ipu_prg_enable()
164 struct ipu_prg *prg = ipu->prg_priv; in ipu_prg_disable() local
166 if (!prg) in ipu_prg_disable()
169 pm_runtime_put(prg->dev); in ipu_prg_disable()
197 static int ipu_prg_get_pre(struct ipu_prg *prg, int prg_chan) in ipu_prg_get_pre() argument
203 ret = ipu_pre_get(prg->pres[0]); in ipu_prg_get_pre()
206 prg->chan[prg_chan].used_pre = 0; in ipu_prg_get_pre()
211 ret = ipu_pre_get(prg->pres[i]); in ipu_prg_get_pre()
216 prg->chan[prg_chan].used_pre = i; in ipu_prg_get_pre()
220 mux = (prg->id << 1) | (prg_chan - 1); in ipu_prg_get_pre()
221 regmap_update_bits(prg->iomuxc_gpr, IOMUXC_GPR5, in ipu_prg_get_pre()
226 regmap_read(prg->iomuxc_gpr, IOMUXC_GPR5, &val); in ipu_prg_get_pre()
228 regmap_update_bits(prg->iomuxc_gpr, IOMUXC_GPR5, in ipu_prg_get_pre()
238 dev_err(prg->dev, "could not get PRE for PRG chan %d", prg_chan); in ipu_prg_get_pre()
242 static void ipu_prg_put_pre(struct ipu_prg *prg, int prg_chan) in ipu_prg_put_pre() argument
244 struct ipu_prg_channel *chan = &prg->chan[prg_chan]; in ipu_prg_put_pre()
246 ipu_pre_put(prg->pres[chan->used_pre]); in ipu_prg_put_pre()
253 struct ipu_prg *prg = ipu_chan->ipu->prg_priv; in ipu_prg_channel_disable() local
260 chan = &prg->chan[prg_chan]; in ipu_prg_channel_disable()
264 pm_runtime_get_sync(prg->dev); in ipu_prg_channel_disable()
266 val = readl(prg->regs + IPU_PRG_CTL); in ipu_prg_channel_disable()
268 writel(val, prg->regs + IPU_PRG_CTL); in ipu_prg_channel_disable()
271 writel(val, prg->regs + IPU_PRG_REG_UPDATE); in ipu_prg_channel_disable()
273 pm_runtime_put(prg->dev); in ipu_prg_channel_disable()
275 ipu_prg_put_pre(prg, prg_chan); in ipu_prg_channel_disable()
287 struct ipu_prg *prg = ipu_chan->ipu->prg_priv; in ipu_prg_channel_configure() local
295 chan = &prg->chan[prg_chan]; in ipu_prg_channel_configure()
298 ipu_pre_update(prg->pres[chan->used_pre], *eba); in ipu_prg_channel_configure()
302 ret = ipu_prg_get_pre(prg, prg_chan); in ipu_prg_channel_configure()
306 ipu_pre_configure(prg->pres[chan->used_pre], in ipu_prg_channel_configure()
310 pm_runtime_get_sync(prg->dev); in ipu_prg_channel_configure()
313 writel(val, prg->regs + IPU_PRG_STRIDE(prg_chan)); in ipu_prg_channel_configure()
319 writel(val, prg->regs + IPU_PRG_HEIGHT(prg_chan)); in ipu_prg_channel_configure()
321 val = ipu_pre_get_baddr(prg->pres[chan->used_pre]); in ipu_prg_channel_configure()
323 writel(val, prg->regs + IPU_PRG_BADDR(prg_chan)); in ipu_prg_channel_configure()
325 val = readl(prg->regs + IPU_PRG_CTL); in ipu_prg_channel_configure()
332 writel(val, prg->regs + IPU_PRG_CTL); in ipu_prg_channel_configure()
335 writel(val, prg->regs + IPU_PRG_REG_UPDATE); in ipu_prg_channel_configure()
338 readl_poll_timeout(prg->regs + IPU_PRG_STATUS, val, in ipu_prg_channel_configure()
343 pm_runtime_put(prg->dev); in ipu_prg_channel_configure()
354 struct ipu_prg *prg; in ipu_prg_probe() local
358 prg = devm_kzalloc(dev, sizeof(*prg), GFP_KERNEL); in ipu_prg_probe()
359 if (!prg) in ipu_prg_probe()
363 prg->regs = devm_ioremap_resource(&pdev->dev, res); in ipu_prg_probe()
364 if (IS_ERR(prg->regs)) in ipu_prg_probe()
365 return PTR_ERR(prg->regs); in ipu_prg_probe()
368 prg->clk_ipg = devm_clk_get(dev, "ipg"); in ipu_prg_probe()
369 if (IS_ERR(prg->clk_ipg)) in ipu_prg_probe()
370 return PTR_ERR(prg->clk_ipg); in ipu_prg_probe()
372 prg->clk_axi = devm_clk_get(dev, "axi"); in ipu_prg_probe()
373 if (IS_ERR(prg->clk_axi)) in ipu_prg_probe()
374 return PTR_ERR(prg->clk_axi); in ipu_prg_probe()
376 prg->iomuxc_gpr = in ipu_prg_probe()
378 if (IS_ERR(prg->iomuxc_gpr)) in ipu_prg_probe()
379 return PTR_ERR(prg->iomuxc_gpr); in ipu_prg_probe()
382 prg->pres[i] = ipu_pre_lookup_by_phandle(dev, "fsl,pres", i); in ipu_prg_probe()
383 if (!prg->pres[i]) in ipu_prg_probe()
387 ret = clk_prepare_enable(prg->clk_ipg); in ipu_prg_probe()
391 ret = clk_prepare_enable(prg->clk_axi); in ipu_prg_probe()
393 clk_disable_unprepare(prg->clk_ipg); in ipu_prg_probe()
398 val = readl(prg->regs + IPU_PRG_CTL); in ipu_prg_probe()
400 writel(val, prg->regs + IPU_PRG_CTL); in ipu_prg_probe()
403 writel(0xffffffff, prg->regs + IPU_PRG_THD); in ipu_prg_probe()
408 prg->dev = dev; in ipu_prg_probe()
409 platform_set_drvdata(pdev, prg); in ipu_prg_probe()
411 list_add(&prg->list, &ipu_prg_list); in ipu_prg_probe()
419 struct ipu_prg *prg = platform_get_drvdata(pdev); in ipu_prg_remove() local
422 list_del(&prg->list); in ipu_prg_remove()
431 struct ipu_prg *prg = dev_get_drvdata(dev); in prg_suspend() local
433 clk_disable_unprepare(prg->clk_axi); in prg_suspend()
434 clk_disable_unprepare(prg->clk_ipg); in prg_suspend()
441 struct ipu_prg *prg = dev_get_drvdata(dev); in prg_resume() local
444 ret = clk_prepare_enable(prg->clk_ipg); in prg_resume()
448 ret = clk_prepare_enable(prg->clk_axi); in prg_resume()
450 clk_disable_unprepare(prg->clk_ipg); in prg_resume()