/*
 * Copyright (c) 2022 Linaro Limited.
 * SPDX-License-Identifier: Apache-2.0
 */

/*
 * This file is intentionally empty.  Please confer with shield documentation
 * for instructions to use this shield.
 */
