Bug 188411 - No speaker output on Samsung Tabpro S
Summary: No speaker output on Samsung Tabpro S
Status: NEW
Alias: None
Product: Drivers
Classification: Unclassified
Component: Sound(ALSA) (show other bugs)
Hardware: x86-64 Linux
: P1 normal
Assignee: Jaroslav Kysela
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-11-23 16:10 UTC by Gerben Meijer
Modified: 2018-07-15 08:48 UTC (History)
9 users (show)

See Also:
Kernel Version: 4.9-rc2
Subsystem:
Regression: No
Bisected commit-id:


Attachments
alsa-info (35.82 KB, text/plain)
2016-11-23 16:10 UTC, Gerben Meijer
Details
codecgraph (374.21 KB, image/png)
2016-11-24 14:28 UTC, Gerben Meijer
Details
register dump (6.64 KB, application/octet-stream)
2016-12-08 02:56 UTC, Libin Yang
Details
Register dump patch output (12.07 KB, text/plain)
2016-12-08 03:11 UTC, Gerben Meijer
Details
change em1 (1.26 KB, application/octet-stream)
2016-12-09 03:16 UTC, Libin Yang
Details
change lctl (1.26 KB, application/octet-stream)
2016-12-09 03:16 UTC, Libin Yang
Details
new change em1 (1.61 KB, application/octet-stream)
2016-12-16 06:24 UTC, Libin Yang
Details
dump register setting (1.32 KB, application/octet-stream)
2016-12-16 06:24 UTC, Libin Yang
Details
new em1 patch with register dump (314.91 KB, text/plain)
2016-12-16 12:38 UTC, Gerben Meijer
Details
change em1 v3 (2.80 KB, application/octet-stream)
2016-12-21 06:06 UTC, Libin Yang
Details
new change v4 (2.07 KB, application/octet-stream)
2016-12-28 08:43 UTC, Libin Yang
Details
select audio pll (1.59 KB, application/octet-stream)
2016-12-28 08:44 UTC, Libin Yang
Details
ALSA-hda-set-intel-audio-clock-to-a-properly-value (5.30 KB, application/octet-stream)
2017-01-20 06:38 UTC, Libin Yang
Details
ALSA-hda-set-intel-audio-clock V2 (5.31 KB, application/mbox)
2017-02-14 08:13 UTC, Libin Yang
Details
add-debug-info v2 (1.86 KB, application/mbox)
2017-02-14 08:16 UTC, Libin Yang
Details
ALSA-hda-set-intel-audio-clock V3 (5.33 KB, application/mbox)
2017-02-15 15:27 UTC, Libin Yang
Details
v4 patchset patch1 (2.01 KB, application/mbox)
2017-04-01 06:42 UTC, Libin Yang
Details
v4 patchset patch2 (3.65 KB, application/mbox)
2017-04-01 06:43 UTC, Libin Yang
Details

Description Gerben Meijer 2016-11-23 16:10:14 UTC
Created attachment 245791 [details]
alsa-info

On a Skylake based Samsung Tabpro S tablet I am having two alsa issues on 4.7.0, 4.8.0-rc5 and 4.9-rc2:

- no output on speaker with any possible configuration, but audio over headphone jack works
- playback speed/pitch is doubled (audible over headphones)

Sound works fine in Windows obviously, but rebooting from Windows to Linux (as opposed to cold boot) doesn't seem to have any influence on these issues.

I've tried modprobing with all the various ALC model quirks to no avail. I've tried toggling various options with amixer (Auto Mute, various speaker related values with amixer cset) and even played with hda-analyzer.py and hda-jack-retask but was unable to get anything from the speakers whatsoever, nor was I able to reduce the double speed/pitch playback.
Comment 1 Takashi Iwai 2016-11-23 16:45:01 UTC
(In reply to infernix from comment #0)
> Created attachment 245791 [details]
> - no output on speaker with any possible configuration, but audio over
> headphone jack works

This is a oft-seen problem, but...

> - playback speed/pitch is doubled (audible over headphones)

... this one is weird.
 
For further debugging, try to disable PulseAudio and test only with aplay / arecord at first.  This reduces the possible causes.

That is, test like
  % aplay -Dplughw foo.wav

If this still causes the high pitch, try to figure out how fast it is skewed.

About the speaker issue, it's possibly some GPIO pin or something like that controlling the speaker amp in addition.  Windows driver may have some extra information mentioning such a thing.
Comment 2 Gerben Meijer 2016-11-23 17:06:38 UTC
I did not mention it but all pulseaudio packages are purged during testing; this is purely on alsa.

As far as the skew, a 44.1khz wav file that plays with aplay -Dplughw for 1.514s-1.520s on any other device plays for 0.760-0.780s on this one, so presumably playback is running at 88.2khz. So looks like 200% playback speed on youtube etc.

I looked at the windows registry and did find mention of some pins but playing around with them in hda-jack-retask or the analyzer didn't get me anywhere; are there specific tools to get this data from windows?
Comment 3 Gerben Meijer 2016-11-24 14:28:18 UTC
I've tried a bunch of GPIOs with the following code:

for NID in 0x01 0x1a; do
for MASK1 in 0 ; do
for MASK2 in 1 2 3 4 5; do
for DIR1 in 0; do
for DATA1 in 0; do
for DIR2 in 0 1 2 3 4 5; do
for DATA2 in 0 1 2 3 4 5; do
  hda-verb /dev/snd/hwC0D0 ${NID} SET_GPIO_MASK 0x${MASK1}${MASK2};
  hda-verb /dev/snd/hwC0D0 ${NID} SET_GPIO_DIR 0x${DIR1}${DIR2};
  hda-verb /dev/snd/hwC0D0 ${NID} SET_GPIO_DATA 0x${DATA1}${DATA2}
  echo nid ${NID} mask 0x${MASK1}${MASK2} dir 0x${DIR1}${DIR2} data 0x${DATA1}${DATA2}
  amixer sset Speaker mute 0%; 
  amixer sset Master unmute 100%; 
  amixer sset Speaker unmute 100%; 
  time aplay -Dplughw voice.wav;  
done; done; done; done; done; done; done

That did not lead to any result unfortunately. Did I miss any combinations with the above code?

I looked at the windows drivers but there was no ini and the inf files didn't help either. The only thing I gathered from grepping strings in the Realtek drivers was that there's mention of Set_EAPD_Status but nothing concerning GPIO.
When looking in the registry, I see pin 12 and pin 18 mapped to Mic-In and pin 17 to Headphones but no mention of any pinXX for speaker (based on https://www.reaper-x.com/2012/02/13/how-to-remap-retasking-realtek-onboard-jacks-ports/). I do see a lot of CaliDataXYY entries.

I've attached a codecgraph as well. The windows driver has an option to either a) mute speaker when headphone is inserted or b) play separate streams over headphone jack and built-in speakers; is b) perhaps what is the default and that's why there's no audio?
Comment 4 Gerben Meijer 2016-11-24 14:28:46 UTC
Created attachment 245821 [details]
codecgraph
Comment 5 Takashi Iwai 2016-11-29 18:57:27 UTC
(In reply to infernix from comment #2)
> I did not mention it but all pulseaudio packages are purged during testing;
> this is purely on alsa.
> 
> As far as the skew, a 44.1khz wav file that plays with aplay -Dplughw for
> 1.514s-1.520s on any other device plays for 0.760-0.780s on this one, so
> presumably playback is running at 88.2khz. So looks like 200% playback speed
> on youtube etc.

Just an idea: could you try with 32bit samples, not 16bit?
You can convert the WAV file beforehand via sox, and play with aplay.
At best, use 48kHz.
Comment 6 Gerben Meijer 2016-11-29 19:53:56 UTC
32bits alone did not help, but in the processs I did determine that the rate is not 88.2khz; it's 96khz.

Converting a 44.1 mono voice sample to 96khz stereo in both 16 and 32bit and playback with -Dhw results in 100% accurate playback, accompanied with "rate is not accurate (requested 96khz, got 48khz). -Dplughw resamples it and playback is too fast again.

Is there some way to force the driver to accept that the hardware clock is 96khz and resample accordingly? Or to somehow reinit the codec at 44.1/48khz?
Comment 7 Gerben Meijer 2016-12-01 16:03:36 UTC
I've tested setting the codec to 96khz with a patch similar to alc269_fixup_pcm_44k() (e.g. spec->stream_analog/digital_playback), but that did not have the right result; in fact the audio is then sped up even more (so 400% playback speed). Perhaps I'm 

Further attempts at turning on speaker output with hda-analyzer have failed; I also looked at whether if the codec is driven through I2S but I can't find any evidence for this at all. I even contacted Samsung but unsurprisingly they provide zero support when running Linux.
Comment 8 Takashi Iwai 2016-12-02 12:56:52 UTC
(In reply to infernix from comment #7)
> I've tested setting the codec to 96khz with a patch similar to
> alc269_fixup_pcm_44k() (e.g. spec->stream_analog/digital_playback), but that
> did not have the right result; in fact the audio is then sped up even more
> (so 400% playback speed). Perhaps I'm 
> 
> Further attempts at turning on speaker output with hda-analyzer have failed;
> I also looked at whether if the codec is driven through I2S but I can't find
> any evidence for this at all. I even contacted Samsung but unsurprisingly
> they provide zero support when running Linux.

The codec chip dosn't support 96kHz so the change about the rate wouldn't make sense.  It's more about the link setup issue, I suppose.

Just for a test: could you check whether the following change adjusting the rate?

--- a/sound/hda/hdac_device.c
+++ b/sound/hda/hdac_device.c
@@ -774,6 +774,9 @@ unsigned int snd_hdac_calc_stream_format(unsigned int rate,
 	if (!rate_bits[i].hz)
 		return 0;
 
+	val = (val & ~AC_FMT_MULT_SHIFT_MASK) |
+		((val & AC_FMT_MULT_SHIFT_MASK) * 2 + (1 << AC_FMT_MULT_SHIFT));
+
 	if (channels == 0 || channels > 8)
 		return 0;
 	val |= channels - 1;


Also, what's about recording?  Does it ever work in the sane behavior?
Comment 9 Gerben Meijer 2016-12-02 14:00:32 UTC
Recording works fine at 48khz, meaning if I record the mic with something like Audacity and play it back on another box, it sounds correct.

As for the patch:

sound/hda/hdac_device.c:777:16: error: ‘AC_FMT_MULT_SHIFT_MASK’ undeclared (first use in this function)

Where is this defined? I can only find:

./include/sound/hda_verbs.h:#define AC_FMT_MULT_SHIFT		11
./include/sound/hda_verbs.h:#define AC_FMT_MULT_MASK		(7 << 11)
Comment 10 Takashi Iwai 2016-12-02 14:03:23 UTC
(In reply to infernix from comment #9)
> Recording works fine at 48khz, meaning if I record the mic with something
> like Audacity and play it back on another box, it sounds correct.

It's interesting.
 
> As for the patch:
> 
> sound/hda/hdac_device.c:777:16: error: ‘AC_FMT_MULT_SHIFT_MASK’ undeclared
> (first use in this function)
> 
> Where is this defined? I can only find:
> 
> ./include/sound/hda_verbs.h:#define AC_FMT_MULT_SHIFT         11
> ./include/sound/hda_verbs.h:#define AC_FMT_MULT_MASK          (7 << 11)

Yes, I forgot to add the inclusion of <sound/hda_verbs.h>
But this will break recording, just a test.  (And maybe this is wrong, it may give faster :)
Comment 11 Gerben Meijer 2016-12-02 14:10:27 UTC
I tried it like this:

--- a/sound/hda/hdac_device.c
+++ b/sound/hda/hdac_device.c
@@ -774,6 +774,9 @@ unsigned int snd_hdac_calc_stream_format(unsigned int rate,
 	if (!rate_bits[i].hz)
 		return 0;
 
+	val = (val & ~AC_FMT_MULT_MASK) |
+		((val & AC_FMT_MULT_MASK) * 2 + (1 << AC_FMT_MULT_SHIFT));
+
 	if (channels == 0 || channels > 8)
 		return 0;
 	val |= channels - 1;

The above patch again doubles playback speed to 400% compared to unpatched at 200%.
Comment 12 Takashi Iwai 2016-12-02 16:55:54 UTC
OK, that's expected.  I thought in a wrong direction, as I already mentioned.

Another thing just to make sure.  Try like:

--- a/sound/hda/hdac_device.c
+++ b/sound/hda/hdac_device.c
@@ -882,7 +882,7 @@ int snd_hdac_query_supported_pcm(struct hdac_device *codec, hda_nid_t nid,
 				formats |= SNDRV_PCM_FMTBIT_U8;
 				bps = 8;
 			}
-			if (val & AC_SUPPCM_BITS_16) {
+			if (0 /*val & AC_SUPPCM_BITS_16*/) {
 				formats |= SNDRV_PCM_FMTBIT_S16_LE;
 				bps = 16;
 			}

so that it kills 16bit format.

Other than that, I have no idea, so far.  We need to ask Realtek and Intel about such weird behavior.
Comment 13 Gerben Meijer 2016-12-02 17:29:29 UTC
Disabling S16_LE doesn't help, a 32bit 48khz sample still plays back at 200% with the above patch.

Any suggestions where to ask for more info on this issue?
Comment 14 Takashi Iwai 2016-12-02 19:21:39 UTC
One more sanity check.  Try to disable the speaker pin, e.g. creating /lib/firmware/alsa/disable-spk containing the following lines:

[codec]
0x10ec0298 0x144dc135 0

[pincfg]
0x14 0x40f000f0


... then pass it via patch module option to snd-hda-intel, e.g. creating /etc/modprobe.d/50-hda.conf containing

options snd-hda-intel patch="alsa/disable-spk"

Then you'll have only "Master" control for the headphone.

Does it show the same bad speed?  I guess so, but really need to check.
Comment 15 Gerben Meijer 2016-12-03 00:16:29 UTC
With that patch on pin 0x14, nothing changes.

However pin 0x17 is headphones, so if I change 0x14 to 0x17 in the patch, the Headphone volume control does indeed disappear but there is no audio output whatsoever. Looking at the time it takes to play the sample though, speed is still at 200%.

I also found that playback on the 3 HDMI output devices is at 200% as well.

FWIW here's the unpatched dmesg output with increased debugging:

snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
snd_hda_intel 0000:00:1f.3: bound to i915 component master
snd_hda_intel 0000:00:1f.3: display power enable
snd_hda_intel 0000:00:1f.3: enable codec wakeup
snd_hda_intel 0000:00:1f.3: disable codec wakeup
snd_hda_intel 0000:00:1f.3: Capability version: 0x0
snd_hda_intel 0000:00:1f.3: HDA capability ID: 0x2
snd_hda_intel 0000:00:1f.3: Found ML capability
snd_hda_intel 0000:00:1f.3: Capability version: 0x0
snd_hda_intel 0000:00:1f.3: HDA capability ID: 0x3
snd_hda_intel 0000:00:1f.3: Found PP capability offset=800
snd_hda_intel 0000:00:1f.3: Capability version: 0x0
snd_hda_intel 0000:00:1f.3: HDA capability ID: 0x1
snd_hda_intel 0000:00:1f.3: Found GTS capability offset=500
snd_hda_intel 0000:00:1f.3: Capability version: 0x0
snd_hda_intel 0000:00:1f.3: HDA capability ID: 0x5
snd_hda_intel 0000:00:1f.3: Found DRSM capability
snd_hda_intel 0000:00:1f.3: Capability version: 0x0
snd_hda_intel 0000:00:1f.3: HDA capability ID: 0x4
snd_hda_intel 0000:00:1f.3: Found SPB capability
snd_hda_intel 0000:00:1f.3: enable codec wakeup
snd_hda_intel 0000:00:1f.3: codec_mask = 0x5
snd_hda_intel 0000:00:1f.3: disable codec wakeup
snd_hda_intel 0000:00:1f.3: codec #0 probed OK
snd_hda_intel 0000:00:1f.3: codec #2 probed OK
snd_hda_codec_realtek hdaudioC0D0: SKU: Nid=0x1d sku_cfg=0x40642245
snd_hda_codec_realtek hdaudioC0D0: SKU: port_connectivity=0x1
snd_hda_codec_realtek hdaudioC0D0: SKU: enable_pcbeep=0x0
snd_hda_codec_realtek hdaudioC0D0: SKU: check_sum=0x00000004
snd_hda_codec_realtek hdaudioC0D0: SKU: customization=0x00000022
snd_hda_codec_realtek hdaudioC0D0: SKU: external_amp=0x0
snd_hda_codec_realtek hdaudioC0D0: SKU: platform_type=0x1
snd_hda_codec_realtek hdaudioC0D0: SKU: swap=0x0
snd_hda_codec_realtek hdaudioC0D0: SKU: override=0x1
snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC298: line_outs=1 (0x1a/0x0/0x0/0x0/0x0) type:speaker
snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x17/0x0/0x0/0x0/0x0)
snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
snd_hda_codec_realtek hdaudioC0D0:    inputs:
snd_hda_codec_realtek hdaudioC0D0:      Mic=0x18
snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12
snd_hda_codec_realtek hdaudioC0D0: realtek: No valid SSID, checking pincfg 0x40642245 for NID 0x1d
snd_hda_codec_realtek hdaudioC0D0: realtek: Enabling init ASM_ID=0x2245 CODEC_ID=10ec0298
snd_hda_codec_realtek hdaudioC0D0: ==> lo_type=2, wired=1, mio=1, badness=0x0
snd_hda_codec_realtek hdaudioC0D0: multi_outs = 17/0/0/0 : 2/0/0/0 (type HP)
snd_hda_codec_realtek hdaudioC0D0:   out path: depth=3 '02:0c:17'
snd_hda_codec_realtek hdaudioC0D0: spk_outs = 1a/0/0/0 : 3/0/0/0
snd_hda_codec_realtek hdaudioC0D0:   spk path: depth=3 '03:0d:1a'
snd_hda_codec_realtek hdaudioC0D0: ==> Best config: lo_type=2, wired=1, mio=1
snd_hda_codec_realtek hdaudioC0D0: multi_outs = 17/0/0/0 : 2/0/0/0 (type HP)
snd_hda_codec_realtek hdaudioC0D0:   out path: depth=3 '02:0c:17'
snd_hda_codec_realtek hdaudioC0D0: spk_outs = 1a/0/0/0 : 3/0/0/0
snd_hda_codec_realtek hdaudioC0D0:   spk path: depth=3 '03:0d:1a'
snd_hda_codec_realtek hdaudioC0D0: loopback path: depth=2 '18:0b'
snd_hda_codec_realtek hdaudioC0D0: input path: depth=3 '18:23:08'
snd_hda_codec_realtek hdaudioC0D0: input path: depth=3 '18:22:09'
snd_hda_codec_realtek hdaudioC0D0: input path: depth=3 '12:22:09'
snd_hda_codec_realtek hdaudioC0D0: input path: depth=3 '12:24:11'
snd_hda_codec_realtek hdaudioC0D0: Enable HP auto-muting on NID 0x17
snd_hda_codec_realtek hdaudioC0D0: Enable auto-mic switch on NID 0x12/0x18/0x0
snd_hda_codec_hdmi hdaudioC0D2: invalid CONNECT_LIST verb 5[1]:0
snd_hda_codec_hdmi hdaudioC0D2: hdmi: haswell: override pin connection 0x5
snd_hda_codec_hdmi hdaudioC0D2: invalid CONNECT_LIST verb 6[1]:0
snd_hda_codec_hdmi hdaudioC0D2: hdmi: haswell: override pin connection 0x6
snd_hda_codec_hdmi hdaudioC0D2: invalid CONNECT_LIST verb 7[1]:0
snd_hda_codec_hdmi hdaudioC0D2: hdmi: haswell: override pin connection 0x7
snd_hda_intel 0000:00:1f.3: display power enable
snd_hda_intel 0000:00:1f.3: display power disable
input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input20
input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input21
input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input22
input: HDA Intel PCH HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input23
input: HDA Intel PCH HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input24
snd_hda_intel 0000:00:1f.3: azx_get_response timeout, polling the codec once: last cmd=0x003f0500
snd_hda_intel 0000:00:1f.3: display power disable
Comment 16 Gerben Meijer 2016-12-03 00:36:53 UTC
Sorry, I misread your last comment; I retried with pin 0x1a disabled, but again the same result at 200% playback speed. In fact nothing I toggled in hda-analyzer made any difference for playback speed, and I think I toggled everything there at least twice.
Comment 17 Takashi Iwai 2016-12-06 15:26:58 UTC
Realtek people told me that the pin 0x17 is basically for I2S connection. (And Samsung doesn't support Linux for this device.)
Although the codec chip works for both I2S and HD-audio busses, probably it's set up for I2S inconsistently.

However, the HDMI output is a different story.  IIRC, this should be only over HD-audio link.  So the fact that HDMI also plays in a wrong rate implies that the possible cause is rather in the HD-audio controller side.
Comment 18 Takashi Iwai 2016-12-06 15:27:50 UTC
One more favor: could you check whether the problem persists even if you do playback while running the recording at the same time?
Comment 19 Gerben Meijer 2016-12-07 02:14:38 UTC
When I disable 0x17 I lose headphone output. Moreover, in the Windows registry  pin 12 and 18 are mapped to Mic-In and pin 17 to Headphones, so that matches up. And I really don't find any evidence in Windows that it is I2S controlled; the driver is standard Realtek and no mention of I2S anywhere. But that might not mean anything of course.

And yes, the playback rate is 200% even when recording.

Not sure where to go from here; I did look at the SoC rt298.c source but no idea where to start. I see this with i2cdetect -l:

i2c-3	i2c       i915 gmbus dpd                  	I2C adapter
i2c-1	i2c       i915 gmbus dpc                  	I2C adapter
i2c-11	i2c       Synopsys DesignWare I2C adapter 	I2C adapter
i2c-8	i2c       Synopsys DesignWare I2C adapter 	I2C adapter
i2c-6	i2c       Synopsys DesignWare I2C adapter 	I2C adapter
i2c-4	i2c       DPDDC-A                         	I2C adapter
i2c-2	i2c       i915 gmbus dpb                  	I2C adapter
i2c-0	smbus     SMBus I801 adapter at f040      	SMBus adapter
i2c-9	i2c       Synopsys DesignWare I2C adapter 	I2C adapter
i2c-10	i2c       Synopsys DesignWare I2C adapter 	I2C adapter
i2c-7	i2c       Synopsys DesignWare I2C adapter 	I2C adapter
i2c-5	i2c       DPDDC-C                         	I2C adapter

A number of devices are connected to designware buses 6, 7, 10 and 11 (INT3472 INT347F SMO8A80 STH0001 SYNP1234 TOBH1733) but nothing is found on 8 or 9. Looking at the skylake SoC code, it seems to look for INT343A for Realtek codecs and INT3438 for skylake; neither seem to be present. I don't see this from within Windows either. What I do see is that on Windows the Intel SST driver loads a lot of dsp_fw_release_*.bin files. 

One final clue: there is an INT344B GPIO controller in Windows, which seems to be supported through drivers/pinctrl/intel/pinctrl-sunrisepoint.c and its source seems to have support for SPKR and DMIC_* pins. Is it possible that the speaker GPIO is controlled outside the audio codec?
Comment 20 Gerben Meijer 2016-12-07 18:19:14 UTC
After some digging I managed to play with the SPKR and I2C[2-5]_* pins on the sunrise point gpio controller, but that did not enable speaker output. It was a long shot anyway. So I'm all out of ideas now, other than that the skylake audio isn't getting initialized correctly (re dsp_fw_*.bin files)
Comment 21 Libin Yang 2016-12-08 02:56:21 UTC
Created attachment 247111 [details]
register dump
Comment 22 Libin Yang 2016-12-08 03:01:50 UTC
Could you please apply the register dump patch and send out the dump info of:
# cat /sys/devices/pci0000:00/0000:00:1f.3/hda_reg
# cat /sys/devices/pci0000:00/0000:00:1f.3/hda_reg_dsp
# cat /sys/devices/pci0000:00/0000:00:1f.3/hda_reg_gt
# cat /sys/devices/pci0000:00/0000:00:1f.3/hda_reg_ml
# cat /sys/devices/pci0000:00/0000:00:1f.3/hda_reg_spbf
# cat /sys/devices/pci0000:00/0000:00:1f.3/hda_reg_vendor

0000:00:1f.3 may change. You can use lspci -vvv to check it, or check /sys/module/snd_hda_intel/drivers/pci:snd_hda_intel to find it.
Comment 23 Gerben Meijer 2016-12-08 03:11:18 UTC
Created attachment 247121 [details]
Register dump patch output

hda_reg* output attached
Comment 24 Libin Yang 2016-12-09 03:16:06 UTC
Created attachment 247201 [details]
change em1
Comment 25 Libin Yang 2016-12-09 03:16:26 UTC
Created attachment 247211 [details]
change lctl
Comment 26 Libin Yang 2016-12-09 03:17:26 UTC
Could you please apply change em1 patch and test. And then together apply lctl patch and test again? Thanks.
Comment 27 Gerben Meijer 2016-12-09 04:05:45 UTC
First, I undid the tmp regdump patch.

Second, what does not work is em1+lctl:

<0>in hda_intel_init_chip 568, em1: 0x1020608
snd_hda_intel 0000:00:1f.3: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: No response from codec, disabling MSI: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: Codec #0 probe error; disabling it...

Third, with only em1 patch at boot:

<0>in hda_intel_init_chip 568, em1: 0x1020608

Playback speed/pitch is still 200% + no speaker output.


Finally, when I boot with em1 patch and then do 'alsa unload', set printk to 7 + debugfs +p on sound/*, and then modprobe snd-intel-hda again:

[  109.751295] <0>in hda_intel_init_chip 568, em1: 0x20608

Audio playback speed is then 100% correct! Success!

I am a bit puzzled why it needs an additional unload and modprobe to work though?
Comment 28 Libin Yang 2016-12-09 06:11:01 UTC
1. The patch should change em1 register, no only for the unload, but also for the bootup. My platform does the right change when bootup. It's weird... 

2. Could you please test revert all patches and only apply the lctl patch?
Comment 29 Libin Yang 2016-12-09 06:15:36 UTC
It will be better that you add the printk to see if the register is changed. 

In your dump info:
in hda_intel_init_chip 568, em1: 0x1020608
It should be the information before we changed. I only add the printk before changing.
Comment 30 Gerben Meijer 2016-12-09 13:20:08 UTC
1. em1 pre reads the value before writing; post reads it again after writing; at bootup:

[   16.136234] <0>in hda_intel_init_chip 568, em1 pre: 0x1020608
[   16.136237] <1>in hda_intel_init_chip 572, em1 post: 0x20608

playback is at 200%

after alsa unload && modprobe:

[   66.797895] <0>in hda_intel_init_chip 568, em1 pre: 0x20608
[   66.797902] <1>in hda_intel_init_chip 572, em1 post: 0x20608

playback is correct.

Perhaps em1 should be set earlier?


2. With no em1 and only lctl, at bootup:

[   16.141167] <2>in hda_intel_init_chip 575, lctl pre: 0x810000
[   16.141169] <3>in hda_intel_init_chip 580, lctl post: 0x810003
[   19.173665] snd_hda_intel 0000:00:1f.3: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000
[   20.181376] snd_hda_intel 0000:00:1f.3: No response from codec, disabling MSI: last cmd=0x000f0000
[   21.189374] snd_hda_intel 0000:00:1f.3: Codec #0 probe error; disabling it...

after alsa unload && modprobe:

[   50.982492] <2>in hda_intel_init_chip 575, lctl pre: 0x810003
[   50.982493] <3>in hda_intel_init_chip 580, lctl post: 0x810003

Codec stays disabled, no result.
Comment 31 Gerben Meijer 2016-12-09 13:54:46 UTC
FWIW I did find the datasheet here http://www.intel.com/content/www/us/en/processors/core/6th-gen-core-pch-u-y-io-datasheet-vol-2.html but I am not sure where the documentation is for the registers show in hda_show_vendor; is that the Realtek codec being written to?
Comment 32 Libin Yang 2016-12-10 10:16:57 UTC
OK. Thanks. It seems the lctl patch works on my platform. The registers for vendor is supposed in another spec.

I will check with our silicon team about the register setting sequence. Maybe we need a reset for it.
Comment 33 Richard Rico 2016-12-11 05:59:41 UTC
Hello Libin Yang and Infernix,

I too have a galaxy tabpro S with Ubuntu (16.04) installed and I just discovered this post and thus upgraded to kernel 4.9-rc2 with the hopes of solving the sound output issue using the eml patch. I've read thru this thread but I can't seem to figure out which file was patched. Was it: snd_hda_intel and how? Thanks in advance for your help!

Richard
Comment 34 Libin Yang 2016-12-12 01:35:26 UTC
Hi Richard,

The following 2 files will be patched:
 include/sound/hda_register.h | 1 +
 sound/pci/hda/hda_intel.c    | 4 ++++
You can download the patch and run git am xxx.patch directly in the source code root folder. 

And after it is compiled, the new snd_hda_intel kernel module will be created.

Thanks,
Libin
Comment 35 Libin Yang 2016-12-13 01:32:08 UTC
Hi infernix,

COuld you please try modify the lctl patch and set val to 0x2 not 0x3:
 val |= 0x3;  == > val |= 0x2;

This is used to setting the clk. 0x3 means use 48MHz clk. However I was told 48MHz is not supported.

And before setting lctl, EM1.LFLCS is 0, which means we still need em1 patch.

Thanks,
Libin
Comment 36 Gerben Meijer 2016-12-13 10:44:17 UTC
Hi Libin,

<0>in hda_intel_init_chip 568, em1 pre: 0x1020608
<1>in hda_intel_init_chip 572, em1 post: 0x20608
<2>in hda_intel_init_chip 575, lctl pre: 0x810000
<3>in hda_intel_init_chip 580, lctl post: 0x810002
snd_hda_intel 0000:00:1f.3: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: No response from codec, disabling MSI: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: Codec #0 probe error; disabling it...

No luck with 0x2 on bootup. 

Same result with em1 at boot, unload, and then modprobe with em1+lctl:

<0>in hda_intel_init_chip 568, em1 pre: 0x1020608
<1>in hda_intel_init_chip 572, em1 post: 0x20608

alsa unload && compile with lctl patch && modprobe

<0>in hda_intel_init_chip 568, em1 pre: 0x20608
<1>in hda_intel_init_chip 572, em1 post: 0x20608
<2>in hda_intel_init_chip 575, lctl pre: 0x810000
<3>in hda_intel_init_chip 580, lctl post: 0x810002
snd_hda_intel 0000:00:1f.3: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: No response from codec, disabling MSI: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: Codec #0 probe error; disabling it...


For reference, code in question:

#define AZX_REG_SKL_ML_LCTL             0xC44
#define AZX_REG_SKL_EM1                 0x1000

...

val = azx_readl(chip, SKL_EM1);
printk("<0>in %s %d, em1 pre: %#x\n", __func__, __LINE__, val);
val &= ~0x1000000;
azx_writel(chip, SKL_EM1, val);
val = azx_readl(chip, SKL_EM1);
printk("<1>in %s %d, em1 post: %#x\n", __func__, __LINE__, val);

val = azx_readl(chip, SKL_ML_LCTL);
printk("<2>in %s %d, lctl pre: %#x\n", __func__, __LINE__, val);
val &= ~0xf;
val |= 0x2;
azx_writel(chip, SKL_ML_LCTL, val);
val = azx_readl(chip, SKL_ML_LCTL);
printk("<3>in %s %d, lctl post: %#x\n", __func__, __LINE__, val);
Comment 37 Libin Yang 2016-12-14 02:22:05 UTC
Hi infernix,

Thanks, it seems it still doesn't support this rate. I will check with our silicon team to see if we need some extra setting.
Comment 38 Libin Yang 2016-12-16 06:24:12 UTC
Created attachment 247781 [details]
new change em1
Comment 39 Libin Yang 2016-12-16 06:24:42 UTC
Created attachment 247791 [details]
dump register setting
Comment 40 Libin Yang 2016-12-16 06:27:55 UTC
Hi infernix,

Please apply new change em1 patch and have a test. Also please apply the dump register setting patch and send me the dmesg. Our silicon is asking for all the register accessing.

Our silicon team asked to reset the em1 register in chip reset. However I did the test and it failed to reset the em1 register in reset. So I reset em1 before reset the chip. No sure it will work.

Thanks,
Libin
Comment 41 Gerben Meijer 2016-12-16 12:38:07 UTC
Created attachment 247831 [details]
new em1 patch with register dump

Hi Linbin,

At bootup still the same - 200% playback rate. 

After unload && modprobe playback speed of 48khz (32bit) samples with -Dhw is correct, however playback of 44khz audio with -Dplughw sounds like it gets downsampled to 22khz or less; I don't recall this from the previous em1 patch but it may have been that way already.

Additionally, the first time playing any sample has a 1-3 second extra delay before it starts (has always been the case).

Full system log attached; you can search for 'Playing WAVE' to find audio playback times.
Comment 42 Libin Yang 2016-12-20 08:08:15 UTC
Hi infernix,

It's werid. It seems that you can't change the em1 register at the first time and it is OK for me.

Our silicon give me some other advices on it. I will work out patches later today or tomorrow.

Thanks,
Libin
Comment 43 Libin Yang 2016-12-21 06:06:15 UTC
Created attachment 248231 [details]
change em1 v3
Comment 44 Libin Yang 2016-12-21 06:09:15 UTC
Hi infernix,

Could you please help try change em1 v3?

I try to modify the em1 in 2 ways in this patch:
1. try to modify the shadow em1
2. before change the em1, clear SPA
Either one way works will help to fix this issue.

Thanks,
Libin
Comment 45 Gerben Meijer 2016-12-21 16:15:13 UTC
Hi Libin,

Playback is correct at bootup with -Dhw and 48khz samples! Success :) dmesg:

[   16.125053] <0>in hda_intel_init_chip 589, sem1: 0x1020608
[   16.125058] <0>in hda_intel_init_chip 589, sem1: 0x20608
[   16.125059] <0>in hda_intel_init_chip 589, set SPA to 0 and wait CPA to 0
[   16.224344] <0>in hda_intel_init_chip 589, lctl: 0x10000
[   16.224347] <0>in hda_intel_init_chip 589, em1: 0x20608
[   16.224350] <0>in hda_intel_init_chip 589, em1: 0x20608
[   16.224351] <0>in hda_intel_init_chip 589, set SPA to 1 and wait CPA to 1
[   16.323634] <0>in hda_intel_init_chip 589, lctl: 0x10000
[   16.334387] <0>in hda_intel_init_chip 611, sem1: 0x20608
[   16.334395] <0>in hda_intel_init_chip 611, sem1: 0x20608
[   16.334396] <0>in hda_intel_init_chip 611, set SPA to 0 and wait CPA to 0
[   16.433678] <0>in hda_intel_init_chip 611, lctl: 0x0
[   16.433681] <0>in hda_intel_init_chip 611, em1: 0x20608
[   16.433682] <0>in hda_intel_init_chip 611, em1: 0x20608
[   16.433683] <0>in hda_intel_init_chip 611, set SPA to 1 and wait CPA to 1
[   16.532976] <0>in hda_intel_init_chip 611, lctl: 0x810000


However, playback of 44khz audio with -Dhw as well as -Dplughw still sounds bad, as if being played back with less bits or lower samplerate. This is  /proc/asound/card0/pcm0p/sub0/hw_params during playback of 44khz with -Dhw:

./hw_params:access: RW_INTERLEAVED
./hw_params:format: S16_LE
./hw_params:subformat: STD
./hw_params:channels: 2
./hw_params:rate: 44100 (44100/1)
./hw_params:period_size: 4096
./hw_params:buffer_size: 16384

And this with -Dhw of 48khz sample:

./hw_params:access: RW_INTERLEAVED
./hw_params:format: S16_LE
./hw_params:subformat: STD
./hw_params:channels: 2
./hw_params:rate: 48000 (48000/1)
./hw_params:period_size: 4096
./hw_params:buffer_size: 16384


So as you can see, it does set the hardware to the actual sample rate, but it almost seems it doesn't really support 44khz. 48k, 96k and 192k are all fine with -Dhw.

Should we force minimum sample rate to 48k?
Comment 46 Libin Yang 2016-12-22 03:00:25 UTC
Hi infernix,

I remember 44.1KHz never works before even with my patches after reloading the snd modules, right?

However, 44.1KHz should be supported by HW. Otherwise with -Dplughw, it will be resampled to a correct sample rate. I'm still thinking it may be a clock issue.

Could you check the output of /proc/asound/card0/pcm0p/sub0/hw_params with -Dplughw for 44.1KHz?

Thanks,
Libin
Comment 47 Gerben Meijer 2016-12-22 03:18:31 UTC
Hi Libin, 

Hw_params shows playback rate to be 44.1khz with both -Dhw and plughw for 44.1khz samples.
Comment 48 Libin Yang 2016-12-28 08:43:53 UTC
Created attachment 248811 [details]
new change v4
Comment 49 Libin Yang 2016-12-28 08:44:25 UTC
Created attachment 248821 [details]
select audio pll
Comment 50 Libin Yang 2016-12-28 08:47:36 UTC
Sorry for the delay.

I didn't get the suggestion from our silicon for the 44.1KHz issue.

I created 2 patches based on my understanding.

Could you please apply "new change v4" and do the test?

If it doesn't work, could you please help revert the "new change v4" and apply "select audio pll" and do the test?

The "select audio pll" doesn't fix the 44.1KHz issue. However, if it works for 48KHz, I will submit the patch to ALSA.

THanks,
Libin
Comment 51 Gerben Meijer 2017-01-02 13:35:48 UTC
em1 v4 works at 44.1khz and 48khz with -Dhw, but has audible crackle during playback. 96khz with -Dhw plays it at a speed of 0.5 (e.g. voice is downpitched), and reports "Warning: rate is not accurate (requested = 96000Hz, got = 48000Hz)" so 96khz rate seems unselectable now.

Dmesg after boot:

 <0>in hda_intel_init_chip 600, lctl: 0x810000
 <0>in hda_intel_init_chip 600, set SPA to 0 and wait CPA to 0
 <0>in hda_intel_init_chip 600, lctl: 0x0
 <0>in hda_intel_init_chip 600, lctl: 0x2
 <0>in hda_intel_init_chip 600, set SPA to 1 and wait CPA to 1
 <0>in hda_intel_init_chip 600, lctl: 0x810002

After unload && modprobe the result is the same.

The crackle is pretty weird. It happens only with 16bit samples. As soon as I play a 32bit sample, crackle disappears with all playback (both 16 and 32 bit). I have to power off and on the device to make it return. It might be a fluke.


However, select audio pll patch actually has the exact same result as em1 v4 patch. both 44khz and 48khz work fine, and 96khz playback speed is at 0.5. This patch does not appear to have crackle issue.

So I suppose that last patch is fine. Not sure why 96khz does not work anymore, but at least this seems to give a valid working result and isn't device specific.

Lastly, do you perhaps have any further suggestions for enabling speaker output?
Comment 52 Gerben Meijer 2017-01-02 14:18:38 UTC
I have to correct the last comment, it seems there is crackle with em1 v3, v4 AND select audio pll patches. I retested with some music and video playback and the crackle is constantly there at 16bit playback with lower volume. It's strongest in the right channel but present in both.

I also double checked and it doesn't matter if playback is S16 or S32. Changing volume also does not matter (e.g. it isn't hard clipping); it happens at just about all volume levels, but worst between 30-40% volume. But it is volume dependent - with no sound (e.g. silent/low volume moments in music) there is no crackle. So lowering volume actually makes it worse most of the time.

I didn't notice it before since I didn't use good headphones, but it's clearly there.
Comment 53 Libin Yang 2017-01-03 02:14:03 UTC
For 96KHz, I think it is not supported by hardware for this sample rate as it described. You should use -Dplughw to playback 96KHz.

For the crackle issue, could you test on HDMI audio to see if HDMI audio is OK. If it is OK for HDMI and only analog audio has crackle issue, I think this should be codec related issue. Otherwise, it should be HDA controller issue.

And what do you mean "speaker output", do you mean the speaker doesn't work all the time?
Comment 54 Gerben Meijer 2017-01-03 08:16:04 UTC
The device only has USB-C out, and I have no USB-C hub with HDMI out. Do you have any suggestions to try? If not I will order something.

Speaker output does not work at all, I have been testing using headphone jack only. In the beginning of the bug report I have discussed various options I tried (GPIOs, verbs etc) but nothing worked so far to get speaker output working.
Comment 55 Takashi Iwai 2017-01-03 09:55:06 UTC
The speaker support is very likely vendor-specific secret, so unfortunately nothing we can help much here remotely.  You need to figure out by yourself -- or ask Samsung.  FWIW, in addition to GPIO pins, most common tweaks are about VREF of some unused pins.

Or... if it's an Android device, you can look for the code somewhere.
Comment 56 Gerben Meijer 2017-01-03 09:59:02 UTC
It's a windows device, so no luck there. And as i mentioned earlier, I'm not finding any usable info in the windows registry or realtek drivers (they are standard realtek drivers, not Samsung specific), nor are there any .ini files. As far as I can tell Windows treats it as any other realtek card. I'll see what I can find about VREF; any example driver code I can look at?

I've ordered a USB-C to HDMI multiport adapter, will update when I have it.
Comment 57 Gerben Meijer 2017-01-10 13:31:29 UTC
The low volume crackling issue does not exist on HDMI output; however, playback at 44.1kHz over HDMI with -Dhw does sound like it's playing with less bits or lower samplerate (e.g. pitch is correct but audio sounds tinny.

So the crackle with low volume issue does seem codec related. 

I'm not sure why the 44.1khz playback is problematic over HDMI. Should I try to undo the pll patch and try em1 v4 patch?
Comment 58 Libin Yang 2017-01-12 01:56:57 UTC
Thanks for update.

Yes, it seems the crackling issue is realteck related.

Based on your test before, em1 v4 works at 44.1khz and 48khz with -Dhw.
Does this mean only em1 v4 patch is enough for the playback sample rate issue?
If so, I will refine the patch and ask our QA do a test on it and submit the patch.

For the realtek crackling issue, I thought this may be realtek codec register setting issue. We may need realtek help.

Thanks,
Libin
Comment 59 Gerben Meijer 2017-01-12 08:47:20 UTC
As for the rates, in Windows there is the option to choose between 16/24 bit and 44/48/96/192khz as "default format", so I do think the hardware supports it. It is possible that the realtek driver resamples to 48khz right before playback, but then why offer the options? So I assume all of these combinations are supported in hardware, no?

As for crackle, on analog out, "em1 v4 patch" was equivalent to "select audio pll patch". I will compare the two patches over HDMI out and see if there is any difference there.
Comment 60 Libin Yang 2017-01-12 08:54:19 UTC
I'm not sure about your first question. From your hw info from codec:
rates [0x60]: 44100 48000
bits [0xe]: 16 20 24

Both should be supported.

If both patches from me works, I will pick up one proper patch to submit.

Thanks,
Libin
Comment 61 Libin Yang 2017-01-20 06:38:54 UTC
Created attachment 252531 [details]
ALSA-hda-set-intel-audio-clock-to-a-properly-value
Comment 62 Libin Yang 2017-01-20 06:41:19 UTC
Hi Infernix,

I have refined the patch. Which will be submitted if our QA test passes. Could you please also help test this patch? As we didn't reproduce your issue on our side.

Thanks,
Libin
Comment 63 Libin Yang 2017-01-20 06:41:52 UTC
The patches is "ALSA-hda-set-intel-audio-clock-to-a-properly-value"
Comment 64 Gerben Meijer 2017-01-27 14:28:58 UTC
Hi Libin,

The new patch on 4.10.0-rc5 does not work at boot time:

[   19.328677] snd_hda_intel 0000:00:1f.3: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000
[   20.336666] snd_hda_intel 0000:00:1f.3: No response from codec, disabling MSI: last cmd=0x000f0000
[   21.344671] snd_hda_intel 0000:00:1f.3: Codec #0 probe error; disabling it...

But works after alsa unload && modprobe:

[  723.956892] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[  724.000192] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC298: line_outs=1 (0x1a/0x0/0x0/0x0/0x0) type:speaker
[  724.000194] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[  724.000195] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x17/0x0/0x0/0x0/0x0)
[  724.000196] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[  724.000197] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[  724.000198] snd_hda_codec_realtek hdaudioC0D0:      Mic=0x18
[  724.000199] snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12


It still suffers from crackling audio at low volume levels on headphone out like the last versions. I have not yet retested HDMI at 44kHz.

I've also tried again to reach out to Samsung through multiple channels but am not getting anything. Can't get anyone to tell me who to contact to find out how speaker pinout is connected, so I'm afraid I'm at a dead end here.
Comment 65 Libin Yang 2017-02-04 06:43:44 UTC
Hi infernix,

Thanks for test. I'm currently on vacation. I will update the patch after my vacation. I'm back on about 2.14.

Thanks,
Libin
Comment 66 jdchoi 2017-02-10 05:24:59 UTC
I am using a BT speaker right now, and it's working fine. 
However, neither the headphone jack nor the built-in speaker works for me.
Hope it helps.
Comment 67 Libin Yang 2017-02-14 08:13:28 UTC
Created attachment 254743 [details]
ALSA-hda-set-intel-audio-clock V2
Comment 68 Libin Yang 2017-02-14 08:16:33 UTC
Created attachment 254745 [details]
add-debug-info v2
Comment 69 Libin Yang 2017-02-14 08:22:26 UTC
Could you please help test "ALSA-hda-set-intel-audio-clock V2".
If it doesn't work, please also apply " add-debug-info v2" and send the dmesg.

For BT speaker, I think it should not use the HDA Controller and codec.
Comment 70 Gerben Meijer 2017-02-14 12:22:05 UTC
Hi Libin,

Unfortunately at bootup it still fails, but works after a unload & modprobe.

Here's the debug info at cold boot:

root@tabpro:~# dmesg | egrep '<0>|snd'
snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
<0>in intel_init_lctl 577
<0>in intel_init_lctl 581, lctl: 0x810000
<0>in intel_init_lctl 606, lctl: 0x0
<0>in intel_init_lctl 615, lctl: 0x2
<0>in intel_init_lctl 629, lctl: 0x810002
snd_hda_intel 0000:00:1f.3: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: No response from codec, disabling MSI: last cmd=0x000f0000
snd_hda_intel 0000:00:1f.3: Codec #0 probe error; disabling it...

And here at unload & modprobe:

snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
<0>in intel_init_lctl 577
<0>in intel_init_lctl 581, lctl: 0x810002
snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC298: line_outs=1 (0x1a/0x0/0x0/0x0/0x0) type:speaker
snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x17/0x0/0x0/0x0/0x0)
snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
snd_hda_codec_realtek hdaudioC0D0:    inputs:
snd_hda_codec_realtek hdaudioC0D0:      Mic=0x18
snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12

Crackle at low volume levels is still present as well.
Comment 71 Libin Yang 2017-02-15 01:00:35 UTC
Hi infernix,

It's weird. The lctl register is set correctly based on the dmesg. And the error message is caused by no response from codec. The patch is similar with em1 v4. What the difference I can see is that the delay after setting the registers is different. Could you please help add some delay "mdelay(100)" like what em1 v4 patch does?

Thanks,
Libin
Comment 72 Gerben Meijer 2017-02-15 11:26:36 UTC
Hi Libin,

That seems to fix it:

[   16.296168] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[   16.296573] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[   16.553826] <0>in intel_init_lctl 577
[   16.553829] <0>in intel_init_lctl 581, lctl: 0x810000
[   16.553831] <0>in intel_init_lctl 597, 1. - mdelay(100) after azx_writel: 0x800000
[   16.653127] <0>in intel_init_lctl 608, lctl: 0x0
[   16.653131] <0>in intel_init_lctl 616, 2. - mdelay(100) after azx_writel: 0x2
[   16.752432] <0>in intel_init_lctl 619, lctl: 0x2
[   16.752435] <0>in intel_init_lctl 625, 4. - mdelay(100) after azx_writel: 0x10002
[   16.851731] <0>in intel_init_lctl 635, lctl: 0x810002
[   16.886130] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC298: line_outs=1 (0x1a/0x0/0x0/0x0/0x0) type:speaker
[   16.886132] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[   16.886134] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x17/0x0/0x0/0x0/0x0)
[   16.886135] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[   16.886136] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[   16.886138] snd_hda_codec_realtek hdaudioC0D0:      Mic=0x18
[   16.886139] snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12


Do you want me to try to read the register before and after the delays?
Comment 73 Libin Yang 2017-02-15 15:27:44 UTC
Created attachment 254771 [details]
ALSA-hda-set-intel-audio-clock V3
Comment 74 Libin Yang 2017-02-15 15:36:56 UTC
Hi infernix,

So it should be the timing issue. The delay is not required in our spec.

Could you please test the "ALSA-hda-set-intel-audio-clock V3" patch?

I add 2 udelay(100) in the the code.

And I think 100us is also too long. If V3 works, Could you please try to udelay(20) or udelay(50) instead of udelay(100)? And if udelay(100) is not enough,
could you please use usleep_range(500, 1000); to wait for more time?

Thanks,
Libin
Comment 75 Keqiao, Zhang 2017-03-05 11:51:31 UTC
Hi infernix,

Any update on this bug?
Comment 76 Gerben Meijer 2017-03-05 11:54:57 UTC
Sorry, I've been quite busy. I will make some time in the next 24h to test.
Comment 77 Gerben Meijer 2017-03-06 16:23:18 UTC
So the default udelay(100) works. Also tested:

- 25: doesn't work
- 38: doesn't work
- 45: doesn't work
- 50: works with reboot, not cold boot
- 60: works with reboot and cold boot (tested around 5 times)
- 75: works with reboot and cold boot (tested 3 times)

I guess 75 is a safe default but if too long, 60 seems fine.
Comment 78 Libin Yang 2017-03-07 05:07:17 UTC
Great! Let make it 100. Suppose it should be acceptable as 50ns is not stable. 

Thanks.
Comment 79 Keqiao, Zhang 2017-03-12 12:33:51 UTC
hi Infernix,

 If this bug is fixed in your side, please help to close it. 

Thanks~
Comment 80 Gerben Meijer 2017-03-12 20:10:12 UTC
Although this patch fixed the skylake initialisation problem causing wrong playback speeds (thank you Libin!), it does not fix the original bugreport:

- Speaker output is still not working
- Headphone output has audible crackle at low volumes

So it wouldn't be accurate to consider this bug fixed and therefore I'd like to keep it open.
Comment 81 Libin Yang 2017-03-13 02:24:40 UTC
The remained 2 bugs are more likely codec related or board related issue (special GPIO?).

I think it will be helpful that codec vendor (or board related driver) can help on the 2 issues.
Comment 82 Libin Yang 2017-04-01 06:42:38 UTC
Created attachment 255675 [details]
v4 patchset patch1
Comment 83 Libin Yang 2017-04-01 06:43:19 UTC
Created attachment 255677 [details]
v4 patchset patch2
Comment 84 Libin Yang 2017-04-01 06:46:05 UTC
Hi infernix,

Could you please help test v4 patchset patch1 & patch2?
These patches are refined based on the review.

BTW: It will be helpful if you can add the Tested-by.

Thanks,
Libin
Comment 85 Gerben Meijer 2017-04-05 10:58:32 UTC
Hi Libin,

Tested, works from cold boot and reboot.
Comment 86 Libin Yang 2017-04-06 01:25:37 UTC
Hi Infernix,

Thanks. I will submit the patches today.

Regards,
Libin
Comment 87 Talos 2017-07-21 08:40:44 UTC
Hi,

Is there any more progress on this (Original bug report) or is anyone else working on it?

I have my TabPro S running Arch and it's an awesome setup. Just missing the sound output.
 Also still have the touchpad issue when removing/attaching the keyboard but I can live with that. Everything else works great, just need sound.

Thanks in advance.

Talos.
Comment 88 Libin Yang 2017-07-24 02:37:58 UTC
Based on my knowledge on this bug. I think it may be the audio codec (driver) issue. Hope audio codec vendor can help on this.
Comment 89 Gerben Meijer 2017-08-07 11:33:29 UTC
Libin, any idea how to reach out or involve the audio codec vendor?
Comment 90 Libin Yang 2017-08-08 01:36:43 UTC
I think you can ping pshou@realtek.com.tw
Comment 91 Gerben Meijer 2017-08-08 16:36:03 UTC
I guess not anymore:

<pshou@realtek.com.tw>: host rtittwmx.realtek.com.tw[211.75.126.73] said: 550    Unknown user (in reply to RCPT TO command)

Any other suggestions?
Comment 92 Libin Yang 2017-08-09 02:42:09 UTC
You can try:
pshou@realtek.com
and
kailang@realtek.com
Comment 93 Gerben Meijer 2017-08-21 12:43:38 UTC
Unfortunately I did not get any response from either.
Comment 94 Libin Yang 2017-08-22 01:32:37 UTC
I don't have other contacts.
Comment 95 robsmith11 2018-07-15 08:39:55 UTC
Deciding whether to buy a used TabPro S.. is it safe to say this bug will not be resolved in the foreseeable future?
Comment 96 Gerben Meijer 2018-07-15 08:48:58 UTC
I see no way to move this forward, so don't count on it.

On July 15, 2018 10:39:59 bugzilla-daemon@bugzilla.kernel.org wrote:

> https://bugzilla.kernel.org/show_bug.cgi?id=188411
>
> robsmith11@yandex.com changed:
>
>           What    |Removed                     |Added
> ----------------------------------------------------------------------------
>                 CC|                            |robsmith11@yandex.com
>
> --- Comment #95 from robsmith11@yandex.com ---
> Deciding whether to buy a used TabPro S.. is it safe to say this bug will not
> be resolved in the foreseeable future?
>
> --
> You are receiving this mail because:
> You reported the bug.

Note You need to log in before you can comment on or make changes to this bug.