To make debugging easier, switch the driver to use regmap
from conventional io calls.

Signed-off-by: Jagan Teki <ja...@edgeble.ai>
---
 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 81 ++++++++++++-------
 1 file changed, 54 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c 
b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 47bd69d5ac99..62a160af4047 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -15,6 +15,7 @@
 #include <linux/module.h>
 #include <linux/of_device.h>
 #include <linux/pm_runtime.h>
+#include <linux/regmap.h>
 #include <linux/reset.h>
 
 #include <video/mipi_display.h>
@@ -242,7 +243,7 @@ struct dw_mipi_dsi {
        struct mipi_dsi_host dsi_host;
        struct drm_bridge *panel_bridge;
        struct device *dev;
-       void __iomem *base;
+       struct regmap *regmap;
 
        struct clk *pclk;
 
@@ -301,12 +302,16 @@ static inline struct dw_mipi_dsi *bridge_to_dsi(struct 
drm_bridge *bridge)
 
 static inline void dsi_write(struct dw_mipi_dsi *dsi, u32 reg, u32 val)
 {
-       writel(val, dsi->base + reg);
+       regmap_write(dsi->regmap, reg, val);
 }
 
 static inline u32 dsi_read(struct dw_mipi_dsi *dsi, u32 reg)
 {
-       return readl(dsi->base + reg);
+       u32 val;
+
+       regmap_read(dsi->regmap, reg, &val);
+
+       return val;
 }
 
 static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
@@ -332,6 +337,7 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host 
*host,
        if (IS_ERR(bridge))
                return PTR_ERR(bridge);
 
+       dev_info(host->dev, "Attached device %s\n", device->name);
        dsi->panel_bridge = bridge;
 
        drm_bridge_add(&dsi->bridge);
@@ -400,9 +406,9 @@ static int dw_mipi_dsi_gen_pkt_hdr_write(struct dw_mipi_dsi 
*dsi, u32 hdr_val)
        int ret;
        u32 val, mask;
 
-       ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
-                                val, !(val & GEN_CMD_FULL), 1000,
-                                CMD_PKT_STATUS_TIMEOUT_US);
+       ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+                                      val, !(val & GEN_CMD_FULL), 1000,
+                                      CMD_PKT_STATUS_TIMEOUT_US);
        if (ret) {
                dev_err(dsi->dev, "failed to get available command FIFO\n");
                return ret;
@@ -411,9 +417,9 @@ static int dw_mipi_dsi_gen_pkt_hdr_write(struct dw_mipi_dsi 
*dsi, u32 hdr_val)
        dsi_write(dsi, DSI_GEN_HDR, hdr_val);
 
        mask = GEN_CMD_EMPTY | GEN_PLD_W_EMPTY;
-       ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
-                                val, (val & mask) == mask,
-                                1000, CMD_PKT_STATUS_TIMEOUT_US);
+       ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+                                      val, (val & mask) == mask,
+                                      1000, CMD_PKT_STATUS_TIMEOUT_US);
        if (ret) {
                dev_err(dsi->dev, "failed to write command FIFO\n");
                return ret;
@@ -443,9 +449,9 @@ static int dw_mipi_dsi_write(struct dw_mipi_dsi *dsi,
                        len -= pld_data_bytes;
                }
 
-               ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
-                                        val, !(val & GEN_PLD_W_FULL), 1000,
-                                        CMD_PKT_STATUS_TIMEOUT_US);
+               ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+                                              val, !(val & GEN_PLD_W_FULL), 
1000,
+                                              CMD_PKT_STATUS_TIMEOUT_US);
                if (ret) {
                        dev_err(dsi->dev,
                                "failed to get available write payload FIFO\n");
@@ -466,9 +472,9 @@ static int dw_mipi_dsi_read(struct dw_mipi_dsi *dsi,
        u32 val;
 
        /* Wait end of the read operation */
-       ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
-                                val, !(val & GEN_RD_CMD_BUSY),
-                                1000, CMD_PKT_STATUS_TIMEOUT_US);
+       ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+                                      val, !(val & GEN_RD_CMD_BUSY), 1000,
+                                      CMD_PKT_STATUS_TIMEOUT_US);
        if (ret) {
                dev_err(dsi->dev, "Timeout during read operation\n");
                return ret;
@@ -476,9 +482,9 @@ static int dw_mipi_dsi_read(struct dw_mipi_dsi *dsi,
 
        for (i = 0; i < len; i += 4) {
                /* Read fifo must not be empty before all bytes are read */
-               ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
-                                        val, !(val & GEN_PLD_R_EMPTY),
-                                        1000, CMD_PKT_STATUS_TIMEOUT_US);
+               ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+                                              val, !(val & GEN_PLD_R_EMPTY), 
1000,
+                                              CMD_PKT_STATUS_TIMEOUT_US);
                if (ret) {
                        dev_err(dsi->dev, "Read payload FIFO is empty\n");
                        return ret;
@@ -499,6 +505,9 @@ static ssize_t dw_mipi_dsi_host_transfer(struct 
mipi_dsi_host *host,
        struct mipi_dsi_packet packet;
        int ret, nb_bytes;
 
+       DRM_INFO("%x %x %x\n", msg->type,
+                ((((u8 *)msg->tx_buf)[0] << 8) >> 8),
+                ((((u8 *)msg->tx_buf)[1] << 16)) >> 16);
        ret = mipi_dsi_create_packet(&packet, msg);
        if (ret) {
                dev_err(dsi->dev, "failed to create packet: %d\n", ret);
@@ -828,17 +837,18 @@ static void dw_mipi_dsi_dphy_enable(struct dw_mipi_dsi 
*dsi)
        u32 val;
        int ret;
 
-       dsi_write(dsi, DSI_PHY_RSTZ, PHY_ENFORCEPLL | PHY_ENABLECLK |
+       dsi_write(dsi, DSI_PHY_RSTZ, PHY_ENABLECLK |
                  PHY_UNRSTZ | PHY_UNSHUTDOWNZ);
 
-       ret = readl_poll_timeout(dsi->base + DSI_PHY_STATUS, val,
-                                val & PHY_LOCK, 1000, PHY_STATUS_TIMEOUT_US);
+       ret = regmap_read_poll_timeout(dsi->regmap, DSI_PHY_STATUS,
+                                      val, val & PHY_LOCK, 1000,
+                                      PHY_STATUS_TIMEOUT_US);
        if (ret)
                DRM_DEBUG_DRIVER("failed to wait phy lock state\n");
 
-       ret = readl_poll_timeout(dsi->base + DSI_PHY_STATUS,
-                                val, val & PHY_STOP_STATE_CLK_LANE, 1000,
-                                PHY_STATUS_TIMEOUT_US);
+       ret = regmap_read_poll_timeout(dsi->regmap, DSI_PHY_STATUS,
+                                      val, val & PHY_STOP_STATE_CLK_LANE, 1000,
+                                      PHY_STATUS_TIMEOUT_US);
        if (ret)
                DRM_DEBUG_DRIVER("failed to wait phy clk lane stop state\n");
 }
@@ -1103,6 +1113,14 @@ static void dw_mipi_dsi_debugfs_remove(struct 
dw_mipi_dsi *dsi) { }
 
 #endif /* CONFIG_DEBUG_FS */
 
+static const struct regmap_config dw_mipi_dsi_regmap_config = {
+       .name = "dw-mipi-dsi",
+       .reg_bits = 32,
+       .val_bits = 32,
+       .reg_stride = 4,
+       .max_register = DSI_INT_MSK1,
+};
+
 static struct dw_mipi_dsi *
 __dw_mipi_dsi_probe(struct platform_device *pdev,
                    const struct dw_mipi_dsi_plat_data *plat_data)
@@ -1110,6 +1128,7 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
        struct device *dev = &pdev->dev;
        struct reset_control *apb_rst;
        struct dw_mipi_dsi *dsi;
+       void __iomem *base;
        int ret;
 
        dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL);
@@ -1126,12 +1145,20 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
        }
 
        if (!plat_data->base) {
-               dsi->base = devm_platform_ioremap_resource(pdev, 0);
-               if (IS_ERR(dsi->base))
+               base = devm_platform_ioremap_resource(pdev, 0);
+               if (IS_ERR(base))
                        return ERR_PTR(-ENODEV);
 
        } else {
-               dsi->base = plat_data->base;
+               base = plat_data->base;
+       }
+
+       dsi->regmap = devm_regmap_init_mmio(dev, base,
+                                           &dw_mipi_dsi_regmap_config);
+       if (IS_ERR(dsi->regmap)) {
+               ret = PTR_ERR(dsi->regmap);
+               dev_err(dev, "failed to init register map\n");
+               return ERR_PTR(ret);
        }
 
        dsi->pclk = devm_clk_get(dev, "pclk");
-- 
2.25.1

Reply via email to