On Fri, May 22, 2020 at 11:45 PM Srinivas Pandruvada <srinivas.pandruv...@linux.intel.com> wrote: > > This driver adds support for Dynamic Platform and Thermal Framework > battery participant device support. > > These attributes are presented via sysfs interface under the platform > device for the battery participant: > $ls /sys/bus/platform/devices/INT3532:00/dptf_battery > current_discharge_capbility_ma > max_platform_power_mw > no_load_voltage_mv > high_freq_impedance_mohm > max_steady_state_power_mw > > Refer to the documentation at > Documentation/ABI/testing/sysfs-platform-dptf > for details. > > Here the implementation reuses existing dptf-power.c as the motivation and > processing is same. It also shares one ACPI method. Here this change is > using participant type, "PTYP" method to identify and do different > processing. By using participant type, create/delete either "dptf_power" > or "dptf_battery" attribute group and send notifications. > > The particpant type for for the battery participant is 0x0C. > > ACPI methods description: > > PMAX (Intel(R) Dynamic Tuning Platform Max Power Supplied by Battery): > This object evaluates to the maximum platform power that can be supported > by the battery in milli watts. > > PBSS (Intel(R) Dynamic Tuning Power Battery Steady State): > This object returns the max sustained power for battery in milli watts. > > RBHF (Intel(R) Dynamic Tuning High Frequency Impedance): > This object returns high frequency impedance value that can be obtained > from battery fuel gauge. > > VBNL (Intel(R) Dynamic Tuning No-Load Voltage) > This object returns battery instantaneous no-load voltage that can be > obtained from battery fuel gauge in milli volts > > CMPP (Intel(R) Dynamic Tuning Current Discharge Capability) > This object returns battery discharge current capability obtained from > battery fuel gauge milli amps. > > Notifications: > > 0x80: PMAX change. Used to notify Intel(R)Dynamic Tuning Battery > participant driver when the PMAX has changed by 250mw. > 0x83: PBSS change. Used to notify Intel(R) Dynamic Tuning Battery > participant driver when the power source has changed. > 0x85: RBHF change. Used to notify Intel(R)Dynamic Tuning Battery > participant driver when the RBHF has changed over a threshold by > 5mOhm. > 0x86: Battery Capability change. Used to notify Intel(R)Dynamic Tuning > Battery participant driver when the battery capability has changed. > > Signed-off-by: Srinivas Pandruvada <srinivas.pandruv...@linux.intel.com> > --- > Comment > I know this is close to merge window, so it can be differed to 5.9 > if this is a problem. > > Documentation/ABI/testing/sysfs-platform-dptf | 38 +++++++++ > drivers/acpi/dptf/dptf_power.c | 82 ++++++++++++++++--- > 2 files changed, 110 insertions(+), 10 deletions(-) > > diff --git a/Documentation/ABI/testing/sysfs-platform-dptf > b/Documentation/ABI/testing/sysfs-platform-dptf > index e83a9d208849..ef923958c750 100644 > --- a/Documentation/ABI/testing/sysfs-platform-dptf > +++ b/Documentation/ABI/testing/sysfs-platform-dptf > @@ -54,3 +54,41 @@ KernelVersion: v5.8 > Contact: linux-a...@vger.kernel.org > Description: > (WO) Confirm embedded controller about a prochot notification. > + > +What: > /sys/bus/platform/devices/INT3532:00/dptf_battery/max_platform_power_mw > +Date: June, 2020 > +KernelVersion: v5.8 > +Contact: linux-a...@vger.kernel.org > +Description: > + (RO) The maximum platform power that can be supported by the > battery in milli watts. > + > +What: > /sys/bus/platform/devices/INT3532:00/dptf_battery/max_steady_state_power_mw > +Date: June, 2020 > +KernelVersion: v5.8 > +Contact: linux-a...@vger.kernel.org > +Description: > + (RO) The maximum sustained power for battery in milli watts. > + > +What: > /sys/bus/platform/devices/INT3532:00/dptf_battery/high_freq_impedance_mohm > +Date: June, 2020 > +KernelVersion: v5.8 > +Contact: linux-a...@vger.kernel.org > +Description: > + (RO) The high frequency impedance value that can be obtained > from battery > + fuel gauge in milli Ohms. > + > +What: > /sys/bus/platform/devices/INT3532:00/dptf_battery/no_load_voltage_mv > +Date: June, 2020 > +KernelVersion: v5.8 > +Contact: linux-a...@vger.kernel.org > +Description: > + (RO) The no-load voltage that can be obtained from battery > fuel gauge in > + milli volts. > + > +What: > /sys/bus/platform/devices/INT3532:00/dptf_battery/current_discharge_capbility_ma > +Date: June, 2020 > +KernelVersion: v5.8 > +Contact: linux-a...@vger.kernel.org > +Description: > + (RO) The battery discharge current capability obtained from > battery fuel gauge in > + milli Amps. > diff --git a/drivers/acpi/dptf/dptf_power.c b/drivers/acpi/dptf/dptf_power.c > index abe99039af74..5fab7e350db8 100644 > --- a/drivers/acpi/dptf/dptf_power.c > +++ b/drivers/acpi/dptf/dptf_power.c > @@ -10,13 +10,19 @@ > #include <linux/platform_device.h> > > /* > - * Presentation of attributes which are defined for INT3407. They are: > + * Presentation of attributes which are defined for INT3407 and INT3532. > + * They are: > * PMAX : Maximum platform powe > * PSRC : Platform power source > * ARTG : Adapter rating > * CTYP : Charger type > * PBSS : Battery steady power > * PROP : Rest of worst case platform Power > + * PBSS : Power Battery Steady State > + * PBSS : Power Battery Steady State > + * RBHF : High Frequency Impedance > + * VBNL : Instantaneous No-Load Voltage > + * CMPP : Current Discharge Capability > */ > #define DPTF_POWER_SHOW(name, object) \ > static ssize_t name##_show(struct device *dev,\ > @@ -41,6 +47,10 @@ DPTF_POWER_SHOW(adapter_rating_mw, ARTG) > DPTF_POWER_SHOW(battery_steady_power_mw, PBSS) > DPTF_POWER_SHOW(charger_type, CTYP) > DPTF_POWER_SHOW(rest_of_platform_power_mw, PROP) > +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); > > static DEVICE_ATTR_RO(max_platform_power_mw); > static DEVICE_ATTR_RO(platform_power_source); > @@ -48,6 +58,10 @@ static DEVICE_ATTR_RO(adapter_rating_mw); > static DEVICE_ATTR_RO(battery_steady_power_mw); > static DEVICE_ATTR_RO(charger_type); > static DEVICE_ATTR_RO(rest_of_platform_power_mw); > +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); > > static ssize_t prochot_confirm_store(struct device *dev, > struct device_attribute *attr, > @@ -85,8 +99,38 @@ static const struct attribute_group > dptf_power_attribute_group = { > .name = "dptf_power" > }; > > +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 > #define POWER_STATE_CHANGED 0x81 > +#define STEADY_STATE_POWER_CHANGED 0x83 > #define POWER_PROP_CHANGE_EVENT 0x84 > +#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; > +} > > static void dptf_power_notify(acpi_handle handle, u32 event, void *data) > { > @@ -100,6 +144,15 @@ static void dptf_power_notify(acpi_handle handle, u32 > event, void *data) > case POWER_PROP_CHANGE_EVENT: > attr = "rest_of_platform_power_mw"; > break; > + 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; > default: > dev_err(&pdev->dev, "Unsupported event [0x%x]\n", event); > return; > @@ -109,13 +162,16 @@ static void dptf_power_notify(acpi_handle handle, u32 > event, void *data) > * Notify that an attribute is changed, so that user space can read > * again. > */ > - sysfs_notify(&pdev->dev.kobj, "dptf_power", attr); > + if (dptf_participant_type(handle) == 0x0CULL) > + sysfs_notify(&pdev->dev.kobj, "dptf_battery", attr); > + else > + sysfs_notify(&pdev->dev.kobj, "dptf_power", attr); > } > > static int dptf_power_add(struct platform_device *pdev) > { > + const struct attribute_group *attr_group; > struct acpi_device *acpi_dev; > - acpi_status status; > unsigned long long ptype; > int result; > > @@ -123,11 +179,12 @@ static int dptf_power_add(struct platform_device *pdev) > if (!acpi_dev) > return -ENODEV; > > - status = acpi_evaluate_integer(acpi_dev->handle, "PTYP", NULL, > &ptype); > - if (ACPI_FAILURE(status)) > - return -ENODEV; > - > - if (ptype != 0x11) > + 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 > return -ENODEV; > > result = acpi_install_notify_handler(acpi_dev->handle, > @@ -138,7 +195,7 @@ static int dptf_power_add(struct platform_device *pdev) > return result; > > result = sysfs_create_group(&pdev->dev.kobj, > - &dptf_power_attribute_group); > + attr_group); > if (result) { > acpi_remove_notify_handler(acpi_dev->handle, > ACPI_DEVICE_NOTIFY, > @@ -158,13 +215,18 @@ static int dptf_power_remove(struct platform_device > *pdev) > acpi_remove_notify_handler(acpi_dev->handle, > ACPI_DEVICE_NOTIFY, > dptf_power_notify); > - sysfs_remove_group(&pdev->dev.kobj, &dptf_power_attribute_group); > + > + 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); > > return 0; > } > > static const struct acpi_device_id int3407_device_ids[] = { > {"INT3407", 0}, > + {"INT3532", 0}, > {"INTC1047", 0}, > {"", 0}, > }; > --
Applied as 5.8 material under a slightly modified subject, thanks!