For my system, I got kanyo's method to work automatically on every boot
by reverse engineering the ioctl calls that come from HDA Analyzer when
you click on the widgets to adjust the settings. Here is my pyhon
script:
#!/usr/bin/python
# Matt Damiano's script based on hda-analyzer
# to automatically enable onboard mic on Lenovo G560
#
import os
import struct
from fcntl import ioctl
def main():
fd = get_fd_for_device(0, 1)
modify_settings(fd)
def __ioctl_val(val):
# copied directly from hda_codec.py
# workaround for OverFlow bug in python 2.4
if val & 0x80000000:
return -((val^0xffffffff)+1)
return val
IOCTL_INFO = __ioctl_val(0x80dc4801)
IOCTL_VERB_WRITE = __ioctl_val(0xc0084811)
def modify_settings(fd):
# set active connection for Node [0x14] AUD_IN to Audio Selector [0x18]
set_active_connection_verb = 336003329
unmute_val2_verb = 335765760
unmute_val3_verb = 335761664
boost_val2_volume_verb = 335765840
boost_val3_volume_verb = 335761744
ioctl(fd, IOCTL_VERB_WRITE, struct.pack('II', set_active_connection_verb,
0))
ioctl(fd, IOCTL_VERB_WRITE, struct.pack('II', unmute_val2_verb, 0))
ioctl(fd, IOCTL_VERB_WRITE, struct.pack('II', unmute_val3_verb, 0))
ioctl(fd, IOCTL_VERB_WRITE, struct.pack('II', boost_val2_volume_verb, 0))
ioctl(fd, IOCTL_VERB_WRITE, struct.pack('II', boost_val3_volume_verb, 0))
return
def get_fd_for_device(card, device):
fd = os.open("/dev/snd/hwC%sD%s" % (card, device), os.O_RDWR)
## just to prove his is the right file descriptor...
info = struct.pack('Ii64s80si64s', 0, 0, '', '', 0, '')
result = ioctl(fd, IOCTL_INFO, info)
name = struct.unpack('Ii64s80si64s', result)[3]
print name
return fd
if __name__ == "__main__":
main()
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/590756
Title:
Lenovo G560 autoswitch headphone + mic not working
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs