Subject: linux-next: build failure after merge of the sound-asoc tree

From: Stephen Rothwell <[email-masked]>
Date: Tue, 26 Mar 2019 13:33:49 +1100

Hi all,

After merging the sound-asoc tree, today's linux-next build (powerpc
allyesconfig) failed like this:

sound/soc/codecs/tlv320aic32x4-clk.c:19:16: error: field 'hw' has incomplete type
  struct clk_hw hw;
                ^~
In file included from include/linux/init.h:5,
                 from include/linux/io.h:22,
                 from include/linux/clk-provider.h:9,
                 from sound/soc/codecs/tlv320aic32x4-clk.c:10:
sound/soc/codecs/tlv320aic32x4-clk.c: In function 'clk_aic32x4_pll_prepare':
include/linux/kernel.h:979:32: error: dereferencing pointer to incomplete type 'struct clk_hw'
  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                                ^~~~~~
include/linux/compiler.h:328:9: note: in definition of macro '__compiletime_assert'
   if (!(condition))     \
         ^~~~~~~~~
include/linux/compiler.h:348:2: note: in expansion of macro '_compiletime_assert'
  _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
  ^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
 #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                     ^~~~~~~~~~~~~~~~~~
include/linux/kernel.h:979:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
  ^~~~~~~~~~~~~~~~
include/linux/kernel.h:979:20: note: in expansion of macro '__same_type'
  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                    ^~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:17:29: note: in expansion of macro 'container_of'
 #define to_clk_aic32x4(_hw) container_of(_hw, struct clk_aic32x4, hw)
                             ^~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:49:28: note: in expansion of macro 'to_clk_aic32x4'
  struct clk_aic32x4 *pll = to_clk_aic32x4(hw);
                            ^~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c: At top level:
sound/soc/codecs/tlv320aic32x4-clk.c:257:21: error: variable 'aic32x4_pll_ops' has initializer but incomplete type
 static const struct clk_ops aic32x4_pll_ops = {
                     ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:258:3: error: 'const struct clk_ops' has no member named 'prepare'
  .prepare = clk_aic32x4_pll_prepare,
   ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:258:13: warning: excess elements in struct initializer
  .prepare = clk_aic32x4_pll_prepare,
             ^~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:258:13: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:259:3: error: 'const struct clk_ops' has no member named 'unprepare'
  .unprepare = clk_aic32x4_pll_unprepare,
   ^~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:259:15: warning: excess elements in struct initializer
  .unprepare = clk_aic32x4_pll_unprepare,
               ^~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:259:15: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:260:3: error: 'const struct clk_ops' has no member named 'is_prepared'
  .is_prepared = clk_aic32x4_pll_is_prepared,
   ^~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:260:17: warning: excess elements in struct initializer
  .is_prepared = clk_aic32x4_pll_is_prepared,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:260:17: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:261:3: error: 'const struct clk_ops' has no member named 'recalc_rate'
  .recalc_rate = clk_aic32x4_pll_recalc_rate,
   ^~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:261:17: warning: excess elements in struct initializer
  .recalc_rate = clk_aic32x4_pll_recalc_rate,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:261:17: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:262:3: error: 'const struct clk_ops' has no member named 'round_rate'
  .round_rate = clk_aic32x4_pll_round_rate,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:262:16: warning: excess elements in struct initializer
  .round_rate = clk_aic32x4_pll_round_rate,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:262:16: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:263:3: error: 'const struct clk_ops' has no member named 'set_rate'
  .set_rate = clk_aic32x4_pll_set_rate,
   ^~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:263:14: warning: excess elements in struct initializer
  .set_rate = clk_aic32x4_pll_set_rate,
              ^~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:263:14: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:264:3: error: 'const struct clk_ops' has no member named 'set_parent'
  .set_parent = clk_aic32x4_pll_set_parent,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:264:16: warning: excess elements in struct initializer
  .set_parent = clk_aic32x4_pll_set_parent,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:264:16: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:265:3: error: 'const struct clk_ops' has no member named 'get_parent'
  .get_parent = clk_aic32x4_pll_get_parent,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:265:16: warning: excess elements in struct initializer
  .get_parent = clk_aic32x4_pll_get_parent,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:265:16: note: (near initialization for 'aic32x4_pll_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:287:21: error: variable 'aic32x4_codec_clkin_ops' has initializer but incomplete type
 static const struct clk_ops aic32x4_codec_clkin_ops = {
                     ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:288:3: error: 'const struct clk_ops' has no member named 'set_parent'
  .set_parent = clk_aic32x4_codec_clkin_set_parent,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:288:16: warning: excess elements in struct initializer
  .set_parent = clk_aic32x4_codec_clkin_set_parent,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:288:16: note: (near initialization for 'aic32x4_codec_clkin_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:289:3: error: 'const struct clk_ops' has no member named 'get_parent'
  .get_parent = clk_aic32x4_codec_clkin_get_parent,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:289:16: warning: excess elements in struct initializer
  .get_parent = clk_aic32x4_codec_clkin_get_parent,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:289:16: note: (near initialization for 'aic32x4_codec_clkin_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:346:21: error: variable 'aic32x4_div_ops' has initializer but incomplete type
 static const struct clk_ops aic32x4_div_ops = {
                     ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:347:3: error: 'const struct clk_ops' has no member named 'prepare'
  .prepare = clk_aic32x4_div_prepare,
   ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:347:13: warning: excess elements in struct initializer
  .prepare = clk_aic32x4_div_prepare,
             ^~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:347:13: note: (near initialization for 'aic32x4_div_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:348:3: error: 'const struct clk_ops' has no member named 'unprepare'
  .unprepare = clk_aic32x4_div_unprepare,
   ^~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:348:15: warning: excess elements in struct initializer
  .unprepare = clk_aic32x4_div_unprepare,
               ^~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:348:15: note: (near initialization for 'aic32x4_div_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:349:3: error: 'const struct clk_ops' has no member named 'set_rate'
  .set_rate = clk_aic32x4_div_set_rate,
   ^~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:349:14: warning: excess elements in struct initializer
  .set_rate = clk_aic32x4_div_set_rate,
              ^~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:349:14: note: (near initialization for 'aic32x4_div_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:350:3: error: 'const struct clk_ops' has no member named 'round_rate'
  .round_rate = clk_aic32x4_div_round_rate,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:350:16: warning: excess elements in struct initializer
  .round_rate = clk_aic32x4_div_round_rate,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:350:16: note: (near initialization for 'aic32x4_div_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:351:3: error: 'const struct clk_ops' has no member named 'recalc_rate'
  .recalc_rate = clk_aic32x4_div_recalc_rate,
   ^~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:351:17: warning: excess elements in struct initializer
  .recalc_rate = clk_aic32x4_div_recalc_rate,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:351:17: note: (near initialization for 'aic32x4_div_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:372:21: error: variable 'aic32x4_bdiv_ops' has initializer but incomplete type
 static const struct clk_ops aic32x4_bdiv_ops = {
                     ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:373:3: error: 'const struct clk_ops' has no member named 'prepare'
  .prepare = clk_aic32x4_div_prepare,
   ^~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:373:13: warning: excess elements in struct initializer
  .prepare = clk_aic32x4_div_prepare,
             ^~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:373:13: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:374:3: error: 'const struct clk_ops' has no member named 'unprepare'
  .unprepare = clk_aic32x4_div_unprepare,
   ^~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:374:15: warning: excess elements in struct initializer
  .unprepare = clk_aic32x4_div_unprepare,
               ^~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:374:15: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:375:3: error: 'const struct clk_ops' has no member named 'set_parent'
  .set_parent = clk_aic32x4_bdiv_set_parent,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:375:16: warning: excess elements in struct initializer
  .set_parent = clk_aic32x4_bdiv_set_parent,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:375:16: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:376:3: error: 'const struct clk_ops' has no member named 'get_parent'
  .get_parent = clk_aic32x4_bdiv_get_parent,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:376:16: warning: excess elements in struct initializer
  .get_parent = clk_aic32x4_bdiv_get_parent,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:376:16: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:377:3: error: 'const struct clk_ops' has no member named 'set_rate'
  .set_rate = clk_aic32x4_div_set_rate,
   ^~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:377:14: warning: excess elements in struct initializer
  .set_rate = clk_aic32x4_div_set_rate,
              ^~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:377:14: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:378:3: error: 'const struct clk_ops' has no member named 'round_rate'
  .round_rate = clk_aic32x4_div_round_rate,
   ^~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:378:16: warning: excess elements in struct initializer
  .round_rate = clk_aic32x4_div_round_rate,
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:378:16: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c:379:3: error: 'const struct clk_ops' has no member named 'recalc_rate'
  .recalc_rate = clk_aic32x4_div_recalc_rate,
   ^~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:379:17: warning: excess elements in struct initializer
  .recalc_rate = clk_aic32x4_div_recalc_rate,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:379:17: note: (near initialization for 'aic32x4_bdiv_ops')
sound/soc/codecs/tlv320aic32x4-clk.c: In function 'aic32x4_register_clk':
sound/soc/codecs/tlv320aic32x4-clk.c:440:23: error: storage size of 'init' isn't known
  struct clk_init_data init;
                       ^~~~
sound/soc/codecs/tlv320aic32x4-clk.c:460:9: error: implicit declaration of function 'devm_clk_register'; did you mean 'device_register'? [-Werror=implicit-function-declaration]
  return devm_clk_register(dev, &priv->hw);
         ^~~~~~~~~~~~~~~~~
         device_register
sound/soc/codecs/tlv320aic32x4-clk.c:440:23: warning: unused variable 'init' [-Wunused-variable]
  struct clk_init_data init;
                       ^~~~
sound/soc/codecs/tlv320aic32x4-clk.c: At top level:
sound/soc/codecs/tlv320aic32x4-clk.c:257:29: error: storage size of 'aic32x4_pll_ops' isn't known
 static const struct clk_ops aic32x4_pll_ops = {
                             ^~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:287:29: error: storage size of 'aic32x4_codec_clkin_ops' isn't known
 static const struct clk_ops aic32x4_codec_clkin_ops = {
                             ^~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:346:29: error: storage size of 'aic32x4_div_ops' isn't known
 static const struct clk_ops aic32x4_div_ops = {
                             ^~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c:372:29: error: storage size of 'aic32x4_bdiv_ops' isn't known
 static const struct clk_ops aic32x4_bdiv_ops = {
                             ^~~~~~~~~~~~~~~~
sound/soc/codecs/tlv320aic32x4-clk.c: In function 'aic32x4_register_clk':
sound/soc/codecs/tlv320aic32x4-clk.c:461:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^

Caused by commit

  514b044cba66 ("ASoC: tlv320aic32x4: Model PLL in CCF")

This build has

CONFIG_SND_SOC_TLV320AIC32X4=y
CONFIG_SND_SOC_TLV320AIC32X4_I2C=y
CONFIG_SND_SOC_TLV320AIC32X4_SPI=y

but CONFIG_COMMON_CLK is not set.  I assume tha bove get set due to
"select" statements and we get this warning:

WARNING: unmet direct dependencies detected for SND_SOC_TLV320AIC32X4
  Depends on [n]: SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && COMMON_CLK [=n]
  Selected by [y]:
  - SND_SOC_TLV320AIC32X4_I2C [=y] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && I2C [=y]
  - SND_SOC_TLV320AIC32X4_SPI [=y] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SPI_MASTER [=y]

I have disabled that driver for now using:

From: Stephen Rothwell <[email-masked]>
Date: Tue, 26 Mar 2019 13:18:03 +1100
Subject: [PATCH] disable the SND_SOC_TLV320AIC32X4 driver for now

Signed-off-by: Stephen Rothwell <[email-masked]>
---
 sound/soc/codecs/Kconfig | 5 +++--
 sound/soc/fsl/Kconfig    | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 6e99320c79b8..c225c81a7aef 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -180,8 +180,6 @@ config SND_SOC_ALL_CODECS
 	select SND_SOC_TLV320AIC23_SPI if SPI_MASTER
 	select SND_SOC_TLV320AIC26 if SPI_MASTER
 	select SND_SOC_TLV320AIC31XX if I2C
-	select SND_SOC_TLV320AIC32X4_I2C if I2C
-	select SND_SOC_TLV320AIC32X4_SPI if SPI_MASTER
 	select SND_SOC_TLV320AIC3X if I2C
 	select SND_SOC_TPA6130A2 if I2C
 	select SND_SOC_TLV320DAC33 if I2C
@@ -1105,15 +1103,18 @@ config SND_SOC_TLV320AIC31XX
 
 config SND_SOC_TLV320AIC32X4
 	tristate
+	depends on BROKEN
 	depends on COMMON_CLK
 
 config SND_SOC_TLV320AIC32X4_I2C
 	tristate "Texas Instruments TLV320AIC32x4 audio CODECs - I2C"
+	depends on BROKEN
 	depends on I2C
 	select SND_SOC_TLV320AIC32X4
 
 config SND_SOC_TLV320AIC32X4_SPI
 	tristate "Texas Instruments TLV320AIC32x4 audio CODECs - SPI"
+	depends on BROKEN
 	depends on SPI_MASTER
 	select SND_SOC_TLV320AIC32X4
 
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
index 7b1d9970be8b..d7b4f9d4d61d 100644
--- a/sound/soc/fsl/Kconfig
+++ b/sound/soc/fsl/Kconfig
@@ -207,6 +207,7 @@ config SND_MXC_SOC_WM1133_EV1
 
 config SND_SOC_MX27VIS_AIC32X4
 	tristate "SoC audio support for Visstrim M10 boards"
+	depends on BROKEN
 	depends on MACH_IMX27_VISSTRIM_M10 && I2C
 	select SND_SOC_TLV320AIC32X4
 	select SND_SOC_IMX_PCM_DMA
-- 
2.20.1

-- 
Cheers,
Stephen Rothwell