[v2,2/6] soc: mediatek: pwrap: Move PMIC read test sequence in function
Commit Message
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(-)
Comments
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
@@ -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;
}