Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.7-rc3 119 lines 3.0 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * dptf_power: DPTF platform power driver 4 * Copyright (c) 2016, Intel Corporation. 5 */ 6 7#include <linux/kernel.h> 8#include <linux/module.h> 9#include <linux/acpi.h> 10#include <linux/platform_device.h> 11 12/* 13 * Presentation of attributes which are defined for INT3407. They are: 14 * PMAX : Maximum platform powe 15 * PSRC : Platform power source 16 * ARTG : Adapter rating 17 * CTYP : Charger type 18 * PBSS : Battery steady power 19 */ 20#define DPTF_POWER_SHOW(name, object) \ 21static ssize_t name##_show(struct device *dev,\ 22 struct device_attribute *attr,\ 23 char *buf)\ 24{\ 25 struct acpi_device *acpi_dev = dev_get_drvdata(dev);\ 26 unsigned long long val;\ 27 acpi_status status;\ 28\ 29 status = acpi_evaluate_integer(acpi_dev->handle, #object,\ 30 NULL, &val);\ 31 if (ACPI_SUCCESS(status))\ 32 return sprintf(buf, "%d\n", (int)val);\ 33 else \ 34 return -EINVAL;\ 35} 36 37DPTF_POWER_SHOW(max_platform_power_mw, PMAX) 38DPTF_POWER_SHOW(platform_power_source, PSRC) 39DPTF_POWER_SHOW(adapter_rating_mw, ARTG) 40DPTF_POWER_SHOW(battery_steady_power_mw, PBSS) 41DPTF_POWER_SHOW(charger_type, CTYP) 42 43static DEVICE_ATTR_RO(max_platform_power_mw); 44static DEVICE_ATTR_RO(platform_power_source); 45static DEVICE_ATTR_RO(adapter_rating_mw); 46static DEVICE_ATTR_RO(battery_steady_power_mw); 47static DEVICE_ATTR_RO(charger_type); 48 49static struct attribute *dptf_power_attrs[] = { 50 &dev_attr_max_platform_power_mw.attr, 51 &dev_attr_platform_power_source.attr, 52 &dev_attr_adapter_rating_mw.attr, 53 &dev_attr_battery_steady_power_mw.attr, 54 &dev_attr_charger_type.attr, 55 NULL 56}; 57 58static const struct attribute_group dptf_power_attribute_group = { 59 .attrs = dptf_power_attrs, 60 .name = "dptf_power" 61}; 62 63static int dptf_power_add(struct platform_device *pdev) 64{ 65 struct acpi_device *acpi_dev; 66 acpi_status status; 67 unsigned long long ptype; 68 int result; 69 70 acpi_dev = ACPI_COMPANION(&(pdev->dev)); 71 if (!acpi_dev) 72 return -ENODEV; 73 74 status = acpi_evaluate_integer(acpi_dev->handle, "PTYP", NULL, &ptype); 75 if (ACPI_FAILURE(status)) 76 return -ENODEV; 77 78 if (ptype != 0x11) 79 return -ENODEV; 80 81 result = sysfs_create_group(&pdev->dev.kobj, 82 &dptf_power_attribute_group); 83 if (result) 84 return result; 85 86 platform_set_drvdata(pdev, acpi_dev); 87 88 return 0; 89} 90 91static int dptf_power_remove(struct platform_device *pdev) 92{ 93 94 sysfs_remove_group(&pdev->dev.kobj, &dptf_power_attribute_group); 95 96 return 0; 97} 98 99static const struct acpi_device_id int3407_device_ids[] = { 100 {"INT3407", 0}, 101 {"INTC1047", 0}, 102 {"", 0}, 103}; 104MODULE_DEVICE_TABLE(acpi, int3407_device_ids); 105 106static struct platform_driver dptf_power_driver = { 107 .probe = dptf_power_add, 108 .remove = dptf_power_remove, 109 .driver = { 110 .name = "DPTF Platform Power", 111 .acpi_match_table = int3407_device_ids, 112 }, 113}; 114 115module_platform_driver(dptf_power_driver); 116 117MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>"); 118MODULE_LICENSE("GPL v2"); 119MODULE_DESCRIPTION("ACPI DPTF platform power driver");