HSI: omap_ssi_port: replace wkin_cken with atomic bitmap operations
[sfrench/cifs-2.6.git] / drivers / hsi / controllers / omap_ssi_port.c
index 9001b06312c3376753e70f2deca76a9be07053a8..0d3452393670ea7abdb248560cdb77299d5857b4 100644 (file)
@@ -751,10 +751,8 @@ static int ssi_release(struct hsi_client *cl)
                 * Drop the clock reference for the incoming wake line
                 * if it is still kept high by the other side.
                 */
-               if (omap_port->wkin_cken) {
+               if (test_and_clear_bit(SSI_WAKE_EN, &omap_port->flags))
                        pm_runtime_put_sync(omap_port->pdev);
-                       omap_port->wkin_cken = 0;
-               }
                pm_runtime_get_sync(omap_port->pdev);
                /* Stop any SSI TX/RX without a client */
                ssi_set_port_mode(omap_port, SSI_MODE_SLEEP);
@@ -981,12 +979,8 @@ static irqreturn_t ssi_wake_thread(int irq __maybe_unused, void *ssi_port)
                 * This workaround will avoid breaking the clock reference
                 * count when such a situation ocurrs.
                 */
-               spin_lock(&omap_port->lock);
-               if (!omap_port->wkin_cken) {
-                       omap_port->wkin_cken = 1;
+               if (!test_and_set_bit(SSI_WAKE_EN, &omap_port->flags))
                        pm_runtime_get_sync(omap_port->pdev);
-               }
-               spin_unlock(&omap_port->lock);
                dev_dbg(&ssi->device, "Wake in high\n");
                if (omap_port->wktest) { /* FIXME: HACK ! To be removed */
                        writel(SSI_WAKE(0),
@@ -1000,12 +994,8 @@ static irqreturn_t ssi_wake_thread(int irq __maybe_unused, void *ssi_port)
                                omap_ssi->sys + SSI_CLEAR_WAKE_REG(port->num));
                }
                hsi_event(port, HSI_EVENT_STOP_RX);
-               spin_lock(&omap_port->lock);
-               if (omap_port->wkin_cken) {
+               if (test_and_clear_bit(SSI_WAKE_EN, &omap_port->flags))
                        pm_runtime_put_sync(omap_port->pdev);
-                       omap_port->wkin_cken = 0;
-               }
-               spin_unlock(&omap_port->lock);
        }
 
        return IRQ_HANDLED;