2019-05-29 17:18:02 +03:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
2016-07-17 23:45:32 +03:00
|
|
|
/*
|
|
|
|
* 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>
|
|
|
|
|
|
|
|
/*
|
2020-05-23 00:45:09 +03:00
|
|
|
* Presentation of attributes which are defined for INT3407 and INT3532.
|
|
|
|
* They are:
|
2016-07-17 23:45:32 +03:00
|
|
|
* PMAX : Maximum platform powe
|
|
|
|
* PSRC : Platform power source
|
|
|
|
* ARTG : Adapter rating
|
|
|
|
* CTYP : Charger type
|
|
|
|
* PBSS : Battery steady power
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
* PROP : Rest of worst case platform Power
|
2020-05-23 00:45:09 +03:00
|
|
|
* PBSS : Power Battery Steady State
|
|
|
|
* PBSS : Power Battery Steady State
|
|
|
|
* RBHF : High Frequency Impedance
|
|
|
|
* VBNL : Instantaneous No-Load Voltage
|
|
|
|
* CMPP : Current Discharge Capability
|
2016-07-17 23:45:32 +03:00
|
|
|
*/
|
|
|
|
#define DPTF_POWER_SHOW(name, object) \
|
|
|
|
static ssize_t name##_show(struct device *dev,\
|
|
|
|
struct device_attribute *attr,\
|
|
|
|
char *buf)\
|
|
|
|
{\
|
2019-04-23 10:49:56 +03:00
|
|
|
struct acpi_device *acpi_dev = dev_get_drvdata(dev);\
|
2016-07-17 23:45:32 +03:00
|
|
|
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)
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
DPTF_POWER_SHOW(rest_of_platform_power_mw, PROP)
|
2020-05-23 00:45:09 +03:00
|
|
|
DPTF_POWER_SHOW(max_steady_state_power_mw, PBSS)
|
|
|
|
DPTF_POWER_SHOW(high_freq_impedance_mohm, RBHF)
|
|
|
|
DPTF_POWER_SHOW(no_load_voltage_mv, VBNL)
|
|
|
|
DPTF_POWER_SHOW(current_discharge_capbility_ma, CMPP);
|
2016-07-17 23:45:32 +03:00
|
|
|
|
|
|
|
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);
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
static DEVICE_ATTR_RO(rest_of_platform_power_mw);
|
2020-05-23 00:45:09 +03:00
|
|
|
static DEVICE_ATTR_RO(max_steady_state_power_mw);
|
|
|
|
static DEVICE_ATTR_RO(high_freq_impedance_mohm);
|
|
|
|
static DEVICE_ATTR_RO(no_load_voltage_mv);
|
|
|
|
static DEVICE_ATTR_RO(current_discharge_capbility_ma);
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
|
|
|
|
static ssize_t prochot_confirm_store(struct device *dev,
|
|
|
|
struct device_attribute *attr,
|
|
|
|
const char *buf, size_t count)
|
|
|
|
{
|
|
|
|
struct acpi_device *acpi_dev = dev_get_drvdata(dev);
|
|
|
|
acpi_status status;
|
|
|
|
int seq_no;
|
|
|
|
|
|
|
|
if (kstrtouint(buf, 0, &seq_no) < 0)
|
|
|
|
return -EINVAL;
|
|
|
|
|
|
|
|
status = acpi_execute_simple_method(acpi_dev->handle, "PBOK", seq_no);
|
|
|
|
if (ACPI_SUCCESS(status))
|
|
|
|
return count;
|
|
|
|
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static DEVICE_ATTR_WO(prochot_confirm);
|
2016-07-17 23:45:32 +03:00
|
|
|
|
|
|
|
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,
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
&dev_attr_rest_of_platform_power_mw.attr,
|
|
|
|
&dev_attr_prochot_confirm.attr,
|
2016-07-17 23:45:32 +03:00
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
2017-06-30 16:02:49 +03:00
|
|
|
static const struct attribute_group dptf_power_attribute_group = {
|
2016-07-17 23:45:32 +03:00
|
|
|
.attrs = dptf_power_attrs,
|
|
|
|
.name = "dptf_power"
|
|
|
|
};
|
|
|
|
|
2020-05-23 00:45:09 +03:00
|
|
|
static struct attribute *dptf_battery_attrs[] = {
|
|
|
|
&dev_attr_max_platform_power_mw.attr,
|
|
|
|
&dev_attr_max_steady_state_power_mw.attr,
|
|
|
|
&dev_attr_high_freq_impedance_mohm.attr,
|
|
|
|
&dev_attr_no_load_voltage_mv.attr,
|
|
|
|
&dev_attr_current_discharge_capbility_ma.attr,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct attribute_group dptf_battery_attribute_group = {
|
|
|
|
.attrs = dptf_battery_attrs,
|
|
|
|
.name = "dptf_battery"
|
|
|
|
};
|
|
|
|
|
|
|
|
#define MAX_POWER_CHANGED 0x80
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
#define POWER_STATE_CHANGED 0x81
|
2020-05-23 00:45:09 +03:00
|
|
|
#define STEADY_STATE_POWER_CHANGED 0x83
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
#define POWER_PROP_CHANGE_EVENT 0x84
|
2020-05-23 00:45:09 +03:00
|
|
|
#define IMPEDANCED_CHNGED 0x85
|
|
|
|
#define VOLTAGE_CURRENT_CHANGED 0x86
|
|
|
|
|
|
|
|
static long long dptf_participant_type(acpi_handle handle)
|
|
|
|
{
|
|
|
|
unsigned long long ptype;
|
|
|
|
acpi_status status;
|
|
|
|
|
|
|
|
status = acpi_evaluate_integer(handle, "PTYP", NULL, &ptype);
|
|
|
|
if (ACPI_FAILURE(status))
|
|
|
|
return -ENODEV;
|
|
|
|
|
|
|
|
return ptype;
|
|
|
|
}
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
|
|
|
|
static void dptf_power_notify(acpi_handle handle, u32 event, void *data)
|
|
|
|
{
|
|
|
|
struct platform_device *pdev = data;
|
|
|
|
char *attr;
|
|
|
|
|
|
|
|
switch (event) {
|
|
|
|
case POWER_STATE_CHANGED:
|
|
|
|
attr = "platform_power_source";
|
|
|
|
break;
|
|
|
|
case POWER_PROP_CHANGE_EVENT:
|
|
|
|
attr = "rest_of_platform_power_mw";
|
|
|
|
break;
|
2020-05-23 00:45:09 +03:00
|
|
|
case MAX_POWER_CHANGED:
|
|
|
|
attr = "max_platform_power_mw";
|
|
|
|
break;
|
|
|
|
case STEADY_STATE_POWER_CHANGED:
|
|
|
|
attr = "max_steady_state_power_mw";
|
|
|
|
break;
|
|
|
|
case VOLTAGE_CURRENT_CHANGED:
|
|
|
|
attr = "no_load_voltage_mv";
|
|
|
|
break;
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
default:
|
|
|
|
dev_err(&pdev->dev, "Unsupported event [0x%x]\n", event);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Notify that an attribute is changed, so that user space can read
|
|
|
|
* again.
|
|
|
|
*/
|
2020-05-23 00:45:09 +03:00
|
|
|
if (dptf_participant_type(handle) == 0x0CULL)
|
|
|
|
sysfs_notify(&pdev->dev.kobj, "dptf_battery", attr);
|
|
|
|
else
|
|
|
|
sysfs_notify(&pdev->dev.kobj, "dptf_power", attr);
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
}
|
|
|
|
|
2016-07-17 23:45:32 +03:00
|
|
|
static int dptf_power_add(struct platform_device *pdev)
|
|
|
|
{
|
2020-05-23 00:45:09 +03:00
|
|
|
const struct attribute_group *attr_group;
|
2016-07-17 23:45:32 +03:00
|
|
|
struct acpi_device *acpi_dev;
|
|
|
|
unsigned long long ptype;
|
|
|
|
int result;
|
|
|
|
|
|
|
|
acpi_dev = ACPI_COMPANION(&(pdev->dev));
|
|
|
|
if (!acpi_dev)
|
|
|
|
return -ENODEV;
|
|
|
|
|
2020-05-23 00:45:09 +03:00
|
|
|
ptype = dptf_participant_type(acpi_dev->handle);
|
|
|
|
if (ptype == 0x11)
|
|
|
|
attr_group = &dptf_power_attribute_group;
|
|
|
|
else if (ptype == 0x0C)
|
|
|
|
attr_group = &dptf_battery_attribute_group;
|
|
|
|
else
|
2016-07-17 23:45:32 +03:00
|
|
|
return -ENODEV;
|
|
|
|
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
result = acpi_install_notify_handler(acpi_dev->handle,
|
|
|
|
ACPI_DEVICE_NOTIFY,
|
|
|
|
dptf_power_notify,
|
|
|
|
(void *)pdev);
|
|
|
|
if (result)
|
|
|
|
return result;
|
|
|
|
|
2016-07-17 23:45:32 +03:00
|
|
|
result = sysfs_create_group(&pdev->dev.kobj,
|
2020-05-23 00:45:09 +03:00
|
|
|
attr_group);
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
if (result) {
|
|
|
|
acpi_remove_notify_handler(acpi_dev->handle,
|
|
|
|
ACPI_DEVICE_NOTIFY,
|
|
|
|
dptf_power_notify);
|
2016-07-17 23:45:32 +03:00
|
|
|
return result;
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
}
|
2016-07-17 23:45:32 +03:00
|
|
|
|
|
|
|
platform_set_drvdata(pdev, acpi_dev);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int dptf_power_remove(struct platform_device *pdev)
|
|
|
|
{
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
struct acpi_device *acpi_dev = platform_get_drvdata(pdev);
|
2016-07-17 23:45:32 +03:00
|
|
|
|
ACPI: DPTF: Additional sysfs attributes for power participant driver
Add two additional attributes to the existing power participant driver:
rest_of_platform_power_mw: (RO) Shows the rest of worst case platform
power in mW outside of S0C. This will help in power distribution to SoC
and rest of the system. For example on a test system, this value is 2.5W
with a 15W TDP SoC. Based on the adapter rating (adapter_rating_mw), user
space software can decide on proper power allocation to SoC to improve
short term performance via powercap/RAPL interface.
prochot_confirm: (WO) Confirm EC about a prochot notification.
Also userspace is notified via sysfs_notify(), whenever power source or
rest of the platform power is changed. So user space can use poll()
system call on those attributes.
The ACPI methods used in this patch are as follows:
PROP
This object evaluates to the rest of worst case platform power in mW.
Bits:
23:0 Worst case rest of platform power in mW.
PBOK
PBOK is a method designed to provide a mechanism for OSPM to change power
setting before EC can de-assert a PROCHOT from a device. The EC may
receive several PROCHOTs, so it has a sequence number attached to PSRC
(read via existing attribute "platform_power_source"). Once OSPM takes
action for a PSRC change notification, it can call PBOK method to confirm
with the sequence number.
Bits:
3:0 Power Delivery State Change Sequence number
30 Reserved
31 0 – Not OK to de-assert PROCHOT
1 – OK to de-assert PROCHOT
PSRC (Platform Power Source): Not new in this patch but for
documentation for new bits
This object evaluates to an integer that represents the system power
source as well as the power delivery state change sequence number.
Bits:
3:0 The current power source as an integer for AC, DC, USB, Wireless.
0 = DC, 1 = AC, 2 = USB, 3 = Wireless Charging
7:4 Power Delivery State Change Sequence Number. Default value is 0
Notifications:
0x81: (Power State Change) Used to notify when the power source has
changed.
0x84: (PROP change) Used to notify when the platform rest of power has
changed.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, minor ABI documentation edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-05-21 23:30:15 +03:00
|
|
|
acpi_remove_notify_handler(acpi_dev->handle,
|
|
|
|
ACPI_DEVICE_NOTIFY,
|
|
|
|
dptf_power_notify);
|
2020-05-23 00:45:09 +03:00
|
|
|
|
|
|
|
if (dptf_participant_type(acpi_dev->handle) == 0x0CULL)
|
|
|
|
sysfs_remove_group(&pdev->dev.kobj, &dptf_battery_attribute_group);
|
|
|
|
else
|
|
|
|
sysfs_remove_group(&pdev->dev.kobj, &dptf_power_attribute_group);
|
2016-07-17 23:45:32 +03:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const struct acpi_device_id int3407_device_ids[] = {
|
|
|
|
{"INT3407", 0},
|
2020-05-23 00:45:09 +03:00
|
|
|
{"INT3532", 0},
|
2020-03-28 00:28:19 +03:00
|
|
|
{"INTC1047", 0},
|
2020-06-24 21:51:40 +03:00
|
|
|
{"INTC1050", 0},
|
2020-11-10 20:50:58 +03:00
|
|
|
{"INTC1060", 0},
|
|
|
|
{"INTC1061", 0},
|
2016-07-17 23:45:32 +03:00
|
|
|
{"", 0},
|
|
|
|
};
|
|
|
|
MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
|
|
|
|
|
|
|
|
static struct platform_driver dptf_power_driver = {
|
|
|
|
.probe = dptf_power_add,
|
|
|
|
.remove = dptf_power_remove,
|
|
|
|
.driver = {
|
2020-10-15 19:58:43 +03:00
|
|
|
.name = "dptf_power",
|
2016-07-17 23:45:32 +03:00
|
|
|
.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");
|