aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHiromitsu Yamasaki <hiromitsu.yamasaki.ym@renesas.com>2017-04-06 20:24:56 +0900
committerHiromitsu Yamasaki <hiromitsu.yamasaki.ym@renesas.com>2017-04-11 14:37:33 +0900
commit098ccf1c9b89109f63fef6d1f6294b29bb5cafba (patch)
tree4309e7b9f9e47930d44efbdcbdfa3e44ea1d7f65
parent2ab35053049620d03f8a729ad6028711bad9a54e (diff)
downloadrenesas-bsp-v4.9/rcar-3.5.3.tar.gz
sh-msiof: Fix SPI division value setting of r8a7796 based on hardware specificationrcar-3.5.3v4.9/rcar-3.5.3
R8A7796 has a hardware limitation on the division value of SPI. BRPS x BRDV = 1/1 is valid only in R-CarH3. (R-Car M3-W have BRPS x BRDV = 1/2 min). Signed-off-by: Hiromitsu Yamasaki <hiromitsu.yamasaki.ym@renesas.com>
-rw-r--r--drivers/spi/spi-sh-msiof.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index 045ee757cc38ed..fa8469582227c9 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -198,12 +198,15 @@ struct sh_msiof_spi_priv {
/* Check LSI revisions and set specific quirk value */
#define TRANSFER_WORKAROUND_H3WS10 BIT(0) /* H3ES1.0 workaround */
#define TRANSFER_WORKAROUND_H3WS11 BIT(1) /* H3ES1.1 workaround */
+#define UNDIVIDED_PROHIBIT BIT(2) /* Prohibition of 1/1 division */
static const struct soc_device_attribute rcar_quirks_match[] = {
{ .soc_id = "r8a7795", .revision = "ES1.0",
.data = (void *)TRANSFER_WORKAROUND_H3WS10, },
{ .soc_id = "r8a7795", .revision = "ES1.1",
.data = (void *)TRANSFER_WORKAROUND_H3WS11, },
+ { .soc_id = "r8a7796",
+ .data = (void *)UNDIVIDED_PROHIBIT, },
{/*sentinel*/},
};
@@ -319,6 +322,10 @@ static void sh_msiof_spi_set_clk_regs(struct sh_msiof_spi_priv *p,
/* SCR_BRDV_DIV_1 is valid only if BRPS is x 1/1 or x 1/2 */
if (sh_msiof_spi_div_table[k].div == 1 && brps > 2)
continue;
+ /* r8a7796 is invalid only when BRPS x BRDV = 1/1 */
+ if ((p->quirks & UNDIVIDED_PROHIBIT) &&
+ sh_msiof_spi_div_table[k].div == 1 && brps == 1)
+ continue;
if (brps <= 32) /* max of brdv is 32 */
break;
}