Loading sound/soc/sh/rcar/cmd.c +20 −16 Original line number Diff line number Diff line Loading @@ -31,23 +31,24 @@ static int rsnd_cmd_init(struct rsnd_mod *mod, struct rsnd_mod *mix = rsnd_io_to_mod_mix(io); struct device *dev = rsnd_priv_to_dev(priv); u32 data; u32 path[] = { [1] = 1 << 0, [5] = 1 << 8, [6] = 1 << 12, [9] = 1 << 15, }; if (!mix && !dvc) return 0; if (ARRAY_SIZE(path) < rsnd_mod_id(mod) + 1) return -ENXIO; if (mix) { struct rsnd_dai *rdai; struct rsnd_mod *src; struct rsnd_dai_stream *tio; int i; u32 path[] = { [0] = 0, [1] = 1 << 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1 << 8 }; /* * it is assuming that integrater is well understanding about Loading @@ -70,16 +71,19 @@ static int rsnd_cmd_init(struct rsnd_mod *mod, } else { struct rsnd_mod *src = rsnd_io_to_mod_src(io); u32 path[] = { [0] = 0x30000, [1] = 0x30001, [2] = 0x40000, [3] = 0x10000, [4] = 0x20000, [5] = 0x40100 u8 cmd_case[] = { [0] = 0x3, [1] = 0x3, [2] = 0x4, [3] = 0x1, [4] = 0x2, [5] = 0x4, [6] = 0x1, [9] = 0x2, }; data = path[rsnd_mod_id(src)]; data = path[rsnd_mod_id(src)] | cmd_case[rsnd_mod_id(src)] << 16; } dev_dbg(dev, "ctu/mix path = 0x%08x", data); Loading sound/soc/sh/rcar/dma.c +16 −2 Original line number Diff line number Diff line Loading @@ -454,6 +454,20 @@ static u32 rsnd_dmapp_read(struct rsnd_dma *dma, u32 reg) return ioread32(rsnd_dmapp_addr(dmac, dma, reg)); } static void rsnd_dmapp_bset(struct rsnd_dma *dma, u32 data, u32 mask, u32 reg) { struct rsnd_mod *mod = rsnd_mod_get(dma); struct rsnd_priv *priv = rsnd_mod_to_priv(mod); struct rsnd_dma_ctrl *dmac = rsnd_priv_to_dmac(priv); void __iomem *addr = rsnd_dmapp_addr(dmac, dma, reg); u32 val = ioread32(addr); val &= ~mask; val |= (data & mask); iowrite32(val, addr); } static int rsnd_dmapp_stop(struct rsnd_mod *mod, struct rsnd_dai_stream *io, struct rsnd_priv *priv) Loading @@ -461,10 +475,10 @@ static int rsnd_dmapp_stop(struct rsnd_mod *mod, struct rsnd_dma *dma = rsnd_mod_to_dma(mod); int i; rsnd_dmapp_write(dma, 0, PDMACHCR); rsnd_dmapp_bset(dma, 0, PDMACHCR_DE, PDMACHCR); for (i = 0; i < 1024; i++) { if (0 == rsnd_dmapp_read(dma, PDMACHCR)) if (0 == (rsnd_dmapp_read(dma, PDMACHCR) & PDMACHCR_DE)) return 0; udelay(1); } Loading sound/soc/sh/rcar/ssiu.c +5 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,11 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod, mask1 = (1 << 4) | (1 << 20); /* mask sync bit */ mask2 = (1 << 4); /* mask sync bit */ val1 = val2 = 0; if (rsnd_ssi_is_pin_sharing(io)) { if (id == 8) { /* * SSI8 pin is sharing with SSI7, nothing to do. */ } else if (rsnd_ssi_is_pin_sharing(io)) { int shift = -1; switch (id) { Loading Loading
sound/soc/sh/rcar/cmd.c +20 −16 Original line number Diff line number Diff line Loading @@ -31,23 +31,24 @@ static int rsnd_cmd_init(struct rsnd_mod *mod, struct rsnd_mod *mix = rsnd_io_to_mod_mix(io); struct device *dev = rsnd_priv_to_dev(priv); u32 data; u32 path[] = { [1] = 1 << 0, [5] = 1 << 8, [6] = 1 << 12, [9] = 1 << 15, }; if (!mix && !dvc) return 0; if (ARRAY_SIZE(path) < rsnd_mod_id(mod) + 1) return -ENXIO; if (mix) { struct rsnd_dai *rdai; struct rsnd_mod *src; struct rsnd_dai_stream *tio; int i; u32 path[] = { [0] = 0, [1] = 1 << 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1 << 8 }; /* * it is assuming that integrater is well understanding about Loading @@ -70,16 +71,19 @@ static int rsnd_cmd_init(struct rsnd_mod *mod, } else { struct rsnd_mod *src = rsnd_io_to_mod_src(io); u32 path[] = { [0] = 0x30000, [1] = 0x30001, [2] = 0x40000, [3] = 0x10000, [4] = 0x20000, [5] = 0x40100 u8 cmd_case[] = { [0] = 0x3, [1] = 0x3, [2] = 0x4, [3] = 0x1, [4] = 0x2, [5] = 0x4, [6] = 0x1, [9] = 0x2, }; data = path[rsnd_mod_id(src)]; data = path[rsnd_mod_id(src)] | cmd_case[rsnd_mod_id(src)] << 16; } dev_dbg(dev, "ctu/mix path = 0x%08x", data); Loading
sound/soc/sh/rcar/dma.c +16 −2 Original line number Diff line number Diff line Loading @@ -454,6 +454,20 @@ static u32 rsnd_dmapp_read(struct rsnd_dma *dma, u32 reg) return ioread32(rsnd_dmapp_addr(dmac, dma, reg)); } static void rsnd_dmapp_bset(struct rsnd_dma *dma, u32 data, u32 mask, u32 reg) { struct rsnd_mod *mod = rsnd_mod_get(dma); struct rsnd_priv *priv = rsnd_mod_to_priv(mod); struct rsnd_dma_ctrl *dmac = rsnd_priv_to_dmac(priv); void __iomem *addr = rsnd_dmapp_addr(dmac, dma, reg); u32 val = ioread32(addr); val &= ~mask; val |= (data & mask); iowrite32(val, addr); } static int rsnd_dmapp_stop(struct rsnd_mod *mod, struct rsnd_dai_stream *io, struct rsnd_priv *priv) Loading @@ -461,10 +475,10 @@ static int rsnd_dmapp_stop(struct rsnd_mod *mod, struct rsnd_dma *dma = rsnd_mod_to_dma(mod); int i; rsnd_dmapp_write(dma, 0, PDMACHCR); rsnd_dmapp_bset(dma, 0, PDMACHCR_DE, PDMACHCR); for (i = 0; i < 1024; i++) { if (0 == rsnd_dmapp_read(dma, PDMACHCR)) if (0 == (rsnd_dmapp_read(dma, PDMACHCR) & PDMACHCR_DE)) return 0; udelay(1); } Loading
sound/soc/sh/rcar/ssiu.c +5 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,11 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod, mask1 = (1 << 4) | (1 << 20); /* mask sync bit */ mask2 = (1 << 4); /* mask sync bit */ val1 = val2 = 0; if (rsnd_ssi_is_pin_sharing(io)) { if (id == 8) { /* * SSI8 pin is sharing with SSI7, nothing to do. */ } else if (rsnd_ssi_is_pin_sharing(io)) { int shift = -1; switch (id) { Loading