Hi Connor,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on sound/for-next]
[also build test ERROR on v4.17-rc4 next-20180507]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Connor-McAdams/ALSA-hda-ca0132-Patch-Series-for-Recon3Di-and-Sound-Blaster-Z-Support/20180508-144100
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git for-next
config: x86_64-randconfig-x012-201818 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

Note: the 
linux-review/Connor-McAdams/ALSA-hda-ca0132-Patch-Series-for-Recon3Di-and-Sound-Blaster-Z-Support/20180508-144100
 HEAD 387bca1ff38f9c470b8965899c62b3bfc400ea88 builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   sound/pci/hda/patch_ca0132.c: In function 'ca0132_alt_select_in':
>> sound/pci/hda/patch_ca0132.c:4210:2: error: implicit declaration of function 
>> 'ca0132_cvoice_switch_set'; did you mean 'ca0132_mic_boost_set'? 
>> [-Werror=implicit-function-declaration]
     ca0132_cvoice_switch_set(codec);
     ^~~~~~~~~~~~~~~~~~~~~~~~
     ca0132_mic_boost_set
   sound/pci/hda/patch_ca0132.c: At top level:
>> sound/pci/hda/patch_ca0132.c:4403:12: error: static declaration of 
>> 'ca0132_cvoice_switch_set' follows non-static declaration
    static int ca0132_cvoice_switch_set(struct hda_codec *codec)
               ^~~~~~~~~~~~~~~~~~~~~~~~
   sound/pci/hda/patch_ca0132.c:4210:2: note: previous implicit declaration of 
'ca0132_cvoice_switch_set' was here
     ca0132_cvoice_switch_set(codec);
     ^~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +4210 sound/pci/hda/patch_ca0132.c

  4099  
  4100  /*
  4101   * Select the active input.
  4102   * Mic detection isn't used, because it's kind of pointless on the SBZ.
  4103   * The front mic has no jack-detection, so the only way to switch to it
  4104   * is to do it manually in alsamixer.
  4105   */
  4106  static int ca0132_alt_select_in(struct hda_codec *codec)
  4107  {
  4108          struct ca0132_spec *spec = codec->spec;
  4109          unsigned int tmp;
  4110  
  4111          codec_dbg(codec, "%s\n", __func__);
  4112  
  4113          snd_hda_power_up_pm(codec);
  4114  
  4115          chipio_set_stream_control(codec, 0x03, 0);
  4116          chipio_set_stream_control(codec, 0x04, 0);
  4117  
  4118          spec->cur_mic_type = spec->in_enum_val;
  4119  
  4120          switch (spec->cur_mic_type) {
  4121          case REAR_MIC:
  4122                  switch (spec->quirk) {
  4123                  case QUIRK_SBZ:
  4124                          writew(0x0000, spec->mem_base + 0x320);
  4125                          tmp = FLOAT_THREE;
  4126                          break;
  4127                  case QUIRK_R3DI:
  4128                          r3di_gpio_mic_set(codec, R3DI_REAR_MIC);
  4129                          tmp = FLOAT_ONE;
  4130                          break;
  4131                  default:
  4132                          tmp = FLOAT_ONE;
  4133                          break;
  4134                  }
  4135  
  4136                  chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, 
SR_96_000);
  4137                  chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, 
SR_96_000);
  4138                  if (spec->quirk == QUIRK_R3DI)
  4139                          chipio_set_conn_rate(codec, 0x0F, SR_96_000);
  4140  
  4141                  dspio_set_uint_param(codec, 0x80, 0x00, tmp);
  4142  
  4143                  chipio_set_stream_control(codec, 0x03, 1);
  4144                  chipio_set_stream_control(codec, 0x04, 1);
  4145  
  4146                  if (spec->quirk == QUIRK_SBZ) {
  4147                          chipio_write(codec, 0x18B098, 0x0000000C);
  4148                          chipio_write(codec, 0x18B09C, 0x0000000C);
  4149                  }
  4150                  break;
  4151          case REAR_LINE_IN:
  4152                  ca0132_mic_boost_set(codec, 0);
  4153                  switch (spec->quirk) {
  4154                  case QUIRK_SBZ:
  4155                          writew(0x0000, spec->mem_base + 0x320);
  4156                          break;
  4157                  case QUIRK_R3DI:
  4158                          r3di_gpio_mic_set(codec, R3DI_REAR_MIC);
  4159                          break;
  4160                  }
  4161  
  4162                  chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, 
SR_96_000);
  4163                  chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, 
SR_96_000);
  4164                  if (spec->quirk == QUIRK_R3DI)
  4165                          chipio_set_conn_rate(codec, 0x0F, SR_96_000);
  4166  
  4167                  tmp = FLOAT_ZERO;
  4168                  dspio_set_uint_param(codec, 0x80, 0x00, tmp);
  4169  
  4170                  if (spec->quirk == QUIRK_SBZ) {
  4171                          chipio_write(codec, 0x18B098, 0x00000000);
  4172                          chipio_write(codec, 0x18B09C, 0x00000000);
  4173                  }
  4174  
  4175                  chipio_set_stream_control(codec, 0x03, 1);
  4176                  chipio_set_stream_control(codec, 0x04, 1);
  4177                  break;
  4178          case FRONT_MIC:
  4179                  switch (spec->quirk) {
  4180                  case QUIRK_SBZ:
  4181                          writew(0x0100, spec->mem_base + 0x320);
  4182                          writew(0x0005, spec->mem_base + 0x320);
  4183                          tmp = FLOAT_THREE;
  4184                          break;
  4185                  case QUIRK_R3DI:
  4186                          r3di_gpio_mic_set(codec, R3DI_FRONT_MIC);
  4187                          tmp = FLOAT_ONE;
  4188                          break;
  4189                  default:
  4190                          tmp = FLOAT_ONE;
  4191                          break;
  4192                  }
  4193  
  4194                  chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, 
SR_96_000);
  4195                  chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, 
SR_96_000);
  4196                  if (spec->quirk == QUIRK_R3DI)
  4197                          chipio_set_conn_rate(codec, 0x0F, SR_96_000);
  4198  
  4199                  dspio_set_uint_param(codec, 0x80, 0x00, tmp);
  4200  
  4201                  chipio_set_stream_control(codec, 0x03, 1);
  4202                  chipio_set_stream_control(codec, 0x04, 1);
  4203  
  4204                  if (spec->quirk == QUIRK_SBZ) {
  4205                          chipio_write(codec, 0x18B098, 0x0000000C);
  4206                          chipio_write(codec, 0x18B09C, 0x000000CC);
  4207                  }
  4208                  break;
  4209          }
> 4210          ca0132_cvoice_switch_set(codec);
  4211  
  4212          snd_hda_power_down_pm(codec);
  4213          return 0;
  4214  
  4215  }
  4216  
  4217  /*
  4218   * Check if VNODE settings take effect immediately.
  4219   */
  4220  static bool ca0132_is_vnode_effective(struct hda_codec *codec,
  4221                                       hda_nid_t vnid,
  4222                                       hda_nid_t *shared_nid)
  4223  {
  4224          struct ca0132_spec *spec = codec->spec;
  4225          hda_nid_t nid;
  4226  
  4227          switch (vnid) {
  4228          case VNID_SPK:
  4229                  nid = spec->shared_out_nid;
  4230                  break;
  4231          case VNID_MIC:
  4232                  nid = spec->shared_mic_nid;
  4233                  break;
  4234          default:
  4235                  return false;
  4236          }
  4237  
  4238          if (shared_nid)
  4239                  *shared_nid = nid;
  4240  
  4241          return true;
  4242  }
  4243  
  4244  /*
  4245  * The following functions are control change helpers.
  4246  * They return 0 if no changed.  Return 1 if changed.
  4247  */
  4248  static int ca0132_voicefx_set(struct hda_codec *codec, int enable)
  4249  {
  4250          struct ca0132_spec *spec = codec->spec;
  4251          unsigned int tmp;
  4252  
  4253          /* based on CrystalVoice state to enable VoiceFX. */
  4254          if (enable) {
  4255                  tmp = spec->effects_switch[CRYSTAL_VOICE - 
EFFECT_START_NID] ?
  4256                          FLOAT_ONE : FLOAT_ZERO;
  4257          } else {
  4258                  tmp = FLOAT_ZERO;
  4259          }
  4260  
  4261          dspio_set_uint_param(codec, ca0132_voicefx.mid,
  4262                               ca0132_voicefx.reqs[0], tmp);
  4263  
  4264          return 1;
  4265  }
  4266  
  4267  /*
  4268   * Set the effects parameters
  4269   */
  4270  static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, 
long val)
  4271  {
  4272          struct ca0132_spec *spec = codec->spec;
  4273          unsigned int on, tmp;
  4274          int num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
  4275          int err = 0;
  4276          int idx = nid - EFFECT_START_NID;
  4277  
  4278          if ((idx < 0) || (idx >= num_fx))
  4279                  return 0; /* no changed */
  4280  
  4281          /* for out effect, qualify with PE */
  4282          if ((nid >= OUT_EFFECT_START_NID) && (nid < 
OUT_EFFECT_END_NID)) {
  4283                  /* if PE if off, turn off out effects. */
  4284                  if (!spec->effects_switch[PLAY_ENHANCEMENT - 
EFFECT_START_NID])
  4285                          val = 0;
  4286          }
  4287  
  4288          /* for in effect, qualify with CrystalVoice */
  4289          if ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID)) {
  4290                  /* if CrystalVoice if off, turn off in effects. */
  4291                  if (!spec->effects_switch[CRYSTAL_VOICE - 
EFFECT_START_NID])
  4292                          val = 0;
  4293  
  4294                  /* Voice Focus applies to 2-ch Mic, Digital Mic */
  4295                  if ((nid == VOICE_FOCUS) && (spec->cur_mic_type != 
DIGITAL_MIC))
  4296                          val = 0;
  4297  
  4298                  /* If Voice Focus on SBZ, set to two channel. */
  4299                  if ((nid == VOICE_FOCUS) && (spec->quirk == QUIRK_SBZ)
  4300                                  && (spec->cur_mic_type != 
REAR_LINE_IN)) {
  4301                          if (spec->effects_switch[CRYSTAL_VOICE -
  4302                                                   EFFECT_START_NID]) {
  4303  
  4304                                  if (spec->effects_switch[VOICE_FOCUS -
  4305                                                           
EFFECT_START_NID]) {
  4306                                          tmp = FLOAT_TWO;
  4307                                          val = 1;
  4308                                  } else
  4309                                          tmp = FLOAT_ONE;
  4310  
  4311                                  dspio_set_uint_param(codec, 0x80, 0x00, 
tmp);
  4312                          }
  4313                  }
  4314                  /*
  4315                   * For SBZ noise reduction, there's an extra command
  4316                   * to module ID 0x47. No clue why.
  4317                   */
  4318                  if ((nid == NOISE_REDUCTION) && (spec->quirk == 
QUIRK_SBZ)
  4319                                  && (spec->cur_mic_type != 
REAR_LINE_IN)) {
  4320                          if (spec->effects_switch[CRYSTAL_VOICE -
  4321                                                   EFFECT_START_NID]) {
  4322                                  if 
(spec->effects_switch[NOISE_REDUCTION -
  4323                                                           
EFFECT_START_NID])
  4324                                          tmp = FLOAT_ONE;
  4325                                  else
  4326                                          tmp = FLOAT_ZERO;
  4327                          } else
  4328                                  tmp = FLOAT_ZERO;
  4329  
  4330                          dspio_set_uint_param(codec, 0x47, 0x00, tmp);
  4331                  }
  4332  
  4333                  /* If rear line in disable effects. */
  4334                  if (spec->use_alt_functions &&
  4335                                  spec->in_enum_val == REAR_LINE_IN)
  4336                          val = 0;
  4337          }
  4338  
  4339          codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n",
  4340                      nid, val);
  4341  
  4342          on = (val == 0) ? FLOAT_ZERO : FLOAT_ONE;
  4343          err = dspio_set_uint_param(codec, ca0132_effects[idx].mid,
  4344                                     ca0132_effects[idx].reqs[0], on);
  4345  
  4346          if (err < 0)
  4347                  return 0; /* no changed */
  4348  
  4349          return 1;
  4350  }
  4351  
  4352  /*
  4353   * Turn on/off Playback Enhancements
  4354   */
  4355  static int ca0132_pe_switch_set(struct hda_codec *codec)
  4356  {
  4357          struct ca0132_spec *spec = codec->spec;
  4358          hda_nid_t nid;
  4359          int i, ret = 0;
  4360  
  4361          codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n",
  4362                      spec->effects_switch[PLAY_ENHANCEMENT - 
EFFECT_START_NID]);
  4363  
  4364          if (spec->use_alt_functions)
  4365                  ca0132_alt_select_out(codec);
  4366  
  4367          i = OUT_EFFECT_START_NID - EFFECT_START_NID;
  4368          nid = OUT_EFFECT_START_NID;
  4369          /* PE affects all out effects */
  4370          for (; nid < OUT_EFFECT_END_NID; nid++, i++)
  4371                  ret |= ca0132_effects_set(codec, nid, 
spec->effects_switch[i]);
  4372  
  4373          return ret;
  4374  }
  4375  
  4376  /* Check if Mic1 is streaming, if so, stop streaming */
  4377  static int stop_mic1(struct hda_codec *codec)
  4378  {
  4379          struct ca0132_spec *spec = codec->spec;
  4380          unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 
0,
  4381                                                   AC_VERB_GET_CONV, 0);
  4382          if (oldval != 0)
  4383                  snd_hda_codec_write(codec, spec->adcs[0], 0,
  4384                                      AC_VERB_SET_CHANNEL_STREAMID,
  4385                                      0);
  4386          return oldval;
  4387  }
  4388  
  4389  /* Resume Mic1 streaming if it was stopped. */
  4390  static void resume_mic1(struct hda_codec *codec, unsigned int oldval)
  4391  {
  4392          struct ca0132_spec *spec = codec->spec;
  4393          /* Restore the previous stream and channel */
  4394          if (oldval != 0)
  4395                  snd_hda_codec_write(codec, spec->adcs[0], 0,
  4396                                      AC_VERB_SET_CHANNEL_STREAMID,
  4397                                      oldval);
  4398  }
  4399  
  4400  /*
  4401   * Turn on/off CrystalVoice
  4402   */
> 4403  static int ca0132_cvoice_switch_set(struct hda_codec *codec)
  4404  {
  4405          struct ca0132_spec *spec = codec->spec;
  4406          hda_nid_t nid;
  4407          int i, ret = 0;
  4408          unsigned int oldval;
  4409  
  4410          codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n",
  4411                      spec->effects_switch[CRYSTAL_VOICE - 
EFFECT_START_NID]);
  4412  
  4413          i = IN_EFFECT_START_NID - EFFECT_START_NID;
  4414          nid = IN_EFFECT_START_NID;
  4415          /* CrystalVoice affects all in effects */
  4416          for (; nid < IN_EFFECT_END_NID; nid++, i++)
  4417                  ret |= ca0132_effects_set(codec, nid, 
spec->effects_switch[i]);
  4418  
  4419          /* including VoiceFX */
  4420          ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0));
  4421  
  4422          /* set correct vipsource */
  4423          oldval = stop_mic1(codec);
  4424          if (spec->use_alt_functions)
  4425                  ret |= ca0132_alt_set_vipsource(codec, 1);
  4426          else
  4427                  ret |= ca0132_set_vipsource(codec, 1);
  4428          resume_mic1(codec, oldval);
  4429          return ret;
  4430  }
  4431  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to