drivers/platform/x86/dasharo-acpi.c
Source file repositories/reference/linux-study-clean/drivers/platform/x86/dasharo-acpi.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/platform/x86/dasharo-acpi.c- Extension
.c- Size
- 9038 bytes
- Lines
- 361
- Domain
- Driver Families
- Bucket
- drivers/platform
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/acpi.hlinux/array_size.hlinux/hwmon.hlinux/module.hlinux/platform_device.hlinux/types.hlinux/units.h
Detected Declarations
struct dasharo_capabilitystruct dasharo_dataenum dasharo_featureenum dasharo_temperatureenum dasharo_fanfunction dasharo_get_feature_cap_countfunction dasharo_read_channelfunction dasharo_hwmon_readfunction dasharo_hwmon_read_stringfunction dasharo_hwmon_is_visiblefunction dasharo_fill_feature_capsfunction dasharo_probe
Annotated Snippet
struct dasharo_capability {
unsigned int group;
unsigned int index;
char name[16];
};
#define MAX_CAPS_PER_FEAT 24
struct dasharo_data {
struct platform_device *pdev;
int caps_found[DASHARO_FEATURE_MAX];
struct dasharo_capability capabilities[DASHARO_FEATURE_MAX][MAX_CAPS_PER_FEAT];
};
static int dasharo_get_feature_cap_count(struct dasharo_data *data, enum dasharo_feature feat, int cap)
{
struct acpi_object_list obj_list;
union acpi_object obj[2];
acpi_handle handle;
acpi_status status;
u64 count;
obj[0].type = ACPI_TYPE_INTEGER;
obj[0].integer.value = feat;
obj[1].type = ACPI_TYPE_INTEGER;
obj[1].integer.value = cap;
obj_list.count = 2;
obj_list.pointer = &obj[0];
handle = ACPI_HANDLE(&data->pdev->dev);
status = acpi_evaluate_integer(handle, "GFCP", &obj_list, &count);
if (ACPI_FAILURE(status))
return -ENODEV;
return count;
}
static int dasharo_read_channel(struct dasharo_data *data, char *method, enum dasharo_feature feat, int channel, long *value)
{
struct acpi_object_list obj_list;
union acpi_object obj[2];
acpi_handle handle;
acpi_status status;
u64 val;
if (feat >= ARRAY_SIZE(data->capabilities))
return -EINVAL;
if (channel >= data->caps_found[feat])
return -EINVAL;
obj[0].type = ACPI_TYPE_INTEGER;
obj[0].integer.value = data->capabilities[feat][channel].group;
obj[1].type = ACPI_TYPE_INTEGER;
obj[1].integer.value = data->capabilities[feat][channel].index;
obj_list.count = 2;
obj_list.pointer = &obj[0];
handle = ACPI_HANDLE(&data->pdev->dev);
status = acpi_evaluate_integer(handle, method, &obj_list, &val);
if (ACPI_FAILURE(status))
return -ENODEV;
*value = val;
return 0;
}
static int dasharo_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
u32 attr, int channel, long *val)
{
struct dasharo_data *data = dev_get_drvdata(dev);
long value;
int ret;
switch (type) {
case hwmon_temp:
ret = dasharo_read_channel(data, "GTMP", DASHARO_FEATURE_TEMPERATURE, channel, &value);
if (!ret)
*val = value * MILLIDEGREE_PER_DEGREE;
break;
case hwmon_fan:
ret = dasharo_read_channel(data, "GFTH", DASHARO_FEATURE_FAN_TACH, channel, &value);
if (!ret)
*val = value;
break;
case hwmon_pwm:
ret = dasharo_read_channel(data, "GFDC", DASHARO_FEATURE_FAN_PWM, channel, &value);
if (!ret)
*val = value;
break;
Annotation
- Immediate include surface: `linux/acpi.h`, `linux/array_size.h`, `linux/hwmon.h`, `linux/module.h`, `linux/platform_device.h`, `linux/types.h`, `linux/units.h`.
- Detected declarations: `struct dasharo_capability`, `struct dasharo_data`, `enum dasharo_feature`, `enum dasharo_temperature`, `enum dasharo_fan`, `function dasharo_get_feature_cap_count`, `function dasharo_read_channel`, `function dasharo_hwmon_read`, `function dasharo_hwmon_read_string`, `function dasharo_hwmon_is_visible`.
- Atlas domain: Driver Families / drivers/platform.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.