summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolin Chen <nicoleotsuka@gmail.com>2017-12-17 21:52:08 -0500
committerMark Brown <broonie@kernel.org>2017-12-19 04:24:57 -0500
commit2474e4037c4e3fe8b4fe4ab37232973d9b17a573 (patch)
tree8d8e378af599eabe19ceaa4bb3a5c09520a23d62
parentff4adb090066c1636a43b88a497c34d2bd2312ec (diff)
ASoC: fsl_ssi: Replace fsl_ssi_rxtx_reg_val with fsl_ssi_regvals
The name fsl_ssi_rxtx_reg_val is too long to read comfortably. So this patch shortens it by using an array (fsl_ssi_regvals, renamed from fsl_ssi_reg_val). To do that, it also introduces two macros (TX and RX) to replace the wrapper structure. This will also help further cleanups. Meanwhile, it unifies all local variable with the name "vals" to get rid of the name "reg" -- could be confusing with "regs" in the private struct for regmap. Signed-off-by: Nicolin Chen <nicoleotsuka@gmail.com> Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name> Reviewed-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name> Acked-by: Timur Tabi <timur@tabi.org> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/fsl/fsl_ssi.c79
-rw-r--r--sound/soc/fsl/fsl_ssi.h3
2 files changed, 40 insertions, 42 deletions
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index af3ba718d4bb..aef014c46d96 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -106,18 +106,13 @@ enum fsl_ssi_type {
106 FSL_SSI_MX51, 106 FSL_SSI_MX51,
107}; 107};
108 108
109struct fsl_ssi_reg_val { 109struct fsl_ssi_regvals {
110 u32 sier; 110 u32 sier;
111 u32 srcr; 111 u32 srcr;
112 u32 stcr; 112 u32 stcr;
113 u32 scr; 113 u32 scr;
114}; 114};
115 115
116struct fsl_ssi_rxtx_reg_val {
117 struct fsl_ssi_reg_val rx;
118 struct fsl_ssi_reg_val tx;
119};
120
121static bool fsl_ssi_readable_reg(struct device *dev, unsigned int reg) 116static bool fsl_ssi_readable_reg(struct device *dev, unsigned int reg)
122{ 117{
123 switch (reg) { 118 switch (reg) {
@@ -213,7 +208,7 @@ struct fsl_ssi_soc_data {
213 * @fifo_depth: Depth of the SSI FIFOs 208 * @fifo_depth: Depth of the SSI FIFOs
214 * @slot_width: Width of each DAI slot 209 * @slot_width: Width of each DAI slot
215 * @slots: Number of slots 210 * @slots: Number of slots
216 * @rxtx_reg_val: Specific RX/TX register settings 211 * @regvals: Specific RX/TX register settings
217 * 212 *
218 * @clk: Clock source to access register 213 * @clk: Clock source to access register
219 * @baudclk: Clock source to generate bit and frame-sync clocks 214 * @baudclk: Clock source to generate bit and frame-sync clocks
@@ -257,7 +252,7 @@ struct fsl_ssi {
257 unsigned int fifo_depth; 252 unsigned int fifo_depth;
258 unsigned int slot_width; 253 unsigned int slot_width;
259 unsigned int slots; 254 unsigned int slots;
260 struct fsl_ssi_rxtx_reg_val rxtx_reg_val; 255 struct fsl_ssi_regvals regvals[2];
261 256
262 struct clk *clk; 257 struct clk *clk;
263 struct clk *baudclk; 258 struct clk *baudclk;
@@ -386,25 +381,25 @@ static irqreturn_t fsl_ssi_isr(int irq, void *dev_id)
386static void fsl_ssi_rxtx_config(struct fsl_ssi *ssi, bool enable) 381static void fsl_ssi_rxtx_config(struct fsl_ssi *ssi, bool enable)
387{ 382{
388 struct regmap *regs = ssi->regs; 383 struct regmap *regs = ssi->regs;
389 struct fsl_ssi_rxtx_reg_val *vals = &ssi->rxtx_reg_val; 384 struct fsl_ssi_regvals *vals = ssi->regvals;
390 385
391 if (enable) { 386 if (enable) {
392 regmap_update_bits(regs, REG_SSI_SIER, 387 regmap_update_bits(regs, REG_SSI_SIER,
393 vals->rx.sier | vals->tx.sier, 388 vals[RX].sier | vals[TX].sier,
394 vals->rx.sier | vals->tx.sier); 389 vals[RX].sier | vals[TX].sier);
395 regmap_update_bits(regs, REG_SSI_SRCR, 390 regmap_update_bits(regs, REG_SSI_SRCR,
396 vals->rx.srcr | vals->tx.srcr, 391 vals[RX].srcr | vals[TX].srcr,
397 vals->rx.srcr | vals->tx.srcr); 392 vals[RX].srcr | vals[TX].srcr);
398 regmap_update_bits(regs, REG_SSI_STCR, 393 regmap_update_bits(regs, REG_SSI_STCR,
399 vals->rx.stcr | vals->tx.stcr, 394 vals[RX].stcr | vals[TX].stcr,
400 vals->rx.stcr | vals->tx.stcr); 395 vals[RX].stcr | vals[TX].stcr);
401 } else { 396 } else {
402 regmap_update_bits(regs, REG_SSI_SRCR, 397 regmap_update_bits(regs, REG_SSI_SRCR,
403 vals->rx.srcr | vals->tx.srcr, 0); 398 vals[RX].srcr | vals[TX].srcr, 0);
404 regmap_update_bits(regs, REG_SSI_STCR, 399 regmap_update_bits(regs, REG_SSI_STCR,
405 vals->rx.stcr | vals->tx.stcr, 0); 400 vals[RX].stcr | vals[TX].stcr, 0);
406 regmap_update_bits(regs, REG_SSI_SIER, 401 regmap_update_bits(regs, REG_SSI_SIER,
407 vals->rx.sier | vals->tx.sier, 0); 402 vals[RX].sier | vals[TX].sier, 0);
408 } 403 }
409} 404}
410 405
@@ -446,10 +441,10 @@ static void fsl_ssi_fifo_clear(struct fsl_ssi *ssi, bool is_rx)
446 * Enable or disable SSI configuration. 441 * Enable or disable SSI configuration.
447 */ 442 */
448static void fsl_ssi_config(struct fsl_ssi *ssi, bool enable, 443static void fsl_ssi_config(struct fsl_ssi *ssi, bool enable,
449 struct fsl_ssi_reg_val *vals) 444 struct fsl_ssi_regvals *vals)
450{ 445{
451 struct regmap *regs = ssi->regs; 446 struct regmap *regs = ssi->regs;
452 struct fsl_ssi_reg_val *avals; 447 struct fsl_ssi_regvals *avals;
453 int nr_active_streams; 448 int nr_active_streams;
454 u32 scr; 449 u32 scr;
455 int keep_active; 450 int keep_active;
@@ -464,10 +459,10 @@ static void fsl_ssi_config(struct fsl_ssi *ssi, bool enable,
464 keep_active = 0; 459 keep_active = 0;
465 460
466 /* Get the opposite direction to keep its values untouched */ 461 /* Get the opposite direction to keep its values untouched */
467 if (&ssi->rxtx_reg_val.rx == vals) 462 if (&ssi->regvals[RX] == vals)
468 avals = &ssi->rxtx_reg_val.tx; 463 avals = &ssi->regvals[TX];
469 else 464 else
470 avals = &ssi->rxtx_reg_val.rx; 465 avals = &ssi->regvals[RX];
471 466
472 if (!enable) { 467 if (!enable) {
473 /* 468 /*
@@ -558,7 +553,7 @@ config_done:
558 553
559static void fsl_ssi_rx_config(struct fsl_ssi *ssi, bool enable) 554static void fsl_ssi_rx_config(struct fsl_ssi *ssi, bool enable)
560{ 555{
561 fsl_ssi_config(ssi, enable, &ssi->rxtx_reg_val.rx); 556 fsl_ssi_config(ssi, enable, &ssi->regvals[RX]);
562} 557}
563 558
564static void fsl_ssi_tx_ac97_saccst_setup(struct fsl_ssi *ssi) 559static void fsl_ssi_tx_ac97_saccst_setup(struct fsl_ssi *ssi)
@@ -586,39 +581,39 @@ static void fsl_ssi_tx_config(struct fsl_ssi *ssi, bool enable)
586 if (enable && fsl_ssi_is_ac97(ssi)) 581 if (enable && fsl_ssi_is_ac97(ssi))
587 fsl_ssi_tx_ac97_saccst_setup(ssi); 582 fsl_ssi_tx_ac97_saccst_setup(ssi);
588 583
589 fsl_ssi_config(ssi, enable, &ssi->rxtx_reg_val.tx); 584 fsl_ssi_config(ssi, enable, &ssi->regvals[TX]);
590} 585}
591 586
592/** 587/**
593 * Cache critical bits of SIER, SRCR, STCR and SCR to later set them safely 588 * Cache critical bits of SIER, SRCR, STCR and SCR to later set them safely
594 */ 589 */
595static void fsl_ssi_setup_reg_vals(struct fsl_ssi *ssi) 590static void fsl_ssi_setup_regvals(struct fsl_ssi *ssi)
596{ 591{
597 struct fsl_ssi_rxtx_reg_val *reg = &ssi->rxtx_reg_val; 592 struct fsl_ssi_regvals *vals = ssi->regvals;
598 593
599 reg->rx.sier = SSI_SIER_RFF0_EN; 594 vals[RX].sier = SSI_SIER_RFF0_EN;
600 reg->rx.srcr = SSI_SRCR_RFEN0; 595 vals[RX].srcr = SSI_SRCR_RFEN0;
601 reg->rx.scr = 0; 596 vals[RX].scr = 0;
602 reg->tx.sier = SSI_SIER_TFE0_EN; 597 vals[TX].sier = SSI_SIER_TFE0_EN;
603 reg->tx.stcr = SSI_STCR_TFEN0; 598 vals[TX].stcr = SSI_STCR_TFEN0;
604 reg->tx.scr = 0; 599 vals[TX].scr = 0;
605 600
606 /* AC97 has already enabled SSIEN, RE and TE, so ignore them */ 601 /* AC97 has already enabled SSIEN, RE and TE, so ignore them */
607 if (!fsl_ssi_is_ac97(ssi)) { 602 if (!fsl_ssi_is_ac97(ssi)) {
608 reg->rx.scr = SSI_SCR_SSIEN | SSI_SCR_RE; 603 vals[RX].scr = SSI_SCR_SSIEN | SSI_SCR_RE;
609 reg->tx.scr = SSI_SCR_SSIEN | SSI_SCR_TE; 604 vals[TX].scr = SSI_SCR_SSIEN | SSI_SCR_TE;
610 } 605 }
611 606
612 if (ssi->use_dma) { 607 if (ssi->use_dma) {
613 reg->rx.sier |= SSI_SIER_RDMAE; 608 vals[RX].sier |= SSI_SIER_RDMAE;
614 reg->tx.sier |= SSI_SIER_TDMAE; 609 vals[TX].sier |= SSI_SIER_TDMAE;
615 } else { 610 } else {
616 reg->rx.sier |= SSI_SIER_RIE; 611 vals[RX].sier |= SSI_SIER_RIE;
617 reg->tx.sier |= SSI_SIER_TIE; 612 vals[TX].sier |= SSI_SIER_TIE;
618 } 613 }
619 614
620 reg->rx.sier |= FSLSSI_SIER_DBG_RX_FLAGS; 615 vals[RX].sier |= FSLSSI_SIER_DBG_RX_FLAGS;
621 reg->tx.sier |= FSLSSI_SIER_DBG_TX_FLAGS; 616 vals[TX].sier |= FSLSSI_SIER_DBG_TX_FLAGS;
622} 617}
623 618
624static void fsl_ssi_setup_ac97(struct fsl_ssi *ssi) 619static void fsl_ssi_setup_ac97(struct fsl_ssi *ssi)
@@ -892,7 +887,7 @@ static int _fsl_ssi_set_dai_fmt(struct device *dev,
892 return -EINVAL; 887 return -EINVAL;
893 } 888 }
894 889
895 fsl_ssi_setup_reg_vals(ssi); 890 fsl_ssi_setup_regvals(ssi);
896 891
897 regmap_read(regs, REG_SSI_SCR, &scr); 892 regmap_read(regs, REG_SSI_SCR, &scr);
898 scr &= ~(SSI_SCR_SYN | SSI_SCR_I2S_MODE_MASK); 893 scr &= ~(SSI_SCR_SYN | SSI_SCR_I2S_MODE_MASK);
diff --git a/sound/soc/fsl/fsl_ssi.h b/sound/soc/fsl/fsl_ssi.h
index fe38e6913f96..52b88f1d6c6f 100644
--- a/sound/soc/fsl/fsl_ssi.h
+++ b/sound/soc/fsl/fsl_ssi.h
@@ -12,6 +12,9 @@
12#ifndef _MPC8610_I2S_H 12#ifndef _MPC8610_I2S_H
13#define _MPC8610_I2S_H 13#define _MPC8610_I2S_H
14 14
15#define RX 0
16#define TX 1
17
15/* -- SSI Register Map -- */ 18/* -- SSI Register Map -- */
16 19
17/* SSI Transmit Data Register 0 */ 20/* SSI Transmit Data Register 0 */