Skip to content
Snippets Groups Projects
Commit f7d6fcf7 authored by Simon Glass's avatar Simon Glass
Browse files

dm: core: Add dev_read_enabled() to check if a device is enabled


This function allows a device's status to be read. This indicates whether
the device should be enabled or disabled.

Note: In normal operation disabled devices will not be present in the
driver-model tree.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Tested-by: default avatarMarcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-on: Beaver, Jetson-TK1
parent a4481012
No related branches found
No related tags found
No related merge requests found
...@@ -138,3 +138,14 @@ const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname, ...@@ -138,3 +138,14 @@ const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname,
{ {
return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz); return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz);
} }
int dev_read_enabled(struct udevice *dev)
{
ofnode node = dev_ofnode(dev);
if (ofnode_is_np(node))
return of_device_is_available(ofnode_to_np(node));
else
return fdtdec_get_is_enabled(gd->fdt_blob,
ofnode_to_offset(node));
}
...@@ -315,6 +315,19 @@ ofnode dev_read_next_subnode(ofnode node); ...@@ -315,6 +315,19 @@ ofnode dev_read_next_subnode(ofnode node);
const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname, const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname,
size_t sz); size_t sz);
/**
* dev_read_enabled() - check whether a node is enabled
*
* This looks for a 'status' property. If this exists, then returns 1 if
* the status is 'ok' and 0 otherwise. If there is no status property,
* it returns 1 on the assumption that anything mentioned should be enabled
* by default.
*
* @dev: device to examine
* @return integer value 0 (not enabled) or 1 (enabled)
*/
int dev_read_enabled(struct udevice *dev);
#else /* CONFIG_DM_DEV_READ_INLINE is enabled */ #else /* CONFIG_DM_DEV_READ_INLINE is enabled */
static inline int dev_read_u32_default(struct udevice *dev, static inline int dev_read_u32_default(struct udevice *dev,
...@@ -432,6 +445,11 @@ static inline const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, ...@@ -432,6 +445,11 @@ static inline const uint8_t *dev_read_u8_array_ptr(struct udevice *dev,
return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz); return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz);
} }
static inline int dev_read_enabled(struct udevice *dev)
{
return fdtdec_get_is_enabled(gd->fdt_blob, dev_of_offset(dev));
}
#endif /* CONFIG_DM_DEV_READ_INLINE */ #endif /* CONFIG_DM_DEV_READ_INLINE */
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment