diff --git a/provingground/run_wifi_release_suite.sh b/provingground/run_wifi_release_suite.sh
deleted file mode 100755
index 390473e..0000000
--- a/provingground/run_wifi_release_suite.sh
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-BRANCH=$1
-BUILD=$2
-# This script assumes that atest is in PATH
-ATEST='atest'
-RUN_SUITE='../../../third_party/autotest/files/site_utils/run_suite.py'
-
-USAGE_STRING='Usage: ./run_wifi_release_suite.sh <branch number> <build number>'
-
-declare -i PREFLIGHT_POOL_VERSION=41
-
-if [[ $# -eq 0  ||  -z $2 ]] ; then
-  echo $USAGE_STRING
-  exit
-fi
-
-# atheros_ar9300 on kernel 3.4
-list_1=(alex lumpy stumpy)
-
-# atheros_ar9462 on kernel 3.4
-list_2=(parrot butterfly)
-
-# atheros_ar9462 on kernel 3.8
-list_3=(link stout peppy falco monroe panther leon wolf mccloud zako)
-
-# marvell_88w8797_2x2 on kernel 3.8
-list_4=(snow spring skate)
-
-# marvell_88w8897_2x2 on kernel 3.8
-list_5=(peach_pi peach_pit)
-
-# marvell_88w8897_2x2 on kernel 3.10
-list_6=(nyan_big nyan_blaze nyan_kitty)
-
-# intel wilkins peak 2 on kernel 3.8
-list_7=(falco_li tricky)
-
-# intel wilkins peak 2 on kernel 3.10
-list_8=(squawks expresso clapper glimmer quawks enguarde kip squawks gnawty
-        swanky winky candy orco sumo ninja banjo heli)
-
-# intel wilkins peak 2 on kernel 3.14
-list_9=(samus auron_paine auron_yuna guado tidus rikku lulu gandof)
-
-# Broadcom 4354 on kernel 3.14
-list_10=(veyron_speedy veyron_minnie veyron_mickey)
-
-# Marvell 8897 on kernel 3.14
-list_11=(veyron_mighty veyron_jaq veyron_jerry veyron_tiger)
-
-# Intel Stonepeak2 on kernel 3.18
-list_12=(cyan celes ultima reks chell lars terra sentry edgar banon umaro
-         kefka cave sabin asuka tifa caroline)
-
-# Marvell 8897 on kernel 3.18
-list_13=(elm)
-
-# Marvell 8897 on kernel 4.4.14
-list_14=(kevin)
-
-# Intel Stonepeak2 on kernel 4.4
-list_15=(pyro snappy)
-
-DESIRED_BOARDS=(list_1 list_2 list_3 list_4 list_5 list_6 list_7 list_8 list_9
-                list_10 list_11 list_12 list_13 list_14 list_15)
-
-# POOLS format: POOLS[<pool name>]=<suite name>
-declare -A POOLS
-POOLS[wificell]=wifi_release
-
-return_item_exists_in_array() {
-  for current_board in ${boards_to_run[@]}; do
-    if [[ ${1} == ${current_board} ]] ; then
-      echo 'True'
-    fi
-  done;
-  echo 'False'
-}
-
-return_available_hosts() {
-  OIFS='$IFS'
-  IFS=$'\n'
-
-  boards=("${!1}")
-  local pool=${2}
-
-  #TODO: Filter out stderr so the user doesn't see it.
-  for host in `$ATEST host list | grep -w 'pool:'${2}` ; do
-    IFS=$' '
-    local host_info=($host)
-    for board in ${boards[@]}; do
-      if [[ ${host_info[3]} == 'False' && (${host_info[1]} != 'Repairing' &&
-        ${host_info[1]} != 'Repair Failed') &&
-        $board == ${host_info[5]} ]] ; then
-        already_added=$(return_item_exists_in_array ${board})
-        if [[ ${already_added} == 'False' ]] ; then
-          boards_to_run+=($board)
-        fi
-      fi
-    done;
-    IFS=$'\n'
-  done;
-  IFS=$OIFS
-}
-
-return_host_list() {
-  local pool=${1}
-  for sub_list in ${DESIRED_BOARDS[@]} ; do
-    previous_count=${#boards_to_run[@]}
-
-    subst="$sub_list[@]"
-    list_items=(`echo "${!subst}"`)
-    return_available_hosts list_items[@] ${pool}
-
-    current_count=${#boards_to_run[@]}
-    if [ $current_count -eq $previous_count ] ; then
-      echo 'No devices from '$sub_list' ('${list_items}') were available!'
-    fi
-
-  done;
-}
-
-results_folder='/tmp/connectivity_release_'
-results_folder+=$BRANCH'-'$BUILD'-'`date +%Y-%m-%d-%H-%M-%S`
-if [ -e ${results_folder} ] ; then
-  rm -rf ${results_folder}
-fi
-
-mkdir $results_folder
-latest_results_folder='/tmp/connectivity_results_latest'
-if [ -h ${latest_results_folder} ] ; then
-  rm -rf ${latest_results_folder}
-fi
-ln -s ${results_folder} ${latest_results_folder}
-
-for pool in "${!POOLS[@]}"; do
-  boards_to_run=()
-  return_host_list ${pool}
-
-  for board in ${boards_to_run[@]}; do
-    # Perform the conversion from autotest platform names to board build names
-    if [ $board == 'spring' ] ; then
-      board='daisy_spring'
-    elif [ $board == 'skate' ] ; then
-      board='daisy_skate'
-    elif [ $board == 'snow' ] ; then
-      board='daisy'
-    elif [ $board == 'alex' ] ; then
-      board='x86-alex'
-    fi
-
-    run_command=$RUN_SUITE' --build='$board'-release/R'$BRANCH'-'$BUILD
-    run_command+=' --pool='$pool' --board='$board' --suite_name='${POOLS[$pool]}
-
-    results_file=$results_folder'/'$pool'_'$board'.txt'
-
-    #TODO: Move or delete extra files created by run suite
-    eval $run_command &> $results_file &
-    disown %1
-
-  done;
-done;
-
-echo 'All results are available in: '${results_folder}
