Skip to content

Commit

Permalink
of: base: add support to get machine model name
Browse files Browse the repository at this point in the history
Currently platforms/drivers needing to get the machine model name are
replicating the same snippet of code. In some case, the OF reference
counting is either missing or incorrect.

This patch adds support to read the machine model name either using
the "model" or the "compatible" property in the device tree root node
to the core OF/DT code.

This can be used to remove all the duplicate code snippets doing exactly
same thing later.

Cc: Rob Herring <[email protected]>
Cc: Frank Rowand <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Signed-off-by: Sudeep Holla <[email protected]>
Signed-off-by: Rob Herring <[email protected]>
  • Loading branch information
sudeep-holla authored and robherring committed Nov 18, 2016
1 parent 4fb373d commit e526979
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
32 changes: 32 additions & 0 deletions drivers/of/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,38 @@ int of_machine_is_compatible(const char *compat)
}
EXPORT_SYMBOL(of_machine_is_compatible);

/**
* of_machine_get_model_name - Find and read the model name or the compatible
* value for the machine.
* @model: pointer to null terminated return string, modified only if
* return value is 0.
*
* Returns a string containing either the model name or the compatible value
* of the machine if found, else return error.
*
* Search for a machine model name or the compatible if model name is missing
* in a device tree node and retrieve a null terminated string value (pointer
* to data, not a copy). Returns 0 on success, -EINVAL if root of the device
* tree is not found and other error returned by of_property_read_string on
* failure.
*/
int of_machine_get_model_name(const char **model)
{
int error;

if (!of_node_get(of_root))
return -EINVAL;

error = of_property_read_string(of_root, "model", model);
if (error)
error = of_property_read_string_index(of_root, "compatible",
0, model);
of_node_put(of_root);

return error;
}
EXPORT_SYMBOL(of_machine_get_model_name);

/**
* __of_device_is_available - check if a device is available for use
*
Expand Down
6 changes: 6 additions & 0 deletions include/linux/of.h
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ extern int of_alias_get_id(struct device_node *np, const char *stem);
extern int of_alias_get_highest_id(const char *stem);

extern int of_machine_is_compatible(const char *compat);
extern int of_machine_get_model_name(const char **model);

extern int of_add_property(struct device_node *np, struct property *prop);
extern int of_remove_property(struct device_node *np, struct property *prop);
Expand Down Expand Up @@ -788,6 +789,11 @@ static inline int of_machine_is_compatible(const char *compat)
return 0;
}

static inline int of_machine_get_model_name(const char **model)
{
return -EINVAL;
}

static inline bool of_console_check(const struct device_node *dn, const char *name, int index)
{
return false;
Expand Down

0 comments on commit e526979

Please sign in to comment.