On Thu, Sep 05, 2019 at 09:38:07PM -0700, Dmitry Torokhov wrote:
> It is possible to store references to software nodes in the same fashion as
> other static properties, so that users do not need to define separate
> structures:
> 
> const struct software_node gpio_bank_b_node = {
>       .name = "B",
> };

Why this can't be __initconst?

> const struct property_entry simone_key_enter_props[] __initconst = {
>       PROPERTY_ENTRY_U32("linux,code", KEY_ENTER),
>       PROPERTY_ENTRY_STRING("label", "enter"),
>       PROPERTY_ENTRY_REF("gpios", &gpio_bank_b_node, 123, GPIO_ACTIVE_LOW),
>       { }
> };

So it's basically mimics the concept of phandle, right?

> +             ref_args = prop->is_array ?
> +                             &prop->pointer.ref[index] : &prop->value.ref;

Better to do if with explicit 'if ()' as it's done in the rest of the code.

        if (prop->is_array)
                ref_args = ...;
        else
                ref_args = ...;

> -     DEV_PROP_MAX,
> +     DEV_PROP_MAX

It seems it wasn't ever used, so, can be dropped completely.

> @@ -240,6 +255,7 @@ struct property_entry {
>                       const u32 *u32_data;
>                       const u64 *u64_data;
>                       const char * const *str;
> +                     const struct software_node_ref_args *ref;
>               } pointer;
>               union {
>                       u8 u8_data;
> @@ -247,6 +263,7 @@ struct property_entry {
>                       u32 u32_data;
>                       u64 u64_data;
>                       const char *str;
> +                     struct software_node_ref_args ref;

Hmm... This bumps the size of union a lot for each existing property_entry.
Is there any other way? Maybe we can keep pointer and allocate memory for it
when copying?

>               } value;

> +#define PROPERTY_ENTRY_REF_ARRAY(_name_, _val_)                      \
> +(struct property_entry) {                                    \
> +     .name = _name_,                                         \
> +     .length = ARRAY_SIZE(_val_) *                           \
> +                     sizeof(struct software_node_ref_args),  \

I would rather leave it on one line and shift right all \:s in this macro.

> +     .is_array = true,                                       \
> +     .type = DEV_PROP_REF,                                   \
> +     .pointer.ref = _val_,                                   \
> +}
> +

> +#define PROPERTY_ENTRY_REF(_name_, _ref_, ...)                       \
> +(struct property_entry) {                                    \
> +     .name = _name_,                                         \
> +     .length = sizeof(struct software_node_ref_args),        \
> +     .type = DEV_PROP_REF,                                   \
> +     .value.ref.node = _ref_,                                \

> +     .value.ref.nargs =                                      \
> +             ARRAY_SIZE(((u64[]){ 0, ##__VA_ARGS__ })) - 1,  \

Ditto.

> +     .value.ref.args = { __VA_ARGS__ },                      \
> +}

-- 
With Best Regards,
Andy Shevchenko


Reply via email to