usb: chipidea: using one inline function to cover queue work operations
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>
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 95b4dd7..619d13e 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -425,8 +425,7 @@
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 @@
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;
}
diff --git a/drivers/usb/chipidea/otg.h b/drivers/usb/chipidea/otg.h
index 7349267..9ecb598 100644
--- a/drivers/usb/chipidea/otg.h
+++ b/drivers/usb/chipidea/otg.h
@@ -17,5 +17,10 @@
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 */
diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
index 8d4c33d..caaabc5 100644
--- a/drivers/usb/chipidea/otg_fsm.c
+++ b/drivers/usb/chipidea/otg_fsm.c
@@ -84,8 +84,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
* 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 @@
* 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 @@
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 @@
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 @@
/* 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 @@
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 @@
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)