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 <[email protected]>
---
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:[email protected]> Rini van Zetten

Web : www.arvoo.com




------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
spi-devel-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to