>  Where are you calling it from?  Don't call it from irq context, which is the context that USB urbs are called from.

I am currently calling it from an irq context, in the fusb302_irq_work() function of the in-tree fusb302.c driver. My relevant patch is below.

 > Do you have a link to your driver code so it can be reviewed?

The relevant change is here: https://github.com/Abbotta4/linux/commit/fbfbb1db54d6bd1b10d56c9e86d08d0ecfe9abdc
You mentioned that this shouldn't be called in an irq context, but the unplug event is detected with an irq. Where should I be calling kernel_power_off() if not in the irq context? I think one way of doing this would be to set a value that a heartbeat function reads in the irq, and then the heartbeat function calls the shutdown, but this driver doesn't use a heartbeat. Where else would I handle this?

Thank you,
Drew