Message ID | 20230324094205.33266-3-angelogioacchino.delregno@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | MediaTek Helio X10 MT6795 - MT6331/6332 PMIC Wrapper | expand |
Le ven. 24 mars 2023 à 10:42, AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> a écrit : > > The PMIC read test is performed in two places: pwrap_init_dual_io() > and pwrap_init_sidly(). > In preparation for adding support for PMICs requiring a companion > part, move this sequence to a new function pwrap_pmic_read_test(). > > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > drivers/soc/mediatek/mtk-pmic-wrap.c | 32 +++++++++++++++++----------- > 1 file changed, 20 insertions(+), 12 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pmic-wrap.c b/drivers/soc/mediatek/mtk-pmic-wrap.c > index 15789a03e6c6..5c500be48f7c 100644 > --- a/drivers/soc/mediatek/mtk-pmic-wrap.c > +++ b/drivers/soc/mediatek/mtk-pmic-wrap.c > @@ -1455,6 +1455,18 @@ static int pwrap_regmap_write(void *context, u32 adr, u32 wdata) > return pwrap_write(context, adr, wdata); > } > > +static bool pwrap_pmic_read_test(struct pmic_wrapper *wrp, const u32 *dew_regs, > + u16 read_test_val) > +{ > + bool is_success; > + u32 rdata; > + > + pwrap_read(wrp, dew_regs[PWRAP_DEW_READ_TEST], &rdata); > + is_success = ((rdata & U16_MAX) == read_test_val); > + > + return is_success; > +} > + > static int pwrap_reset_spislave(struct pmic_wrapper *wrp) > { > bool tmp; > @@ -1498,18 +1510,18 @@ static int pwrap_reset_spislave(struct pmic_wrapper *wrp) > */ > static int pwrap_init_sidly(struct pmic_wrapper *wrp) > { > - u32 rdata; > u32 i; > u32 pass = 0; > + bool read_ok; > signed char dly[16] = { > -1, 0, 1, 0, 2, -1, 1, 1, 3, -1, -1, -1, 3, -1, 2, 1 > }; > > for (i = 0; i < 4; i++) { > pwrap_writel(wrp, i, PWRAP_SIDLY); > - pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], > - &rdata); > - if (rdata == PWRAP_DEW_READ_TEST_VAL) { > + read_ok = pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, > + PWRAP_DEW_READ_TEST_VAL); > + if (read_ok) { > dev_dbg(wrp->dev, "[Read Test] pass, SIDLY=%x\n", i); > pass |= 1 << i; > } > @@ -1529,8 +1541,7 @@ static int pwrap_init_sidly(struct pmic_wrapper *wrp) > static int pwrap_init_dual_io(struct pmic_wrapper *wrp) > { > int ret; > - bool tmp; > - u32 rdata; > + bool read_ok, tmp; > > /* Enable dual IO mode */ > pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1); > @@ -1546,12 +1557,9 @@ static int pwrap_init_dual_io(struct pmic_wrapper *wrp) > pwrap_writel(wrp, 1, PWRAP_DIO_EN); > > /* Read Test */ > - pwrap_read(wrp, > - wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], &rdata); > - if (rdata != PWRAP_DEW_READ_TEST_VAL) { > - dev_err(wrp->dev, > - "Read failed on DIO mode: 0x%04x!=0x%04x\n", > - PWRAP_DEW_READ_TEST_VAL, rdata); > + read_ok = pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, PWRAP_DEW_READ_TEST_VAL); > + if (!read_ok) { > + dev_err(wrp->dev, "Read failed on DIO mode.\n"); > return -EFAULT; > } Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com> Regards, Alexandre
diff --git a/drivers/soc/mediatek/mtk-pmic-wrap.c b/drivers/soc/mediatek/mtk-pmic-wrap.c index 15789a03e6c6..5c500be48f7c 100644 --- a/drivers/soc/mediatek/mtk-pmic-wrap.c +++ b/drivers/soc/mediatek/mtk-pmic-wrap.c @@ -1455,6 +1455,18 @@ static int pwrap_regmap_write(void *context, u32 adr, u32 wdata) return pwrap_write(context, adr, wdata); } +static bool pwrap_pmic_read_test(struct pmic_wrapper *wrp, const u32 *dew_regs, + u16 read_test_val) +{ + bool is_success; + u32 rdata; + + pwrap_read(wrp, dew_regs[PWRAP_DEW_READ_TEST], &rdata); + is_success = ((rdata & U16_MAX) == read_test_val); + + return is_success; +} + static int pwrap_reset_spislave(struct pmic_wrapper *wrp) { bool tmp; @@ -1498,18 +1510,18 @@ static int pwrap_reset_spislave(struct pmic_wrapper *wrp) */ static int pwrap_init_sidly(struct pmic_wrapper *wrp) { - u32 rdata; u32 i; u32 pass = 0; + bool read_ok; signed char dly[16] = { -1, 0, 1, 0, 2, -1, 1, 1, 3, -1, -1, -1, 3, -1, 2, 1 }; for (i = 0; i < 4; i++) { pwrap_writel(wrp, i, PWRAP_SIDLY); - pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], - &rdata); - if (rdata == PWRAP_DEW_READ_TEST_VAL) { + read_ok = pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, + PWRAP_DEW_READ_TEST_VAL); + if (read_ok) { dev_dbg(wrp->dev, "[Read Test] pass, SIDLY=%x\n", i); pass |= 1 << i; } @@ -1529,8 +1541,7 @@ static int pwrap_init_sidly(struct pmic_wrapper *wrp) static int pwrap_init_dual_io(struct pmic_wrapper *wrp) { int ret; - bool tmp; - u32 rdata; + bool read_ok, tmp; /* Enable dual IO mode */ pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1); @@ -1546,12 +1557,9 @@ static int pwrap_init_dual_io(struct pmic_wrapper *wrp) pwrap_writel(wrp, 1, PWRAP_DIO_EN); /* Read Test */ - pwrap_read(wrp, - wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], &rdata); - if (rdata != PWRAP_DEW_READ_TEST_VAL) { - dev_err(wrp->dev, - "Read failed on DIO mode: 0x%04x!=0x%04x\n", - PWRAP_DEW_READ_TEST_VAL, rdata); + read_ok = pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, PWRAP_DEW_READ_TEST_VAL); + if (!read_ok) { + dev_err(wrp->dev, "Read failed on DIO mode.\n"); return -EFAULT; }
The PMIC read test is performed in two places: pwrap_init_dual_io() and pwrap_init_sidly(). In preparation for adding support for PMICs requiring a companion part, move this sequence to a new function pwrap_pmic_read_test(). Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> --- drivers/soc/mediatek/mtk-pmic-wrap.c | 32 +++++++++++++++++----------- 1 file changed, 20 insertions(+), 12 deletions(-)