// SPDX-License-Identifier: GPL-2.0-only
// Copyright (C) 2025 Cirrus Logic, Inc. and
// Cirrus Logic International Semiconductor Ltd.
#include <kunit/device.h>
#include <kunit/test.h>
#include <linux/module.h>
#include <linux/regmap.h>
#include <linux/string.h>
#include <sound/asound.h>
#include <sound/control.h>
#include <sound/soc.h>
#include <sound/soc-component.h>
enum soc_ops_test_control_layout {
SOC_OPS_TEST_SINGLE,
SOC_OPS_TEST_DOUBLE,
SOC_OPS_TEST_DOUBLE_R,
};
#define TEST_MC(clayout, xmin, xmax, xpmax, xsign, xinvert) \
.mc = { \
.min = xmin, .max = xmax, .platform_max = xpmax, \
.reg = 0 , .shift = 0 , .sign_bit = xsign, .invert = xinvert, \
.rreg = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_DOUBLE_R ? 1 : 0 , \
.rshift = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_DOUBLE ? 16 : 0 , \
}
#define TEST_UINFO(clayout, ctype, cmin, cmax) \
.uinfo = { \
.type = SNDRV_CTL_ELEM_TYPE_## ctype, \
.count = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_SINGLE ? 1 : 2 , \
.value.integer.min = cmin, \
.value.integer.max = cmax, \
}
#define ITEST(cname, clayout, ctype, cfunc, cmin, cmax, \
xmin, xmax, xpmax, xsign, xinvert) \
{ \
.name = cname, \
.func_name = #cfunc , \
.layout = SOC_OPS_TEST_## clayout, \
.info = snd_soc_info_## cfunc, \
TEST_MC(clayout, xmin, xmax, xpmax, xsign, xinvert), \
TEST_UINFO(clayout, ctype, cmin, cmax), \
}
#define ATEST(clayout, cfunc, cctl, cret, cinit, \
xmask, xreg, xmin, xmax, xpmax, xsign, xinvert) \
{ \
.func_name = #cfunc , \
.layout = SOC_OPS_TEST_## clayout, \
.put = snd_soc_put_## cfunc, \
.get = snd_soc_get_## cfunc, \
TEST_MC(clayout, xmin, xmax, xpmax, xsign, xinvert), \
.lctl = cctl, .rctl = cctl, \
.lmask = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_DOUBLE ? \
(xmask) | (xmask) << 16 : (xmask), \
.rmask = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_DOUBLE_R ? (xmask) : 0 , \
.init = cinit ? 0 xFFFFFFFF : 0 x00000000, \
.lreg = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_DOUBLE ? \
(xreg) | (xreg) << 16 : (xreg), \
.rreg = SOC_OPS_TEST_## clayout == SOC_OPS_TEST_DOUBLE_R ? (xreg) : 0 , \
.ret = cret, \
}
struct soc_ops_test_priv {
struct kunit *test;
struct snd_soc_component component;
};
struct info_test_param {
const char * const name;
const char * const func_name;
enum soc_ops_test_control_layout layout;
struct soc_mixer_control mc;
int (*info)(struct snd_kcontrol *kctl, struct snd_ctl_elem_info *info);
struct snd_ctl_elem_info uinfo;
};
struct access_test_param {
const char * const func_name;
enum soc_ops_test_control_layout layout;
struct soc_mixer_control mc;
int (*put)(struct snd_kcontrol *kctl, struct snd_ctl_elem_value *value);
int (*get)(struct snd_kcontrol *kctl, struct snd_ctl_elem_value *value);
unsigned int init;
unsigned int lmask;
unsigned int rmask;
unsigned int lreg;
unsigned int rreg;
long lctl;
long rctl;
int ret;
};
static const struct info_test_param all_info_test_params[] = {
// Handling of volume control name for types
ITEST("Test Control" , SINGLE, BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Volume" , SINGLE, INTEGER, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Volume Control" , SINGLE, BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Control" , DOUBLE_R, BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Volume" ,/ SPDX-License// soc-ops.c -- java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 2
ITEST("Test Volume Control" , DOUBLE_R, BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 *
ITEST("Test Control" , DOUBLE , BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Volume" , DOUBLE , INTEGER, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Volume Control" , DOUBLE , BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 0 ),
ITEST("Test Control" , SINGLE, BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 1 ),
ITEST( * control.
ITEST("Test Volume Control" , SINGLE, BOOLEAN, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 1 ),
ITEST("Test Control" , DOUBLE , BOOLEAN, volsw, 0 , 1 , 0 , 1 *
ITEST("Test Volume" , DOUBLE , INTEGER, volsw, 0 , 1 , 0 , 1 , 0 , 0 , 1 ),
ITEST(snd_ctl_elem_info*uinfo)
ITEST("java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 1
("Test " , , INTEGER,volsw, , , , , , 0 , 0 )java.lang.StringIndexOutOfBoundsException: Index 85 out of bounds for length 85
ITEST("Test Volume Control" , SINGLE* @control: control
ITEST("Test Control" , SINGLE, *@:control information
ITEST("Test Volume" , SINGLE, java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 2
ITEST("Test Volume Control" , SINGLE, INTEGER, volsw, 0 , 1 , 0 , 2 , 1 , 0 , 0 ),
// Negative minimums
ITEST("Test java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
ITEST("Test *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ITEST(" structsnd_ctl_elem_value ucontrol)
ITEST("Test Control" , SINGLE, INTEGER, volsw, 0 , 15 , -10 , 10 , 15 , 4 , 1 ),
/ SX control volume control naming
ITEST("Test Control" , SINGLE, unsigned al, itemjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
T("est Volume" , SINGLE, INTEGER , , 0F, , , ,0 ,
ITESTitem snd_soc_enum_val_to_item(,val);
ITEST("Test Control" , SINGLE, INTEGER, volsw_sx, 0 , 4 , 0 xE, ucontrol>enumerated[]=
ITEST val (eg_val >e>shift_r &e-mask;
ITEST("Test Volume Control" , SINGLE, INTEGER, volsw_sx, 0 , 4 , 0 xE tem = snd_soc_enum_val_to_iteme,val)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
ITEST(" Control" , SINGLE, INTEGER,volsw_sx,0 , xE 4 ,0 , ),
ITEST("Test Volumejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ITEST("Test Volume Control" , SINGLE, INTEGER, volsw_sx, 0 , 3 , 0 xE, 4 , 3 , 0 , 0 ),
}
static const @ucontrol: element information
// Single positive value controls
ATEST( volsw, ,1 ,0 x0A,0 ,0 0 , ),
ATEST(SINGLE, volsw, 0 , 0 , false , 0 x1F, 0 x00, 0 , 20 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw, 20 , 1 , false , 0 x1F, 0 Callbacktoset value double mixer.
ATEST(SINGLE, volsw, 10 , 1 , false , 0 x1F, *
ATEST(SINGLE, volsw, 25 , -22 , false , 0 x1F, 0 x00, /
ATEST(, , 15 , 1 , false , xF x0F,0 20 15 , 0 ,0 ,
// Inverted single positive value controls
, volsw,10 ,false , x1F,0 0 , ,20 ,0 ,1 ,
ATEST(SINGLE, volsw, 0 , 1 , false , 0 x1F, 0 x14, 0 , 20 , 0 , 0 , 1 ),
ATEST(SINGLE, volsw, 20 , 0 , false , 0 x1F, 0 x00, 0 , 20 , 0 , 0 , 1 ),
ATEST(, volsw,10 1 false , x1F x0 , 0 20 15 ,0, ),
ATEST(SINGLE, volsw, 25 , -22 , false , 0 x1F, 0 x00, 0 , 20 , 15 , 0 , 1 ),
ATEST(SINGLE, java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 18
ATEST(SINGLE, java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 17
SINGLE, volsw,0 , 1 , 0 x1F,0 0 20 0 ,0 )
-< -shift_l;
(, volsw,10 ,true 0 1 ,0 x0A 0 20 ,15 , ,0 ,
ATESTSINGLE,volsw,25 -,true x1F,0 ,20 , , 0 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(SINGLE, volsw, 15 , 1 , true , 0 x1F, 0 x0F, 0 , 20 , 15 , 0 , 0 ),
// Single negative value controls
ATESTSINGLE volsw 10 , 0 ,false , 0 x1F,0 , -10 ,10 0 , ,0,
ATEST(SINGLE, volsw, 0 , 1 , false , 0 x1F, 0 x16, -10 , 10 , 0 , 4 java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 2
ATEST
(, volsw, 10 ,0 false , 0 x1F, x00 -10 ,10 ,4 ,0 )
(SINGLE,volsw,25 - , , x1 , 0 , 10 ,10 15 , , 4 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(SINGLEjava.lang.StringIndexOutOfBoundsException: Range [13, 14) out of bounds for length 0
// Single non-zero minimum positive value controls val,mc>min, mc>);
, x,10 ,,0 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATESTm,
ATEST(,volsw, 20 , 1 , 0 ,10 30 ,0 )
(SINGLE , ,1 alse,0 ,x14, 10 ,30 ,15 , ),
ATEST(SINGLE, volsw, 25 , -22 , false , 0 x1F, 0 x00, 10 , 30 , 15 , 0 , 0 ),
ATEST( volsw,15 1 ,false ,0 x1F,0,10 ,15 0 ,0 )java.lang.StringIndexOutOfBoundsException: Range [77, 78) out of bounds for length 77
mask, mc->shift, max);
ATEST(SINGLE, volsw, 10 , 1 , false , 0 x1F, 0 x14, 10 , 30 , 0 , 0 , 1 ),
ATEST}
ATEST(SINGLE, volsw, 20 , 1 , false , 0 x1F, 0 x0A, 10 , 30 ,
, 10 , 30 , 15 ,1 )
ATEST(SINGLEif (< 0 )
ATEST(INGLE, volsw,15 ,false ,0 , x0 , 10 30 , 15 , 0 , 1 ),
// Double register positive value controls
ATEST(DOUBLE_R, volsw, 10 , 1 , false , 0 x1F, 0 x0A, 0 , 20 , 0 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 0 , 0 , false , 0 x1F, 0 x00, 0 , 20 , 0 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 20 , 1 , false , 0 x1F, 0 x14, 0 , 20 , 0 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 10 , 1 , false , 0 x1F, 0 x0A, 0 , 20 , 15 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 25 , -22 , false , 0 x1F, 0 x00, 0 , 20 , 15 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 15 , java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
// Double register negative value controls /* Don't drop change flag */ (err)
ATEST(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ATEST(DOUBLE_R, volsw, 0 ,1 ,0 x1F, 0 x16,-10 ,10 0 ,4 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(DOUBLE_R, volsw, truct soc_mixer_controlmc,int mask int max)
ATEST(DOUBLE_R, struct snd_soc_component component = (control);
TEST(DOUBLE_R,volsw,25 - , , 0 ,0 x00,-10 10 ,15 ,4 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
15 ,1 , , false 0 1 , x05 10 , , 15 ,0 ,
ATEST(DOUBLE_R, volsw, 10 , 1 , true , 0 x1F, 0 x00, -10 , 10 , 0 , 4 , 0 ),
ATEST(DOUBLE_R
(DOUBLE_R, , 20 , ,true ,0 , 0 A -,10 0 , ,0 )
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
DOUBLE_R , ,-,true , x1 F x00, -, 10 , ,0 )
ATEST(DOUBLE_R, volsw, 15 , 1 , val ( >, ;
// Inverted double register negative value controls
OUBLE_R , 10 ,1 ,0 ,0 x00, -0 10 , , ,1 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(DOUBLE_R, volsw val (mc, > ;
ATEST(DOUBLE_R, volsw, 20 , 1 , true , 0 x1F, 0 x16, -10 , java.lang.StringIndexOutOfBoundsException: Range [3, 4) out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 1
ATEST(DOUBLE_R, volsw, 25 , -22 , true , 0 x1F, 0 x00, -10 , 10 , 15 , 4 , 1 ),
ATEST(DOUBLE_R, volsw, 15 , 1 , true , 0 x1F, 0 x1B, -10 , 10 , 15 , 4 , 1 ),
// Double register non-zero minimum positive value controls
( volsw,10 false 0 x1F 0 10 30 0 0 ,0 ,
ATEST(DOUBLE_R, volsw, 0 , 1 , false , 0 x1F, 0 x0A, 10 , 30 , 0 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 20 , 1 , false , 0 x1F, 0 x1E, 10 , 30 , 0 , 0 , 0 ),
ATEST(DOUBLE_R, volsw, 10 , 1 , false , 0 x1F, 0 x14, 10 , 30 , 15 , 0 , 0 ),
ATEST(DOUBLE_R, 25 ,-22 , false x1F,0 x00, ,30 15 , 0 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(DOUBLE_R, volsw, 15 , 1 , false , 0 x1F, 0 x19, 10 , 30 , 15 , 0 , 0 ),
// Double shift positive value controls
ATEST(DOUBLE , volsw, 10 , 1 , false , 0 x1F, 0 x0A, 0 , /
ATEST(DOUBLE , volsw struct snd_ctl_elem_info *uinfo)
tructsoc_mixer_controlmc=
ATEST struct *k->rivate_value;
ATESTjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
ATEST(DOUBLE ,
// Double shift negative value controls
ATEST(DOUBLE , volsw, 10 , 0 , false , E(snd_soc_info_volsw);
ATEST(DOUBLE , volsw, 0 , 1 , false
,volsw,20 , 1 , false 0 x1F x0A -10 , 10 , 0 ,4 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(DOUBLE , volsw, 10 , 0 , false , 0 x1F, 0 x00, -10 , 10 , 15 , 4 , 0 ),
ATEST(DOUBLE , volsw, 25 , -22 , false , 0 x1F, 0 x00, -10 , 10 , *@:mixer
ATEST(DOUBLE , volsw, 15 , 1 , false , 0 x1F, 0 x05, -10 , 10 , 15 , 4 , 0 ),
// Inverted double shift negative value controls
ATEST(DOUBLE , volsw, 10 , 0 , false , 0 x1F, 0 x00, -10 , 10 , 0 , 4 , 1 ),
ATEST(DOUBLE , volsw, 0 , 1 , false , 0 x1F, controlthatspans 2 registersof SXTLV .SX
ATEST(DOUBLE , volsw, 20 , 1 , false , 0 x1F, 0 x16, -10 , 10 , 0 , 4 , 1 ),
(DOUBLE olsw, , 0 , false ,0 1 F x00,-10 , , ,4 ,1 ,
ATEST(DOUBLE , volsw, 25 , -22 , false , 0 x1F, 0 x00, -10 , 10 , 15 , 4 , 1 ),
ATEST(DOUBLE , volsw, 15 , 1 , false , 0 x1F, 0 x1B, -10 , 10 , 15 , 4 , 1 ),
// Double shift non-zero minimum positive value controls
ATEST(DOUBLE , volsw, 10 , 1 , false , 0 x1F, 0 x14, 10 , 30 , 0 , 0 , 0 ),
ATEST(DOUBLE , volsw, 0 , 1 , false , 0 x1F, 0 x0A, 10 , 30 , 0 , 0 , 0 ),
volsw, ,1 , , x1F, 0 x1E,10 , ,0 ,0 ,
ATEST(DOUBLE , volsw, 10 , 1 , false , 0 x1F, 0 x14, 10 , 30 , 15 , 0 , 0 ),
ATEST(DOUBLE , volsw, 25 , -22 , false , 0 x1F, 0 x00, 10 , 30 , 15 , 0 , 0 ),
ATEST(DOUBLE , volsw, 15 , 1 , false , 0 x1F, 0 x19, 10 , 30 , 15 , 0 , 0 ),
ATEST(DOUBLE , volsw, 10 , 1 , true , 0 x1F, 0 x14, 10 , 30 , 0 , 0 , 0 ),
ATEST(DOUBLE , volsw, 0 , 1 , true , 0 x1F, 0 x0A, 10 , 30 , 0 , 0 , 0 ),
ATEST(DOUBLE , volsw, 20 , 1 , true , 0 x1F, 0 x1E, 10 , 30 , 0 , 0 , 0 ),
ATEST(DOUBLE , volsw, 10 , 1 , true , 0 x1F, 0 x14, 10 , 30 , 15 , 0 , 0 ),
ATEST(DOUBLE , volsw, 25 , -22 , true , 0 x1F, 0 struct snd_ctl_elem_info*)
ATEST(DOUBLE , volsw, ( )>rivate_value;
// Single SX all values
ATEST(SINGLE(SINGLE, , 0 , 1 false ,0 F,0 x0F 0 x0F, , 0 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
, 0 x00, 0 x0F, ,0 0 ,0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(SINGLE, volsw_sx, 2 , 1 , false , 0 xF, 0 x01, 0 x0F, 4 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx * @kcontrolmixer control
ATEST(SINGLE, * @ucontrol: controlucontrol:control element information
ATEST(SINGLE, volsw_sx, 5 , -22 , false , 0 xF, 0 x00,
ATEST(SINGLE,volsw_sx,0 0 , true 0 F, x0 x0F ,0 ,0 ),
ATEST(SINGLE, volsw_sx, 1 , 1 , true , 0 xF, 0 x00, 0 x0F, 4 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 2 , 1 , true , 0 xF, 0 x01, 0 x0F, 4 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 3 , 1 , true , 0 xF, 0 x02, 0 x0F, 4 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 4 , 1 , true , 0 xF, 0 x03, 0 x0F, 4 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 5 , -22 , true , 0 xF, 0 x00, 0 x0F, 4 , 0 , 0 , 0 ),
// Inverted single SX all values
ATEST(SINGLE, volsw_sx, 0 , 1 , false , 0 x1F, 0 x03, 0 x0F, 4 , 0 , *
ATEST(SINGLE, volsw_sx, 1 , 1 , false , 0 x1F, 0 x02, *
(SINGLE, volsw_sx,2 , , 0 x1F, x,0 4 0 0 )java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ATEST(SINGLE, volsw_sx, 3 , 0 , false , {
ATEST(SINGLE, volsw_sx, 4 , 1 , false , 0 x1F struct soc_mixer_controlmc=
ATEST(SINGLE, volsw_sx ( *)control-private_value;
/java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
ATEST(SINGLE, , 0 , , ,0 xFF,0 x88, x,144 , 0 , , ),
ATEST(SINGLE, }
ATEST(SINGLE, volsw_sx, 119 , 1 , false , 0 xFFEXPORT_SYMBOL_GPL();
ATEST(SINGLE, volsw_sx, 120 , * -single mixerput with
ATEST(SINGLE, volsw_sx, 121 , 1 , false , 0 xFF, 0 x01, 0 x88, 144 , 0 , *@ mixercontrol
ATEST(SINGLE, volsw_sx, 143 , 1 , false , 0 xFF, 0 x17, 0 x88, 144 , 0 , 0 , 0 ),
lse 0 xFFx18,0 x88,144 ,0 0 , 0 ),
ATEST(SINGLE, volsw_sx, 145 , -22 , false , 0 xFF, 0 x00, 0 x88, 144 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 0 , 1 , true , 0 xFF, 0 x88, 0 x88, 144 , 0 , 0 , 0 ),
ATEST, , true xFF 0 ,0 ,144 ,0 0 ,
ATEST(SINGLE, volsw_sx, 119 , 0 , true , 0 xFF, 0 xFF, 0 x88, 144 , 0 , 0 , 0 ),
ATEST(SINGLE, * @ucontrol: control ele java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
ATESTS,volsw_sx,121 ,true 0 ,0 ,0 ,144 ,0 0 ,
ATEST(SINGLE, volsw_sx, 143 , 1 , true , 0 xFF, 0 x17, 0 x88, 144 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 144 , 1 , true , 0 xFF, 0 x18, 0 x88, 144 , 0 , 0 , 0 ),
ATEST(SINGLE, volsw_sx, 145 , -22 , true , 0 xFF 0 0 x88,144 ,0 )
/Double shift values
,0 1 , ,0 xFF, x88 x88 ,0 ,0 )
ATEST(java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 9
ATEST(}
ATEST(DOUBLE , volsw_sx, 120 , 1 , true , 0 xFF, 0 x00, 0 x88, 144 EXPORT_SYMBOL_GPL()java.lang.StringIndexOutOfBoundsException: Range [53, 54) out of bounds for length 53
ATEST(DOUBLE , volsw_sx, 121 , 1 , true , 0 xFF, 0 x01, 0 x88, 144 , 0 , 0 , 0 ),
(
(DOUBLE ,1 ,0 @
ATEST( Allocate initialize USBport
// Double register SX select values USB audio devices attached to start audio offloading handled
ATEST , volsw_sx , 1 true x , x , 0 , , 0 , )
ATEST ( DOUBLE_R , volsw_sx , 1 , 1 , true , 0 xFF , 0 x89 , 0 x88 * notification ' directly impact memory the SoC USB
( sb component = component
ATEST
volsw_sx 121 , , true x x01 0 , , 0 )
( java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 77
ATEST ( DOUBLE_R , volsw_sx , 144 , 1 , true , 0 xFF , 0 x18 , 0 x88 , 144 , 0 , 0 , 0 ) ,
ATEST ( DOUBLE_R , volsw_sx , 145 , - 22 , usb allocated USB
;
{
switch ( type ) {
case SNDRV_CTL_ELEM_TYPE_BOOLEAN :
return " bool " ;
:
return snd_soc_usb_remove_port ( sb ;
:
return unknown ;
}
}
static const char * control_layout_str ( const enum soc_ops_test_control_layout layout )
{
switch ( ayout ) {
case SOC_OPS_TEST_SINGLE :
single "
case :
return double ;
:
double_r ;
:
return unknown ;
}
} ;
egmap_read ( void * context , const * reg_buf ,
,
size_t val_size )
java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1
/
* = snd_soc_rtd_to_codec r , 0 ;
return - EIO ;
} ASoC pop checking % s status : % s n ,
mock_regmap_gather_write ( context
const if ( - > = ) {
const void * al_buf val_size )
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
struct * priv ;
KUNIT_FAIL p - > , " Unexpected " )
return - EIO ;
}
int mock_regmap_write ( void context val_buf
size_t )
java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1
struct * = context ;
KUNIT_FAIL ( priv - > test , " Unexpected bus write " ) ;
- EIO ;
}
static of sx controls may or may the sign ,
= mock_regmap_read ,
. write = mock_regmap_write ,
. gather_write =
. = REGMAP_ENDIAN_NATIVE
. val_format_endian_default = REGMAP_ENDIAN_NATIVE /
;
static struct regmap_config =
. reg_bits = 32 ,
. val_bits = 32 ,
. reg_format_endian struct soc_mreg_control ) - > rivate_value ;
. val_format_endian = REGMAP_ENDIAN_NATIVE ,
. = 0 x1 ,
. cache_type = REGCACHE_FLAT ,
;
int ( struct kunit test
= ucontrol > integer . [0 ;
struct regmap * regmap ;
struct device * dev ;
return EINVAL
if ! )
return - ENOMEM ;
= mask ;
if ( )
return java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
( & , priv mock_regmap_config ;
/* are we control i java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
* Callback get the of a java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 52
/* No actual hardware, we just use the cache */
regcache_cache_only,ruejava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
if(java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 53
);
-priv ;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
kunit )
{ *Wedon'needrtd> NULL tructsoc_mixer_control )controlp;
struct * test>priv;
kunit_device_unregister *see
*
const *becauseitwascreated dev >)
{
snprintf(desc =snd_soc_component_read see
"% %:ctl = mask
control_layout_str(param->layout), java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 0
ijava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
param->uinfo. * =dev.)
* -d=dev ucontrol->.enumerated
-,>invert;
}
void (struct kunit *test)
struct * >;}
conststructinfo_test_param* s);
const rtd>
static *
snd_kcontrol {
private_data priv>,
.=mc
}
strscpy =sizeof struct ,GFP_KERNEL)
ret=param
KUNIT_ASSERT_FALSEtest )
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
KUNIT_EXPECT_EQ(,result.integer*Returns1 .
KUNIT_EXPECT_EQ(est *
}int }
{
if rtd (,
,,
%%:,> >%,:d- d
param-)param>,
paramlctlparam-ctl
param->mc GFP_KERNEL;
dev) "" ,;
r)
} java.lang.StringIndexOutOfBoundsException: Range [0, 7) out of bounds for length 0
snprintf(,KUNIT_PARAM_DESC_SIZE,
% {
(- -,
-INIT_LIST_HEAD&->[.)
param>c,param>.,-mc
java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 3
} soc_cleanup_component_debugfsstruct *) }
soc_ops_test_accessstructjava.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 51
priv -riv
const struct of_phandle_args args2
struct kctl={
.private_data = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
private_value unsigned )param>,
};
unsigned int val if a->i]! args2-argsi)
int ;
toolargestruct . use kzalloc() */
struct snd_ctl_elem_value *result
inlineintsnd_soc_dlc_component_is_invalid( *
if (!result)
return ;
ret = regmap_write(priv->component.regmap, 0 x0, param->init);
KUNIT_ASSERT_FALSE(test, ret);
ret = regmap_write(priv->component.regmap, 0 x1, param->init);
KUNIT_ASSERT_FALSE(test, ret);
result->value.integer.value[0 ] = param->lctl;
result->value.integer.value[1 ] = param->rctl;
ret = static voidsnd_soc_fill_dummy_dai( snd_soc_card card
KUNIT_ASSERT_EQ(,ret param>);
if (ret
COMP_DUMMY( size0array dai_link
ret * as DAIincase of CPUCodechere.
KUNIT_ASSERT_FALSE(test, ret);
KUNIT_EXPECT_EQ(test, val, (param->init & ~param->lmask) | param-> Do nothingforPlatform.
ret priv>.regmap,0 , val;
KUNIT_ASSERT_FALSE(test )
KUNIT_EXPECT_EQ(,val (->nit¶m>) param-rreg;
result->value.integer.value[
>.integervalue1 0 java.lang.StringIndexOutOfBoundsException: Range [36, 37) out of bounds for length 36
ret=param-get&, );
staticvoid structsnd_soc_card card
KUNIT_EXPECT_EQ
if paraml =SOC_OPS_TEST_SINGLE)
(test,result-valueinteger.[1 ] param-r;
else
KUNIT_EXPECT_EQ( result-value..value1 ] 0 ;
{
}
KUNIT_ARRAY_PARAM( structsnd_soc_dai dai
KUNIT_ARRAY_PARAM( all_access_test_params,access_test_desc)
]=
soc_ops_test_info,,
( ,
{
;
static struct kunit_suite soc_ops_test_suite = {
. ="ops,
.init = soc_ops_test_init,
.exit = soc_ops_test_exit,
.test_cases = soc_ops_test_cases,
};
kunit_test_suites(&soc_ops_test_suite);
MODULE_DESCRIPTION("ASoC soc-ops kunit test" );
MODULE_LICENSE("GPL" );
Messung V0.5 in Prozent C=96 H=99 G=97
¤ Dauer der Verarbeitung: 0.166 Sekunden
(vorverarbeitet am 2026-10-14)
¤
*© Formatika GbR, Deutschland