16.06.2014 22:21, Edward Tomasz Napierała пишет:
> Hi.  Patch below should fix a problem where USB stops working after
> _second_ suspend/resume, which happens on various ThinkPad models.
> Please test, and report both success stories and failures.  If nothing
> comes up, I'll commit it in a week or so.
>
> (Btw, has anyone encountered the problem on hardware other than ThinkPads?)
>
>
> Index: sys/dev/acpi_support/acpi_ibm.c
> ===================================================================
> --- sys/dev/acpi_support/acpi_ibm.c   (revision 267417)
> +++ sys/dev/acpi_support/acpi_ibm.c   (working copy)
> @@ -169,6 +169,9 @@ struct acpi_ibm_softc {
>       int             light_get_supported;
>       int             light_set_supported;
>  
> +     /* USB power workaround */
> +     ACPI_HANDLE     power_handle;
> +
>       /* led(4) interface */
>       struct cdev     *led_dev;
>       int             led_busy;
> @@ -365,6 +368,7 @@ acpi_ibm_attach(device_t dev)
>  {
>       struct acpi_ibm_softc   *sc;
>       devclass_t              ec_devclass;
> +     ACPI_STATUS             status;
>  
>       ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
>  
> @@ -448,6 +452,17 @@ acpi_ibm_attach(device_t dev)
>       if (sc->light_set_supported)
>               sc->led_dev = led_create_state(ibm_led, sc, "thinklight", 
> sc->light_val);
>  
> +     /*
> +      * Obtain a handle to the power resource available on many models.
> +      * This must be turned on manually upon resume. Otherwise the system
> +      * may, for instance, resume from S3 with usb(4) powered down.
> +      */
> +     status = AcpiGetHandle(sc->handle, "\\_SB.PCI0.LPC.EC.PUBS", 
> &sc->power_handle);
> +     if (ACPI_FAILURE(status)) {
> +             device_printf(dev, "Failed to get power handle\n");
> +             return (status);
> +     }
> +
>       return (0);
>  }
>  
> @@ -476,6 +491,7 @@ static int
>  acpi_ibm_resume(device_t dev)
>  {
>       struct acpi_ibm_softc *sc = device_get_softc(dev);
> +     ACPI_STATUS status;
>  
>       ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
>  
> @@ -495,6 +511,15 @@ acpi_ibm_resume(device_t dev)
>  
>               acpi_ibm_sysctl_set(sc, i, val);
>       }
> +     if (sc->power_handle != NULL) {
> +             status = AcpiEvaluateObject(sc->power_handle,
> +                 "_ON", NULL, NULL);
> +             if (ACPI_FAILURE(status)) {
> +                     device_printf(dev, "failed to switch %s on - %s\n",
> +                         acpi_name(sc->power_handle),
> +                         AcpiFormatException(status));
> +             }
> +     }
>       ACPI_SERIAL_END(ibm);
>  
>       return (0);
Hi. I've never seen this problem before on my ThinkPad E530. However, I
have applied this patch and after reboot all sysctl oids related to
acpi_ibm disappeared.

root@thinkpad:/home/shurik # kldstat|grep ibm
9 1 0xffffffff82190000 77e8 acpi_ibm.ko

root@thinkpad:/home/shurik # sysctl dev.acpi_ibm
root@thinkpad:/home/shurik #

And in dmesg I see this errors:

root@thinkpad:/home/shurik # dmesg -a|grep ibm
acpi_ibm0: <IBM ThinkPad ACPI Extras> on acpi0
acpi_ibm0: Failed to get power handle
device_attach: acpi_ibm0 attach returned 5
sysctl: unknown oid 'dev.acpi_ibm.0.events' at line 22: No such file or
directory
sysctl: unknown oid 'dev.acpi_ibm.0.fan' at line 23: No such file or
directory
sysctl: unknown oid 'dev.acpi_ibm.0.bluetooth' at line 24: No such file
or directory
acpi_ibm0: <IBM ThinkPad ACPI Extras> on acpi0
#5 0xffffffff8260766c at acpi_ibm_attach+0x5bc
acpi_ibm0: <IBM ThinkPad ACPI Extras> on acpi0
acpi_ibm0: Failed to get power handle
device_attach: acpi_ibm0 attach returned 5



All Fn keys and usb ports still work fine before/after suspend/resume.
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to