blob: f921812687ff850843fba31772c1ae84e2b4be2d [file] [log] [blame]
Angel Pons96d93d12020-04-05 13:22:23 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauera7198b32012-12-11 16:00:47 -08002
3#include <types.h>
Kyösti Mälkki3fccec52020-06-18 13:46:31 +03004#include <cpu/x86/smm.h>
Stefan Reinauera7198b32012-12-11 16:00:47 -08005#include <device/device.h>
Vladimir Serbinenkoa2a906e2014-09-01 01:41:37 +02006#include <drivers/intel/gma/int15.h>
Furquan Shaikh76cedd22020-05-02 10:24:23 -07007#include <acpi/acpi.h>
Stefan Reinauera7198b32012-12-11 16:00:47 -08008#include "onboard.h"
9#include "ec.h"
10#include <southbridge/intel/bd82x6x/pch.h>
11#include <smbios.h>
Stefan Reinauera7198b32012-12-11 16:00:47 -080012#include <ec/compal/ene932/ec.h>
13
14void mainboard_suspend_resume(void)
15{
Stefan Reinauera7198b32012-12-11 16:00:47 -080016 /* Enable ACPI mode before OS resume */
Kyösti Mälkki3fccec52020-06-18 13:46:31 +030017 apm_control(APM_CNT_ACPI_ENABLE);
Stefan Reinauera7198b32012-12-11 16:00:47 -080018}
19
Elyes HAOUASd129d432018-05-04 20:23:33 +020020static void mainboard_init(struct device *dev)
Stefan Reinauera7198b32012-12-11 16:00:47 -080021{
22 /* Initialize the Embedded Controller */
23 parrot_ec_init();
24}
25
Elyes HAOUASd129d432018-05-04 20:23:33 +020026static int parrot_onboard_smbios_data(struct device *dev, int *handle,
Stefan Reinauera7198b32012-12-11 16:00:47 -080027 unsigned long *current)
28{
29 int len = 0;
30 u8 hardware_version = parrot_rev();
31 if (hardware_version < 0x2) { /* DVT vs PVT */
Duncan Laurie21a78702013-05-23 14:17:05 -070032 len += smbios_write_type41(
33 current, handle,
Kyösti Mälkkib9cd5ec2015-04-24 16:05:58 +030034 BOARD_TRACKPAD_NAME, /* name */
35 BOARD_TRACKPAD_IRQ_DVT, /* instance */
Duncan Laurie21a78702013-05-23 14:17:05 -070036 0, /* segment */
Kyösti Mälkkib9cd5ec2015-04-24 16:05:58 +030037 BOARD_TRACKPAD_I2C_ADDR, /* bus */
Duncan Laurie21a78702013-05-23 14:17:05 -070038 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020039 0, /* function */
40 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Stefan Reinauera7198b32012-12-11 16:00:47 -080041 } else {
Duncan Laurie21a78702013-05-23 14:17:05 -070042 len += smbios_write_type41(
43 current, handle,
Kyösti Mälkkib9cd5ec2015-04-24 16:05:58 +030044 BOARD_TRACKPAD_NAME, /* name */
45 BOARD_TRACKPAD_IRQ_PVT, /* instance */
Duncan Laurie21a78702013-05-23 14:17:05 -070046 0, /* segment */
Kyösti Mälkkib9cd5ec2015-04-24 16:05:58 +030047 BOARD_TRACKPAD_I2C_ADDR, /* bus */
Duncan Laurie21a78702013-05-23 14:17:05 -070048 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020049 0, /* function */
50 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Stefan Reinauera7198b32012-12-11 16:00:47 -080051 }
52
Stefan Reinauera7198b32012-12-11 16:00:47 -080053 return len;
54}
55
Elyes HAOUASd129d432018-05-04 20:23:33 +020056static void mainboard_enable(struct device *dev)
Stefan Reinauera7198b32012-12-11 16:00:47 -080057{
58 dev->ops->init = mainboard_init;
59 dev->ops->get_smbios_data = parrot_onboard_smbios_data;
Vladimir Serbinenkoa2a906e2014-09-01 01:41:37 +020060 install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
Stefan Reinauera7198b32012-12-11 16:00:47 -080061}
62
63struct chip_operations mainboard_ops = {
Stefan Reinauera7198b32012-12-11 16:00:47 -080064 .enable_dev = mainboard_enable,
65};