We have much duplication in the i.MX8M boards related to PMIC setup, add a common header to cut down on it. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- include/pbl/i2c.h | 16 ++++++++++++++++ include/pbl/pmic.h | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 include/pbl/pmic.h diff --git a/include/pbl/i2c.h b/include/pbl/i2c.h index 1f26e3dfc6ca..d9910f531f53 100644 --- a/include/pbl/i2c.h +++ b/include/pbl/i2c.h @@ -18,4 +18,20 @@ static inline int pbl_i2c_xfer(struct pbl_i2c *i2c, struct pbl_i2c *imx8m_i2c_early_init(void __iomem *regs); struct pbl_i2c *ls1046_i2c_init(void __iomem *regs); +static inline int i2c_dev_probe(struct pbl_i2c *i2c, int addr, bool onebyte) +{ + u8 buf[1]; + struct i2c_msg msgs[] = { + { + .addr = addr, + .buf = buf, + .flags = I2C_M_RD, + .len = onebyte, + }, + }; + + return pbl_i2c_xfer(i2c, msgs, 1) == 1 ? 0 : -ENODEV; +} + + #endif /* __I2C_EARLY_H */ diff --git a/include/pbl/pmic.h b/include/pbl/pmic.h new file mode 100644 index 000000000000..0f882c5649d9 --- /dev/null +++ b/include/pbl/pmic.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __PBL_PMIC_H_ +#define __PBL_PMIC_H_ + +#include <pbl/i2c.h> + +struct pmic_config { + u8 reg; + u8 val; +}; + +static void pmic_reg_write(struct pbl_i2c *i2c, int addr, u8 reg, u8 val) +{ + int ret; + u8 buf[32]; + struct i2c_msg msgs[] = { + { + .addr = addr, + .buf = buf, + }, + }; + + buf[0] = reg; + buf[1] = val; + + msgs[0].len = 2; + + ret = pbl_i2c_xfer(i2c, msgs, ARRAY_SIZE(msgs)); + if (ret != 1) + pr_err("Failed to write to pmic@%x: %d\n", addr, ret); +} + +static inline void pmic_configure(struct pbl_i2c *i2c, u8 addr, + const struct pmic_config *config, + size_t config_len) +{ + for (; config_len--; config++) + pmic_reg_write(i2c, addr, config->reg, config->val); +} + +#endif -- 2.30.2