From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peng Fan Date: Fri, 6 Feb 2015 14:44:02 +0800 Subject: [U-Boot] [PATCH v3 1/4] dm: introduce dev_get_addr interface In-Reply-To: References: <1421838596-4176-1-git-send-email-Peng.Fan@freescale.com> <1421838596-4176-2-git-send-email-Peng.Fan@freescale.com> Message-ID: <54D462B2.3070509@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, Simon On 1/23/2015 5:25 AM, Simon Glass wrote: > Hi, > > On 21 January 2015 at 04:09, Peng Fan wrote: >> Abstracting dev_get_addr can improve drivers that want to >> get device's address. >> >> Signed-off-by: Peng Fan >> --- >> drivers/core/device.c | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) >> >> diff --git a/drivers/core/device.c b/drivers/core/device.c >> index 963b16f..0ba5c76 100644 >> --- a/drivers/core/device.c >> +++ b/drivers/core/device.c >> @@ -12,6 +12,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -390,3 +391,21 @@ ulong dev_get_of_data(struct udevice *dev) >> { >> return dev->of_id->data; >> } >> + >> +#ifdef CONFIG_OF_CONTROL >> +void *dev_get_addr(struct udevice *dev) > My approach so far has been to use a ulong for the device address > (e.g. in platform data) and only use a pointer when we know the type > (e.g. struct disp_ctlr *), typically in driver-private data. > > So do you think it would be better to return FDT_ADDR_T_NONE? Sorry for the long time delay to reply. Do you agree this way using ulong as the return type? " #ifdef CONFIG_OF_CONTROL unsigned long dev_get_addr(struct udevice *dev) { fdt_addr_t addr; addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg"); return addr; } #else unsigned long dev_get_addr(struct udevice *dev) { return FDT_ADDR_T_NONE; } #endif " Is it better to move this piece of code to include/dm/device.h and using static inline prototype? or put them still in driver/core/device.c? >> +{ >> + fdt_addr_t addr; >> + >> + addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg"); >> + if (addr == FDT_ADDR_T_NONE) >> + return NULL; >> + else >> + return (void *)addr; >> +} >> +#else >> +void *dev_get_addr(struct udevice *dev) >> +{ >> + return NULL; >> +} >> +#endif >> -- >> 1.8.4 >> >> > Regards, > Simon Thanks, Peng.