/*
 * This file is part of the coreboot project.
 *
 * Copyright (C) 2020 Google Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <arch/acpi.h>
#include <baseboard/variants.h>
#include <console/console.h>
#include <delay.h>
#include "gpio.h"

#define TOUCH_DISABLE         GPP_C3
#define TOUCH_RESET           GPP_B3
#define TOUCH_ENABLE          GPP_B4
#define FP_PWR_ENABLE         GPP_B11

/*
 * Elan touchscreen has higher delay requirements than the other
 * devices, so using that.
 */
#define ELAN_STOP_OFF_DELAY   2
#define ELAN_RESET_OFF_DELAY  2
#define ELAN_ENABLE_OFF_DELAY 100

void variant_smi_sleep(u8 slp_typ)
{
	if (slp_typ == ACPI_S5) {
		/* TOUCHSCREEN_DIS# */
		gpio_set(TOUCH_DISABLE, 0);
		mdelay(ELAN_STOP_OFF_DELAY);
		/* TOUCHSCREEN_RST# */
		gpio_set(TOUCH_RESET, 0);
		mdelay(ELAN_RESET_OFF_DELAY);
		/* EN_PP3300_DX_TOUCHSCREEN */
		gpio_set(TOUCH_ENABLE, 0);
		mdelay(ELAN_ENABLE_OFF_DELAY);
		/* PCH_FP_PWR_EN */
		gpio_set(FP_PWR_ENABLE, 0);
	}
}
