Skip to content

Commit

Permalink
[media] v4l2: blackfin: select proper pinctrl state in ppi_set_params…
Browse files Browse the repository at this point in the history
… 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: Sonic Zhang <sonic.zhang@analog.com>
Acked-by: Scott Jiang <scott.jiang.linux@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
  • Loading branch information
Sonic Zhang authored and Mauro Carvalho Chehab committed Jul 26, 2014
1 parent 7ba3c21 commit 0a6824b
Showing 2 changed files with 18 additions and 0 deletions.
17 changes: 17 additions & 0 deletions drivers/media/platform/blackfin/ppi.c
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions include/media/blackfin/ppi.h
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit 0a6824b

Please sign in to comment.