done_state, 1000);
}
+static void xhci_dbc_set_state(struct xhci_dbc *dbc, enum dbc_state new_state)
+{
+ dbc->state_timestamp = jiffies;
+ dbc->state = new_state;
+}
+
static int xhci_do_dbc_start(struct xhci_dbc *dbc)
{
int ret;
if (ret)
return ret;
- dbc->state = DS_ENABLED;
+ xhci_dbc_set_state(dbc, DS_ENABLED);
return 0;
}
spin_lock_irqsave(&dbc->lock, flags);
writel(0, &dbc->regs->control);
- dbc->state = DS_DISABLED;
+ xhci_dbc_set_state(dbc, DS_DISABLED);
spin_unlock_irqrestore(&dbc->lock, flags);
xhci_dbc_mem_cleanup(dbc);
case DS_ENABLED:
portsc = readl(&dbc->regs->portsc);
if (portsc & DBC_PORTSC_CONN_STATUS) {
- dbc->state = DS_CONNECTED;
+ xhci_dbc_set_state(dbc, DS_CONNECTED);
dev_info(dbc->dev, "DbC connected\n");
}
case DS_CONNECTED:
ctrl = readl(&dbc->regs->control);
if (ctrl & DBC_CTRL_DBC_RUN) {
- dbc->state = DS_CONFIGURED;
+ xhci_dbc_set_state(dbc, DS_CONFIGURED);
dev_info(dbc->dev, "DbC configured\n");
portsc = readl(&dbc->regs->portsc);
writel(portsc, &dbc->regs->portsc);
if (!(portsc & DBC_PORTSC_PORT_ENABLED) &&
!(portsc & DBC_PORTSC_CONN_STATUS)) {
dev_info(dbc->dev, "DbC cable unplugged\n");
- dbc->state = DS_ENABLED;
+ xhci_dbc_set_state(dbc, DS_ENABLED);
xhci_dbc_flush_requests(dbc);
xhci_dbc_reinit_ep_rings(dbc);
return EVT_DISC;
if (portsc & DBC_PORTSC_RESET_CHANGE) {
dev_info(dbc->dev, "DbC port reset\n");
writel(portsc, &dbc->regs->portsc);
- dbc->state = DS_ENABLED;
+ xhci_dbc_set_state(dbc, DS_ENABLED);
xhci_dbc_flush_requests(dbc);
xhci_dbc_reinit_ep_rings(dbc);
return EVT_DISC;