Lines Matching refs:mipi
131 struct tegra_mipi *mipi; member
136 static inline u32 tegra_mipi_readl(struct tegra_mipi *mipi, in tegra_mipi_readl() argument
139 return readl(mipi->regs + (offset << 2)); in tegra_mipi_readl()
142 static inline void tegra_mipi_writel(struct tegra_mipi *mipi, u32 value, in tegra_mipi_writel() argument
145 writel(value, mipi->regs + (offset << 2)); in tegra_mipi_writel()
148 static int tegra_mipi_power_up(struct tegra_mipi *mipi) in tegra_mipi_power_up() argument
153 err = clk_enable(mipi->clk); in tegra_mipi_power_up()
157 value = tegra_mipi_readl(mipi, MIPI_CAL_BIAS_PAD_CFG0); in tegra_mipi_power_up()
160 if (mipi->soc->needs_vclamp_ref) in tegra_mipi_power_up()
163 tegra_mipi_writel(mipi, value, MIPI_CAL_BIAS_PAD_CFG0); in tegra_mipi_power_up()
165 value = tegra_mipi_readl(mipi, MIPI_CAL_BIAS_PAD_CFG2); in tegra_mipi_power_up()
167 tegra_mipi_writel(mipi, value, MIPI_CAL_BIAS_PAD_CFG2); in tegra_mipi_power_up()
169 clk_disable(mipi->clk); in tegra_mipi_power_up()
174 static int tegra_mipi_power_down(struct tegra_mipi *mipi) in tegra_mipi_power_down() argument
179 err = clk_enable(mipi->clk); in tegra_mipi_power_down()
188 value = tegra_mipi_readl(mipi, MIPI_CAL_BIAS_PAD_CFG2); in tegra_mipi_power_down()
190 tegra_mipi_writel(mipi, value, MIPI_CAL_BIAS_PAD_CFG2); in tegra_mipi_power_down()
198 value = tegra_mipi_readl(mipi, MIPI_CAL_BIAS_PAD_CFG0); in tegra_mipi_power_down()
200 if (mipi->soc->needs_vclamp_ref) in tegra_mipi_power_down()
204 tegra_mipi_writel(mipi, value, MIPI_CAL_BIAS_PAD_CFG0); in tegra_mipi_power_down()
234 dev->mipi = platform_get_drvdata(dev->pdev); in tegra_mipi_request()
235 if (!dev->mipi) { in tegra_mipi_request()
245 mutex_lock(&dev->mipi->lock); in tegra_mipi_request()
247 if (dev->mipi->usage_count++ == 0) { in tegra_mipi_request()
248 err = tegra_mipi_power_up(dev->mipi); in tegra_mipi_request()
250 dev_err(dev->mipi->dev, in tegra_mipi_request()
257 mutex_unlock(&dev->mipi->lock); in tegra_mipi_request()
275 mutex_lock(&device->mipi->lock); in tegra_mipi_free()
277 if (--device->mipi->usage_count == 0) { in tegra_mipi_free()
278 err = tegra_mipi_power_down(device->mipi); in tegra_mipi_free()
284 dev_err(device->mipi->dev, in tegra_mipi_free()
290 mutex_unlock(&device->mipi->lock); in tegra_mipi_free()
297 static int tegra_mipi_wait(struct tegra_mipi *mipi) in tegra_mipi_wait() argument
303 value = tegra_mipi_readl(mipi, MIPI_CAL_STATUS); in tegra_mipi_wait()
316 const struct tegra_mipi_soc *soc = device->mipi->soc; in tegra_mipi_calibrate()
321 err = clk_enable(device->mipi->clk); in tegra_mipi_calibrate()
325 mutex_lock(&device->mipi->lock); in tegra_mipi_calibrate()
329 tegra_mipi_writel(device->mipi, value, MIPI_CAL_BIAS_PAD_CFG1); in tegra_mipi_calibrate()
331 value = tegra_mipi_readl(device->mipi, MIPI_CAL_BIAS_PAD_CFG2); in tegra_mipi_calibrate()
336 tegra_mipi_writel(device->mipi, value, MIPI_CAL_BIAS_PAD_CFG2); in tegra_mipi_calibrate()
351 tegra_mipi_writel(device->mipi, data, soc->pads[i].data); in tegra_mipi_calibrate()
354 tegra_mipi_writel(device->mipi, clk, soc->pads[i].clk); in tegra_mipi_calibrate()
357 value = tegra_mipi_readl(device->mipi, MIPI_CAL_CTRL); in tegra_mipi_calibrate()
368 tegra_mipi_writel(device->mipi, value, MIPI_CAL_CTRL); in tegra_mipi_calibrate()
371 value = tegra_mipi_readl(device->mipi, MIPI_CAL_STATUS); in tegra_mipi_calibrate()
372 tegra_mipi_writel(device->mipi, value, MIPI_CAL_STATUS); in tegra_mipi_calibrate()
374 value = tegra_mipi_readl(device->mipi, MIPI_CAL_CTRL); in tegra_mipi_calibrate()
376 tegra_mipi_writel(device->mipi, value, MIPI_CAL_CTRL); in tegra_mipi_calibrate()
378 err = tegra_mipi_wait(device->mipi); in tegra_mipi_calibrate()
380 mutex_unlock(&device->mipi->lock); in tegra_mipi_calibrate()
381 clk_disable(device->mipi->clk); in tegra_mipi_calibrate()
501 struct tegra_mipi *mipi; in tegra_mipi_probe() local
509 mipi = devm_kzalloc(&pdev->dev, sizeof(*mipi), GFP_KERNEL); in tegra_mipi_probe()
510 if (!mipi) in tegra_mipi_probe()
513 mipi->soc = match->data; in tegra_mipi_probe()
514 mipi->dev = &pdev->dev; in tegra_mipi_probe()
517 mipi->regs = devm_ioremap_resource(&pdev->dev, res); in tegra_mipi_probe()
518 if (IS_ERR(mipi->regs)) in tegra_mipi_probe()
519 return PTR_ERR(mipi->regs); in tegra_mipi_probe()
521 mutex_init(&mipi->lock); in tegra_mipi_probe()
523 mipi->clk = devm_clk_get(&pdev->dev, NULL); in tegra_mipi_probe()
524 if (IS_ERR(mipi->clk)) { in tegra_mipi_probe()
526 return PTR_ERR(mipi->clk); in tegra_mipi_probe()
529 err = clk_prepare(mipi->clk); in tegra_mipi_probe()
533 platform_set_drvdata(pdev, mipi); in tegra_mipi_probe()
540 struct tegra_mipi *mipi = platform_get_drvdata(pdev); in tegra_mipi_remove() local
542 clk_unprepare(mipi->clk); in tegra_mipi_remove()