Skip to content

Commit

Permalink
usb: otg: notifier: switch to atomic notifier
Browse files Browse the repository at this point in the history
most of our notifications, will be called from IRQ
context, so an atomic notifier suits the job better.

Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Felipe Balbi committed Feb 18, 2011
1 parent 002eda1 commit cccad6d
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 14 deletions.
6 changes: 3 additions & 3 deletions drivers/usb/otg/ab8500-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ static int ab8500_usb_link_status_update(struct ab8500_usb *ab)
break;
}

blocking_notifier_call_chain(&ab->otg.notifier, event, v);
atomic_notifier_call_chain(&ab->otg.notifier, event, v);

return 0;
}
Expand Down Expand Up @@ -281,7 +281,7 @@ static int ab8500_usb_set_power(struct otg_transceiver *otg, unsigned mA)
ab->vbus_draw = mA;

if (mA)
blocking_notifier_call_chain(&ab->otg.notifier,
atomic_notifier_call_chain(&ab->otg.notifier,
USB_EVENT_ENUMERATED, ab->otg.gadget);
return 0;
}
Expand Down Expand Up @@ -500,7 +500,7 @@ static int __devinit ab8500_usb_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, ab);

BLOCKING_INIT_NOTIFIER_HEAD(&ab->otg.notifier);
ATOMIC_INIT_NOTIFIER_HEAD(&ab->otg.notifier);

/* v1: Wait for link status to become stable.
* all: Updates form set_host and set_peripheral as they are atomic.
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/otg/nop-usb-xceiv.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ static int __devinit nop_usb_xceiv_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, nop);

BLOCKING_INIT_NOTIFIER_HEAD(&nop->otg.notifier);
ATOMIC_INIT_NOTIFIER_HEAD(&nop->otg.notifier);

return 0;
exit:
Expand Down
6 changes: 3 additions & 3 deletions drivers/usb/otg/twl4030-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ static irqreturn_t twl4030_usb_irq(int irq, void *_twl)
else
twl4030_phy_resume(twl);

blocking_notifier_call_chain(&twl->otg.notifier, status,
atomic_notifier_call_chain(&twl->otg.notifier, status,
twl->otg.gadget);
}
sysfs_notify(&twl->dev->kobj, NULL, "vbus");
Expand All @@ -534,7 +534,7 @@ static void twl4030_usb_phy_init(struct twl4030_usb *twl)
twl->asleep = 0;
}

blocking_notifier_call_chain(&twl->otg.notifier, status,
atomic_notifier_call_chain(&twl->otg.notifier, status,
twl->otg.gadget);
}
sysfs_notify(&twl->dev->kobj, NULL, "vbus");
Expand Down Expand Up @@ -623,7 +623,7 @@ static int __devinit twl4030_usb_probe(struct platform_device *pdev)
if (device_create_file(&pdev->dev, &dev_attr_vbus))
dev_warn(&pdev->dev, "could not create sysfs file\n");

BLOCKING_INIT_NOTIFIER_HEAD(&twl->otg.notifier);
ATOMIC_INIT_NOTIFIER_HEAD(&twl->otg.notifier);

/* Our job is to use irqs and status from the power module
* to keep the transceiver disabled when nothing's connected.
Expand Down
8 changes: 4 additions & 4 deletions drivers/usb/otg/twl6030-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,13 +263,13 @@ static irqreturn_t twl6030_usb_irq(int irq, void *_twl)
twl->otg.state = OTG_STATE_B_IDLE;
twl->linkstat = status;
twl->otg.last_event = status;
blocking_notifier_call_chain(&twl->otg.notifier,
atomic_notifier_call_chain(&twl->otg.notifier,
status, twl->otg.gadget);
} else {
status = USB_EVENT_NONE;
twl->linkstat = status;
twl->otg.last_event = status;
blocking_notifier_call_chain(&twl->otg.notifier,
atomic_notifier_call_chain(&twl->otg.notifier,
status, twl->otg.gadget);
if (twl->asleep) {
regulator_disable(twl->usb3v3);
Expand Down Expand Up @@ -302,7 +302,7 @@ static irqreturn_t twl6030_usbotg_irq(int irq, void *_twl)
twl->otg.state = OTG_STATE_A_IDLE;
twl->linkstat = status;
twl->otg.last_event = status;
blocking_notifier_call_chain(&twl->otg.notifier, status,
atomic_notifier_call_chain(&twl->otg.notifier, status,
twl->otg.gadget);
} else {
twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_EN_HI_CLR,
Expand Down Expand Up @@ -419,7 +419,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
if (device_create_file(&pdev->dev, &dev_attr_vbus))
dev_warn(&pdev->dev, "could not create sysfs file\n");

BLOCKING_INIT_NOTIFIER_HEAD(&twl->otg.notifier);
ATOMIC_INIT_NOTIFIER_HEAD(&twl->otg.notifier);

twl->irq_enabled = true;
status = request_threaded_irq(twl->irq1, NULL, twl6030_usbotg_irq,
Expand Down
6 changes: 3 additions & 3 deletions include/linux/usb/otg.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ struct otg_transceiver {
void __iomem *io_priv;

/* for notification of usb_xceiv_events */
struct blocking_notifier_head notifier;
struct atomic_notifier_head notifier;

/* to pass extra port status to the root hub */
u16 port_status;
Expand Down Expand Up @@ -235,13 +235,13 @@ otg_start_srp(struct otg_transceiver *otg)
static inline int
otg_register_notifier(struct otg_transceiver *otg, struct notifier_block *nb)
{
return blocking_notifier_chain_register(&otg->notifier, nb);
return atomic_notifier_chain_register(&otg->notifier, nb);
}

static inline void
otg_unregister_notifier(struct otg_transceiver *otg, struct notifier_block *nb)
{
blocking_notifier_chain_unregister(&otg->notifier, nb);
atomic_notifier_chain_unregister(&otg->notifier, nb);
}

/* for OTG controller drivers (and maybe other stuff) */
Expand Down

0 comments on commit cccad6d

Please sign in to comment.