intel-lpss-acpi.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Intel LPSS ACPI support.
  3. *
  4. * Copyright (C) 2015, Intel Corporation
  5. *
  6. * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  7. * Mika Westerberg <mika.westerberg@linux.intel.com>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License version 2 as
  11. * published by the Free Software Foundation.
  12. */
  13. #include <linux/acpi.h>
  14. #include <linux/ioport.h>
  15. #include <linux/kernel.h>
  16. #include <linux/module.h>
  17. #include <linux/pm.h>
  18. #include <linux/pm_runtime.h>
  19. #include <linux/platform_device.h>
  20. #include "intel-lpss.h"
  21. static const struct intel_lpss_platform_info spt_info = {
  22. .clk_rate = 120000000,
  23. };
  24. static const struct acpi_device_id intel_lpss_acpi_ids[] = {
  25. /* SPT */
  26. { "INT3446", (kernel_ulong_t)&spt_info },
  27. { "INT3447", (kernel_ulong_t)&spt_info },
  28. { }
  29. };
  30. MODULE_DEVICE_TABLE(acpi, intel_lpss_acpi_ids);
  31. static int intel_lpss_acpi_probe(struct platform_device *pdev)
  32. {
  33. struct intel_lpss_platform_info *info;
  34. const struct acpi_device_id *id;
  35. id = acpi_match_device(intel_lpss_acpi_ids, &pdev->dev);
  36. if (!id)
  37. return -ENODEV;
  38. info = devm_kmemdup(&pdev->dev, (void *)id->driver_data, sizeof(*info),
  39. GFP_KERNEL);
  40. if (!info)
  41. return -ENOMEM;
  42. info->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  43. info->irq = platform_get_irq(pdev, 0);
  44. pm_runtime_set_active(&pdev->dev);
  45. pm_runtime_enable(&pdev->dev);
  46. return intel_lpss_probe(&pdev->dev, info);
  47. }
  48. static int intel_lpss_acpi_remove(struct platform_device *pdev)
  49. {
  50. intel_lpss_remove(&pdev->dev);
  51. pm_runtime_disable(&pdev->dev);
  52. return 0;
  53. }
  54. static INTEL_LPSS_PM_OPS(intel_lpss_acpi_pm_ops);
  55. static struct platform_driver intel_lpss_acpi_driver = {
  56. .probe = intel_lpss_acpi_probe,
  57. .remove = intel_lpss_acpi_remove,
  58. .driver = {
  59. .name = "intel-lpss",
  60. .acpi_match_table = intel_lpss_acpi_ids,
  61. .pm = &intel_lpss_acpi_pm_ops,
  62. },
  63. };
  64. module_platform_driver(intel_lpss_acpi_driver);
  65. MODULE_AUTHOR("Andy Shevchenko <andriy.shevchenko@linux.intel.com>");
  66. MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
  67. MODULE_DESCRIPTION("Intel LPSS ACPI driver");
  68. MODULE_LICENSE("GPL v2");