usb: chipidea: using one inline function to cover queue work operations
authorPeter Chen <peter.chen@freescale.com>
Fri, 23 May 2014 00:12:49 +0000 (08:12 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 May 2014 02:35:02 +0000 (11:35 +0900)
The otg queue work include operations: one is disable interrupt,
another one is call kernel queue work API. Many codes do this
operation, using one inline function to instead of them.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/chipidea/core.c
drivers/usb/chipidea/otg.h
drivers/usb/chipidea/otg_fsm.c

index 95b4dd7317726a454e37ad4c855815f9af2276e9..619d13e29995dc9ac5010081068528b0f4932d91 100644 (file)
@@ -425,8 +425,7 @@ static irqreturn_t ci_irq(int irq, void *data)
                ci->id_event = true;
                /* Clear ID change irq status */
                hw_write_otgsc(ci, OTGSC_IDIS, OTGSC_IDIS);
-               disable_irq_nosync(ci->irq);
-               queue_work(ci->wq, &ci->work);
+               ci_otg_queue_work(ci);
                return IRQ_HANDLED;
        }
 
@@ -438,8 +437,7 @@ static irqreturn_t ci_irq(int irq, void *data)
                ci->b_sess_valid_event = true;
                /* Clear BSV irq */
                hw_write_otgsc(ci, OTGSC_BSVIS, OTGSC_BSVIS);
-               disable_irq_nosync(ci->irq);
-               queue_work(ci->wq, &ci->work);
+               ci_otg_queue_work(ci);
                return IRQ_HANDLED;
        }
 
index 7349267541130c9388b67466e0fe15bdf7595bec..9ecb598e48f0414ad1b559b76b7d3dd14c8d11d1 100644 (file)
@@ -17,5 +17,10 @@ int ci_hdrc_otg_init(struct ci_hdrc *ci);
 void ci_hdrc_otg_destroy(struct ci_hdrc *ci);
 enum ci_role ci_otg_role(struct ci_hdrc *ci);
 void ci_handle_vbus_change(struct ci_hdrc *ci);
+static inline void ci_otg_queue_work(struct ci_hdrc *ci)
+{
+       disable_irq_nosync(ci->irq);
+       queue_work(ci->wq, &ci->work);
+}
 
 #endif /* __DRIVERS_USB_CHIPIDEA_OTG_H */
index 8d4c33dea12ef3dc02e2ee69c4f5574d920fa4ed..caaabc58021efeff0918d11e26bbc6a6d7036a3e 100644 (file)
@@ -84,8 +84,7 @@ set_a_bus_req(struct device *dev, struct device_attribute *attr,
                ci->fsm.a_bus_req = 1;
        }
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
        mutex_unlock(&ci->fsm.lock);
 
        return count;
@@ -125,8 +124,7 @@ set_a_bus_drop(struct device *dev, struct device_attribute *attr,
                ci->fsm.a_bus_req = 0;
        }
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
        mutex_unlock(&ci->fsm.lock);
 
        return count;
@@ -165,8 +163,7 @@ set_b_bus_req(struct device *dev, struct device_attribute *attr,
        else if (buf[0] == '1')
                ci->fsm.b_bus_req = 1;
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
        mutex_unlock(&ci->fsm.lock);
 
        return count;
@@ -186,8 +183,7 @@ set_a_clr_err(struct device *dev, struct device_attribute *attr,
        if (buf[0] == '1')
                ci->fsm.a_clr_err = 1;
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
        mutex_unlock(&ci->fsm.lock);
 
        return count;
@@ -297,8 +293,7 @@ static void set_tmout_and_fsm(void *ptr, unsigned long indicator)
 
        set_tmout(ci, indicator);
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
 }
 
 static void a_wait_vfall_tmout_func(void *ptr, unsigned long indicator)
@@ -312,8 +307,7 @@ static void a_wait_vfall_tmout_func(void *ptr, unsigned long indicator)
        hw_write_otgsc(ci, OTGSC_DPIS, OTGSC_DPIS);
        /* Enable data pulse irq */
        hw_write_otgsc(ci, OTGSC_DPIE, OTGSC_DPIE);
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
 }
 
 static void b_ase0_brst_tmout_func(void *ptr, unsigned long indicator)
@@ -324,8 +318,7 @@ static void b_ase0_brst_tmout_func(void *ptr, unsigned long indicator)
        if (!hw_read_otgsc(ci, OTGSC_BSV))
                ci->fsm.b_sess_vld = 0;
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
 }
 
 static void b_ssend_srp_tmout_func(void *ptr, unsigned long indicator)
@@ -335,10 +328,8 @@ static void b_ssend_srp_tmout_func(void *ptr, unsigned long indicator)
        set_tmout(ci, indicator);
 
        /* only vbus fall below B_sess_vld in b_idle state */
-       if (ci->transceiver->state == OTG_STATE_B_IDLE) {
-               disable_irq_nosync(ci->irq);
-               queue_work(ci->wq, &ci->work);
-       }
+       if (ci->transceiver->state == OTG_STATE_B_IDLE)
+               ci_otg_queue_work(ci);
 }
 
 static void b_sess_vld_tmout_func(void *ptr, unsigned long indicator)
@@ -349,8 +340,7 @@ static void b_sess_vld_tmout_func(void *ptr, unsigned long indicator)
        if (!(hw_read_otgsc(ci, OTGSC_BSV))) {
                ci->fsm.b_sess_vld = 0;
                ci_otg_add_timer(ci, B_SSEND_SRP);
-               disable_irq_nosync(ci->irq);
-               queue_work(ci->wq, &ci->work);
+               ci_otg_queue_work(ci);
        }
 }
 
@@ -365,8 +355,7 @@ static void b_data_pulse_end(void *ptr, unsigned long indicator)
 
        hw_write_otgsc(ci, OTGSC_HABA, 0);
 
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
 }
 
 /* Initialize timers */
@@ -607,10 +596,8 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
                         * a_idle to a_wait_vrise when power up
                         */
                        if ((ci->fsm.id) || (ci->id_event) ||
-                                               (ci->fsm.power_up)) {
-                               disable_irq_nosync(ci->irq);
-                               queue_work(ci->wq, &ci->work);
-                       }
+                                               (ci->fsm.power_up))
+                               ci_otg_queue_work(ci);
                        if (ci->id_event)
                                ci->id_event = false;
                } else if (ci->transceiver->state == OTG_STATE_B_IDLE) {
@@ -620,8 +607,7 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
                                 * Further transite to b_periphearl state
                                 * when register gadget driver with vbus on
                                 */
-                               disable_irq_nosync(ci->irq);
-                               queue_work(ci->wq, &ci->work);
+                               ci_otg_queue_work(ci);
                        }
                }
        }
@@ -646,22 +632,19 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
                if (port_conn) {
                        fsm->b_conn = 1;
                        fsm->a_bus_req = 1;
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                }
                break;
        case OTG_STATE_B_IDLE:
                if (otg_bsess_vld && (intr_sts & USBi_PCI) && port_conn) {
                        fsm->b_sess_vld = 1;
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                }
                break;
        case OTG_STATE_B_PERIPHERAL:
                if ((intr_sts & USBi_SLI) && port_conn && otg_bsess_vld) {
                        fsm->a_bus_suspend = 1;
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                } else if (intr_sts & USBi_PCI) {
                        if (fsm->a_bus_suspend == 1)
                                fsm->a_bus_suspend = 0;
@@ -671,8 +654,7 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
                if ((intr_sts & USBi_PCI) && !port_conn) {
                        fsm->a_conn = 0;
                        fsm->b_bus_req = 0;
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                        ci_otg_add_timer(ci, B_SESS_VLD);
                }
                break;
@@ -706,22 +688,19 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
                                /* A device to be peripheral mode */
                                ci->gadget.is_a_peripheral = 1;
                        }
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                }
                break;
        case OTG_STATE_A_HOST:
                if ((intr_sts & USBi_PCI) && !port_conn) {
                        fsm->b_conn = 0;
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                }
                break;
        case OTG_STATE_B_WAIT_ACON:
                if ((intr_sts & USBi_PCI) && port_conn) {
                        fsm->a_conn = 1;
-                       disable_irq_nosync(ci->irq);
-                       queue_work(ci->wq, &ci->work);
+                       ci_otg_queue_work(ci);
                }
                break;
        default:
@@ -782,8 +761,7 @@ irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci)
                                fsm->b_conn = 0;
                        }
                }
-               disable_irq_nosync(ci->irq);
-               queue_work(ci->wq, &ci->work);
+               ci_otg_queue_work(ci);
                return IRQ_HANDLED;
        }
 
@@ -794,8 +772,7 @@ irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci)
 
 void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
 {
-       disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       ci_otg_queue_work(ci);
 }
 
 int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)