Lines Matching +full:modem +full:- +full:init
4 * HD audio interface patch for Silicon Labs 3054/5 modem codec
6 * Copyright (c) 2005 Sasha Khapyorsky <sashak@alsa-project.org>
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <linux/init.h>
90 * Modem mixer
103 u16 reg = PRIVATE_REG(kcontrol->private_value); in si3054_switch_get()
104 u16 mask = PRIVATE_MASK(kcontrol->private_value); in si3054_switch_get()
105 uvalue->value.integer.value[0] = (GET_REG(codec, reg)) & mask ? 1 : 0 ; in si3054_switch_get()
113 u16 reg = PRIVATE_REG(kcontrol->private_value); in si3054_switch_put()
114 u16 mask = PRIVATE_MASK(kcontrol->private_value); in si3054_switch_put()
115 if (uvalue->value.integer.value[0]) in si3054_switch_put()
134 SI3054_KCONTROL("Off-hook Switch", SI3054_GPIO_CONTROL, SI3054_GPIO_OH),
157 SET_REG(codec, SI3054_LINE_RATE, substream->runtime->rate); in si3054_pcm_prepare()
159 val &= 0xff << (8 * (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)); in si3054_pcm_prepare()
160 val |= ((stream_tag & 0xf) << 4) << (8 * (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)); in si3054_pcm_prepare()
163 snd_hda_codec_setup_stream(codec, hinfo->nid, in si3054_pcm_prepare()
178 substream->runtime->hw.period_bytes_min = 80; in si3054_pcm_open()
179 return snd_pcm_hw_constraint_list(substream->runtime, 0, in si3054_pcm_open()
203 info = snd_hda_codec_pcm_new(codec, "Si3054 Modem"); in si3054_build_pcms()
205 return -ENOMEM; in si3054_build_pcms()
206 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = si3054_pcm; in si3054_build_pcms()
207 info->stream[SNDRV_PCM_STREAM_CAPTURE] = si3054_pcm; in si3054_build_pcms()
208 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = codec->core.mfg; in si3054_build_pcms()
209 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = codec->core.mfg; in si3054_build_pcms()
210 info->pcm_type = HDA_PCM_TYPE_MODEM; in si3054_build_pcms()
216 * Init part
221 struct si3054_spec *spec = codec->spec; in si3054_init()
225 if (snd_hdac_regmap_add_vendor_verb(&codec->core, in si3054_init()
227 return -ENOMEM; in si3054_init()
230 snd_hda_codec_write(codec, codec->core.mfg, 0, AC_VERB_SET_STREAM_FORMAT, 0); in si3054_init()
239 } while ((val & SI3054_MEI_READY) != SI3054_MEI_READY && wait_count--); in si3054_init()
244 /* return -EACCES; */ in si3054_init()
258 spec->international = GET_REG(codec, SI3054_CHIPID) & SI3054_CHIPID_INTERNATIONAL; in si3054_init()
265 kfree(codec->spec); in si3054_free()
275 .init = si3054_init,
283 return -ENOMEM; in patch_si3054()
284 codec->spec = spec; in patch_si3054()
285 codec->patch_ops = si3054_patch_ops; in patch_si3054()
303 /* Asus A8J Modem (SM56) */
305 /* LG LW20 modem */
312 MODULE_DESCRIPTION("Si3054 HD-audio modem codec");