Linux Audio

Check our new training course

Loading...
v4.10.11
  1/*
  2 * soc-ops.c  --  Generic ASoC operations
  3 *
  4 * Copyright 2005 Wolfson Microelectronics PLC.
  5 * Copyright 2005 Openedhand Ltd.
  6 * Copyright (C) 2010 Slimlogic Ltd.
  7 * Copyright (C) 2010 Texas Instruments Inc.
  8 *
  9 * Author: Liam Girdwood <lrg@slimlogic.co.uk>
 10 *         with code, comments and ideas from :-
 11 *         Richard Purdie <richard@openedhand.com>
 12 *
 13 *  This program is free software; you can redistribute  it and/or modify it
 14 *  under  the terms of  the GNU General  Public License as published by the
 15 *  Free Software Foundation;  either version 2 of the  License, or (at your
 16 *  option) any later version.
 17 */
 18
 19#include <linux/module.h>
 20#include <linux/moduleparam.h>
 21#include <linux/init.h>
 22#include <linux/delay.h>
 23#include <linux/pm.h>
 24#include <linux/bitops.h>
 25#include <linux/ctype.h>
 26#include <linux/slab.h>
 27#include <sound/core.h>
 28#include <sound/jack.h>
 29#include <sound/pcm.h>
 30#include <sound/pcm_params.h>
 31#include <sound/soc.h>
 32#include <sound/soc-dpcm.h>
 33#include <sound/initval.h>
 34
 35/**
 36 * snd_soc_info_enum_double - enumerated double mixer info callback
 37 * @kcontrol: mixer control
 38 * @uinfo: control element information
 39 *
 40 * Callback to provide information about a double enumerated
 41 * mixer control.
 42 *
 43 * Returns 0 for success.
 44 */
 45int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
 46	struct snd_ctl_elem_info *uinfo)
 47{
 48	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
 49
 50	return snd_ctl_enum_info(uinfo, e->shift_l == e->shift_r ? 1 : 2,
 51				 e->items, e->texts);
 52}
 53EXPORT_SYMBOL_GPL(snd_soc_info_enum_double);
 54
 55/**
 56 * snd_soc_get_enum_double - enumerated double mixer get callback
 57 * @kcontrol: mixer control
 58 * @ucontrol: control element information
 59 *
 60 * Callback to get the value of a double enumerated mixer.
 61 *
 62 * Returns 0 for success.
 63 */
 64int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
 65	struct snd_ctl_elem_value *ucontrol)
 66{
 67	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
 68	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
 69	unsigned int val, item;
 70	unsigned int reg_val;
 71	int ret;
 72
 73	ret = snd_soc_component_read(component, e->reg, &reg_val);
 74	if (ret)
 75		return ret;
 76	val = (reg_val >> e->shift_l) & e->mask;
 77	item = snd_soc_enum_val_to_item(e, val);
 78	ucontrol->value.enumerated.item[0] = item;
 79	if (e->shift_l != e->shift_r) {
 80		val = (reg_val >> e->shift_r) & e->mask;
 81		item = snd_soc_enum_val_to_item(e, val);
 82		ucontrol->value.enumerated.item[1] = item;
 83	}
 84
 85	return 0;
 86}
 87EXPORT_SYMBOL_GPL(snd_soc_get_enum_double);
 88
 89/**
 90 * snd_soc_put_enum_double - enumerated double mixer put callback
 91 * @kcontrol: mixer control
 92 * @ucontrol: control element information
 93 *
 94 * Callback to set the value of a double enumerated mixer.
 95 *
 96 * Returns 0 for success.
 97 */
 98int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
 99	struct snd_ctl_elem_value *ucontrol)
100{
101	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
102	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
103	unsigned int *item = ucontrol->value.enumerated.item;
104	unsigned int val;
105	unsigned int mask;
106
107	if (item[0] >= e->items)
108		return -EINVAL;
109	val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l;
110	mask = e->mask << e->shift_l;
111	if (e->shift_l != e->shift_r) {
112		if (item[1] >= e->items)
113			return -EINVAL;
114		val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_r;
115		mask |= e->mask << e->shift_r;
116	}
117
118	return snd_soc_component_update_bits(component, e->reg, mask, val);
119}
120EXPORT_SYMBOL_GPL(snd_soc_put_enum_double);
121
122/**
123 * snd_soc_read_signed - Read a codec register and interprete as signed value
124 * @component: component
125 * @reg: Register to read
126 * @mask: Mask to use after shifting the register value
127 * @shift: Right shift of register value
128 * @sign_bit: Bit that describes if a number is negative or not.
129 * @signed_val: Pointer to where the read value should be stored
130 *
131 * This functions reads a codec register. The register value is shifted right
132 * by 'shift' bits and masked with the given 'mask'. Afterwards it translates
133 * the given registervalue into a signed integer if sign_bit is non-zero.
134 *
135 * Returns 0 on sucess, otherwise an error value
136 */
137static int snd_soc_read_signed(struct snd_soc_component *component,
138	unsigned int reg, unsigned int mask, unsigned int shift,
139	unsigned int sign_bit, int *signed_val)
140{
141	int ret;
142	unsigned int val;
143
144	ret = snd_soc_component_read(component, reg, &val);
145	if (ret < 0)
146		return ret;
147
148	val = (val >> shift) & mask;
149
150	if (!sign_bit) {
151		*signed_val = val;
152		return 0;
153	}
154
155	/* non-negative number */
156	if (!(val & BIT(sign_bit))) {
157		*signed_val = val;
158		return 0;
159	}
160
161	ret = val;
162
163	/*
164	 * The register most probably does not contain a full-sized int.
165	 * Instead we have an arbitrary number of bits in a signed
166	 * representation which has to be translated into a full-sized int.
167	 * This is done by filling up all bits above the sign-bit.
168	 */
169	ret |= ~((int)(BIT(sign_bit) - 1));
170
171	*signed_val = ret;
172
173	return 0;
174}
175
176/**
177 * snd_soc_info_volsw - single mixer info callback
178 * @kcontrol: mixer control
179 * @uinfo: control element information
180 *
181 * Callback to provide information about a single mixer control, or a double
182 * mixer control that spans 2 registers.
183 *
184 * Returns 0 for success.
185 */
186int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
187	struct snd_ctl_elem_info *uinfo)
188{
189	struct soc_mixer_control *mc =
190		(struct soc_mixer_control *)kcontrol->private_value;
191	int platform_max;
192
193	if (!mc->platform_max)
194		mc->platform_max = mc->max;
195	platform_max = mc->platform_max;
196
197	if (platform_max == 1 && !strstr(kcontrol->id.name, " Volume"))
198		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
199	else
200		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
201
202	uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
203	uinfo->value.integer.min = 0;
204	uinfo->value.integer.max = platform_max - mc->min;
205	return 0;
206}
207EXPORT_SYMBOL_GPL(snd_soc_info_volsw);
208
209/**
210 * snd_soc_info_volsw_sx - Mixer info callback for SX TLV controls
211 * @kcontrol: mixer control
212 * @uinfo: control element information
213 *
214 * Callback to provide information about a single mixer control, or a double
215 * mixer control that spans 2 registers of the SX TLV type. SX TLV controls
216 * have a range that represents both positive and negative values either side
217 * of zero but without a sign bit.
218 *
219 * Returns 0 for success.
220 */
221int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol,
222			  struct snd_ctl_elem_info *uinfo)
223{
224	struct soc_mixer_control *mc =
225		(struct soc_mixer_control *)kcontrol->private_value;
226
227	snd_soc_info_volsw(kcontrol, uinfo);
228	/* Max represents the number of levels in an SX control not the
229	 * maximum value, so add the minimum value back on
230	 */
231	uinfo->value.integer.max += mc->min;
232
233	return 0;
234}
235EXPORT_SYMBOL_GPL(snd_soc_info_volsw_sx);
236
237/**
238 * snd_soc_get_volsw - single mixer get callback
239 * @kcontrol: mixer control
240 * @ucontrol: control element information
241 *
242 * Callback to get the value of a single mixer control, or a double mixer
243 * control that spans 2 registers.
244 *
245 * Returns 0 for success.
246 */
247int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
248	struct snd_ctl_elem_value *ucontrol)
249{
250	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
251	struct soc_mixer_control *mc =
252		(struct soc_mixer_control *)kcontrol->private_value;
253	unsigned int reg = mc->reg;
254	unsigned int reg2 = mc->rreg;
255	unsigned int shift = mc->shift;
256	unsigned int rshift = mc->rshift;
257	int max = mc->max;
258	int min = mc->min;
259	int sign_bit = mc->sign_bit;
260	unsigned int mask = (1 << fls(max)) - 1;
261	unsigned int invert = mc->invert;
262	int val;
263	int ret;
264
265	if (sign_bit)
266		mask = BIT(sign_bit + 1) - 1;
267
268	ret = snd_soc_read_signed(component, reg, mask, shift, sign_bit, &val);
269	if (ret)
270		return ret;
271
272	ucontrol->value.integer.value[0] = val - min;
273	if (invert)
274		ucontrol->value.integer.value[0] =
275			max - ucontrol->value.integer.value[0];
276
277	if (snd_soc_volsw_is_stereo(mc)) {
278		if (reg == reg2)
279			ret = snd_soc_read_signed(component, reg, mask, rshift,
280				sign_bit, &val);
281		else
282			ret = snd_soc_read_signed(component, reg2, mask, shift,
283				sign_bit, &val);
284		if (ret)
285			return ret;
286
287		ucontrol->value.integer.value[1] = val - min;
288		if (invert)
289			ucontrol->value.integer.value[1] =
290				max - ucontrol->value.integer.value[1];
291	}
292
293	return 0;
294}
295EXPORT_SYMBOL_GPL(snd_soc_get_volsw);
296
297/**
298 * snd_soc_put_volsw - single mixer put callback
299 * @kcontrol: mixer control
300 * @ucontrol: control element information
301 *
302 * Callback to set the value of a single mixer control, or a double mixer
303 * control that spans 2 registers.
304 *
305 * Returns 0 for success.
306 */
307int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
308	struct snd_ctl_elem_value *ucontrol)
309{
310	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
311	struct soc_mixer_control *mc =
312		(struct soc_mixer_control *)kcontrol->private_value;
313	unsigned int reg = mc->reg;
314	unsigned int reg2 = mc->rreg;
315	unsigned int shift = mc->shift;
316	unsigned int rshift = mc->rshift;
317	int max = mc->max;
318	int min = mc->min;
319	unsigned int sign_bit = mc->sign_bit;
320	unsigned int mask = (1 << fls(max)) - 1;
321	unsigned int invert = mc->invert;
322	int err;
323	bool type_2r = false;
324	unsigned int val2 = 0;
325	unsigned int val, val_mask;
326
327	if (sign_bit)
328		mask = BIT(sign_bit + 1) - 1;
329
330	val = ((ucontrol->value.integer.value[0] + min) & mask);
331	if (invert)
332		val = max - val;
333	val_mask = mask << shift;
334	val = val << shift;
335	if (snd_soc_volsw_is_stereo(mc)) {
336		val2 = ((ucontrol->value.integer.value[1] + min) & mask);
337		if (invert)
338			val2 = max - val2;
339		if (reg == reg2) {
340			val_mask |= mask << rshift;
341			val |= val2 << rshift;
342		} else {
343			val2 = val2 << shift;
344			type_2r = true;
345		}
346	}
347	err = snd_soc_component_update_bits(component, reg, val_mask, val);
348	if (err < 0)
349		return err;
350
351	if (type_2r)
352		err = snd_soc_component_update_bits(component, reg2, val_mask,
353			val2);
354
355	return err;
356}
357EXPORT_SYMBOL_GPL(snd_soc_put_volsw);
358
359/**
360 * snd_soc_get_volsw_sx - single mixer get callback
361 * @kcontrol: mixer control
362 * @ucontrol: control element information
363 *
364 * Callback to get the value of a single mixer control, or a double mixer
365 * control that spans 2 registers.
366 *
367 * Returns 0 for success.
368 */
369int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol,
370		      struct snd_ctl_elem_value *ucontrol)
371{
372	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
373	struct soc_mixer_control *mc =
374	    (struct soc_mixer_control *)kcontrol->private_value;
375	unsigned int reg = mc->reg;
376	unsigned int reg2 = mc->rreg;
377	unsigned int shift = mc->shift;
378	unsigned int rshift = mc->rshift;
379	int max = mc->max;
380	int min = mc->min;
381	int mask = (1 << (fls(min + max) - 1)) - 1;
382	unsigned int val;
383	int ret;
384
385	ret = snd_soc_component_read(component, reg, &val);
386	if (ret < 0)
387		return ret;
388
389	ucontrol->value.integer.value[0] = ((val >> shift) - min) & mask;
390
391	if (snd_soc_volsw_is_stereo(mc)) {
392		ret = snd_soc_component_read(component, reg2, &val);
393		if (ret < 0)
394			return ret;
395
396		val = ((val >> rshift) - min) & mask;
397		ucontrol->value.integer.value[1] = val;
398	}
399
400	return 0;
401}
402EXPORT_SYMBOL_GPL(snd_soc_get_volsw_sx);
403
404/**
405 * snd_soc_put_volsw_sx - double mixer set callback
406 * @kcontrol: mixer control
407 * @ucontrol: control element information
408 *
409 * Callback to set the value of a double mixer control that spans 2 registers.
410 *
411 * Returns 0 for success.
412 */
413int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
414			 struct snd_ctl_elem_value *ucontrol)
415{
416	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
417	struct soc_mixer_control *mc =
418	    (struct soc_mixer_control *)kcontrol->private_value;
419
420	unsigned int reg = mc->reg;
421	unsigned int reg2 = mc->rreg;
422	unsigned int shift = mc->shift;
423	unsigned int rshift = mc->rshift;
424	int max = mc->max;
425	int min = mc->min;
426	int mask = (1 << (fls(min + max) - 1)) - 1;
427	int err = 0;
428	unsigned int val, val_mask, val2 = 0;
429
430	val_mask = mask << shift;
431	val = (ucontrol->value.integer.value[0] + min) & mask;
432	val = val << shift;
433
434	err = snd_soc_component_update_bits(component, reg, val_mask, val);
435	if (err < 0)
436		return err;
437
438	if (snd_soc_volsw_is_stereo(mc)) {
439		val_mask = mask << rshift;
440		val2 = (ucontrol->value.integer.value[1] + min) & mask;
441		val2 = val2 << rshift;
442
443		err = snd_soc_component_update_bits(component, reg2, val_mask,
444			val2);
445	}
446	return err;
447}
448EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx);
449
450/**
451 * snd_soc_info_volsw_range - single mixer info callback with range.
452 * @kcontrol: mixer control
453 * @uinfo: control element information
454 *
455 * Callback to provide information, within a range, about a single
456 * mixer control.
457 *
458 * returns 0 for success.
459 */
460int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
461	struct snd_ctl_elem_info *uinfo)
462{
463	struct soc_mixer_control *mc =
464		(struct soc_mixer_control *)kcontrol->private_value;
465	int platform_max;
466	int min = mc->min;
467
468	if (!mc->platform_max)
469		mc->platform_max = mc->max;
470	platform_max = mc->platform_max;
471
472	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
473	uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
474	uinfo->value.integer.min = 0;
475	uinfo->value.integer.max = platform_max - min;
476
477	return 0;
478}
479EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range);
480
481/**
482 * snd_soc_put_volsw_range - single mixer put value callback with range.
483 * @kcontrol: mixer control
484 * @ucontrol: control element information
485 *
486 * Callback to set the value, within a range, for a single mixer control.
487 *
488 * Returns 0 for success.
489 */
490int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
491	struct snd_ctl_elem_value *ucontrol)
492{
493	struct soc_mixer_control *mc =
494		(struct soc_mixer_control *)kcontrol->private_value;
495	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
496	unsigned int reg = mc->reg;
497	unsigned int rreg = mc->rreg;
498	unsigned int shift = mc->shift;
499	int min = mc->min;
500	int max = mc->max;
501	unsigned int mask = (1 << fls(max)) - 1;
502	unsigned int invert = mc->invert;
503	unsigned int val, val_mask;
504	int ret;
505
506	if (invert)
507		val = (max - ucontrol->value.integer.value[0]) & mask;
508	else
509		val = ((ucontrol->value.integer.value[0] + min) & mask);
510	val_mask = mask << shift;
511	val = val << shift;
512
513	ret = snd_soc_component_update_bits(component, reg, val_mask, val);
514	if (ret < 0)
515		return ret;
516
517	if (snd_soc_volsw_is_stereo(mc)) {
518		if (invert)
519			val = (max - ucontrol->value.integer.value[1]) & mask;
520		else
521			val = ((ucontrol->value.integer.value[1] + min) & mask);
522		val_mask = mask << shift;
523		val = val << shift;
524
525		ret = snd_soc_component_update_bits(component, rreg, val_mask,
526			val);
527	}
528
529	return ret;
530}
531EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range);
532
533/**
534 * snd_soc_get_volsw_range - single mixer get callback with range
535 * @kcontrol: mixer control
536 * @ucontrol: control element information
537 *
538 * Callback to get the value, within a range, of a single mixer control.
539 *
540 * Returns 0 for success.
541 */
542int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
543	struct snd_ctl_elem_value *ucontrol)
544{
545	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
546	struct soc_mixer_control *mc =
547		(struct soc_mixer_control *)kcontrol->private_value;
548	unsigned int reg = mc->reg;
549	unsigned int rreg = mc->rreg;
550	unsigned int shift = mc->shift;
551	int min = mc->min;
552	int max = mc->max;
553	unsigned int mask = (1 << fls(max)) - 1;
554	unsigned int invert = mc->invert;
555	unsigned int val;
556	int ret;
557
558	ret = snd_soc_component_read(component, reg, &val);
559	if (ret)
560		return ret;
561
562	ucontrol->value.integer.value[0] = (val >> shift) & mask;
563	if (invert)
564		ucontrol->value.integer.value[0] =
565			max - ucontrol->value.integer.value[0];
566	else
567		ucontrol->value.integer.value[0] =
568			ucontrol->value.integer.value[0] - min;
569
570	if (snd_soc_volsw_is_stereo(mc)) {
571		ret = snd_soc_component_read(component, rreg, &val);
572		if (ret)
573			return ret;
574
575		ucontrol->value.integer.value[1] = (val >> shift) & mask;
576		if (invert)
577			ucontrol->value.integer.value[1] =
578				max - ucontrol->value.integer.value[1];
579		else
580			ucontrol->value.integer.value[1] =
581				ucontrol->value.integer.value[1] - min;
582	}
583
584	return 0;
585}
586EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range);
587
588/**
589 * snd_soc_limit_volume - Set new limit to an existing volume control.
590 *
591 * @card: where to look for the control
592 * @name: Name of the control
593 * @max: new maximum limit
594 *
595 * Return 0 for success, else error.
596 */
597int snd_soc_limit_volume(struct snd_soc_card *card,
598	const char *name, int max)
599{
600	struct snd_card *snd_card = card->snd_card;
601	struct snd_kcontrol *kctl;
602	struct soc_mixer_control *mc;
603	int found = 0;
604	int ret = -EINVAL;
605
606	/* Sanity check for name and max */
607	if (unlikely(!name || max <= 0))
608		return -EINVAL;
609
610	list_for_each_entry(kctl, &snd_card->controls, list) {
611		if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) {
612			found = 1;
613			break;
614		}
615	}
616	if (found) {
617		mc = (struct soc_mixer_control *)kctl->private_value;
618		if (max <= mc->max) {
619			mc->platform_max = max;
620			ret = 0;
621		}
622	}
623	return ret;
624}
625EXPORT_SYMBOL_GPL(snd_soc_limit_volume);
626
627int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
628		       struct snd_ctl_elem_info *uinfo)
629{
630	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
631	struct soc_bytes *params = (void *)kcontrol->private_value;
632
633	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
634	uinfo->count = params->num_regs * component->val_bytes;
635
636	return 0;
637}
638EXPORT_SYMBOL_GPL(snd_soc_bytes_info);
639
640int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
641		      struct snd_ctl_elem_value *ucontrol)
642{
643	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
644	struct soc_bytes *params = (void *)kcontrol->private_value;
645	int ret;
646
647	if (component->regmap)
648		ret = regmap_raw_read(component->regmap, params->base,
649				      ucontrol->value.bytes.data,
650				      params->num_regs * component->val_bytes);
651	else
652		ret = -EINVAL;
653
654	/* Hide any masked bytes to ensure consistent data reporting */
655	if (ret == 0 && params->mask) {
656		switch (component->val_bytes) {
657		case 1:
658			ucontrol->value.bytes.data[0] &= ~params->mask;
659			break;
660		case 2:
661			((u16 *)(&ucontrol->value.bytes.data))[0]
662				&= cpu_to_be16(~params->mask);
663			break;
664		case 4:
665			((u32 *)(&ucontrol->value.bytes.data))[0]
666				&= cpu_to_be32(~params->mask);
667			break;
668		default:
669			return -EINVAL;
670		}
671	}
672
673	return ret;
674}
675EXPORT_SYMBOL_GPL(snd_soc_bytes_get);
676
677int snd_soc_bytes_put(struct snd_kcontrol *kcontrol,
678		      struct snd_ctl_elem_value *ucontrol)
679{
680	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
681	struct soc_bytes *params = (void *)kcontrol->private_value;
682	int ret, len;
683	unsigned int val, mask;
684	void *data;
685
686	if (!component->regmap || !params->num_regs)
687		return -EINVAL;
688
689	len = params->num_regs * component->val_bytes;
690
691	data = kmemdup(ucontrol->value.bytes.data, len, GFP_KERNEL | GFP_DMA);
692	if (!data)
693		return -ENOMEM;
694
695	/*
696	 * If we've got a mask then we need to preserve the register
697	 * bits.  We shouldn't modify the incoming data so take a
698	 * copy.
699	 */
700	if (params->mask) {
701		ret = regmap_read(component->regmap, params->base, &val);
702		if (ret != 0)
703			goto out;
704
705		val &= params->mask;
706
707		switch (component->val_bytes) {
708		case 1:
709			((u8 *)data)[0] &= ~params->mask;
710			((u8 *)data)[0] |= val;
711			break;
712		case 2:
713			mask = ~params->mask;
714			ret = regmap_parse_val(component->regmap,
715							&mask, &mask);
716			if (ret != 0)
717				goto out;
718
719			((u16 *)data)[0] &= mask;
720
721			ret = regmap_parse_val(component->regmap,
722							&val, &val);
723			if (ret != 0)
724				goto out;
725
726			((u16 *)data)[0] |= val;
727			break;
728		case 4:
729			mask = ~params->mask;
730			ret = regmap_parse_val(component->regmap,
731							&mask, &mask);
732			if (ret != 0)
733				goto out;
734
735			((u32 *)data)[0] &= mask;
736
737			ret = regmap_parse_val(component->regmap,
738							&val, &val);
739			if (ret != 0)
740				goto out;
741
742			((u32 *)data)[0] |= val;
743			break;
744		default:
745			ret = -EINVAL;
746			goto out;
747		}
748	}
749
750	ret = regmap_raw_write(component->regmap, params->base,
751			       data, len);
752
753out:
754	kfree(data);
755
756	return ret;
757}
758EXPORT_SYMBOL_GPL(snd_soc_bytes_put);
759
760int snd_soc_bytes_info_ext(struct snd_kcontrol *kcontrol,
761			struct snd_ctl_elem_info *ucontrol)
762{
763	struct soc_bytes_ext *params = (void *)kcontrol->private_value;
764
765	ucontrol->type = SNDRV_CTL_ELEM_TYPE_BYTES;
766	ucontrol->count = params->max;
767
768	return 0;
769}
770EXPORT_SYMBOL_GPL(snd_soc_bytes_info_ext);
771
772int snd_soc_bytes_tlv_callback(struct snd_kcontrol *kcontrol, int op_flag,
773				unsigned int size, unsigned int __user *tlv)
774{
775	struct soc_bytes_ext *params = (void *)kcontrol->private_value;
776	unsigned int count = size < params->max ? size : params->max;
777	int ret = -ENXIO;
778
779	switch (op_flag) {
780	case SNDRV_CTL_TLV_OP_READ:
781		if (params->get)
782			ret = params->get(kcontrol, tlv, count);
783		break;
784	case SNDRV_CTL_TLV_OP_WRITE:
785		if (params->put)
786			ret = params->put(kcontrol, tlv, count);
787		break;
788	}
789	return ret;
790}
791EXPORT_SYMBOL_GPL(snd_soc_bytes_tlv_callback);
792
793/**
794 * snd_soc_info_xr_sx - signed multi register info callback
795 * @kcontrol: mreg control
796 * @uinfo: control element information
797 *
798 * Callback to provide information of a control that can
799 * span multiple codec registers which together
800 * forms a single signed value in a MSB/LSB manner.
801 *
802 * Returns 0 for success.
803 */
804int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol,
805	struct snd_ctl_elem_info *uinfo)
806{
807	struct soc_mreg_control *mc =
808		(struct soc_mreg_control *)kcontrol->private_value;
809	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
810	uinfo->count = 1;
811	uinfo->value.integer.min = mc->min;
812	uinfo->value.integer.max = mc->max;
813
814	return 0;
815}
816EXPORT_SYMBOL_GPL(snd_soc_info_xr_sx);
817
818/**
819 * snd_soc_get_xr_sx - signed multi register get callback
820 * @kcontrol: mreg control
821 * @ucontrol: control element information
822 *
823 * Callback to get the value of a control that can span
824 * multiple codec registers which together forms a single
825 * signed value in a MSB/LSB manner. The control supports
826 * specifying total no of bits used to allow for bitfields
827 * across the multiple codec registers.
828 *
829 * Returns 0 for success.
830 */
831int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol,
832	struct snd_ctl_elem_value *ucontrol)
833{
834	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
835	struct soc_mreg_control *mc =
836		(struct soc_mreg_control *)kcontrol->private_value;
837	unsigned int regbase = mc->regbase;
838	unsigned int regcount = mc->regcount;
839	unsigned int regwshift = component->val_bytes * BITS_PER_BYTE;
840	unsigned int regwmask = (1<<regwshift)-1;
841	unsigned int invert = mc->invert;
842	unsigned long mask = (1UL<<mc->nbits)-1;
843	long min = mc->min;
844	long max = mc->max;
845	long val = 0;
846	unsigned int regval;
847	unsigned int i;
848	int ret;
849
850	for (i = 0; i < regcount; i++) {
851		ret = snd_soc_component_read(component, regbase+i, &regval);
852		if (ret)
853			return ret;
854		val |= (regval & regwmask) << (regwshift*(regcount-i-1));
855	}
856	val &= mask;
857	if (min < 0 && val > max)
858		val |= ~mask;
859	if (invert)
860		val = max - val;
861	ucontrol->value.integer.value[0] = val;
862
863	return 0;
864}
865EXPORT_SYMBOL_GPL(snd_soc_get_xr_sx);
866
867/**
868 * snd_soc_put_xr_sx - signed multi register get callback
869 * @kcontrol: mreg control
870 * @ucontrol: control element information
871 *
872 * Callback to set the value of a control that can span
873 * multiple codec registers which together forms a single
874 * signed value in a MSB/LSB manner. The control supports
875 * specifying total no of bits used to allow for bitfields
876 * across the multiple codec registers.
877 *
878 * Returns 0 for success.
879 */
880int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol,
881	struct snd_ctl_elem_value *ucontrol)
882{
883	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
884	struct soc_mreg_control *mc =
885		(struct soc_mreg_control *)kcontrol->private_value;
886	unsigned int regbase = mc->regbase;
887	unsigned int regcount = mc->regcount;
888	unsigned int regwshift = component->val_bytes * BITS_PER_BYTE;
889	unsigned int regwmask = (1<<regwshift)-1;
890	unsigned int invert = mc->invert;
891	unsigned long mask = (1UL<<mc->nbits)-1;
892	long max = mc->max;
893	long val = ucontrol->value.integer.value[0];
894	unsigned int i, regval, regmask;
895	int err;
896
897	if (invert)
898		val = max - val;
899	val &= mask;
900	for (i = 0; i < regcount; i++) {
901		regval = (val >> (regwshift*(regcount-i-1))) & regwmask;
902		regmask = (mask >> (regwshift*(regcount-i-1))) & regwmask;
903		err = snd_soc_component_update_bits(component, regbase+i,
904				regmask, regval);
905		if (err < 0)
906			return err;
907	}
908
909	return 0;
910}
911EXPORT_SYMBOL_GPL(snd_soc_put_xr_sx);
912
913/**
914 * snd_soc_get_strobe - strobe get callback
915 * @kcontrol: mixer control
916 * @ucontrol: control element information
917 *
918 * Callback get the value of a strobe mixer control.
919 *
920 * Returns 0 for success.
921 */
922int snd_soc_get_strobe(struct snd_kcontrol *kcontrol,
923	struct snd_ctl_elem_value *ucontrol)
924{
925	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
926	struct soc_mixer_control *mc =
927		(struct soc_mixer_control *)kcontrol->private_value;
928	unsigned int reg = mc->reg;
929	unsigned int shift = mc->shift;
930	unsigned int mask = 1 << shift;
931	unsigned int invert = mc->invert != 0;
932	unsigned int val;
933	int ret;
934
935	ret = snd_soc_component_read(component, reg, &val);
936	if (ret)
937		return ret;
938
939	val &= mask;
940
941	if (shift != 0 && val != 0)
942		val = val >> shift;
943	ucontrol->value.enumerated.item[0] = val ^ invert;
944
945	return 0;
946}
947EXPORT_SYMBOL_GPL(snd_soc_get_strobe);
948
949/**
950 * snd_soc_put_strobe - strobe put callback
951 * @kcontrol: mixer control
952 * @ucontrol: control element information
953 *
954 * Callback strobe a register bit to high then low (or the inverse)
955 * in one pass of a single mixer enum control.
956 *
957 * Returns 1 for success.
958 */
959int snd_soc_put_strobe(struct snd_kcontrol *kcontrol,
960	struct snd_ctl_elem_value *ucontrol)
961{
962	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
963	struct soc_mixer_control *mc =
964		(struct soc_mixer_control *)kcontrol->private_value;
965	unsigned int reg = mc->reg;
966	unsigned int shift = mc->shift;
967	unsigned int mask = 1 << shift;
968	unsigned int invert = mc->invert != 0;
969	unsigned int strobe = ucontrol->value.enumerated.item[0] != 0;
970	unsigned int val1 = (strobe ^ invert) ? mask : 0;
971	unsigned int val2 = (strobe ^ invert) ? 0 : mask;
972	int err;
973
974	err = snd_soc_component_update_bits(component, reg, mask, val1);
975	if (err < 0)
976		return err;
977
978	return snd_soc_component_update_bits(component, reg, mask, val2);
979}
980EXPORT_SYMBOL_GPL(snd_soc_put_strobe);
v5.4
  1// SPDX-License-Identifier: GPL-2.0+
  2//
  3// soc-ops.c  --  Generic ASoC operations
  4//
  5// Copyright 2005 Wolfson Microelectronics PLC.
  6// Copyright 2005 Openedhand Ltd.
  7// Copyright (C) 2010 Slimlogic Ltd.
  8// Copyright (C) 2010 Texas Instruments Inc.
  9//
 10// Author: Liam Girdwood <lrg@slimlogic.co.uk>
 11//         with code, comments and ideas from :-
 12//         Richard Purdie <richard@openedhand.com>
 
 
 
 
 
 13
 14#include <linux/module.h>
 15#include <linux/moduleparam.h>
 16#include <linux/init.h>
 17#include <linux/delay.h>
 18#include <linux/pm.h>
 19#include <linux/bitops.h>
 20#include <linux/ctype.h>
 21#include <linux/slab.h>
 22#include <sound/core.h>
 23#include <sound/jack.h>
 24#include <sound/pcm.h>
 25#include <sound/pcm_params.h>
 26#include <sound/soc.h>
 27#include <sound/soc-dpcm.h>
 28#include <sound/initval.h>
 29
 30/**
 31 * snd_soc_info_enum_double - enumerated double mixer info callback
 32 * @kcontrol: mixer control
 33 * @uinfo: control element information
 34 *
 35 * Callback to provide information about a double enumerated
 36 * mixer control.
 37 *
 38 * Returns 0 for success.
 39 */
 40int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
 41	struct snd_ctl_elem_info *uinfo)
 42{
 43	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
 44
 45	return snd_ctl_enum_info(uinfo, e->shift_l == e->shift_r ? 1 : 2,
 46				 e->items, e->texts);
 47}
 48EXPORT_SYMBOL_GPL(snd_soc_info_enum_double);
 49
 50/**
 51 * snd_soc_get_enum_double - enumerated double mixer get callback
 52 * @kcontrol: mixer control
 53 * @ucontrol: control element information
 54 *
 55 * Callback to get the value of a double enumerated mixer.
 56 *
 57 * Returns 0 for success.
 58 */
 59int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
 60	struct snd_ctl_elem_value *ucontrol)
 61{
 62	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
 63	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
 64	unsigned int val, item;
 65	unsigned int reg_val;
 66	int ret;
 67
 68	ret = snd_soc_component_read(component, e->reg, &reg_val);
 69	if (ret)
 70		return ret;
 71	val = (reg_val >> e->shift_l) & e->mask;
 72	item = snd_soc_enum_val_to_item(e, val);
 73	ucontrol->value.enumerated.item[0] = item;
 74	if (e->shift_l != e->shift_r) {
 75		val = (reg_val >> e->shift_r) & e->mask;
 76		item = snd_soc_enum_val_to_item(e, val);
 77		ucontrol->value.enumerated.item[1] = item;
 78	}
 79
 80	return 0;
 81}
 82EXPORT_SYMBOL_GPL(snd_soc_get_enum_double);
 83
 84/**
 85 * snd_soc_put_enum_double - enumerated double mixer put callback
 86 * @kcontrol: mixer control
 87 * @ucontrol: control element information
 88 *
 89 * Callback to set the value of a double enumerated mixer.
 90 *
 91 * Returns 0 for success.
 92 */
 93int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
 94	struct snd_ctl_elem_value *ucontrol)
 95{
 96	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
 97	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
 98	unsigned int *item = ucontrol->value.enumerated.item;
 99	unsigned int val;
100	unsigned int mask;
101
102	if (item[0] >= e->items)
103		return -EINVAL;
104	val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l;
105	mask = e->mask << e->shift_l;
106	if (e->shift_l != e->shift_r) {
107		if (item[1] >= e->items)
108			return -EINVAL;
109		val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_r;
110		mask |= e->mask << e->shift_r;
111	}
112
113	return snd_soc_component_update_bits(component, e->reg, mask, val);
114}
115EXPORT_SYMBOL_GPL(snd_soc_put_enum_double);
116
117/**
118 * snd_soc_read_signed - Read a codec register and interpret as signed value
119 * @component: component
120 * @reg: Register to read
121 * @mask: Mask to use after shifting the register value
122 * @shift: Right shift of register value
123 * @sign_bit: Bit that describes if a number is negative or not.
124 * @signed_val: Pointer to where the read value should be stored
125 *
126 * This functions reads a codec register. The register value is shifted right
127 * by 'shift' bits and masked with the given 'mask'. Afterwards it translates
128 * the given registervalue into a signed integer if sign_bit is non-zero.
129 *
130 * Returns 0 on sucess, otherwise an error value
131 */
132static int snd_soc_read_signed(struct snd_soc_component *component,
133	unsigned int reg, unsigned int mask, unsigned int shift,
134	unsigned int sign_bit, int *signed_val)
135{
136	int ret;
137	unsigned int val;
138
139	ret = snd_soc_component_read(component, reg, &val);
140	if (ret < 0)
141		return ret;
142
143	val = (val >> shift) & mask;
144
145	if (!sign_bit) {
146		*signed_val = val;
147		return 0;
148	}
149
150	/* non-negative number */
151	if (!(val & BIT(sign_bit))) {
152		*signed_val = val;
153		return 0;
154	}
155
156	ret = val;
157
158	/*
159	 * The register most probably does not contain a full-sized int.
160	 * Instead we have an arbitrary number of bits in a signed
161	 * representation which has to be translated into a full-sized int.
162	 * This is done by filling up all bits above the sign-bit.
163	 */
164	ret |= ~((int)(BIT(sign_bit) - 1));
165
166	*signed_val = ret;
167
168	return 0;
169}
170
171/**
172 * snd_soc_info_volsw - single mixer info callback
173 * @kcontrol: mixer control
174 * @uinfo: control element information
175 *
176 * Callback to provide information about a single mixer control, or a double
177 * mixer control that spans 2 registers.
178 *
179 * Returns 0 for success.
180 */
181int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
182	struct snd_ctl_elem_info *uinfo)
183{
184	struct soc_mixer_control *mc =
185		(struct soc_mixer_control *)kcontrol->private_value;
186	int platform_max;
187
188	if (!mc->platform_max)
189		mc->platform_max = mc->max;
190	platform_max = mc->platform_max;
191
192	if (platform_max == 1 && !strstr(kcontrol->id.name, " Volume"))
193		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
194	else
195		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
196
197	uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
198	uinfo->value.integer.min = 0;
199	uinfo->value.integer.max = platform_max - mc->min;
200	return 0;
201}
202EXPORT_SYMBOL_GPL(snd_soc_info_volsw);
203
204/**
205 * snd_soc_info_volsw_sx - Mixer info callback for SX TLV controls
206 * @kcontrol: mixer control
207 * @uinfo: control element information
208 *
209 * Callback to provide information about a single mixer control, or a double
210 * mixer control that spans 2 registers of the SX TLV type. SX TLV controls
211 * have a range that represents both positive and negative values either side
212 * of zero but without a sign bit.
213 *
214 * Returns 0 for success.
215 */
216int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol,
217			  struct snd_ctl_elem_info *uinfo)
218{
219	struct soc_mixer_control *mc =
220		(struct soc_mixer_control *)kcontrol->private_value;
221
222	snd_soc_info_volsw(kcontrol, uinfo);
223	/* Max represents the number of levels in an SX control not the
224	 * maximum value, so add the minimum value back on
225	 */
226	uinfo->value.integer.max += mc->min;
227
228	return 0;
229}
230EXPORT_SYMBOL_GPL(snd_soc_info_volsw_sx);
231
232/**
233 * snd_soc_get_volsw - single mixer get callback
234 * @kcontrol: mixer control
235 * @ucontrol: control element information
236 *
237 * Callback to get the value of a single mixer control, or a double mixer
238 * control that spans 2 registers.
239 *
240 * Returns 0 for success.
241 */
242int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
243	struct snd_ctl_elem_value *ucontrol)
244{
245	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
246	struct soc_mixer_control *mc =
247		(struct soc_mixer_control *)kcontrol->private_value;
248	unsigned int reg = mc->reg;
249	unsigned int reg2 = mc->rreg;
250	unsigned int shift = mc->shift;
251	unsigned int rshift = mc->rshift;
252	int max = mc->max;
253	int min = mc->min;
254	int sign_bit = mc->sign_bit;
255	unsigned int mask = (1 << fls(max)) - 1;
256	unsigned int invert = mc->invert;
257	int val;
258	int ret;
259
260	if (sign_bit)
261		mask = BIT(sign_bit + 1) - 1;
262
263	ret = snd_soc_read_signed(component, reg, mask, shift, sign_bit, &val);
264	if (ret)
265		return ret;
266
267	ucontrol->value.integer.value[0] = val - min;
268	if (invert)
269		ucontrol->value.integer.value[0] =
270			max - ucontrol->value.integer.value[0];
271
272	if (snd_soc_volsw_is_stereo(mc)) {
273		if (reg == reg2)
274			ret = snd_soc_read_signed(component, reg, mask, rshift,
275				sign_bit, &val);
276		else
277			ret = snd_soc_read_signed(component, reg2, mask, shift,
278				sign_bit, &val);
279		if (ret)
280			return ret;
281
282		ucontrol->value.integer.value[1] = val - min;
283		if (invert)
284			ucontrol->value.integer.value[1] =
285				max - ucontrol->value.integer.value[1];
286	}
287
288	return 0;
289}
290EXPORT_SYMBOL_GPL(snd_soc_get_volsw);
291
292/**
293 * snd_soc_put_volsw - single mixer put callback
294 * @kcontrol: mixer control
295 * @ucontrol: control element information
296 *
297 * Callback to set the value of a single mixer control, or a double mixer
298 * control that spans 2 registers.
299 *
300 * Returns 0 for success.
301 */
302int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
303	struct snd_ctl_elem_value *ucontrol)
304{
305	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
306	struct soc_mixer_control *mc =
307		(struct soc_mixer_control *)kcontrol->private_value;
308	unsigned int reg = mc->reg;
309	unsigned int reg2 = mc->rreg;
310	unsigned int shift = mc->shift;
311	unsigned int rshift = mc->rshift;
312	int max = mc->max;
313	int min = mc->min;
314	unsigned int sign_bit = mc->sign_bit;
315	unsigned int mask = (1 << fls(max)) - 1;
316	unsigned int invert = mc->invert;
317	int err;
318	bool type_2r = false;
319	unsigned int val2 = 0;
320	unsigned int val, val_mask;
321
322	if (sign_bit)
323		mask = BIT(sign_bit + 1) - 1;
324
325	val = ((ucontrol->value.integer.value[0] + min) & mask);
326	if (invert)
327		val = max - val;
328	val_mask = mask << shift;
329	val = val << shift;
330	if (snd_soc_volsw_is_stereo(mc)) {
331		val2 = ((ucontrol->value.integer.value[1] + min) & mask);
332		if (invert)
333			val2 = max - val2;
334		if (reg == reg2) {
335			val_mask |= mask << rshift;
336			val |= val2 << rshift;
337		} else {
338			val2 = val2 << shift;
339			type_2r = true;
340		}
341	}
342	err = snd_soc_component_update_bits(component, reg, val_mask, val);
343	if (err < 0)
344		return err;
345
346	if (type_2r)
347		err = snd_soc_component_update_bits(component, reg2, val_mask,
348			val2);
349
350	return err;
351}
352EXPORT_SYMBOL_GPL(snd_soc_put_volsw);
353
354/**
355 * snd_soc_get_volsw_sx - single mixer get callback
356 * @kcontrol: mixer control
357 * @ucontrol: control element information
358 *
359 * Callback to get the value of a single mixer control, or a double mixer
360 * control that spans 2 registers.
361 *
362 * Returns 0 for success.
363 */
364int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol,
365		      struct snd_ctl_elem_value *ucontrol)
366{
367	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
368	struct soc_mixer_control *mc =
369	    (struct soc_mixer_control *)kcontrol->private_value;
370	unsigned int reg = mc->reg;
371	unsigned int reg2 = mc->rreg;
372	unsigned int shift = mc->shift;
373	unsigned int rshift = mc->rshift;
374	int max = mc->max;
375	int min = mc->min;
376	unsigned int mask = (1U << (fls(min + max) - 1)) - 1;
377	unsigned int val;
378	int ret;
379
380	ret = snd_soc_component_read(component, reg, &val);
381	if (ret < 0)
382		return ret;
383
384	ucontrol->value.integer.value[0] = ((val >> shift) - min) & mask;
385
386	if (snd_soc_volsw_is_stereo(mc)) {
387		ret = snd_soc_component_read(component, reg2, &val);
388		if (ret < 0)
389			return ret;
390
391		val = ((val >> rshift) - min) & mask;
392		ucontrol->value.integer.value[1] = val;
393	}
394
395	return 0;
396}
397EXPORT_SYMBOL_GPL(snd_soc_get_volsw_sx);
398
399/**
400 * snd_soc_put_volsw_sx - double mixer set callback
401 * @kcontrol: mixer control
402 * @ucontrol: control element information
403 *
404 * Callback to set the value of a double mixer control that spans 2 registers.
405 *
406 * Returns 0 for success.
407 */
408int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
409			 struct snd_ctl_elem_value *ucontrol)
410{
411	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
412	struct soc_mixer_control *mc =
413	    (struct soc_mixer_control *)kcontrol->private_value;
414
415	unsigned int reg = mc->reg;
416	unsigned int reg2 = mc->rreg;
417	unsigned int shift = mc->shift;
418	unsigned int rshift = mc->rshift;
419	int max = mc->max;
420	int min = mc->min;
421	unsigned int mask = (1U << (fls(min + max) - 1)) - 1;
422	int err = 0;
423	unsigned int val, val_mask, val2 = 0;
424
425	val_mask = mask << shift;
426	val = (ucontrol->value.integer.value[0] + min) & mask;
427	val = val << shift;
428
429	err = snd_soc_component_update_bits(component, reg, val_mask, val);
430	if (err < 0)
431		return err;
432
433	if (snd_soc_volsw_is_stereo(mc)) {
434		val_mask = mask << rshift;
435		val2 = (ucontrol->value.integer.value[1] + min) & mask;
436		val2 = val2 << rshift;
437
438		err = snd_soc_component_update_bits(component, reg2, val_mask,
439			val2);
440	}
441	return err;
442}
443EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx);
444
445/**
446 * snd_soc_info_volsw_range - single mixer info callback with range.
447 * @kcontrol: mixer control
448 * @uinfo: control element information
449 *
450 * Callback to provide information, within a range, about a single
451 * mixer control.
452 *
453 * returns 0 for success.
454 */
455int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
456	struct snd_ctl_elem_info *uinfo)
457{
458	struct soc_mixer_control *mc =
459		(struct soc_mixer_control *)kcontrol->private_value;
460	int platform_max;
461	int min = mc->min;
462
463	if (!mc->platform_max)
464		mc->platform_max = mc->max;
465	platform_max = mc->platform_max;
466
467	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
468	uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
469	uinfo->value.integer.min = 0;
470	uinfo->value.integer.max = platform_max - min;
471
472	return 0;
473}
474EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range);
475
476/**
477 * snd_soc_put_volsw_range - single mixer put value callback with range.
478 * @kcontrol: mixer control
479 * @ucontrol: control element information
480 *
481 * Callback to set the value, within a range, for a single mixer control.
482 *
483 * Returns 0 for success.
484 */
485int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
486	struct snd_ctl_elem_value *ucontrol)
487{
488	struct soc_mixer_control *mc =
489		(struct soc_mixer_control *)kcontrol->private_value;
490	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
491	unsigned int reg = mc->reg;
492	unsigned int rreg = mc->rreg;
493	unsigned int shift = mc->shift;
494	int min = mc->min;
495	int max = mc->max;
496	unsigned int mask = (1 << fls(max)) - 1;
497	unsigned int invert = mc->invert;
498	unsigned int val, val_mask;
499	int ret;
500
501	if (invert)
502		val = (max - ucontrol->value.integer.value[0]) & mask;
503	else
504		val = ((ucontrol->value.integer.value[0] + min) & mask);
505	val_mask = mask << shift;
506	val = val << shift;
507
508	ret = snd_soc_component_update_bits(component, reg, val_mask, val);
509	if (ret < 0)
510		return ret;
511
512	if (snd_soc_volsw_is_stereo(mc)) {
513		if (invert)
514			val = (max - ucontrol->value.integer.value[1]) & mask;
515		else
516			val = ((ucontrol->value.integer.value[1] + min) & mask);
517		val_mask = mask << shift;
518		val = val << shift;
519
520		ret = snd_soc_component_update_bits(component, rreg, val_mask,
521			val);
522	}
523
524	return ret;
525}
526EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range);
527
528/**
529 * snd_soc_get_volsw_range - single mixer get callback with range
530 * @kcontrol: mixer control
531 * @ucontrol: control element information
532 *
533 * Callback to get the value, within a range, of a single mixer control.
534 *
535 * Returns 0 for success.
536 */
537int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
538	struct snd_ctl_elem_value *ucontrol)
539{
540	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
541	struct soc_mixer_control *mc =
542		(struct soc_mixer_control *)kcontrol->private_value;
543	unsigned int reg = mc->reg;
544	unsigned int rreg = mc->rreg;
545	unsigned int shift = mc->shift;
546	int min = mc->min;
547	int max = mc->max;
548	unsigned int mask = (1 << fls(max)) - 1;
549	unsigned int invert = mc->invert;
550	unsigned int val;
551	int ret;
552
553	ret = snd_soc_component_read(component, reg, &val);
554	if (ret)
555		return ret;
556
557	ucontrol->value.integer.value[0] = (val >> shift) & mask;
558	if (invert)
559		ucontrol->value.integer.value[0] =
560			max - ucontrol->value.integer.value[0];
561	else
562		ucontrol->value.integer.value[0] =
563			ucontrol->value.integer.value[0] - min;
564
565	if (snd_soc_volsw_is_stereo(mc)) {
566		ret = snd_soc_component_read(component, rreg, &val);
567		if (ret)
568			return ret;
569
570		ucontrol->value.integer.value[1] = (val >> shift) & mask;
571		if (invert)
572			ucontrol->value.integer.value[1] =
573				max - ucontrol->value.integer.value[1];
574		else
575			ucontrol->value.integer.value[1] =
576				ucontrol->value.integer.value[1] - min;
577	}
578
579	return 0;
580}
581EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range);
582
583/**
584 * snd_soc_limit_volume - Set new limit to an existing volume control.
585 *
586 * @card: where to look for the control
587 * @name: Name of the control
588 * @max: new maximum limit
589 *
590 * Return 0 for success, else error.
591 */
592int snd_soc_limit_volume(struct snd_soc_card *card,
593	const char *name, int max)
594{
595	struct snd_card *snd_card = card->snd_card;
596	struct snd_kcontrol *kctl;
597	struct soc_mixer_control *mc;
598	int found = 0;
599	int ret = -EINVAL;
600
601	/* Sanity check for name and max */
602	if (unlikely(!name || max <= 0))
603		return -EINVAL;
604
605	list_for_each_entry(kctl, &snd_card->controls, list) {
606		if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) {
607			found = 1;
608			break;
609		}
610	}
611	if (found) {
612		mc = (struct soc_mixer_control *)kctl->private_value;
613		if (max <= mc->max) {
614			mc->platform_max = max;
615			ret = 0;
616		}
617	}
618	return ret;
619}
620EXPORT_SYMBOL_GPL(snd_soc_limit_volume);
621
622int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
623		       struct snd_ctl_elem_info *uinfo)
624{
625	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
626	struct soc_bytes *params = (void *)kcontrol->private_value;
627
628	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
629	uinfo->count = params->num_regs * component->val_bytes;
630
631	return 0;
632}
633EXPORT_SYMBOL_GPL(snd_soc_bytes_info);
634
635int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
636		      struct snd_ctl_elem_value *ucontrol)
637{
638	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
639	struct soc_bytes *params = (void *)kcontrol->private_value;
640	int ret;
641
642	if (component->regmap)
643		ret = regmap_raw_read(component->regmap, params->base,
644				      ucontrol->value.bytes.data,
645				      params->num_regs * component->val_bytes);
646	else
647		ret = -EINVAL;
648
649	/* Hide any masked bytes to ensure consistent data reporting */
650	if (ret == 0 && params->mask) {
651		switch (component->val_bytes) {
652		case 1:
653			ucontrol->value.bytes.data[0] &= ~params->mask;
654			break;
655		case 2:
656			((u16 *)(&ucontrol->value.bytes.data))[0]
657				&= cpu_to_be16(~params->mask);
658			break;
659		case 4:
660			((u32 *)(&ucontrol->value.bytes.data))[0]
661				&= cpu_to_be32(~params->mask);
662			break;
663		default:
664			return -EINVAL;
665		}
666	}
667
668	return ret;
669}
670EXPORT_SYMBOL_GPL(snd_soc_bytes_get);
671
672int snd_soc_bytes_put(struct snd_kcontrol *kcontrol,
673		      struct snd_ctl_elem_value *ucontrol)
674{
675	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
676	struct soc_bytes *params = (void *)kcontrol->private_value;
677	int ret, len;
678	unsigned int val, mask;
679	void *data;
680
681	if (!component->regmap || !params->num_regs)
682		return -EINVAL;
683
684	len = params->num_regs * component->val_bytes;
685
686	data = kmemdup(ucontrol->value.bytes.data, len, GFP_KERNEL | GFP_DMA);
687	if (!data)
688		return -ENOMEM;
689
690	/*
691	 * If we've got a mask then we need to preserve the register
692	 * bits.  We shouldn't modify the incoming data so take a
693	 * copy.
694	 */
695	if (params->mask) {
696		ret = regmap_read(component->regmap, params->base, &val);
697		if (ret != 0)
698			goto out;
699
700		val &= params->mask;
701
702		switch (component->val_bytes) {
703		case 1:
704			((u8 *)data)[0] &= ~params->mask;
705			((u8 *)data)[0] |= val;
706			break;
707		case 2:
708			mask = ~params->mask;
709			ret = regmap_parse_val(component->regmap,
710							&mask, &mask);
711			if (ret != 0)
712				goto out;
713
714			((u16 *)data)[0] &= mask;
715
716			ret = regmap_parse_val(component->regmap,
717							&val, &val);
718			if (ret != 0)
719				goto out;
720
721			((u16 *)data)[0] |= val;
722			break;
723		case 4:
724			mask = ~params->mask;
725			ret = regmap_parse_val(component->regmap,
726							&mask, &mask);
727			if (ret != 0)
728				goto out;
729
730			((u32 *)data)[0] &= mask;
731
732			ret = regmap_parse_val(component->regmap,
733							&val, &val);
734			if (ret != 0)
735				goto out;
736
737			((u32 *)data)[0] |= val;
738			break;
739		default:
740			ret = -EINVAL;
741			goto out;
742		}
743	}
744
745	ret = regmap_raw_write(component->regmap, params->base,
746			       data, len);
747
748out:
749	kfree(data);
750
751	return ret;
752}
753EXPORT_SYMBOL_GPL(snd_soc_bytes_put);
754
755int snd_soc_bytes_info_ext(struct snd_kcontrol *kcontrol,
756			struct snd_ctl_elem_info *ucontrol)
757{
758	struct soc_bytes_ext *params = (void *)kcontrol->private_value;
759
760	ucontrol->type = SNDRV_CTL_ELEM_TYPE_BYTES;
761	ucontrol->count = params->max;
762
763	return 0;
764}
765EXPORT_SYMBOL_GPL(snd_soc_bytes_info_ext);
766
767int snd_soc_bytes_tlv_callback(struct snd_kcontrol *kcontrol, int op_flag,
768				unsigned int size, unsigned int __user *tlv)
769{
770	struct soc_bytes_ext *params = (void *)kcontrol->private_value;
771	unsigned int count = size < params->max ? size : params->max;
772	int ret = -ENXIO;
773
774	switch (op_flag) {
775	case SNDRV_CTL_TLV_OP_READ:
776		if (params->get)
777			ret = params->get(kcontrol, tlv, count);
778		break;
779	case SNDRV_CTL_TLV_OP_WRITE:
780		if (params->put)
781			ret = params->put(kcontrol, tlv, count);
782		break;
783	}
784	return ret;
785}
786EXPORT_SYMBOL_GPL(snd_soc_bytes_tlv_callback);
787
788/**
789 * snd_soc_info_xr_sx - signed multi register info callback
790 * @kcontrol: mreg control
791 * @uinfo: control element information
792 *
793 * Callback to provide information of a control that can
794 * span multiple codec registers which together
795 * forms a single signed value in a MSB/LSB manner.
796 *
797 * Returns 0 for success.
798 */
799int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol,
800	struct snd_ctl_elem_info *uinfo)
801{
802	struct soc_mreg_control *mc =
803		(struct soc_mreg_control *)kcontrol->private_value;
804	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
805	uinfo->count = 1;
806	uinfo->value.integer.min = mc->min;
807	uinfo->value.integer.max = mc->max;
808
809	return 0;
810}
811EXPORT_SYMBOL_GPL(snd_soc_info_xr_sx);
812
813/**
814 * snd_soc_get_xr_sx - signed multi register get callback
815 * @kcontrol: mreg control
816 * @ucontrol: control element information
817 *
818 * Callback to get the value of a control that can span
819 * multiple codec registers which together forms a single
820 * signed value in a MSB/LSB manner. The control supports
821 * specifying total no of bits used to allow for bitfields
822 * across the multiple codec registers.
823 *
824 * Returns 0 for success.
825 */
826int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol,
827	struct snd_ctl_elem_value *ucontrol)
828{
829	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
830	struct soc_mreg_control *mc =
831		(struct soc_mreg_control *)kcontrol->private_value;
832	unsigned int regbase = mc->regbase;
833	unsigned int regcount = mc->regcount;
834	unsigned int regwshift = component->val_bytes * BITS_PER_BYTE;
835	unsigned int regwmask = (1<<regwshift)-1;
836	unsigned int invert = mc->invert;
837	unsigned long mask = (1UL<<mc->nbits)-1;
838	long min = mc->min;
839	long max = mc->max;
840	long val = 0;
841	unsigned int regval;
842	unsigned int i;
843	int ret;
844
845	for (i = 0; i < regcount; i++) {
846		ret = snd_soc_component_read(component, regbase+i, &regval);
847		if (ret)
848			return ret;
849		val |= (regval & regwmask) << (regwshift*(regcount-i-1));
850	}
851	val &= mask;
852	if (min < 0 && val > max)
853		val |= ~mask;
854	if (invert)
855		val = max - val;
856	ucontrol->value.integer.value[0] = val;
857
858	return 0;
859}
860EXPORT_SYMBOL_GPL(snd_soc_get_xr_sx);
861
862/**
863 * snd_soc_put_xr_sx - signed multi register get callback
864 * @kcontrol: mreg control
865 * @ucontrol: control element information
866 *
867 * Callback to set the value of a control that can span
868 * multiple codec registers which together forms a single
869 * signed value in a MSB/LSB manner. The control supports
870 * specifying total no of bits used to allow for bitfields
871 * across the multiple codec registers.
872 *
873 * Returns 0 for success.
874 */
875int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol,
876	struct snd_ctl_elem_value *ucontrol)
877{
878	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
879	struct soc_mreg_control *mc =
880		(struct soc_mreg_control *)kcontrol->private_value;
881	unsigned int regbase = mc->regbase;
882	unsigned int regcount = mc->regcount;
883	unsigned int regwshift = component->val_bytes * BITS_PER_BYTE;
884	unsigned int regwmask = (1<<regwshift)-1;
885	unsigned int invert = mc->invert;
886	unsigned long mask = (1UL<<mc->nbits)-1;
887	long max = mc->max;
888	long val = ucontrol->value.integer.value[0];
889	unsigned int i, regval, regmask;
890	int err;
891
892	if (invert)
893		val = max - val;
894	val &= mask;
895	for (i = 0; i < regcount; i++) {
896		regval = (val >> (regwshift*(regcount-i-1))) & regwmask;
897		regmask = (mask >> (regwshift*(regcount-i-1))) & regwmask;
898		err = snd_soc_component_update_bits(component, regbase+i,
899				regmask, regval);
900		if (err < 0)
901			return err;
902	}
903
904	return 0;
905}
906EXPORT_SYMBOL_GPL(snd_soc_put_xr_sx);
907
908/**
909 * snd_soc_get_strobe - strobe get callback
910 * @kcontrol: mixer control
911 * @ucontrol: control element information
912 *
913 * Callback get the value of a strobe mixer control.
914 *
915 * Returns 0 for success.
916 */
917int snd_soc_get_strobe(struct snd_kcontrol *kcontrol,
918	struct snd_ctl_elem_value *ucontrol)
919{
920	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
921	struct soc_mixer_control *mc =
922		(struct soc_mixer_control *)kcontrol->private_value;
923	unsigned int reg = mc->reg;
924	unsigned int shift = mc->shift;
925	unsigned int mask = 1 << shift;
926	unsigned int invert = mc->invert != 0;
927	unsigned int val;
928	int ret;
929
930	ret = snd_soc_component_read(component, reg, &val);
931	if (ret)
932		return ret;
933
934	val &= mask;
935
936	if (shift != 0 && val != 0)
937		val = val >> shift;
938	ucontrol->value.enumerated.item[0] = val ^ invert;
939
940	return 0;
941}
942EXPORT_SYMBOL_GPL(snd_soc_get_strobe);
943
944/**
945 * snd_soc_put_strobe - strobe put callback
946 * @kcontrol: mixer control
947 * @ucontrol: control element information
948 *
949 * Callback strobe a register bit to high then low (or the inverse)
950 * in one pass of a single mixer enum control.
951 *
952 * Returns 1 for success.
953 */
954int snd_soc_put_strobe(struct snd_kcontrol *kcontrol,
955	struct snd_ctl_elem_value *ucontrol)
956{
957	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
958	struct soc_mixer_control *mc =
959		(struct soc_mixer_control *)kcontrol->private_value;
960	unsigned int reg = mc->reg;
961	unsigned int shift = mc->shift;
962	unsigned int mask = 1 << shift;
963	unsigned int invert = mc->invert != 0;
964	unsigned int strobe = ucontrol->value.enumerated.item[0] != 0;
965	unsigned int val1 = (strobe ^ invert) ? mask : 0;
966	unsigned int val2 = (strobe ^ invert) ? 0 : mask;
967	int err;
968
969	err = snd_soc_component_update_bits(component, reg, mask, val1);
970	if (err < 0)
971		return err;
972
973	return snd_soc_component_update_bits(component, reg, mask, val2);
974}
975EXPORT_SYMBOL_GPL(snd_soc_put_strobe);