This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/media_tree.git tree:

Subject: [media] v4l2: blackfin: select proper pinctrl state in ppi_set_params 
if CONFIG_PINCTRL is enabled
Author:  Sonic Zhang <[email protected]>
Date:    Wed Jul 23 06:57:16 2014 -0300

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 <[email protected]>
Acked-by: Scott Jiang <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/platform/blackfin/ppi.c |   17 +++++++++++++++++
 include/media/blackfin/ppi.h          |    1 +
 2 files changed, 18 insertions(+), 0 deletions(-)

---

http://git.linuxtv.org/media_tree.git?a=commitdiff;h=0a6824bc10de58dac8beca4ad6744753f1cf9a6f

diff --git a/drivers/media/platform/blackfin/ppi.c 
b/drivers/media/platform/blackfin/ppi.c
index 90c4a93..cff63e5 100644
--- a/drivers/media/platform/blackfin/ppi.c
+++ b/drivers/media/platform/blackfin/ppi.c
@@ -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;
diff --git a/include/media/blackfin/ppi.h b/include/media/blackfin/ppi.h
index 61a283f..4900bae 100644
--- a/include/media/blackfin/ppi.h
+++ b/include/media/blackfin/ppi.h
@@ -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;

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to