]> rtime.felk.cvut.cz Git - zynq/linux.git/commitdiff
xilinx: arm: i2c: add support for graceful exit xilinx-14.5-build-trd
authorSuneel Garapati <suneel.garapati@xilinx.com>
Tue, 16 Apr 2013 06:42:11 +0000 (12:12 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 17 Apr 2013 06:34:59 +0000 (08:34 +0200)
Changes the blocking completion call to non-blocking
using the timeout variant of wait_for_completion.

Signed-off-by: Suneel Garapati <suneelg@xilinx.com>
Tested-by: Radhey Shyam Pandey <radheys@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/i2c/busses/i2c-xilinx_ps.c

index 1191a8bb89dc4275a70d91d753c4db80db9c2097..fe9122d2fbcdb7ef845f91b3924d460e7a8f60d7 100644 (file)
@@ -455,6 +455,7 @@ static int xi2cps_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
        struct xi2cps *id = adap->algo_data;
        unsigned int count, retries;
        unsigned long timeout;
+       int ret;
 
        /* Waiting for bus-ready. If bus not ready, it returns after timeout */
        timeout = jiffies + XI2CPS_TIMEOUT;
@@ -517,7 +518,13 @@ retry:
                        xi2cps_msend(id);
 
                /* Wait for the signal of completion */
-               wait_for_completion_interruptible(&id->xfer_done);
+               ret = wait_for_completion_interruptible_timeout(
+                                                       &id->xfer_done, HZ);
+               if (ret == 0) {
+                       dev_err(id->adap.dev.parent,
+                                "timeout waiting on completion\n");
+                       return -ETIMEDOUT;
+               }
                xi2cps_writereg(XI2CPS_IXR_ALL_INTR_MASK, XI2CPS_IDR_OFFSET);
 
                /* If it is bus arbitration error, try again */