* These attributes will appear in /sys/accessibility/speakup/acntsa.
   */
  static struct kobj_attribute caps_start_attribute =
-       __ATTR(caps_start, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(caps_start, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute caps_stop_attribute =
-       __ATTR(caps_stop, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(caps_stop, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute pitch_attribute =
-       __ATTR(pitch, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(pitch, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute rate_attribute =
-       __ATTR(rate, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(rate, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute tone_attribute =
-       __ATTR(tone, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(tone, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute vol_attribute =
-       __ATTR(vol, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(vol, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  
  static struct kobj_attribute delay_time_attribute =
 -      __ATTR(delay_time, S_IRUSR|S_IRUGO, spk_var_show, spk_var_store);
 +      __ATTR(delay_time, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute direct_attribute =
-       __ATTR(direct, S_IWUGO|S_IRUGO, spk_var_show, spk_var_store);
+       __ATTR(direct, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute full_time_attribute =
 -      __ATTR(full_time, S_IRUSR|S_IRUGO, spk_var_show, spk_var_store);
 +      __ATTR(full_time, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute jiffy_delta_attribute =
 -      __ATTR(jiffy_delta, S_IRUSR|S_IRUGO, spk_var_show, spk_var_store);
 +      __ATTR(jiffy_delta, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  static struct kobj_attribute trigger_time_attribute =
 -      __ATTR(trigger_time, S_IRUSR|S_IRUGO, spk_var_show, spk_var_store);
 +      __ATTR(trigger_time, S_IWUSR|S_IRUGO, spk_var_show, spk_var_store);
  
  /*
   * Create a group of attributes so that we can create and destroy them all
 
                xhci_ring_free(xhci, xhci->cmd_ring);
        xhci->cmd_ring = NULL;
        xhci_dbg_trace(xhci, trace_xhci_dbg_init, "Freed command ring");
-       list_for_each_entry_safe(cur_cd, next_cd,
-                       &xhci->cancel_cmd_list, cancel_cmd_list) {
-               list_del(&cur_cd->cancel_cmd_list);
-               kfree(cur_cd);
-       }
+       xhci_cleanup_command_queue(xhci);
  
 +      num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
 +      for (i = 0; i < num_ports; i++) {
 +              struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
 +              for (j = 0; j < XHCI_MAX_INTERVAL; j++) {
 +                      struct list_head *ep = &bwt->interval_bw[j].endpoints;
 +                      while (!list_empty(ep))
 +                              list_del_init(ep->next);
 +              }
 +      }
 +
        for (i = 1; i < MAX_HC_SLOTS; ++i)
                xhci_free_virt_device(xhci, i);