]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soundwire: amd: refactor existing code for acp 6.3 platform
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Tue, 24 Sep 2024 08:18:44 +0000 (13:48 +0530)
committerVinod Koul <vkoul@kernel.org>
Thu, 3 Oct 2024 07:14:41 +0000 (12:44 +0530)
Refactor existing code by adding acp pci revision id coditional checks
for ACP 6.3 platform. Rename the macros and structure names with ACP63
tag.

Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Link: https://lore.kernel.org/r/20240924081846.1834612-3-Vijendar.Mukunda@amd.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/amd_manager.c
drivers/soundwire/amd_manager.h
include/linux/soundwire/sdw_amd.h

index 4a1966fb01f6b5e14c56c8d7ed230ab528579630..5a4bfaef65fb2e6bc4228d2f7ed9a82e9ad75360 100644 (file)
@@ -433,12 +433,18 @@ static int amd_sdw_port_params(struct sdw_bus *bus, struct sdw_port_params *p_pa
        u32 frame_fmt_reg, dpn_frame_fmt;
 
        dev_dbg(amd_manager->dev, "p_params->num:0x%x\n", p_params->num);
-       switch (amd_manager->instance) {
-       case ACP_SDW0:
-               frame_fmt_reg = sdw0_manager_dp_reg[p_params->num].frame_fmt_reg;
-               break;
-       case ACP_SDW1:
-               frame_fmt_reg = sdw1_manager_dp_reg[p_params->num].frame_fmt_reg;
+       switch (amd_manager->acp_rev) {
+       case ACP63_PCI_REV_ID:
+               switch (amd_manager->instance) {
+               case ACP_SDW0:
+                       frame_fmt_reg = acp63_sdw0_dp_reg[p_params->num].frame_fmt_reg;
+                       break;
+               case ACP_SDW1:
+                       frame_fmt_reg = acp63_sdw1_dp_reg[p_params->num].frame_fmt_reg;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
        default:
                return -EINVAL;
@@ -465,20 +471,28 @@ static int amd_sdw_transport_params(struct sdw_bus *bus,
        u32 frame_fmt_reg, sample_int_reg, hctrl_dp0_reg;
        u32 offset_reg, lane_ctrl_ch_en_reg;
 
-       switch (amd_manager->instance) {
-       case ACP_SDW0:
-               frame_fmt_reg = sdw0_manager_dp_reg[params->port_num].frame_fmt_reg;
-               sample_int_reg = sdw0_manager_dp_reg[params->port_num].sample_int_reg;
-               hctrl_dp0_reg = sdw0_manager_dp_reg[params->port_num].hctrl_dp0_reg;
-               offset_reg = sdw0_manager_dp_reg[params->port_num].offset_reg;
-               lane_ctrl_ch_en_reg = sdw0_manager_dp_reg[params->port_num].lane_ctrl_ch_en_reg;
-               break;
-       case ACP_SDW1:
-               frame_fmt_reg = sdw1_manager_dp_reg[params->port_num].frame_fmt_reg;
-               sample_int_reg = sdw1_manager_dp_reg[params->port_num].sample_int_reg;
-               hctrl_dp0_reg = sdw1_manager_dp_reg[params->port_num].hctrl_dp0_reg;
-               offset_reg = sdw1_manager_dp_reg[params->port_num].offset_reg;
-               lane_ctrl_ch_en_reg = sdw1_manager_dp_reg[params->port_num].lane_ctrl_ch_en_reg;
+       switch (amd_manager->acp_rev) {
+       case ACP63_PCI_REV_ID:
+               switch (amd_manager->instance) {
+               case ACP_SDW0:
+                       frame_fmt_reg = acp63_sdw0_dp_reg[params->port_num].frame_fmt_reg;
+                       sample_int_reg = acp63_sdw0_dp_reg[params->port_num].sample_int_reg;
+                       hctrl_dp0_reg = acp63_sdw0_dp_reg[params->port_num].hctrl_dp0_reg;
+                       offset_reg = acp63_sdw0_dp_reg[params->port_num].offset_reg;
+                       lane_ctrl_ch_en_reg =
+                                       acp63_sdw0_dp_reg[params->port_num].lane_ctrl_ch_en_reg;
+                       break;
+               case ACP_SDW1:
+                       frame_fmt_reg = acp63_sdw1_dp_reg[params->port_num].frame_fmt_reg;
+                       sample_int_reg = acp63_sdw1_dp_reg[params->port_num].sample_int_reg;
+                       hctrl_dp0_reg = acp63_sdw1_dp_reg[params->port_num].hctrl_dp0_reg;
+                       offset_reg = acp63_sdw1_dp_reg[params->port_num].offset_reg;
+                       lane_ctrl_ch_en_reg =
+                                       acp63_sdw1_dp_reg[params->port_num].lane_ctrl_ch_en_reg;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
        default:
                return -EINVAL;
@@ -520,12 +534,20 @@ static int amd_sdw_port_enable(struct sdw_bus *bus,
        u32 dpn_ch_enable;
        u32 lane_ctrl_ch_en_reg;
 
-       switch (amd_manager->instance) {
-       case ACP_SDW0:
-               lane_ctrl_ch_en_reg = sdw0_manager_dp_reg[enable_ch->port_num].lane_ctrl_ch_en_reg;
-               break;
-       case ACP_SDW1:
-               lane_ctrl_ch_en_reg = sdw1_manager_dp_reg[enable_ch->port_num].lane_ctrl_ch_en_reg;
+       switch (amd_manager->acp_rev) {
+       case ACP63_PCI_REV_ID:
+               switch (amd_manager->instance) {
+               case ACP_SDW0:
+                       lane_ctrl_ch_en_reg =
+                                       acp63_sdw0_dp_reg[enable_ch->port_num].lane_ctrl_ch_en_reg;
+                       break;
+               case ACP_SDW1:
+                       lane_ctrl_ch_en_reg =
+                                       acp63_sdw1_dp_reg[enable_ch->port_num].lane_ctrl_ch_en_reg;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
        default:
                return -EINVAL;
@@ -927,15 +949,21 @@ static int amd_sdw_manager_probe(struct platform_device *pdev)
         * information.
         */
        amd_manager->bus.controller_id = 0;
-
-       switch (amd_manager->instance) {
-       case ACP_SDW0:
-               amd_manager->num_dout_ports = AMD_SDW0_MAX_TX_PORTS;
-               amd_manager->num_din_ports = AMD_SDW0_MAX_RX_PORTS;
-               break;
-       case ACP_SDW1:
-               amd_manager->num_dout_ports = AMD_SDW1_MAX_TX_PORTS;
-               amd_manager->num_din_ports = AMD_SDW1_MAX_RX_PORTS;
+       dev_dbg(dev, "acp_rev:0x%x\n", amd_manager->acp_rev);
+       switch (amd_manager->acp_rev) {
+       case ACP63_PCI_REV_ID:
+               switch (amd_manager->instance) {
+               case ACP_SDW0:
+                       amd_manager->num_dout_ports = AMD_ACP63_SDW0_MAX_TX_PORTS;
+                       amd_manager->num_din_ports = AMD_ACP63_SDW0_MAX_RX_PORTS;
+                       break;
+               case ACP_SDW1:
+                       amd_manager->num_dout_ports = AMD_ACP63_SDW1_MAX_TX_PORTS;
+                       amd_manager->num_din_ports = AMD_ACP63_SDW1_MAX_RX_PORTS;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
        default:
                return -EINVAL;
index 707065468e05a038acb1a1c893133b5d757a4de8..cc2170e4521edda69ecc4c7c81d678bd9aad0d57 100644 (file)
 #define AMD_SDW_IRQ_MASK_8TO11         0x000c7777
 #define AMD_SDW_IRQ_ERROR_MASK         0xff
 #define AMD_SDW_MAX_FREQ_NUM           1
-#define AMD_SDW0_MAX_TX_PORTS          3
-#define AMD_SDW0_MAX_RX_PORTS          3
-#define AMD_SDW1_MAX_TX_PORTS          1
-#define AMD_SDW1_MAX_RX_PORTS          1
-#define AMD_SDW0_MAX_DAI               6
-#define AMD_SDW1_MAX_DAI               2
+#define AMD_ACP63_SDW0_MAX_TX_PORTS            3
+#define AMD_ACP63_SDW0_MAX_RX_PORTS            3
+#define AMD_ACP63_SDW1_MAX_TX_PORTS            1
+#define AMD_ACP63_SDW1_MAX_RX_PORTS            1
+#define AMD_ACP63_SDW0_MAX_DAI         6
+#define AMD_ACP63_SDW1_MAX_DAI         2
 #define AMD_SDW_SLAVE_0_ATTACHED       5
 #define AMD_SDW_SSP_COUNTER_VAL                3
 
@@ -222,7 +222,7 @@ struct sdw_manager_dp_reg {
  * in SoundWire DMA driver.
  */
 
-static struct sdw_manager_dp_reg sdw0_manager_dp_reg[AMD_SDW0_MAX_DAI] =  {
+static struct sdw_manager_dp_reg acp63_sdw0_dp_reg[AMD_ACP63_SDW0_MAX_DAI] =  {
        {ACP_SW_AUDIO0_TX_FRAME_FORMAT, ACP_SW_AUDIO0_TX_SAMPLEINTERVAL, ACP_SW_AUDIO0_TX_HCTRL_DP0,
         ACP_SW_AUDIO0_TX_OFFSET_DP0, ACP_SW_AUDIO0_TX_CHANNEL_ENABLE_DP0},
        {ACP_SW_AUDIO1_TX_FRAME_FORMAT, ACP_SW_AUDIO1_TX_SAMPLEINTERVAL, ACP_SW_AUDIO1_TX_HCTRL,
@@ -237,7 +237,7 @@ static struct sdw_manager_dp_reg sdw0_manager_dp_reg[AMD_SDW0_MAX_DAI] =  {
         ACP_SW_AUDIO2_RX_OFFSET, ACP_SW_AUDIO2_RX_CHANNEL_ENABLE_DP0},
 };
 
-static struct sdw_manager_dp_reg sdw1_manager_dp_reg[AMD_SDW1_MAX_DAI] =  {
+static struct sdw_manager_dp_reg acp63_sdw1_dp_reg[AMD_ACP63_SDW1_MAX_DAI] =  {
        {ACP_SW_AUDIO1_TX_FRAME_FORMAT, ACP_SW_AUDIO1_TX_SAMPLEINTERVAL, ACP_SW_AUDIO1_TX_HCTRL,
         ACP_SW_AUDIO1_TX_OFFSET, ACP_SW_AUDIO1_TX_CHANNEL_ENABLE_DP0},
        {ACP_SW_AUDIO1_RX_FRAME_FORMAT, ACP_SW_AUDIO1_RX_SAMPLEINTERVAL, ACP_SW_AUDIO1_RX_HCTRL,
index e0abc59d4748b9d687c1095d689569d1c93e99df..c9586f22c5a9b322df39351a3deb4e04fd37190a 100644 (file)
@@ -27,6 +27,7 @@
 #define ACP_SDW0       0
 #define ACP_SDW1       1
 #define AMD_SDW_MAX_MANAGER_COUNT      2
+#define ACP63_PCI_REV_ID               0x63
 
 struct acp_sdw_pdata {
        u16 instance;