1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Intel(R) Trace Hub ACPI driver 4 * 5 * Copyright (C) 2017 Intel Corporation. 6 */ 7 8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 9 10 #include <linux/types.h> 11 #include <linux/module.h> 12 #include <linux/device.h> 13 #include <linux/sysfs.h> 14 #include <linux/platform_device.h> 15 #include <linux/acpi.h> 16 17 #include "intel_th.h" 18 19 #define DRIVER_NAME "intel_th_acpi" 20 21 static const struct intel_th_drvdata intel_th_acpi_pch = { 22 .host_mode_only = 1, 23 }; 24 25 static const struct intel_th_drvdata intel_th_acpi_uncore = { 26 .host_mode_only = 1, 27 }; 28 29 static const struct acpi_device_id intel_th_acpi_ids[] = { 30 { "INTC1000", (kernel_ulong_t)&intel_th_acpi_uncore }, 31 { "INTC1001", (kernel_ulong_t)&intel_th_acpi_pch }, 32 { "", 0 }, 33 }; 34 35 MODULE_DEVICE_TABLE(acpi, intel_th_acpi_ids); 36 37 static int intel_th_acpi_probe(struct platform_device *pdev) 38 { 39 struct acpi_device *adev = ACPI_COMPANION(&pdev->dev); 40 struct resource resource[TH_MMIO_END]; 41 const struct acpi_device_id *id; 42 struct intel_th *th; 43 int i, r, irq = -1; 44 45 id = acpi_match_device(intel_th_acpi_ids, &pdev->dev); 46 if (!id) 47 return -ENODEV; 48 49 for (i = 0, r = 0; i < pdev->num_resources && r < TH_MMIO_END; i++) 50 if (pdev->resource[i].flags & IORESOURCE_IRQ) 51 irq = pdev->resource[i].start; 52 else if (pdev->resource[i].flags & IORESOURCE_MEM) 53 resource[r++] = pdev->resource[i]; 54 55 th = intel_th_alloc(&pdev->dev, (void *)id->driver_data, resource, r, 56 irq); 57 if (IS_ERR(th)) 58 return PTR_ERR(th); 59 60 adev->driver_data = th; 61 62 return 0; 63 } 64 65 static int intel_th_acpi_remove(struct platform_device *pdev) 66 { 67 struct intel_th *th = platform_get_drvdata(pdev); 68 69 intel_th_free(th); 70 71 return 0; 72 } 73 74 static struct platform_driver intel_th_acpi_driver = { 75 .probe = intel_th_acpi_probe, 76 .remove = intel_th_acpi_remove, 77 .driver = { 78 .name = DRIVER_NAME, 79 .acpi_match_table = intel_th_acpi_ids, 80 }, 81 }; 82 83 module_platform_driver(intel_th_acpi_driver); 84 85 MODULE_LICENSE("GPL v2"); 86 MODULE_DESCRIPTION("Intel(R) Trace Hub ACPI controller driver"); 87 MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@intel.com>"); 88