Skip to content

Commit e05af1a

Browse files
vijendarmukundavinodkoul
authored andcommitted
soundwire: amd: use inline function for register update
Define common inline function for register update. Use this inline function for updating SoundWire Pad registers and enable/disable SoundWire interrupt control registers. Signed-off-by: Vijendar Mukunda <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]>
1 parent 91c4dd2 commit e05af1a

File tree

3 files changed

+30
-27
lines changed

3 files changed

+30
-27
lines changed

drivers/soundwire/amd_init.c

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,42 +17,38 @@
1717

1818
#define ACP_PAD_PULLDOWN_CTRL 0x0001448
1919
#define ACP_SW_PAD_KEEPER_EN 0x0001454
20-
#define AMD_SDW_PAD_PULLDOWN_CTRL_ENABLE_MASK 0x7f9a
21-
#define AMD_SDW0_PAD_PULLDOWN_CTRL_ENABLE_MASK 0x7f9f
22-
#define AMD_SDW1_PAD_PULLDOWN_CTRL_ENABLE_MASK 0x7ffa
23-
#define AMD_SDW0_PAD_EN_MASK 1
24-
#define AMD_SDW1_PAD_EN_MASK 0x10
25-
#define AMD_SDW_PAD_EN_MASK (AMD_SDW0_PAD_EN_MASK | AMD_SDW1_PAD_EN_MASK)
20+
#define AMD_SDW0_PAD_CTRL_MASK 0x60
21+
#define AMD_SDW1_PAD_CTRL_MASK 5
22+
#define AMD_SDW_PAD_CTRL_MASK (AMD_SDW0_PAD_CTRL_MASK | AMD_SDW1_PAD_CTRL_MASK)
23+
#define AMD_SDW0_PAD_EN 1
24+
#define AMD_SDW1_PAD_EN 0x10
25+
#define AMD_SDW_PAD_EN (AMD_SDW0_PAD_EN | AMD_SDW1_PAD_EN)
2626

2727
static int amd_enable_sdw_pads(void __iomem *mmio, u32 link_mask, struct device *dev)
2828
{
29-
u32 val;
30-
u32 pad_keeper_en_mask, pad_pulldown_ctrl_mask;
29+
u32 pad_keeper_en, pad_pulldown_ctrl_mask;
3130

3231
switch (link_mask) {
3332
case 1:
34-
pad_keeper_en_mask = AMD_SDW0_PAD_EN_MASK;
35-
pad_pulldown_ctrl_mask = AMD_SDW0_PAD_PULLDOWN_CTRL_ENABLE_MASK;
33+
pad_keeper_en = AMD_SDW0_PAD_EN;
34+
pad_pulldown_ctrl_mask = AMD_SDW0_PAD_CTRL_MASK;
3635
break;
3736
case 2:
38-
pad_keeper_en_mask = AMD_SDW1_PAD_EN_MASK;
39-
pad_pulldown_ctrl_mask = AMD_SDW1_PAD_PULLDOWN_CTRL_ENABLE_MASK;
37+
pad_keeper_en = AMD_SDW1_PAD_EN;
38+
pad_pulldown_ctrl_mask = AMD_SDW1_PAD_CTRL_MASK;
4039
break;
4140
case 3:
42-
pad_keeper_en_mask = AMD_SDW_PAD_EN_MASK;
43-
pad_pulldown_ctrl_mask = AMD_SDW_PAD_PULLDOWN_CTRL_ENABLE_MASK;
41+
pad_keeper_en = AMD_SDW_PAD_EN;
42+
pad_pulldown_ctrl_mask = AMD_SDW_PAD_CTRL_MASK;
4443
break;
4544
default:
4645
dev_err(dev, "No SDW Links are enabled\n");
4746
return -ENODEV;
4847
}
4948

50-
val = readl(mmio + ACP_SW_PAD_KEEPER_EN);
51-
val |= pad_keeper_en_mask;
52-
writel(val, mmio + ACP_SW_PAD_KEEPER_EN);
53-
val = readl(mmio + ACP_PAD_PULLDOWN_CTRL);
54-
val &= pad_pulldown_ctrl_mask;
55-
writel(val, mmio + ACP_PAD_PULLDOWN_CTRL);
49+
amd_updatel(mmio, ACP_SW_PAD_KEEPER_EN, pad_keeper_en, pad_keeper_en);
50+
amd_updatel(mmio, ACP_PAD_PULLDOWN_CTRL, pad_pulldown_ctrl_mask, 0);
51+
5652
return 0;
5753
}
5854

drivers/soundwire/amd_init.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,12 @@
1010

1111
int amd_sdw_manager_start(struct amd_sdw_manager *amd_manager);
1212

13+
static inline void amd_updatel(void __iomem *mmio, int offset, u32 mask, u32 val)
14+
{
15+
u32 tmp;
16+
17+
tmp = readl(mmio + offset);
18+
tmp = (tmp & ~mask) | val;
19+
writel(tmp, mmio + offset);
20+
}
1321
#endif

drivers/soundwire/amd_manager.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,8 @@ static void amd_enable_sdw_interrupts(struct amd_sdw_manager *amd_manager)
8989
u32 val;
9090

9191
mutex_lock(amd_manager->acp_sdw_lock);
92-
val = readl(amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance));
93-
val |= sdw_manager_reg_mask_array[amd_manager->instance];
94-
writel(val, amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance));
92+
val = sdw_manager_reg_mask_array[amd_manager->instance];
93+
amd_updatel(amd_manager->acp_mmio, ACP_EXTERNAL_INTR_CNTL(amd_manager->instance), val, val);
9594
mutex_unlock(amd_manager->acp_sdw_lock);
9695

9796
writel(AMD_SDW_IRQ_MASK_0TO7, amd_manager->mmio +
@@ -103,12 +102,12 @@ static void amd_enable_sdw_interrupts(struct amd_sdw_manager *amd_manager)
103102

104103
static void amd_disable_sdw_interrupts(struct amd_sdw_manager *amd_manager)
105104
{
106-
u32 val;
105+
u32 irq_mask;
107106

108107
mutex_lock(amd_manager->acp_sdw_lock);
109-
val = readl(amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance));
110-
val &= ~sdw_manager_reg_mask_array[amd_manager->instance];
111-
writel(val, amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance));
108+
irq_mask = sdw_manager_reg_mask_array[amd_manager->instance];
109+
amd_updatel(amd_manager->acp_mmio, ACP_EXTERNAL_INTR_CNTL(amd_manager->instance),
110+
irq_mask, 0);
112111
mutex_unlock(amd_manager->acp_sdw_lock);
113112

114113
writel(0x00, amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_MASK_0TO7);

0 commit comments

Comments
 (0)