Re: [alsa-devel] Dell N5110 HDA External Speaker is mute
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote:
Thanks, Takashi.
I don't know what tools and invocations to use test out the GPIO values you describe. I think you're saying I shouldn't bother toggling things through HDA Analyzer as there's nothing obviously wrong in that part of the configuration (as reported by alsa-info.sh which is attached as requested).
I noticed in HD-Audio.txt a section which mentions a similar problem and IDT codecs specifically (below). Is there an IRC or mailing list where people could talk me through the basics of trying different GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know how, yet. If I succeed I'll report back.
Hopefully this will be worth it, as I think the N5110 is a pretty popular model with a common card, and probably a bunch of Dell hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
QUOTING FROM HD-Audio.txt >>>>>>>
If you are masochistic enough to debug the driver problem, note the following:
- The speaker (and the headphone, too) output often requires the external amplifier. This can be set usually via EAPD verb or a certain GPIO. If the codec pin supports EAPD, you have a better chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly it's either GPIO0 or GPIO1) may turn on/off EAPD.
- Some Realtek codecs require special vendor-specific coefficients to turn on the amplifier. See patch_realtek.c.
- IDT codecs may have extra power-enable/disable controls on each analog pin. See patch_sigmatel.c.
- Very rare but some devices don't accept the pin-detection verb until triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the codec-communication stall. Some examples are found in patch_realtek.c.
<<<<<<<<
On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 10:56:24 +0000, Cefn Hoile wrote:
In case anything has changed in my config since the original info run, here is the same script run right now...
http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce
Could you rather attach? Then it'll be archived and searchable.
Anyway, I don't see any obvious problem in the output. If the pin assignment is correct, the routing and amp setups should be OK with the current status.
Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction and value bits.
Takashi
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote:
Thanks, Takashi.
I don't know what tools and invocations to use test out the GPIO values you describe. I think you're saying I shouldn't bother toggling things through HDA Analyzer as there's nothing obviously wrong in that part of the configuration (as reported by alsa-info.sh which is attached as requested).
I noticed in HD-Audio.txt a section which mentions a similar problem and IDT codecs specifically (below). Is there an IRC or mailing list where people could talk me through the basics of trying different GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know how, yet. If I succeed I'll report back.
Hopefully this will be worth it, as I think the N5110 is a pretty popular model with a common card, and probably a bunch of Dell hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
QUOTING FROM HD-Audio.txt >>>>>>>
If you are masochistic enough to debug the driver problem, note the following:
- The speaker (and the headphone, too) output often requires the
external amplifier. This can be set usually via EAPD verb or a certain GPIO. If the codec pin supports EAPD, you have a better chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly it's either GPIO0 or GPIO1) may turn on/off EAPD.
- Some Realtek codecs require special vendor-specific coefficients to
turn on the amplifier. See patch_realtek.c.
- IDT codecs may have extra power-enable/disable controls on each
analog pin. See patch_sigmatel.c.
- Very rare but some devices don't accept the pin-detection verb until
triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the codec-communication stall. Some examples are found in patch_realtek.c.
<<<<<<<<
On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 10:56:24 +0000, Cefn Hoile wrote:
In case anything has changed in my config since the original info run, here is the same script run right now...
http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce
Could you rather attach? Then it'll be archived and searchable.
Anyway, I don't see any obvious problem in the output. If the pin assignment is correct, the routing and amp setups should be OK with the current status.
Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction and value bits.
Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
At Thu, 12 Jan 2012 15:11:16 +0000, Cefn Hoile wrote:
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote:
Thanks, Takashi.
I don't know what tools and invocations to use test out the GPIO values you describe. I think you're saying I shouldn't bother toggling things through HDA Analyzer as there's nothing obviously wrong in that part of the configuration (as reported by alsa-info.sh which is attached as requested).
I noticed in HD-Audio.txt a section which mentions a similar problem and IDT codecs specifically (below). Is there an IRC or mailing list where people could talk me through the basics of trying different GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know how, yet. If I succeed I'll report back.
Hopefully this will be worth it, as I think the N5110 is a pretty popular model with a common card, and probably a bunch of Dell hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
QUOTING FROM HD-Audio.txt >>>>>>>
If you are masochistic enough to debug the driver problem, note the following:
- The speaker (and the headphone, too) output often requires the
external amplifier. This can be set usually via EAPD verb or a certain GPIO. If the codec pin supports EAPD, you have a better chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly it's either GPIO0 or GPIO1) may turn on/off EAPD.
- Some Realtek codecs require special vendor-specific coefficients to
turn on the amplifier. See patch_realtek.c.
- IDT codecs may have extra power-enable/disable controls on each
analog pin. See patch_sigmatel.c.
- Very rare but some devices don't accept the pin-detection verb until
triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the codec-communication stall. Some examples are found in patch_realtek.c.
<<<<<<<<
On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 10:56:24 +0000, Cefn Hoile wrote:
In case anything has changed in my config since the original info run, here is the same script run right now...
http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce
Could you rather attach? Then it'll be archived and searchable.
Anyway, I don't see any obvious problem in the output. If the pin assignment is correct, the routing and amp setups should be OK with the current status.
Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction and value bits.
Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
Yeah, there are some bugs :) The combination should be (mask/dir/data) 1/1/0 1/1/1 1/0/0 1/0/1 2/2/0 2/2/2 2/0/0 2/0/2 4/4/0 4/4/4 4/0/0 4/0/4
Also, as a test, use aplay with -Dplughw option. This skips PA and others.
Takashi
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
On 12 January 2012 15:18, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 15:11:16 +0000, Cefn Hoile wrote:
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote:
Thanks, Takashi.
I don't know what tools and invocations to use test out the GPIO values you describe. I think you're saying I shouldn't bother toggling things through HDA Analyzer as there's nothing obviously wrong in that part of the configuration (as reported by alsa-info.sh which is attached as requested).
I noticed in HD-Audio.txt a section which mentions a similar problem and IDT codecs specifically (below). Is there an IRC or mailing list where people could talk me through the basics of trying different GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know how, yet. If I succeed I'll report back.
Hopefully this will be worth it, as I think the N5110 is a pretty popular model with a common card, and probably a bunch of Dell hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
QUOTING FROM HD-Audio.txt >>>>>>>
If you are masochistic enough to debug the driver problem, note the following:
- The speaker (and the headphone, too) output often requires the
external amplifier. This can be set usually via EAPD verb or a certain GPIO. If the codec pin supports EAPD, you have a better chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly it's either GPIO0 or GPIO1) may turn on/off EAPD.
- Some Realtek codecs require special vendor-specific coefficients to
turn on the amplifier. See patch_realtek.c.
- IDT codecs may have extra power-enable/disable controls on each
analog pin. See patch_sigmatel.c.
- Very rare but some devices don't accept the pin-detection verb until
triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the codec-communication stall. Some examples are found in patch_realtek.c.
<<<<<<<<
On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 10:56:24 +0000, Cefn Hoile wrote:
In case anything has changed in my config since the original info run, here is the same script run right now...
http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce
Could you rather attach? Then it'll be archived and searchable.
Anyway, I don't see any obvious problem in the output. If the pin assignment is correct, the routing and amp setups should be OK with the current status.
Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction and value bits.
Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
Yeah, there are some bugs :) The combination should be (mask/dir/data) 1/1/0 1/1/1 1/0/0 1/0/1 2/2/0 2/2/2 2/0/0 2/0/2 4/4/0 4/4/4 4/0/0 4/0/4
Also, as a test, use aplay with -Dplughw option. This skips PA and others.
Takashi
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
Thanks again for your patience. It would be really useful if you could suggest a specific change to the section of my script which details the alternates, unless my script is more conceptually broken than that. That way I can't misinterpret which of the flags you're trying to describe with words. The problem I have looking at your "1/1/0" list is which arguments of the actual hda-verb command to bind them to: there are actually 4 values to vary in my mind. Three lines are executed as a block for every possible combination of values in my script (in the center of the nested loops)...
hda-verb /dev/snd/hwC0D0 "$GPIOMASK" SET_GPIO_MASK "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODIR" SET_GPIO_DIR "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODATA" SET_GPIO_DATA "$TARGETBIT"
.... that is, GPIOMASK, GPIODIR, GPIODATA AND TARGETBIT. Your response details only 3 values, so what do I do with TARGETBIT, or is it identical to something else?.
The combinations are explored exhaustively by executing the three hda-verb lines above for every set of values in a nested loop (you can see how these are bound to hda-verb above). Previously the arrays of possible values to iterate over read ...
TARGETBITS=( "0x01" "0x02" "0x04" ) # TRY ALL COMBINATIONS OF THREE GPIO BITS GPIOMASKS=( "0x01" ) # THIS STAYS TRUE THROUGHOUT GPIODIRS=( "0x00" "0x01" ) # TRY ALL COMBINATIONS OF THIS BOOLEAN GPIODATAS=( "0x00" "0x01" ) # TRY ALL COMBINATIONS OF THIS BOOLEAN
...but what should they read?
Thanks again. I feel a bit of an idiot as I'm sure I could work this out if I knew what hda-verb was actually doing to flags in the soundcard, and what the arguments mapped to, but frankly it's a bit of a mystery when you run hda-verb --help and your helpful suggestions seem to assume I understand the mappings already.
At Thu, 12 Jan 2012 16:00:53 +0000, Cefn Hoile wrote:
On 12 January 2012 15:18, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 15:11:16 +0000, Cefn Hoile wrote:
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote:
Thanks, Takashi.
I don't know what tools and invocations to use test out the GPIO values you describe. I think you're saying I shouldn't bother toggling things through HDA Analyzer as there's nothing obviously wrong in that part of the configuration (as reported by alsa-info.sh which is attached as requested).
I noticed in HD-Audio.txt a section which mentions a similar problem and IDT codecs specifically (below). Is there an IRC or mailing list where people could talk me through the basics of trying different GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know how, yet. If I succeed I'll report back.
Hopefully this will be worth it, as I think the N5110 is a pretty popular model with a common card, and probably a bunch of Dell hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
QUOTING FROM HD-Audio.txt >>>>>>>
If you are masochistic enough to debug the driver problem, note the following:
- The speaker (and the headphone, too) output often requires the
external amplifier. This can be set usually via EAPD verb or a certain GPIO. If the codec pin supports EAPD, you have a better chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly it's either GPIO0 or GPIO1) may turn on/off EAPD.
- Some Realtek codecs require special vendor-specific coefficients to
turn on the amplifier. See patch_realtek.c.
- IDT codecs may have extra power-enable/disable controls on each
analog pin. See patch_sigmatel.c.
- Very rare but some devices don't accept the pin-detection verb until
triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the codec-communication stall. Some examples are found in patch_realtek.c.
<<<<<<<<
On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 10:56:24 +0000, Cefn Hoile wrote: > > In case anything has changed in my config since the original info run, > here is the same script run right now... > > http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce
Could you rather attach? Then it'll be archived and searchable.
Anyway, I don't see any obvious problem in the output. If the pin assignment is correct, the routing and amp setups should be OK with the current status.
Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction and value bits.
Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
Yeah, there are some bugs :) The combination should be (mask/dir/data) 1/1/0 1/1/1 1/0/0 1/0/1 2/2/0 2/2/2 2/0/0 2/0/2 4/4/0 4/4/4 4/0/0 4/0/4
Also, as a test, use aplay with -Dplughw option. This skips PA and others.
Takashi
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
Thanks again for your patience. It would be really useful if you could suggest a specific change to the section of my script which details the alternates, unless my script is more conceptually broken than that. That way I can't misinterpret which of the flags you're trying to describe with words. The problem I have looking at your "1/1/0" list is which arguments of the actual hda-verb command to bind them to: there are actually 4 values to vary in my mind. Three lines are executed as a block for every possible combination of values in my script (in the center of the nested loops)...
hda-verb /dev/snd/hwC0D0 "$GPIOMASK" SET_GPIO_MASK "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODIR" SET_GPIO_DIR "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODATA" SET_GPIO_DATA "$TARGETBIT"
.... that is, GPIOMASK, GPIODIR, GPIODATA AND TARGETBIT. Your response details only 3 values, so what do I do with TARGETBIT, or is it identical to something else?.
No, the the first argument after /dev/snd/hwC0D0 is always 0x01. It's the AFG node id which the GPIO is always bound to. Only the last value, i.e. the parameter to the exected verb, is changed.
Takashi
On 12 January 2012 16:05, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 16:00:53 +0000, Cefn Hoile wrote:
On 12 January 2012 15:18, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 15:11:16 +0000, Cefn Hoile wrote:
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote:
Thanks, Takashi.
I don't know what tools and invocations to use test out the GPIO values you describe. I think you're saying I shouldn't bother toggling things through HDA Analyzer as there's nothing obviously wrong in that part of the configuration (as reported by alsa-info.sh which is attached as requested).
I noticed in HD-Audio.txt a section which mentions a similar problem and IDT codecs specifically (below). Is there an IRC or mailing list where people could talk me through the basics of trying different GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know how, yet. If I succeed I'll report back.
Hopefully this will be worth it, as I think the N5110 is a pretty popular model with a common card, and probably a bunch of Dell hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
QUOTING FROM HD-Audio.txt >>>>>>>
If you are masochistic enough to debug the driver problem, note the following:
- The speaker (and the headphone, too) output often requires the
external amplifier. This can be set usually via EAPD verb or a certain GPIO. If the codec pin supports EAPD, you have a better chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly it's either GPIO0 or GPIO1) may turn on/off EAPD.
- Some Realtek codecs require special vendor-specific coefficients to
turn on the amplifier. See patch_realtek.c.
- IDT codecs may have extra power-enable/disable controls on each
analog pin. See patch_sigmatel.c.
- Very rare but some devices don't accept the pin-detection verb until
triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the codec-communication stall. Some examples are found in patch_realtek.c.
<<<<<<<<
On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote: > At Thu, 12 Jan 2012 10:56:24 +0000, > Cefn Hoile wrote: >> >> In case anything has changed in my config since the original info run, >> here is the same script run right now... >> >> http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce > > Could you rather attach? Then it'll be archived and searchable. > > Anyway, I don't see any obvious problem in the output. > If the pin assignment is correct, the routing and amp setups should be > OK with the current status. > > Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction > and value bits. > > > Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
Yeah, there are some bugs :) The combination should be (mask/dir/data) 1/1/0 1/1/1 1/0/0 1/0/1 2/2/0 2/2/2 2/0/0 2/0/2 4/4/0 4/4/4 4/0/0 4/0/4
Also, as a test, use aplay with -Dplughw option. This skips PA and others.
Takashi
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
Thanks again for your patience. It would be really useful if you could suggest a specific change to the section of my script which details the alternates, unless my script is more conceptually broken than that. That way I can't misinterpret which of the flags you're trying to describe with words. The problem I have looking at your "1/1/0" list is which arguments of the actual hda-verb command to bind them to: there are actually 4 values to vary in my mind. Three lines are executed as a block for every possible combination of values in my script (in the center of the nested loops)...
hda-verb /dev/snd/hwC0D0 "$GPIOMASK" SET_GPIO_MASK "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODIR" SET_GPIO_DIR "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODATA" SET_GPIO_DATA "$TARGETBIT"
.... that is, GPIOMASK, GPIODIR, GPIODATA AND TARGETBIT. Your response details only 3 values, so what do I do with TARGETBIT, or is it identical to something else?.
No, the the first argument after /dev/snd/hwC0D0 is always 0x01. It's the AFG node id which the GPIO is always bound to. Only the last value, i.e. the parameter to the exected verb, is changed.
Takashi
OK. I'm now running the attached script which I think is exploring the correct configuration space. Worth taking a look at the steps in there to be sure I'm not doing something stupid, though.
I still have no speaker sound for any of the combinations of GPIO flags. I'm not rebooting to try each combination, as I'm assuming these are flags which can change at runtime and Alsa will pick them up.
If I've properly explored all the GPIO combinations, what's next to try? The HDA documentation suggests something to do with powering pins, and something else to do with pin sensing. I'm not 100% on how I could control these, although the HDA Analyzer exposes some checkboxes and sliders which so far have achieved no sound as I wiggled them randomly.
Cefn http://cefn.com
At Thu, 12 Jan 2012 20:07:42 +0000, Cefn Hoile wrote:
On 12 January 2012 16:05, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 16:00:53 +0000, Cefn Hoile wrote:
On 12 January 2012 15:18, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 15:11:16 +0000, Cefn Hoile wrote:
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 11:51:12 +0000, Cefn Hoile wrote: > > Thanks, Takashi. > > I don't know what tools and invocations to use test out the GPIO > values you describe. I think you're saying I shouldn't bother toggling > things through HDA Analyzer as there's nothing obviously wrong in that > part of the configuration (as reported by alsa-info.sh which is > attached as requested). > > I noticed in HD-Audio.txt a section which mentions a similar problem > and IDT codecs specifically (below). Is there an IRC or mailing list > where people could talk me through the basics of trying different > GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know > how, yet. If I succeed I'll report back. > > Hopefully this will be worth it, as I think the N5110 is a pretty > popular model with a common card, and probably a bunch of Dell > hardware could get fixed if it could be figured out.
You can change the GPIO setup via hda-verb on the fly. For example, to set GPIO bit 0, try hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 where the output direction is assumed, and only GPIO 0 is set. For GPIO bit 1, hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 and 0x04 for GPIO bit 2. Your device have up to three GPIO bits.
If none of above doesn't any change, try to set DATA 0 instead of 1, and/or DIR 0 instead of 1.
Takashi
> QUOTING FROM HD-Audio.txt >>>>>>> > > If you are masochistic enough to debug the driver problem, note the > following: > > - The speaker (and the headphone, too) output often requires the > external amplifier. This can be set usually via EAPD verb or a > certain GPIO. If the codec pin supports EAPD, you have a better > chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly > it's either GPIO0 or GPIO1) may turn on/off EAPD. > - Some Realtek codecs require special vendor-specific coefficients to > turn on the amplifier. See patch_realtek.c. > - IDT codecs may have extra power-enable/disable controls on each > analog pin. See patch_sigmatel.c. > - Very rare but some devices don't accept the pin-detection verb until > triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the > codec-communication stall. Some examples are found in > patch_realtek.c. > > <<<<<<<< > > On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote: > > At Thu, 12 Jan 2012 10:56:24 +0000, > > Cefn Hoile wrote: > >> > >> In case anything has changed in my config since the original info run, > >> here is the same script run right now... > >> > >> http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce > > > > Could you rather attach? Then it'll be archived and searchable. > > > > Anyway, I don't see any obvious problem in the output. > > If the pin assignment is correct, the routing and amp setups should be > > OK with the current status. > > > > Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction > > and value bits. > > > > > > Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
Yeah, there are some bugs :) The combination should be (mask/dir/data) 1/1/0 1/1/1 1/0/0 1/0/1 2/2/0 2/2/2 2/0/0 2/0/2 4/4/0 4/4/4 4/0/0 4/0/4
Also, as a test, use aplay with -Dplughw option. This skips PA and others.
Takashi
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
Thanks again for your patience. It would be really useful if you could suggest a specific change to the section of my script which details the alternates, unless my script is more conceptually broken than that. That way I can't misinterpret which of the flags you're trying to describe with words. The problem I have looking at your "1/1/0" list is which arguments of the actual hda-verb command to bind them to: there are actually 4 values to vary in my mind. Three lines are executed as a block for every possible combination of values in my script (in the center of the nested loops)...
hda-verb /dev/snd/hwC0D0 "$GPIOMASK" SET_GPIO_MASK "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODIR" SET_GPIO_DIR "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODATA" SET_GPIO_DATA "$TARGETBIT"
.... that is, GPIOMASK, GPIODIR, GPIODATA AND TARGETBIT. Your response details only 3 values, so what do I do with TARGETBIT, or is it identical to something else?.
No, the the first argument after /dev/snd/hwC0D0 is always 0x01. It's the AFG node id which the GPIO is always bound to. Only the last value, i.e. the parameter to the exected verb, is changed.
Takashi
OK. I'm now running the attached script which I think is exploring the correct configuration space. Worth taking a look at the steps in there to be sure I'm not doing something stupid, though.
I still have no speaker sound for any of the combinations of GPIO flags. I'm not rebooting to try each combination, as I'm assuming these are flags which can change at runtime and Alsa will pick them up.
If I've properly explored all the GPIO combinations, what's next to try? The HDA documentation suggests something to do with powering pins, and something else to do with pin sensing. I'm not 100% on how I could control these, although the HDA Analyzer exposes some checkboxes and sliders which so far have achieved no sound as I wiggled them randomly.
Well, I'm not sure whether it helps. Has the speaker on your machine ever worked, e.g. with other OS?
I wonder because I haven't heard other bug reports regarding Dell laptop with this codec. There were some reports with Dell but they were years ago with older Sigmatel codecs, not recent IDT ones.
Takashi
On 13 January 2012 07:01, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 20:07:42 +0000, Cefn Hoile wrote:
On 12 January 2012 16:05, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 16:00:53 +0000, Cefn Hoile wrote:
On 12 January 2012 15:18, Takashi Iwai tiwai@suse.de wrote:
At Thu, 12 Jan 2012 15:11:16 +0000, Cefn Hoile wrote:
On 12 January 2012 11:59, Takashi Iwai tiwai@suse.de wrote: > At Thu, 12 Jan 2012 11:51:12 +0000, > Cefn Hoile wrote: >> >> Thanks, Takashi. >> >> I don't know what tools and invocations to use test out the GPIO >> values you describe. I think you're saying I shouldn't bother toggling >> things through HDA Analyzer as there's nothing obviously wrong in that >> part of the configuration (as reported by alsa-info.sh which is >> attached as requested). >> >> I noticed in HD-Audio.txt a section which mentions a similar problem >> and IDT codecs specifically (below). Is there an IRC or mailing list >> where people could talk me through the basics of trying different >> GPIO/EAPD, Power Enable or Pin Sense manipulations. I wouldn't know >> how, yet. If I succeed I'll report back. >> >> Hopefully this will be worth it, as I think the N5110 is a pretty >> popular model with a common card, and probably a bunch of Dell >> hardware could get fixed if it could be figured out. > > You can change the GPIO setup via hda-verb on the fly. > For example, to set GPIO bit 0, try > hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01 > hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x01 > hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x01 > where the output direction is assumed, and only GPIO 0 is set. > For GPIO bit 1, > hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x02 > hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 0x02 > hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x02 > and 0x04 for GPIO bit 2. Your device have up to three GPIO bits. > > If none of above doesn't any change, try to set DATA 0 instead of 1, > and/or DIR 0 instead of 1. > > > > Takashi > >> QUOTING FROM HD-Audio.txt >>>>>>> >> >> If you are masochistic enough to debug the driver problem, note the >> following: >> >> - The speaker (and the headphone, too) output often requires the >> external amplifier. This can be set usually via EAPD verb or a >> certain GPIO. If the codec pin supports EAPD, you have a better >> chance via SET_EAPD_BTL verb (0x70c). On others, GPIO pin (mostly >> it's either GPIO0 or GPIO1) may turn on/off EAPD. >> - Some Realtek codecs require special vendor-specific coefficients to >> turn on the amplifier. See patch_realtek.c. >> - IDT codecs may have extra power-enable/disable controls on each >> analog pin. See patch_sigmatel.c. >> - Very rare but some devices don't accept the pin-detection verb until >> triggered. Issuing GET_PIN_SENSE verb (0xf09) may result in the >> codec-communication stall. Some examples are found in >> patch_realtek.c. >> >> <<<<<<<< >> >> On 12 January 2012 11:25, Takashi Iwai tiwai@suse.de wrote: >> > At Thu, 12 Jan 2012 10:56:24 +0000, >> > Cefn Hoile wrote: >> >> >> >> In case anything has changed in my config since the original info run, >> >> here is the same script run right now... >> >> >> >> http://www.alsa-project.org/db/?f=d0a1fd23339878916b611c88e64e4868b45445ce >> > >> > Could you rather attach? Then it'll be archived and searchable. >> > >> > Anyway, I don't see any obvious problem in the output. >> > If the pin assignment is correct, the routing and amp setups should be >> > OK with the current status. >> > >> > Maybe it's a missing GPIO setup. Try to adjust GPIO mask, direction >> > and value bits. >> > >> > >> > Takashi
I have tried the attached script, which hopefully corresponds with the GPIO exploration regime you wanted me to try. Please take a look at the sequence in case there could be some combination I missed based on trying to interpret your description, or if there's some kind of reload step I need to do.
Yeah, there are some bugs :) The combination should be (mask/dir/data) 1/1/0 1/1/1 1/0/0 1/0/1 2/2/0 2/2/2 2/0/0 2/0/2 4/4/0 4/4/4 4/0/0 4/0/4
Also, as a test, use aplay with -Dplughw option. This skips PA and others.
Takashi
When running this GPIO script as... sudo ./setgpio.sh ...with headphones on my N5110 it plays the sample every time, and with speakers it is always silent.
Here's an example log of execution...
cefn@cefn-oneiric-dell:~$ sudo ./setgpio.sh [sudo] password for cefn: SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x0, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x0, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x00 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x0, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x0, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x0, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x00] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x0, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x01 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 nid = 0x1, verb = 0x717, param = 0x1 value = 0x0 nid = 0x1, verb = 0x715, param = 0x1 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x02 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x2 value = 0x0 nid = 0x1, verb = 0x717, param = 0x2 value = 0x0 nid = 0x1, verb = 0x715, param = 0x2 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono SETTING GPIO 0x04 MASK, DIRECTION AND DATA TO [0x01 0x01 0x01] nid = 0x1, verb = 0x716, param = 0x4 value = 0x0 nid = 0x1, verb = 0x717, param = 0x4 value = 0x0 nid = 0x1, verb = 0x715, param = 0x4 value = 0x0 Home directory /home/cefn not ours. Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
Cefn
Thanks again for your patience. It would be really useful if you could suggest a specific change to the section of my script which details the alternates, unless my script is more conceptually broken than that. That way I can't misinterpret which of the flags you're trying to describe with words. The problem I have looking at your "1/1/0" list is which arguments of the actual hda-verb command to bind them to: there are actually 4 values to vary in my mind. Three lines are executed as a block for every possible combination of values in my script (in the center of the nested loops)...
hda-verb /dev/snd/hwC0D0 "$GPIOMASK" SET_GPIO_MASK "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODIR" SET_GPIO_DIR "$TARGETBIT" hda-verb /dev/snd/hwC0D0 "$GPIODATA" SET_GPIO_DATA "$TARGETBIT"
.... that is, GPIOMASK, GPIODIR, GPIODATA AND TARGETBIT. Your response details only 3 values, so what do I do with TARGETBIT, or is it identical to something else?.
No, the the first argument after /dev/snd/hwC0D0 is always 0x01. It's the AFG node id which the GPIO is always bound to. Only the last value, i.e. the parameter to the exected verb, is changed.
Takashi
OK. I'm now running the attached script which I think is exploring the correct configuration space. Worth taking a look at the steps in there to be sure I'm not doing something stupid, though.
I still have no speaker sound for any of the combinations of GPIO flags. I'm not rebooting to try each combination, as I'm assuming these are flags which can change at runtime and Alsa will pick them up.
If I've properly explored all the GPIO combinations, what's next to try? The HDA documentation suggests something to do with powering pins, and something else to do with pin sensing. I'm not 100% on how I could control these, although the HDA Analyzer exposes some checkboxes and sliders which so far have achieved no sound as I wiggled them randomly.
Well, I'm not sure whether it helps. Has the speaker on your machine ever worked, e.g. with other OS?
I wonder because I haven't heard other bug reports regarding Dell laptop with this codec. There were some reports with Dell but they were years ago with older Sigmatel codecs, not recent IDT ones.
Takashi
I was testing by configuring Windows 7 natively (until now it was only configured to run from its partition in Ubuntu-hosted Virtualbox) and I went for a reboot after refreshing the sound drivers. Initially the default drivers gave silent speakers, but working headphones, consistent with behaviour under Ubuntu, and after installing the drivers (but before a reboot) there seemed to be no difference.
However, we may now never know if the problem was the speakers or not. During the reboot, the hard-drive experienced a total failure (as reported by BIOS diagnostic tools). The whole unit is now going back to Dell with both the hard-drive failure and the silent speakers on the docket, and I'm upgrading to a 24month on-site warranty while I still can :) Will let you know if there's any change after the hardware pixies at Dell have done their magic and once I've had another go at an Oneiric install.
participants (2)
-
Cefn Hoile
-
Takashi Iwai