Hello Ike, On Wed, Aug 25, 2010 at 07:59:30PM +0800, Ike Panhc wrote: > On 08/20/2010 05:08 PM, Mario 'BitKoenig' Holbe wrote: > > On Fri, Aug 20, 2010 at 03:01:07PM +0800, Ike Panhc wrote: > >> Could you attach or upload the DSDT of S12 somewhere I can reach? > > > > http://sandbox.fem.tu-ilmenau.de/s12/dsdt-s12-via.dsl > > > >> I check DSDT for S10-3 and B550, return value of _CFG is fixed. > >> [Ref: http://people.ubuntu.com/~ikepanhc/DSDTs] > > > > Looks more fixed than on my S12, indeed. > > I don't really speak AML, but while S10-3 ILDD (called from _CFG) seems > > to read fixed values only, here on S12 PHSR (called from _CFG) seems to > > do some kind of I/O operation. I'm not sure about this, but it somehow > > looks like. > > > It accesses something in system memory, but I have no idea what will happen > after writing.. Well, the pattern looks like I/O - mmapped I/O. Store (Arg1, \_SB.INF0) Store (Arg0, \_SB.BCMD) Store (Zero, \_SB.SMIC) Store (\_SB.INF0, Local0) Note that INF0 is written before and read after writing SMIC. Hence, for this to be useful, something must have happened inbetween, i.e. I/O :) > There are two variables need to be written for turning on/off bluetooth. They are > BTST(in memory) and BTEN(is EC register). I will guess there are some sync failed > when enable bluetooth. What exactly do you mean with "there are some sync failed"? I don't see anything like that in the logs. > This could be a plan. I have several idea to go and need your help. > - Add some debug message to read BTST/BTEN when turning on/off bluetooth. > - Force to set BTST/BTEN before reading _CFG > - Provide a module parm to force enable rf devices. > > Will have the drivers and please test it and let me know the result. Hmmm, I don't know if I got you right. I didn't find any new drivers to test, so I tried to add some more debug code myself. Hope this helps. I added some code to show_ideapad_cam() to be able to asynchronously trigger reading of BTST, BTEN, and BTPS. As before: the patch attached is not for inclusion but to show what I did. I'm usually not a kernel hacker, so please take a serious look at what I did before trusting the results :) I attached a full protocol of actions I performed including kernel dmesges. Typed commands are prepended by #, manual actions and comments are enclosed in <>, kernel messages are timestamped, the rest is output of the commands. Basically I did the following: 0. I started with a fresh powered up system, all RF devices powered on. 1. I hw-switched RF off and back on, which went okay. 2. I sw-switched BT off and back on, which resulted in erroneous initialization. 3. I again sw-switched BT off and back on, which resulted in BT being completely gone. 4. I hw-switched RF off and back on, which brought BT back and operational. > > I played with the hardware killswitch under Linux. The bluetooth device > > disappears and re-appears there and always seems to initialize > > correctly. No USB read errors this way. ... > > I'm not exactly sure what this means - especially because I don't know > > how the hardware killswitch works internally. > > It *could* mean, the initialization problem is proably something that > > could be dealt with in the USB layer long term (and would then probably > > not have to be worked around anymore in ideapad_laptop). I'm not sure > > about this, because this would mean the hard killswitch power-cut > > somehow differs from the soft killswitch power-cut. > Usually the hw rf switch turning off PHY only. When turning off, device and > its driver is still there. I believe S12 is designed in this way after > reading your test result. Hmmm, I don't understand your reasoning here. I said the device disappears and re-appears when using the hw rf switch, this doesn't look like it would turn off PHY only. best regards Mario -- We know that communication is a problem, but the company is not going to discuss it with the employees. -- Switching supervisor, AT&T Long Lines Division
--- ideapad_laptop.c.orig 2010-08-18 13:35:36.087735426 +0200 +++ ideapad_laptop.c 2010-08-30 19:05:53.116031145 +0200 @@ -170,6 +170,18 @@ static ssize_t show_ideapad_cam(struct d struct ideapad_private *priv = dev_get_drvdata(dev); acpi_handle handle = priv->handle; unsigned long result; + acpi_status res; + u64 res64; + + res = acpi_evaluate_integer(handle, "\\_SB.BTST", NULL, &res64); + if(!ACPI_FAILURE(res)) + printk(KERN_INFO "BTST: 0x%llx\n", res64); + res = acpi_evaluate_integer(handle, "\\_SB.BTPS", NULL, &res64); + if(!ACPI_FAILURE(res)) + printk(KERN_INFO "BTPS: 0x%llx\n", res64); + res = acpi_evaluate_integer(handle, "\\_SB.PCI0.PIB.EC0.BTEN", NULL, &res64); + if(!ACPI_FAILURE(res)) + printk(KERN_INFO "BTEN: 0x%llx\n", res64); if (read_ec_data(handle, 0x1D, &result)) return sprintf(buf, "-1\n"); @@ -279,11 +291,19 @@ static int ideapad_acpi_add(struct acpi_ if (read_method_int(adevice->handle, "_CFG", &cfg)) return -ENODEV; + printk(KERN_INFO "ideapad_acpi_add(): cfg=0x%x\n", cfg); + for (i = IDEAPAD_DEV_CAMERA; i < IDEAPAD_DEV_KILLSW; i++) { - if (test_bit(ideapad_rfk_data[i].cfgbit, (unsigned long *)&cfg)) + if (test_bit(ideapad_rfk_data[i].cfgbit, (unsigned long *)&cfg)) { devs_present[i] = 1; - else - devs_present[i] = 0; + printk(KERN_INFO "ideapad_acpi_add(): found: %s\n", ideapad_rfk_data[i].name); + } else { + if(ideapad_rfk_data[i].type == RFKILL_TYPE_BLUETOOTH) { + devs_present[i] = 1; + printk(KERN_INFO "ideapad_acpi_add(): forced: %s\n", ideapad_rfk_data[i].name); + } else + devs_present[i] = 0; + } } /* The hardware switch is always present */
<fresh powered up system> # cat $(find /sys -name camera_power) [ 140.121467] BTST: 0x1 [ 140.121475] BTPS: 0x1 [ 140.122378] BTEN: 0x1 1 <hw killswitch off> [ 199.296090] usb 4-1: USB disconnect, address 2 [ 199.296789] btusb_intr_complete: hci0 urb f6990300 failed to resubmit (19) [ 199.296808] btusb_bulk_complete: hci0 urb f6990380 failed to resubmit (19) [ 199.297789] btusb_bulk_complete: hci0 urb f6990000 failed to resubmit (19) [ 199.297991] btusb_send_frame: hci0 urb f6766200 submission failed [ 199.784704] wlan0: deauthenticating from 00:1c:f0:e4:3d:a9 by local choice (reason=3) [ 199.786981] cfg80211: Calling CRDA to update world regulatory domain [ 200.852176] b43-phy0: Radio hardware status changed to DISABLED # cat $(find /sys -name camera_power) [ 219.129098] BTST: 0x1 [ 219.129105] BTPS: 0x1 [ 219.130017] BTEN: 0x1 1 <hw killswitch on> [ 257.968055] usb 4-1: new full speed USB device using uhci_hcd and address 3 [ 258.141407] usb 4-1: New USB device found, idVendor=0a5c, idProduct=2150 [ 258.141420] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 258.141431] usb 4-1: Product: BCM2046 Bluetooth Device [ 258.141440] usb 4-1: Manufacturer: Broadcom Corp [ 258.141448] usb 4-1: SerialNumber: 0C6076DC9FD0 [ 260.852114] b43-phy0: Radio hardware status changed to ENABLED [ 261.076117] b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10) [ 266.592252] b43-pci-bridge 0000:02:00.0: PCI: Disallowing DAC for device [ 266.592264] b43-phy0: DMA mask fallback from 64-bit to 32-bit [ 266.633509] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 269.380720] wlan0: authenticate with 00:1c:f0:e4:3d:a9 (try 1) [ 269.382273] wlan0: authenticated [ 269.382689] wlan0: associate with 00:1c:f0:e4:3d:a9 (try 1) [ 269.385522] wlan0: RX AssocResp from 00:1c:f0:e4:3d:a9 (capab=0x431 status=0 aid=1) [ 269.385534] wlan0: associated [ 269.392770] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready [ 279.928033] wlan0: no IPv6 routers present # cat $(find /sys -name camera_power) [ 291.431607] BTST: 0x1 [ 291.431614] BTPS: 0x1 [ 291.433096] BTEN: 0x1 1 # rfkill block $(rfkill list | awk -F: '/ideapad_bluetooth/{print $1}') [ 341.416077] usb 4-1: USB disconnect, address 3 [ 341.416547] btusb_intr_complete: hci0 urb f6747b80 failed to resubmit (19) [ 341.416559] btusb_bulk_complete: hci0 urb f6798300 failed to resubmit (19) [ 341.417546] btusb_bulk_complete: hci0 urb f674e080 failed to resubmit (19) [ 341.417944] btusb_send_frame: hci0 urb f67e5500 submission failed # cat $(find /sys -name camera_power) [ 364.592492] BTST: 0x0 [ 364.592499] BTPS: 0x1 [ 364.593586] BTEN: 0x0 1 # rfkill unblock $(rfkill list | awk -F: '/ideapad_bluetooth/{print $1}') [ 392.192070] usb 4-1: new full speed USB device using uhci_hcd and address 4 [ 392.312040] usb 4-1: device descriptor read/64, error -71 [ 392.536066] usb 4-1: device descriptor read/64, error -71 [ 392.752073] usb 4-1: new full speed USB device using uhci_hcd and address 5 [ 392.872077] usb 4-1: device descriptor read/64, error -71 [ 393.096059] usb 4-1: device descriptor read/64, error -71 [ 393.312043] usb 4-1: new full speed USB device using uhci_hcd and address 6 [ 393.720143] usb 4-1: device not accepting address 6, error -71 [ 393.832051] usb 4-1: new full speed USB device using uhci_hcd and address 7 [ 394.240083] usb 4-1: device not accepting address 7, error -71 [ 394.240105] hub 4-0:1.0: unable to enumerate USB device on port 1 # cat $(find /sys -name camera_power) [ 458.669365] BTST: 0x1 [ 458.669372] BTPS: 0x1 [ 458.670744] BTEN: 0x1 1 # rfkill block $(rfkill list | awk -F: '/ideapad_bluetooth/{print $1}') <absolutely no messages, no errors, nothing> # cat $(find /sys -name camera_power) [ 576.981559] BTST: 0x0 [ 576.981567] BTPS: 0x1 [ 576.982900] BTEN: 0x0 1 # rfkill unblock $(rfkill list | awk -F: '/ideapad_bluetooth/{print $1}') <absolutely no messages, device does not appear, no errors, nothing> # cat $(find /sys -name camera_power) [ 652.939495] BTST: 0x1 [ 652.939503] BTPS: 0x1 [ 652.941192] BTEN: 0x1 1 <hw killswitch off> [ 701.234772] wlan0: deauthenticating from 00:1c:f0:e4:3d:a9 by local choice (reason=3) [ 701.237446] cfg80211: Calling CRDA to update world regulatory domain [ 702.036108] b43-phy0: Radio hardware status changed to DISABLED # cat $(find /sys -name camera_power) [ 722.962717] BTST: 0x1 [ 722.962724] BTPS: 0x1 [ 722.964822] BTEN: 0x1 1 <hw killswitch on> [ 757.028180] b43-phy0: Radio hardware status changed to ENABLED [ 757.379142] usb 4-1: new full speed USB device using uhci_hcd and address 8 [ 757.432136] b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10) [ 757.552383] usb 4-1: New USB device found, idVendor=0a5c, idProduct=2150 [ 757.552396] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 757.552407] usb 4-1: Product: BCM2046 Bluetooth Device [ 757.552415] usb 4-1: Manufacturer: Broadcom Corp [ 757.552423] usb 4-1: SerialNumber: 0C6076DC9FD0 [ 762.952258] b43-pci-bridge 0000:02:00.0: PCI: Disallowing DAC for device [ 762.952271] b43-phy0: DMA mask fallback from 64-bit to 32-bit [ 762.985688] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 765.728762] wlan0: authenticate with 00:1c:f0:e4:3d:a9 (try 1) [ 765.730314] wlan0: authenticated [ 765.730738] wlan0: associate with 00:1c:f0:e4:3d:a9 (try 1) [ 765.734126] wlan0: RX AssocResp from 00:1c:f0:e4:3d:a9 (capab=0x431 status=0 aid=1) [ 765.734137] wlan0: associated [ 765.738373] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready [ 775.760029] wlan0: no IPv6 routers present # cat $(find /sys -name camera_power) [ 797.842123] BTST: 0x1 [ 797.842131] BTPS: 0x1 [ 797.843030] BTEN: 0x1 1
Attachment:
signature.asc
Description: Digital signature