blob: df27e39724a7bbacec5a11940573f18cd79df034 [file] [log] [blame]
Angel Pons47f26db2020-04-05 13:22:34 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Aaron Durbinc625d092013-10-04 16:00:07 -05002
Aaron Durbinc625d092013-10-04 16:00:07 -05003#include <device/device.h>
Shawn Nematbakhsh9547f8d2013-11-08 17:23:26 -08004#include <smbios.h>
Aaron Durbin063c8732013-10-28 11:24:53 -05005#include "ec.h"
Matt DeVillierce0a5642017-01-12 12:19:21 -06006#include <variant/onboard.h>
Julius Werner18ea2d32014-10-07 16:42:17 -07007#include <soc/gpio.h>
Angel Pons4cedb8c2021-05-17 18:46:41 +02008#include <soc/int15.h>
Kein Yuan704c0062014-05-01 20:20:06 -07009#include <bootstate.h>
Aaron Durbinc625d092013-10-04 16:00:07 -050010
Elyes HAOUASd129d432018-05-04 20:23:33 +020011static void mainboard_init(struct device *dev)
Aaron Durbin063c8732013-10-28 11:24:53 -050012{
13 mainboard_ec_init();
Julius Wernercd49cce2019-03-05 16:53:33 -080014#if CONFIG(BOARD_GOOGLE_NINJA) || CONFIG(BOARD_GOOGLE_SUMO)
Matt DeVillierce0a5642017-01-12 12:19:21 -060015 lan_init();
16#endif
Aaron Durbin063c8732013-10-28 11:24:53 -050017}
18
Elyes HAOUASd129d432018-05-04 20:23:33 +020019static int mainboard_smbios_data(struct device *dev, int *handle,
Shawn Nematbakhsh9547f8d2013-11-08 17:23:26 -080020 unsigned long *current)
21{
22 int len = 0;
Matt DeVillierce0a5642017-01-12 12:19:21 -060023#ifdef BOARD_TRACKPAD_NAME
Shawn Nematbakhsh9547f8d2013-11-08 17:23:26 -080024 len += smbios_write_type41(
25 current, handle,
26 BOARD_TRACKPAD_NAME, /* name */
27 BOARD_TRACKPAD_IRQ, /* instance */
28 BOARD_TRACKPAD_I2C_BUS, /* segment */
29 BOARD_TRACKPAD_I2C_ADDR, /* bus */
30 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020031 0, /* function */
32 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Matt DeVillierce0a5642017-01-12 12:19:21 -060033#endif
34#ifdef BOARD_TOUCHSCREEN_NAME
Shawn Nematbakhsh9547f8d2013-11-08 17:23:26 -080035 len += smbios_write_type41(
36 current, handle,
37 BOARD_TOUCHSCREEN_NAME, /* name */
38 BOARD_TOUCHSCREEN_IRQ, /* instance */
39 BOARD_TOUCHSCREEN_I2C_BUS, /* segment */
40 BOARD_TOUCHSCREEN_I2C_ADDR, /* bus */
41 0, /* device */
Christian Waltere6afab12019-05-21 17:22:49 +020042 0, /* function */
43 SMBIOS_DEVICE_TYPE_OTHER); /* device type */
Matt DeVillierce0a5642017-01-12 12:19:21 -060044#endif
Shawn Nematbakhsh9547f8d2013-11-08 17:23:26 -080045 return len;
46}
47
Elyes HAOUASd129d432018-05-04 20:23:33 +020048static void mainboard_enable(struct device *dev)
Aaron Durbinc625d092013-10-04 16:00:07 -050049{
Aaron Durbin063c8732013-10-28 11:24:53 -050050 dev->ops->init = mainboard_init;
Shawn Nematbakhsh9547f8d2013-11-08 17:23:26 -080051 dev->ops->get_smbios_data = mainboard_smbios_data;
Angel Pons4cedb8c2021-05-17 18:46:41 +020052
Aaron Durbinc625d092013-10-04 16:00:07 -050053 /* Install custom int15 handler for VGA OPROM */
Angel Pons4cedb8c2021-05-17 18:46:41 +020054 if (CONFIG(VGA_ROM_RUN))
55 install_baytrail_vga_int15_handler();
Aaron Durbinc625d092013-10-04 16:00:07 -050056}
57
58struct chip_operations mainboard_ops = {
59 .enable_dev = mainboard_enable,
60};
Kein Yuan704c0062014-05-01 20:20:06 -070061
62static void edp_vdden_cb(void *unused)
63{
64 ncore_select_func(SOC_DDI1_VDDEN_PAD, PAD_FUNC2);
65}
66
Aaron Durbin9ef9d852015-03-16 17:30:09 -050067BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_EXIT, edp_vdden_cb, NULL);