[U-Boot] [PATCH v2 01/50] dm: clk: Add support for decoding clocks from the device tree

Masahiro Yamada yamada.masahiro at socionext.com
Thu Jan 21 03:26:40 CET 2016


Hi Simon,


2016-01-21 0:24 GMT+09:00 Simon Glass <sjg at chromium.org>:
> Hi Masahiro,
>
> On 19 January 2016 at 22:38, Masahiro Yamada
> <yamada.masahiro at socionext.com> wrote:
>>
>> Hi Simon,
>>
>>
>> >>>
>> >>> +/**
>> >>> + * clk_get_by_index() - look up a clock referenced by a device
>> >>> + *
>> >>> + * Parse a device's 'clocks' list, returning information on the indexed clock,
>> >>> + * ensuring that it is activated.
>> >>> + *
>> >>> + * @dev:       Device containing the clock reference
>> >>> + * @index:     Clock index to return (0 = first)
>> >>> + * @clk_devp:  Returns clock device
>> >>> + * @return:    Peripheral ID for the device to control. This is the first
>> >>> + *             argument after the clock node phandle. If there is no arguemnt,
>> >>> + *             returns 0. Return -ve error code on any error
>> >>> + */
>> >>> +int clk_get_by_index(struct udevice *dev, int index, struct udevice **clk_devp);
>> >>>  #endif /* _CLK_H_ */
>> >>
>> >>
>> >> I want #ifdef in the header too, like mine
>> >> http://patchwork.ozlabs.org/patch/566812/
>> >
>> > I am not keen on that idea since it clutters up header files and we'll
>> > get a link error anyway if something is missing. Anyway, I've added
>> > it.
>>
>>
>>
>> I am afraid there is misunderstanding here.
>>
>> Please see my patch carefully.
>>
>>
>> What I mean is like this:
>>
>>
>>   #if  ...
>>       declaration of function prototype
>>   #else
>>       static inline empty function
>>   #endif
>>
>>
>> This is a common technique to avoid a link error.
>
> Do you think this function will be called when device tree is not
> enabled? I cannot see how it would have any meaning in that case. What
> is the purpose?


In order to avoid build errors.


I think this coding style is often used.


For example, you can see include/linux/clk.h  in Linux.


#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
struct clk *of_clk_get(struct device_node *np, int index);
struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
#else
static inline struct clk *of_clk_get(struct device_node *np, int index)
{
        return ERR_PTR(-ENOENT);
}
static inline struct clk *of_clk_get_by_name(struct device_node *np,
                                             const char *name)
{
        return ERR_PTR(-ENOENT);
}
#endif




If every driver entry in Kconfig specifies "depends on OF_CONTROL" correctly,
no link error would happen for this.

So, I leave this decision to you.
If you do not like #ifdef in header files, just rip it off.



-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list