pEnd->dma ? "dma, " : "",
pEnd->wPacketSize);
- pThis->status |= MUSB_VBUS_STATUS_CHG;
- schedule_work(&pThis->irq_work);
+ sysfs_notify(&pThis->controller->kobj, NULL, "cable");
fail:
spin_unlock_irqrestore(&pThis->Lock, flags);
/* abort all pending DMA and requests */
nuke(pEnd, -ESHUTDOWN);
- pThis->status |= MUSB_VBUS_STATUS_CHG; /* FIXME not for ep_disable!! */
- schedule_work(&pThis->irq_work);
+ sysfs_notify(&pThis->controller->kobj, NULL, "cable");
spin_unlock_irqrestore(&(pThis->Lock), flags);
MGC_END0_STAGE_ACKWAIT, /* after zlp, before statusin */
} __attribute__ ((packed));
-/* driver and cable VBUS status states for musb_irq_work */
-#define MUSB_VBUS_STATUS_CHG (1 << 0)
-
/* failure codes */
#define MUSB_ERR_WAITING 1
#define MUSB_ERR_VBUS -1
spinlock_t Lock;
struct clk *clock;
irqreturn_t (*isr)(int, void *, struct pt_regs *);
- struct work_struct irq_work;
#ifdef CONFIG_USB_MUSB_HDRC_HCD
u8 board_mode; /* enum musb_mode */
int (*board_set_power)(int state);
- u8 status; /* status change flags for musb_irq_work */
-
s8 bFailCode; /* one of MUSB_ERR_* failure code */
/* active means connected and not suspended */
otg_input_changed(pThis, devctl, TRUE, FALSE,
(power & MGC_M_POWER_SUSPENDM)
? TRUE : FALSE);
+
+ sysfs_notify(&pThis->controller->kobj, NULL, "cable");
}
handled = IRQ_HANDLED;
/* REVISIT all OTG state machine transitions */
otg_input_changed_X(pThis, FALSE, FALSE);
+
+ sysfs_notify(&pThis->controller->kobj, NULL, "cable");
}
if (bIntrUSB & MGC_M_INTR_SUSPEND) {
#endif
-static void musb_irq_work(void *data)
-{
- struct musb *musb = (struct musb *)data;
- unsigned long flags;
- u8 event = 0;
- spin_lock_irqsave(&musb->Lock, flags);
- if (musb->status & MUSB_VBUS_STATUS_CHG) {
- musb->status &= ~MUSB_VBUS_STATUS_CHG;
- event = 1;
- }
- spin_unlock_irqrestore(&musb->Lock, flags);
-
-#ifdef CONFIG_SYSFS
- if (event)
- sysfs_notify(&musb->controller->kobj, NULL, "cable");
-#endif
-}
-
/* --------------------------------------------------------------------------
* Init support
*/
return status;
}
- INIT_WORK(&pThis->irq_work, musb_irq_work, pThis);
-
#ifdef CONFIG_SYSFS
device_create_file(dev, &dev_attr_mode);
device_create_file(dev, &dev_attr_cable);
}
DBG(1, "%s\n", musb->is_active
? "b_peripheral" : "b_idle");
- musb->status |= MUSB_VBUS_STATUS_CHG;
- schedule_work(&musb->irq_work);
+
+ sysfs_notify(&musb->controller->kobj, NULL, "cable");
}
}
musb_writel(base, TUSB_PRCM_WAKEUP_CLEAR, reg);
if (reg & ~TUSB_PRCM_WNORCS) {
- schedule_work(&musb->irq_work);
musb->is_active = 1;
+ sysfs_notify(&musb->controller->kobj, NULL, "cable");
}
DBG(3, "wake %sactive %02x\n",
musb->is_active ? "" : "in", reg);