Merge tag 'usb-4.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Jul 2017 02:30:55 +0000 (19:30 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Jul 2017 02:30:55 +0000 (19:30 -0700)
Pull USB/PHY updates from Greg KH:
 "Here is the big patchset of USB and PHY driver updates for 4.13-rc1.

  On the PHY side, they decided to move files around to "make things
  easier" in their tree. Hopefully that wasn't a mistake, but in
  linux-next testing, we haven't had any reported problems.

  There's the usual set of gadget and xhci and musb updates in here as
  well, along with a number of smaller updates for a raft of different
  USB drivers. Full details in the shortlog, nothing really major.

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'usb-4.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (173 commits)
  Add USB quirk for HVR-950q to avoid intermittent device resets
  USB hub_probe: rework ugly goto-into-compound-statement
  usb: host: ohci-pxa27x: Handle return value of clk_prepare_enable
  USB: serial: cp210x: add ID for CEL EM3588 USB ZigBee stick
  usbip: Fix uninitialized variable bug in vhci
  usb: core: read USB ports from DT in the usbport LED trigger driver
  dt-bindings: leds: document new trigger-sources property
  usb: typec: ucsi: Add ACPI driver
  usb: typec: Add support for UCSI interface
  usb: musb: compress return logic into one line
  USB: serial: propagate late probe errors
  USB: serial: refactor port endpoint setup
  usb: musb: tusb6010_omap: Convert to DMAengine API
  ARM: OMAP2+: DMA: Add slave map entries for 24xx external request lines
  usb: musb: tusb6010: Handle DMA TX completion in DMA callback as well
  usb: musb: tusb6010_omap: Allocate DMA channels upfront
  usb: musb: tusb6010_omap: Create new struct for DMA data/parameters
  usb: musb: tusb6010_omap: Use one musb_ep_select call in tusb_omap_dma_program
  usb: musb: tusb6010: Add MUSB_G_NO_SKB_RESERVE to quirks
  usb: musb: Add quirk to avoid skb reserve in gadget mode
  ...

1  2 
MAINTAINERS
drivers/usb/typec/ucsi/ucsi_acpi.c

diff --cc MAINTAINERS
Simple merge
index 0000000,3fb2e48..cabd476
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,158 +1,158 @@@
 -      uuid_le uuid;
+ /*
+  * UCSI ACPI driver
+  *
+  * Copyright (C) 2017, Intel Corporation
+  * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
+  *
+  * This program is free software; you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License version 2 as
+  * published by the Free Software Foundation.
+  */
+ #include <linux/platform_device.h>
+ #include <linux/module.h>
+ #include <linux/acpi.h>
+ #include "ucsi.h"
+ #define UCSI_DSM_UUID         "6f8398c2-7ca4-11e4-ad36-631042b5008f"
+ #define UCSI_DSM_FUNC_WRITE   1
+ #define UCSI_DSM_FUNC_READ    2
+ struct ucsi_acpi {
+       struct device *dev;
+       struct ucsi *ucsi;
+       struct ucsi_ppm ppm;
 -      obj = acpi_evaluate_dsm(ACPI_HANDLE(ua->dev), ua->uuid.b, 1, func,
++      guid_t guid;
+ };
+ static int ucsi_acpi_dsm(struct ucsi_acpi *ua, int func)
+ {
+       union acpi_object *obj;
 -      ret = uuid_le_to_bin(UCSI_DSM_UUID, &ua->uuid);
++      obj = acpi_evaluate_dsm(ACPI_HANDLE(ua->dev), &ua->guid, 1, func,
+                               NULL);
+       if (!obj) {
+               dev_err(ua->dev, "%s: failed to evaluate _DSM %d\n",
+                       __func__, func);
+               return -EIO;
+       }
+       ACPI_FREE(obj);
+       return 0;
+ }
+ static int ucsi_acpi_cmd(struct ucsi_ppm *ppm, struct ucsi_control *ctrl)
+ {
+       struct ucsi_acpi *ua = container_of(ppm, struct ucsi_acpi, ppm);
+       ppm->data->ctrl.raw_cmd = ctrl->raw_cmd;
+       return ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_WRITE);
+ }
+ static int ucsi_acpi_sync(struct ucsi_ppm *ppm)
+ {
+       struct ucsi_acpi *ua = container_of(ppm, struct ucsi_acpi, ppm);
+       return ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
+ }
+ static void ucsi_acpi_notify(acpi_handle handle, u32 event, void *data)
+ {
+       struct ucsi_acpi *ua = data;
+       ucsi_notify(ua->ucsi);
+ }
+ static int ucsi_acpi_probe(struct platform_device *pdev)
+ {
+       struct ucsi_acpi *ua;
+       struct resource *res;
+       acpi_status status;
+       int ret;
+       ua = devm_kzalloc(&pdev->dev, sizeof(*ua), GFP_KERNEL);
+       if (!ua)
+               return -ENOMEM;
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "missing memory resource\n");
+               return -ENODEV;
+       }
+       /*
+        * NOTE: The memory region for the data structures is used also in an
+        * operation region, which means ACPI has already reserved it. Therefore
+        * it can not be requested here, and we can not use
+        * devm_ioremap_resource().
+        */
+       ua->ppm.data = devm_ioremap(&pdev->dev, res->start, resource_size(res));
+       if (!ua->ppm.data)
+               return -ENOMEM;
+       if (!ua->ppm.data->version)
+               return -ENODEV;
++      ret = guid_parse(UCSI_DSM_UUID, &ua->guid);
+       if (ret)
+               return ret;
+       ua->ppm.cmd = ucsi_acpi_cmd;
+       ua->ppm.sync = ucsi_acpi_sync;
+       ua->dev = &pdev->dev;
+       status = acpi_install_notify_handler(ACPI_HANDLE(&pdev->dev),
+                                            ACPI_DEVICE_NOTIFY,
+                                            ucsi_acpi_notify, ua);
+       if (ACPI_FAILURE(status)) {
+               dev_err(&pdev->dev, "failed to install notify handler\n");
+               return -ENODEV;
+       }
+       ua->ucsi = ucsi_register_ppm(&pdev->dev, &ua->ppm);
+       if (IS_ERR(ua->ucsi)) {
+               acpi_remove_notify_handler(ACPI_HANDLE(&pdev->dev),
+                                          ACPI_DEVICE_NOTIFY,
+                                          ucsi_acpi_notify);
+               return PTR_ERR(ua->ucsi);
+       }
+       platform_set_drvdata(pdev, ua);
+       return 0;
+ }
+ static int ucsi_acpi_remove(struct platform_device *pdev)
+ {
+       struct ucsi_acpi *ua = platform_get_drvdata(pdev);
+       ucsi_unregister_ppm(ua->ucsi);
+       acpi_remove_notify_handler(ACPI_HANDLE(&pdev->dev), ACPI_DEVICE_NOTIFY,
+                                  ucsi_acpi_notify);
+       return 0;
+ }
+ static const struct acpi_device_id ucsi_acpi_match[] = {
+       { "PNP0CA0", 0 },
+       { },
+ };
+ MODULE_DEVICE_TABLE(acpi, ucsi_acpi_match);
+ static struct platform_driver ucsi_acpi_platform_driver = {
+       .driver = {
+               .name = "ucsi_acpi",
+               .acpi_match_table = ACPI_PTR(ucsi_acpi_match),
+       },
+       .probe = ucsi_acpi_probe,
+       .remove = ucsi_acpi_remove,
+ };
+ module_platform_driver(ucsi_acpi_platform_driver);
+ MODULE_AUTHOR("Heikki Krogerus <heikki.krogerus@linux.intel.com>");
+ MODULE_LICENSE("GPL v2");
+ MODULE_DESCRIPTION("UCSI ACPI driver");