static void tps6586x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) { struct tps6586x *tps6586x = container_of(chip, struct tps6586x, gpio); __tps6586x_write(tps6586x->client, TPS6586X_GPIOSET2, value << offset); }
static inline int __tps6586x_writes(struct i2c_client *client, int reg, int len, uint8_t *val) { int ret, i; for (i = 0; i < len; i++) { ret = __tps6586x_write(client, reg + i, *(val + i)); if (ret < 0) return ret; } return 0; }
int tps6586x_update(struct device *dev, int reg, uint8_t val, uint8_t mask) { struct tps6586x *tps6586x = dev_get_drvdata(dev); uint8_t reg_val; int ret = 0; mutex_lock(&tps6586x->lock); ret = __tps6586x_read(tps6586x->client, reg, ®_val); if (ret) goto out; if ((reg_val & mask) != val) { reg_val = (reg_val & ~mask) | val; ret = __tps6586x_write(tps6586x->client, reg, reg_val); } out: mutex_unlock(&tps6586x->lock); return ret; }
int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask) { struct tps6586x *tps6586x = dev_get_drvdata(dev); uint8_t reg_val; int ret = 0; mutex_lock(&tps6586x->lock); ret = __tps6586x_read(to_i2c_client(dev), reg, ®_val); if (ret) goto out; if (reg_val & bit_mask) { reg_val &= ~bit_mask; ret = __tps6586x_write(to_i2c_client(dev), reg, reg_val); } out: mutex_unlock(&tps6586x->lock); return ret; }
int tps6586x_write(struct device *dev, int reg, uint8_t val) { return __tps6586x_write(to_i2c_client(dev), reg, val); }