Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: SOF: Intel: add LunarLake support

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

This patchset first fixes a number of errors made in the hda-mlink
support, then adds Lunar Lake definitions. The main contribution is
the hda-dai changes where the HDaudio DMA is now used for SSP, DMIC
and SoundWire. In previous hardware the GPDMA (aka DesignWare) was
used and controlled by the audio firmware. The volume of code is
minimized with the abstraction added in previous kernel cycles.

Due to cross-dependencies between ASoC and SoundWire trees, the full
support for jack detection will be deferred to the next kernel
cycle. There's not much point to ask for a sync of the two trees to
support one patch for each tree - we are at -rc5 already.

+1264 -502
+90 -16
include/linux/pci_ids.h
··· 2644 2644 2645 2645 #define PCI_VENDOR_ID_INTEL 0x8086 2646 2646 #define PCI_DEVICE_ID_INTEL_EESSC 0x0008 2647 + #define PCI_DEVICE_ID_INTEL_HDA_CML_LP 0x02c8 2647 2648 #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320 2648 2649 #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321 2649 2650 #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329 ··· 2660 2659 #define PCI_DEVICE_ID_INTEL_82424 0x0483 2661 2660 #define PCI_DEVICE_ID_INTEL_82378 0x0484 2662 2661 #define PCI_DEVICE_ID_INTEL_82425 0x0486 2662 + #define PCI_DEVICE_ID_INTEL_HDA_CML_H 0x06c8 2663 2663 #define PCI_DEVICE_ID_INTEL_MRST_SD0 0x0807 2664 2664 #define PCI_DEVICE_ID_INTEL_MRST_SD1 0x0808 2665 + #define PCI_DEVICE_ID_INTEL_HDA_OAKTRAIL 0x080a 2665 2666 #define PCI_DEVICE_ID_INTEL_MFD_SD 0x0820 2666 2667 #define PCI_DEVICE_ID_INTEL_MFD_SDIO1 0x0821 2667 2668 #define PCI_DEVICE_ID_INTEL_MFD_SDIO2 0x0822 ··· 2673 2670 #define PCI_DEVICE_ID_INTEL_QUARK_X1000_ILB 0x095e 2674 2671 #define PCI_DEVICE_ID_INTEL_I960 0x0960 2675 2672 #define PCI_DEVICE_ID_INTEL_I960RM 0x0962 2673 + #define PCI_DEVICE_ID_INTEL_HDA_HSW_0 0x0a0c 2674 + #define PCI_DEVICE_ID_INTEL_HDA_HSW_2 0x0c0c 2676 2675 #define PCI_DEVICE_ID_INTEL_CENTERTON_ILB 0x0c60 2676 + #define PCI_DEVICE_ID_INTEL_HDA_HSW_3 0x0d0c 2677 + #define PCI_DEVICE_ID_INTEL_HDA_BYT 0x0f04 2678 + #define PCI_DEVICE_ID_INTEL_SST_BYT 0x0f28 2677 2679 #define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062 2678 2680 #define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085 2679 2681 #define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108f 2680 2682 #define PCI_DEVICE_ID_INTEL_82815_MC 0x1130 2681 2683 #define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132 2684 + #define PCI_DEVICE_ID_INTEL_SST_TNG 0x119a 2682 2685 #define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221 2683 - #define PCI_DEVICE_ID_INTEL_7505_0 0x2550 2684 - #define PCI_DEVICE_ID_INTEL_7205_0 0x255d 2685 2686 #define PCI_DEVICE_ID_INTEL_82437 0x122d 2686 2687 #define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e 2687 2688 #define PCI_DEVICE_ID_INTEL_82371FB_1 0x1230 ··· 2711 2704 #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_BRIDGE 0x1576 2712 2705 #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_NHI 0x1577 2713 2706 #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_BRIDGE 0x1578 2707 + #define PCI_DEVICE_ID_INTEL_HDA_BDW 0x160c 2714 2708 #define PCI_DEVICE_ID_INTEL_80960_RP 0x1960 2715 2709 #define PCI_DEVICE_ID_INTEL_QAT_C3XXX 0x19e2 2716 2710 #define PCI_DEVICE_ID_INTEL_QAT_C3XXX_VF 0x19e3 2717 2711 #define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 2718 2712 #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 2719 2713 #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 2714 + #define PCI_DEVICE_ID_INTEL_HDA_CPT 0x1c20 2720 2715 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41 2721 2716 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f 2717 + #define PCI_DEVICE_ID_INTEL_HDA_PBG 0x1d20 2722 2718 #define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40 2723 2719 #define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41 2720 + #define PCI_DEVICE_ID_INTEL_HDA_PPT 0x1e20 2724 2721 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI 0x1e31 2725 2722 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN 0x1e40 2726 2723 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX 0x1e5f 2727 2724 #define PCI_DEVICE_ID_INTEL_VMD_201D 0x201d 2725 + #define PCI_DEVICE_ID_INTEL_HDA_BSW 0x2284 2726 + #define PCI_DEVICE_ID_INTEL_SST_BSW 0x22a8 2728 2727 #define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310 2729 2728 #define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f 2730 2729 #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 ··· 2785 2772 #define PCI_DEVICE_ID_INTEL_82850_HB 0x2530 2786 2773 #define PCI_DEVICE_ID_INTEL_82860_HB 0x2531 2787 2774 #define PCI_DEVICE_ID_INTEL_E7501_MCH 0x254c 2775 + #define PCI_DEVICE_ID_INTEL_7505_0 0x2550 2776 + #define PCI_DEVICE_ID_INTEL_7205_0 0x255d 2788 2777 #define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560 2789 2778 #define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562 2790 2779 #define PCI_DEVICE_ID_INTEL_82865_HB 0x2570 ··· 2808 2793 #define PCI_DEVICE_ID_INTEL_ICH6_0 0x2640 2809 2794 #define PCI_DEVICE_ID_INTEL_ICH6_1 0x2641 2810 2795 #define PCI_DEVICE_ID_INTEL_ICH6_2 0x2642 2796 + #define PCI_DEVICE_ID_INTEL_HDA_ICH6 0x2668 2811 2797 #define PCI_DEVICE_ID_INTEL_ICH6_16 0x266a 2812 2798 #define PCI_DEVICE_ID_INTEL_ICH6_17 0x266d 2813 2799 #define PCI_DEVICE_ID_INTEL_ICH6_18 0x266e 2814 2800 #define PCI_DEVICE_ID_INTEL_ICH6_19 0x266f 2815 2801 #define PCI_DEVICE_ID_INTEL_ESB2_0 0x2670 2816 2802 #define PCI_DEVICE_ID_INTEL_ESB2_14 0x2698 2803 + #define PCI_DEVICE_ID_INTEL_HDA_ESB2 0x269a 2817 2804 #define PCI_DEVICE_ID_INTEL_ESB2_17 0x269b 2818 2805 #define PCI_DEVICE_ID_INTEL_ESB2_18 0x269e 2819 2806 #define PCI_DEVICE_ID_INTEL_82945G_HB 0x2770 ··· 2823 2806 #define PCI_DEVICE_ID_INTEL_3000_HB 0x2778 2824 2807 #define PCI_DEVICE_ID_INTEL_82945GM_HB 0x27a0 2825 2808 #define PCI_DEVICE_ID_INTEL_82945GM_IG 0x27a2 2809 + #define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0 2826 2810 #define PCI_DEVICE_ID_INTEL_ICH7_0 0x27b8 2827 2811 #define PCI_DEVICE_ID_INTEL_ICH7_1 0x27b9 2828 - #define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0 2829 2812 #define PCI_DEVICE_ID_INTEL_TGP_LPC 0x27bc 2830 2813 #define PCI_DEVICE_ID_INTEL_ICH7_31 0x27bd 2814 + #define PCI_DEVICE_ID_INTEL_HDA_ICH7 0x27d8 2831 2815 #define PCI_DEVICE_ID_INTEL_ICH7_17 0x27da 2832 2816 #define PCI_DEVICE_ID_INTEL_ICH7_19 0x27dd 2833 2817 #define PCI_DEVICE_ID_INTEL_ICH7_20 0x27de ··· 2839 2821 #define PCI_DEVICE_ID_INTEL_ICH8_3 0x2814 2840 2822 #define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815 2841 2823 #define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e 2824 + #define PCI_DEVICE_ID_INTEL_HDA_ICH8 0x284b 2842 2825 #define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850 2843 2826 #define PCI_DEVICE_ID_INTEL_VMD_28C0 0x28c0 2844 2827 #define PCI_DEVICE_ID_INTEL_ICH9_0 0x2910 2845 - #define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917 2846 2828 #define PCI_DEVICE_ID_INTEL_ICH9_2 0x2912 2847 2829 #define PCI_DEVICE_ID_INTEL_ICH9_3 0x2913 2848 2830 #define PCI_DEVICE_ID_INTEL_ICH9_4 0x2914 2831 + #define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916 2832 + #define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917 2833 + #define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918 2849 2834 #define PCI_DEVICE_ID_INTEL_ICH9_5 0x2919 2850 2835 #define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930 2851 - #define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916 2852 - #define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918 2836 + #define PCI_DEVICE_ID_INTEL_HDA_ICH9_0 0x293e 2837 + #define PCI_DEVICE_ID_INTEL_HDA_ICH9_1 0x293f 2853 2838 #define PCI_DEVICE_ID_INTEL_I7_MCR 0x2c18 2854 2839 #define PCI_DEVICE_ID_INTEL_I7_MC_TAD 0x2c19 2855 2840 #define PCI_DEVICE_ID_INTEL_I7_MC_RAS 0x2c1a ··· 2869 2848 #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR 0x2c31 2870 2849 #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32 2871 2850 #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33 2872 - #define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41 2873 2851 #define PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT 0x2c40 2852 + #define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41 2874 2853 #define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE 0x2c50 2875 2854 #define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT 0x2c51 2876 2855 #define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_REV2 0x2c70 ··· 2904 2883 #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_ADDR_REV2 0x2db1 2905 2884 #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_RANK_REV2 0x2db2 2906 2885 #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_TC_REV2 0x2db3 2886 + #define PCI_DEVICE_ID_INTEL_HDA_GML 0x3198 2907 2887 #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 2908 2888 #define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429 2909 2889 #define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a ··· 2915 2893 #define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431 2916 2894 #define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432 2917 2895 #define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433 2896 + #define PCI_DEVICE_ID_INTEL_HDA_ICL_LP 0x34c8 2918 2897 #define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 2919 2898 #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 2920 - #define PCI_DEVICE_ID_INTEL_82854_HB 0x358c 2921 - #define PCI_DEVICE_ID_INTEL_82854_IG 0x358e 2922 2899 #define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580 2923 2900 #define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582 2901 + #define PCI_DEVICE_ID_INTEL_82854_HB 0x358c 2902 + #define PCI_DEVICE_ID_INTEL_82854_IG 0x358e 2924 2903 #define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590 2925 2904 #define PCI_DEVICE_ID_INTEL_E7320_MCH 0x3592 2926 2905 #define PCI_DEVICE_ID_INTEL_MCH_PA 0x3595 ··· 2931 2908 #define PCI_DEVICE_ID_INTEL_MCH_PC 0x3599 2932 2909 #define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a 2933 2910 #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e 2911 + #define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b 2912 + #define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c 2934 2913 #define PCI_DEVICE_ID_INTEL_I7300_MCH_ERR 0x360c 2935 2914 #define PCI_DEVICE_ID_INTEL_I7300_MCH_FB0 0x360f 2936 2915 #define PCI_DEVICE_ID_INTEL_I7300_MCH_FB1 0x3610 2937 - #define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b 2938 - #define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c 2939 2916 #define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710 2940 2917 #define PCI_DEVICE_ID_INTEL_IOAT_JSF1 0x3711 2941 2918 #define PCI_DEVICE_ID_INTEL_IOAT_JSF2 0x3712 ··· 2948 2925 #define PCI_DEVICE_ID_INTEL_IOAT_JSF9 0x3719 2949 2926 #define PCI_DEVICE_ID_INTEL_QAT_C62X 0x37c8 2950 2927 #define PCI_DEVICE_ID_INTEL_QAT_C62X_VF 0x37c9 2928 + #define PCI_DEVICE_ID_INTEL_HDA_ICL_N 0x38c8 2951 2929 #define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14 2952 2930 #define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16 2953 2931 #define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18 2954 2932 #define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a 2955 2933 #define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30 2934 + #define PCI_DEVICE_ID_INTEL_HDA_ICH10_0 0x3a3e 2956 2935 #define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 2936 + #define PCI_DEVICE_ID_INTEL_HDA_ICH10_1 0x3a6e 2957 2937 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 2958 2938 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f 2939 + #define PCI_DEVICE_ID_INTEL_HDA_5_3400_SERIES_0 0x3b56 2940 + #define PCI_DEVICE_ID_INTEL_HDA_5_3400_SERIES_1 0x3b57 2959 2941 #define PCI_DEVICE_ID_INTEL_IOAT_SNB0 0x3c20 2960 2942 #define PCI_DEVICE_ID_INTEL_IOAT_SNB1 0x3c21 2961 2943 #define PCI_DEVICE_ID_INTEL_IOAT_SNB2 0x3c22 ··· 2971 2943 #define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27 2972 2944 #define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e 2973 2945 #define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f 2974 - #define PCI_DEVICE_ID_INTEL_UNC_HA 0x3c46 2975 - #define PCI_DEVICE_ID_INTEL_UNC_IMC0 0x3cb0 2976 - #define PCI_DEVICE_ID_INTEL_UNC_IMC1 0x3cb1 2977 - #define PCI_DEVICE_ID_INTEL_UNC_IMC2 0x3cb4 2978 - #define PCI_DEVICE_ID_INTEL_UNC_IMC3 0x3cb5 2979 2946 #define PCI_DEVICE_ID_INTEL_UNC_QPI0 0x3c41 2980 2947 #define PCI_DEVICE_ID_INTEL_UNC_QPI1 0x3c42 2981 2948 #define PCI_DEVICE_ID_INTEL_UNC_R2PCIE 0x3c43 2982 2949 #define PCI_DEVICE_ID_INTEL_UNC_R3QPI0 0x3c44 2983 2950 #define PCI_DEVICE_ID_INTEL_UNC_R3QPI1 0x3c45 2951 + #define PCI_DEVICE_ID_INTEL_UNC_HA 0x3c46 2984 2952 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_RAS 0x3c71 /* 15.1 */ 2985 2953 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_ERR0 0x3c72 /* 16.2 */ 2986 2954 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_ERR1 0x3c73 /* 16.3 */ ··· 2988 2964 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD1 0x3cab /* 15.3 */ 2989 2965 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD2 0x3cac /* 15.4 */ 2990 2966 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD3 0x3cad /* 15.5 */ 2967 + #define PCI_DEVICE_ID_INTEL_UNC_IMC0 0x3cb0 2968 + #define PCI_DEVICE_ID_INTEL_UNC_IMC1 0x3cb1 2969 + #define PCI_DEVICE_ID_INTEL_UNC_IMC2 0x3cb4 2970 + #define PCI_DEVICE_ID_INTEL_UNC_IMC3 0x3cb5 2991 2971 #define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_DDRIO 0x3cb8 /* 17.0 */ 2992 2972 #define PCI_DEVICE_ID_INTEL_JAKETOWN_UBOX 0x3ce0 2993 2973 #define PCI_DEVICE_ID_INTEL_SBRIDGE_SAD0 0x3cf4 /* 12.6 */ 2994 2974 #define PCI_DEVICE_ID_INTEL_SBRIDGE_BR 0x3cf5 /* 13.6 */ 2995 2975 #define PCI_DEVICE_ID_INTEL_SBRIDGE_SAD1 0x3cf6 /* 12.7 */ 2976 + #define PCI_DEVICE_ID_INTEL_HDA_ICL_H 0x3dc8 2996 2977 #define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f 2997 2978 #define PCI_DEVICE_ID_INTEL_5400_ERR 0x4030 2998 2979 #define PCI_DEVICE_ID_INTEL_5400_FBD0 0x4035 2999 2980 #define PCI_DEVICE_ID_INTEL_5400_FBD1 0x4036 2981 + #define PCI_DEVICE_ID_INTEL_HDA_TGL_H 0x43c8 2982 + #define PCI_DEVICE_ID_INTEL_HDA_DG1 0x490d 2983 + #define PCI_DEVICE_ID_INTEL_HDA_EHL_0 0x4b55 2984 + #define PCI_DEVICE_ID_INTEL_HDA_EHL_3 0x4b58 2985 + #define PCI_DEVICE_ID_INTEL_HDA_JSL_N 0x4dc8 2986 + #define PCI_DEVICE_ID_INTEL_HDA_DG2_0 0x4f90 2987 + #define PCI_DEVICE_ID_INTEL_HDA_DG2_1 0x4f91 2988 + #define PCI_DEVICE_ID_INTEL_HDA_DG2_2 0x4f92 3000 2989 #define PCI_DEVICE_ID_INTEL_EP80579_0 0x5031 3001 2990 #define PCI_DEVICE_ID_INTEL_EP80579_1 0x5032 2991 + #define PCI_DEVICE_ID_INTEL_HDA_ADL_P 0x51c8 2992 + #define PCI_DEVICE_ID_INTEL_HDA_ADL_PS 0x51c9 2993 + #define PCI_DEVICE_ID_INTEL_HDA_RPL_P_0 0x51ca 2994 + #define PCI_DEVICE_ID_INTEL_HDA_RPL_P_1 0x51cb 2995 + #define PCI_DEVICE_ID_INTEL_HDA_ADL_M 0x51cc 2996 + #define PCI_DEVICE_ID_INTEL_HDA_ADL_PX 0x51cd 2997 + #define PCI_DEVICE_ID_INTEL_HDA_RPL_M 0x51ce 2998 + #define PCI_DEVICE_ID_INTEL_HDA_RPL_PX 0x51cf 2999 + #define PCI_DEVICE_ID_INTEL_HDA_ADL_N 0x54c8 3000 + #define PCI_DEVICE_ID_INTEL_HDA_APL 0x5a98 3002 3001 #define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 3003 3002 #define PCI_DEVICE_ID_INTEL_5100_19 0x65f3 3004 3003 #define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 ··· 3055 3008 #define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0 3056 3009 #define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2 3057 3010 #define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601 3011 + #define PCI_DEVICE_ID_INTEL_HDA_RPL_S 0x7a50 3012 + #define PCI_DEVICE_ID_INTEL_HDA_ADL_S 0x7ad0 3013 + #define PCI_DEVICE_ID_INTEL_HDA_MTL 0x7e28 3014 + #define PCI_DEVICE_ID_INTEL_HDA_ARL_S 0x7f50 3058 3015 #define PCI_DEVICE_ID_INTEL_SCH_LPC 0x8119 3059 3016 #define PCI_DEVICE_ID_INTEL_SCH_IDE 0x811a 3017 + #define PCI_DEVICE_ID_INTEL_HDA_POULSBO 0x811b 3060 3018 #define PCI_DEVICE_ID_INTEL_E6XX_CU 0x8183 3061 3019 #define PCI_DEVICE_ID_INTEL_ITC_LPC 0x8186 3062 3020 #define PCI_DEVICE_ID_INTEL_82454GX 0x84c4 ··· 3070 3018 #define PCI_DEVICE_ID_INTEL_82454NX 0x84cb 3071 3019 #define PCI_DEVICE_ID_INTEL_84460GX 0x84ea 3072 3020 #define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500 3021 + #define PCI_DEVICE_ID_INTEL_HDA_LPT 0x8c20 3022 + #define PCI_DEVICE_ID_INTEL_HDA_9_SERIES 0x8ca0 3023 + #define PCI_DEVICE_ID_INTEL_HDA_WBG_0 0x8d20 3024 + #define PCI_DEVICE_ID_INTEL_HDA_WBG_1 0x8d21 3073 3025 #define PCI_DEVICE_ID_INTEL_IXP2800 0x9004 3026 + #define PCI_DEVICE_ID_INTEL_HDA_LKF 0x98c8 3074 3027 #define PCI_DEVICE_ID_INTEL_VMD_9A0B 0x9a0b 3028 + #define PCI_DEVICE_ID_INTEL_HDA_LPT_LP_0 0x9c20 3029 + #define PCI_DEVICE_ID_INTEL_HDA_LPT_LP_1 0x9c21 3030 + #define PCI_DEVICE_ID_INTEL_HDA_WPT_LP 0x9ca0 3031 + #define PCI_DEVICE_ID_INTEL_HDA_SKL_LP 0x9d70 3032 + #define PCI_DEVICE_ID_INTEL_HDA_KBL_LP 0x9d71 3033 + #define PCI_DEVICE_ID_INTEL_HDA_CNL_LP 0x9dc8 3034 + #define PCI_DEVICE_ID_INTEL_HDA_TGL_LP 0xa0c8 3035 + #define PCI_DEVICE_ID_INTEL_HDA_SKL 0xa170 3036 + #define PCI_DEVICE_ID_INTEL_HDA_KBL 0xa171 3037 + #define PCI_DEVICE_ID_INTEL_HDA_LBG_0 0xa1f0 3038 + #define PCI_DEVICE_ID_INTEL_HDA_LBG_1 0xa270 3039 + #define PCI_DEVICE_ID_INTEL_HDA_KBL_H 0xa2f0 3040 + #define PCI_DEVICE_ID_INTEL_HDA_CNL_H 0xa348 3041 + #define PCI_DEVICE_ID_INTEL_HDA_CML_S 0xa3f0 3042 + #define PCI_DEVICE_ID_INTEL_HDA_LNL_P 0xa828 3075 3043 #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 3044 + #define PCI_DEVICE_ID_INTEL_HDA_CML_R 0xf0c8 3045 + #define PCI_DEVICE_ID_INTEL_HDA_RKL_S 0xf1c8 3076 3046 3077 3047 #define PCI_VENDOR_ID_WANGXUN 0x8088 3078 3048
+4
include/sound/hda-mlink.h
··· 42 42 int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink); 43 43 int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink); 44 44 45 + int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid); 45 46 int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num); 46 47 47 48 int hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y, ··· 145 144 146 145 static inline int 147 146 hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; } 147 + 148 + static inline int 149 + hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid) { return 0; } 148 150 149 151 static inline int 150 152 hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
-3
include/sound/hda_codec.h
··· 18 18 #include <sound/hda_verbs.h> 19 19 #include <sound/hda_regmap.h> 20 20 21 - #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) 22 - #define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348) 23 - 24 21 /* 25 22 * Structures 26 23 */
+26
include/sound/hdaudio.h
··· 11 11 #include <linux/io.h> 12 12 #include <linux/io-64-nonatomic-lo-hi.h> 13 13 #include <linux/iopoll.h> 14 + #include <linux/pci.h> 14 15 #include <linux/pm_runtime.h> 15 16 #include <linux/timecounter.h> 16 17 #include <sound/core.h> ··· 704 703 #define snd_array_for_each(array, idx, ptr) \ 705 704 for ((idx) = 0, (ptr) = (array)->list; (idx) < (array)->used; \ 706 705 (ptr) = snd_array_elem(array, ++(idx))) 706 + 707 + /* 708 + * Device matching 709 + */ 710 + 711 + #define HDA_CONTROLLER_IS_HSW(pci) (pci_match_id((struct pci_device_id []){ \ 712 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_HSW_0) }, \ 713 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_HSW_2) }, \ 714 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_HSW_3) }, \ 715 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_BDW) }, \ 716 + { } \ 717 + }, pci)) 718 + 719 + #define HDA_CONTROLLER_IS_APL(pci) (pci_match_id((struct pci_device_id []){ \ 720 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_APL) }, \ 721 + { } \ 722 + }, pci)) 723 + 724 + #define HDA_CONTROLLER_IN_GPU(pci) (pci_match_id((struct pci_device_id []){ \ 725 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG1) }, \ 726 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG2_0) }, \ 727 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG2_1) }, \ 728 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG2_2) }, \ 729 + { } \ 730 + }, pci) || HDA_CONTROLLER_IS_HSW(pci)) 707 731 708 732 #endif /* __SOUND_HDAUDIO_H */
+11 -10
sound/hda/hdac_i915.c
··· 11 11 #include <sound/hda_i915.h> 12 12 #include <sound/hda_register.h> 13 13 14 - #define IS_HSW_CONTROLLER(pci) (((pci)->device == 0x0a0c) || \ 15 - ((pci)->device == 0x0c0c) || \ 16 - ((pci)->device == 0x0d0c) || \ 17 - ((pci)->device == 0x160c)) 18 - 19 14 /** 20 15 * snd_hdac_i915_set_bclk - Reprogram BCLK for HSW/BDW 21 16 * @bus: HDA core bus ··· 34 39 35 40 if (!acomp || !acomp->ops || !acomp->ops->get_cdclk_freq) 36 41 return; /* only for i915 binding */ 37 - if (!IS_HSW_CONTROLLER(pci)) 42 + if (!HDA_CONTROLLER_IS_HSW(pci)) 38 43 return; /* only HSW/BDW */ 39 44 40 45 cdclk_freq = acomp->ops->get_cdclk_freq(acomp->dev); ··· 75 80 if (bus_a == bus_b) 76 81 return true; 77 82 83 + bus_a = bus_a->parent; 84 + bus_b = bus_b->parent; 85 + 86 + /* connected via parent bus (may be NULL!) */ 87 + if (bus_a == bus_b) 88 + return true; 89 + 90 + if (!bus_a || !bus_b) 91 + return false; 92 + 78 93 /* 79 94 * on i915 discrete GPUs with embedded HDA audio, the two 80 95 * devices are connected via 2nd level PCI bridge 81 96 */ 82 - bus_a = bus_a->parent; 83 - bus_b = bus_b->parent; 84 - if (!bus_a || !bus_b) 85 - return false; 86 97 bus_a = bus_a->parent; 87 98 bus_b = bus_b->parent; 88 99 if (bus_a && bus_a == bus_b)
+72 -80
sound/hda/intel-dsp-config.c
··· 50 50 #if IS_ENABLED(CONFIG_SND_SOC_SOF_MERRIFIELD) 51 51 { 52 52 .flags = FLAG_SOF, 53 - .device = 0x119a, 54 - }, 55 - #endif 56 - /* Broxton-T */ 57 - #if IS_ENABLED(CONFIG_SND_SOC_SOF_APOLLOLAKE) 58 - { 59 - .flags = FLAG_SOF, 60 - .device = 0x1a98, 53 + .device = PCI_DEVICE_ID_INTEL_SST_TNG, 61 54 }, 62 55 #endif 63 56 /* ··· 61 68 #if IS_ENABLED(CONFIG_SND_SOC_SOF_APOLLOLAKE) 62 69 { 63 70 .flags = FLAG_SOF, 64 - .device = 0x5a98, 71 + .device = PCI_DEVICE_ID_INTEL_HDA_APL, 65 72 .dmi_table = (const struct dmi_system_id []) { 66 73 { 67 74 .ident = "Up Squared", ··· 75 82 }, 76 83 { 77 84 .flags = FLAG_SOF, 78 - .device = 0x5a98, 85 + .device = PCI_DEVICE_ID_INTEL_HDA_APL, 79 86 .codec_hid = &essx_83x6, 80 87 }, 81 88 #endif 82 89 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_APL) 83 90 { 84 91 .flags = FLAG_SST, 85 - .device = 0x5a98, 92 + .device = PCI_DEVICE_ID_INTEL_HDA_APL, 86 93 .dmi_table = (const struct dmi_system_id []) { 87 94 { 88 95 .ident = "Google Chromebooks", ··· 103 110 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_SKL) 104 111 { 105 112 .flags = FLAG_SST, 106 - .device = 0x9d70, 113 + .device = PCI_DEVICE_ID_INTEL_HDA_SKL_LP, 107 114 .dmi_table = (const struct dmi_system_id []) { 108 115 { 109 116 .ident = "Google Chromebooks", ··· 116 123 }, 117 124 { 118 125 .flags = FLAG_SST | FLAG_SST_ONLY_IF_DMIC, 119 - .device = 0x9d70, 126 + .device = PCI_DEVICE_ID_INTEL_HDA_SKL_LP, 120 127 }, 121 128 #endif 122 129 /* Kabylake-LP */ 123 130 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_KBL) 124 131 { 125 132 .flags = FLAG_SST, 126 - .device = 0x9d71, 133 + .device = PCI_DEVICE_ID_INTEL_HDA_KBL_LP, 127 134 .dmi_table = (const struct dmi_system_id []) { 128 135 { 129 136 .ident = "Google Chromebooks", ··· 136 143 }, 137 144 { 138 145 .flags = FLAG_SST | FLAG_SST_ONLY_IF_DMIC, 139 - .device = 0x9d71, 146 + .device = PCI_DEVICE_ID_INTEL_HDA_KBL_LP, 140 147 }, 141 148 #endif 142 149 ··· 148 155 #if IS_ENABLED(CONFIG_SND_SOC_SOF_GEMINILAKE) 149 156 { 150 157 .flags = FLAG_SOF, 151 - .device = 0x3198, 158 + .device = PCI_DEVICE_ID_INTEL_HDA_GML, 152 159 .dmi_table = (const struct dmi_system_id []) { 153 160 { 154 161 .ident = "Google Chromebooks", ··· 161 168 }, 162 169 { 163 170 .flags = FLAG_SOF, 164 - .device = 0x3198, 171 + .device = PCI_DEVICE_ID_INTEL_HDA_GML, 165 172 .codec_hid = &essx_83x6, 166 173 }, 167 174 #endif ··· 181 188 #if IS_ENABLED(CONFIG_SND_SOC_SOF_CANNONLAKE) 182 189 { 183 190 .flags = FLAG_SOF, 184 - .device = 0x9dc8, 191 + .device = PCI_DEVICE_ID_INTEL_HDA_CNL_LP, 185 192 .dmi_table = (const struct dmi_system_id []) { 186 193 { 187 194 .ident = "Google Chromebooks", ··· 200 207 }, 201 208 { 202 209 .flags = FLAG_SOF, 203 - .device = 0x09dc8, 210 + .device = PCI_DEVICE_ID_INTEL_HDA_CNL_LP, 204 211 .codec_hid = &essx_83x6, 205 212 }, 206 213 { 207 214 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 208 - .device = 0x9dc8, 215 + .device = PCI_DEVICE_ID_INTEL_HDA_CNL_LP, 209 216 }, 210 217 #endif 211 218 ··· 213 220 #if IS_ENABLED(CONFIG_SND_SOC_SOF_COFFEELAKE) 214 221 { 215 222 .flags = FLAG_SOF, 216 - .device = 0xa348, 223 + .device = PCI_DEVICE_ID_INTEL_HDA_CNL_H, 217 224 .dmi_table = (const struct dmi_system_id []) { 218 225 { 219 226 .ident = "Google Chromebooks", ··· 226 233 }, 227 234 { 228 235 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 229 - .device = 0xa348, 236 + .device = PCI_DEVICE_ID_INTEL_HDA_CNL_H, 230 237 }, 231 238 #endif 232 239 ··· 234 241 /* Cometlake-LP */ 235 242 { 236 243 .flags = FLAG_SOF, 237 - .device = 0x02c8, 244 + .device = PCI_DEVICE_ID_INTEL_HDA_CML_LP, 238 245 .dmi_table = (const struct dmi_system_id []) { 239 246 { 240 247 .ident = "Google Chromebooks", ··· 260 267 }, 261 268 { 262 269 .flags = FLAG_SOF, 263 - .device = 0x02c8, 270 + .device = PCI_DEVICE_ID_INTEL_HDA_CML_LP, 264 271 .codec_hid = &essx_83x6, 265 272 }, 266 273 { 267 274 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 268 - .device = 0x02c8, 275 + .device = PCI_DEVICE_ID_INTEL_HDA_CML_LP, 269 276 }, 270 277 /* Cometlake-H */ 271 278 { 272 279 .flags = FLAG_SOF, 273 - .device = 0x06c8, 280 + .device = PCI_DEVICE_ID_INTEL_HDA_CML_H, 274 281 .dmi_table = (const struct dmi_system_id []) { 275 282 { 276 283 .matches = { ··· 289 296 }, 290 297 { 291 298 .flags = FLAG_SOF, 292 - .device = 0x06c8, 299 + .device = PCI_DEVICE_ID_INTEL_HDA_CML_H, 293 300 .codec_hid = &essx_83x6, 294 301 }, 295 302 { 296 303 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 297 - .device = 0x06c8, 304 + .device = PCI_DEVICE_ID_INTEL_HDA_CML_H, 298 305 }, 299 306 #endif 300 307 ··· 302 309 #if IS_ENABLED(CONFIG_SND_SOC_SOF_ICELAKE) 303 310 { 304 311 .flags = FLAG_SOF, 305 - .device = 0x34c8, 312 + .device = PCI_DEVICE_ID_INTEL_HDA_ICL_LP, 306 313 .dmi_table = (const struct dmi_system_id []) { 307 314 { 308 315 .ident = "Google Chromebooks", ··· 315 322 }, 316 323 { 317 324 .flags = FLAG_SOF, 318 - .device = 0x34c8, 325 + .device = PCI_DEVICE_ID_INTEL_HDA_ICL_LP, 319 326 .codec_hid = &essx_83x6, 320 327 }, 321 328 { 322 329 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 323 - .device = 0x34c8, 330 + .device = PCI_DEVICE_ID_INTEL_HDA_ICL_LP, 324 331 }, 325 332 #endif 326 333 ··· 328 335 #if IS_ENABLED(CONFIG_SND_SOC_SOF_JASPERLAKE) 329 336 { 330 337 .flags = FLAG_SOF, 331 - .device = 0x4dc8, 338 + .device = PCI_DEVICE_ID_INTEL_HDA_JSL_N, 332 339 .dmi_table = (const struct dmi_system_id []) { 333 340 { 334 341 .ident = "Google Chromebooks", ··· 341 348 }, 342 349 { 343 350 .flags = FLAG_SOF, 344 - .device = 0x4dc8, 351 + .device = PCI_DEVICE_ID_INTEL_HDA_JSL_N, 345 352 .codec_hid = &essx_83x6, 346 353 }, 347 354 { 348 355 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC, 349 - .device = 0x4dc8, 356 + .device = PCI_DEVICE_ID_INTEL_HDA_JSL_N, 350 357 }, 351 358 #endif 352 359 ··· 354 361 #if IS_ENABLED(CONFIG_SND_SOC_SOF_TIGERLAKE) 355 362 { 356 363 .flags = FLAG_SOF, 357 - .device = 0xa0c8, 364 + .device = PCI_DEVICE_ID_INTEL_HDA_TGL_LP, 358 365 .dmi_table = (const struct dmi_system_id []) { 359 366 { 360 367 .ident = "Google Chromebooks", ··· 373 380 }, 374 381 { 375 382 .flags = FLAG_SOF, 376 - .device = 0xa0c8, 383 + .device = PCI_DEVICE_ID_INTEL_HDA_TGL_LP, 377 384 .codec_hid = &essx_83x6, 378 385 }, 379 386 { 380 387 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 381 - .device = 0xa0c8, 388 + .device = PCI_DEVICE_ID_INTEL_HDA_TGL_LP, 382 389 }, 383 390 { 384 391 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 385 - .device = 0x43c8, 392 + .device = PCI_DEVICE_ID_INTEL_HDA_TGL_H, 386 393 }, 387 394 #endif 388 395 ··· 390 397 #if IS_ENABLED(CONFIG_SND_SOC_SOF_ELKHARTLAKE) 391 398 { 392 399 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC, 393 - .device = 0x4b55, 400 + .device = PCI_DEVICE_ID_INTEL_HDA_EHL_0, 394 401 }, 395 402 { 396 403 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC, 397 - .device = 0x4b58, 404 + .device = PCI_DEVICE_ID_INTEL_HDA_EHL_3, 398 405 }, 399 406 #endif 400 407 401 - /* Alder Lake */ 408 + /* Alder Lake / Raptor Lake */ 402 409 #if IS_ENABLED(CONFIG_SND_SOC_SOF_ALDERLAKE) 403 - /* Alderlake-S */ 404 410 { 405 411 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 406 - .device = 0x7ad0, 412 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_S, 407 413 }, 408 - /* RaptorLake-S */ 409 414 { 410 415 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 411 - .device = 0x7a50, 416 + .device = PCI_DEVICE_ID_INTEL_HDA_RPL_S, 412 417 }, 413 - /* Alderlake-P */ 414 418 { 415 419 .flags = FLAG_SOF, 416 - .device = 0x51c8, 420 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_P, 417 421 .codec_hid = &essx_83x6, 418 422 }, 419 423 { 420 424 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 421 - .device = 0x51c8, 425 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_P, 422 426 }, 423 427 { 424 428 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 425 - .device = 0x51cd, 429 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_PX, 426 430 }, 427 - /* Alderlake-PS */ 428 431 { 429 432 .flags = FLAG_SOF, 430 - .device = 0x51c9, 433 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_PS, 431 434 .codec_hid = &essx_83x6, 432 435 }, 433 436 { 434 437 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 435 - .device = 0x51c9, 436 - }, 437 - /* Alderlake-M */ 438 - { 439 - .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 440 - .device = 0x51cc, 441 - }, 442 - /* Alderlake-N */ 443 - { 444 - .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 445 - .device = 0x54c8, 446 - }, 447 - /* RaptorLake-P */ 448 - { 449 - .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 450 - .device = 0x51ca, 438 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_PS, 451 439 }, 452 440 { 453 441 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 454 - .device = 0x51cb, 442 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_M, 455 443 }, 456 - /* RaptorLake-M */ 457 444 { 458 445 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 459 - .device = 0x51ce, 446 + .device = PCI_DEVICE_ID_INTEL_HDA_ADL_N, 460 447 }, 461 - /* RaptorLake-PX */ 462 448 { 463 449 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 464 - .device = 0x51cf, 450 + .device = PCI_DEVICE_ID_INTEL_HDA_RPL_P_0, 451 + }, 452 + { 453 + .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 454 + .device = PCI_DEVICE_ID_INTEL_HDA_RPL_P_1, 455 + }, 456 + { 457 + .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 458 + .device = PCI_DEVICE_ID_INTEL_HDA_RPL_M, 459 + }, 460 + { 461 + .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 462 + .device = PCI_DEVICE_ID_INTEL_HDA_RPL_PX, 465 463 }, 466 464 #endif 467 465 ··· 461 477 /* Meteorlake-P */ 462 478 { 463 479 .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 464 - .device = 0x7e28, 480 + .device = PCI_DEVICE_ID_INTEL_HDA_MTL, 465 481 }, 466 482 #endif 467 483 484 + /* Lunar Lake */ 485 + #if IS_ENABLED(CONFIG_SND_SOC_SOF_LUNARLAKE) 486 + /* Lunarlake-P */ 487 + { 488 + .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, 489 + .device = PCI_DEVICE_ID_INTEL_HDA_LNL_P, 490 + }, 491 + #endif 468 492 }; 469 493 470 494 static const struct config_entry *snd_intel_dsp_find_config ··· 541 549 const struct config_entry *cfg; 542 550 543 551 /* Intel vendor only */ 544 - if (pci->vendor != 0x8086) 552 + if (pci->vendor != PCI_VENDOR_ID_INTEL) 545 553 return SND_INTEL_DSP_DRIVER_ANY; 546 554 547 555 /* ··· 549 557 * for HDMI/DP support, ignore kernel parameter 550 558 */ 551 559 switch (pci->device) { 552 - case 0x160c: /* Broadwell */ 553 - case 0x0a0c: /* Haswell */ 554 - case 0x0c0c: 555 - case 0x0d0c: 556 - case 0x0f04: /* Baytrail */ 557 - case 0x2284: /* Braswell */ 560 + case PCI_DEVICE_ID_INTEL_HDA_BDW: 561 + case PCI_DEVICE_ID_INTEL_HDA_HSW_0: 562 + case PCI_DEVICE_ID_INTEL_HDA_HSW_2: 563 + case PCI_DEVICE_ID_INTEL_HDA_HSW_3: 564 + case PCI_DEVICE_ID_INTEL_HDA_BYT: 565 + case PCI_DEVICE_ID_INTEL_HDA_BSW: 558 566 return SND_INTEL_DSP_DRIVER_ANY; 559 567 } 560 568
+146 -229
sound/pci/hda/hda_intel.c
··· 330 330 #define needs_eld_notify_link(chip) false 331 331 #endif 332 332 333 - #define CONTROLLER_IN_GPU(pci) (((pci)->vendor == 0x8086) && \ 334 - (((pci)->device == 0x0a0c) || \ 335 - ((pci)->device == 0x0c0c) || \ 336 - ((pci)->device == 0x0d0c) || \ 337 - ((pci)->device == 0x160c) || \ 338 - ((pci)->device == 0x490d) || \ 339 - ((pci)->device == 0x4f90) || \ 340 - ((pci)->device == 0x4f91) || \ 341 - ((pci)->device == 0x4f92))) 342 - 343 - #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) 344 - 345 333 static const char * const driver_short_names[] = { 346 334 [AZX_DRIVER_ICH] = "HDA Intel", 347 335 [AZX_DRIVER_PCH] = "HDA Intel PCH", ··· 561 573 snd_hdac_set_codec_wakeup(bus, false); 562 574 563 575 /* reduce dma latency to avoid noise */ 564 - if (IS_BXT(pci)) 576 + if (HDA_CONTROLLER_IS_APL(pci)) 565 577 bxt_reduce_dma_latency(chip); 566 578 567 579 if (bus->mlcap != NULL) ··· 2163 2175 #endif /* CONFIG_SND_HDA_PATCH_LOADER */ 2164 2176 2165 2177 #ifndef CONFIG_SND_HDA_I915 2166 - if (CONTROLLER_IN_GPU(pci)) 2178 + if (HDA_CONTROLLER_IN_GPU(pci)) 2167 2179 dev_err(card->dev, "Haswell/Broadwell HDMI/DP must build in CONFIG_SND_HDA_I915\n"); 2168 2180 #endif 2169 2181 ··· 2271 2283 * for other chips, still continue probing as other 2272 2284 * codecs can be on the same link. 2273 2285 */ 2274 - if (CONTROLLER_IN_GPU(pci)) { 2286 + if (HDA_CONTROLLER_IN_GPU(pci)) { 2275 2287 dev_err(chip->card->dev, 2276 2288 "HSW/BDW HD-audio HDMI/DP requires binding with gfx driver\n"); 2277 2289 goto out_free; ··· 2282 2294 } 2283 2295 2284 2296 /* HSW/BDW controllers need this power */ 2285 - if (CONTROLLER_IN_GPU(pci)) 2297 + if (HDA_CONTROLLER_IN_GPU(pci)) 2286 2298 hda->need_i915_power = true; 2287 2299 } 2288 2300 ··· 2416 2428 /* PCI IDs */ 2417 2429 static const struct pci_device_id azx_ids[] = { 2418 2430 /* CPT */ 2419 - { PCI_DEVICE(0x8086, 0x1c20), 2420 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 2431 + { PCI_DEVICE_DATA(INTEL, HDA_CPT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM) }, 2421 2432 /* PBG */ 2422 - { PCI_DEVICE(0x8086, 0x1d20), 2423 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 2433 + { PCI_DEVICE_DATA(INTEL, HDA_PBG, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM) }, 2424 2434 /* Panther Point */ 2425 - { PCI_DEVICE(0x8086, 0x1e20), 2426 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 2435 + { PCI_DEVICE_DATA(INTEL, HDA_PPT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM) }, 2427 2436 /* Lynx Point */ 2428 - { PCI_DEVICE(0x8086, 0x8c20), 2429 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2437 + { PCI_DEVICE_DATA(INTEL, HDA_LPT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2430 2438 /* 9 Series */ 2431 - { PCI_DEVICE(0x8086, 0x8ca0), 2432 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2439 + { PCI_DEVICE_DATA(INTEL, HDA_9_SERIES, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2433 2440 /* Wellsburg */ 2434 - { PCI_DEVICE(0x8086, 0x8d20), 2435 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2436 - { PCI_DEVICE(0x8086, 0x8d21), 2437 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2441 + { PCI_DEVICE_DATA(INTEL, HDA_WBG_0, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2442 + { PCI_DEVICE_DATA(INTEL, HDA_WBG_1, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2438 2443 /* Lewisburg */ 2439 - { PCI_DEVICE(0x8086, 0xa1f0), 2440 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, 2441 - { PCI_DEVICE(0x8086, 0xa270), 2442 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, 2444 + { PCI_DEVICE_DATA(INTEL, HDA_LBG_0, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE) }, 2445 + { PCI_DEVICE_DATA(INTEL, HDA_LBG_1, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE) }, 2443 2446 /* Lynx Point-LP */ 2444 - { PCI_DEVICE(0x8086, 0x9c20), 2445 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2447 + { PCI_DEVICE_DATA(INTEL, HDA_LPT_LP_0, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2446 2448 /* Lynx Point-LP */ 2447 - { PCI_DEVICE(0x8086, 0x9c21), 2448 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2449 + { PCI_DEVICE_DATA(INTEL, HDA_LPT_LP_1, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2449 2450 /* Wildcat Point-LP */ 2450 - { PCI_DEVICE(0x8086, 0x9ca0), 2451 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2452 - /* Sunrise Point */ 2453 - { PCI_DEVICE(0x8086, 0xa170), 2454 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, 2455 - /* Sunrise Point-LP */ 2456 - { PCI_DEVICE(0x8086, 0x9d70), 2457 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, 2451 + { PCI_DEVICE_DATA(INTEL, HDA_WPT_LP, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) }, 2452 + /* Skylake (Sunrise Point) */ 2453 + { PCI_DEVICE_DATA(INTEL, HDA_SKL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2454 + /* Skylake-LP (Sunrise Point-LP) */ 2455 + { PCI_DEVICE_DATA(INTEL, HDA_SKL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2458 2456 /* Kabylake */ 2459 - { PCI_DEVICE(0x8086, 0xa171), 2460 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, 2457 + { PCI_DEVICE_DATA(INTEL, HDA_KBL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2461 2458 /* Kabylake-LP */ 2462 - { PCI_DEVICE(0x8086, 0x9d71), 2463 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, 2459 + { PCI_DEVICE_DATA(INTEL, HDA_KBL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2464 2460 /* Kabylake-H */ 2465 - { PCI_DEVICE(0x8086, 0xa2f0), 2466 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, 2461 + { PCI_DEVICE_DATA(INTEL, HDA_KBL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2467 2462 /* Coffelake */ 2468 - { PCI_DEVICE(0x8086, 0xa348), 2469 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2463 + { PCI_DEVICE_DATA(INTEL, HDA_CNL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2470 2464 /* Cannonlake */ 2471 - { PCI_DEVICE(0x8086, 0x9dc8), 2472 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2465 + { PCI_DEVICE_DATA(INTEL, HDA_CNL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2473 2466 /* CometLake-LP */ 2474 - { PCI_DEVICE(0x8086, 0x02C8), 2475 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2467 + { PCI_DEVICE_DATA(INTEL, HDA_CML_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2476 2468 /* CometLake-H */ 2477 - { PCI_DEVICE(0x8086, 0x06C8), 2478 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2479 - { PCI_DEVICE(0x8086, 0xf1c8), 2480 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2469 + { PCI_DEVICE_DATA(INTEL, HDA_CML_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2470 + { PCI_DEVICE_DATA(INTEL, HDA_RKL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2481 2471 /* CometLake-S */ 2482 - { PCI_DEVICE(0x8086, 0xa3f0), 2483 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2472 + { PCI_DEVICE_DATA(INTEL, HDA_CML_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2484 2473 /* CometLake-R */ 2485 - { PCI_DEVICE(0x8086, 0xf0c8), 2486 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2474 + { PCI_DEVICE_DATA(INTEL, HDA_CML_R, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2487 2475 /* Icelake */ 2488 - { PCI_DEVICE(0x8086, 0x34c8), 2489 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2476 + { PCI_DEVICE_DATA(INTEL, HDA_ICL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2490 2477 /* Icelake-H */ 2491 - { PCI_DEVICE(0x8086, 0x3dc8), 2492 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2478 + { PCI_DEVICE_DATA(INTEL, HDA_ICL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2493 2479 /* Jasperlake */ 2494 - { PCI_DEVICE(0x8086, 0x38c8), 2495 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2496 - { PCI_DEVICE(0x8086, 0x4dc8), 2497 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2480 + { PCI_DEVICE_DATA(INTEL, HDA_ICL_N, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2481 + { PCI_DEVICE_DATA(INTEL, HDA_JSL_N, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2498 2482 /* Tigerlake */ 2499 - { PCI_DEVICE(0x8086, 0xa0c8), 2500 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2483 + { PCI_DEVICE_DATA(INTEL, HDA_TGL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2501 2484 /* Tigerlake-H */ 2502 - { PCI_DEVICE(0x8086, 0x43c8), 2503 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2485 + { PCI_DEVICE_DATA(INTEL, HDA_TGL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2504 2486 /* DG1 */ 2505 - { PCI_DEVICE(0x8086, 0x490d), 2506 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2487 + { PCI_DEVICE_DATA(INTEL, HDA_DG1, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2507 2488 /* DG2 */ 2508 - { PCI_DEVICE(0x8086, 0x4f90), 2509 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2510 - { PCI_DEVICE(0x8086, 0x4f91), 2511 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2512 - { PCI_DEVICE(0x8086, 0x4f92), 2513 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2489 + { PCI_DEVICE_DATA(INTEL, HDA_DG2_0, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2490 + { PCI_DEVICE_DATA(INTEL, HDA_DG2_1, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2491 + { PCI_DEVICE_DATA(INTEL, HDA_DG2_2, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2514 2492 /* Alderlake-S */ 2515 - { PCI_DEVICE(0x8086, 0x7ad0), 2516 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2493 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2517 2494 /* Alderlake-P */ 2518 - { PCI_DEVICE(0x8086, 0x51c8), 2519 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2520 - { PCI_DEVICE(0x8086, 0x51c9), 2521 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2522 - { PCI_DEVICE(0x8086, 0x51cd), 2523 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2495 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_P, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2496 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_PS, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2497 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_PX, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2524 2498 /* Alderlake-M */ 2525 - { PCI_DEVICE(0x8086, 0x51cc), 2526 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2499 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_M, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2527 2500 /* Alderlake-N */ 2528 - { PCI_DEVICE(0x8086, 0x54c8), 2529 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2501 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_N, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2530 2502 /* Elkhart Lake */ 2531 - { PCI_DEVICE(0x8086, 0x4b55), 2532 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2533 - { PCI_DEVICE(0x8086, 0x4b58), 2534 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2503 + { PCI_DEVICE_DATA(INTEL, HDA_EHL_0, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2504 + { PCI_DEVICE_DATA(INTEL, HDA_EHL_3, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2535 2505 /* Raptor Lake */ 2536 - { PCI_DEVICE(0x8086, 0x7a50), 2537 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2538 - { PCI_DEVICE(0x8086, 0x51ca), 2539 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2540 - { PCI_DEVICE(0x8086, 0x51cb), 2541 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2542 - { PCI_DEVICE(0x8086, 0x51ce), 2543 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2544 - { PCI_DEVICE(0x8086, 0x51cf), 2545 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2546 - /* Meteorlake-P */ 2547 - { PCI_DEVICE(0x8086, 0x7e28), 2548 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2506 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2507 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_P_0, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2508 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_P_1, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2509 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_M, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2510 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_PX, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2511 + { PCI_DEVICE_DATA(INTEL, HDA_MTL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2549 2512 /* Lunarlake-P */ 2550 - { PCI_DEVICE(0x8086, 0xa828), 2551 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, 2552 - /* Broxton-P(Apollolake) */ 2553 - { PCI_DEVICE(0x8086, 0x5a98), 2554 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, 2555 - /* Broxton-T */ 2556 - { PCI_DEVICE(0x8086, 0x1a98), 2557 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, 2513 + { PCI_DEVICE_DATA(INTEL, HDA_LNL_P, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2514 + /* Arrow Lake-S */ 2515 + { PCI_DEVICE_DATA(INTEL, HDA_ARL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) }, 2516 + /* Apollolake (Broxton-P) */ 2517 + { PCI_DEVICE_DATA(INTEL, HDA_APL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON) }, 2558 2518 /* Gemini-Lake */ 2559 - { PCI_DEVICE(0x8086, 0x3198), 2560 - .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, 2519 + { PCI_DEVICE_DATA(INTEL, HDA_GML, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON) }, 2561 2520 /* Haswell */ 2562 - { PCI_DEVICE(0x8086, 0x0a0c), 2563 - .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, 2564 - { PCI_DEVICE(0x8086, 0x0c0c), 2565 - .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, 2566 - { PCI_DEVICE(0x8086, 0x0d0c), 2567 - .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, 2521 + { PCI_DEVICE_DATA(INTEL, HDA_HSW_0, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL) }, 2522 + { PCI_DEVICE_DATA(INTEL, HDA_HSW_2, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL) }, 2523 + { PCI_DEVICE_DATA(INTEL, HDA_HSW_3, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL) }, 2568 2524 /* Broadwell */ 2569 - { PCI_DEVICE(0x8086, 0x160c), 2570 - .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_BROADWELL }, 2525 + { PCI_DEVICE_DATA(INTEL, HDA_BDW, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_BROADWELL) }, 2571 2526 /* 5 Series/3400 */ 2572 - { PCI_DEVICE(0x8086, 0x3b56), 2573 - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, 2574 - { PCI_DEVICE(0x8086, 0x3b57), 2575 - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, 2527 + { PCI_DEVICE_DATA(INTEL, HDA_5_3400_SERIES_0, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM) }, 2528 + { PCI_DEVICE_DATA(INTEL, HDA_5_3400_SERIES_1, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM) }, 2576 2529 /* Poulsbo */ 2577 - { PCI_DEVICE(0x8086, 0x811b), 2578 - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE | 2579 - AZX_DCAPS_POSFIX_LPIB }, 2530 + { PCI_DEVICE_DATA(INTEL, HDA_POULSBO, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE | 2531 + AZX_DCAPS_POSFIX_LPIB) }, 2580 2532 /* Oaktrail */ 2581 - { PCI_DEVICE(0x8086, 0x080a), 2582 - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE }, 2533 + { PCI_DEVICE_DATA(INTEL, HDA_OAKTRAIL, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE) }, 2583 2534 /* BayTrail */ 2584 - { PCI_DEVICE(0x8086, 0x0f04), 2585 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BAYTRAIL }, 2535 + { PCI_DEVICE_DATA(INTEL, HDA_BYT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BAYTRAIL) }, 2586 2536 /* Braswell */ 2587 - { PCI_DEVICE(0x8086, 0x2284), 2588 - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BRASWELL }, 2537 + { PCI_DEVICE_DATA(INTEL, HDA_BSW, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BRASWELL) }, 2589 2538 /* ICH6 */ 2590 - { PCI_DEVICE(0x8086, 0x2668), 2591 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2539 + { PCI_DEVICE_DATA(INTEL, HDA_ICH6, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2592 2540 /* ICH7 */ 2593 - { PCI_DEVICE(0x8086, 0x27d8), 2594 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2541 + { PCI_DEVICE_DATA(INTEL, HDA_ICH7, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2595 2542 /* ESB2 */ 2596 - { PCI_DEVICE(0x8086, 0x269a), 2597 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2543 + { PCI_DEVICE_DATA(INTEL, HDA_ESB2, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2598 2544 /* ICH8 */ 2599 - { PCI_DEVICE(0x8086, 0x284b), 2600 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2545 + { PCI_DEVICE_DATA(INTEL, HDA_ICH8, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2601 2546 /* ICH9 */ 2602 - { PCI_DEVICE(0x8086, 0x293e), 2603 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2547 + { PCI_DEVICE_DATA(INTEL, HDA_ICH9_0, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2604 2548 /* ICH9 */ 2605 - { PCI_DEVICE(0x8086, 0x293f), 2606 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2549 + { PCI_DEVICE_DATA(INTEL, HDA_ICH9_1, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2607 2550 /* ICH10 */ 2608 - { PCI_DEVICE(0x8086, 0x3a3e), 2609 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2551 + { PCI_DEVICE_DATA(INTEL, HDA_ICH10_0, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2610 2552 /* ICH10 */ 2611 - { PCI_DEVICE(0x8086, 0x3a6e), 2612 - .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH }, 2553 + { PCI_DEVICE_DATA(INTEL, HDA_ICH10_1, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) }, 2613 2554 /* Generic Intel */ 2614 2555 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID), 2615 2556 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 2616 2557 .class_mask = 0xffffff, 2617 2558 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_NO_ALIGN_BUFSIZE }, 2618 2559 /* ATI SB 450/600/700/800/900 */ 2619 - { PCI_DEVICE(0x1002, 0x437b), 2560 + { PCI_VDEVICE(ATI, 0x437b), 2620 2561 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB }, 2621 - { PCI_DEVICE(0x1002, 0x4383), 2562 + { PCI_VDEVICE(ATI, 0x4383), 2622 2563 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB }, 2623 2564 /* AMD Hudson */ 2624 - { PCI_DEVICE(0x1022, 0x780d), 2565 + { PCI_VDEVICE(AMD, 0x780d), 2625 2566 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB }, 2626 2567 /* AMD, X370 & co */ 2627 - { PCI_DEVICE(0x1022, 0x1457), 2568 + { PCI_VDEVICE(AMD, 0x1457), 2628 2569 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, 2629 2570 /* AMD, X570 & co */ 2630 - { PCI_DEVICE(0x1022, 0x1487), 2571 + { PCI_VDEVICE(AMD, 0x1487), 2631 2572 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, 2632 2573 /* AMD Stoney */ 2633 - { PCI_DEVICE(0x1022, 0x157a), 2574 + { PCI_VDEVICE(AMD, 0x157a), 2634 2575 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB | 2635 2576 AZX_DCAPS_PM_RUNTIME }, 2636 2577 /* AMD Raven */ 2637 - { PCI_DEVICE(0x1022, 0x15e3), 2578 + { PCI_VDEVICE(AMD, 0x15e3), 2638 2579 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, 2639 2580 /* ATI HDMI */ 2640 - { PCI_DEVICE(0x1002, 0x0002), 2581 + { PCI_VDEVICE(ATI, 0x0002), 2641 2582 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2642 2583 AZX_DCAPS_PM_RUNTIME }, 2643 - { PCI_DEVICE(0x1002, 0x1308), 2584 + { PCI_VDEVICE(ATI, 0x1308), 2644 2585 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2645 - { PCI_DEVICE(0x1002, 0x157a), 2586 + { PCI_VDEVICE(ATI, 0x157a), 2646 2587 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2647 - { PCI_DEVICE(0x1002, 0x15b3), 2588 + { PCI_VDEVICE(ATI, 0x15b3), 2648 2589 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2649 - { PCI_DEVICE(0x1002, 0x793b), 2590 + { PCI_VDEVICE(ATI, 0x793b), 2650 2591 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2651 - { PCI_DEVICE(0x1002, 0x7919), 2592 + { PCI_VDEVICE(ATI, 0x7919), 2652 2593 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2653 - { PCI_DEVICE(0x1002, 0x960f), 2594 + { PCI_VDEVICE(ATI, 0x960f), 2654 2595 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2655 - { PCI_DEVICE(0x1002, 0x970f), 2596 + { PCI_VDEVICE(ATI, 0x970f), 2656 2597 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2657 - { PCI_DEVICE(0x1002, 0x9840), 2598 + { PCI_VDEVICE(ATI, 0x9840), 2658 2599 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2659 - { PCI_DEVICE(0x1002, 0xaa00), 2600 + { PCI_VDEVICE(ATI, 0xaa00), 2660 2601 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2661 - { PCI_DEVICE(0x1002, 0xaa08), 2602 + { PCI_VDEVICE(ATI, 0xaa08), 2662 2603 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2663 - { PCI_DEVICE(0x1002, 0xaa10), 2604 + { PCI_VDEVICE(ATI, 0xaa10), 2664 2605 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2665 - { PCI_DEVICE(0x1002, 0xaa18), 2606 + { PCI_VDEVICE(ATI, 0xaa18), 2666 2607 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2667 - { PCI_DEVICE(0x1002, 0xaa20), 2608 + { PCI_VDEVICE(ATI, 0xaa20), 2668 2609 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2669 - { PCI_DEVICE(0x1002, 0xaa28), 2610 + { PCI_VDEVICE(ATI, 0xaa28), 2670 2611 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2671 - { PCI_DEVICE(0x1002, 0xaa30), 2612 + { PCI_VDEVICE(ATI, 0xaa30), 2672 2613 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2673 - { PCI_DEVICE(0x1002, 0xaa38), 2614 + { PCI_VDEVICE(ATI, 0xaa38), 2674 2615 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2675 - { PCI_DEVICE(0x1002, 0xaa40), 2616 + { PCI_VDEVICE(ATI, 0xaa40), 2676 2617 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2677 - { PCI_DEVICE(0x1002, 0xaa48), 2618 + { PCI_VDEVICE(ATI, 0xaa48), 2678 2619 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2679 - { PCI_DEVICE(0x1002, 0xaa50), 2620 + { PCI_VDEVICE(ATI, 0xaa50), 2680 2621 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2681 - { PCI_DEVICE(0x1002, 0xaa58), 2622 + { PCI_VDEVICE(ATI, 0xaa58), 2682 2623 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2683 - { PCI_DEVICE(0x1002, 0xaa60), 2624 + { PCI_VDEVICE(ATI, 0xaa60), 2684 2625 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2685 - { PCI_DEVICE(0x1002, 0xaa68), 2626 + { PCI_VDEVICE(ATI, 0xaa68), 2686 2627 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2687 - { PCI_DEVICE(0x1002, 0xaa80), 2628 + { PCI_VDEVICE(ATI, 0xaa80), 2688 2629 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2689 - { PCI_DEVICE(0x1002, 0xaa88), 2630 + { PCI_VDEVICE(ATI, 0xaa88), 2690 2631 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2691 - { PCI_DEVICE(0x1002, 0xaa90), 2632 + { PCI_VDEVICE(ATI, 0xaa90), 2692 2633 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2693 - { PCI_DEVICE(0x1002, 0xaa98), 2634 + { PCI_VDEVICE(ATI, 0xaa98), 2694 2635 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 2695 - { PCI_DEVICE(0x1002, 0x9902), 2636 + { PCI_VDEVICE(ATI, 0x9902), 2696 2637 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2697 - { PCI_DEVICE(0x1002, 0xaaa0), 2638 + { PCI_VDEVICE(ATI, 0xaaa0), 2698 2639 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2699 - { PCI_DEVICE(0x1002, 0xaaa8), 2640 + { PCI_VDEVICE(ATI, 0xaaa8), 2700 2641 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2701 - { PCI_DEVICE(0x1002, 0xaab0), 2642 + { PCI_VDEVICE(ATI, 0xaab0), 2702 2643 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, 2703 - { PCI_DEVICE(0x1002, 0xaac0), 2644 + { PCI_VDEVICE(ATI, 0xaac0), 2704 2645 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2705 2646 AZX_DCAPS_PM_RUNTIME }, 2706 - { PCI_DEVICE(0x1002, 0xaac8), 2647 + { PCI_VDEVICE(ATI, 0xaac8), 2707 2648 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2708 2649 AZX_DCAPS_PM_RUNTIME }, 2709 - { PCI_DEVICE(0x1002, 0xaad8), 2650 + { PCI_VDEVICE(ATI, 0xaad8), 2710 2651 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2711 2652 AZX_DCAPS_PM_RUNTIME }, 2712 - { PCI_DEVICE(0x1002, 0xaae0), 2653 + { PCI_VDEVICE(ATI, 0xaae0), 2713 2654 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2714 2655 AZX_DCAPS_PM_RUNTIME }, 2715 - { PCI_DEVICE(0x1002, 0xaae8), 2656 + { PCI_VDEVICE(ATI, 0xaae8), 2716 2657 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2717 2658 AZX_DCAPS_PM_RUNTIME }, 2718 - { PCI_DEVICE(0x1002, 0xaaf0), 2659 + { PCI_VDEVICE(ATI, 0xaaf0), 2719 2660 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2720 2661 AZX_DCAPS_PM_RUNTIME }, 2721 - { PCI_DEVICE(0x1002, 0xaaf8), 2662 + { PCI_VDEVICE(ATI, 0xaaf8), 2722 2663 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2723 2664 AZX_DCAPS_PM_RUNTIME }, 2724 - { PCI_DEVICE(0x1002, 0xab00), 2665 + { PCI_VDEVICE(ATI, 0xab00), 2725 2666 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2726 2667 AZX_DCAPS_PM_RUNTIME }, 2727 - { PCI_DEVICE(0x1002, 0xab08), 2668 + { PCI_VDEVICE(ATI, 0xab08), 2728 2669 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2729 2670 AZX_DCAPS_PM_RUNTIME }, 2730 - { PCI_DEVICE(0x1002, 0xab10), 2671 + { PCI_VDEVICE(ATI, 0xab10), 2731 2672 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2732 2673 AZX_DCAPS_PM_RUNTIME }, 2733 - { PCI_DEVICE(0x1002, 0xab18), 2674 + { PCI_VDEVICE(ATI, 0xab18), 2734 2675 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2735 2676 AZX_DCAPS_PM_RUNTIME }, 2736 - { PCI_DEVICE(0x1002, 0xab20), 2677 + { PCI_VDEVICE(ATI, 0xab20), 2737 2678 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2738 2679 AZX_DCAPS_PM_RUNTIME }, 2739 - { PCI_DEVICE(0x1002, 0xab28), 2680 + { PCI_VDEVICE(ATI, 0xab28), 2740 2681 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2741 2682 AZX_DCAPS_PM_RUNTIME }, 2742 - { PCI_DEVICE(0x1002, 0xab30), 2683 + { PCI_VDEVICE(ATI, 0xab30), 2743 2684 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2744 2685 AZX_DCAPS_PM_RUNTIME }, 2745 - { PCI_DEVICE(0x1002, 0xab38), 2686 + { PCI_VDEVICE(ATI, 0xab38), 2746 2687 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2747 2688 AZX_DCAPS_PM_RUNTIME }, 2748 2689 /* GLENFLY */ ··· 2681 2764 .driver_data = AZX_DRIVER_GFHDMI | AZX_DCAPS_POSFIX_LPIB | 2682 2765 AZX_DCAPS_NO_MSI | AZX_DCAPS_NO_64BIT }, 2683 2766 /* VIA VT8251/VT8237A */ 2684 - { PCI_DEVICE(0x1106, 0x3288), .driver_data = AZX_DRIVER_VIA }, 2767 + { PCI_VDEVICE(VIA, 0x3288), .driver_data = AZX_DRIVER_VIA }, 2685 2768 /* VIA GFX VT7122/VX900 */ 2686 - { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC }, 2769 + { PCI_VDEVICE(VIA, 0x9170), .driver_data = AZX_DRIVER_GENERIC }, 2687 2770 /* VIA GFX VT6122/VX11 */ 2688 - { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC }, 2771 + { PCI_VDEVICE(VIA, 0x9140), .driver_data = AZX_DRIVER_GENERIC }, 2689 2772 /* SIS966 */ 2690 - { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS }, 2773 + { PCI_VDEVICE(SI, 0x7502), .driver_data = AZX_DRIVER_SIS }, 2691 2774 /* ULI M5461 */ 2692 - { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI }, 2775 + { PCI_VDEVICE(AL, 0x5461), .driver_data = AZX_DRIVER_ULI }, 2693 2776 /* NVIDIA MCP */ 2694 2777 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID), 2695 2778 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, ··· 2702 2785 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT }, 2703 2786 /* Creative X-Fi (CA0110-IBG) */ 2704 2787 /* CTHDA chips */ 2705 - { PCI_DEVICE(0x1102, 0x0010), 2788 + { PCI_VDEVICE(CREATIVE, 0x0010), 2706 2789 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA }, 2707 - { PCI_DEVICE(0x1102, 0x0012), 2790 + { PCI_VDEVICE(CREATIVE, 0x0012), 2708 2791 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA }, 2709 2792 #if !IS_ENABLED(CONFIG_SND_CTXFI) 2710 2793 /* the following entry conflicts with snd-ctxfi driver, ··· 2718 2801 AZX_DCAPS_NO_64BIT | AZX_DCAPS_POSFIX_LPIB }, 2719 2802 #else 2720 2803 /* this entry seems still valid -- i.e. without emu20kx chip */ 2721 - { PCI_DEVICE(0x1102, 0x0009), 2804 + { PCI_VDEVICE(CREATIVE, 0x0009), 2722 2805 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | 2723 2806 AZX_DCAPS_NO_64BIT | AZX_DCAPS_POSFIX_LPIB }, 2724 2807 #endif 2725 2808 /* CM8888 */ 2726 - { PCI_DEVICE(0x13f6, 0x5011), 2809 + { PCI_VDEVICE(CMEDIA, 0x5011), 2727 2810 .driver_data = AZX_DRIVER_CMEDIA | 2728 2811 AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_SNOOP_OFF }, 2729 2812 /* Vortex86MX */ 2730 - { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, 2813 + { PCI_VDEVICE(RDC, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, 2731 2814 /* VMware HDAudio */ 2732 - { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC }, 2815 + { PCI_VDEVICE(VMWARE, 0x1977), .driver_data = AZX_DRIVER_GENERIC }, 2733 2816 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */ 2734 2817 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID), 2735 2818 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, ··· 2740 2823 .class_mask = 0xffffff, 2741 2824 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI }, 2742 2825 /* Zhaoxin */ 2743 - { PCI_DEVICE(0x1d17, 0x3288), .driver_data = AZX_DRIVER_ZHAOXIN }, 2826 + { PCI_VDEVICE(ZHAOXIN, 0x3288), .driver_data = AZX_DRIVER_ZHAOXIN }, 2744 2827 /* Loongson HDAudio*/ 2745 - {PCI_DEVICE(PCI_VENDOR_ID_LOONGSON, PCI_DEVICE_ID_LOONGSON_HDA), 2828 + { PCI_VDEVICE(LOONGSON, PCI_DEVICE_ID_LOONGSON_HDA), 2746 2829 .driver_data = AZX_DRIVER_LOONGSON }, 2747 - {PCI_DEVICE(PCI_VENDOR_ID_LOONGSON, PCI_DEVICE_ID_LOONGSON_HDMI), 2830 + { PCI_VDEVICE(LOONGSON, PCI_DEVICE_ID_LOONGSON_HDMI), 2748 2831 .driver_data = AZX_DRIVER_LOONGSON }, 2749 2832 { 0, } 2750 2833 };
+10 -4
sound/soc/intel/atom/sst/sst.c
··· 16 16 #include <linux/interrupt.h> 17 17 #include <linux/io.h> 18 18 #include <linux/firmware.h> 19 + #include <linux/pci.h> 19 20 #include <linux/pm_runtime.h> 20 21 #include <linux/pm_qos.h> 21 22 #include <linux/async.h> ··· 175 174 { 176 175 177 176 switch (sst->dev_id) { 178 - case SST_MRFLD_PCI_ID: 179 - case SST_BYT_ACPI_ID: 180 - case SST_CHV_ACPI_ID: 177 + case PCI_DEVICE_ID_INTEL_SST_TNG: 178 + case PCI_DEVICE_ID_INTEL_SST_BYT: 179 + case PCI_DEVICE_ID_INTEL_SST_BSW: 181 180 sst->tstamp = SST_TIME_STAMP_MRFLD; 182 181 sst->ops = &mrfld_ops; 183 182 return 0; ··· 222 221 spin_lock_init(&ctx->block_lock); 223 222 } 224 223 224 + /* 225 + * Driver handles PCI IDs in ACPI - sst_acpi_probe() - and we are using only 226 + * device ID part. If real ACPI ID appears, the kstrtouint() returns error, so 227 + * we are fine with using unsigned short as dev_id type. 228 + */ 225 229 int sst_alloc_drv_context(struct intel_sst_drv **ctx, 226 - struct device *dev, unsigned int dev_id) 230 + struct device *dev, unsigned short dev_id) 227 231 { 228 232 *ctx = devm_kzalloc(dev, sizeof(struct intel_sst_drv), GFP_KERNEL); 229 233 if (!(*ctx))
+2 -5
sound/soc/intel/atom/sst/sst.h
··· 20 20 21 21 /* driver names */ 22 22 #define SST_DRV_NAME "intel_sst_driver" 23 - #define SST_MRFLD_PCI_ID 0x119A 24 - #define SST_BYT_ACPI_ID 0x80860F28 25 - #define SST_CHV_ACPI_ID 0x808622A8 26 23 27 24 #define SST_SUSPEND_DELAY 2000 28 25 #define FW_CONTEXT_MEM (64*1024) ··· 355 358 struct intel_sst_drv { 356 359 int sst_state; 357 360 int irq_num; 358 - unsigned int dev_id; 361 + unsigned short dev_id; 359 362 void __iomem *ddr; 360 363 void __iomem *shim; 361 364 void __iomem *mailbox; ··· 520 523 int sst_unregister(struct device *); 521 524 522 525 int sst_alloc_drv_context(struct intel_sst_drv **ctx, 523 - struct device *dev, unsigned int dev_id); 526 + struct device *dev, unsigned short dev_id); 524 527 int sst_context_init(struct intel_sst_drv *ctx); 525 528 void sst_context_cleanup(struct intel_sst_drv *ctx); 526 529 void sst_configure_runtime_pm(struct intel_sst_drv *ctx);
+2 -2
sound/soc/intel/atom/sst/sst_pci.c
··· 32 32 33 33 /* map registers */ 34 34 /* DDR base */ 35 - if (ctx->dev_id == SST_MRFLD_PCI_ID) { 35 + if (ctx->dev_id == PCI_DEVICE_ID_INTEL_SST_TNG) { 36 36 ctx->ddr_base = pci_resource_start(pci, 0); 37 37 /* check that the relocated IMR base matches with FW Binary */ 38 38 ddr_base = relocate_imr_addr_mrfld(ctx->ddr_base); ··· 173 173 174 174 /* PCI Routines */ 175 175 static const struct pci_device_id intel_sst_ids[] = { 176 - { PCI_VDEVICE(INTEL, SST_MRFLD_PCI_ID), 0}, 176 + { PCI_DEVICE_DATA(INTEL, SST_TNG, 0) }, 177 177 { 0, } 178 178 }; 179 179
+5 -5
sound/soc/intel/avs/board_selection.c
··· 279 279 }; 280 280 281 281 #define AVS_MACH_ENTRY(_id, _mach) \ 282 - { .id = (_id), .machs = (_mach), } 282 + { .id = PCI_DEVICE_ID_INTEL_##_id, .machs = (_mach), } 283 283 284 284 /* supported I2S boards per platform */ 285 285 static const struct avs_acpi_boards i2s_boards[] = { 286 - AVS_MACH_ENTRY(0x9d70, avs_skl_i2s_machines), /* SKL */ 287 - AVS_MACH_ENTRY(0x9d71, avs_kbl_i2s_machines), /* KBL */ 288 - AVS_MACH_ENTRY(0x5a98, avs_apl_i2s_machines), /* APL */ 289 - AVS_MACH_ENTRY(0x3198, avs_gml_i2s_machines), /* GML */ 286 + AVS_MACH_ENTRY(HDA_SKL_LP, avs_skl_i2s_machines), 287 + AVS_MACH_ENTRY(HDA_KBL_LP, avs_kbl_i2s_machines), 288 + AVS_MACH_ENTRY(HDA_APL, avs_apl_i2s_machines), 289 + AVS_MACH_ENTRY(HDA_GML, avs_gml_i2s_machines), 290 290 {}, 291 291 }; 292 292
+8 -8
sound/soc/intel/avs/core.c
··· 745 745 }; 746 746 747 747 static const struct pci_device_id avs_ids[] = { 748 - { PCI_VDEVICE(INTEL, 0x9d70), (unsigned long)&skl_desc }, /* SKL */ 749 - { PCI_VDEVICE(INTEL, 0xa170), (unsigned long)&skl_desc }, /* SKL-H */ 750 - { PCI_VDEVICE(INTEL, 0x9d71), (unsigned long)&skl_desc }, /* KBL */ 751 - { PCI_VDEVICE(INTEL, 0xa171), (unsigned long)&skl_desc }, /* KBL-H */ 752 - { PCI_VDEVICE(INTEL, 0xa2f0), (unsigned long)&skl_desc }, /* KBL-S */ 753 - { PCI_VDEVICE(INTEL, 0xa3f0), (unsigned long)&skl_desc }, /* CML-V */ 754 - { PCI_VDEVICE(INTEL, 0x5a98), (unsigned long)&apl_desc }, /* APL */ 755 - { PCI_VDEVICE(INTEL, 0x3198), (unsigned long)&apl_desc }, /* GML */ 748 + { PCI_DEVICE_DATA(INTEL, HDA_SKL_LP, &skl_desc) }, 749 + { PCI_DEVICE_DATA(INTEL, HDA_SKL, &skl_desc) }, 750 + { PCI_DEVICE_DATA(INTEL, HDA_KBL_LP, &skl_desc) }, 751 + { PCI_DEVICE_DATA(INTEL, HDA_KBL, &skl_desc) }, 752 + { PCI_DEVICE_DATA(INTEL, HDA_KBL_H, &skl_desc) }, 753 + { PCI_DEVICE_DATA(INTEL, HDA_CML_S, &skl_desc) }, 754 + { PCI_DEVICE_DATA(INTEL, HDA_APL, &apl_desc) }, 755 + { PCI_DEVICE_DATA(INTEL, HDA_GML, &apl_desc) }, 756 756 { 0 } 757 757 }; 758 758 MODULE_DEVICE_TABLE(pci, avs_ids);
+8 -8
sound/soc/intel/skylake/skl-messages.c
··· 169 169 170 170 static const struct skl_dsp_ops dsp_ops[] = { 171 171 { 172 - .id = 0x9d70, 172 + .id = PCI_DEVICE_ID_INTEL_HDA_SKL_LP, 173 173 .num_cores = 2, 174 174 .loader_ops = skl_get_loader_ops, 175 175 .init = skl_sst_dsp_init, ··· 177 177 .cleanup = skl_sst_dsp_cleanup 178 178 }, 179 179 { 180 - .id = 0x9d71, 180 + .id = PCI_DEVICE_ID_INTEL_HDA_KBL_LP, 181 181 .num_cores = 2, 182 182 .loader_ops = skl_get_loader_ops, 183 183 .init = skl_sst_dsp_init, ··· 185 185 .cleanup = skl_sst_dsp_cleanup 186 186 }, 187 187 { 188 - .id = 0x5a98, 188 + .id = PCI_DEVICE_ID_INTEL_HDA_APL, 189 189 .num_cores = 2, 190 190 .loader_ops = bxt_get_loader_ops, 191 191 .init = bxt_sst_dsp_init, ··· 193 193 .cleanup = bxt_sst_dsp_cleanup 194 194 }, 195 195 { 196 - .id = 0x3198, 196 + .id = PCI_DEVICE_ID_INTEL_HDA_GML, 197 197 .num_cores = 2, 198 198 .loader_ops = bxt_get_loader_ops, 199 199 .init = bxt_sst_dsp_init, ··· 201 201 .cleanup = bxt_sst_dsp_cleanup 202 202 }, 203 203 { 204 - .id = 0x9dc8, 204 + .id = PCI_DEVICE_ID_INTEL_HDA_CNL_LP, 205 205 .num_cores = 4, 206 206 .loader_ops = bxt_get_loader_ops, 207 207 .init = cnl_sst_dsp_init, ··· 209 209 .cleanup = cnl_sst_dsp_cleanup 210 210 }, 211 211 { 212 - .id = 0xa348, 212 + .id = PCI_DEVICE_ID_INTEL_HDA_CNL_H, 213 213 .num_cores = 4, 214 214 .loader_ops = bxt_get_loader_ops, 215 215 .init = cnl_sst_dsp_init, ··· 217 217 .cleanup = cnl_sst_dsp_cleanup 218 218 }, 219 219 { 220 - .id = 0x02c8, 220 + .id = PCI_DEVICE_ID_INTEL_HDA_CML_LP, 221 221 .num_cores = 4, 222 222 .loader_ops = bxt_get_loader_ops, 223 223 .init = cnl_sst_dsp_init, ··· 225 225 .cleanup = cnl_sst_dsp_cleanup 226 226 }, 227 227 { 228 - .id = 0x06c8, 228 + .id = PCI_DEVICE_ID_INTEL_HDA_CML_H, 229 229 .num_cores = 4, 230 230 .loader_ops = bxt_get_loader_ops, 231 231 .init = cnl_sst_dsp_init,
+2 -1
sound/soc/intel/skylake/skl-pcm.c
··· 13 13 #include <linux/pci.h> 14 14 #include <linux/pm_runtime.h> 15 15 #include <linux/delay.h> 16 + #include <sound/hdaudio.h> 16 17 #include <sound/pcm_params.h> 17 18 #include <sound/soc.h> 18 19 #include "skl.h" ··· 153 152 * The recommended SDxFMT programming sequence for BXT 154 153 * platforms is to couple the stream before writing the format 155 154 */ 156 - if (IS_BXT(skl->pci)) { 155 + if (HDA_CONTROLLER_IS_APL(skl->pci)) { 157 156 snd_hdac_ext_stream_decouple(bus, stream, false); 158 157 err = snd_hdac_stream_setup(hdac_stream(stream)); 159 158 snd_hdac_ext_stream_decouple(bus, stream, true);
+10 -26
sound/soc/intel/skylake/skl.c
··· 608 608 static void init_skl_xtal_rate(int pci_id) 609 609 { 610 610 switch (pci_id) { 611 - case 0x9d70: 612 - case 0x9d71: 611 + case PCI_DEVICE_ID_INTEL_HDA_SKL_LP: 612 + case PCI_DEVICE_ID_INTEL_HDA_KBL_LP: 613 613 skl_clk_src[0].rate = 24000000; 614 614 return; 615 615 ··· 1145 1145 /* PCI IDs */ 1146 1146 static const struct pci_device_id skl_ids[] = { 1147 1147 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_SKL) 1148 - /* Sunrise Point-LP */ 1149 - { PCI_DEVICE(0x8086, 0x9d70), 1150 - .driver_data = (unsigned long)&snd_soc_acpi_intel_skl_machines}, 1148 + { PCI_DEVICE_DATA(INTEL, HDA_SKL_LP, &snd_soc_acpi_intel_skl_machines) }, 1151 1149 #endif 1152 1150 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_APL) 1153 - /* BXT-P */ 1154 - { PCI_DEVICE(0x8086, 0x5a98), 1155 - .driver_data = (unsigned long)&snd_soc_acpi_intel_bxt_machines}, 1151 + { PCI_DEVICE_DATA(INTEL, HDA_APL, &snd_soc_acpi_intel_bxt_machines) }, 1156 1152 #endif 1157 1153 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_KBL) 1158 - /* KBL */ 1159 - { PCI_DEVICE(0x8086, 0x9D71), 1160 - .driver_data = (unsigned long)&snd_soc_acpi_intel_kbl_machines}, 1154 + { PCI_DEVICE_DATA(INTEL, HDA_KBL_LP, &snd_soc_acpi_intel_kbl_machines) }, 1161 1155 #endif 1162 1156 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_GLK) 1163 - /* GLK */ 1164 - { PCI_DEVICE(0x8086, 0x3198), 1165 - .driver_data = (unsigned long)&snd_soc_acpi_intel_glk_machines}, 1157 + { PCI_DEVICE_DATA(INTEL, HDA_GML, &snd_soc_acpi_intel_glk_machines) }, 1166 1158 #endif 1167 1159 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_CNL) 1168 - /* CNL */ 1169 - { PCI_DEVICE(0x8086, 0x9dc8), 1170 - .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, 1160 + { PCI_DEVICE_DATA(INTEL, HDA_CNL_LP, &snd_soc_acpi_intel_cnl_machines) }, 1171 1161 #endif 1172 1162 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_CFL) 1173 - /* CFL */ 1174 - { PCI_DEVICE(0x8086, 0xa348), 1175 - .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, 1163 + { PCI_DEVICE_DATA(INTEL, HDA_CNL_H, &snd_soc_acpi_intel_cnl_machines) }, 1176 1164 #endif 1177 1165 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_CML_LP) 1178 - /* CML-LP */ 1179 - { PCI_DEVICE(0x8086, 0x02c8), 1180 - .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, 1166 + { PCI_DEVICE_DATA(INTEL, HDA_CML_LP, &snd_soc_acpi_intel_cnl_machines) }, 1181 1167 #endif 1182 1168 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_CML_H) 1183 - /* CML-H */ 1184 - { PCI_DEVICE(0x8086, 0x06c8), 1185 - .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, 1169 + { PCI_DEVICE_DATA(INTEL, HDA_CML_H, &snd_soc_acpi_intel_cnl_machines) }, 1186 1170 #endif 1187 1171 { 0, } 1188 1172 };
+16
sound/soc/sof/intel/Kconfig
··· 262 262 Say Y if you have such a device. 263 263 If unsure select "N". 264 264 265 + config SND_SOC_SOF_INTEL_LNL 266 + tristate 267 + select SND_SOC_SOF_HDA_COMMON 268 + select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE 269 + select SND_SOC_SOF_INTEL_IPC4 270 + 271 + config SND_SOC_SOF_LUNARLAKE 272 + tristate "SOF support for Lunarlake" 273 + default SND_SOC_SOF_PCI 274 + select SND_SOC_SOF_INTEL_LNL 275 + help 276 + This adds support for Sound Open Firmware for Intel(R) platforms 277 + using the Lunarlake processors. 278 + Say Y if you have such a device. 279 + If unsure select "N". 280 + 265 281 config SND_SOC_SOF_HDA_COMMON 266 282 tristate 267 283 select SND_SOC_SOF_INTEL_COMMON
+3 -1
sound/soc/sof/intel/Makefile
··· 7 7 hda-dsp.o hda-ipc.o hda-ctrl.o hda-pcm.o \ 8 8 hda-dai.o hda-dai-ops.o hda-bus.o \ 9 9 skl.o hda-loader-skl.o \ 10 - apl.o cnl.o tgl.o icl.o mtl.o hda-common-ops.o 10 + apl.o cnl.o tgl.o icl.o mtl.o lnl.o hda-common-ops.o 11 11 12 12 snd-sof-intel-hda-mlink-objs := hda-mlink.o 13 13 ··· 31 31 snd-sof-pci-intel-icl-objs := pci-icl.o 32 32 snd-sof-pci-intel-tgl-objs := pci-tgl.o 33 33 snd-sof-pci-intel-mtl-objs := pci-mtl.o 34 + snd-sof-pci-intel-lnl-objs := pci-lnl.o 34 35 35 36 obj-$(CONFIG_SND_SOC_SOF_MERRIFIELD) += snd-sof-pci-intel-tng.o 36 37 obj-$(CONFIG_SND_SOC_SOF_INTEL_SKL) += snd-sof-pci-intel-skl.o ··· 40 39 obj-$(CONFIG_SND_SOC_SOF_INTEL_ICL) += snd-sof-pci-intel-icl.o 41 40 obj-$(CONFIG_SND_SOC_SOF_INTEL_TGL) += snd-sof-pci-intel-tgl.o 42 41 obj-$(CONFIG_SND_SOC_SOF_INTEL_MTL) += snd-sof-pci-intel-mtl.o 42 + obj-$(CONFIG_SND_SOC_SOF_INTEL_LNL) += snd-sof-pci-intel-lnl.o
+2
sound/soc/sof/intel/cnl.c
··· 466 466 .read_sdw_lcount = hda_sdw_check_lcount_common, 467 467 .enable_sdw_irq = hda_common_enable_sdw_irq, 468 468 .check_sdw_irq = hda_common_check_sdw_irq, 469 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 469 470 .check_ipc_irq = hda_dsp_check_ipc_irq, 470 471 .cl_init = cl_dsp_init, 471 472 .power_down_dsp = hda_power_down_dsp, ··· 502 501 .read_sdw_lcount = hda_sdw_check_lcount_common, 503 502 .enable_sdw_irq = hda_common_enable_sdw_irq, 504 503 .check_sdw_irq = hda_common_check_sdw_irq, 504 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 505 505 .check_ipc_irq = hda_dsp_check_ipc_irq, 506 506 .cl_init = cl_dsp_init, 507 507 .power_down_dsp = hda_power_down_dsp,
+176 -3
sound/soc/sof/intel/hda-dai-ops.c
··· 7 7 8 8 #include <sound/pcm_params.h> 9 9 #include <sound/hdaudio_ext.h> 10 + #include <sound/hda-mlink.h> 10 11 #include <sound/sof/ipc4/header.h> 11 12 #include <uapi/sound/sof/header.h> 12 13 #include "../ipc4-priv.h" ··· 145 144 struct snd_soc_dai *cpu_dai, 146 145 struct snd_pcm_substream *substream) 147 146 { 147 + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 148 + struct snd_soc_dai *dai; 148 149 struct hdac_ext_stream *hext_stream; 149 150 150 - hext_stream = hda_link_stream_assign(sof_to_bus(sdev), substream); 151 + /* only allocate a stream_tag for the first DAI in the dailink */ 152 + dai = asoc_rtd_to_cpu(rtd, 0); 153 + if (dai == cpu_dai) 154 + hext_stream = hda_link_stream_assign(sof_to_bus(sdev), substream); 155 + else 156 + hext_stream = snd_soc_dai_get_dma_data(dai, substream); 157 + 151 158 if (!hext_stream) 152 159 return NULL; 153 160 ··· 168 159 struct snd_pcm_substream *substream) 169 160 { 170 161 struct hdac_ext_stream *hext_stream = hda_get_hext_stream(sdev, cpu_dai, substream); 162 + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 163 + struct snd_soc_dai *dai; 171 164 165 + /* only release a stream_tag for the first DAI in the dailink */ 166 + dai = asoc_rtd_to_cpu(rtd, 0); 167 + if (dai == cpu_dai) 168 + snd_hdac_ext_stream_release(hext_stream, HDAC_EXT_STREAM_TYPE_LINK); 172 169 snd_soc_dai_set_dma_data(cpu_dai, substream, NULL); 173 - snd_hdac_ext_stream_release(hext_stream, HDAC_EXT_STREAM_TYPE_LINK); 174 170 } 175 171 176 172 static void hda_setup_hext_stream(struct snd_sof_dev *sdev, struct hdac_ext_stream *hext_stream, ··· 233 219 return snd_hdac_ext_bus_get_hlink_by_name(bus, codec_dai->component->name); 234 220 } 235 221 222 + static unsigned int generic_calc_stream_format(struct snd_sof_dev *sdev, 223 + struct snd_pcm_substream *substream, 224 + struct snd_pcm_hw_params *params) 225 + { 226 + unsigned int format_val; 227 + 228 + format_val = snd_hdac_calc_stream_format(params_rate(params), params_channels(params), 229 + params_format(params), 230 + params_physical_width(params), 231 + 0); 232 + 233 + dev_dbg(sdev->dev, "format_val=%#x, rate=%d, ch=%d, format=%d\n", format_val, 234 + params_rate(params), params_channels(params), params_format(params)); 235 + 236 + return format_val; 237 + } 238 + 239 + static unsigned int dmic_calc_stream_format(struct snd_sof_dev *sdev, 240 + struct snd_pcm_substream *substream, 241 + struct snd_pcm_hw_params *params) 242 + { 243 + unsigned int format_val; 244 + snd_pcm_format_t format; 245 + unsigned int channels; 246 + unsigned int width; 247 + 248 + channels = params_channels(params); 249 + format = params_format(params); 250 + width = params_physical_width(params); 251 + 252 + if (format == SNDRV_PCM_FORMAT_S16_LE) { 253 + format = SNDRV_PCM_FORMAT_S32_LE; 254 + channels /= 2; 255 + width = 32; 256 + } 257 + 258 + format_val = snd_hdac_calc_stream_format(params_rate(params), channels, 259 + format, 260 + width, 261 + 0); 262 + 263 + dev_dbg(sdev->dev, "format_val=%#x, rate=%d, ch=%d, format=%d\n", format_val, 264 + params_rate(params), channels, format); 265 + 266 + return format_val; 267 + } 268 + 269 + static struct hdac_ext_link *ssp_get_hlink(struct snd_sof_dev *sdev, 270 + struct snd_pcm_substream *substream) 271 + { 272 + struct hdac_bus *bus = sof_to_bus(sdev); 273 + 274 + return hdac_bus_eml_ssp_get_hlink(bus); 275 + } 276 + 277 + static struct hdac_ext_link *dmic_get_hlink(struct snd_sof_dev *sdev, 278 + struct snd_pcm_substream *substream) 279 + { 280 + struct hdac_bus *bus = sof_to_bus(sdev); 281 + 282 + return hdac_bus_eml_dmic_get_hlink(bus); 283 + } 284 + 285 + static struct hdac_ext_link *sdw_get_hlink(struct snd_sof_dev *sdev, 286 + struct snd_pcm_substream *substream) 287 + { 288 + struct hdac_bus *bus = sof_to_bus(sdev); 289 + 290 + return hdac_bus_eml_sdw_get_hlink(bus); 291 + } 292 + 236 293 static int hda_ipc4_pre_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai, 237 294 struct snd_pcm_substream *substream, int cmd) 238 295 { ··· 318 233 swidget = w->dobj.private; 319 234 pipe_widget = swidget->spipe->pipe_widget; 320 235 pipeline = pipe_widget->private; 236 + 237 + if (pipe_widget->instance_id < 0) 238 + return 0; 321 239 322 240 mutex_lock(&ipc4_data->pipeline_state_mutex); 323 241 ··· 385 297 pipe_widget = swidget->spipe->pipe_widget; 386 298 pipeline = pipe_widget->private; 387 299 300 + if (pipe_widget->instance_id < 0) 301 + return 0; 302 + 388 303 mutex_lock(&ipc4_data->pipeline_state_mutex); 389 304 390 305 switch (cmd) { ··· 434 343 return ret; 435 344 } 436 345 346 + static struct hdac_ext_stream *sdw_hda_ipc4_get_hext_stream(struct snd_sof_dev *sdev, 347 + struct snd_soc_dai *cpu_dai, 348 + struct snd_pcm_substream *substream) 349 + { 350 + struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); 351 + struct snd_sof_widget *swidget = w->dobj.private; 352 + struct snd_sof_dai *dai = swidget->private; 353 + struct sof_ipc4_copier *ipc4_copier = dai->private; 354 + struct sof_ipc4_alh_configuration_blob *blob; 355 + 356 + blob = (struct sof_ipc4_alh_configuration_blob *)ipc4_copier->copier_config; 357 + 358 + /* 359 + * Starting with ACE_2_0, re-setting the device_count is mandatory to avoid using 360 + * the multi-gateway firmware configuration. The DMA hardware can take care of 361 + * multiple links without needing any firmware assistance 362 + */ 363 + blob->alh_cfg.device_count = 1; 364 + 365 + return hda_ipc4_get_hext_stream(sdev, cpu_dai, substream); 366 + } 367 + 437 368 static const struct hda_dai_widget_dma_ops hda_ipc4_dma_ops = { 438 369 .get_hext_stream = hda_ipc4_get_hext_stream, 439 370 .assign_hext_stream = hda_assign_hext_stream, ··· 468 355 .codec_dai_set_stream = hda_codec_dai_set_stream, 469 356 .calc_stream_format = hda_calc_stream_format, 470 357 .get_hlink = hda_get_hlink, 358 + }; 359 + 360 + static const struct hda_dai_widget_dma_ops ssp_ipc4_dma_ops = { 361 + .get_hext_stream = hda_ipc4_get_hext_stream, 362 + .assign_hext_stream = hda_assign_hext_stream, 363 + .release_hext_stream = hda_release_hext_stream, 364 + .setup_hext_stream = hda_setup_hext_stream, 365 + .reset_hext_stream = hda_reset_hext_stream, 366 + .pre_trigger = hda_ipc4_pre_trigger, 367 + .trigger = hda_trigger, 368 + .post_trigger = hda_ipc4_post_trigger, 369 + .calc_stream_format = generic_calc_stream_format, 370 + .get_hlink = ssp_get_hlink, 371 + }; 372 + 373 + static const struct hda_dai_widget_dma_ops dmic_ipc4_dma_ops = { 374 + .get_hext_stream = hda_ipc4_get_hext_stream, 375 + .assign_hext_stream = hda_assign_hext_stream, 376 + .release_hext_stream = hda_release_hext_stream, 377 + .setup_hext_stream = hda_setup_hext_stream, 378 + .reset_hext_stream = hda_reset_hext_stream, 379 + .pre_trigger = hda_ipc4_pre_trigger, 380 + .trigger = hda_trigger, 381 + .post_trigger = hda_ipc4_post_trigger, 382 + .calc_stream_format = dmic_calc_stream_format, 383 + .get_hlink = dmic_get_hlink, 384 + }; 385 + 386 + static const struct hda_dai_widget_dma_ops sdw_ipc4_dma_ops = { 387 + .get_hext_stream = sdw_hda_ipc4_get_hext_stream, 388 + .assign_hext_stream = hda_assign_hext_stream, 389 + .release_hext_stream = hda_release_hext_stream, 390 + .setup_hext_stream = hda_setup_hext_stream, 391 + .reset_hext_stream = hda_reset_hext_stream, 392 + .pre_trigger = hda_ipc4_pre_trigger, 393 + .trigger = hda_trigger, 394 + .post_trigger = hda_ipc4_post_trigger, 395 + .calc_stream_format = generic_calc_stream_format, 396 + .get_hlink = sdw_get_hlink, 471 397 }; 472 398 473 399 static const struct hda_dai_widget_dma_ops hda_ipc4_chain_dma_ops = { ··· 611 459 case SOF_INTEL_IPC4: 612 460 { 613 461 struct sof_ipc4_copier *ipc4_copier = sdai->private; 462 + const struct sof_intel_dsp_desc *chip; 614 463 615 - if (ipc4_copier->dai_type == SOF_DAI_INTEL_HDA) { 464 + chip = get_chip_info(sdev->pdata); 465 + 466 + switch (ipc4_copier->dai_type) { 467 + case SOF_DAI_INTEL_HDA: 468 + { 616 469 struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget; 617 470 struct sof_ipc4_pipeline *pipeline = pipe_widget->private; 618 471 ··· 625 468 return &hda_ipc4_chain_dma_ops; 626 469 627 470 return &hda_ipc4_dma_ops; 471 + } 472 + case SOF_DAI_INTEL_SSP: 473 + if (chip->hw_ip_version < SOF_INTEL_ACE_2_0) 474 + return NULL; 475 + return &ssp_ipc4_dma_ops; 476 + case SOF_DAI_INTEL_DMIC: 477 + if (chip->hw_ip_version < SOF_INTEL_ACE_2_0) 478 + return NULL; 479 + return &dmic_ipc4_dma_ops; 480 + case SOF_DAI_INTEL_ALH: 481 + if (chip->hw_ip_version < SOF_INTEL_ACE_2_0) 482 + return NULL; 483 + return &sdw_ipc4_dma_ops; 484 + 485 + default: 486 + break; 628 487 } 629 488 break; 630 489 }
+210 -1
sound/soc/sof/intel/hda-dai.c
··· 10 10 11 11 #include <sound/pcm_params.h> 12 12 #include <sound/hdaudio_ext.h> 13 + #include <sound/hda-mlink.h> 14 + #include <sound/hda_register.h> 13 15 #include <sound/intel-nhlt.h> 14 16 #include <sound/sof/ipc4/header.h> 15 17 #include <uapi/sound/sof/header.h> ··· 332 330 333 331 #endif 334 332 333 + static struct sof_ipc4_copier *widget_to_copier(struct snd_soc_dapm_widget *w) 334 + { 335 + struct snd_sof_widget *swidget = w->dobj.private; 336 + struct snd_sof_dai *sdai = swidget->private; 337 + struct sof_ipc4_copier *ipc4_copier = (struct sof_ipc4_copier *)sdai->private; 338 + 339 + return ipc4_copier; 340 + } 341 + 342 + static int non_hda_dai_hw_params(struct snd_pcm_substream *substream, 343 + struct snd_pcm_hw_params *params, 344 + struct snd_soc_dai *cpu_dai) 345 + { 346 + struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); 347 + struct sof_ipc4_dma_config_tlv *dma_config_tlv; 348 + const struct hda_dai_widget_dma_ops *ops; 349 + struct sof_ipc4_dma_config *dma_config; 350 + struct sof_ipc4_copier *ipc4_copier; 351 + struct hdac_ext_stream *hext_stream; 352 + struct hdac_stream *hstream; 353 + struct snd_sof_dev *sdev; 354 + int stream_id; 355 + int ret; 356 + 357 + ops = hda_dai_get_ops(substream, cpu_dai); 358 + if (!ops) { 359 + dev_err(cpu_dai->dev, "DAI widget ops not set\n"); 360 + return -EINVAL; 361 + } 362 + 363 + /* use HDaudio stream handling */ 364 + ret = hda_dai_hw_params(substream, params, cpu_dai); 365 + if (ret < 0) { 366 + dev_err(cpu_dai->dev, "%s: hda_dai_hw_params failed: %d\n", __func__, ret); 367 + return ret; 368 + } 369 + 370 + /* get stream_id */ 371 + sdev = widget_to_sdev(w); 372 + hext_stream = ops->get_hext_stream(sdev, cpu_dai, substream); 373 + 374 + if (!hext_stream) { 375 + dev_err(cpu_dai->dev, "%s: no hext_stream found\n", __func__); 376 + return -ENODEV; 377 + } 378 + 379 + hstream = &hext_stream->hstream; 380 + stream_id = hstream->stream_tag; 381 + 382 + if (!stream_id) { 383 + dev_err(cpu_dai->dev, "%s: no stream_id allocated\n", __func__); 384 + return -ENODEV; 385 + } 386 + 387 + /* configure TLV */ 388 + ipc4_copier = widget_to_copier(w); 389 + 390 + dma_config_tlv = &ipc4_copier->dma_config_tlv; 391 + dma_config_tlv->type = SOF_IPC4_GTW_DMA_CONFIG_ID; 392 + /* dma_config_priv_size is zero */ 393 + dma_config_tlv->length = sizeof(dma_config_tlv->dma_config); 394 + 395 + dma_config = &dma_config_tlv->dma_config; 396 + 397 + dma_config->dma_method = SOF_IPC4_DMA_METHOD_HDA; 398 + dma_config->pre_allocated_by_host = 1; 399 + dma_config->dma_channel_id = stream_id - 1; 400 + dma_config->stream_id = stream_id; 401 + dma_config->dma_stream_channel_map.device_count = 0; /* mapping not used */ 402 + dma_config->dma_priv_config_size = 0; 403 + 404 + return 0; 405 + } 406 + 407 + static int non_hda_dai_prepare(struct snd_pcm_substream *substream, 408 + struct snd_soc_dai *cpu_dai) 409 + { 410 + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 411 + int stream = substream->stream; 412 + 413 + return non_hda_dai_hw_params(substream, &rtd->dpcm[stream].hw_params, cpu_dai); 414 + } 415 + 416 + static const struct snd_soc_dai_ops ssp_dai_ops = { 417 + .hw_params = non_hda_dai_hw_params, 418 + .hw_free = hda_dai_hw_free, 419 + .trigger = hda_dai_trigger, 420 + .prepare = non_hda_dai_prepare, 421 + }; 422 + 423 + static const struct snd_soc_dai_ops dmic_dai_ops = { 424 + .hw_params = non_hda_dai_hw_params, 425 + .hw_free = hda_dai_hw_free, 426 + .trigger = hda_dai_trigger, 427 + .prepare = non_hda_dai_prepare, 428 + }; 429 + 430 + int sdw_hda_dai_hw_params(struct snd_pcm_substream *substream, 431 + struct snd_pcm_hw_params *params, 432 + struct snd_soc_dai *cpu_dai, 433 + int link_id) 434 + { 435 + struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); 436 + const struct hda_dai_widget_dma_ops *ops; 437 + struct hdac_ext_stream *hext_stream; 438 + struct snd_sof_dev *sdev; 439 + int ret; 440 + 441 + ret = non_hda_dai_hw_params(substream, params, cpu_dai); 442 + if (ret < 0) { 443 + dev_err(cpu_dai->dev, "%s: non_hda_dai_hw_params failed %d\n", __func__, ret); 444 + return ret; 445 + } 446 + 447 + ops = hda_dai_get_ops(substream, cpu_dai); 448 + sdev = widget_to_sdev(w); 449 + hext_stream = ops->get_hext_stream(sdev, cpu_dai, substream); 450 + 451 + if (!hext_stream) 452 + return -ENODEV; 453 + 454 + /* in the case of SoundWire we need to program the PCMSyCM registers */ 455 + ret = hdac_bus_eml_sdw_map_stream_ch(sof_to_bus(sdev), link_id, cpu_dai->id, 456 + GENMASK(params_channels(params) - 1, 0), 457 + hdac_stream(hext_stream)->stream_tag, 458 + substream->stream); 459 + if (ret < 0) { 460 + dev_err(cpu_dai->dev, "%s: hdac_bus_eml_sdw_map_stream_ch failed %d\n", 461 + __func__, ret); 462 + return ret; 463 + } 464 + 465 + return 0; 466 + } 467 + 468 + int sdw_hda_dai_hw_free(struct snd_pcm_substream *substream, 469 + struct snd_soc_dai *cpu_dai, 470 + int link_id) 471 + { 472 + struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); 473 + struct snd_sof_dev *sdev; 474 + int ret; 475 + 476 + ret = hda_dai_hw_free(substream, cpu_dai); 477 + if (ret < 0) { 478 + dev_err(cpu_dai->dev, "%s: non_hda_dai_hw_free failed %d\n", __func__, ret); 479 + return ret; 480 + } 481 + 482 + sdev = widget_to_sdev(w); 483 + 484 + /* in the case of SoundWire we need to reset the PCMSyCM registers */ 485 + ret = hdac_bus_eml_sdw_map_stream_ch(sof_to_bus(sdev), link_id, cpu_dai->id, 486 + 0, 0, substream->stream); 487 + if (ret < 0) { 488 + dev_err(cpu_dai->dev, "%s: hdac_bus_eml_sdw_map_stream_ch failed %d\n", 489 + __func__, ret); 490 + return ret; 491 + } 492 + 493 + return 0; 494 + } 495 + 496 + int sdw_hda_dai_trigger(struct snd_pcm_substream *substream, int cmd, 497 + struct snd_soc_dai *cpu_dai) 498 + { 499 + return hda_dai_trigger(substream, cmd, cpu_dai); 500 + } 501 + 335 502 static int hda_dai_suspend(struct hdac_bus *bus) 336 503 { 337 504 struct snd_soc_pcm_runtime *rtd; ··· 555 384 return 0; 556 385 } 557 386 558 - #endif 387 + static void ssp_set_dai_drv_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *ops) 388 + { 389 + const struct sof_intel_dsp_desc *chip; 390 + int i; 391 + 392 + chip = get_chip_info(sdev->pdata); 393 + 394 + if (chip->hw_ip_version >= SOF_INTEL_ACE_2_0) { 395 + for (i = 0; i < ops->num_drv; i++) { 396 + if (strstr(ops->drv[i].name, "SSP")) 397 + ops->drv[i].ops = &ssp_dai_ops; 398 + } 399 + } 400 + } 401 + 402 + static void dmic_set_dai_drv_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *ops) 403 + { 404 + const struct sof_intel_dsp_desc *chip; 405 + int i; 406 + 407 + chip = get_chip_info(sdev->pdata); 408 + 409 + if (chip->hw_ip_version >= SOF_INTEL_ACE_2_0) { 410 + for (i = 0; i < ops->num_drv; i++) { 411 + if (strstr(ops->drv[i].name, "DMIC")) 412 + ops->drv[i].ops = &dmic_dai_ops; 413 + } 414 + } 415 + } 416 + 417 + #else 418 + 419 + static inline void ssp_set_dai_drv_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *ops) {} 420 + static inline void dmic_set_dai_drv_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *ops) {} 421 + 422 + #endif /* CONFIG_SND_SOC_SOF_HDA_LINK */ 559 423 560 424 void hda_set_dai_drv_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *ops) 561 425 { ··· 604 398 ops->drv[i].ops = &hda_dai_ops; 605 399 #endif 606 400 } 401 + 402 + ssp_set_dai_drv_ops(sdev, ops); 403 + dmic_set_dai_drv_ops(sdev, ops); 607 404 608 405 if (sdev->pdata->ipc_type == SOF_INTEL_IPC4 && !hda_use_tplg_nhlt) { 609 406 struct sof_ipc4_fw_data *ipc4_data = sdev->private;
+38 -7
sound/soc/sof/intel/hda-mlink.c
··· 331 331 return !!(val & cmdsync_mask); 332 332 } 333 333 334 - static void hdaml_link_set_lsdiid(u32 __iomem *lsdiid, int dev_num) 334 + static u16 hdaml_link_get_lsdiid(u16 __iomem *lsdiid) 335 335 { 336 - u32 val; 336 + return readw(lsdiid); 337 + } 337 338 338 - val = readl(lsdiid); 339 + static void hdaml_link_set_lsdiid(u16 __iomem *lsdiid, int dev_num) 340 + { 341 + u16 val; 342 + 343 + val = readw(lsdiid); 339 344 val |= BIT(dev_num); 340 345 341 - writel(val, lsdiid); 346 + writew(val, lsdiid); 342 347 } 343 348 344 349 static void hdaml_shim_map_stream_ch(u16 __iomem *pcmsycm, int lchan, int hchan, ··· 757 752 } 758 753 EXPORT_SYMBOL_NS(hdac_bus_eml_sdw_power_down_unlocked, SND_SOC_SOF_HDA_MLINK); 759 754 755 + int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid) 756 + { 757 + struct hdac_ext2_link *h2link; 758 + struct hdac_ext_link *hlink; 759 + 760 + h2link = find_ext2_link(bus, true, AZX_REG_ML_LEPTR_ID_SDW); 761 + if (!h2link) 762 + return -ENODEV; 763 + 764 + hlink = &h2link->hext_link; 765 + 766 + *lsdiid = hdaml_link_get_lsdiid(hlink->ml_addr + AZX_REG_ML_LSDIID_OFFSET(sublink)); 767 + 768 + return 0; 769 + } EXPORT_SYMBOL_NS(hdac_bus_eml_sdw_get_lsdiid_unlocked, SND_SOC_SOF_HDA_MLINK); 770 + 760 771 int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) 761 772 { 762 773 struct hdac_ext2_link *h2link; ··· 802 781 { 803 782 struct hdac_ext2_link *h2link; 804 783 u16 __iomem *pcmsycm; 784 + int hchan; 785 + int lchan; 805 786 u16 val; 806 787 807 788 h2link = find_ext2_link(bus, true, AZX_REG_ML_LEPTR_ID_SDW); ··· 814 791 h2link->instance_offset * sublink + 815 792 AZX_REG_SDW_SHIM_PCMSyCM(y); 816 793 794 + if (channel_mask) { 795 + hchan = __fls(channel_mask); 796 + lchan = __ffs(channel_mask); 797 + } else { 798 + hchan = 0; 799 + lchan = 0; 800 + } 801 + 817 802 mutex_lock(&h2link->eml_lock); 818 803 819 - hdaml_shim_map_stream_ch(pcmsycm, 0, hweight32(channel_mask), 804 + hdaml_shim_map_stream_ch(pcmsycm, lchan, hchan, 820 805 stream_id, dir); 821 806 822 807 mutex_unlock(&h2link->eml_lock); 823 808 824 809 val = readw(pcmsycm); 825 810 826 - dev_dbg(bus->dev, "channel_mask %#x stream_id %d dir %d pcmscm %#x\n", 827 - channel_mask, stream_id, dir, val); 811 + dev_dbg(bus->dev, "sublink %d channel_mask %#x stream_id %d dir %d pcmscm %#x\n", 812 + sublink, channel_mask, stream_id, dir, val); 828 813 829 814 return 0; 830 815 } EXPORT_SYMBOL_NS(hdac_bus_eml_sdw_map_stream_ch, SND_SOC_SOF_HDA_MLINK);
+52 -6
sound/soc/sof/intel/hda.c
··· 71 71 BIT(SOF_DAI_INTEL_HDA) | BIT(SOF_DAI_INTEL_ALH); 72 72 interface_mask[1] = BIT(SOF_DAI_INTEL_HDA); 73 73 break; 74 + case SOF_INTEL_ACE_2_0: 75 + interface_mask[0] = BIT(SOF_DAI_INTEL_SSP) | BIT(SOF_DAI_INTEL_DMIC) | 76 + BIT(SOF_DAI_INTEL_HDA) | BIT(SOF_DAI_INTEL_ALH); 77 + interface_mask[1] = interface_mask[0]; /* all interfaces accessible without DSP */ 78 + break; 74 79 default: 75 80 break; 76 81 } ··· 110 105 111 106 struct sdw_intel_ops sdw_callback = { 112 107 .params_stream = sdw_params_stream, 108 + }; 109 + 110 + static int sdw_ace2x_params_stream(struct device *dev, 111 + struct sdw_intel_stream_params_data *params_data) 112 + { 113 + return sdw_hda_dai_hw_params(params_data->substream, 114 + params_data->hw_params, 115 + params_data->dai, 116 + params_data->link_id); 117 + } 118 + 119 + static int sdw_ace2x_free_stream(struct device *dev, 120 + struct sdw_intel_stream_free_data *free_data) 121 + { 122 + return sdw_hda_dai_hw_free(free_data->substream, 123 + free_data->dai, 124 + free_data->link_id); 125 + } 126 + 127 + static int sdw_ace2x_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai) 128 + { 129 + return sdw_hda_dai_trigger(substream, cmd, dai); 130 + } 131 + 132 + static struct sdw_intel_ops sdw_ace2x_callback = { 133 + .params_stream = sdw_ace2x_params_stream, 134 + .free_stream = sdw_ace2x_free_stream, 135 + .trigger = sdw_ace2x_trigger, 113 136 }; 114 137 115 138 void hda_common_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable) ··· 207 174 res.shim_base = hdev->desc->sdw_shim_base; 208 175 res.alh_base = hdev->desc->sdw_alh_base; 209 176 res.ext = false; 177 + res.ops = &sdw_callback; 210 178 } else { 211 179 /* 212 180 * retrieve eml_lock needed to protect shared registers ··· 225 191 */ 226 192 res.hw_ops = &sdw_intel_lnl_hw_ops; 227 193 res.ext = true; 194 + res.ops = &sdw_ace2x_callback; 195 + 228 196 } 229 197 res.irq = sdev->ipc_irq; 230 198 res.handle = hdev->info.handle; 231 199 res.parent = sdev->dev; 232 - res.ops = &sdw_callback; 200 + 233 201 res.dev = sdev->dev; 234 202 res.clock_stop_quirks = sdw_clock_stop_quirks; 235 203 res.hbus = sof_to_bus(sdev); ··· 399 363 return sdw_intel_thread(irq, context); 400 364 } 401 365 402 - static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev) 366 + bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev) 403 367 { 404 - u32 interface_mask = hda_get_interface_mask(sdev); 405 368 struct sof_intel_hda_dev *hdev; 406 - 407 - if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH))) 408 - return false; 409 369 410 370 hdev = sdev->pdata->hw_pdata; 411 371 if (hdev->sdw && 412 372 snd_sof_dsp_read(sdev, HDA_DSP_BAR, 413 373 hdev->desc->sdw_shim_base + SDW_SHIM_WAKESTS)) 414 374 return true; 375 + 376 + return false; 377 + } 378 + 379 + static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev) 380 + { 381 + u32 interface_mask = hda_get_interface_mask(sdev); 382 + const struct sof_intel_dsp_desc *chip; 383 + 384 + if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH))) 385 + return false; 386 + 387 + if (chip && chip->check_sdw_wakeen_irq) 388 + return chip->check_sdw_wakeen_irq(sdev); 415 389 416 390 return false; 417 391 }
+21
sound/soc/sof/intel/hda.h
··· 785 785 int hda_sdw_startup(struct snd_sof_dev *sdev); 786 786 void hda_common_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable); 787 787 void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable); 788 + bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev); 788 789 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev); 789 790 bool hda_common_check_sdw_irq(struct snd_sof_dev *sdev); 790 791 ··· 814 813 { 815 814 } 816 815 816 + static inline bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev) 817 + { 818 + return false; 819 + } 820 + 817 821 static inline void hda_sdw_process_wakeen(struct snd_sof_dev *sdev) 818 822 { 819 823 } ··· 829 823 } 830 824 831 825 #endif 826 + 827 + int sdw_hda_dai_hw_params(struct snd_pcm_substream *substream, 828 + struct snd_pcm_hw_params *params, 829 + struct snd_soc_dai *cpu_dai, 830 + int link_id); 831 + 832 + int sdw_hda_dai_hw_free(struct snd_pcm_substream *substream, 833 + struct snd_soc_dai *cpu_dai, 834 + int link_id); 835 + 836 + int sdw_hda_dai_trigger(struct snd_pcm_substream *substream, int cmd, 837 + struct snd_soc_dai *cpu_dai); 832 838 833 839 /* common dai driver */ 834 840 extern struct snd_soc_dai_driver skl_dai[]; ··· 863 845 int sof_icl_ops_init(struct snd_sof_dev *sdev); 864 846 extern struct snd_sof_dsp_ops sof_mtl_ops; 865 847 int sof_mtl_ops_init(struct snd_sof_dev *sdev); 848 + extern struct snd_sof_dsp_ops sof_lnl_ops; 849 + int sof_lnl_ops_init(struct snd_sof_dev *sdev); 866 850 867 851 extern const struct sof_intel_dsp_desc skl_chip_info; 868 852 extern const struct sof_intel_dsp_desc apl_chip_info; ··· 876 856 extern const struct sof_intel_dsp_desc jsl_chip_info; 877 857 extern const struct sof_intel_dsp_desc adls_chip_info; 878 858 extern const struct sof_intel_dsp_desc mtl_chip_info; 859 + extern const struct sof_intel_dsp_desc lnl_chip_info; 879 860 880 861 /* Probes support */ 881 862 #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_PROBES)
+1
sound/soc/sof/intel/icl.c
··· 188 188 .read_sdw_lcount = hda_sdw_check_lcount_common, 189 189 .enable_sdw_irq = hda_common_enable_sdw_irq, 190 190 .check_sdw_irq = hda_common_check_sdw_irq, 191 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 191 192 .check_ipc_irq = hda_dsp_check_ipc_irq, 192 193 .cl_init = cl_dsp_init, 193 194 .power_down_dsp = hda_power_down_dsp,
+189
sound/soc/sof/intel/lnl.c
··· 1 + // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 2 + // 3 + // Copyright(c) 2023 Intel Corporation. All rights reserved. 4 + 5 + /* 6 + * Hardware interface for audio DSP on LunarLake. 7 + */ 8 + 9 + #include <linux/firmware.h> 10 + #include <sound/hda_register.h> 11 + #include <sound/sof/ipc4/header.h> 12 + #include <trace/events/sof_intel.h> 13 + #include "../ipc4-priv.h" 14 + #include "../ops.h" 15 + #include "hda.h" 16 + #include "hda-ipc.h" 17 + #include "../sof-audio.h" 18 + #include "mtl.h" 19 + #include "hda.h" 20 + #include <sound/hda-mlink.h> 21 + 22 + /* LunarLake ops */ 23 + struct snd_sof_dsp_ops sof_lnl_ops; 24 + EXPORT_SYMBOL_NS(sof_lnl_ops, SND_SOC_SOF_INTEL_HDA_COMMON); 25 + 26 + static const struct snd_sof_debugfs_map lnl_dsp_debugfs[] = { 27 + {"hda", HDA_DSP_HDA_BAR, 0, 0x4000, SOF_DEBUGFS_ACCESS_ALWAYS}, 28 + {"pp", HDA_DSP_PP_BAR, 0, 0x1000, SOF_DEBUGFS_ACCESS_ALWAYS}, 29 + {"dsp", HDA_DSP_BAR, 0, 0x10000, SOF_DEBUGFS_ACCESS_ALWAYS}, 30 + }; 31 + 32 + /* this helps allows the DSP to setup DMIC/SSP */ 33 + static int hdac_bus_offload_dmic_ssp(struct hdac_bus *bus) 34 + { 35 + int ret; 36 + 37 + ret = hdac_bus_eml_enable_offload(bus, true, AZX_REG_ML_LEPTR_ID_INTEL_SSP, true); 38 + if (ret < 0) 39 + return ret; 40 + 41 + ret = hdac_bus_eml_enable_offload(bus, true, AZX_REG_ML_LEPTR_ID_INTEL_DMIC, true); 42 + if (ret < 0) 43 + return ret; 44 + 45 + return 0; 46 + } 47 + 48 + static int lnl_hda_dsp_probe(struct snd_sof_dev *sdev) 49 + { 50 + int ret; 51 + 52 + ret = hda_dsp_probe(sdev); 53 + if (ret < 0) 54 + return ret; 55 + 56 + return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev)); 57 + } 58 + 59 + static int lnl_hda_dsp_resume(struct snd_sof_dev *sdev) 60 + { 61 + int ret; 62 + 63 + ret = hda_dsp_resume(sdev); 64 + if (ret < 0) 65 + return ret; 66 + 67 + return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev)); 68 + } 69 + 70 + static int lnl_hda_dsp_runtime_resume(struct snd_sof_dev *sdev) 71 + { 72 + int ret; 73 + 74 + ret = hda_dsp_runtime_resume(sdev); 75 + if (ret < 0) 76 + return ret; 77 + 78 + return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev)); 79 + } 80 + 81 + int sof_lnl_ops_init(struct snd_sof_dev *sdev) 82 + { 83 + struct sof_ipc4_fw_data *ipc4_data; 84 + 85 + /* common defaults */ 86 + memcpy(&sof_lnl_ops, &sof_hda_common_ops, sizeof(struct snd_sof_dsp_ops)); 87 + 88 + /* probe */ 89 + sof_lnl_ops.probe = lnl_hda_dsp_probe; 90 + 91 + /* shutdown */ 92 + sof_lnl_ops.shutdown = hda_dsp_shutdown; 93 + 94 + /* doorbell */ 95 + sof_lnl_ops.irq_thread = mtl_ipc_irq_thread; 96 + 97 + /* ipc */ 98 + sof_lnl_ops.send_msg = mtl_ipc_send_msg; 99 + sof_lnl_ops.get_mailbox_offset = mtl_dsp_ipc_get_mailbox_offset; 100 + sof_lnl_ops.get_window_offset = mtl_dsp_ipc_get_window_offset; 101 + 102 + /* debug */ 103 + sof_lnl_ops.debug_map = lnl_dsp_debugfs; 104 + sof_lnl_ops.debug_map_count = ARRAY_SIZE(lnl_dsp_debugfs); 105 + sof_lnl_ops.dbg_dump = mtl_dsp_dump; 106 + sof_lnl_ops.ipc_dump = mtl_ipc_dump; 107 + 108 + /* pre/post fw run */ 109 + sof_lnl_ops.pre_fw_run = mtl_dsp_pre_fw_run; 110 + sof_lnl_ops.post_fw_run = mtl_dsp_post_fw_run; 111 + 112 + /* parse platform specific extended manifest */ 113 + sof_lnl_ops.parse_platform_ext_manifest = NULL; 114 + 115 + /* dsp core get/put */ 116 + /* TODO: add core_get and core_put */ 117 + 118 + /* PM */ 119 + sof_lnl_ops.resume = lnl_hda_dsp_resume; 120 + sof_lnl_ops.runtime_resume = lnl_hda_dsp_runtime_resume; 121 + 122 + sof_lnl_ops.get_stream_position = mtl_dsp_get_stream_hda_link_position; 123 + 124 + sdev->private = devm_kzalloc(sdev->dev, sizeof(struct sof_ipc4_fw_data), GFP_KERNEL); 125 + if (!sdev->private) 126 + return -ENOMEM; 127 + 128 + ipc4_data = sdev->private; 129 + ipc4_data->manifest_fw_hdr_offset = SOF_MAN4_FW_HDR_OFFSET; 130 + 131 + ipc4_data->mtrace_type = SOF_IPC4_MTRACE_INTEL_CAVS_2; 132 + 133 + /* External library loading support */ 134 + ipc4_data->load_library = hda_dsp_ipc4_load_library; 135 + 136 + /* set DAI ops */ 137 + hda_set_dai_drv_ops(sdev, &sof_lnl_ops); 138 + 139 + sof_lnl_ops.set_power_state = hda_dsp_set_power_state_ipc4; 140 + 141 + return 0; 142 + }; 143 + EXPORT_SYMBOL_NS(sof_lnl_ops_init, SND_SOC_SOF_INTEL_HDA_COMMON); 144 + 145 + /* Check if an SDW IRQ occurred */ 146 + static bool lnl_dsp_check_sdw_irq(struct snd_sof_dev *sdev) 147 + { 148 + struct hdac_bus *bus = sof_to_bus(sdev); 149 + 150 + return hdac_bus_eml_check_interrupt(bus, true, AZX_REG_ML_LEPTR_ID_SDW); 151 + } 152 + 153 + static void lnl_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable) 154 + { 155 + struct hdac_bus *bus = sof_to_bus(sdev); 156 + 157 + hdac_bus_eml_enable_interrupt(bus, true, AZX_REG_ML_LEPTR_ID_SDW, enable); 158 + } 159 + 160 + static int lnl_dsp_disable_interrupts(struct snd_sof_dev *sdev) 161 + { 162 + lnl_enable_sdw_irq(sdev, false); 163 + mtl_disable_ipc_interrupts(sdev); 164 + return mtl_enable_interrupts(sdev, false); 165 + } 166 + 167 + const struct sof_intel_dsp_desc lnl_chip_info = { 168 + .cores_num = 5, 169 + .init_core_mask = BIT(0), 170 + .host_managed_cores_mask = BIT(0), 171 + .ipc_req = MTL_DSP_REG_HFIPCXIDR, 172 + .ipc_req_mask = MTL_DSP_REG_HFIPCXIDR_BUSY, 173 + .ipc_ack = MTL_DSP_REG_HFIPCXIDA, 174 + .ipc_ack_mask = MTL_DSP_REG_HFIPCXIDA_DONE, 175 + .ipc_ctl = MTL_DSP_REG_HFIPCXCTL, 176 + .rom_status_reg = MTL_DSP_ROM_STS, 177 + .rom_init_timeout = 300, 178 + .ssp_count = MTL_SSP_COUNT, 179 + .d0i3_offset = MTL_HDA_VS_D0I3C, 180 + .read_sdw_lcount = hda_sdw_check_lcount_ext, 181 + .enable_sdw_irq = lnl_enable_sdw_irq, 182 + .check_sdw_irq = lnl_dsp_check_sdw_irq, 183 + .check_ipc_irq = mtl_dsp_check_ipc_irq, 184 + .cl_init = mtl_dsp_cl_init, 185 + .power_down_dsp = mtl_power_down_dsp, 186 + .disable_interrupts = lnl_dsp_disable_interrupts, 187 + .hw_ip_version = SOF_INTEL_ACE_2_0, 188 + }; 189 + EXPORT_SYMBOL_NS(lnl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
+12 -11
sound/soc/sof/intel/mtl.c
··· 91 91 return false; 92 92 } 93 93 94 - static int mtl_ipc_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg) 94 + int mtl_ipc_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg) 95 95 { 96 96 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata; 97 97 struct sof_ipc4_msg *msg_data = msg->msg_data; ··· 230 230 } 231 231 232 232 /* pre fw run operations */ 233 - static int mtl_dsp_pre_fw_run(struct snd_sof_dev *sdev) 233 + int mtl_dsp_pre_fw_run(struct snd_sof_dev *sdev) 234 234 { 235 235 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata; 236 236 u32 dsphfpwrsts; ··· 279 279 return ret; 280 280 } 281 281 282 - static int mtl_dsp_post_fw_run(struct snd_sof_dev *sdev) 282 + int mtl_dsp_post_fw_run(struct snd_sof_dev *sdev) 283 283 { 284 284 int ret; 285 285 ··· 301 301 return 0; 302 302 } 303 303 304 - static void mtl_dsp_dump(struct snd_sof_dev *sdev, u32 flags) 304 + void mtl_dsp_dump(struct snd_sof_dev *sdev, u32 flags) 305 305 { 306 306 char *level = (flags & SOF_DBG_DUMP_OPTIONAL) ? KERN_DEBUG : KERN_ERR; 307 307 u32 romdbgsts; ··· 495 495 return ret; 496 496 } 497 497 498 - static irqreturn_t mtl_ipc_irq_thread(int irq, void *context) 498 + irqreturn_t mtl_ipc_irq_thread(int irq, void *context) 499 499 { 500 500 struct sof_ipc4_msg notification_data = {{ 0 }}; 501 501 struct snd_sof_dev *sdev = context; ··· 578 578 return IRQ_HANDLED; 579 579 } 580 580 581 - static int mtl_dsp_ipc_get_mailbox_offset(struct snd_sof_dev *sdev) 581 + int mtl_dsp_ipc_get_mailbox_offset(struct snd_sof_dev *sdev) 582 582 { 583 583 return MTL_DSP_MBOX_UPLINK_OFFSET; 584 584 } 585 585 586 - static int mtl_dsp_ipc_get_window_offset(struct snd_sof_dev *sdev, u32 id) 586 + int mtl_dsp_ipc_get_window_offset(struct snd_sof_dev *sdev, u32 id) 587 587 { 588 588 return MTL_SRAM_WINDOW_OFFSET(id); 589 589 } 590 590 591 - static void mtl_ipc_dump(struct snd_sof_dev *sdev) 591 + void mtl_ipc_dump(struct snd_sof_dev *sdev) 592 592 { 593 593 u32 hipcidr, hipcidd, hipcida, hipctdr, hipctdd, hipctda, hipcctl; 594 594 ··· 612 612 return mtl_enable_interrupts(sdev, false); 613 613 } 614 614 615 - static u64 mtl_dsp_get_stream_hda_link_position(struct snd_sof_dev *sdev, 616 - struct snd_soc_component *component, 617 - struct snd_pcm_substream *substream) 615 + u64 mtl_dsp_get_stream_hda_link_position(struct snd_sof_dev *sdev, 616 + struct snd_soc_component *component, 617 + struct snd_pcm_substream *substream) 618 618 { 619 619 struct hdac_stream *hstream = substream->runtime->private_data; 620 620 u32 llp_l, llp_u; ··· 735 735 .read_sdw_lcount = hda_sdw_check_lcount_common, 736 736 .enable_sdw_irq = mtl_enable_sdw_irq, 737 737 .check_sdw_irq = mtl_dsp_check_sdw_irq, 738 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 738 739 .check_ipc_irq = mtl_dsp_check_ipc_irq, 739 740 .cl_init = mtl_dsp_cl_init, 740 741 .power_down_dsp = mtl_power_down_dsp,
+20 -2
sound/soc/sof/intel/mtl.h
··· 82 82 #define MTL_DSP_REG_HfIMRIS1 0x162088 83 83 #define MTL_DSP_REG_HfIMRIS1_IU_MASK BIT(0) 84 84 85 + bool mtl_dsp_check_ipc_irq(struct snd_sof_dev *sdev); 86 + int mtl_ipc_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg); 87 + 85 88 void mtl_enable_ipc_interrupts(struct snd_sof_dev *sdev); 86 89 void mtl_disable_ipc_interrupts(struct snd_sof_dev *sdev); 87 - bool mtl_dsp_check_ipc_irq(struct snd_sof_dev *sdev); 88 90 89 91 int mtl_enable_interrupts(struct snd_sof_dev *sdev, bool enable); 90 - int mtl_dsp_cl_init(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot); 92 + 93 + int mtl_dsp_pre_fw_run(struct snd_sof_dev *sdev); 94 + int mtl_dsp_post_fw_run(struct snd_sof_dev *sdev); 95 + void mtl_dsp_dump(struct snd_sof_dev *sdev, u32 flags); 96 + 91 97 int mtl_power_down_dsp(struct snd_sof_dev *sdev); 98 + int mtl_dsp_cl_init(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot); 99 + 100 + irqreturn_t mtl_ipc_irq_thread(int irq, void *context); 101 + 102 + int mtl_dsp_ipc_get_mailbox_offset(struct snd_sof_dev *sdev); 103 + int mtl_dsp_ipc_get_window_offset(struct snd_sof_dev *sdev, u32 id); 104 + 105 + void mtl_ipc_dump(struct snd_sof_dev *sdev); 106 + 107 + u64 mtl_dsp_get_stream_hda_link_position(struct snd_sof_dev *sdev, 108 + struct snd_soc_component *component, 109 + struct snd_pcm_substream *substream);
+2 -6
sound/soc/sof/intel/pci-apl.c
··· 85 85 86 86 /* PCI IDs */ 87 87 static const struct pci_device_id sof_pci_ids[] = { 88 - { PCI_DEVICE(0x8086, 0x5a98), /* BXT-P (ApolloLake) */ 89 - .driver_data = (unsigned long)&bxt_desc}, 90 - { PCI_DEVICE(0x8086, 0x1a98),/* BXT-T */ 91 - .driver_data = (unsigned long)&bxt_desc}, 92 - { PCI_DEVICE(0x8086, 0x3198), /* GeminiLake */ 93 - .driver_data = (unsigned long)&glk_desc}, 88 + { PCI_DEVICE_DATA(INTEL, HDA_APL, &bxt_desc) }, 89 + { PCI_DEVICE_DATA(INTEL, HDA_GML, &glk_desc) }, 94 90 { 0, } 95 91 }; 96 92 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+5 -10
sound/soc/sof/intel/pci-cnl.c
··· 120 120 121 121 /* PCI IDs */ 122 122 static const struct pci_device_id sof_pci_ids[] = { 123 - { PCI_DEVICE(0x8086, 0x9dc8), /* CNL-LP */ 124 - .driver_data = (unsigned long)&cnl_desc}, 125 - { PCI_DEVICE(0x8086, 0xa348), /* CNL-H */ 126 - .driver_data = (unsigned long)&cfl_desc}, 127 - { PCI_DEVICE(0x8086, 0x02c8), /* CML-LP */ 128 - .driver_data = (unsigned long)&cml_desc}, 129 - { PCI_DEVICE(0x8086, 0x06c8), /* CML-H */ 130 - .driver_data = (unsigned long)&cml_desc}, 131 - { PCI_DEVICE(0x8086, 0xa3f0), /* CML-S */ 132 - .driver_data = (unsigned long)&cml_desc}, 123 + { PCI_DEVICE_DATA(INTEL, HDA_CNL_LP, &cnl_desc) }, 124 + { PCI_DEVICE_DATA(INTEL, HDA_CNL_H, &cfl_desc) }, 125 + { PCI_DEVICE_DATA(INTEL, HDA_CML_LP, &cml_desc) }, 126 + { PCI_DEVICE_DATA(INTEL, HDA_CML_H, &cml_desc) }, 127 + { PCI_DEVICE_DATA(INTEL, HDA_CML_S, &cml_desc) }, 133 128 { 0, } 134 129 }; 135 130 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+4 -8
sound/soc/sof/intel/pci-icl.c
··· 86 86 87 87 /* PCI IDs */ 88 88 static const struct pci_device_id sof_pci_ids[] = { 89 - { PCI_DEVICE(0x8086, 0x34C8), /* ICL-LP */ 90 - .driver_data = (unsigned long)&icl_desc}, 91 - { PCI_DEVICE(0x8086, 0x3dc8), /* ICL-H */ 92 - .driver_data = (unsigned long)&icl_desc}, 93 - { PCI_DEVICE(0x8086, 0x38c8), /* ICL-N */ 94 - .driver_data = (unsigned long)&jsl_desc}, 95 - { PCI_DEVICE(0x8086, 0x4dc8), /* JSL-N */ 96 - .driver_data = (unsigned long)&jsl_desc}, 89 + { PCI_DEVICE_DATA(INTEL, HDA_ICL_LP, &icl_desc) }, 90 + { PCI_DEVICE_DATA(INTEL, HDA_ICL_H, &icl_desc) }, 91 + { PCI_DEVICE_DATA(INTEL, HDA_ICL_N, &jsl_desc) }, 92 + { PCI_DEVICE_DATA(INTEL, HDA_JSL_N, &jsl_desc) }, 97 93 { 0, } 98 94 }; 99 95 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+71
sound/soc/sof/intel/pci-lnl.c
··· 1 + // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 2 + // 3 + // This file is provided under a dual BSD/GPLv2 license. When using or 4 + // redistributing this file, you may do so under either license. 5 + // 6 + // Copyright(c) 2023 Intel Corporation. All rights reserved. 7 + // 8 + // Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> 9 + // 10 + 11 + #include <linux/module.h> 12 + #include <linux/pci.h> 13 + #include <sound/soc-acpi.h> 14 + #include <sound/soc-acpi-intel-match.h> 15 + #include <sound/sof.h> 16 + #include "../ops.h" 17 + #include "../sof-pci-dev.h" 18 + 19 + /* platform specific devices */ 20 + #include "hda.h" 21 + #include "mtl.h" 22 + 23 + static const struct sof_dev_desc lnl_desc = { 24 + .use_acpi_target_states = true, 25 + .machines = snd_soc_acpi_intel_lnl_machines, 26 + .alt_machines = snd_soc_acpi_intel_lnl_sdw_machines, 27 + .resindex_lpe_base = 0, 28 + .resindex_pcicfg_base = -1, 29 + .resindex_imr_base = -1, 30 + .irqindex_host_ipc = -1, 31 + .chip_info = &lnl_chip_info, 32 + .ipc_supported_mask = BIT(SOF_INTEL_IPC4), 33 + .ipc_default = SOF_INTEL_IPC4, 34 + .dspless_mode_supported = true, 35 + .default_fw_path = { 36 + [SOF_INTEL_IPC4] = "intel/sof-ipc4/lnl", 37 + }, 38 + .default_tplg_path = { 39 + [SOF_INTEL_IPC4] = "intel/sof-ace-tplg", 40 + }, 41 + .default_fw_filename = { 42 + [SOF_INTEL_IPC4] = "sof-lnl.ri", 43 + }, 44 + .nocodec_tplg_filename = "sof-lnl-nocodec.tplg", 45 + .ops = &sof_lnl_ops, 46 + .ops_init = sof_lnl_ops_init, 47 + }; 48 + 49 + /* PCI IDs */ 50 + static const struct pci_device_id sof_pci_ids[] = { 51 + { PCI_DEVICE_DATA(INTEL, HDA_LNL_P, &lnl_desc) }, /* LNL-P */ 52 + { 0, } 53 + }; 54 + MODULE_DEVICE_TABLE(pci, sof_pci_ids); 55 + 56 + /* pci_driver definition */ 57 + static struct pci_driver snd_sof_pci_intel_lnl_driver = { 58 + .name = "sof-audio-pci-intel-lnl", 59 + .id_table = sof_pci_ids, 60 + .probe = hda_pci_intel_probe, 61 + .remove = sof_pci_remove, 62 + .shutdown = sof_pci_shutdown, 63 + .driver = { 64 + .pm = &sof_pci_pm, 65 + }, 66 + }; 67 + module_pci_driver(snd_sof_pci_intel_lnl_driver); 68 + 69 + MODULE_LICENSE("Dual BSD/GPL"); 70 + MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON); 71 + MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV);
+1 -2
sound/soc/sof/intel/pci-mtl.c
··· 52 52 53 53 /* PCI IDs */ 54 54 static const struct pci_device_id sof_pci_ids[] = { 55 - { PCI_DEVICE(0x8086, 0x7E28), /* MTL */ 56 - .driver_data = (unsigned long)&mtl_desc}, 55 + { PCI_DEVICE_DATA(INTEL, HDA_MTL, &mtl_desc) }, 57 56 { 0, } 58 57 }; 59 58 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+2 -4
sound/soc/sof/intel/pci-skl.c
··· 69 69 70 70 /* PCI IDs */ 71 71 static const struct pci_device_id sof_pci_ids[] = { 72 - /* Sunrise Point-LP */ 73 - { PCI_DEVICE(0x8086, 0x9d70), .driver_data = (unsigned long)&skl_desc}, 74 - /* KBL */ 75 - { PCI_DEVICE(0x8086, 0x9d71), .driver_data = (unsigned long)&kbl_desc}, 72 + { PCI_DEVICE_DATA(INTEL, HDA_SKL_LP, &skl_desc) }, 73 + { PCI_DEVICE_DATA(INTEL, HDA_KBL_LP, &kbl_desc) }, 76 74 { 0, } 77 75 }; 78 76 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+15 -30
sound/soc/sof/intel/pci-tgl.c
··· 284 284 285 285 /* PCI IDs */ 286 286 static const struct pci_device_id sof_pci_ids[] = { 287 - { PCI_DEVICE(0x8086, 0xa0c8), /* TGL-LP */ 288 - .driver_data = (unsigned long)&tgl_desc}, 289 - { PCI_DEVICE(0x8086, 0x43c8), /* TGL-H */ 290 - .driver_data = (unsigned long)&tglh_desc}, 291 - { PCI_DEVICE(0x8086, 0x4b55), /* EHL */ 292 - .driver_data = (unsigned long)&ehl_desc}, 293 - { PCI_DEVICE(0x8086, 0x4b58), /* EHL */ 294 - .driver_data = (unsigned long)&ehl_desc}, 295 - { PCI_DEVICE(0x8086, 0x7ad0), /* ADL-S */ 296 - .driver_data = (unsigned long)&adls_desc}, 297 - { PCI_DEVICE(0x8086, 0x7a50), /* RPL-S */ 298 - .driver_data = (unsigned long)&rpls_desc}, 299 - { PCI_DEVICE(0x8086, 0x51c8), /* ADL-P */ 300 - .driver_data = (unsigned long)&adl_desc}, 301 - { PCI_DEVICE(0x8086, 0x51c9), /* ADL-PS */ 302 - .driver_data = (unsigned long)&adl_desc}, 303 - { PCI_DEVICE(0x8086, 0x51ca), /* RPL-P */ 304 - .driver_data = (unsigned long)&rpl_desc}, 305 - { PCI_DEVICE(0x8086, 0x51cb), /* RPL-P */ 306 - .driver_data = (unsigned long)&rpl_desc}, 307 - { PCI_DEVICE(0x8086, 0x51cc), /* ADL-M */ 308 - .driver_data = (unsigned long)&adl_desc}, 309 - { PCI_DEVICE(0x8086, 0x51cd), /* ADL-P */ 310 - .driver_data = (unsigned long)&adl_desc}, 311 - { PCI_DEVICE(0x8086, 0x51ce), /* RPL-M */ 312 - .driver_data = (unsigned long)&rpl_desc}, 313 - { PCI_DEVICE(0x8086, 0x51cf), /* RPL-PX */ 314 - .driver_data = (unsigned long)&rpl_desc}, 315 - { PCI_DEVICE(0x8086, 0x54c8), /* ADL-N */ 316 - .driver_data = (unsigned long)&adl_n_desc}, 287 + { PCI_DEVICE_DATA(INTEL, HDA_TGL_LP, &tgl_desc) }, 288 + { PCI_DEVICE_DATA(INTEL, HDA_TGL_H, &tglh_desc) }, 289 + { PCI_DEVICE_DATA(INTEL, HDA_EHL_0, &ehl_desc) }, 290 + { PCI_DEVICE_DATA(INTEL, HDA_EHL_3, &ehl_desc) }, 291 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_S, &adls_desc) }, 292 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_S, &rpls_desc) }, 293 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_P, &adl_desc) }, 294 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_PS, &adl_desc) }, 295 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_P_0, &rpl_desc) }, 296 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_P_1, &rpl_desc) }, 297 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_M, &adl_desc) }, 298 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_PX, &adl_desc) }, 299 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_M, &rpl_desc) }, 300 + { PCI_DEVICE_DATA(INTEL, HDA_RPL_PX, &rpl_desc) }, 301 + { PCI_DEVICE_DATA(INTEL, HDA_ADL_N, &adl_n_desc) }, 317 302 { 0, } 318 303 }; 319 304 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+1 -2
sound/soc/sof/intel/pci-tng.c
··· 225 225 226 226 /* PCI IDs */ 227 227 static const struct pci_device_id sof_pci_ids[] = { 228 - { PCI_DEVICE(0x8086, 0x119a), 229 - .driver_data = (unsigned long)&tng_desc}, 228 + { PCI_DEVICE_DATA(INTEL, SST_TNG, &tng_desc) }, 230 229 { 0, } 231 230 }; 232 231 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
+1
sound/soc/sof/intel/shim.h
··· 189 189 int (*read_sdw_lcount)(struct snd_sof_dev *sdev); 190 190 void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable); 191 191 bool (*check_sdw_irq)(struct snd_sof_dev *sdev); 192 + bool (*check_sdw_wakeen_irq)(struct snd_sof_dev *sdev); 192 193 bool (*check_ipc_irq)(struct snd_sof_dev *sdev); 193 194 int (*power_down_dsp)(struct snd_sof_dev *sdev); 194 195 int (*disable_interrupts)(struct snd_sof_dev *sdev);
+4
sound/soc/sof/intel/tgl.c
··· 147 147 .read_sdw_lcount = hda_sdw_check_lcount_common, 148 148 .enable_sdw_irq = hda_common_enable_sdw_irq, 149 149 .check_sdw_irq = hda_common_check_sdw_irq, 150 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 150 151 .check_ipc_irq = hda_dsp_check_ipc_irq, 151 152 .cl_init = cl_dsp_init, 152 153 .power_down_dsp = hda_power_down_dsp, ··· 176 175 .read_sdw_lcount = hda_sdw_check_lcount_common, 177 176 .enable_sdw_irq = hda_common_enable_sdw_irq, 178 177 .check_sdw_irq = hda_common_check_sdw_irq, 178 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 179 179 .check_ipc_irq = hda_dsp_check_ipc_irq, 180 180 .cl_init = cl_dsp_init, 181 181 .power_down_dsp = hda_power_down_dsp, ··· 205 203 .read_sdw_lcount = hda_sdw_check_lcount_common, 206 204 .enable_sdw_irq = hda_common_enable_sdw_irq, 207 205 .check_sdw_irq = hda_common_check_sdw_irq, 206 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 208 207 .check_ipc_irq = hda_dsp_check_ipc_irq, 209 208 .cl_init = cl_dsp_init, 210 209 .power_down_dsp = hda_power_down_dsp, ··· 234 231 .read_sdw_lcount = hda_sdw_check_lcount_common, 235 232 .enable_sdw_irq = hda_common_enable_sdw_irq, 236 233 .check_sdw_irq = hda_common_check_sdw_irq, 234 + .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common, 237 235 .check_ipc_irq = hda_dsp_check_ipc_irq, 238 236 .cl_init = cl_dsp_init, 239 237 .power_down_dsp = hda_power_down_dsp,
+11 -10
sound/soc/sof/ipc4-pcm.c
··· 23 23 24 24 /* trigger a single pipeline */ 25 25 if (trigger_list->count == 1) 26 - return sof_ipc4_set_pipeline_state(sdev, trigger_list->pipeline_ids[0], state); 26 + return sof_ipc4_set_pipeline_state(sdev, trigger_list->pipeline_instance_ids[0], 27 + state); 27 28 28 29 primary = state; 29 30 primary |= SOF_IPC4_MSG_TYPE_SET(SOF_IPC4_GLB_SET_PIPELINE_STATE); ··· 43 42 return sof_ipc_tx_message_no_reply(sdev->ipc, &msg, ipc_size); 44 43 } 45 44 46 - int sof_ipc4_set_pipeline_state(struct snd_sof_dev *sdev, u32 id, u32 state) 45 + int sof_ipc4_set_pipeline_state(struct snd_sof_dev *sdev, u32 instance_id, u32 state) 47 46 { 48 47 struct sof_ipc4_msg msg = {{ 0 }}; 49 48 u32 primary; 50 49 51 - dev_dbg(sdev->dev, "ipc4 set pipeline %d state %d", id, state); 50 + dev_dbg(sdev->dev, "ipc4 set pipeline instance %d state %d", instance_id, state); 52 51 53 52 primary = state; 54 - primary |= SOF_IPC4_GLB_PIPE_STATE_ID(id); 53 + primary |= SOF_IPC4_GLB_PIPE_STATE_ID(instance_id); 55 54 primary |= SOF_IPC4_MSG_TYPE_SET(SOF_IPC4_GLB_SET_PIPELINE_STATE); 56 55 primary |= SOF_IPC4_MSG_DIR(SOF_IPC4_MSG_REQUEST); 57 56 primary |= SOF_IPC4_MSG_TARGET(SOF_IPC4_FW_GEN_MSG); ··· 80 79 * for the first time 81 80 */ 82 81 if (spipe->started_count == spipe->paused_count) 83 - trigger_list->pipeline_ids[trigger_list->count++] = 82 + trigger_list->pipeline_instance_ids[trigger_list->count++] = 84 83 pipe_widget->instance_id; 85 84 break; 86 85 case SOF_IPC4_PIPE_RESET: 87 86 /* RESET if the pipeline is neither running nor paused */ 88 87 if (!spipe->started_count && !spipe->paused_count) 89 - trigger_list->pipeline_ids[trigger_list->count++] = 88 + trigger_list->pipeline_instance_ids[trigger_list->count++] = 90 89 pipe_widget->instance_id; 91 90 break; 92 91 case SOF_IPC4_PIPE_PAUSED: 93 92 /* Pause the pipeline only when its started_count is 1 more than paused_count */ 94 93 if (spipe->paused_count == (spipe->started_count - 1)) 95 - trigger_list->pipeline_ids[trigger_list->count++] = 94 + trigger_list->pipeline_instance_ids[trigger_list->count++] = 96 95 pipe_widget->instance_id; 97 96 break; 98 97 default: ··· 114 113 115 114 /* set state for pipeline if it was just triggered */ 116 115 for (i = 0; i < trigger_list->count; i++) { 117 - if (trigger_list->pipeline_ids[i] == pipe_widget->instance_id) { 116 + if (trigger_list->pipeline_instance_ids[i] == pipe_widget->instance_id) { 118 117 pipeline->state = state; 119 118 break; 120 119 } ··· 315 314 return sof_ipc4_chain_dma_trigger(sdev, pipeline_list, state, cmd); 316 315 317 316 /* allocate memory for the pipeline data */ 318 - trigger_list = kzalloc(struct_size(trigger_list, pipeline_ids, pipeline_list->count), 319 - GFP_KERNEL); 317 + trigger_list = kzalloc(struct_size(trigger_list, pipeline_instance_ids, 318 + pipeline_list->count), GFP_KERNEL); 320 319 if (!trigger_list) 321 320 return -ENOMEM; 322 321
+7
sound/soc/sof/ipc4-topology.c
··· 1746 1746 /* update pipeline memory usage */ 1747 1747 sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config); 1748 1748 1749 + /* 1750 + * Restore gateway config length now that IPC payload is prepared. This avoids 1751 + * counting the DMA CONFIG TLV multiple times 1752 + */ 1753 + copier_data->gtw_cfg.config_length = gtw_cfg_config_length / 4; 1754 + 1749 1755 return 0; 1750 1756 } 1751 1757 ··· 2325 2319 pipeline->mem_usage = 0; 2326 2320 pipeline->state = SOF_IPC4_PIPE_UNINITIALIZED; 2327 2321 ida_free(&pipeline_ida, swidget->instance_id); 2322 + swidget->instance_id = -EINVAL; 2328 2323 } else { 2329 2324 struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget; 2330 2325 struct sof_ipc4_pipeline *pipeline = pipe_widget->private;
+2 -2
sound/soc/sof/ipc4-topology.h
··· 144 144 /** 145 145 * struct sof_ipc4_multi_pipeline_data - multi pipeline trigger IPC data 146 146 * @count: Number of pipelines to be triggered 147 - * @pipeline_ids: Flexible array of IDs of the pipelines to be triggered 147 + * @pipeline_instance_ids: Flexible array of IDs of the pipelines to be triggered 148 148 */ 149 149 struct ipc4_pipeline_set_state_data { 150 150 u32 count; 151 - DECLARE_FLEX_ARRAY(u32, pipeline_ids); 151 + DECLARE_FLEX_ARRAY(u32, pipeline_instance_ids); 152 152 } __packed; 153 153 154 154 /**
+2
sound/soc/sof/topology.c
··· 2158 2158 struct snd_sof_widget *pipe_widget = spipe->pipe_widget; 2159 2159 struct snd_sof_widget *swidget; 2160 2160 2161 + pipe_widget->instance_id = -EINVAL; 2162 + 2161 2163 /* Update the scheduler widget's IPC structure */ 2162 2164 if (widget_ops && widget_ops[pipe_widget->id].ipc_setup) { 2163 2165 ret = widget_ops[pipe_widget->id].ipc_setup(pipe_widget);