Hi Akshu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on asoc/for-next] [also build test ERROR on next-20180323] [cannot apply to v4.16-rc6] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Akshu-Agrawal/ASoC-AMD-Enable-Disab... base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next config: openrisc-allyesconfig (attached as .config) compiler: or1k-linux-gcc (GCC) 6.0.0 20160327 (experimental) reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=openrisc
All errors (new ones prefixed by >>):
sound/soc/amd/acp-da7219-max98357a.c:54:16: error: field 'acp_clks_hw' has incomplete type struct clk_hw acp_clks_hw; ^~~~~~~~~~~ In file included from include/linux/ioport.h:13:0, from include/linux/device.h:15, from include/sound/core.h:25, from sound/soc/amd/acp-da7219-max98357a.c:26: sound/soc/amd/acp-da7219-max98357a.c: In function 'acpd7219_clks_prepare': include/linux/kernel.h:931:32: error: dereferencing pointer to incomplete type 'struct clk_hw' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^~~~~~ include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert' bool __cond = !(condition); \ ^~~~~~~~~ include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:45:37: note: in expansion of macro 'compiletime_assert' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^~~~~~~~~~~~~~~~~~ include/linux/kernel.h:931:2: note: in expansion of macro 'BUILD_BUG_ON_MSG' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^~~~~~~~~~~~~~~~ include/linux/kernel.h:931:20: note: in expansion of macro '__same_type' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c:275:3: note: in expansion of macro 'container_of' container_of(hw, struct cz_clock, acp_clks_hw); ^~~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c: At top level: sound/soc/amd/acp-da7219-max98357a.c:312:14: error: variable 'acpd7219_clks_ops' has initializer but incomplete type const struct clk_ops acpd7219_clks_ops = { ^~~~~~~
sound/soc/amd/acp-da7219-max98357a.c:313:2: error: unknown field 'prepare' specified in initializer
.prepare = acpd7219_clks_prepare, ^ sound/soc/amd/acp-da7219-max98357a.c:313:13: warning: excess elements in struct initializer .prepare = acpd7219_clks_prepare, ^~~~~~~~~~~~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c:313:13: note: (near initialization for 'acpd7219_clks_ops')
sound/soc/amd/acp-da7219-max98357a.c:314:2: error: unknown field 'unprepare' specified in initializer
.unprepare = acpd7219_clks_unprepare, ^ sound/soc/amd/acp-da7219-max98357a.c:314:15: warning: excess elements in struct initializer .unprepare = acpd7219_clks_unprepare, ^~~~~~~~~~~~~~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c:314:15: note: (near initialization for 'acpd7219_clks_ops')
sound/soc/amd/acp-da7219-max98357a.c:315:2: error: unknown field 'is_enabled' specified in initializer
.is_enabled = acpd7219_clks_is_enabled, ^ sound/soc/amd/acp-da7219-max98357a.c:315:16: warning: excess elements in struct initializer .is_enabled = acpd7219_clks_is_enabled, ^~~~~~~~~~~~~~~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c:315:16: note: (near initialization for 'acpd7219_clks_ops') sound/soc/amd/acp-da7219-max98357a.c: In function 'register_acpd7219_clocks': sound/soc/amd/acp-da7219-max98357a.c:320:9: error: variable 'init' has initializer but incomplete type struct clk_init_data init = {}; ^~~~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c:320:23: error: storage size of 'init' isn't known struct clk_init_data init = {}; ^~~~
sound/soc/amd/acp-da7219-max98357a.c:339:13: error: implicit declaration of function 'devm_clk_register' [-Werror=implicit-function-declaration]
acp_clks = devm_clk_register(&dev, &cz_clock_obj->acp_clks_hw); ^~~~~~~~~~~~~~~~~ sound/soc/amd/acp-da7219-max98357a.c:320:23: warning: unused variable 'init' [-Wunused-variable] struct clk_init_data init = {}; ^~~~ sound/soc/amd/acp-da7219-max98357a.c: At top level: sound/soc/amd/acp-da7219-max98357a.c:312:22: error: storage size of 'acpd7219_clks_ops' isn't known const struct clk_ops acpd7219_clks_ops = { ^~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors
vim +/prepare +313 sound/soc/amd/acp-da7219-max98357a.c
270 271 static int acpd7219_clks_prepare(struct clk_hw *hw) 272 { 273 u32 reg_val; 274 struct cz_clock *cz_clock_obj =
275 container_of(hw, struct cz_clock, acp_clks_hw);
276 void __iomem *base = cz_clock_obj->res_base; 277 278 reg_val = readl(base + MISCCLKCNTL1); 279 reg_val &= ~(0x1 << OSCCLKENB); 280 writel(reg_val, base + MISCCLKCNTL1); 281 reg_val = readl(base + CLKDRVSTR2); 282 reg_val |= (0x1 << OSCOUT1CLK25MHZ); 283 writel(reg_val, base + CLKDRVSTR2); 284 285 return 0; 286 } 287 288 static void acpd7219_clks_unprepare(struct clk_hw *hw) 289 { 290 u32 reg_val; 291 struct cz_clock *cz_clock_obj = 292 container_of(hw, struct cz_clock, acp_clks_hw); 293 void __iomem *base = cz_clock_obj->res_base; 294 295 reg_val = readl(base + MISCCLKCNTL1); 296 reg_val |= (0x1 << OSCCLKENB); 297 writel(reg_val, base + MISCCLKCNTL1); 298 } 299 300 static int acpd7219_clks_is_enabled(struct clk_hw *hw) 301 { 302 u32 reg_val; 303 struct cz_clock *cz_clock_obj = 304 container_of(hw, struct cz_clock, acp_clks_hw); 305 void __iomem *base = cz_clock_obj->res_base; 306 307 reg_val = readl(base + MISCCLKCNTL1); 308 309 return !(reg_val & OSCCLKENB); 310 } 311 312 const struct clk_ops acpd7219_clks_ops = {
313 .prepare = acpd7219_clks_prepare, 314 .unprepare = acpd7219_clks_unprepare, 315 .is_enabled = acpd7219_clks_is_enabled,
316 }; 317 318 static int register_acpd7219_clocks(struct platform_device *pdev) 319 { 320 struct clk_init_data init = {}; 321 struct clk *acp_clks; 322 struct clk_lookup *acp_clks_lookup; 323 struct cz_clock *cz_clock_obj; 324 struct resource *res; 325 struct device dev = pdev->dev; 326 327 cz_clock_obj = kzalloc(sizeof(struct cz_clock), GFP_KERNEL); 328 if (!cz_clock_obj) 329 return -ENOMEM; 330 331 cz_clock_obj->acp_clks_name = "acpd7219-clks"; 332 333 init.parent_names = NULL; 334 init.num_parents = 0; 335 init.name = cz_clock_obj->acp_clks_name; 336 init.ops = &acpd7219_clks_ops; 337 cz_clock_obj->acp_clks_hw.init = &init; 338
339 acp_clks = devm_clk_register(&dev, &cz_clock_obj->acp_clks_hw);
340 if (IS_ERR(acp_clks)) 341 { 342 dev_err(&dev, "Failed to register DAI clocks: %ld\n", 343 PTR_ERR(acp_clks)); 344 return -EINVAL; 345 } 346 cz_clock_obj->acp_clks = acp_clks; 347 348 acp_clks_lookup = clkdev_create(acp_clks, cz_clock_obj->acp_clks_name, 349 "%s", dev_name(&dev)); 350 if (!acp_clks_lookup) 351 dev_warn(&dev, "Failed to create DAI clkdev"); 352 else 353 cz_clock_obj->acp_clks_lookup = acp_clks_lookup; 354 355 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 356 if (!res) { 357 dev_err(&pdev->dev, "Failed to get misc io resource.\n"); 358 return -EINVAL; 359 } 360 cz_clock_obj->res_base = devm_ioremap_nocache(&pdev->dev, res->start, 361 resource_size(res)); 362 if (!cz_clock_obj->res_base) 363 return -ENOMEM; 364 365 return 0; 366 } 367
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation