blob: 8d470f4ba6d4db049422020098df8539c54812a4 [file] [log] [blame]
Angel Ponsd28443e2020-04-05 13:22:44 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06002
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06003#include <smbios.h>
Kyösti Mälkki3fccec52020-06-18 13:46:31 +03004#include <cpu/x86/smm.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06005#include <device/device.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06006#include <drivers/intel/gma/int15.h>
Furquan Shaikh76cedd22020-05-02 10:24:23 -07007#include <acpi/acpi.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06008#include <southbridge/intel/lynxpoint/pch.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06009#include "ec.h"
10#include "onboard.h"
11
12void mainboard_suspend_resume(void)
13{
14 /* Call SMM finalize() handlers before resume */
Kyösti Mälkki3fccec52020-06-18 13:46:31 +030015 apm_control(APM_CNT_FINALIZE);
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060016}
17
Elyes HAOUASd129d432018-05-04 20:23:33 +020018static void mainboard_init(struct device *dev)
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060019{
20 mainboard_ec_init();
21}
22
Elyes HAOUASd129d432018-05-04 20:23:33 +020023static int mainboard_smbios_data(struct device *dev, int *handle,
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060024 unsigned long *current)
25{
26 int len = 0;
27
28 len += smbios_write_type41(
29 current, handle,
30 BOARD_LIGHTSENSOR_NAME, /* name */
31 BOARD_LIGHTSENSOR_IRQ, /* instance */
32 BOARD_LIGHTSENSOR_I2C_BUS, /* segment */
33 BOARD_LIGHTSENSOR_I2C_ADDR, /* bus */
34 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020035 0, /* function */
36 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060037
38 len += smbios_write_type41(
39 current, handle,
40 BOARD_TRACKPAD_NAME, /* name */
41 BOARD_TRACKPAD_IRQ, /* instance */
42 BOARD_TRACKPAD_I2C_BUS, /* segment */
43 BOARD_TRACKPAD_I2C_ADDR, /* bus */
44 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020045 0, /* function */
46 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060047
48 len += smbios_write_type41(
49 current, handle,
50 BOARD_TOUCHSCREEN_NAME, /* name */
51 BOARD_TOUCHSCREEN_IRQ, /* instance */
52 BOARD_TOUCHSCREEN_I2C_BUS, /* segment */
53 BOARD_TOUCHSCREEN_I2C_ADDR, /* bus */
54 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020055 0, /* function */
56 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060057
58 return len;
59}
60
Elyes HAOUASd129d432018-05-04 20:23:33 +020061static void mainboard_enable(struct device *dev)
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060062{
63 dev->ops->init = mainboard_init;
64 dev->ops->get_smbios_data = mainboard_smbios_data;
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060065 install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
66}
67
68struct chip_operations mainboard_ops = {
69 .enable_dev = mainboard_enable,
70};