Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 230335
b: refs/heads/master
c: 43fa95c
h: refs/heads/master
i:
  230333: 120c29e
  230331: 7f55035
  230327: c0a00bd
  230319: dbbc05f
  230303: 6e40de1
  230271: 17a42a5
v: v3
  • Loading branch information
Kuninori Morimoto authored and Mark Brown committed Dec 3, 2010
1 parent b784666 commit 137404e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e8c8b6318c3dad742d03b5fff5360729f7ac2e5a
refs/heads/master: 43fa95caab86fec0af7333bda407dd14f0c2127c
48 changes: 20 additions & 28 deletions trunk/sound/soc/sh/fsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@
#define REG_MUTE_ST 0x0028
#define REG_OUT_SEL 0x0030

/* master register */
#define MST_CLK_RST 0x0210
#define MST_SOFT_RST 0x0214
#define MST_FIFO_SZ 0x0218

/* core register (depend on FSI version) */
#define A_MST_CTLR 0x0180
#define B_MST_CTLR 0x01A0
#define CPU_INT_ST 0x01F4
Expand All @@ -41,12 +47,6 @@
#define INT_ST 0x0200
#define IEMSK 0x0204
#define IMSK 0x0208
#define MUTE 0x020C
#define CLK_RST 0x0210
#define SOFT_RST 0x0214
#define FIFO_SZ 0x0218
#define MREG_START A_MST_CTLR
#define MREG_END FIFO_SZ

/* DO_FMT */
/* DI_FMT */
Expand Down Expand Up @@ -200,35 +200,27 @@ static void __fsi_reg_mask_set(u32 reg, u32 mask, u32 data)
#define fsi_reg_mask_set(p, r, m, d)\
__fsi_reg_mask_set((u32)(p->base + REG_##r), m, d)

static u32 fsi_master_read(struct fsi_master *master, u32 reg)
#define fsi_master_read(p, r) _fsi_master_read(p, MST_##r)
#define fsi_core_read(p, r) _fsi_master_read(p, p->core->r)
static u32 _fsi_master_read(struct fsi_master *master, u32 reg)
{
u32 ret;
unsigned long flags;

if ((reg < MREG_START) ||
(reg > MREG_END)) {
pr_err("fsi: register access err (%s)\n", __func__);
return 0;
}

spin_lock_irqsave(&master->lock, flags);
ret = __fsi_reg_read((u32)(master->base + reg));
spin_unlock_irqrestore(&master->lock, flags);

return ret;
}

static void fsi_master_mask_set(struct fsi_master *master,
#define fsi_master_mask_set(p, r, m, d) _fsi_master_mask_set(p, MST_##r, m, d)
#define fsi_core_mask_set(p, r, m, d) _fsi_master_mask_set(p, p->core->r, m, d)
static void _fsi_master_mask_set(struct fsi_master *master,
u32 reg, u32 mask, u32 data)
{
unsigned long flags;

if ((reg < MREG_START) ||
(reg > MREG_END)) {
pr_err("fsi: register access err (%s)\n", __func__);
return;
}

spin_lock_irqsave(&master->lock, flags);
__fsi_reg_mask_set((u32)(master->base + reg), mask, data);
spin_unlock_irqrestore(&master->lock, flags);
Expand Down Expand Up @@ -448,22 +440,22 @@ static void fsi_irq_enable(struct fsi_priv *fsi, int is_play)
u32 data = AB_IO(1, fsi_get_port_shift(fsi, is_play));
struct fsi_master *master = fsi_get_master(fsi);

fsi_master_mask_set(master, master->core->imsk, data, data);
fsi_master_mask_set(master, master->core->iemsk, data, data);
fsi_core_mask_set(master, imsk, data, data);
fsi_core_mask_set(master, iemsk, data, data);
}

static void fsi_irq_disable(struct fsi_priv *fsi, int is_play)
{
u32 data = AB_IO(1, fsi_get_port_shift(fsi, is_play));
struct fsi_master *master = fsi_get_master(fsi);

fsi_master_mask_set(master, master->core->imsk, data, 0);
fsi_master_mask_set(master, master->core->iemsk, data, 0);
fsi_core_mask_set(master, imsk, data, 0);
fsi_core_mask_set(master, iemsk, data, 0);
}

static u32 fsi_irq_get_status(struct fsi_master *master)
{
return fsi_master_read(master, master->core->int_st);
return fsi_core_read(master, int_st);
}

static void fsi_irq_clear_status(struct fsi_priv *fsi)
Expand All @@ -475,7 +467,7 @@ static void fsi_irq_clear_status(struct fsi_priv *fsi)
data |= AB_IO(1, fsi_get_port_shift(fsi, 1));

/* clear interrupt factor */
fsi_master_mask_set(master, master->core->int_st, data, 0);
fsi_core_mask_set(master, int_st, data, 0);
}

/*
Expand All @@ -497,8 +489,8 @@ static void fsi_spdif_clk_ctrl(struct fsi_priv *fsi, int enable)
val = enable ? mask : 0;

fsi_is_port_a(fsi) ?
fsi_master_mask_set(master, master->core->a_mclk, mask, val) :
fsi_master_mask_set(master, master->core->b_mclk, mask, val);
fsi_core_mask_set(master, a_mclk, mask, val) :
fsi_core_mask_set(master, b_mclk, mask, val);
}

/*
Expand Down

0 comments on commit 137404e

Please sign in to comment.