/** * wm831x_bulk_read: Read multiple WM831x registers * * @wm831x: Device to read from * @reg: First register * @count: Number of registers * @buf: Buffer to fill. */ int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg, int count, u16 *buf) { int ret; mutex_lock(&wm831x->io_lock); ret = wm831x_read(wm831x, reg, count * 2, buf); mutex_unlock(&wm831x->io_lock); return ret; }
/** * wm831x_reg_read: Read a single WM831x register. * * @wm831x: Device to read from. * @reg: Register to read. */ int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg) { unsigned short val; int ret; mutex_lock(&wm831x->io_lock); ret = wm831x_read(wm831x, reg, 2, &val); mutex_unlock(&wm831x->io_lock); if (ret < 0) return ret; else return val; }
/** * wm831x_set_bits: Set the value of a bitfield in a WM831x register * * @wm831x: Device to write to. * @reg: Register to write to. * @mask: Mask of bits to set. * @val: Value to set (unshifted) */ int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg, unsigned short mask, unsigned short val) { int ret; u16 r; mutex_lock(&wm831x->io_lock); ret = wm831x_read(wm831x, reg, 2, &r); if (ret < 0) goto out; r &= ~mask; r |= val & mask; ret = wm831x_write(wm831x, reg, 2, &r); out: mutex_unlock(&wm831x->io_lock); return ret; }