Linux Audio

Check our new training course

Linux BSP development engineering services

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