soc: mediatek: pwrap: Move PMIC read test sequence in function
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Wed, 12 Apr 2023 13:12:12 +0000 (15:12 +0200)
committerMatthias Brugger <matthias.bgg@gmail.com>
Mon, 29 May 2023 13:26:44 +0000 (15:26 +0200)
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>
Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
Link: https://lore.kernel.org/r/20230412131216.198313-3-angelogioacchino.delregno@collabora.com
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
drivers/soc/mediatek/mtk-pmic-wrap.c

index 15789a0..5c500be 100644 (file)
@@ -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;
        }