mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 22:44:27 +08:00
2025cf9e19
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms and conditions of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 263 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190529141901.208660670@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
119 lines
2.9 KiB
C
119 lines
2.9 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* dptf_power: DPTF platform power driver
|
|
* Copyright (c) 2016, Intel Corporation.
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/acpi.h>
|
|
#include <linux/platform_device.h>
|
|
|
|
/*
|
|
* Presentation of attributes which are defined for INT3407. They are:
|
|
* PMAX : Maximum platform powe
|
|
* PSRC : Platform power source
|
|
* ARTG : Adapter rating
|
|
* CTYP : Charger type
|
|
* PBSS : Battery steady power
|
|
*/
|
|
#define DPTF_POWER_SHOW(name, object) \
|
|
static ssize_t name##_show(struct device *dev,\
|
|
struct device_attribute *attr,\
|
|
char *buf)\
|
|
{\
|
|
struct acpi_device *acpi_dev = dev_get_drvdata(dev);\
|
|
unsigned long long val;\
|
|
acpi_status status;\
|
|
\
|
|
status = acpi_evaluate_integer(acpi_dev->handle, #object,\
|
|
NULL, &val);\
|
|
if (ACPI_SUCCESS(status))\
|
|
return sprintf(buf, "%d\n", (int)val);\
|
|
else \
|
|
return -EINVAL;\
|
|
}
|
|
|
|
DPTF_POWER_SHOW(max_platform_power_mw, PMAX)
|
|
DPTF_POWER_SHOW(platform_power_source, PSRC)
|
|
DPTF_POWER_SHOW(adapter_rating_mw, ARTG)
|
|
DPTF_POWER_SHOW(battery_steady_power_mw, PBSS)
|
|
DPTF_POWER_SHOW(charger_type, CTYP)
|
|
|
|
static DEVICE_ATTR_RO(max_platform_power_mw);
|
|
static DEVICE_ATTR_RO(platform_power_source);
|
|
static DEVICE_ATTR_RO(adapter_rating_mw);
|
|
static DEVICE_ATTR_RO(battery_steady_power_mw);
|
|
static DEVICE_ATTR_RO(charger_type);
|
|
|
|
static struct attribute *dptf_power_attrs[] = {
|
|
&dev_attr_max_platform_power_mw.attr,
|
|
&dev_attr_platform_power_source.attr,
|
|
&dev_attr_adapter_rating_mw.attr,
|
|
&dev_attr_battery_steady_power_mw.attr,
|
|
&dev_attr_charger_type.attr,
|
|
NULL
|
|
};
|
|
|
|
static const struct attribute_group dptf_power_attribute_group = {
|
|
.attrs = dptf_power_attrs,
|
|
.name = "dptf_power"
|
|
};
|
|
|
|
static int dptf_power_add(struct platform_device *pdev)
|
|
{
|
|
struct acpi_device *acpi_dev;
|
|
acpi_status status;
|
|
unsigned long long ptype;
|
|
int result;
|
|
|
|
acpi_dev = ACPI_COMPANION(&(pdev->dev));
|
|
if (!acpi_dev)
|
|
return -ENODEV;
|
|
|
|
status = acpi_evaluate_integer(acpi_dev->handle, "PTYP", NULL, &ptype);
|
|
if (ACPI_FAILURE(status))
|
|
return -ENODEV;
|
|
|
|
if (ptype != 0x11)
|
|
return -ENODEV;
|
|
|
|
result = sysfs_create_group(&pdev->dev.kobj,
|
|
&dptf_power_attribute_group);
|
|
if (result)
|
|
return result;
|
|
|
|
platform_set_drvdata(pdev, acpi_dev);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int dptf_power_remove(struct platform_device *pdev)
|
|
{
|
|
|
|
sysfs_remove_group(&pdev->dev.kobj, &dptf_power_attribute_group);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct acpi_device_id int3407_device_ids[] = {
|
|
{"INT3407", 0},
|
|
{"", 0},
|
|
};
|
|
MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
|
|
|
|
static struct platform_driver dptf_power_driver = {
|
|
.probe = dptf_power_add,
|
|
.remove = dptf_power_remove,
|
|
.driver = {
|
|
.name = "DPTF Platform Power",
|
|
.acpi_match_table = int3407_device_ids,
|
|
},
|
|
};
|
|
|
|
module_platform_driver(dptf_power_driver);
|
|
|
|
MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
|
|
MODULE_LICENSE("GPL v2");
|
|
MODULE_DESCRIPTION("ACPI DPTF platform power driver");
|