[NEUS7920-133][9610][7885][7872][7570] wlbt: Disable ch12/13,when cellular is off.
authorHimani Gupta <himani.g2@samsung.com>
Tue, 12 Mar 2019 11:07:33 +0000 (16:37 +0530)
committerYoungmin Nam <youngmin.nam@samsung.com>
Tue, 21 May 2019 10:45:22 +0000 (19:45 +0900)
Driver shall disable ch 12/13 when cellular is off on receiving
GETREGULATORY 0.

Change-Id: Iee0e32e2d9b629344e6ac24e89da78c2efc5c9d2
SCSC-Bug-Id: SSB-50468
Signed-off-by: Himani Gupta <himani.g2@samsung.com>
drivers/net/wireless/scsc/dev.h
drivers/net/wireless/scsc/ioctl.c
drivers/net/wireless/scsc/mgt.c

index f23fd9f65a8635828c8281c6674bbe338fc4ce54..c63b43dbf36991d372345808452456372348c1f1 100755 (executable)
@@ -847,6 +847,7 @@ struct slsi_dev_config {
 
        int                                      rssi_boost_5g;
        int                                      rssi_boost_2g;
+       bool                                   disable_ch12_ch13;
 };
 
 #define SLSI_DEVICE_STATE_ATTACHING 0
index d842fe4c673c4114c509dfa1d18a6e5f8b53d106..2466a4d050d1eadab1b0e3aee726e4f133d08603 100755 (executable)
@@ -1922,6 +1922,9 @@ static int slsi_get_supported_channels(struct slsi_dev *sdev, struct net_device
                chan_count = supported_chan_mib.data[i*2 + 1];
                if (chan_start == 1) { /* for 2.4GHz */
                        supported_channels[supp_chan_length].start_chan_num = 1;
+                       if (!(sdev->device_config.host_state & FAPI_HOSTSTATE_CELLULAR_ACTIVE) &&
+                           chan_count > 11 && sdev->device_config.disable_ch12_ch13)
+                               chan_count = 11;
                        supported_channels[supp_chan_length].channel_count = chan_count;
                        supported_channels[supp_chan_length].increment = 1;
                        supported_channels[supp_chan_length].band = NL80211_BAND_2GHZ;
@@ -2010,6 +2013,19 @@ static int slsi_get_regulatory(struct net_device *dev, char *buf, int buf_len)
                return -ENOMEM;
 }
 
+void slsi_disable_ch12_13(struct slsi_dev *sdev)
+{
+       struct wiphy *wiphy = sdev->wiphy;
+       struct ieee80211_channel *chan;
+
+       if (wiphy->bands[0]) {
+               chan = &wiphy->bands[0]->channels[11];
+               chan->flags |= IEEE80211_CHAN_DISABLED;
+               chan = &wiphy->bands[0]->channels[12];
+               chan->flags |= IEEE80211_CHAN_DISABLED;
+       }
+}
+
 int slsi_set_fcc_channel(struct net_device *dev, char *cmd, int cmd_len)
 {
        struct netdev_vif    *ndev_vif = netdev_priv(dev);
@@ -2045,6 +2061,8 @@ int slsi_set_fcc_channel(struct net_device *dev, char *cmd, int cmd_len)
                                slsi_reset_channel_flags(sdev);
                                wiphy_apply_custom_regulatory(sdev->wiphy, sdev->device_config.domain_info.regdomain);
                                slsi_update_supported_channels_regd_flags(sdev);
+                               if (flight_mode_ena && sdev->device_config.disable_ch12_ch13)
+                                       slsi_disable_ch12_13(sdev);
                        }
                }
        }
index 1973eed4e6b21278da5c27ea344b4a8ceb581c12..b55c129480d3590497f733ba60b0ac8678085e42 100755 (executable)
@@ -1264,8 +1264,9 @@ static int slsi_mib_initial_get(struct slsi_dev *sdev)
                                                               { SLSI_PSID_UNIFI_MAX_CLIENT, {0, 0} },
 #endif
 #ifdef CONFIG_SCSC_WLAN_ENABLE_MAC_RANDOMISATION
-                                                              { SLSI_PSID_UNIFI_MAC_ADDRESS_RANDOMISATION_ACTIVATED, {0, 0} }
+                                                              { SLSI_PSID_UNIFI_MAC_ADDRESS_RANDOMISATION_ACTIVATED, {0, 0} },
 #endif
+                                                              { SLSI_PSID_UNIFI_DEFAULT_COUNTRY_WITHOUT_CH12_CH13, {0, 0} }
                                                              };/*Check the mibrsp.dataLength when a new mib is added*/
 
        /* 40 MHz bandwidth is not supported in 2.4 GHz in AP/GO Mode Currently.
@@ -1276,7 +1277,7 @@ static int slsi_mib_initial_get(struct slsi_dev *sdev)
        if (r != SLSI_MIB_STATUS_SUCCESS)
                return -ENOMEM;
 
-       mibrsp.dataLength = 164;
+       mibrsp.dataLength = 174;
        mibrsp.data = kmalloc(mibrsp.dataLength, GFP_KERNEL);
        if (!mibrsp.data) {
                kfree(mibreq.data);
@@ -1423,6 +1424,11 @@ static int slsi_mib_initial_get(struct slsi_dev *sdev)
                else
                        SLSI_WARN(sdev, "Error reading Mac Randomization Support\n");
 #endif
+               if (values[++mib_index].type != SLSI_MIB_TYPE_NONE)  /* Disable ch12/ch13 */
+                       sdev->device_config.disable_ch12_ch13 = values[mib_index].u.boolValue;
+               else
+                       SLSI_WARN(sdev, "Error reading default country without ch12/13 mib\n");
+
                kfree(values);
        }
        kfree(mibrsp.data);