This patch adds the possibility to have a spi device without a cs.

For example, the dts file should look something like this:

spi-controller {
       gpios = <&pio1 1 0      /* cs0 */
                0              /* cs1, no GPIO */
                &pio2 2 0>;    /* cs2 */



Signed-off-by: Rini van Zetten <r...@arvoo.nl>
---
Changes :
        patch against 2.6.30-rc8-mm1

--- drivers/spi/spi_mpc8xxx.c.org       2009-06-12 10:45:21.000000000 +0200
+++ drivers/spi/spi_mpc8xxx.c   2009-06-12 10:54:48.000000000 +0200
@@ -666,9 +666,10 @@ static void mpc8xxx_spi_cs_control(struc
        struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
        u16 cs = spi->chip_select;
        int gpio = pinfo->gpios[cs];
-       bool alow = pinfo->alow_flags[cs];
-
-       gpio_set_value(gpio, on ^ alow);
+       if (gpio != -EEXIST) {
+               bool alow = pinfo->alow_flags[cs];
+               gpio_set_value(gpio, on ^ alow);
+       }
 }

 static int of_mpc8xxx_spi_get_chipselects(struct device *dev)
@@ -707,27 +708,29 @@ static int of_mpc8xxx_spi_get_chipselect
                enum of_gpio_flags flags;

                gpio = of_get_gpio_flags(np, i, &flags);
-               if (!gpio_is_valid(gpio)) {
+               if (gpio_is_valid(gpio)) {
+                       ret = gpio_request(gpio, dev_name(dev));
+                       if (ret) {
+                               dev_err(dev, "can't request gpio #%d: %d\n", i, 
ret);
+                               goto err_loop;
+                       }
+
+                       pinfo->gpios[i] = gpio;
+                       pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW;
+
+                       ret = gpio_direction_output(pinfo->gpios[i],
+                                       pinfo->alow_flags[i]);
+                       if (ret) {
+                               dev_err(dev, "can't set output direction for gpio 
"
+                                               "#%d: %d\n", i, ret);
+                               goto err_loop;
+                       }
+               } else if (gpio == -EEXIST) {
+                       pinfo->gpios[i] = -EEXIST;
+               } else {
                        dev_err(dev, "invalid gpio #%d: %d\n", i, gpio);
                        goto err_loop;
                }
-
-               ret = gpio_request(gpio, dev_name(dev));
-               if (ret) {
-                       dev_err(dev, "can't request gpio #%d: %d\n", i, ret);
-                       goto err_loop;
-               }
-
-               pinfo->gpios[i] = gpio;
-               pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW;
-
-               ret = gpio_direction_output(pinfo->gpios[i],
-                                           pinfo->alow_flags[i]);
-               if (ret) {
-                       dev_err(dev, "can't set output direction for gpio "
-                               "#%d: %d\n", i, ret);
-                       goto err_loop;
-               }
        }

        pdata->max_chipselect = ngpios;
--


--
Rini van Zetten
Senior Software Engineer

-------------------------
ARVOO Engineering B.V.
Tasveld 13
3417 XS Montfoort
The Netherlands

E-mail : <mailto:r...@arvoo.com> Rini van Zetten

Web : www.arvoo.com



_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to