diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 7ab9afb..cb6f9be 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -266,14 +266,16 @@
         <item>PWD</item>
     </string-array>
 
-   <!-- Wi-Fi AP band settings.  Either 2.4GHz or 5GHz. -->
+   <!-- Wi-Fi AP band settings.  Either Auto, 2.4GHz or 5GHz. -->
    <!-- Note that adding/removing/moving the items will need wifi settings code change. -->
     <string-array name="wifi_ap_band_config_full">
+        <item>@string/wifi_ap_choose_auto</item>
         <item>@string/wifi_ap_choose_2G</item>
         <item>@string/wifi_ap_choose_5G</item>
     </string-array>
 
     <string-array name="wifi_ap_band_config_2G_only">
+        <item>@string/wifi_ap_choose_auto</item>
         <item>@string/wifi_ap_choose_2G</item>
     </string-array>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4182fd9..4ca5f6e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1941,6 +1941,8 @@
     <string name="wifi_show_password">Show password</string>
     <!-- Label for the RadioGroup to choose wifi ap band -->
     <string name="wifi_ap_band_config">Select AP Band</string>
+    <!-- Label for the radio button to choose wifi ap channel automatically-->
+    <string name="wifi_ap_choose_auto">Auto</string>
     <!-- Label for the radio button to choose wifi ap 2.4 GHz band -->
     <string name="wifi_ap_choose_2G">2.4 GHz Band</string>
     <!-- Label for the radio button to choose wifi ap 5GHz band -->
diff --git a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
index 1e299ab..4c47a0d 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
@@ -18,6 +18,7 @@
 
 import static android.net.wifi.WifiConfiguration.AP_BAND_2GHZ;
 import static android.net.wifi.WifiConfiguration.AP_BAND_5GHZ;
+import static android.net.wifi.WifiConfiguration.AP_BAND_ANY;
 
 import android.content.Context;
 import android.net.wifi.WifiConfiguration;
@@ -32,7 +33,8 @@
     private static final String TAG = "WifiTetherApBandPref";
     private static final String PREF_KEY = "wifi_tether_network_ap_band";
     private static final String[] BAND_VALUES =
-            {String.valueOf(AP_BAND_2GHZ), String.valueOf(AP_BAND_5GHZ)};
+            {String.valueOf(AP_BAND_ANY), String.valueOf(AP_BAND_2GHZ),
+                    String.valueOf(AP_BAND_5GHZ)};
 
     private final String[] mBandEntries;
     private int mBandIndex;
@@ -65,7 +67,7 @@
         } else {
             preference.setEntries(mBandEntries);
             preference.setEntryValues(BAND_VALUES);
-            preference.setSummary(mBandEntries[mBandIndex]);
+            preference.setSummary(mBandEntries[mBandIndex + 1]);
             preference.setValue(String.valueOf(mBandIndex));
         }
     }
@@ -78,7 +80,8 @@
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         mBandIndex = Integer.parseInt((String) newValue);
-        preference.setSummary(mBandEntries[mBandIndex]);
+        Log.d(TAG, "Band preference changed, updating band index to " + mBandIndex);
+        preference.setSummary(mBandEntries[mBandIndex + 1]);
         mListener.onTetherConfigUpdated();
         return true;
     }
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
index 6832ca8..2a633d9 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
@@ -80,7 +80,7 @@
 
         mController.displayPreference(mScreen);
 
-        assertThat(mListPreference.getEntries().length).isEqualTo(2);
+        assertThat(mListPreference.getEntries().length).isEqualTo(3);
     }
 
     @Test
@@ -113,13 +113,18 @@
         when(mWifiManager.is5GHzBandSupported()).thenReturn(true);
 
         mController.displayPreference(mScreen);
+
+        // -1 is WifiConfiguration.AP_BAND_ANY, for 'Auto' option.
+        mController.onPreferenceChange(mListPreference, "-1");
+        assertThat(mController.getBandIndex()).isEqualTo(-1);
+
         mController.onPreferenceChange(mListPreference, "1");
         assertThat(mController.getBandIndex()).isEqualTo(1);
 
         mController.onPreferenceChange(mListPreference, "0");
         assertThat(mController.getBandIndex()).isEqualTo(0);
 
-        verify(mListener, times(2)).onTetherConfigUpdated();
+        verify(mListener, times(3)).onTetherConfigUpdated();
     }
 
     @Test
