![]() |
coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
|
#include <string.h>
#include <assert.h>
#include <console/console.h>
#include <delay.h>
#include <timer.h>
#include <symbols.h>
#include <device/mmio.h>
#include <soc/i2c.h>
#include <soc/i2c_common.h>
#include <device/i2c_simple.h>
Go to the source code of this file.
Functions | |
__weak void | mtk_i2c_dump_more_info (struct mt_i2c_regs *regs) |
__weak void | mtk_i2c_config_timing (struct mt_i2c_regs *regs, struct mtk_i2c *bus_ctrl) |
const struct i2c_spec_values * | mtk_i2c_get_spec (uint32_t speed) |
static void | i2c_hw_reset (uint8_t bus) |
static void | mtk_i2c_dump_info (struct mt_i2c_regs *regs) |
static int | mtk_i2c_transfer (uint8_t bus, struct i2c_msg *seg, enum i2c_modes mode) |
static bool | mtk_i2c_should_combine (struct i2c_msg *seg, int left_count) |
static int | mtk_i2c_max_step_cnt (uint32_t target_speed) |
int | platform_i2c_transfer (unsigned int bus, struct i2c_msg *segments, int seg_count) |
int | mtk_i2c_check_ac_timing (uint8_t bus, uint32_t clk_src, uint32_t check_speed, uint32_t step_cnt, uint32_t sample_cnt) |
int | mtk_i2c_calculate_speed (uint8_t bus, uint32_t clk_src, uint32_t target_speed, uint32_t *timing_step_cnt, uint32_t *timing_sample_cnt) |
void | mtk_i2c_speed_init (uint8_t bus, uint32_t speed) |
Variables | |
const struct i2c_spec_values | standard_mode_spec |
const struct i2c_spec_values | fast_mode_spec |
const struct i2c_spec_values | fast_mode_plus_spec |
Definition at line 55 of file i2c.c.
References mt_i2c_dma_regs::dma_rst, I2C_APDMA_ASYNC, I2C_CLR_FLAG, I2C_DMA_CLR_FLAG, I2C_DMA_HANDSHAKE_RST, I2C_DMA_HARD_RST, mtk_i2c::i2c_dma_regs, I2C_DMA_WARM_RST, I2C_HANDSHAKE_RST, mtk_i2c::i2c_regs, I2C_SOFT_RST, mtk_i2c_bus_controller, regs, udelay(), and write32().
Referenced by mtk_i2c_transfer().
int mtk_i2c_calculate_speed | ( | uint8_t | bus, |
uint32_t | clk_src, | ||
uint32_t | target_speed, | ||
uint32_t * | timing_step_cnt, | ||
uint32_t * | timing_sample_cnt | ||
) |
Definition at line 408 of file i2c.c.
References mtk_i2c::ac_timing, DIV_ROUND_UP, I2C_SPEED_HIGH, mtk_i2c_ac_timing::inter_clk_div, MAX_SAMPLE_CNT_DIV, mtk_i2c_bus_controller, mtk_i2c_check_ac_timing(), and mtk_i2c_max_step_cnt().
Referenced by mtk_i2c_speed_init().
int mtk_i2c_check_ac_timing | ( | uint8_t | bus, |
uint32_t | clk_src, | ||
uint32_t | check_speed, | ||
uint32_t | step_cnt, | ||
uint32_t | sample_cnt | ||
) |
Definition at line 339 of file i2c.c.
References mtk_i2c::ac_timing, DIV_ROUND_UP, mtk_i2c_ac_timing::ext, GENMASK, mtk_i2c_ac_timing::hs, mtk_i2c_ac_timing::htiming, I2C_SPEED_FAST_PLUS, I2C_TIME_DEFAULT_VALUE, mtk_i2c_ac_timing::ltiming, i2c_spec_values::max_hd_dat_ns, i2c_spec_values::min_low_ns, i2c_spec_values::min_su_dat_ns, i2c_spec_values::min_su_sta_ns, mtk_i2c_bus_controller, mtk_i2c_get_spec(), mtk_i2c_max_step_cnt(), and NSECS_PER_SEC.
Referenced by mtk_i2c_calculate_speed().
__weak void mtk_i2c_config_timing | ( | struct mt_i2c_regs * | regs, |
struct mtk_i2c * | bus_ctrl | ||
) |
Definition at line 40 of file i2c.c.
Referenced by mtk_i2c_speed_init().
|
inlinestatic |
Definition at line 85 of file i2c.c.
References BIOS_DEBUG, mtk_i2c_dump_more_info(), printk, and read32().
Referenced by mtk_i2c_transfer().
__weak void mtk_i2c_dump_more_info | ( | struct mt_i2c_regs * | regs | ) |
Definition at line 35 of file i2c.c.
Referenced by mtk_i2c_dump_info().
const struct i2c_spec_values* mtk_i2c_get_spec | ( | uint32_t | speed | ) |
Definition at line 45 of file i2c.c.
References fast_mode_plus_spec, fast_mode_spec, I2C_SPEED_FAST, I2C_SPEED_STANDARD, and standard_mode_spec.
Referenced by mtk_i2c_check_ac_timing().
|
static |
Definition at line 293 of file i2c.c.
References I2C_SPEED_FAST_PLUS, MAX_HS_STEP_CNT_DIV, and MAX_STEP_CNT_DIV.
Referenced by mtk_i2c_calculate_speed(), and mtk_i2c_check_ac_timing().
Definition at line 285 of file i2c.c.
References I2C_M_RD, and slave.
Referenced by platform_i2c_transfer().
Definition at line 494 of file i2c.c.
References mtk_i2c::ac_timing, BIOS_ERR, mtk_i2c_ac_timing::hs, I2C_BUS_NUMBER, I2C_CLK_HZ, mtk_i2c::i2c_regs, I2C_SPEED_FAST, I2C_SPEED_FAST_PLUS, I2C_TIME_CLR_VALUE, mtk_i2c_ac_timing::inter_clk_div, MAX_CLOCK_DIV, mtk_i2c_bus_controller, mtk_i2c_calculate_speed(), mtk_i2c_config_timing(), and printk.
Referenced by mtk_i2c_bus_init().
Definition at line 109 of file i2c.c.
References ACK_ERR_DET_EN, addr, assert, ASYNC_MODE, BIOS_ERR, i2c_msg::buf, CLK_EXT, DIR_CHG, mt_i2c_dma_regs::dma_con, mt_i2c_dma_regs::dma_en, DMA_EN, mt_i2c_dma_regs::dma_int_flag, mt_i2c_dma_regs::dma_rx_len, mt_i2c_dma_regs::dma_rx_mem_addr, mt_i2c_dma_regs::dma_tx_len, mt_i2c_dma_regs::dma_tx_mem_addr, DMAACK_EN, I2C_ACKERR, I2C_APDMA_ASYNC, I2C_DMA_ASYNC_MODE, I2C_DMA_CLR_FLAG, I2C_DMA_CON_RX, I2C_DMA_CON_TX, I2C_DMA_DIR_CHANGE, mtk_i2c::i2c_dma_regs, I2C_DMA_SKIP_CONFIG, I2C_DMA_START_EN, I2C_HS_NACKERR, i2c_hw_reset(), I2C_OK, I2C_READ_MODE, mtk_i2c::i2c_regs, I2C_TRANSAC_COMP, I2C_TRANSFER_FAIL_ACKERR, I2C_TRANSFER_FAIL_HS_NACKERR, I2C_TRANSFER_FAIL_TIMEOUT, I2C_WRITE_MODE, I2C_WRITE_READ_MODE, i2c_msg::len, memcpy(), mtk_i2c_bus_controller, mtk_i2c_dump_info(), NULL, printk, read32(), regs, REPEATED_START_FLAG, i2c_msg::slave, stopwatch_expired(), stopwatch_init_usecs_expire(), and write32().
Referenced by platform_i2c_transfer().
Definition at line 301 of file i2c.c.
References i2c_msg::flags, I2C_M_RD, I2C_READ_MODE, I2C_WRITE_MODE, I2C_WRITE_READ_MODE, mtk_i2c_should_combine(), and mtk_i2c_transfer().
const struct i2c_spec_values fast_mode_plus_spec |
Definition at line 1 of file i2c.c.
Referenced by mtk_i2c_get_spec().
const struct i2c_spec_values fast_mode_spec |
Definition at line 1 of file i2c.c.
Referenced by mtk_i2c_get_spec().
const struct i2c_spec_values standard_mode_spec |
Definition at line 1 of file i2c.c.
Referenced by mtk_i2c_get_spec().