Subject: Re: linux-next: build failure after merge of the pinctrl tree

From: Stephen Warren <[email-masked]>
Date: Tue, 03 Apr 2012 21:43:42 -0600

On 04/03/2012 08:44 PM, Stephen Rothwell wrote:
> Hi Linus,
> 
> After merging the pinctrl tree, today's linux-next build (powerpc 
> ppc64_defconfig) failed like this:
> 
> drivers/pinctrl/devicetree.c: In function 'dt_free_map': 
> drivers/pinctrl/devicetree.c:44:42: error: dereferencing pointer to
> incomplete type drivers/pinctrl/devicetree.c:45:6: error:
> dereferencing pointer to incomplete type 
> drivers/pinctrl/devicetree.c: In function 'dt_to_map_one_config': 
> drivers/pinctrl/devicetree.c:140:21: error: dereferencing pointer
> to incomplete type drivers/pinctrl/devicetree.c:141:10: error:
> dereferencing pointer to incomplete type 
> drivers/pinctrl/devicetree.c:146:11: error: dereferencing pointer
> to incomplete type

This doesn't repro for me with tegra_defconfig, which has both
CONFIG_PINCTRL and CONFIG_OF enabled.

I believe this happens because of the following in
drivers/pinctrl/Makefile:

obj-$(CONFIG_OF)		+= devicetree.o

On ppc64, CONFIG_OF is probably true, yet the rest of PINCTRL isn't
enabled, hence the headers that are included probably don't declare
all the types needed to compile that file.

In fact, the file shouldn't be compiled, since it's not needed if
!CONFIG_PINCTRL. So perhaps the Makefile should be more like:

ifeq ($(CONFIG_OF),y)
obj-$(CONFIG_PINCTRL)		+= devicetree.o
endif

(I see something similar to that in drivers/mmc/host/Makefile)

But, I notice the same construct in ./drivers/regulator/Makefile, and
I don't believe regulators are enabled for ppc64. Perhaps the
regulator headers always declare the types, so the issue doesn't come
up, although I daresay that perhaps the regulator file also shouldn't
be compiled when CONFIG_REGULATOR is off?