Rex-BC Chen | 74a0629 | 2021-09-09 18:43:22 +0800 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
| 2 | |
Rex-BC Chen | d05f231 | 2021-12-17 14:39:30 +0800 | [diff] [blame] | 3 | #include <bootmode.h> |
Rex-BC Chen | ad5fda5 | 2021-11-10 20:44:12 +0800 | [diff] [blame] | 4 | #include <console/console.h> |
Rex-BC Chen | 74a0629 | 2021-09-09 18:43:22 +0800 | [diff] [blame] | 5 | #include <device/device.h> |
Yidi Lin | fe73a0e | 2023-11-28 16:03:44 +0800 | [diff] [blame^] | 6 | #include <fw_config.h> |
Rex-BC Chen | 1e9dfd9 | 2022-01-04 22:35:23 +0800 | [diff] [blame] | 7 | #include <gpio.h> |
Hung-Te Lin | a01f8bc | 2022-09-06 14:32:05 +0800 | [diff] [blame] | 8 | #include <soc/bl31.h> |
wuyang5 | 823f95e | 2023-11-02 09:33:01 +0800 | [diff] [blame] | 9 | #include <soc/i2c.h> |
Wenbin Mei | 966b502 | 2021-10-19 21:21:31 +0800 | [diff] [blame] | 10 | #include <soc/msdc.h> |
Rex-BC Chen | ad5fda5 | 2021-11-10 20:44:12 +0800 | [diff] [blame] | 11 | #include <soc/spm.h> |
Rex-BC Chen | 2f9e5b9 | 2021-10-13 20:08:26 +0800 | [diff] [blame] | 12 | #include <soc/usb.h> |
Rex-BC Chen | 74a0629 | 2021-09-09 18:43:22 +0800 | [diff] [blame] | 13 | |
Rex-BC Chen | d05f231 | 2021-12-17 14:39:30 +0800 | [diff] [blame] | 14 | #include "display.h" |
Rex-BC Chen | 64f1319 | 2021-11-18 12:55:01 +0800 | [diff] [blame] | 15 | #include "gpio.h" |
| 16 | |
wuyang5 | 823f95e | 2023-11-02 09:33:01 +0800 | [diff] [blame] | 17 | static void configure_alc1019(void) |
Rex-BC Chen | a8a9552d | 2022-01-04 11:07:22 +0800 | [diff] [blame] | 18 | { |
| 19 | mtcmos_audio_power_on(); |
| 20 | |
| 21 | /* Set up I2S */ |
| 22 | gpio_set_mode(GPIO(I2S2_MCK), PAD_I2S2_MCK_FUNC_I2S2_MCK); |
| 23 | gpio_set_mode(GPIO(I2S2_BCK), PAD_I2S2_BCK_FUNC_I2S2_BCK); |
| 24 | gpio_set_mode(GPIO(I2S2_LRCK), PAD_I2S2_LRCK_FUNC_I2S2_LRCK); |
| 25 | gpio_set_mode(GPIO(EINT4), PAD_EINT4_FUNC_I2S3_DO); |
| 26 | } |
| 27 | |
wuyang5 | 823f95e | 2023-11-02 09:33:01 +0800 | [diff] [blame] | 28 | static void configure_alc5645(void) |
| 29 | { |
| 30 | mtcmos_audio_power_on(); |
| 31 | |
| 32 | /* Set up I2S */ |
| 33 | gpio_set_mode(GPIO(I2S1_MCK), PAD_I2S1_MCK_FUNC_I2S1_MCK); |
| 34 | gpio_set_mode(GPIO(I2S1_BCK), PAD_I2S1_BCK_FUNC_I2S1_BCK); |
| 35 | gpio_set_mode(GPIO(I2S1_LRCK), PAD_I2S1_LRCK_FUNC_I2S1_LRCK); |
| 36 | gpio_set_mode(GPIO(I2S1_DO), PAD_I2S1_DO_FUNC_I2S1_DO); |
| 37 | |
| 38 | /* Init I2C bus timing register for audio codecs */ |
| 39 | mtk_i2c_bus_init(I2C5, I2C_SPEED_STANDARD); |
| 40 | } |
| 41 | |
Rex-BC Chen | 74a0629 | 2021-09-09 18:43:22 +0800 | [diff] [blame] | 42 | static void mainboard_init(struct device *dev) |
| 43 | { |
Rex-BC Chen | 4ab77ad | 2021-10-26 13:17:43 +0800 | [diff] [blame] | 44 | mtk_msdc_configure_emmc(true); |
Rex-BC Chen | fca89d3 | 2021-11-19 10:47:12 +0800 | [diff] [blame] | 45 | |
Julius Werner | 0712851 | 2023-11-14 16:23:06 -0800 | [diff] [blame] | 46 | if (CONFIG(CORSOLA_SDCARD_INIT)) { |
Rex-BC Chen | fca89d3 | 2021-11-19 10:47:12 +0800 | [diff] [blame] | 47 | printk(BIOS_INFO, "SD card init\n"); |
Rex-BC Chen | 1e9dfd9 | 2022-01-04 22:35:23 +0800 | [diff] [blame] | 48 | |
| 49 | /* External SD Card connected via USB */ |
| 50 | gpio_output(GPIO_EN_PP3300_SDBRDG_X, 1); |
Rex-BC Chen | fca89d3 | 2021-11-19 10:47:12 +0800 | [diff] [blame] | 51 | } |
| 52 | |
Rex-BC Chen | 2f9e5b9 | 2021-10-13 20:08:26 +0800 | [diff] [blame] | 53 | setup_usb_host(); |
Rex-BC Chen | ad5fda5 | 2021-11-10 20:44:12 +0800 | [diff] [blame] | 54 | |
Yidi Lin | fe73a0e | 2023-11-28 16:03:44 +0800 | [diff] [blame^] | 55 | if (!fw_config_is_provisioned() || |
| 56 | fw_config_probe(FW_CONFIG(AUDIO_AMP, AMP_ALC1019))) |
wuyang5 | 823f95e | 2023-11-02 09:33:01 +0800 | [diff] [blame] | 57 | configure_alc1019(); |
Yidi Lin | fe73a0e | 2023-11-28 16:03:44 +0800 | [diff] [blame^] | 58 | else if (fw_config_probe(FW_CONFIG(AUDIO_AMP, AMP_ALC5645))) |
| 59 | configure_alc5645(); |
Rex-BC Chen | a8a9552d | 2022-01-04 11:07:22 +0800 | [diff] [blame] | 60 | |
Rex-BC Chen | ad5fda5 | 2021-11-10 20:44:12 +0800 | [diff] [blame] | 61 | if (spm_init()) |
| 62 | printk(BIOS_ERR, "spm init failed, system suspend may not work\n"); |
Rex-BC Chen | 64f1319 | 2021-11-18 12:55:01 +0800 | [diff] [blame] | 63 | |
Hung-Te Lin | a01f8bc | 2022-09-06 14:32:05 +0800 | [diff] [blame] | 64 | if (CONFIG(ARM64_USE_ARM_TRUSTED_FIRMWARE)) |
| 65 | register_reset_to_bl31(GPIO_RESET.id, true); |
Rex-BC Chen | d05f231 | 2021-12-17 14:39:30 +0800 | [diff] [blame] | 66 | |
| 67 | if (display_init_required()) { |
| 68 | if (configure_display() < 0) |
| 69 | printk(BIOS_ERR, "%s: Failed to init display\n", __func__); |
| 70 | } else { |
Ruihai Zhou | 266e655 | 2023-07-03 20:10:28 +0800 | [diff] [blame] | 71 | if (CONFIG(BOARD_GOOGLE_STARYU_COMMON)) { |
| 72 | mtk_i2c_bus_init(PMIC_I2C_BUS, I2C_SPEED_FAST); |
| 73 | if (is_pmic_aw37503(PMIC_I2C_BUS)) { |
| 74 | printk(BIOS_DEBUG, "Initialize PMIC AW37503\n"); |
| 75 | aw37503_init(PMIC_I2C_BUS); |
| 76 | } |
| 77 | } |
Rex-BC Chen | d05f231 | 2021-12-17 14:39:30 +0800 | [diff] [blame] | 78 | printk(BIOS_INFO, "%s: Skipped display init\n", __func__); |
| 79 | } |
Rex-BC Chen | 74a0629 | 2021-09-09 18:43:22 +0800 | [diff] [blame] | 80 | } |
| 81 | |
| 82 | static void mainboard_enable(struct device *dev) |
| 83 | { |
| 84 | dev->ops->init = &mainboard_init; |
| 85 | } |
| 86 | |
| 87 | struct chip_operations mainboard_ops = { |
Rex-BC Chen | 74a0629 | 2021-09-09 18:43:22 +0800 | [diff] [blame] | 88 | .enable_dev = mainboard_enable, |
| 89 | }; |