Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64904b57 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

[media] omap3isp: DT support for clocks

parent 703e6f62
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -279,9 +279,21 @@ static const struct clk_init_data isp_xclk_init_data = {
	.num_parents = 1,
};

static struct clk *isp_xclk_src_get(struct of_phandle_args *clkspec, void *data)
{
	unsigned int idx = clkspec->args[0];
	struct isp_device *isp = data;

	if (idx >= ARRAY_SIZE(isp->xclks))
		return ERR_PTR(-ENOENT);

	return isp->xclks[idx].clk;
}

static int isp_xclk_init(struct isp_device *isp)
{
	struct isp_platform_data *pdata = isp->pdata;
	struct device_node *np = isp->dev->of_node;
	struct clk_init_data init;
	unsigned int i;

@@ -312,6 +324,12 @@ static int isp_xclk_init(struct isp_device *isp)
		if (IS_ERR(xclk->clk))
			return PTR_ERR(xclk->clk);

		/* When instantiated from DT we don't need to register clock
		 * aliases.
		 */
		if (np)
			continue;

		if (pdata->xclks[i].con_id == NULL &&
		    pdata->xclks[i].dev_id == NULL)
			continue;
@@ -327,13 +345,20 @@ static int isp_xclk_init(struct isp_device *isp)
		clkdev_add(xclk->lookup);
	}

	if (np)
		of_clk_add_provider(np, isp_xclk_src_get, isp);

	return 0;
}

static void isp_xclk_cleanup(struct isp_device *isp)
{
	struct device_node *np = isp->dev->of_node;
	unsigned int i;

	if (np)
		of_clk_del_provider(np);

	for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
		struct isp_xclk *xclk = &isp->xclks[i];