root/drivers/acpi/dptf/dptf_power.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dptf_power_add
  2. dptf_power_remove

   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) \
  21 static 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 
  37 DPTF_POWER_SHOW(max_platform_power_mw, PMAX)
  38 DPTF_POWER_SHOW(platform_power_source, PSRC)
  39 DPTF_POWER_SHOW(adapter_rating_mw, ARTG)
  40 DPTF_POWER_SHOW(battery_steady_power_mw, PBSS)
  41 DPTF_POWER_SHOW(charger_type, CTYP)
  42 
  43 static DEVICE_ATTR_RO(max_platform_power_mw);
  44 static DEVICE_ATTR_RO(platform_power_source);
  45 static DEVICE_ATTR_RO(adapter_rating_mw);
  46 static DEVICE_ATTR_RO(battery_steady_power_mw);
  47 static DEVICE_ATTR_RO(charger_type);
  48 
  49 static 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 
  58 static const struct attribute_group dptf_power_attribute_group = {
  59         .attrs = dptf_power_attrs,
  60         .name = "dptf_power"
  61 };
  62 
  63 static 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 
  91 static 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 
  99 static const struct acpi_device_id int3407_device_ids[] = {
 100         {"INT3407", 0},
 101         {"", 0},
 102 };
 103 MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
 104 
 105 static struct platform_driver dptf_power_driver = {
 106         .probe = dptf_power_add,
 107         .remove = dptf_power_remove,
 108         .driver = {
 109                 .name = "DPTF Platform Power",
 110                 .acpi_match_table = int3407_device_ids,
 111         },
 112 };
 113 
 114 module_platform_driver(dptf_power_driver);
 115 
 116 MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
 117 MODULE_LICENSE("GPL v2");
 118 MODULE_DESCRIPTION("ACPI DPTF platform power driver");

/* [<][>][^][v][top][bottom][index][help] */