int stmpe_set_bits(struct stmpe *stmpe, u32 reg, u8 mask, u8 val) { u8 tmp; int err; err = stmpe_reg_read(stmpe, reg, &tmp); tmp = (tmp & ~mask) | val; if (!err) err = stmpe_reg_write(stmpe, reg, tmp); return err; }
static int stmpe_gpio_get(struct gpio_chip *chip, unsigned offset) { struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip); struct stmpe *stmpe = stmpe_gpio->stmpe; u8 reg = stmpe->regs[STMPE_IDX_GPMR_LSB + (offset / 8)]; u8 mask = BIT(offset % 8); int ret; ret = stmpe_reg_read(stmpe, reg); if (ret < 0) return ret; return !!(ret & mask); }
static ssize_t stmpe_read(struct cdev *cdev, void *_buf, size_t count, loff_t offset, ulong flags) { struct stmpe *stmpe = to_stmpe(cdev); u8 *buf = _buf; size_t i = count; int err; while (i) { err = stmpe_reg_read(stmpe, offset, buf); if (err) return (ssize_t)err; buf++; i--; offset++; } return count; }