* Generic and Clientmode operation code.
   **************************************************/
  
 -static void ssb_pcicore_init_clientmode(struct ssb_pcicore *pc)
 +static void __devinit ssb_pcicore_init_clientmode(struct ssb_pcicore *pc)
  {
+       ssb_pcicore_fix_sprom_core_index(pc);
+ 
        /* Disable PCI interrupts. */
        ssb_write32(pc->dev, SSB_INTVEC, 0);
+ 
+       /* Additional PCIe always once-executed workarounds */
+       if (pc->dev->id.coreid == SSB_DEV_PCIE) {
+               ssb_pcicore_serdes_workaround(pc);
+               /* TODO: ASPM */
+               /* TODO: Clock Request Update */
+       }
  }
  
 -void ssb_pcicore_init(struct ssb_pcicore *pc)
 +void __devinit ssb_pcicore_init(struct ssb_pcicore *pc)
  {
        struct ssb_device *dev = pc->dev;
  
 
  
        sk = chan->sk;
  
-       if (chan->state != BT_CONFIG) {
 -      if ((bt_sk(sk)->defer_setup && sk->sk_state != BT_CONNECT2) ||
 -               (!bt_sk(sk)->defer_setup && sk->sk_state != BT_CONFIG)) {
++      if ((bt_sk(sk)->defer_setup && chan->state != BT_CONNECT2) ||
++               (!bt_sk(sk)->defer_setup && chan->state != BT_CONFIG)) {
                struct l2cap_cmd_rej rej;
  
                rej.reason = cpu_to_le16(0x0002);
 
            !rdev->ops->sched_scan_stop)
                return -EOPNOTSUPP;
  
-       return __cfg80211_stop_sched_scan(rdev, false);
+       mutex_lock(&rdev->sched_scan_mtx);
+       err = __cfg80211_stop_sched_scan(rdev, false);
+       mutex_unlock(&rdev->sched_scan_mtx);
+ 
+       return err;
  }
  
 -static int nl80211_send_bss(struct sk_buff *msg, u32 pid, u32 seq, int flags,
 +static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
 +                          u32 seq, int flags,
                            struct cfg80211_registered_device *rdev,
                            struct wireless_dev *wdev,
                            struct cfg80211_internal_bss *intbss)
 
  int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev,
                               bool driver_initiated)
  {
 -      int err;
        struct net_device *dev;
  
-       ASSERT_RDEV_LOCK(rdev);
+       lockdep_assert_held(&rdev->sched_scan_mtx);
  
        if (!rdev->sched_scan_req)
                return 0;