Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[sfrench/cifs-2.6.git] / sound / soc / soc-ops.c
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  */
40 int 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 }
48 EXPORT_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  */
59 int 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 }
82 EXPORT_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  */
93 int 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 }
115 EXPORT_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  */
132 static 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  */
181 int 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 }
202 EXPORT_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  */
216 int 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 }
230 EXPORT_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  */
242 int 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 }
290 EXPORT_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  */
302 int 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 }
352 EXPORT_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  */
364 int 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 }
397 EXPORT_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  */
408 int 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 }
443 EXPORT_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  */
455 int 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 }
474 EXPORT_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  */
485 int 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 }
526 EXPORT_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  */
537 int 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 }
581 EXPORT_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  */
592 int 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 }
620 EXPORT_SYMBOL_GPL(snd_soc_limit_volume);
621
622 int 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 }
633 EXPORT_SYMBOL_GPL(snd_soc_bytes_info);
634
635 int 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 }
670 EXPORT_SYMBOL_GPL(snd_soc_bytes_get);
671
672 int 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
748 out:
749         kfree(data);
750
751         return ret;
752 }
753 EXPORT_SYMBOL_GPL(snd_soc_bytes_put);
754
755 int 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 }
765 EXPORT_SYMBOL_GPL(snd_soc_bytes_info_ext);
766
767 int 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 }
786 EXPORT_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  */
799 int 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 }
811 EXPORT_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  */
826 int 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 }
860 EXPORT_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  */
875 int 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 }
906 EXPORT_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  */
917 int 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 }
942 EXPORT_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  */
954 int 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 }
975 EXPORT_SYMBOL_GPL(snd_soc_put_strobe);