Re: [alsa-devel][PATCH v1] ASoC: TSCS454: Add Support
From: kbuild test robot
Date: Wed May 30 2018 - 14:26:04 EST
Hi Steven,
I love your patch! Perhaps something to improve:
[auto build test WARNING on asoc/for-next]
[also build test WARNING on v4.17-rc7 next-20180530]
[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/Steven-Eckhoff/ASoC-TSCS454-Add-Support/20180531-001905
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
>> sound/soc/codecs/tscs454.c:2454:9: sparse: Using plain integer as NULL pointer
>> sound/soc/codecs/tscs454.c:2629:5: sparse: symbol 'tscs454_set_sysclk' was not declared. Should it be static?
sound/soc/codecs/tscs454.c:236:10: sparse: Initializer entry defined twice
sound/soc/codecs/tscs454.c:239:10: also defined here
Please review and possibly fold the followup patch.
vim +2454 sound/soc/codecs/tscs454.c
2348
2349 static struct snd_soc_dapm_widget const tscs454_dapm_widgets[] = {
2350 /* R_PLLCTL PG 0 ADDR 0x15 */
2351 SND_SOC_DAPM_SUPPLY("PLL 1 Power", R_PLLCTL, FB_PLLCTL_PU_PLL1, 0,
2352 pll_power_event,
2353 SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_PRE_PMD),
2354 SND_SOC_DAPM_SUPPLY("PLL 2 Power", R_PLLCTL, FB_PLLCTL_PU_PLL2, 0,
2355 pll_power_event,
2356 SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_PRE_PMD),
2357 /* R_I2SPINC0 PG 0 ADDR 0x22 */
2358 SND_SOC_DAPM_AIF_OUT("DAI 3 Out", "DAI 3 Capture", 0,
2359 R_I2SPINC0, FB_I2SPINC0_SDO3TRI, 1),
2360 SND_SOC_DAPM_AIF_OUT("DAI 2 Out", "DAI 2 Capture", 0,
2361 R_I2SPINC0, FB_I2SPINC0_SDO2TRI, 1),
2362 SND_SOC_DAPM_AIF_OUT("DAI 1 Out", "DAI 1 Capture", 0,
2363 R_I2SPINC0, FB_I2SPINC0_SDO1TRI, 1),
2364 /* R_PWRM0 PG 0 ADDR 0x33 */
2365 SND_SOC_DAPM_ADC("Input Processor Channel 3", NULL,
2366 R_PWRM0, FB_PWRM0_INPROC3PU, 0),
2367 SND_SOC_DAPM_ADC("Input Processor Channel 2", NULL,
2368 R_PWRM0, FB_PWRM0_INPROC2PU, 0),
2369 SND_SOC_DAPM_ADC("Input Processor Channel 1", NULL,
2370 R_PWRM0, FB_PWRM0_INPROC1PU, 0),
2371 SND_SOC_DAPM_ADC("Input Processor Channel 0", NULL,
2372 R_PWRM0, FB_PWRM0_INPROC0PU, 0),
2373 SND_SOC_DAPM_SUPPLY("Mic Bias 2",
2374 R_PWRM0, FB_PWRM0_MICB2PU, 0, NULL, 0),
2375 SND_SOC_DAPM_SUPPLY("Mic Bias 1", R_PWRM0,
2376 FB_PWRM0_MICB1PU, 0, NULL, 0),
2377 /* R_PWRM1 PG 0 ADDR 0x34 */
2378 SND_SOC_DAPM_SUPPLY("Sub Power", R_PWRM1, FB_PWRM1_SUBPU, 0, NULL, 0),
2379 SND_SOC_DAPM_SUPPLY("Headphone Left Power",
2380 R_PWRM1, FB_PWRM1_HPLPU, 0, NULL, 0),
2381 SND_SOC_DAPM_SUPPLY("Headphone Right Power",
2382 R_PWRM1, FB_PWRM1_HPRPU, 0, NULL, 0),
2383 SND_SOC_DAPM_SUPPLY("Speaker Left Power",
2384 R_PWRM1, FB_PWRM1_SPKLPU, 0, NULL, 0),
2385 SND_SOC_DAPM_SUPPLY("Speaker Right Power",
2386 R_PWRM1, FB_PWRM1_SPKRPU, 0, NULL, 0),
2387 SND_SOC_DAPM_SUPPLY("Differential Input 2 Power",
2388 R_PWRM1, FB_PWRM1_D2S2PU, 0, NULL, 0),
2389 SND_SOC_DAPM_SUPPLY("Differential Input 1 Power",
2390 R_PWRM1, FB_PWRM1_D2S1PU, 0, NULL, 0),
2391 /* R_PWRM2 PG 0 ADDR 0x35 */
2392 SND_SOC_DAPM_SUPPLY("DAI 3 Out Power",
2393 R_PWRM2, FB_PWRM2_I2S3OPU, 0, NULL, 0),
2394 SND_SOC_DAPM_SUPPLY("DAI 2 Out Power",
2395 R_PWRM2, FB_PWRM2_I2S2OPU, 0, NULL, 0),
2396 SND_SOC_DAPM_SUPPLY("DAI 1 Out Power",
2397 R_PWRM2, FB_PWRM2_I2S1OPU, 0, NULL, 0),
2398 SND_SOC_DAPM_SUPPLY("DAI 3 In Power",
2399 R_PWRM2, FB_PWRM2_I2S3IPU, 0, NULL, 0),
2400 SND_SOC_DAPM_SUPPLY("DAI 2 In Power",
2401 R_PWRM2, FB_PWRM2_I2S2IPU, 0, NULL, 0),
2402 SND_SOC_DAPM_SUPPLY("DAI 1 In Power",
2403 R_PWRM2, FB_PWRM2_I2S1IPU, 0, NULL, 0),
2404 /* R_PWRM3 PG 0 ADDR 0x36 */
2405 SND_SOC_DAPM_SUPPLY("Line Out Left Power",
2406 R_PWRM3, FB_PWRM3_LLINEPU, 0, NULL, 0),
2407 SND_SOC_DAPM_SUPPLY("Line Out Right Power",
2408 R_PWRM3, FB_PWRM3_RLINEPU, 0, NULL, 0),
2409 /* R_PWRM4 PG 0 ADDR 0x37 */
2410 SND_SOC_DAPM_DAC("Sub", NULL, R_PWRM4, FB_PWRM4_OPSUBPU, 0),
2411 SND_SOC_DAPM_DAC("DAC Left", NULL, R_PWRM4, FB_PWRM4_OPDACLPU, 0),
2412 SND_SOC_DAPM_DAC("DAC Right", NULL, R_PWRM4, FB_PWRM4_OPDACRPU, 0),
2413 SND_SOC_DAPM_DAC("ClassD Left", NULL, R_PWRM4, FB_PWRM4_OPSPKLPU, 0),
2414 SND_SOC_DAPM_DAC("ClassD Right", NULL, R_PWRM4, FB_PWRM4_OPSPKRPU, 0),
2415 /* R_AUDIOMUX1 PG 0 ADDR 0x3A */
2416 SND_SOC_DAPM_MUX("DAI 2 Out Mux", SND_SOC_NOPM, 0, 0,
2417 &dai2_mux_dapm_enum),
2418 SND_SOC_DAPM_MUX("DAI 1 Out Mux", SND_SOC_NOPM, 0, 0,
2419 &dai1_mux_dapm_enum),
2420 /* R_AUDIOMUX2 PG 0 ADDR 0x3B */
2421 SND_SOC_DAPM_MUX("DAC Mux", SND_SOC_NOPM, 0, 0,
2422 &dac_mux_dapm_enum),
2423 SND_SOC_DAPM_MUX("DAI 3 Out Mux", SND_SOC_NOPM, 0, 0,
2424 &dai3_mux_dapm_enum),
2425 /* R_AUDIOMUX3 PG 0 ADDR 0x3C */
2426 SND_SOC_DAPM_MUX("Sub Mux", SND_SOC_NOPM, 0, 0,
2427 &sub_mux_dapm_enum),
2428 SND_SOC_DAPM_MUX("Speaker Mux", SND_SOC_NOPM, 0, 0,
2429 &classd_mux_dapm_enum),
2430 /* R_HSDCTL1 PG 1 ADDR 0x01 */
2431 SND_SOC_DAPM_SUPPLY("GHS Detect Power", R_HSDCTL1,
2432 FB_HSDCTL1_CON_DET_PWD, 1, NULL, 0),
2433 /* R_CH0AIC PG 1 ADDR 0x06 */
2434 SND_SOC_DAPM_MUX("Input Boost Channel 0 Mux", SND_SOC_NOPM, 0, 0,
2435 &in_bst_mux_ch0_dapm_enum),
2436 SND_SOC_DAPM_MUX("ADC Channel 0 Mux", SND_SOC_NOPM, 0, 0,
2437 &adc_mux_ch0_dapm_enum),
2438 SND_SOC_DAPM_MUX("Input Processor Channel 0 Mux", SND_SOC_NOPM, 0, 0,
2439 &in_proc_mux_ch0_dapm_enum),
2440 /* R_CH1AIC PG 1 ADDR 0x07 */
2441 SND_SOC_DAPM_MUX("Input Boost Channel 1 Mux", SND_SOC_NOPM, 0, 0,
2442 &in_bst_mux_ch1_dapm_enum),
2443 SND_SOC_DAPM_MUX("ADC Channel 1 Mux", SND_SOC_NOPM, 0, 0,
2444 &adc_mux_ch1_dapm_enum),
2445 SND_SOC_DAPM_MUX("Input Processor Channel 1 Mux", SND_SOC_NOPM, 0, 0,
2446 &in_proc_mux_ch1_dapm_enum),
2447 /* Virtual */
2448 SND_SOC_DAPM_AIF_IN("DAI 3 In", "DAI 3 Playback", 0,
2449 SND_SOC_NOPM, 0, 0),
2450 SND_SOC_DAPM_AIF_IN("DAI 2 In", "DAI 2 Playback", 0,
2451 SND_SOC_NOPM, 0, 0),
2452 SND_SOC_DAPM_AIF_IN("DAI 1 In", "DAI 1 Playback", 0,
2453 SND_SOC_NOPM, 0, 0),
> 2454 SND_SOC_DAPM_SUPPLY("PLLs", SND_SOC_NOPM, 0, 0, 0, 0),
2455 SND_SOC_DAPM_OUTPUT("Sub Out"),
2456 SND_SOC_DAPM_OUTPUT("Headphone Left"),
2457 SND_SOC_DAPM_OUTPUT("Headphone Right"),
2458 SND_SOC_DAPM_OUTPUT("Speaker Left"),
2459 SND_SOC_DAPM_OUTPUT("Speaker Right"),
2460 SND_SOC_DAPM_OUTPUT("Line Out Left"),
2461 SND_SOC_DAPM_OUTPUT("Line Out Right"),
2462 SND_SOC_DAPM_INPUT("D2S 2"),
2463 SND_SOC_DAPM_INPUT("D2S 1"),
2464 SND_SOC_DAPM_INPUT("Line In 1 Left"),
2465 SND_SOC_DAPM_INPUT("Line In 1 Right"),
2466 SND_SOC_DAPM_INPUT("Line In 2 Left"),
2467 SND_SOC_DAPM_INPUT("Line In 2 Right"),
2468 SND_SOC_DAPM_INPUT("Line In 3 Left"),
2469 SND_SOC_DAPM_INPUT("Line In 3 Right"),
2470 SND_SOC_DAPM_INPUT("DMic 1"),
2471 SND_SOC_DAPM_INPUT("DMic 2"),
2472
2473 SND_SOC_DAPM_MUX("CH 0_1 Mux", SND_SOC_NOPM, 0, 0,
2474 &ch_0_1_mux_dapm_enum),
2475 SND_SOC_DAPM_MUX("CH 2_3 Mux", SND_SOC_NOPM, 0, 0,
2476 &ch_2_3_mux_dapm_enum),
2477 SND_SOC_DAPM_MUX("CH 4_5 Mux", SND_SOC_NOPM, 0, 0,
2478 &ch_4_5_mux_dapm_enum),
2479 };
2480
2481 static struct snd_soc_dapm_route const tscs454_intercon[] = {
2482 /* PLLs */
2483 {"PLLs", NULL, "PLL 1 Power", pll_connected},
2484 {"PLLs", NULL, "PLL 2 Power", pll_connected},
2485 /* Inputs */
2486 {"DAI 3 In", NULL, "DAI 3 In Power"},
2487 {"DAI 2 In", NULL, "DAI 2 In Power"},
2488 {"DAI 1 In", NULL, "DAI 1 In Power"},
2489 /* Outputs */
2490 {"DAI 3 Out", NULL, "DAI 3 Out Power"},
2491 {"DAI 2 Out", NULL, "DAI 2 Out Power"},
2492 {"DAI 1 Out", NULL, "DAI 1 Out Power"},
2493 /* Ch Muxing */
2494 {"CH 0_1 Mux", "DAI 1", "DAI 1 In"},
2495 {"CH 0_1 Mux", "TDM 0_1", "DAI 1 In"},
2496 {"CH 2_3 Mux", "DAI 2", "DAI 2 In"},
2497 {"CH 2_3 Mux", "TDM 2_3", "DAI 1 In"},
2498 {"CH 4_5 Mux", "DAI 3", "DAI 2 In"},
2499 {"CH 4_5 Mux", "TDM 4_5", "DAI 1 In"},
2500 /* In/Out Muxing */
2501 {"DAI 1 Out Mux", "CH 0_1", "CH 0_1 Mux"},
2502 {"DAI 1 Out Mux", "CH 2_3", "CH 2_3 Mux"},
2503 {"DAI 1 Out Mux", "CH 4_5", "CH 4_5 Mux"},
2504 {"DAI 2 Out Mux", "CH 0_1", "CH 0_1 Mux"},
2505 {"DAI 2 Out Mux", "CH 2_3", "CH 2_3 Mux"},
2506 {"DAI 2 Out Mux", "CH 4_5", "CH 4_5 Mux"},
2507 {"DAI 3 Out Mux", "CH 0_1", "CH 0_1 Mux"},
2508 {"DAI 3 Out Mux", "CH 2_3", "CH 2_3 Mux"},
2509 {"DAI 3 Out Mux", "CH 4_5", "CH 4_5 Mux"},
2510 /******************
2511 * Playback Paths *
2512 ******************/
2513 /* DAC Path */
2514 {"DAC Mux", "CH 4_5", "CH 4_5 Mux"},
2515 {"DAC Mux", "CH 2_3", "CH 2_3 Mux"},
2516 {"DAC Mux", "CH 0_1", "CH 0_1 Mux"},
2517 {"DAC Left", NULL, "DAC Mux"},
2518 {"DAC Right", NULL, "DAC Mux"},
2519 {"DAC Left", NULL, "PLLs"},
2520 {"DAC Right", NULL, "PLLs"},
2521 {"Headphone Left", NULL, "Headphone Left Power"},
2522 {"Headphone Right", NULL, "Headphone Right Power"},
2523 {"Headphone Left", NULL, "DAC Left"},
2524 {"Headphone Right", NULL, "DAC Right"},
2525 /* Line Out */
2526 {"Line Out Left", NULL, "Line Out Left Power"},
2527 {"Line Out Right", NULL, "Line Out Right Power"},
2528 {"Line Out Left", NULL, "DAC Left"},
2529 {"Line Out Right", NULL, "DAC Right"},
2530 /* ClassD Path */
2531 {"Speaker Mux", "CH 4_5", "CH 4_5 Mux"},
2532 {"Speaker Mux", "CH 2_3", "CH 2_3 Mux"},
2533 {"Speaker Mux", "CH 0_1", "CH 0_1 Mux"},
2534 {"ClassD Left", NULL, "Speaker Mux"},
2535 {"ClassD Right", NULL, "Speaker Mux"},
2536 {"ClassD Left", NULL, "PLLs"},
2537 {"ClassD Right", NULL, "PLLs"},
2538 {"Speaker Left", NULL, "Speaker Left Power"},
2539 {"Speaker Right", NULL, "Speaker Right Power"},
2540 {"Speaker Left", NULL, "ClassD Left"},
2541 {"Speaker Right", NULL, "ClassD Right"},
2542 /* Sub Path */
2543 {"Sub Mux", "CH 4", "CH 4_5 Mux"},
2544 {"Sub Mux", "CH 5", "CH 4_5 Mux"},
2545 {"Sub Mux", "CH 4 + 5", "CH 4_5 Mux"},
2546 {"Sub Mux", "CH 2", "CH 2_3 Mux"},
2547 {"Sub Mux", "CH 3", "CH 2_3 Mux"},
2548 {"Sub Mux", "CH 2 + 3", "CH 2_3 Mux"},
2549 {"Sub Mux", "CH 0", "CH 0_1 Mux"},
2550 {"Sub Mux", "CH 1", "CH 0_1 Mux"},
2551 {"Sub Mux", "CH 0 + 1", "CH 0_1 Mux"},
2552 {"Sub Mux", "ADC/DMic 1 Left", "Input Processor Channel 0"},
2553 {"Sub Mux", "ADC/DMic 1 Right", "Input Processor Channel 1"},
2554 {"Sub Mux", "ADC/DMic 1 Left Plus Right", "Input Processor Channel 0"},
2555 {"Sub Mux", "ADC/DMic 1 Left Plus Right", "Input Processor Channel 1"},
2556 {"Sub Mux", "DMic 2 Left", "DMic 2"},
2557 {"Sub Mux", "DMic 2 Right", "DMic 2"},
2558 {"Sub Mux", "DMic 2 Left Plus Right", "DMic 2"},
2559 {"Sub Mux", "ClassD Left", "ClassD Left"},
2560 {"Sub Mux", "ClassD Right", "ClassD Right"},
2561 {"Sub Mux", "ClassD Left Plus Right", "ClassD Left"},
2562 {"Sub Mux", "ClassD Left Plus Right", "ClassD Right"},
2563 {"Sub", NULL, "Sub Mux"},
2564 {"Sub", NULL, "PLLs"},
2565 {"Sub Out", NULL, "Sub Power"},
2566 {"Sub Out", NULL, "Sub"},
2567 /*****************
2568 * Capture Paths *
2569 *****************/
2570 {"Input Boost Channel 0 Mux", "Input 3", "Line In 3 Left"},
2571 {"Input Boost Channel 0 Mux", "Input 2", "Line In 2 Left"},
2572 {"Input Boost Channel 0 Mux", "Input 1", "Line In 1 Left"},
2573 {"Input Boost Channel 0 Mux", "D2S", "D2S 1"},
2574
2575 {"Input Boost Channel 1 Mux", "Input 3", "Line In 3 Right"},
2576 {"Input Boost Channel 1 Mux", "Input 2", "Line In 2 Right"},
2577 {"Input Boost Channel 1 Mux", "Input 1", "Line In 1 Right"},
2578 {"Input Boost Channel 1 Mux", "D2S", "D2S 2"},
2579
2580 {"ADC Channel 0 Mux", "Input 3 Boost Bypass", "Line In 3 Left"},
2581 {"ADC Channel 0 Mux", "Input 2 Boost Bypass", "Line In 2 Left"},
2582 {"ADC Channel 0 Mux", "Input 1 Boost Bypass", "Line In 1 Left"},
2583 {"ADC Channel 0 Mux", "Input Boost", "Input Boost Channel 0 Mux"},
2584
2585 {"ADC Channel 1 Mux", "Input 3 Boost Bypass", "Line In 3 Right"},
2586 {"ADC Channel 1 Mux", "Input 2 Boost Bypass", "Line In 2 Right"},
2587 {"ADC Channel 1 Mux", "Input 1 Boost Bypass", "Line In 1 Right"},
2588 {"ADC Channel 1 Mux", "Input Boost", "Input Boost Channel 1 Mux"},
2589
2590 {"Input Processor Channel 0 Mux", "ADC", "ADC Channel 0 Mux"},
2591 {"Input Processor Channel 0 Mux", "DMic", "DMic 1"},
2592
2593 {"Input Processor Channel 0", NULL, "PLLs"},
2594 {"Input Processor Channel 0", NULL, "Input Processor Channel 0 Mux"},
2595
2596 {"Input Processor Channel 1 Mux", "ADC", "ADC Channel 1 Mux"},
2597 {"Input Processor Channel 1 Mux", "DMic", "DMic 1"},
2598
2599 {"Input Processor Channel 1", NULL, "PLLs"},
2600 {"Input Processor Channel 1", NULL, "Input Processor Channel 1 Mux"},
2601
2602 {"Input Processor Channel 2", NULL, "PLLs"},
2603 {"Input Processor Channel 2", NULL, "DMic 2"},
2604
2605 {"Input Processor Channel 3", NULL, "PLLs"},
2606 {"Input Processor Channel 3", NULL, "DMic 2"},
2607
2608 {"DAI 1 Out Mux", "ADC/DMic 1", "Input Processor Channel 0"},
2609 {"DAI 1 Out Mux", "ADC/DMic 1", "Input Processor Channel 1"},
2610 {"DAI 1 Out Mux", "DMic 2", "Input Processor Channel 2"},
2611 {"DAI 1 Out Mux", "DMic 2", "Input Processor Channel 3"},
2612
2613 {"DAI 2 Out Mux", "ADC/DMic 1", "Input Processor Channel 0"},
2614 {"DAI 2 Out Mux", "ADC/DMic 1", "Input Processor Channel 1"},
2615 {"DAI 2 Out Mux", "DMic 2", "Input Processor Channel 2"},
2616 {"DAI 2 Out Mux", "DMic 2", "Input Processor Channel 3"},
2617
2618 {"DAI 3 Out Mux", "ADC/DMic 1", "Input Processor Channel 0"},
2619 {"DAI 3 Out Mux", "ADC/DMic 1", "Input Processor Channel 1"},
2620 {"DAI 3 Out Mux", "DMic 2", "Input Processor Channel 2"},
2621 {"DAI 3 Out Mux", "DMic 2", "Input Processor Channel 3"},
2622
2623 {"DAI 1 Out", NULL, "DAI 1 Out Mux"},
2624 {"DAI 2 Out", NULL, "DAI 2 Out Mux"},
2625 {"DAI 3 Out", NULL, "DAI 3 Out Mux"},
2626 };
2627
2628 /* This is used when BCLK is sourcing the PLLs */
> 2629 int tscs454_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq,
2630 int dir)
2631 {
2632 struct snd_soc_component *component = dai->component;
2633 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
2634 unsigned int val;
2635 int bclk_dai;
2636 int ret;
2637
2638 dev_dbg(component->dev, "%s(): freq = %u\n", __func__, freq);
2639
2640 ret = snd_soc_component_read(component, R_PLLCTL, &val);
2641 if (ret < 0)
2642 return ret;
2643
2644 bclk_dai = (val & FM_PLLCTL_BCLKSEL) >> FB_PLLCTL_BCLKSEL;
2645 if (bclk_dai != dai->id)
2646 return 0;
2647
2648 tscs454->bclk_freq = freq;
2649 return set_sysclk(component);
2650 }
2651
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation