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

Commit 0a6824bc authored by Sonic Zhang's avatar Sonic Zhang Committed by Mauro Carvalho Chehab
Browse files

[media] v4l2: blackfin: select proper pinctrl state in ppi_set_params if CONFIG_PINCTRL is enabled



Multiple pinctrl states are defined for 8, 16 and 24 data pin groups in PPI peripheral.
The driver should select correct group before set up further PPI parameters.

Signed-off-by: default avatarSonic Zhang <sonic.zhang@analog.com>
Acked-by: default avatarScott Jiang <scott.jiang.linux@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 7ba3c21c
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -206,6 +206,20 @@ static int ppi_set_params(struct ppi_if *ppi, struct ppi_params *params)
	int dma_config, bytes_per_line;
	int hcount, hdelay, samples_per_line;

#ifdef CONFIG_PINCTRL
	static const char * const pin_state[] = {"8bit", "16bit", "24bit"};
	struct pinctrl *pctrl;
	struct pinctrl_state *pstate;

	if (params->dlen > 24 || params->dlen <= 0)
		return -EINVAL;
	pctrl = devm_pinctrl_get(ppi->dev);
	pstate = pinctrl_lookup_state(pctrl,
				      pin_state[(params->dlen + 7) / 8 - 1]);
	if (pinctrl_select_state(pctrl, pstate))
		return -EINVAL;
#endif

	bytes_per_line = params->width * params->bpp / 8;
	/* convert parameters unit from pixels to samples */
	hcount = params->width * params->bpp / params->dlen;
@@ -316,10 +330,12 @@ struct ppi_if *ppi_create_instance(struct platform_device *pdev,
	if (!info || !info->pin_req)
		return NULL;

#ifndef CONFIG_PINCTRL
	if (peripheral_request_list(info->pin_req, KBUILD_MODNAME)) {
		dev_err(&pdev->dev, "request peripheral failed\n");
		return NULL;
	}
#endif

	ppi = kzalloc(sizeof(*ppi), GFP_KERNEL);
	if (!ppi) {
@@ -329,6 +345,7 @@ struct ppi_if *ppi_create_instance(struct platform_device *pdev,
	}
	ppi->ops = &ppi_ops;
	ppi->info = info;
	ppi->dev = &pdev->dev;

	pr_info("ppi probe success\n");
	return ppi;
+1 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ struct ppi_info {
};

struct ppi_if {
	struct device *dev;
	unsigned long ppi_control;
	const struct ppi_ops *ops;
	const struct ppi_info *info;