>From 03092c982d6cfbd253fd2ad596789430fa0a4944 Mon Sep 17 00:00:00 2001
From: Denis Robert <[email protected]>
Date: Wed, 20 Oct 2010 12:02:24 +0200
Subject: [PATCH 04/26] wl1271: propagate set_power's return value

Make it possible for the set power method to indicate a
success/failure return value. This is needed to support
more complex power on/off operations such as SDIO
power manipulations.

Signed-off-by: Ohad Ben-Cohen <[email protected]>
Acked-by: Luciano Coelho <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
Signed-off-by: Claude Brouat <[email protected]>
---
 drivers/net/wireless/wl12xx/wl1271.h      |    2 +-
 drivers/net/wireless/wl12xx/wl1271_io.h   |    9 ++++++---
 drivers/net/wireless/wl12xx/wl1271_main.c |    4 +++-
 drivers/net/wireless/wl12xx/wl1271_sdio.c |    2 +-
 drivers/net/wireless/wl12xx/wl1271_spi.c  |    4 +++-
 5 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/wl12xx/wl1271.h 
b/drivers/net/wireless/wl12xx/wl1271.h
index 6f1b6b5..a21cdb2 100644
--- a/drivers/net/wireless/wl12xx/wl1271.h
+++ b/drivers/net/wireless/wl12xx/wl1271.h
@@ -340,7 +340,7 @@ struct wl1271_if_operations {
                bool fixed);
     void (*reset)(struct wl1271 *wl);
     void (*init)(struct wl1271 *wl);
-    void (*power)(struct wl1271 *wl, bool enable);
+    int (*power)(struct wl1271 *wl, bool enable);
     struct device* (*dev)(struct wl1271 *wl);
     void (*enable_irq)(struct wl1271 *wl);
     void (*disable_irq)(struct wl1271 *wl);
diff --git a/drivers/net/wireless/wl12xx/wl1271_io.h 
b/drivers/net/wireless/wl12xx/wl1271_io.h
index bc806c7..c1f92e6 100644
--- a/drivers/net/wireless/wl12xx/wl1271_io.h
+++ b/drivers/net/wireless/wl12xx/wl1271_io.h
@@ -144,10 +144,13 @@ static inline void wl1271_power_off(struct wl1271 *wl)
     clear_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
 }

-static inline void wl1271_power_on(struct wl1271 *wl)
+static inline int wl1271_power_on(struct wl1271 *wl)
 {
-    wl->if_ops->power(wl, true);
-    set_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
+    int ret = wl->if_ops->power(wl, true);
+    if (ret == 0)
+          set_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
+
+    return ret;
 }


diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c 
b/drivers/net/wireless/wl12xx/wl1271_main.c
index b7d9137..6bd748e 100644
--- a/drivers/net/wireless/wl12xx/wl1271_main.c
+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
@@ -620,7 +620,9 @@ static int wl1271_chip_wakeup(struct wl1271 *wl)
     int ret = 0;

     msleep(WL1271_PRE_POWER_ON_SLEEP);
-    wl1271_power_on(wl);
+    ret = wl1271_power_on(wl);
+    if (ret < 0)
+          goto out;
     msleep(WL1271_POWER_ON_SLEEP);
     wl1271_io_reset(wl);
     wl1271_io_init(wl);
diff --git a/drivers/net/wireless/wl12xx/wl1271_sdio.c 
b/drivers/net/wireless/wl12xx/wl1271_sdio.c
index b3c3158..d0433e3 100644
--- a/drivers/net/wireless/wl12xx/wl1271_sdio.c
+++ b/drivers/net/wireless/wl12xx/wl1271_sdio.c
@@ -181,7 +181,7 @@ static int wl1271_sdio_power_off(struct wl1271 *wl)
     return 0;
 }

-static void wl1271_sdio_set_power(struct wl1271 *wl, bool enable)
+static int wl1271_sdio_set_power(struct wl1271 *wl, bool enable)
 {
     struct sdio_func *func = wl_to_func(wl);

diff --git a/drivers/net/wireless/wl12xx/wl1271_spi.c 
b/drivers/net/wireless/wl12xx/wl1271_spi.c
index 6fdb990..3688c3f 100644
--- a/drivers/net/wireless/wl12xx/wl1271_spi.c
+++ b/drivers/net/wireless/wl12xx/wl1271_spi.c
@@ -313,10 +313,12 @@ static irqreturn_t wl1271_irq(int irq, void *cookie)
     return IRQ_HANDLED;
 }

-static void wl1271_spi_set_power(struct wl1271 *wl, bool enable)
+static int wl1271_spi_set_power(struct wl1271 *wl, bool enable)
 {
     if (wl->set_power)
           wl->set_power(enable);
+
+    return 0;
 }

 static struct wl1271_if_operations spi_ops = {
--
1.6.3.3




Claude BROUAT
UMG/MIPE/WSIV  System Integrator
Office:    +33 (0)1 72 21 04 54
mailto: mailto:[email protected]

Intel Corp. SAS
134, av du Général Eisenhower
BP 73586
31100 TOULOUSE
France



---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris, 
92196 Meudon Cedex, France
Registration Number:  302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

Attachment: 0004-wl1271-propagate-set_power-s-return-value.patch
Description: 0004-wl1271-propagate-set_power-s-return-value.patch

_______________________________________________
Meego-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to