18e8e69d6SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2bc2bd45bSSriram Periyasamy /* 3bc2bd45bSSriram Periyasamy * skl-i2s.h - i2s blob mapping 4bc2bd45bSSriram Periyasamy * 5bc2bd45bSSriram Periyasamy * Copyright (C) 2017 Intel Corp 6bc2bd45bSSriram Periyasamy * Author: Subhransu S. Prusty < subhransu.s.prusty@intel.com> 7bc2bd45bSSriram Periyasamy * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8bc2bd45bSSriram Periyasamy * 9bc2bd45bSSriram Periyasamy * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10bc2bd45bSSriram Periyasamy */ 11bc2bd45bSSriram Periyasamy 12bc2bd45bSSriram Periyasamy #ifndef __SOUND_SOC_SKL_I2S_H 13bc2bd45bSSriram Periyasamy #define __SOUND_SOC_SKL_I2S_H 14bc2bd45bSSriram Periyasamy 15bc2bd45bSSriram Periyasamy #define SKL_I2S_MAX_TIME_SLOTS 8 16bc2bd45bSSriram Periyasamy #define SKL_MCLK_DIV_CLK_SRC_MASK GENMASK(17, 16) 17bc2bd45bSSriram Periyasamy 18bc2bd45bSSriram Periyasamy #define SKL_MNDSS_DIV_CLK_SRC_MASK GENMASK(21, 20) 19bc2bd45bSSriram Periyasamy #define SKL_SHIFT(x) (ffs(x) - 1) 20bc2bd45bSSriram Periyasamy #define SKL_MCLK_DIV_RATIO_MASK GENMASK(11, 0) 21bc2bd45bSSriram Periyasamy 229afbc5ecSSriram Periyasamy #define is_legacy_blob(x) (x.signature != 0xEE) 239afbc5ecSSriram Periyasamy #define ext_to_legacy_blob(i2s_config_blob_ext) \ 249afbc5ecSSriram Periyasamy ((struct skl_i2s_config_blob_legacy *) i2s_config_blob_ext) 259afbc5ecSSriram Periyasamy 269afbc5ecSSriram Periyasamy #define get_clk_src(mclk, mask) \ 279afbc5ecSSriram Periyasamy ((mclk.mdivctrl & mask) >> SKL_SHIFT(mask)) 28bc2bd45bSSriram Periyasamy struct skl_i2s_config { 29bc2bd45bSSriram Periyasamy u32 ssc0; 30bc2bd45bSSriram Periyasamy u32 ssc1; 31bc2bd45bSSriram Periyasamy u32 sscto; 32bc2bd45bSSriram Periyasamy u32 sspsp; 33bc2bd45bSSriram Periyasamy u32 sstsa; 34bc2bd45bSSriram Periyasamy u32 ssrsa; 35bc2bd45bSSriram Periyasamy u32 ssc2; 36bc2bd45bSSriram Periyasamy u32 sspsp2; 37bc2bd45bSSriram Periyasamy u32 ssc3; 38bc2bd45bSSriram Periyasamy u32 ssioc; 39bc2bd45bSSriram Periyasamy } __packed; 40bc2bd45bSSriram Periyasamy 41bc2bd45bSSriram Periyasamy struct skl_i2s_config_mclk { 42bc2bd45bSSriram Periyasamy u32 mdivctrl; 43bc2bd45bSSriram Periyasamy u32 mdivr; 44bc2bd45bSSriram Periyasamy }; 45bc2bd45bSSriram Periyasamy 469afbc5ecSSriram Periyasamy struct skl_i2s_config_mclk_ext { 479afbc5ecSSriram Periyasamy u32 mdivctrl; 489afbc5ecSSriram Periyasamy u32 mdivr_count; 49936b9df7SGustavo A. R. Silva u32 mdivr[]; 509afbc5ecSSriram Periyasamy } __packed; 519afbc5ecSSriram Periyasamy 529afbc5ecSSriram Periyasamy struct skl_i2s_config_blob_signature { 539afbc5ecSSriram Periyasamy u32 minor_ver : 8; 549afbc5ecSSriram Periyasamy u32 major_ver : 8; 559afbc5ecSSriram Periyasamy u32 resvdz : 8; 569afbc5ecSSriram Periyasamy u32 signature : 8; 579afbc5ecSSriram Periyasamy } __packed; 589afbc5ecSSriram Periyasamy 599afbc5ecSSriram Periyasamy struct skl_i2s_config_blob_header { 609afbc5ecSSriram Periyasamy struct skl_i2s_config_blob_signature sig; 619afbc5ecSSriram Periyasamy u32 size; 629afbc5ecSSriram Periyasamy }; 639afbc5ecSSriram Periyasamy 64bc2bd45bSSriram Periyasamy /** 65bc2bd45bSSriram Periyasamy * struct skl_i2s_config_blob_legacy - Structure defines I2S Gateway 66bc2bd45bSSriram Periyasamy * configuration legacy blob 67bc2bd45bSSriram Periyasamy * 68bc2bd45bSSriram Periyasamy * @gtw_attr: Gateway attribute for the I2S Gateway 69bc2bd45bSSriram Periyasamy * @tdm_ts_group: TDM slot mapping against channels in the Gateway. 70bc2bd45bSSriram Periyasamy * @i2s_cfg: I2S HW registers 71bc2bd45bSSriram Periyasamy * @mclk: MCLK clock source and divider values 72bc2bd45bSSriram Periyasamy */ 73bc2bd45bSSriram Periyasamy struct skl_i2s_config_blob_legacy { 74bc2bd45bSSriram Periyasamy u32 gtw_attr; 75bc2bd45bSSriram Periyasamy u32 tdm_ts_group[SKL_I2S_MAX_TIME_SLOTS]; 76bc2bd45bSSriram Periyasamy struct skl_i2s_config i2s_cfg; 77bc2bd45bSSriram Periyasamy struct skl_i2s_config_mclk mclk; 78bc2bd45bSSriram Periyasamy }; 79bc2bd45bSSriram Periyasamy 809afbc5ecSSriram Periyasamy struct skl_i2s_config_blob_ext { 819afbc5ecSSriram Periyasamy u32 gtw_attr; 829afbc5ecSSriram Periyasamy struct skl_i2s_config_blob_header hdr; 839afbc5ecSSriram Periyasamy u32 tdm_ts_group[SKL_I2S_MAX_TIME_SLOTS]; 849afbc5ecSSriram Periyasamy struct skl_i2s_config i2s_cfg; 859afbc5ecSSriram Periyasamy struct skl_i2s_config_mclk_ext mclk; 869afbc5ecSSriram Periyasamy } __packed; 87bc2bd45bSSriram Periyasamy #endif /* __SOUND_SOC_SKL_I2S_H */ 88