5 #include <soc/mt6360.h>
54 #define CRC8_TABLE_SIZE 256
62 crc = table[(crc ^ *pdata++) & 0xff];
70 const u8 msbit = 0x80;
76 t = (t << 1) ^ (t & msbit ? polynomial : 0);
77 for (j = 0; j < i; j++)
78 table[i + j] = table[j] ^ t;
87 if ((reg & 0xc0) != 0) {
99 chunk[0] = (i2c->
addr & 0x7f) << 1;
100 chunk[1] = (reg & 0x3f);
125 chunk[0] = ((i2c->
addr & 0x7f) << 1) + 1;
126 chunk[1] = (reg & 0x3f);
131 if (chunk[3] != crc) {
133 __func__, crc, chunk[3]);
154 *data = (
val >> shift);
170 val |= (data << shift);
237 u32 voltage_uv_temp = 0;
256 voltage_uv_temp = voltage_uv - uv;
261 __func__,
id, voltage_uv);
265 voltage_uv_temp /= 10000;
266 voltage_uv_temp =
MIN(voltage_uv_temp, 0xa);
267 val |= (
u8)voltage_uv_temp;
288 if (voltage_uv == 0) {
294 voltage_uv +=
val * 10000;
348 val = (voltage_uv - 300000) / 5000;
350 val = (((voltage_uv - 500000) / 100000) << 4);
351 val += (((voltage_uv - 500000) % 100000) / 10000);
373 voltage_uv = 300000 +
val * 5000;
375 voltage_uv = 500000 + 100000 * (
val >> 4);
376 voltage_uv +=
MIN(
val & 0xf, 0xa) * 10000;
384 u8 delay01, delay02, delay03, delay04;
402 "%s: power off sequence delay: %#x, %#x, %#x, %#x\n",
403 __func__, delay01, delay02, delay03, delay04);
#define printk(level,...)
static int i2c_read_bytes(unsigned int bus, uint8_t slave, uint8_t reg, uint8_t *data, int len)
Read multi-bytes with two segments in one frame.
static int i2c_write_raw(unsigned int bus, uint8_t slave, uint8_t *data, int len)
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
static void mt6360_pmic_enable(enum mt6360_regulator_id id, uint8_t enable)
static const uint32_t mt6360_ldo1_vsel_table[0x10]
static bool is_valid_ldo(enum mt6360_regulator_id id)
static u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes)
static void mt6360_ldo_set_voltage(enum mt6360_regulator_id id, u32 voltage_uv)
void mt6360_init(uint8_t bus)
static void mt6360_ldo_enable(enum mt6360_regulator_id id, uint8_t enable)
u32 mt6360_get_voltage(enum mt6360_regulator_id id)
uint8_t mt6360_is_enabled(enum mt6360_regulator_id id)
static int mt6360_i2c_read_byte(u8 index, u8 reg, u8 *data)
static const uint32_t mt6360_ldo3_vsel_table[0x10]
static u8 crc8_table[MT6360_INDEX_COUNT][CRC8_TABLE_SIZE]
static int mt6360_read_interface(u8 index, u8 reg, u8 *data, u8 mask, u8 shift)
static uint8_t mt6360_ldo_is_enabled(enum mt6360_regulator_id id)
static u32 mt6360_ldo_get_voltage(enum mt6360_regulator_id id)
static void mt6360_pmic_set_voltage(enum mt6360_regulator_id id, u32 voltage_uv)
static u32 mt6360_pmic_get_voltage(enum mt6360_regulator_id id)
static bool is_valid_pmic(enum mt6360_regulator_id id)
static struct mt6360_i2c_data i2c_data[]
static int mt6360_config_interface(u8 index, u8 reg, u8 data, u8 mask, u8 shift)
void mt6360_set_voltage(enum mt6360_regulator_id id, u32 voltage_uv)
static int mt6360_i2c_write_byte(u8 index, u8 reg, u8 data)
static const uint32_t mt6360_ldo5_vsel_table[0x10]
static const struct mt6360_data regulator_data[MT6360_REGULATOR_COUNT]
static void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
void mt6360_enable(enum mt6360_regulator_id id, uint8_t enable)
static uint8_t mt6360_pmic_is_enabled(enum mt6360_regulator_id id)
#define MT6360_DATA(_enreg, _enmask, _vreg, _vmask, _table)
#define MT6360_LDO_I2C_ADDR
#define MT6360_PMIC_I2C_ADDR
const uint32_t * vsel_table