Re: [PATCH v6 02/12] Driver core: Unified device properties interface for platform firmware
From: Grant Likely <hidden>
Date: 2014-11-04 15:51:26
Also in:
linux-acpi, lkml
On Tue, 21 Oct 2014 23:15:50 +0200 , "Rafael J. Wysocki" [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: "Rafael J. Wysocki" <redacted> Add a uniform interface by which device drivers can request device properties from the platform firmware by providing a property name and the corresponding data type. The purpose of it is to help to write portable code that won't depend on any particular platform firmware interface. The following general helper functions are added: device_property_present() device_property_read_u8() device_property_read_u16() device_property_read_u32() device_property_read_u64() device_property_read_string() device_property_read_u8_array() device_property_read_u16_array() device_property_read_u32_array() device_property_read_u64_array() device_property_read_string_array() The first one allows the caller to check if the given property is present. The next 5 of them allow single-valued properties of various types to be retrieved in a uniform way. The remaining 5 are for reading properties with multiple values (arrays of either numbers or strings). The interface covers both ACPI and Device Trees. This change set includes material from Mika Westerberg and Aaron Lu. Signed-off-by: Aaron Lu <redacted> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Rafael J. Wysocki <redacted> --- Changes from v5: - acpi_dev_prop_read() can now handle both list (package) and single-value properties (the latter are tried first for the last argument equal to 1). - There is a new macro to generate the bodies of device_property_read_u*_array(). - device_property_read_u*() are implemented using device_property_read_u*_array(). - device_property_read_bool() is a new static inline wrapper around device_property_present(). --- drivers/acpi/property.c | 178 +++++++++++++++++++++++++++++++++++ drivers/base/Makefile | 2 drivers/base/property.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/of/base.c | 106 ++++++++++++++++++--- include/linux/acpi.h | 32 ++++++ include/linux/of.h | 22 ++++ include/linux/property.h | 53 ++++++++++ 7 files changed, 609 insertions(+), 17 deletions(-) create mode 100644 drivers/base/property.c create mode 100644 include/linux/property.h Index: linux-pm/include/linux/property.h ===================================================================--- /dev/null +++ linux-pm/include/linux/property.h@@ -0,0 +1,53 @@ +/* + * property.h - Unified device property interface. + * + * Copyright (C) 2014, Intel Corporation + * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com> + * Mika Westerberg <mika.westerberg@linux.intel.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef _LINUX_PROPERTY_H_ +#define _LINUX_PROPERTY_H_ + +#include <linux/types.h> + +struct device; + +enum dev_prop_type { + DEV_PROP_U8, + DEV_PROP_U16, + DEV_PROP_U32, + DEV_PROP_U64, + DEV_PROP_STRING, + DEV_PROP_MAX, +}; + +bool device_property_present(struct device *dev, const char *propname); +int device_property_read_u8_array(struct device *dev, const char *propname, + u8 *val, size_t nval); +int device_property_read_u16_array(struct device *dev, const char *propname, + u16 *val, size_t nval); +int device_property_read_u32_array(struct device *dev, const char *propname, + u32 *val, size_t nval); +int device_property_read_u64_array(struct device *dev, const char *propname, + u64 *val, size_t nval); +int device_property_read_string_array(struct device *dev, const char *propname, + char **val, size_t nval);
I'm not sure if I asked this elsewhere. Can 'val' be made a const char **? g.