diff --git a/src/mainboard/google/asurada/mainboard.c b/src/mainboard/google/asurada/mainboard.c index 358717b690..6a0d433ca4 100644 --- a/src/mainboard/google/asurada/mainboard.c +++ b/src/mainboard/google/asurada/mainboard.c @@ -83,7 +83,7 @@ static bool configure_display(void) printk(BIOS_INFO, "%s: Starting display init\n", __func__); configure_backlight_and_bridge(); - mtk_i2c_bus_init(i2c_bus); + mtk_i2c_bus_init(i2c_bus, I2C_SPEED_FAST); if (anx7625_init(i2c_bus)) { printk(BIOS_ERR, "%s: Can't init ANX7625 bridge\n", __func__); diff --git a/src/mainboard/google/kukui/boardid.c b/src/mainboard/google/kukui/boardid.c index 117475680f..a15f6d08c9 100644 --- a/src/mainboard/google/kukui/boardid.c +++ b/src/mainboard/google/kukui/boardid.c @@ -128,7 +128,7 @@ static uint8_t wfc_id(void) [1] = 0x5035, /* GC5035 */ }; - mtk_i2c_bus_init(bus); + mtk_i2c_bus_init(bus, I2C_SPEED_FAST); /* Turn on camera sensor EEPROM */ pwrap_write(PMIC_LDO_VCAMIO_CON0, 0x1); diff --git a/src/mainboard/google/kukui/panel_anx7625.c b/src/mainboard/google/kukui/panel_anx7625.c index 90a041b42a..45cf27c64c 100644 --- a/src/mainboard/google/kukui/panel_anx7625.c +++ b/src/mainboard/google/kukui/panel_anx7625.c @@ -60,7 +60,7 @@ struct panel_description *get_panel_description(int panel_id) /* To read panel EDID, we have to first power on anx7625. */ power_on_anx7625(); - mtk_i2c_bus_init(ANX7625_I2C_BUS); + mtk_i2c_bus_init(ANX7625_I2C_BUS, I2C_SPEED_FAST); if (anx7625_init(ANX7625_I2C_BUS)) { printk(BIOS_ERR, "Can't init ANX7625 bridge.\n"); diff --git a/src/mainboard/google/kukui/panel_ps8640.c b/src/mainboard/google/kukui/panel_ps8640.c index c4e90ea81c..c1e8c4cc2c 100644 --- a/src/mainboard/google/kukui/panel_ps8640.c +++ b/src/mainboard/google/kukui/panel_ps8640.c @@ -49,7 +49,7 @@ struct panel_description *get_panel_description(int panel_id) power_on_ps8640(); u8 i2c_bus = 4, i2c_addr = 0x08; - mtk_i2c_bus_init(i2c_bus); + mtk_i2c_bus_init(i2c_bus, I2C_SPEED_FAST); ps8640_init(i2c_bus, i2c_addr); struct edid *edid = &ps8640_data.edid; diff --git a/src/mainboard/google/oak/bootblock.c b/src/mainboard/google/oak/bootblock.c index dd3d7a362a..365b80311e 100644 --- a/src/mainboard/google/oak/bootblock.c +++ b/src/mainboard/google/oak/bootblock.c @@ -70,7 +70,7 @@ void bootblock_mainboard_init(void) gpio_output(GPIO(SRCLKENAI2), 1); /* Init i2c bus 2 Timing register for TPM */ - mtk_i2c_bus_init(CONFIG_DRIVER_TPM_I2C_BUS); + mtk_i2c_bus_init(CONFIG_DRIVER_TPM_I2C_BUS, I2C_SPEED_FAST); mtk_spi_init(CONFIG_EC_GOOGLE_CHROMEEC_SPI_BUS, SPI_PAD1_MASK, 6*MHz, 0); diff --git a/src/mainboard/google/oak/mainboard.c b/src/mainboard/google/oak/mainboard.c index 55ef91aad1..9c8481f621 100644 --- a/src/mainboard/google/oak/mainboard.c +++ b/src/mainboard/google/oak/mainboard.c @@ -26,7 +26,7 @@ enum { static void configure_ext_buck(void) { - mtk_i2c_bus_init(EXT_BUCK_I2C_BUS); + mtk_i2c_bus_init(EXT_BUCK_I2C_BUS, I2C_SPEED_FAST); switch (board_id() + CONFIG_BOARD_ID_ADJUSTMENT) { case 3: @@ -97,7 +97,7 @@ static void configure_audio(void) } /* Init i2c bus Timing register for audio codecs */ - mtk_i2c_bus_init(CODEC_I2C_BUS); + mtk_i2c_bus_init(CODEC_I2C_BUS, I2C_SPEED_FAST); /* set I2S clock to 48KHz */ mt_pll_set_aud_div(48 * KHz); @@ -193,7 +193,7 @@ static int read_edid_from_ps8640(struct edid *edid) i2c_addr = 0x18; } - mtk_i2c_bus_init(i2c_bus); + mtk_i2c_bus_init(i2c_bus, I2C_SPEED_FAST); ps8640_init(i2c_bus, i2c_addr); if (ps8640_get_edid(i2c_bus, i2c_addr, edid)) { diff --git a/src/soc/mediatek/common/i2c_common.c b/src/soc/mediatek/common/i2c_common.c new file mode 100644 index 0000000000..d68fb87e53 --- /dev/null +++ b/src/soc/mediatek/common/i2c_common.c @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ + +#include +#include +#include +#include +#include + +void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) +{ + mtk_i2c_speed_init(bus, speed); + mtk_i2c_set_gpio_pinmux(bus); +} + +void mtk_i2c_dump_more_info(struct mt_i2c_regs *regs) +{ + printk(BIOS_DEBUG, "LTIMING %x\nCLK_DIV %x\n", + read32(®s->ltiming), + read32(®s->clock_div)); +} + +void mtk_i2c_config_timing(struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl) +{ + write32(®s->clock_div, bus_ctrl->ac_timing.inter_clk_div); + write32(®s->timing, bus_ctrl->ac_timing.htiming); + write32(®s->ltiming, bus_ctrl->ac_timing.ltiming); + write32(®s->hs, bus_ctrl->ac_timing.hs); + write32(®s->ext_conf, bus_ctrl->ac_timing.ext); +} diff --git a/src/soc/mediatek/common/include/soc/i2c_common.h b/src/soc/mediatek/common/include/soc/i2c_common.h index 63eef92f27..d59fcce2d2 100644 --- a/src/soc/mediatek/common/include/soc/i2c_common.h +++ b/src/soc/mediatek/common/include/soc/i2c_common.h @@ -154,5 +154,7 @@ int mtk_i2c_calculate_speed(uint8_t bus, uint32_t clk_src, uint32_t *timing_sample_cnt); void mtk_i2c_speed_init(uint8_t bus, uint32_t speed); void mtk_i2c_config_timing(struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl); +void mtk_i2c_set_gpio_pinmux(uint8_t bus); +void mtk_i2c_bus_init(uint8_t bus, uint32_t speed); #endif diff --git a/src/soc/mediatek/mt8173/i2c.c b/src/soc/mediatek/mt8173/i2c.c index 9cd20cf465..a87dd0b5db 100644 --- a/src/soc/mediatek/mt8173/i2c.c +++ b/src/soc/mediatek/mt8173/i2c.c @@ -60,13 +60,14 @@ _Static_assert(ARRAY_SIZE(mtk_i2c_bus_controller) == I2C_BUS_NUMBER, #define I2CLOG(fmt, arg...) #endif /* CONFIG_DEBUG_I2C */ -void mtk_i2c_bus_init(uint8_t bus) +void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) { uint8_t step_div; uint32_t i2c_freq; const uint8_t sample_div = 1; assert(bus < ARRAY_SIZE(mtk_i2c_bus_controller)); + assert(speed == I2C_SPEED_FAST); /* Calculate i2c frequency */ step_div = DIV_ROUND_UP(I2C_CLK_HZ, (400 * KHz * sample_div * 2)); diff --git a/src/soc/mediatek/mt8173/include/soc/i2c.h b/src/soc/mediatek/mt8173/include/soc/i2c.h index 02a21817d9..cc23f547ee 100644 --- a/src/soc/mediatek/mt8173/include/soc/i2c.h +++ b/src/soc/mediatek/mt8173/include/soc/i2c.h @@ -42,6 +42,4 @@ struct mt_i2c_regs { check_member(mt_i2c_regs, debug_stat, 0x64); -void mtk_i2c_bus_init(uint8_t bus); - #endif /* SOC_MEDIATEK_MT8173_I2C_H */ diff --git a/src/soc/mediatek/mt8183/i2c.c b/src/soc/mediatek/mt8183/i2c.c index c23377e8af..36354d2809 100644 --- a/src/soc/mediatek/mt8183/i2c.c +++ b/src/soc/mediatek/mt8183/i2c.c @@ -84,7 +84,7 @@ static const struct pad_func i2c_funcs[I2C_BUS_NUMBER][2] = { }, }; -static void mtk_i2c_set_gpio_pinmux(uint8_t bus) +void mtk_i2c_set_gpio_pinmux(uint8_t bus) { assert(bus < I2C_BUS_NUMBER); @@ -122,8 +122,9 @@ static void mtk_i2c_speed_init_soc(uint8_t bus) clock_div - 1); } -void mtk_i2c_bus_init(uint8_t bus) +void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) { + assert(speed == I2C_SPEED_FAST); mtk_i2c_speed_init_soc(bus); mtk_i2c_set_gpio_pinmux(bus); } diff --git a/src/soc/mediatek/mt8183/include/soc/i2c.h b/src/soc/mediatek/mt8183/include/soc/i2c.h index ebe75facce..237a182da9 100644 --- a/src/soc/mediatek/mt8183/include/soc/i2c.h +++ b/src/soc/mediatek/mt8183/include/soc/i2c.h @@ -46,6 +46,4 @@ struct mt_i2c_regs { check_member(mt_i2c_regs, multi_dma, 0xf8c); -void mtk_i2c_bus_init(uint8_t bus); - #endif /* SOC_MEDIATEK_MT8183_I2C_H */ diff --git a/src/soc/mediatek/mt8186/Makefile.mk b/src/soc/mediatek/mt8186/Makefile.mk index c6c47fdd92..4e0526c0e5 100644 --- a/src/soc/mediatek/mt8186/Makefile.mk +++ b/src/soc/mediatek/mt8186/Makefile.mk @@ -5,7 +5,7 @@ ifeq ($(CONFIG_SOC_MEDIATEK_MT8186),y) all-y += ../common/cpu_id.c all-y += ../common/flash_controller.c all-y += ../common/gpio_eint_v1.c ../common/gpio.c ../common/gpio_op.c gpio.c -all-y += ../common/i2c.c i2c.c +all-y += ../common/i2c.c ../common/i2c_common.c i2c.c all-y += ../common/pll.c pll.c all-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c all-y += ../common/timer.c ../common/timer_prepare.c diff --git a/src/soc/mediatek/mt8186/i2c.c b/src/soc/mediatek/mt8186/i2c.c index 536627583e..64506a625e 100644 --- a/src/soc/mediatek/mt8186/i2c.c +++ b/src/soc/mediatek/mt8186/i2c.c @@ -101,7 +101,7 @@ static const struct pad_func i2c_funcs[I2C_BUS_NUMBER][2] = { }, }; -static void mtk_i2c_set_gpio_pinmux(uint8_t bus) +void mtk_i2c_set_gpio_pinmux(uint8_t bus) { assert(bus < I2C_BUS_NUMBER); @@ -111,25 +111,3 @@ static void mtk_i2c_set_gpio_pinmux(uint8_t bus) gpio_set_pull(ptr[i].gpio, GPIO_PULL_ENABLE, ptr[i].select); } } - -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) -{ - mtk_i2c_speed_init(bus, speed); - mtk_i2c_set_gpio_pinmux(bus); -} - -void mtk_i2c_dump_more_info(struct mt_i2c_regs *regs) -{ - printk(BIOS_DEBUG, "LTIMING %x\nCLK_DIV %x\n", - read32(®s->ltiming), - read32(®s->clock_div)); -} - -void mtk_i2c_config_timing(struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl) -{ - write32(®s->clock_div, bus_ctrl->ac_timing.inter_clk_div); - write32(®s->timing, bus_ctrl->ac_timing.htiming); - write32(®s->ltiming, bus_ctrl->ac_timing.ltiming); - write32(®s->hs, bus_ctrl->ac_timing.hs); - write32(®s->ext_conf, bus_ctrl->ac_timing.ext); -} diff --git a/src/soc/mediatek/mt8186/include/soc/i2c.h b/src/soc/mediatek/mt8186/include/soc/i2c.h index 4024e7de6b..28da112efc 100644 --- a/src/soc/mediatek/mt8186/include/soc/i2c.h +++ b/src/soc/mediatek/mt8186/include/soc/i2c.h @@ -65,6 +65,4 @@ enum { check_member(mt_i2c_regs, multi_dma, 0xf8c); -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed); - #endif /* SOC_MEDIATEK_MT8186_I2C_H */ diff --git a/src/soc/mediatek/mt8188/Makefile.mk b/src/soc/mediatek/mt8188/Makefile.mk index dc6b649299..e28c50d02e 100644 --- a/src/soc/mediatek/mt8188/Makefile.mk +++ b/src/soc/mediatek/mt8188/Makefile.mk @@ -3,7 +3,7 @@ ifeq ($(CONFIG_SOC_MEDIATEK_MT8188),y) all-y += ../common/flash_controller.c all-y += ../common/gpio_eint_v1.c ../common/gpio.c ../common/gpio_op.c gpio.c -all-y += ../common/i2c.c i2c.c +all-y += ../common/i2c.c ../common/i2c_common.c i2c.c all-y += ../common/pll.c pll.c all-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c all-y += timer.c ../common/timer_prepare.c diff --git a/src/soc/mediatek/mt8188/i2c.c b/src/soc/mediatek/mt8188/i2c.c index edfe510202..6aae8fbc53 100644 --- a/src/soc/mediatek/mt8188/i2c.c +++ b/src/soc/mediatek/mt8188/i2c.c @@ -84,7 +84,7 @@ static const struct pad_func i2c_funcs[I2C_BUS_NUMBER][2] = { }, }; -static void mtk_i2c_set_gpio_pinmux(uint8_t bus) +void mtk_i2c_set_gpio_pinmux(uint8_t bus) { assert(bus < I2C_BUS_NUMBER); @@ -94,25 +94,3 @@ static void mtk_i2c_set_gpio_pinmux(uint8_t bus) gpio_set_pull(ptr[i].gpio, GPIO_PULL_ENABLE, ptr[i].select); } } - -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) -{ - mtk_i2c_speed_init(bus, speed); - mtk_i2c_set_gpio_pinmux(bus); -} - -void mtk_i2c_dump_more_info(struct mt_i2c_regs *regs) -{ - printk(BIOS_DEBUG, "LTIMING %x\nCLK_DIV %x\n", - read32(®s->ltiming), - read32(®s->clock_div)); -} - -void mtk_i2c_config_timing(struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl) -{ - write32(®s->clock_div, bus_ctrl->ac_timing.inter_clk_div); - write32(®s->timing, bus_ctrl->ac_timing.htiming); - write32(®s->ltiming, bus_ctrl->ac_timing.ltiming); - write32(®s->hs, bus_ctrl->ac_timing.hs); - write32(®s->ext_conf, bus_ctrl->ac_timing.ext); -} diff --git a/src/soc/mediatek/mt8188/include/soc/i2c.h b/src/soc/mediatek/mt8188/include/soc/i2c.h index 104da9a7be..615660bde8 100644 --- a/src/soc/mediatek/mt8188/include/soc/i2c.h +++ b/src/soc/mediatek/mt8188/include/soc/i2c.h @@ -69,6 +69,4 @@ enum { check_member(mt_i2c_regs, dma_nreq, 0xf94); -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed); - #endif /* SOC_MEDIATEK_MT8188_I2C_H */ diff --git a/src/soc/mediatek/mt8192/i2c.c b/src/soc/mediatek/mt8192/i2c.c index 3e8c21e30a..278972a6e7 100644 --- a/src/soc/mediatek/mt8192/i2c.c +++ b/src/soc/mediatek/mt8192/i2c.c @@ -109,7 +109,7 @@ static const struct pad_func i2c_funcs[I2C_BUS_NUMBER][2] = { }, }; -static void mtk_i2c_set_gpio_pinmux(uint8_t bus) +void mtk_i2c_set_gpio_pinmux(uint8_t bus) { assert(bus < I2C_BUS_NUMBER); @@ -169,8 +169,9 @@ static void mtk_i2c_speed_init_soc(uint8_t bus) write32(&mtk_i2c_bus_controller[bus].i2c_regs->ext_conf, I2C_FS_START_CON); } -void mtk_i2c_bus_init(uint8_t bus) +void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) { + assert(speed == I2C_SPEED_FAST); mtk_i2c_speed_init_soc(bus); mtk_i2c_set_gpio_pinmux(bus); } diff --git a/src/soc/mediatek/mt8192/include/soc/i2c.h b/src/soc/mediatek/mt8192/include/soc/i2c.h index fbf41e6c48..45d664e325 100644 --- a/src/soc/mediatek/mt8192/include/soc/i2c.h +++ b/src/soc/mediatek/mt8192/include/soc/i2c.h @@ -46,6 +46,4 @@ struct mt_i2c_regs { check_member(mt_i2c_regs, multi_dma, 0xf8c); -void mtk_i2c_bus_init(uint8_t bus); - #endif /* SOC_MEDIATEK_MT8192_I2C_H */ diff --git a/src/soc/mediatek/mt8195/Makefile.mk b/src/soc/mediatek/mt8195/Makefile.mk index c460d5894f..5e4e98f121 100644 --- a/src/soc/mediatek/mt8195/Makefile.mk +++ b/src/soc/mediatek/mt8195/Makefile.mk @@ -4,7 +4,7 @@ ifeq ($(CONFIG_SOC_MEDIATEK_MT8195),y) # for bootblock, verstage, romstage, ramstage all-y += ../common/flash_controller.c all-y += ../common/gpio_eint_v1.c ../common/gpio.c ../common/gpio_op.c gpio.c -all-y += ../common/i2c.c i2c.c +all-y += ../common/i2c.c ../common/i2c_common.c i2c.c all-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c all-y += ../common/timer.c ../common/timer_prepare.c all-y += ../common/uart.c diff --git a/src/soc/mediatek/mt8195/i2c.c b/src/soc/mediatek/mt8195/i2c.c index 1fa9608fb9..a9593fed19 100644 --- a/src/soc/mediatek/mt8195/i2c.c +++ b/src/soc/mediatek/mt8195/i2c.c @@ -89,7 +89,7 @@ static const struct pad_func i2c_funcs[I2C_BUS_NUMBER][2] = { }; -static void mtk_i2c_set_gpio_pinmux(uint8_t bus) +void mtk_i2c_set_gpio_pinmux(uint8_t bus) { assert(bus < I2C_BUS_NUMBER); @@ -100,25 +100,3 @@ static void mtk_i2c_set_gpio_pinmux(uint8_t bus) gpio_set_pull(ptr[i].gpio, GPIO_PULL_ENABLE, ptr[i].select); } } - -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) -{ - mtk_i2c_speed_init(bus, speed); - mtk_i2c_set_gpio_pinmux(bus); -} - -void mtk_i2c_dump_more_info(struct mt_i2c_regs *regs) -{ - printk(BIOS_DEBUG, "LTIMING %x\nCLK_DIV %x\n", - read32(®s->ltiming), - read32(®s->clock_div)); -} - -void mtk_i2c_config_timing(struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl) -{ - write32(®s->clock_div, bus_ctrl->ac_timing.inter_clk_div); - write32(®s->timing, bus_ctrl->ac_timing.htiming); - write32(®s->ltiming, bus_ctrl->ac_timing.ltiming); - write32(®s->hs, bus_ctrl->ac_timing.hs); - write32(®s->ext_conf, bus_ctrl->ac_timing.ext); -} diff --git a/src/soc/mediatek/mt8195/include/soc/i2c.h b/src/soc/mediatek/mt8195/include/soc/i2c.h index e7ba71474d..64d77ef410 100644 --- a/src/soc/mediatek/mt8195/include/soc/i2c.h +++ b/src/soc/mediatek/mt8195/include/soc/i2c.h @@ -59,6 +59,4 @@ enum { check_member(mt_i2c_regs, multi_dma, 0xf8c); -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed); - #endif /* SOC_MEDIATEK_MT8195_I2C_H */ diff --git a/src/soc/mediatek/mt8196/Makefile.mk b/src/soc/mediatek/mt8196/Makefile.mk index a1ee6fb304..5d6e1db74d 100644 --- a/src/soc/mediatek/mt8196/Makefile.mk +++ b/src/soc/mediatek/mt8196/Makefile.mk @@ -5,7 +5,7 @@ ifeq ($(CONFIG_SOC_MEDIATEK_MT8196),y) all-y += ../common/flash_controller.c all-y += ../common/gpio.c ../common/gpio_op.c gpio.c all-y += ../common/gpio_eint_v2.c gpio_eint.c -all-y += ../common/i2c.c i2c.c +all-y += ../common/i2c.c ../common/i2c_common.c i2c.c all-y += ../common/pll.c pll.c all-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c all-y += timer.c timer_prepare.c diff --git a/src/soc/mediatek/mt8196/i2c.c b/src/soc/mediatek/mt8196/i2c.c index c3d3ccb31c..21ae058fb8 100644 --- a/src/soc/mediatek/mt8196/i2c.c +++ b/src/soc/mediatek/mt8196/i2c.c @@ -156,7 +156,7 @@ static const struct pad_func i2c_funcs[I2C_BUS_NUMBER][2] = { }, }; -static void mtk_i2c_set_gpio_pinmux(uint8_t bus) +void mtk_i2c_set_gpio_pinmux(uint8_t bus) { assert(bus < I2C_BUS_NUMBER); @@ -167,25 +167,3 @@ static void mtk_i2c_set_gpio_pinmux(uint8_t bus) gpio_set_pull(ptr[i].gpio, GPIO_PULL_ENABLE, ptr[i].select); } } - -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed) -{ - mtk_i2c_speed_init(bus, speed); - mtk_i2c_set_gpio_pinmux(bus); -} - -void mtk_i2c_dump_more_info(struct mt_i2c_regs *regs) -{ - printk(BIOS_DEBUG, "LTIMING %x\nCLK_DIV %x\n", - read32(®s->ltiming), - read32(®s->clock_div)); -} - -void mtk_i2c_config_timing(struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl) -{ - write32(®s->clock_div, bus_ctrl->ac_timing.inter_clk_div); - write32(®s->timing, bus_ctrl->ac_timing.htiming); - write32(®s->ltiming, bus_ctrl->ac_timing.ltiming); - write32(®s->hs, bus_ctrl->ac_timing.hs); - write32(®s->ext_conf, bus_ctrl->ac_timing.ext); -} diff --git a/src/soc/mediatek/mt8196/include/soc/i2c.h b/src/soc/mediatek/mt8196/include/soc/i2c.h index 7dae2d804a..884902b2af 100644 --- a/src/soc/mediatek/mt8196/include/soc/i2c.h +++ b/src/soc/mediatek/mt8196/include/soc/i2c.h @@ -68,6 +68,4 @@ enum { check_member(mt_i2c_regs, fifo_thresh, 0xf8); -void mtk_i2c_bus_init(uint8_t bus, uint32_t speed); - #endif /* __SOC_MEDIATEK_MT8196_I2C_H__ */