[agd5f:audio-for-next 135/153] sound/soc/codecs/cs35l41.c:3043:6: warning: variable 'num_fast_switch' is used uninitialized whenever 'if' condition is false

From: kernel test robot
Date: Tue Aug 24 2021 - 23:45:42 EST


tree: https://gitlab.freedesktop.org/agd5f/linux.git audio-for-next
head: b50aaad40c792ec71a1d51622bc50aca608e8b55
commit: 7383306be1da792e3c342ae9a16ea474e6631ebc [135/153] ASoC: cs35l41: Use device_property API instead of of_property
config: arm64-buildonly-randconfig-r006-20210825 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d26000e4cc2bc65e207a84fa26cb6e374d60aa12)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
git remote add agd5f https://gitlab.freedesktop.org/agd5f/linux.git
git fetch --no-tags agd5f audio-for-next
git checkout 7383306be1da792e3c342ae9a16ea474e6631ebc
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

sound/soc/codecs/cs35l41.c:263:6: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
int ret = 0;
^
sound/soc/codecs/cs35l41.c:491:6: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
int ret = 0;
^
sound/soc/codecs/cs35l41.c:1766:6: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
int ret;
^
>> sound/soc/codecs/cs35l41.c:3043:6: warning: variable 'num_fast_switch' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
if (np) {
^~
sound/soc/codecs/cs35l41.c:3083:22: note: uninitialized use occurs here
roundup_pow_of_two(num_fast_switch) - 1;
^~~~~~~~~~~~~~~
include/linux/log2.h:176:23: note: expanded from macro 'roundup_pow_of_two'
__builtin_constant_p(n) ? ( \
^
sound/soc/codecs/cs35l41.c:3043:2: note: remove the 'if' if its condition is always true
if (np) {
^~~~~~~~
sound/soc/codecs/cs35l41.c:3037:24: note: initialize the variable 'num_fast_switch' to silence this warning
size_t num_fast_switch;
^
= 0
sound/soc/codecs/cs35l41.c:3293:7: error: no member named 'n_rx_channels' in 'struct wm_adsp'
dsp->n_rx_channels = CS35L41_DSP_N_RX_RATES;
~~~ ^
sound/soc/codecs/cs35l41.c:3294:7: error: no member named 'n_tx_channels' in 'struct wm_adsp'
dsp->n_tx_channels = CS35L41_DSP_N_TX_RATES;
~~~ ^
sound/soc/codecs/cs35l41.c:3297:26: error: too many arguments to function call, expected single argument 'dsp', have 2 arguments
ret = wm_halo_init(dsp, &cs35l41->rate_lock);
~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~
sound/soc/codecs/wm_adsp.h:166:5: note: 'wm_halo_init' declared here
int wm_halo_init(struct wm_adsp *dsp);
^
sound/soc/codecs/cs35l41.c:3306:8: error: no member named 'rx_rate_cache' in 'struct wm_adsp'
dsp->rx_rate_cache[i] = 0x1;
~~~ ^
sound/soc/codecs/cs35l41.c:3308:8: error: no member named 'tx_rate_cache' in 'struct wm_adsp'
dsp->tx_rate_cache[i] = 0x1;
~~~ ^
4 warnings and 5 errors generated.


vim +3043 sound/soc/codecs/cs35l41.c

3027
3028
3029
3030 static int cs35l41_handle_pdata(struct device *dev,
3031 struct cs35l41_platform_data *pdata,
3032 struct cs35l41_private *cs35l41)
3033 {
3034 struct device_node *np = dev->of_node;
3035 unsigned int val;
3036 int ret;
3037 size_t num_fast_switch;
3038 struct cs35l41_classh_cfg *classh_config = &pdata->classh_config;
3039 struct cs35l41_irq_cfg *irq_gpio1_config = &pdata->irq_config1;
3040 struct cs35l41_irq_cfg *irq_gpio2_config = &pdata->irq_config2;
3041 unsigned int i;
3042
> 3043 if (np) {
3044 cs35l41->dt_name = devm_kstrdup_const(cs35l41->dev, np->name,
3045 GFP_KERNEL);
3046
3047 ret = of_property_count_strings(np, "cirrus,fast-switch");
3048 if (ret < 0) {
3049 /*
3050 * Device tree does not provide file name.
3051 * Use default value
3052 */
3053 num_fast_switch = ARRAY_SIZE(cs35l41_fast_switch_text);
3054 cs35l41->fast_switch_enum.items =
3055 ARRAY_SIZE(cs35l41_fast_switch_text);
3056 cs35l41->fast_switch_enum.texts = cs35l41_fast_switch_text;
3057 cs35l41->fast_switch_names = cs35l41_fast_switch_text;
3058 } else {
3059 /* Device tree provides file name */
3060 num_fast_switch = (size_t)ret;
3061 dev_info(dev, "num_fast_switch:%zu\n", num_fast_switch);
3062 cs35l41->fast_switch_names =
3063 devm_kmalloc(dev, num_fast_switch * sizeof(char *),
3064 GFP_KERNEL);
3065 if (!cs35l41->fast_switch_names)
3066 return -ENOMEM;
3067 of_property_read_string_array(np, "cirrus,fast-switch",
3068 cs35l41->fast_switch_names,
3069 num_fast_switch);
3070 for (i = 0; i < num_fast_switch; i++) {
3071 dev_info(dev, "%d:%s\n", i,
3072 cs35l41->fast_switch_names[i]);
3073 }
3074 cs35l41->fast_switch_enum.items = num_fast_switch;
3075 cs35l41->fast_switch_enum.texts = cs35l41->fast_switch_names;
3076 }
3077 }
3078
3079 cs35l41->fast_switch_enum.reg = SND_SOC_NOPM;
3080 cs35l41->fast_switch_enum.shift_l = 0;
3081 cs35l41->fast_switch_enum.shift_r = 0;
3082 cs35l41->fast_switch_enum.mask =
3083 roundup_pow_of_two(num_fast_switch) - 1;
3084
3085 pdata->right_channel = device_property_read_bool(dev,
3086 "cirrus,right-channel-amp");
3087 pdata->sclk_frc = device_property_read_bool(dev,
3088 "cirrus,sclk-force-output");
3089 pdata->lrclk_frc = device_property_read_bool(dev,
3090 "cirrus,lrclk-force-output");
3091 pdata->amp_gain_zc = device_property_read_bool(dev,
3092 "cirrus,amp-gain-zc");
3093
3094 pdata->invert_pcm = device_property_read_bool(dev,
3095 "cirrus,invert-pcm");
3096 pdata->shared_boost = SHARED_BOOST_DISABLED;
3097 if (device_property_read_bool(dev, "cirrus,shared-boost-active"))
3098 pdata->shared_boost = SHARED_BOOST_ACTIVE;
3099 if (device_property_read_bool(dev, "cirrus,shared-boost-passive"))
3100 pdata->shared_boost = SHARED_BOOST_PASSIVE;
3101
3102 pdata->fwname_use_revid = device_property_read_bool(dev,
3103 "cirrus,fwname-use-revid");
3104
3105 if (device_property_read_u32(dev, "cirrus,temp-warn_threshold", &val) >= 0)
3106 pdata->temp_warn_thld = val | CS35L41_VALID_PDATA;
3107
3108 ret = device_property_read_u32(dev, "cirrus,boost-ctl-millivolt", &val);
3109 if (ret >= 0) {
3110 if (val < 2550 || val > 11000) {
3111 dev_err(dev,
3112 "Invalid Boost Voltage %u mV\n", val);
3113 return -EINVAL;
3114 }
3115 pdata->bst_vctrl = ((val - 2550) / 100) + 1;
3116 }
3117
3118 ret = device_property_read_u32(dev, "cirrus,boost-peak-milliamp", &val);
3119 if (ret >= 0)
3120 pdata->bst_ipk = val;
3121
3122 ret = device_property_read_u32(dev, "cirrus,boost-ind-nanohenry", &val);
3123 if (ret >= 0)
3124 pdata->bst_ind = val;
3125
3126 ret = device_property_read_u32(dev, "cirrus,boost-cap-microfarad", &val);
3127 if (ret >= 0)
3128 pdata->bst_cap = val;
3129
3130 ret = device_property_read_u32(dev, "cirrus,asp-sdout-hiz", &val);
3131 if (ret >= 0)
3132 pdata->dout_hiz = val;
3133 else
3134 pdata->dout_hiz = -1;
3135
3136 pdata->dsp_ng_enable = device_property_read_bool(dev,
3137 "cirrus,dsp-noise-gate-enable");
3138 if (device_property_read_u32(dev,
3139 "cirrus,dsp-noise-gate-threshold", &val) >= 0)
3140 pdata->dsp_ng_pcm_thld = val | CS35L41_VALID_PDATA;
3141 if (device_property_read_u32(dev, "cirrus,dsp-noise-gate-delay", &val) >= 0)
3142 pdata->dsp_ng_delay = val | CS35L41_VALID_PDATA;
3143
3144 if (device_property_read_u32(dev, "cirrus,hw-noise-gate-select", &val) >= 0)
3145 pdata->hw_ng_sel = val | CS35L41_VALID_PDATA;
3146 if (device_property_read_u32(dev,
3147 "cirrus,hw-noise-gate-threshold", &val) >= 0)
3148 pdata->hw_ng_thld = val | CS35L41_VALID_PDATA;
3149 if (device_property_read_u32(dev, "cirrus,hw-noise-gate-delay", &val) >= 0)
3150 pdata->hw_ng_delay = val | CS35L41_VALID_PDATA;
3151
3152 classh_config->classh_algo_enable =
3153 device_property_read_bool(dev, "cirrus,classh-internal-algo");
3154
3155 if (classh_config->classh_algo_enable) {
3156 classh_config->classh_bst_override =
3157 device_property_read_bool(dev,
3158 "cirrus,classh-bst-override");
3159
3160 ret = device_property_read_u32(dev,
3161 "cirrus,classh-bst-max-limit",
3162 &val);
3163 if (ret >= 0) {
3164 val |= CS35L41_VALID_PDATA;
3165 classh_config->classh_bst_max_limit = val;
3166 }
3167
3168 ret = device_property_read_u32(dev, "cirrus,classh-mem-depth",
3169 &val);
3170 if (ret >= 0) {
3171 val |= CS35L41_VALID_PDATA;
3172 classh_config->classh_mem_depth = val;
3173 }
3174
3175 ret = device_property_read_u32(dev,
3176 "cirrus,classh-release-rate", &val);
3177 if (ret >= 0)
3178 classh_config->classh_release_rate = val;
3179
3180 ret = device_property_read_u32(dev, "cirrus,classh-headroom",
3181 &val);
3182 if (ret >= 0) {
3183 val |= CS35L41_VALID_PDATA;
3184 classh_config->classh_headroom = val;
3185 }
3186
3187 ret = device_property_read_u32(dev,
3188 "cirrus,classh-wk-fet-delay", &val);
3189 if (ret >= 0) {
3190 val |= CS35L41_VALID_PDATA;
3191 classh_config->classh_wk_fet_delay = val;
3192 }
3193
3194 ret = device_property_read_u32(dev,
3195 "cirrus,classh-wk-fet-thld", &val);
3196 if (ret >= 0)
3197 classh_config->classh_wk_fet_thld = val;
3198 }
3199
3200 /* GPIO1 Pin Config */
3201 irq_gpio1_config->irq_pol_inv = device_property_read_bool(dev,
3202 "cirrus,gpio1-polarity-invert");
3203 irq_gpio1_config->irq_out_en = device_property_read_bool(dev,
3204 "cirrus,gpio1-output-enable");
3205 ret = device_property_read_u32(dev, "cirrus,gpio1-src-select",
3206 &val);
3207 if (ret >= 0) {
3208 val |= CS35L41_VALID_PDATA;
3209 irq_gpio1_config->irq_src_sel = val;
3210 }
3211
3212 /* GPIO2 Pin Config */
3213 irq_gpio2_config->irq_pol_inv = device_property_read_bool(dev,
3214 "cirrus,gpio2-polarity-invert");
3215 irq_gpio2_config->irq_out_en = device_property_read_bool(dev,
3216 "cirrus,gpio2-output-enable");
3217 ret = device_property_read_u32(dev, "cirrus,gpio2-src-select",
3218 &val);
3219 if (ret >= 0) {
3220 val |= CS35L41_VALID_PDATA;
3221 irq_gpio2_config->irq_src_sel = val;
3222 }
3223
3224 pdata->hibernate_enable = device_property_read_bool(dev,
3225 "cirrus,hibernate-enable");
3226
3227 return 0;
3228 }
3229

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip