Lines Matching +full:dac +full:- +full:mode +full:- +full:mask
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright 2003 Vivien Chappelier <vivien.chappelier@linux-mips.org>
35 ad1843_PDNO = { 0, 14, 1 }, /* Converter Power-Down Flag */
43 ad1843_RD2M = { 3, 0, 5 }, /* Right DAC 2 Mix Gain/Atten */
44 ad1843_RD2MM = { 3, 7, 1 }, /* Right DAC 2 Mix Mute */
45 ad1843_LD2M = { 3, 8, 5 }, /* Left DAC 2 Mix Gain/Atten */
46 ad1843_LD2MM = { 3, 15, 1 }, /* Left DAC 2 Mix Mute */
83 ad1843_DAMIX = { 25, 14, 1 }, /* DAC Digital Mix Enable */
84 ad1843_DRSFLT = { 25, 15, 1 }, /* Digital Reampler Filter Mode */
87 ad1843_ADTLK = { 26, 4, 1 }, /* ADC Transmit Lock Mode Select */
91 ad1843_DA1SM = { 26, 14, 1 }, /* DAC1 Stereo/Mono Mode Select */
92 ad1843_DA2SM = { 26, 15, 1 }, /* DAC2 Stereo/Mono Mode Select */
177 w = ad1843->read(ad1843->chip, field->reg); in ad1843_read_bits()
178 return w >> field->lo_bit & ((1 << field->nbits) - 1); in ad1843_read_bits()
189 int w, mask, oldval, newbits; in ad1843_write_bits() local
191 w = ad1843->read(ad1843->chip, field->reg); in ad1843_write_bits()
192 mask = ((1 << field->nbits) - 1) << field->lo_bit; in ad1843_write_bits()
193 oldval = (w & mask) >> field->lo_bit; in ad1843_write_bits()
194 newbits = (newval << field->lo_bit) & mask; in ad1843_write_bits()
195 w = (w & ~mask) | newbits; in ad1843_write_bits()
196 ad1843->write(ad1843->chip, field->reg, w); in ad1843_write_bits()
218 int w = 0, mask, *value, reg = -1; in ad1843_read_multi() local
221 while (--argcount >= 0) { in ad1843_read_multi()
224 if (reg == -1) { in ad1843_read_multi()
225 reg = fp->reg; in ad1843_read_multi()
226 w = ad1843->read(ad1843->chip, reg); in ad1843_read_multi()
229 mask = (1 << fp->nbits) - 1; in ad1843_read_multi()
230 *value = w >> fp->lo_bit & mask; in ad1843_read_multi()
252 int w, m, mask, bits; in ad1843_write_multi() local
254 mask = 0; in ad1843_write_multi()
256 reg = -1; in ad1843_write_multi()
259 while (--argcount >= 0) { in ad1843_write_multi()
262 if (reg == -1) in ad1843_write_multi()
263 reg = fp->reg; in ad1843_write_multi()
265 WARN_ON(reg != fp->reg); in ad1843_write_multi()
266 m = ((1 << fp->nbits) - 1) << fp->lo_bit; in ad1843_write_multi()
267 mask |= m; in ad1843_write_multi()
268 bits |= (value << fp->lo_bit) & m; in ad1843_write_multi()
272 if (~mask & 0xFFFF) in ad1843_write_multi()
273 w = ad1843->read(ad1843->chip, reg); in ad1843_write_multi()
276 w = (w & ~mask) | bits; in ad1843_write_multi()
277 ad1843->write(ad1843->chip, reg, w); in ad1843_write_multi()
285 ret = (1 << gp->lfield->nbits); in ad1843_get_gain_max()
286 if (!gp->lmute) in ad1843_get_gain_max()
287 ret -= 1; in ad1843_get_gain_max()
300 unsigned short mask = (1 << gp->lfield->nbits) - 1; in ad1843_get_gain() local
302 ad1843_read_multi(ad1843, 2, gp->lfield, &lg, gp->rfield, &rg); in ad1843_get_gain()
303 if (gp->negative) { in ad1843_get_gain()
304 lg = mask - lg; in ad1843_get_gain()
305 rg = mask - rg; in ad1843_get_gain()
307 if (gp->lmute) { in ad1843_get_gain()
308 ad1843_read_multi(ad1843, 2, gp->lmute, &lm, gp->rmute, &rm); in ad1843_get_gain()
326 unsigned short mask = (1 << gp->lfield->nbits) - 1; in ad1843_set_gain() local
328 int lg = (newval >> 0) & mask; in ad1843_set_gain()
329 int rg = (newval >> 8) & mask; in ad1843_set_gain()
333 if (gp->negative) { in ad1843_set_gain()
334 lg = mask - lg; in ad1843_set_gain()
335 rg = mask - rg; in ad1843_set_gain()
337 if (gp->lmute) in ad1843_set_gain()
338 ad1843_write_multi(ad1843, 2, gp->lmute, lm, gp->rmute, rm); in ad1843_set_gain()
339 ad1843_write_multi(ad1843, 2, gp->lfield, lg, gp->rfield, rg); in ad1843_set_gain()
360 * Returns newsrc on success, -errno on failure.
366 return -EINVAL; in ad1843_set_recsrc()
462 * sheet, section "START-UP SEQUENCE". The numbered comments are
464 * 52-54, for more info.
466 * return 0 on success, -errno on failure. */
474 return -EIO; in ad1843_init()
487 return -EIO; in ad1843_init()
540 /* Set Speaker Out level to +/- 4V and unmute it. */ in ad1843_init()