1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Implementation of primary alsa driver code base for Intel HD Audio.
6 * Copyright(c) 2004 Intel Corporation
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
12 #include <linux/clocksource.h>
13 #include <linux/delay.h>
14 #include <linux/interrupt.h>
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/pm_runtime.h>
18 #include <linux/slab.h>
21 /* for art-tsc conversion */
25 #include <sound/core.h>
26 #include <sound/initval.h>
27 #include <sound/pcm_params.h>
28 #include "hda_controller.h"
29 #include "hda_local.h"
31 #define CREATE_TRACE_POINTS
32 #include "hda_controller_trace.h"
34 /* DSP lock helpers */
35 #define dsp_lock(dev) snd_hdac_dsp_lock(azx_stream(dev))
36 #define dsp_unlock(dev) snd_hdac_dsp_unlock(azx_stream(dev))
37 #define dsp_is_locked(dev) snd_hdac_stream_is_locked(azx_stream(dev))
39 /* assign a stream for the PCM */
40 static inline struct azx_dev
*
41 azx_assign_device(struct azx
*chip
, struct snd_pcm_substream
*substream
)
43 struct hdac_stream
*s
;
45 s
= snd_hdac_stream_assign(azx_bus(chip
), substream
);
48 return stream_to_azx_dev(s
);
51 /* release the assigned stream */
52 static inline void azx_release_device(struct azx_dev
*azx_dev
)
54 snd_hdac_stream_release(azx_stream(azx_dev
));
57 static inline struct hda_pcm_stream
*
58 to_hda_pcm_stream(struct snd_pcm_substream
*substream
)
60 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
61 return &apcm
->info
->stream
[substream
->stream
];
64 static u64
azx_adjust_codec_delay(struct snd_pcm_substream
*substream
,
67 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
68 struct hda_pcm_stream
*hinfo
= to_hda_pcm_stream(substream
);
69 u64 codec_frames
, codec_nsecs
;
71 if (!hinfo
->ops
.get_delay
)
74 codec_frames
= hinfo
->ops
.get_delay(hinfo
, apcm
->codec
, substream
);
75 codec_nsecs
= div_u64(codec_frames
* 1000000000LL,
76 substream
->runtime
->rate
);
78 if (substream
->stream
== SNDRV_PCM_STREAM_CAPTURE
)
79 return nsec
+ codec_nsecs
;
81 return (nsec
> codec_nsecs
) ? nsec
- codec_nsecs
: 0;
88 static int azx_pcm_close(struct snd_pcm_substream
*substream
)
90 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
91 struct hda_pcm_stream
*hinfo
= to_hda_pcm_stream(substream
);
92 struct azx
*chip
= apcm
->chip
;
93 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
95 trace_azx_pcm_close(chip
, azx_dev
);
96 mutex_lock(&chip
->open_mutex
);
97 azx_release_device(azx_dev
);
99 hinfo
->ops
.close(hinfo
, apcm
->codec
, substream
);
100 snd_hda_power_down(apcm
->codec
);
101 mutex_unlock(&chip
->open_mutex
);
102 snd_hda_codec_pcm_put(apcm
->info
);
106 static int azx_pcm_hw_params(struct snd_pcm_substream
*substream
,
107 struct snd_pcm_hw_params
*hw_params
)
109 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
110 struct azx
*chip
= apcm
->chip
;
111 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
112 struct hdac_stream
*hdas
= azx_stream(azx_dev
);
115 trace_azx_pcm_hw_params(chip
, azx_dev
);
117 if (dsp_is_locked(azx_dev
)) {
122 /* Set up BDLEs here, return -ENOMEM if too many BDLEs are required */
123 hdas
->bufsize
= params_buffer_bytes(hw_params
);
124 hdas
->period_bytes
= params_period_bytes(hw_params
);
125 hdas
->format_val
= 0;
126 hdas
->no_period_wakeup
=
127 (hw_params
->info
& SNDRV_PCM_INFO_NO_PERIOD_WAKEUP
) &&
128 (hw_params
->flags
& SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP
);
129 if (snd_hdac_stream_setup_periods(hdas
) < 0)
137 static int azx_pcm_hw_free(struct snd_pcm_substream
*substream
)
139 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
140 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
141 struct hda_pcm_stream
*hinfo
= to_hda_pcm_stream(substream
);
143 /* reset BDL address */
145 if (!dsp_is_locked(azx_dev
))
146 snd_hdac_stream_cleanup(azx_stream(azx_dev
));
148 snd_hda_codec_cleanup(apcm
->codec
, hinfo
, substream
);
150 azx_stream(azx_dev
)->prepared
= 0;
155 static int azx_pcm_prepare(struct snd_pcm_substream
*substream
)
157 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
158 struct azx
*chip
= apcm
->chip
;
159 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
160 struct hda_pcm_stream
*hinfo
= to_hda_pcm_stream(substream
);
161 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
162 unsigned int format_val
, stream_tag
, bits
;
164 struct hda_spdif_out
*spdif
=
165 snd_hda_spdif_out_of_nid(apcm
->codec
, hinfo
->nid
);
166 unsigned short ctls
= spdif
? spdif
->ctls
: 0;
168 trace_azx_pcm_prepare(chip
, azx_dev
);
170 if (dsp_is_locked(azx_dev
)) {
175 snd_hdac_stream_reset(azx_stream(azx_dev
));
176 bits
= snd_hdac_stream_format_bits(runtime
->format
, SNDRV_PCM_SUBFORMAT_STD
, hinfo
->maxbps
);
178 format_val
= snd_hdac_spdif_stream_format(runtime
->channels
, bits
, runtime
->rate
, ctls
);
180 dev_err(chip
->card
->dev
,
181 "invalid format_val, rate=%d, ch=%d, format=%d\n",
182 runtime
->rate
, runtime
->channels
, runtime
->format
);
187 err
= snd_hdac_stream_set_params(azx_stream(azx_dev
), format_val
);
191 snd_hdac_stream_setup(azx_stream(azx_dev
), false);
193 stream_tag
= azx_dev
->core
.stream_tag
;
194 /* CA-IBG chips need the playback stream starting from 1 */
195 if ((chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
) &&
196 stream_tag
> chip
->capture_streams
)
197 stream_tag
-= chip
->capture_streams
;
198 err
= snd_hda_codec_prepare(apcm
->codec
, hinfo
, stream_tag
,
199 azx_dev
->core
.format_val
, substream
);
203 azx_stream(azx_dev
)->prepared
= 1;
208 static int azx_pcm_trigger(struct snd_pcm_substream
*substream
, int cmd
)
210 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
211 struct azx
*chip
= apcm
->chip
;
212 struct hdac_bus
*bus
= azx_bus(chip
);
213 struct azx_dev
*azx_dev
;
214 struct snd_pcm_substream
*s
;
215 struct hdac_stream
*hstr
;
220 azx_dev
= get_azx_dev(substream
);
221 trace_azx_pcm_trigger(chip
, azx_dev
, cmd
);
223 hstr
= azx_stream(azx_dev
);
224 if (chip
->driver_caps
& AZX_DCAPS_OLD_SSYNC
)
225 sync_reg
= AZX_REG_OLD_SSYNC
;
227 sync_reg
= AZX_REG_SSYNC
;
229 if (dsp_is_locked(azx_dev
) || !hstr
->prepared
)
233 case SNDRV_PCM_TRIGGER_START
:
234 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
235 case SNDRV_PCM_TRIGGER_RESUME
:
238 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
239 case SNDRV_PCM_TRIGGER_SUSPEND
:
240 case SNDRV_PCM_TRIGGER_STOP
:
247 snd_pcm_group_for_each_entry(s
, substream
) {
248 if (s
->pcm
->card
!= substream
->pcm
->card
)
250 azx_dev
= get_azx_dev(s
);
251 sbits
|= 1 << azx_dev
->core
.index
;
252 snd_pcm_trigger_done(s
, substream
);
255 spin_lock(&bus
->reg_lock
);
257 /* first, set SYNC bits of corresponding streams */
258 snd_hdac_stream_sync_trigger(hstr
, true, sbits
, sync_reg
);
260 snd_pcm_group_for_each_entry(s
, substream
) {
261 if (s
->pcm
->card
!= substream
->pcm
->card
)
263 azx_dev
= get_azx_dev(s
);
265 azx_dev
->insufficient
= 1;
266 snd_hdac_stream_start(azx_stream(azx_dev
));
268 snd_hdac_stream_stop(azx_stream(azx_dev
));
271 spin_unlock(&bus
->reg_lock
);
273 snd_hdac_stream_sync(hstr
, start
, sbits
);
275 spin_lock(&bus
->reg_lock
);
276 /* reset SYNC bits */
277 snd_hdac_stream_sync_trigger(hstr
, false, sbits
, sync_reg
);
278 snd_hdac_stream_timecounter_init(hstr
, sbits
, start
);
279 spin_unlock(&bus
->reg_lock
);
283 unsigned int azx_get_pos_lpib(struct azx
*chip
, struct azx_dev
*azx_dev
)
285 return snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev
));
287 EXPORT_SYMBOL_GPL(azx_get_pos_lpib
);
289 unsigned int azx_get_pos_posbuf(struct azx
*chip
, struct azx_dev
*azx_dev
)
291 return snd_hdac_stream_get_pos_posbuf(azx_stream(azx_dev
));
293 EXPORT_SYMBOL_GPL(azx_get_pos_posbuf
);
295 unsigned int azx_get_position(struct azx
*chip
,
296 struct azx_dev
*azx_dev
)
298 struct snd_pcm_substream
*substream
= azx_dev
->core
.substream
;
300 int stream
= substream
->stream
;
303 if (chip
->get_position
[stream
])
304 pos
= chip
->get_position
[stream
](chip
, azx_dev
);
305 else /* use the position buffer as default */
306 pos
= azx_get_pos_posbuf(chip
, azx_dev
);
308 if (pos
>= azx_dev
->core
.bufsize
)
311 if (substream
->runtime
) {
312 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
313 struct hda_pcm_stream
*hinfo
= to_hda_pcm_stream(substream
);
315 if (chip
->get_delay
[stream
])
316 delay
+= chip
->get_delay
[stream
](chip
, azx_dev
, pos
);
317 if (hinfo
->ops
.get_delay
)
318 delay
+= hinfo
->ops
.get_delay(hinfo
, apcm
->codec
,
320 substream
->runtime
->delay
= delay
;
323 trace_azx_get_position(chip
, azx_dev
, pos
, delay
);
326 EXPORT_SYMBOL_GPL(azx_get_position
);
328 static snd_pcm_uframes_t
azx_pcm_pointer(struct snd_pcm_substream
*substream
)
330 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
331 struct azx
*chip
= apcm
->chip
;
332 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
333 return bytes_to_frames(substream
->runtime
,
334 azx_get_position(chip
, azx_dev
));
338 * azx_scale64: Scale base by mult/div while not overflowing sanely
340 * Derived from scale64_check_overflow in kernel/time/timekeeping.c
342 * The tmestamps for a 48Khz stream can overflow after (2^64/10^9)/48K which
343 * is about 384307 ie ~4.5 days.
345 * This scales the calculation so that overflow will happen but after 2^64 /
346 * 48000 secs, which is pretty large!
349 * base may overflow, but since there isn’t any additional division
350 * performed on base it’s OK
351 * rem can’t overflow because both are 32-bit values
355 static u64
azx_scale64(u64 base
, u32 num
, u32 den
)
359 rem
= do_div(base
, den
);
369 static int azx_get_sync_time(ktime_t
*device
,
370 struct system_counterval_t
*system
, void *ctx
)
372 struct snd_pcm_substream
*substream
= ctx
;
373 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
374 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
375 struct azx
*chip
= apcm
->chip
;
376 struct snd_pcm_runtime
*runtime
;
377 u64 ll_counter
, ll_counter_l
, ll_counter_h
;
378 u64 tsc_counter
, tsc_counter_l
, tsc_counter_h
;
379 u32 wallclk_ctr
, wallclk_cycles
;
385 runtime
= substream
->runtime
;
387 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
392 /* 0th stream tag is not used, so DMA ch 0 is for 1st stream tag */
395 dma_select
= (direction
<< GTSCC_CDMAS_DMA_DIR_SHIFT
) |
396 (azx_dev
->core
.stream_tag
- 1);
397 snd_hdac_chip_writel(azx_bus(chip
), GTSCC
, dma_select
);
399 /* Enable the capture */
400 snd_hdac_chip_updatel(azx_bus(chip
), GTSCC
, 0, GTSCC_TSCCI_MASK
);
403 if (snd_hdac_chip_readl(azx_bus(chip
), GTSCC
) &
411 dev_err(chip
->card
->dev
, "GTSCC capture Timedout!\n");
415 /* Read wall clock counter */
416 wallclk_ctr
= snd_hdac_chip_readl(azx_bus(chip
), WALFCC
);
418 /* Read TSC counter */
419 tsc_counter_l
= snd_hdac_chip_readl(azx_bus(chip
), TSCCL
);
420 tsc_counter_h
= snd_hdac_chip_readl(azx_bus(chip
), TSCCU
);
422 /* Read Link counter */
423 ll_counter_l
= snd_hdac_chip_readl(azx_bus(chip
), LLPCL
);
424 ll_counter_h
= snd_hdac_chip_readl(azx_bus(chip
), LLPCU
);
426 /* Ack: registers read done */
427 snd_hdac_chip_writel(azx_bus(chip
), GTSCC
, GTSCC_TSCCD_SHIFT
);
429 tsc_counter
= (tsc_counter_h
<< TSCCU_CCU_SHIFT
) |
432 ll_counter
= (ll_counter_h
<< LLPC_CCU_SHIFT
) | ll_counter_l
;
433 wallclk_cycles
= wallclk_ctr
& WALFCC_CIF_MASK
;
436 * An error occurs near frame "rollover". The clocks in
437 * frame value indicates whether this error may have
438 * occurred. Here we use the value of 10 i.e.,
439 * HDA_MAX_CYCLE_OFFSET
441 if (wallclk_cycles
< HDA_MAX_CYCLE_VALUE
- HDA_MAX_CYCLE_OFFSET
442 && wallclk_cycles
> HDA_MAX_CYCLE_OFFSET
)
446 * Sleep before we read again, else we may again get
447 * value near to MAX_CYCLE. Try to sleep for different
448 * amount of time so we dont hit the same number again
450 udelay(retry_count
++);
452 } while (retry_count
!= HDA_MAX_CYCLE_READ_RETRY
);
454 if (retry_count
== HDA_MAX_CYCLE_READ_RETRY
) {
455 dev_err_ratelimited(chip
->card
->dev
,
456 "Error in WALFCC cycle count\n");
460 *device
= ns_to_ktime(azx_scale64(ll_counter
,
461 NSEC_PER_SEC
, runtime
->rate
));
462 *device
= ktime_add_ns(*device
, (wallclk_cycles
* NSEC_PER_SEC
) /
463 ((HDA_MAX_CYCLE_VALUE
+ 1) * runtime
->rate
));
465 system
->cycles
= tsc_counter
;
466 system
->cs_id
= CSID_X86_ART
;
472 static int azx_get_sync_time(ktime_t
*device
,
473 struct system_counterval_t
*system
, void *ctx
)
479 static int azx_get_crosststamp(struct snd_pcm_substream
*substream
,
480 struct system_device_crosststamp
*xtstamp
)
482 return get_device_system_crosststamp(azx_get_sync_time
,
483 substream
, NULL
, xtstamp
);
486 static inline bool is_link_time_supported(struct snd_pcm_runtime
*runtime
,
487 struct snd_pcm_audio_tstamp_config
*ts
)
489 if (runtime
->hw
.info
& SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME
)
490 if (ts
->type_requested
== SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
)
496 static int azx_get_time_info(struct snd_pcm_substream
*substream
,
497 struct timespec64
*system_ts
, struct timespec64
*audio_ts
,
498 struct snd_pcm_audio_tstamp_config
*audio_tstamp_config
,
499 struct snd_pcm_audio_tstamp_report
*audio_tstamp_report
)
501 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
502 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
503 struct system_device_crosststamp xtstamp
;
507 if ((substream
->runtime
->hw
.info
& SNDRV_PCM_INFO_HAS_LINK_ATIME
) &&
508 (audio_tstamp_config
->type_requested
== SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK
)) {
510 snd_pcm_gettime(substream
->runtime
, system_ts
);
512 nsec
= timecounter_read(&azx_dev
->core
.tc
);
513 if (audio_tstamp_config
->report_delay
)
514 nsec
= azx_adjust_codec_delay(substream
, nsec
);
516 *audio_ts
= ns_to_timespec64(nsec
);
518 audio_tstamp_report
->actual_type
= SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK
;
519 audio_tstamp_report
->accuracy_report
= 1; /* rest of structure is valid */
520 audio_tstamp_report
->accuracy
= 42; /* 24 MHz WallClock == 42ns resolution */
522 } else if (is_link_time_supported(runtime
, audio_tstamp_config
)) {
524 ret
= azx_get_crosststamp(substream
, &xtstamp
);
528 switch (runtime
->tstamp_type
) {
529 case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC
:
532 case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW
:
533 *system_ts
= ktime_to_timespec64(xtstamp
.sys_monoraw
);
537 *system_ts
= ktime_to_timespec64(xtstamp
.sys_realtime
);
542 *audio_ts
= ktime_to_timespec64(xtstamp
.device
);
544 audio_tstamp_report
->actual_type
=
545 SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
;
546 audio_tstamp_report
->accuracy_report
= 1;
547 /* 24 MHz WallClock == 42ns resolution */
548 audio_tstamp_report
->accuracy
= 42;
551 audio_tstamp_report
->actual_type
= SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT
;
557 static const struct snd_pcm_hardware azx_pcm_hw
= {
558 .info
= (SNDRV_PCM_INFO_MMAP
|
559 SNDRV_PCM_INFO_INTERLEAVED
|
560 SNDRV_PCM_INFO_BLOCK_TRANSFER
|
561 SNDRV_PCM_INFO_MMAP_VALID
|
562 /* No full-resume yet implemented */
563 /* SNDRV_PCM_INFO_RESUME |*/
564 SNDRV_PCM_INFO_PAUSE
|
565 SNDRV_PCM_INFO_SYNC_START
|
566 SNDRV_PCM_INFO_HAS_WALL_CLOCK
| /* legacy */
567 SNDRV_PCM_INFO_HAS_LINK_ATIME
|
568 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP
),
569 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
570 .rates
= SNDRV_PCM_RATE_48000
,
575 .buffer_bytes_max
= AZX_MAX_BUF_SIZE
,
576 .period_bytes_min
= 128,
577 .period_bytes_max
= AZX_MAX_BUF_SIZE
/ 2,
579 .periods_max
= AZX_MAX_FRAG
,
583 static int azx_pcm_open(struct snd_pcm_substream
*substream
)
585 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
586 struct hda_pcm_stream
*hinfo
= to_hda_pcm_stream(substream
);
587 struct azx
*chip
= apcm
->chip
;
588 struct azx_dev
*azx_dev
;
589 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
593 snd_hda_codec_pcm_get(apcm
->info
);
594 mutex_lock(&chip
->open_mutex
);
595 azx_dev
= azx_assign_device(chip
, substream
);
596 trace_azx_pcm_open(chip
, azx_dev
);
597 if (azx_dev
== NULL
) {
601 runtime
->private_data
= azx_dev
;
603 runtime
->hw
= azx_pcm_hw
;
604 if (chip
->gts_present
)
605 runtime
->hw
.info
|= SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME
;
606 runtime
->hw
.channels_min
= hinfo
->channels_min
;
607 runtime
->hw
.channels_max
= hinfo
->channels_max
;
608 runtime
->hw
.formats
= hinfo
->formats
;
609 runtime
->hw
.rates
= hinfo
->rates
;
610 snd_pcm_limit_hw_rates(runtime
);
611 snd_pcm_hw_constraint_integer(runtime
, SNDRV_PCM_HW_PARAM_PERIODS
);
613 /* avoid wrap-around with wall-clock */
614 snd_pcm_hw_constraint_minmax(runtime
, SNDRV_PCM_HW_PARAM_BUFFER_TIME
,
618 if (chip
->align_buffer_size
)
619 /* constrain buffer sizes to be multiple of 128
620 bytes. This is more efficient in terms of memory
621 access but isn't required by the HDA spec and
622 prevents users from specifying exact period/buffer
623 sizes. For example for 44.1kHz, a period size set
624 to 20ms will be rounded to 19.59ms. */
627 /* Don't enforce steps on buffer sizes, still need to
628 be multiple of 4 bytes (HDA spec). Tested on Intel
629 HDA controllers, may not work on all devices where
630 option needs to be disabled */
633 snd_pcm_hw_constraint_step(runtime
, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES
,
635 snd_pcm_hw_constraint_step(runtime
, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES
,
637 snd_hda_power_up(apcm
->codec
);
639 err
= hinfo
->ops
.open(hinfo
, apcm
->codec
, substream
);
643 azx_release_device(azx_dev
);
646 snd_pcm_limit_hw_rates(runtime
);
648 if (snd_BUG_ON(!runtime
->hw
.channels_min
) ||
649 snd_BUG_ON(!runtime
->hw
.channels_max
) ||
650 snd_BUG_ON(!runtime
->hw
.formats
) ||
651 snd_BUG_ON(!runtime
->hw
.rates
)) {
652 azx_release_device(azx_dev
);
653 if (hinfo
->ops
.close
)
654 hinfo
->ops
.close(hinfo
, apcm
->codec
, substream
);
659 /* disable LINK_ATIME timestamps for capture streams
660 until we figure out how to handle digital inputs */
661 if (substream
->stream
== SNDRV_PCM_STREAM_CAPTURE
) {
662 runtime
->hw
.info
&= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK
; /* legacy */
663 runtime
->hw
.info
&= ~SNDRV_PCM_INFO_HAS_LINK_ATIME
;
666 snd_pcm_set_sync(substream
);
667 mutex_unlock(&chip
->open_mutex
);
671 snd_hda_power_down(apcm
->codec
);
673 mutex_unlock(&chip
->open_mutex
);
674 snd_hda_codec_pcm_put(apcm
->info
);
678 static const struct snd_pcm_ops azx_pcm_ops
= {
679 .open
= azx_pcm_open
,
680 .close
= azx_pcm_close
,
681 .hw_params
= azx_pcm_hw_params
,
682 .hw_free
= azx_pcm_hw_free
,
683 .prepare
= azx_pcm_prepare
,
684 .trigger
= azx_pcm_trigger
,
685 .pointer
= azx_pcm_pointer
,
686 .get_time_info
= azx_get_time_info
,
689 static void azx_pcm_free(struct snd_pcm
*pcm
)
691 struct azx_pcm
*apcm
= pcm
->private_data
;
693 list_del(&apcm
->list
);
694 apcm
->info
->pcm
= NULL
;
699 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
701 int snd_hda_attach_pcm_stream(struct hda_bus
*_bus
, struct hda_codec
*codec
,
702 struct hda_pcm
*cpcm
)
704 struct hdac_bus
*bus
= &_bus
->core
;
705 struct azx
*chip
= bus_to_azx(bus
);
707 struct azx_pcm
*apcm
;
708 int pcm_dev
= cpcm
->device
;
711 int type
= SNDRV_DMA_TYPE_DEV_SG
;
713 list_for_each_entry(apcm
, &chip
->pcm_list
, list
) {
714 if (apcm
->pcm
->device
== pcm_dev
) {
715 dev_err(chip
->card
->dev
, "PCM %d already exists\n",
720 err
= snd_pcm_new(chip
->card
, cpcm
->name
, pcm_dev
,
721 cpcm
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].substreams
,
722 cpcm
->stream
[SNDRV_PCM_STREAM_CAPTURE
].substreams
,
726 strscpy(pcm
->name
, cpcm
->name
, sizeof(pcm
->name
));
727 apcm
= kzalloc(sizeof(*apcm
), GFP_KERNEL
);
729 snd_device_free(chip
->card
, pcm
);
736 pcm
->private_data
= apcm
;
737 pcm
->private_free
= azx_pcm_free
;
738 if (cpcm
->pcm_type
== HDA_PCM_TYPE_MODEM
)
739 pcm
->dev_class
= SNDRV_PCM_CLASS_MODEM
;
740 list_add_tail(&apcm
->list
, &chip
->pcm_list
);
742 for (s
= 0; s
< 2; s
++) {
743 if (cpcm
->stream
[s
].substreams
)
744 snd_pcm_set_ops(pcm
, s
, &azx_pcm_ops
);
746 /* buffer pre-allocation */
747 size
= CONFIG_SND_HDA_PREALLOC_SIZE
* 1024;
748 if (size
> MAX_PREALLOC_SIZE
)
749 size
= MAX_PREALLOC_SIZE
;
751 type
= SNDRV_DMA_TYPE_DEV_WC_SG
;
752 snd_pcm_set_managed_buffer_all(pcm
, type
, chip
->card
->dev
,
753 size
, MAX_PREALLOC_SIZE
);
757 static unsigned int azx_command_addr(u32 cmd
)
759 unsigned int addr
= cmd
>> 28;
761 if (addr
>= AZX_MAX_CODECS
) {
769 /* receive a response */
770 static int azx_rirb_get_response(struct hdac_bus
*bus
, unsigned int addr
,
773 struct azx
*chip
= bus_to_azx(bus
);
774 struct hda_bus
*hbus
= &chip
->bus
;
778 err
= snd_hdac_bus_get_response(bus
, addr
, res
);
782 if (hbus
->no_response_fallback
)
785 if (!bus
->polling_mode
) {
786 dev_warn(chip
->card
->dev
,
787 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
788 bus
->last_cmd
[addr
]);
789 bus
->polling_mode
= 1;
794 dev_warn(chip
->card
->dev
,
795 "No response from codec, disabling MSI: last cmd=0x%08x\n",
796 bus
->last_cmd
[addr
]);
797 if (chip
->ops
->disable_msi_reset_irq
&&
798 chip
->ops
->disable_msi_reset_irq(chip
) < 0)
804 /* If this critical timeout happens during the codec probing
805 * phase, this is likely an access to a non-existing codec
806 * slot. Better to return an error and reset the system.
811 /* no fallback mechanism? */
812 if (!chip
->fallback_to_single_cmd
)
815 /* a fatal communication error; need either to reset or to fallback
816 * to the single_cmd mode
818 if (hbus
->allow_bus_reset
&& !hbus
->response_reset
&& !hbus
->in_reset
) {
819 hbus
->response_reset
= 1;
820 dev_err(chip
->card
->dev
,
821 "No response from codec, resetting bus: last cmd=0x%08x\n",
822 bus
->last_cmd
[addr
]);
823 return -EAGAIN
; /* give a chance to retry */
826 dev_err(chip
->card
->dev
,
827 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
828 bus
->last_cmd
[addr
]);
829 chip
->single_cmd
= 1;
830 hbus
->response_reset
= 0;
831 snd_hdac_bus_stop_cmd_io(bus
);
836 * Use the single immediate command instead of CORB/RIRB for simplicity
838 * Note: according to Intel, this is not preferred use. The command was
839 * intended for the BIOS only, and may get confused with unsolicited
840 * responses. So, we shouldn't use it for normal operation from the
842 * I left the codes, however, for debugging/testing purposes.
845 /* receive a response */
846 static int azx_single_wait_for_response(struct azx
*chip
, unsigned int addr
)
851 /* check IRV busy bit */
852 if (azx_readw(chip
, IRS
) & AZX_IRS_VALID
) {
853 /* reuse rirb.res as the response return value */
854 azx_bus(chip
)->rirb
.res
[addr
] = azx_readl(chip
, IR
);
859 if (printk_ratelimit())
860 dev_dbg(chip
->card
->dev
, "get_response timeout: IRS=0x%x\n",
861 azx_readw(chip
, IRS
));
862 azx_bus(chip
)->rirb
.res
[addr
] = -1;
867 static int azx_single_send_cmd(struct hdac_bus
*bus
, u32 val
)
869 struct azx
*chip
= bus_to_azx(bus
);
870 unsigned int addr
= azx_command_addr(val
);
873 bus
->last_cmd
[azx_command_addr(val
)] = val
;
875 /* check ICB busy bit */
876 if (!((azx_readw(chip
, IRS
) & AZX_IRS_BUSY
))) {
877 /* Clear IRV valid bit */
878 azx_writew(chip
, IRS
, azx_readw(chip
, IRS
) |
880 azx_writel(chip
, IC
, val
);
881 azx_writew(chip
, IRS
, azx_readw(chip
, IRS
) |
883 return azx_single_wait_for_response(chip
, addr
);
887 if (printk_ratelimit())
888 dev_dbg(chip
->card
->dev
,
889 "send_cmd timeout: IRS=0x%x, val=0x%x\n",
890 azx_readw(chip
, IRS
), val
);
894 /* receive a response */
895 static int azx_single_get_response(struct hdac_bus
*bus
, unsigned int addr
,
899 *res
= bus
->rirb
.res
[addr
];
904 * The below are the main callbacks from hda_codec.
906 * They are just the skeleton to call sub-callbacks according to the
907 * current setting of chip->single_cmd.
911 static int azx_send_cmd(struct hdac_bus
*bus
, unsigned int val
)
913 struct azx
*chip
= bus_to_azx(bus
);
917 if (chip
->single_cmd
|| bus
->use_pio_for_commands
)
918 return azx_single_send_cmd(bus
, val
);
920 return snd_hdac_bus_send_cmd(bus
, val
);
924 static int azx_get_response(struct hdac_bus
*bus
, unsigned int addr
,
927 struct azx
*chip
= bus_to_azx(bus
);
931 if (chip
->single_cmd
|| bus
->use_pio_for_commands
)
932 return azx_single_get_response(bus
, addr
, res
);
934 return azx_rirb_get_response(bus
, addr
, res
);
937 static const struct hdac_bus_ops bus_core_ops
= {
938 .command
= azx_send_cmd
,
939 .get_response
= azx_get_response
,
942 #ifdef CONFIG_SND_HDA_DSP_LOADER
944 * DSP loading code (e.g. for CA0132)
947 /* use the first stream for loading DSP */
948 static struct azx_dev
*
949 azx_get_dsp_loader_dev(struct azx
*chip
)
951 struct hdac_bus
*bus
= azx_bus(chip
);
952 struct hdac_stream
*s
;
954 list_for_each_entry(s
, &bus
->stream_list
, list
)
955 if (s
->index
== chip
->playback_index_offset
)
956 return stream_to_azx_dev(s
);
961 int snd_hda_codec_load_dsp_prepare(struct hda_codec
*codec
, unsigned int format
,
962 unsigned int byte_size
,
963 struct snd_dma_buffer
*bufp
)
965 struct hdac_bus
*bus
= &codec
->bus
->core
;
966 struct azx
*chip
= bus_to_azx(bus
);
967 struct azx_dev
*azx_dev
;
968 struct hdac_stream
*hstr
;
972 azx_dev
= azx_get_dsp_loader_dev(chip
);
973 hstr
= azx_stream(azx_dev
);
974 spin_lock_irq(&bus
->reg_lock
);
976 chip
->saved_azx_dev
= *azx_dev
;
979 spin_unlock_irq(&bus
->reg_lock
);
981 err
= snd_hdac_dsp_prepare(hstr
, format
, byte_size
, bufp
);
983 spin_lock_irq(&bus
->reg_lock
);
985 *azx_dev
= chip
->saved_azx_dev
;
986 spin_unlock_irq(&bus
->reg_lock
);
993 EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_prepare
);
995 void snd_hda_codec_load_dsp_trigger(struct hda_codec
*codec
, bool start
)
997 struct hdac_bus
*bus
= &codec
->bus
->core
;
998 struct azx
*chip
= bus_to_azx(bus
);
999 struct azx_dev
*azx_dev
= azx_get_dsp_loader_dev(chip
);
1001 snd_hdac_dsp_trigger(azx_stream(azx_dev
), start
);
1003 EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_trigger
);
1005 void snd_hda_codec_load_dsp_cleanup(struct hda_codec
*codec
,
1006 struct snd_dma_buffer
*dmab
)
1008 struct hdac_bus
*bus
= &codec
->bus
->core
;
1009 struct azx
*chip
= bus_to_azx(bus
);
1010 struct azx_dev
*azx_dev
= azx_get_dsp_loader_dev(chip
);
1011 struct hdac_stream
*hstr
= azx_stream(azx_dev
);
1013 if (!dmab
->area
|| !hstr
->locked
)
1016 snd_hdac_dsp_cleanup(hstr
, dmab
);
1017 spin_lock_irq(&bus
->reg_lock
);
1019 *azx_dev
= chip
->saved_azx_dev
;
1020 hstr
->locked
= false;
1021 spin_unlock_irq(&bus
->reg_lock
);
1023 EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_cleanup
);
1024 #endif /* CONFIG_SND_HDA_DSP_LOADER */
1027 * reset and start the controller registers
1029 void azx_init_chip(struct azx
*chip
, bool full_reset
)
1031 if (snd_hdac_bus_init_chip(azx_bus(chip
), full_reset
)) {
1032 /* correct RINTCNT for CXT */
1033 if (chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
)
1034 azx_writew(chip
, RINTCNT
, 0xc0);
1037 EXPORT_SYMBOL_GPL(azx_init_chip
);
1039 void azx_stop_all_streams(struct azx
*chip
)
1041 struct hdac_bus
*bus
= azx_bus(chip
);
1043 snd_hdac_stop_streams(bus
);
1045 EXPORT_SYMBOL_GPL(azx_stop_all_streams
);
1047 void azx_stop_chip(struct azx
*chip
)
1049 snd_hdac_bus_stop_chip(azx_bus(chip
));
1051 EXPORT_SYMBOL_GPL(azx_stop_chip
);
1056 static void stream_update(struct hdac_bus
*bus
, struct hdac_stream
*s
)
1058 struct azx
*chip
= bus_to_azx(bus
);
1059 struct azx_dev
*azx_dev
= stream_to_azx_dev(s
);
1061 /* check whether this IRQ is really acceptable */
1062 if (!chip
->ops
->position_check
||
1063 chip
->ops
->position_check(chip
, azx_dev
)) {
1064 spin_unlock(&bus
->reg_lock
);
1065 snd_pcm_period_elapsed(azx_stream(azx_dev
)->substream
);
1066 spin_lock(&bus
->reg_lock
);
1070 irqreturn_t
azx_interrupt(int irq
, void *dev_id
)
1072 struct azx
*chip
= dev_id
;
1073 struct hdac_bus
*bus
= azx_bus(chip
);
1075 bool active
, handled
= false;
1076 int repeat
= 0; /* count for avoiding endless loop */
1078 if (azx_has_pm_runtime(chip
))
1079 if (!pm_runtime_active(chip
->card
->dev
))
1082 spin_lock(&bus
->reg_lock
);
1088 status
= azx_readl(chip
, INTSTS
);
1089 if (status
== 0 || status
== 0xffffffff)
1094 if (snd_hdac_bus_handle_stream_irq(bus
, status
, stream_update
))
1097 status
= azx_readb(chip
, RIRBSTS
);
1098 if (status
& RIRB_INT_MASK
) {
1100 * Clearing the interrupt status here ensures that no
1101 * interrupt gets masked after the RIRB wp is read in
1102 * snd_hdac_bus_update_rirb. This avoids a possible
1103 * race condition where codec response in RIRB may
1104 * remain unserviced by IRQ, eventually falling back
1105 * to polling mode in azx_rirb_get_response.
1107 azx_writeb(chip
, RIRBSTS
, RIRB_INT_MASK
);
1109 if (status
& RIRB_INT_RESPONSE
) {
1110 if (chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
)
1112 snd_hdac_bus_update_rirb(bus
);
1115 } while (active
&& ++repeat
< 10);
1118 spin_unlock(&bus
->reg_lock
);
1120 return IRQ_RETVAL(handled
);
1122 EXPORT_SYMBOL_GPL(azx_interrupt
);
1129 * Probe the given codec address
1131 static int probe_codec(struct azx
*chip
, int addr
)
1133 unsigned int cmd
= (addr
<< 28) | (AC_NODE_ROOT
<< 20) |
1134 (AC_VERB_PARAMETERS
<< 8) | AC_PAR_VENDOR_ID
;
1135 struct hdac_bus
*bus
= azx_bus(chip
);
1137 unsigned int res
= -1;
1139 mutex_lock(&bus
->cmd_mutex
);
1141 azx_send_cmd(bus
, cmd
);
1142 err
= azx_get_response(bus
, addr
, &res
);
1144 mutex_unlock(&bus
->cmd_mutex
);
1145 if (err
< 0 || res
== -1)
1147 dev_dbg(chip
->card
->dev
, "codec #%d probed OK\n", addr
);
1151 void snd_hda_bus_reset(struct hda_bus
*bus
)
1153 struct azx
*chip
= bus_to_azx(&bus
->core
);
1156 azx_stop_chip(chip
);
1157 azx_init_chip(chip
, true);
1158 if (bus
->core
.chip_init
)
1159 snd_hda_bus_reset_codecs(bus
);
1163 /* HD-audio bus initialization */
1164 int azx_bus_init(struct azx
*chip
, const char *model
)
1166 struct hda_bus
*bus
= &chip
->bus
;
1169 err
= snd_hdac_bus_init(&bus
->core
, chip
->card
->dev
, &bus_core_ops
);
1173 bus
->card
= chip
->card
;
1174 mutex_init(&bus
->prepare_mutex
);
1175 bus
->pci
= chip
->pci
;
1176 bus
->modelname
= model
;
1177 bus
->mixer_assigned
= -1;
1178 bus
->core
.snoop
= azx_snoop(chip
);
1179 if (chip
->get_position
[0] != azx_get_pos_lpib
||
1180 chip
->get_position
[1] != azx_get_pos_lpib
)
1181 bus
->core
.use_posbuf
= true;
1182 bus
->core
.bdl_pos_adj
= chip
->bdl_pos_adj
;
1183 if (chip
->driver_caps
& AZX_DCAPS_CORBRP_SELF_CLEAR
)
1184 bus
->core
.corbrp_self_clear
= true;
1186 if (chip
->driver_caps
& AZX_DCAPS_4K_BDLE_BOUNDARY
)
1187 bus
->core
.align_bdle_4k
= true;
1189 if (chip
->driver_caps
& AZX_DCAPS_PIO_COMMANDS
)
1190 bus
->core
.use_pio_for_commands
= true;
1192 /* enable sync_write flag for stable communication as default */
1193 bus
->core
.sync_write
= 1;
1197 EXPORT_SYMBOL_GPL(azx_bus_init
);
1200 int azx_probe_codecs(struct azx
*chip
, unsigned int max_slots
)
1202 struct hdac_bus
*bus
= azx_bus(chip
);
1207 max_slots
= AZX_DEFAULT_CODECS
;
1209 /* First try to probe all given codec slots */
1210 for (c
= 0; c
< max_slots
; c
++) {
1211 if ((bus
->codec_mask
& (1 << c
)) & chip
->codec_probe_mask
) {
1212 if (probe_codec(chip
, c
) < 0) {
1213 /* Some BIOSen give you wrong codec addresses
1216 dev_warn(chip
->card
->dev
,
1217 "Codec #%d probe error; disabling it...\n", c
);
1218 bus
->codec_mask
&= ~(1 << c
);
1220 if (bus
->codec_mask
== 0)
1222 /* More badly, accessing to a non-existing
1223 * codec often screws up the controller chip,
1224 * and disturbs the further communications.
1225 * Thus if an error occurs during probing,
1226 * better to reset the controller chip to
1227 * get back to the sanity state.
1229 azx_stop_chip(chip
);
1230 azx_init_chip(chip
, true);
1235 /* Then create codec instances */
1236 for (c
= 0; c
< max_slots
; c
++) {
1237 if ((bus
->codec_mask
& (1 << c
)) & chip
->codec_probe_mask
) {
1238 struct hda_codec
*codec
;
1239 err
= snd_hda_codec_new(&chip
->bus
, chip
->card
, c
, &codec
);
1242 codec
->jackpoll_interval
= chip
->jackpoll_interval
;
1243 codec
->beep_mode
= chip
->beep_mode
;
1244 codec
->ctl_dev_id
= chip
->ctl_dev_id
;
1249 dev_err(chip
->card
->dev
, "no codecs initialized\n");
1254 EXPORT_SYMBOL_GPL(azx_probe_codecs
);
1256 /* configure each codec instance */
1257 int azx_codec_configure(struct azx
*chip
)
1259 struct hda_codec
*codec
, *next
;
1262 list_for_each_codec(codec
, &chip
->bus
) {
1263 if (!snd_hda_codec_configure(codec
))
1268 /* unregister failed codecs if any codec has been probed */
1269 list_for_each_codec_safe(codec
, next
, &chip
->bus
) {
1270 if (!codec
->configured
) {
1271 codec_err(codec
, "Unable to configure, disabling\n");
1272 snd_hdac_device_unregister(&codec
->core
);
1277 return success
? 0 : -ENODEV
;
1279 EXPORT_SYMBOL_GPL(azx_codec_configure
);
1281 static int stream_direction(struct azx
*chip
, unsigned char index
)
1283 if (index
>= chip
->capture_index_offset
&&
1284 index
< chip
->capture_index_offset
+ chip
->capture_streams
)
1285 return SNDRV_PCM_STREAM_CAPTURE
;
1286 return SNDRV_PCM_STREAM_PLAYBACK
;
1289 /* initialize SD streams */
1290 int azx_init_streams(struct azx
*chip
)
1293 int stream_tags
[2] = { 0, 0 };
1295 /* initialize each stream (aka device)
1296 * assign the starting bdl address to each stream (device)
1299 for (i
= 0; i
< chip
->num_streams
; i
++) {
1300 struct azx_dev
*azx_dev
= kzalloc(sizeof(*azx_dev
), GFP_KERNEL
);
1306 dir
= stream_direction(chip
, i
);
1307 /* stream tag must be unique throughout
1308 * the stream direction group,
1309 * valid values 1...15
1310 * use separate stream tag if the flag
1311 * AZX_DCAPS_SEPARATE_STREAM_TAG is used
1313 if (chip
->driver_caps
& AZX_DCAPS_SEPARATE_STREAM_TAG
)
1314 tag
= ++stream_tags
[dir
];
1317 snd_hdac_stream_init(azx_bus(chip
), azx_stream(azx_dev
),
1323 EXPORT_SYMBOL_GPL(azx_init_streams
);
1325 void azx_free_streams(struct azx
*chip
)
1327 struct hdac_bus
*bus
= azx_bus(chip
);
1328 struct hdac_stream
*s
;
1330 while (!list_empty(&bus
->stream_list
)) {
1331 s
= list_first_entry(&bus
->stream_list
, struct hdac_stream
, list
);
1333 kfree(stream_to_azx_dev(s
));
1336 EXPORT_SYMBOL_GPL(azx_free_streams
);