Linux kernel expects that power management with ACPI should always be handled using PowerResource. However, some kernel drivers (e.g. ELAN touchscreen) check to see if reset gpio is passed in by the BIOS to decide whether the device loses power in suspend. Thus, until the kernel has a better way for drivers to query if device lost power in suspend, we need to allow passing in of GPIOs via _CRS as well as exporting PowerResource to control power to the device. Update mainboards to export reset GPIO as well as PowerResource for ELAN touchscreen device. BUG=chrome-os-partner:62311,chrome-os-partner:60194 BRANCH=reef TEST=Verified that touchscreen works on power-on as well as after suspend-resume. Change-Id: I3409689cf56bfddd321402ad5dda3fc8762e6bc6 Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://review.coreboot.org/18238 Tested-by: build bot (Jenkins) Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
76 lines
2.4 KiB
C
76 lines
2.4 KiB
C
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright 2016 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.
|
|
*/
|
|
|
|
#ifndef __I2C_GENERIC_CHIP_H__
|
|
#define __I2C_GENERIC_CHIP_H__
|
|
|
|
#include <arch/acpi_device.h>
|
|
#include <device/i2c.h>
|
|
|
|
struct drivers_i2c_generic_config {
|
|
const char *hid; /* ACPI _HID (required) */
|
|
const char *cid; /* ACPI _CID */
|
|
const char *name; /* ACPI Device Name */
|
|
const char *desc; /* Device Description */
|
|
unsigned uid; /* ACPI _UID */
|
|
enum i2c_speed speed; /* Bus speed in Hz, default is I2C_SPEED_FAST */
|
|
unsigned wake; /* Wake GPE */
|
|
struct acpi_irq irq; /* Interrupt */
|
|
|
|
/*
|
|
* This flag will add a device propery which will indicate
|
|
* to the OS that it should probe this device before adding it.
|
|
*
|
|
* This can be used to declare a device that may not exist on
|
|
* the board, for example to support multiple trackpad vendors.
|
|
*/
|
|
int probed;
|
|
|
|
/* GPIO used to indicate if this device is present */
|
|
unsigned device_present_gpio;
|
|
unsigned device_present_gpio_invert;
|
|
|
|
/* Disable reset and enable GPIO export in _CRS */
|
|
bool disable_gpio_export_in_crs;
|
|
|
|
/* Does the device have a power resource? */
|
|
bool has_power_resource;
|
|
|
|
/* GPIO used to take device out of reset or to put it into reset. */
|
|
struct acpi_gpio reset_gpio;
|
|
/* Delay to be inserted after device is taken out of reset. */
|
|
unsigned reset_delay_ms;
|
|
/* GPIO used to enable device. */
|
|
struct acpi_gpio enable_gpio;
|
|
/* Delay to be inserted after device is enabled. */
|
|
unsigned enable_delay_ms;
|
|
};
|
|
|
|
/*
|
|
* Fills in generic information about i2c device from device-tree
|
|
* properties. Callback can be provided to fill in any
|
|
* device-specific information in SSDT.
|
|
*
|
|
* Parameters:
|
|
* dev: Device requesting i2c generic information to be filled
|
|
* callback: Callback to fill in device-specific information
|
|
* config: Pointer to drivers_i2c_generic_config structure
|
|
*/
|
|
void i2c_generic_fill_ssdt(struct device *dev,
|
|
void (*callback)(struct device *dev),
|
|
struct drivers_i2c_generic_config *config);
|
|
|
|
#endif /* __I2C_GENERIC_CHIP_H__ */
|